diff --git a/INSTALL b/INSTALL index 3642a5c..befef11 100644 --- a/INSTALL +++ b/INSTALL @@ -21,15 +21,12 @@ Dependencies - OpenCV Download the source code https://github.com/Itseez/opencv/archive/3.0.0-alpha.zip To quick install - - $ cmake-gui, set CMAKE_BUILD_TYPE to Release + $ sudo apt-get install libgtk2.0-dev pkg-config # for opencv imshow + $ cmake-gui, set CMAKE_BUILD_TYPE to Release, Configure & Generate $ cd build directory $ make -j7 $ sudo make install -- libjpeg - This is often present on standard operating systems since it is used by a lot of programs. - It can be downloaded from http://libjpeg.sourceforge.net/ - - This code uses C++11. Some features require gcc >= 4.6. --------------------------- diff --git a/Makefile b/Makefile index 52d6fc4..35ad34e 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ CUDA_LIB=$(CUDA_ROOT)/lib64 CUDAMAT_DIR=$(CURDIR)/cudamat CXX = g++ LIBFLAGS = -L$(LIB) -L$(CUDA_LIB) -L$(CUDAMAT_DIR) -CPPFLAGS = -I$(INC) -I$(CUDA_INC) -I$(SRC) -Ideps -LINKFLAGS = -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_videoio -lhdf5 -ljpeg -lX11 -lpthread -lprotobuf -lcublas -ldl -lgomp -lcudamat -lcudart -Wl,-rpath=$(CUDAMAT_DIR) -Wl,-rpath=$(LIB) -Wl,-rpath=$(CUDA_LIB) +CPPFLAGS = -I$(INC) -I$(CUDA_INC) -I$(SRC) +LINKFLAGS = -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_videoio -lopencv_highgui -lhdf5 -lpthread -lprotobuf -lcublas -ldl -lgomp -lcudamat -lcudart -Wl,-rpath=$(CUDAMAT_DIR) -Wl,-rpath=$(LIB) -Wl,-rpath=$(CUDA_LIB) CXXFLAGS = -O2 -std=c++0x -mtune=native -Wall -Wno-unused-result -Wno-sign-compare -fopenmp ifeq ($(USE_MPI), yes) diff --git a/deps/CImg/CImg.h b/deps/CImg/CImg.h deleted file mode 100644 index 103686f..0000000 --- a/deps/CImg/CImg.h +++ /dev/null @@ -1,46469 +0,0 @@ -/* - # - # File : CImg.h - # ( C++ header file ) - # - # Description : The C++ Template Image Processing Toolkit. - # This file is the main component of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Project manager : David Tschumperle. - # ( http://tschumperle.users.greyc.fr/ ) - # - # A complete list of contributors is available in file 'README.txt' - # distributed within the CImg package. - # - # Licenses : This file is 'dual-licensed', you have to choose one - # of the two licenses below to apply. - # - # CeCILL-C - # The CeCILL-C license is close to the GNU LGPL. - # ( http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html ) - # - # or CeCILL v2.0 - # The CeCILL license is compatible with the GNU GPL. - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed either by the CeCILL or the CeCILL-C license - # under French law and abiding by the rules of distribution of free software. - # You can use, modify and or redistribute the software under the terms of - # the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA - # at the following URL: "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms. - # -*/ - -// Set version number of the library. -#ifndef cimg_version -#define cimg_version 159 - -/*----------------------------------------------------------- - # - # Test and possibly auto-set CImg configuration variables - # and include required headers. - # - # If you find that the default configuration variables are - # not adapted to your system, you can override their values - # before including the header file "CImg.h" - # (use the #define directive). - # - ------------------------------------------------------------*/ - -// Include standard C++ headers. -// This is the minimal set of required headers to make CImg-based codes compile. -#include -#include -#include -#include -#include -#include -#include - -// Detect/configure OS variables. -// -// Define 'cimg_OS' to: '0' for an unknown OS (will try to minize library dependencies). -// '1' for a Unix-like OS (Linux, Solaris, BSD, MacOSX, Irix, ...). -// '2' for Microsoft Windows. -// (auto-detection is performed if 'cimg_OS' is not set by the user). -#ifndef cimg_OS -#if defined(unix) || defined(__unix) || defined(__unix__) \ - || defined(linux) || defined(__linux) || defined(__linux__) \ - || defined(sun) || defined(__sun) \ - || defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) \ - || defined(__FreeBSD__) || defined (__DragonFly__) \ - || defined(sgi) || defined(__sgi) \ - || defined(__MACOSX__) || defined(__APPLE__) \ - || defined(__CYGWIN__) -#define cimg_OS 1 -#elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \ - || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) -#define cimg_OS 2 -#else -#define cimg_OS 0 -#endif -#elif !(cimg_OS==0 || cimg_OS==1 || cimg_OS==2) -#error CImg Library: Invalid configuration variable 'cimg_OS'. -#error (correct values are '0 = unknown OS', '1 = Unix-like OS', '2 = Microsoft Windows'). -#endif - -// Disable silly warnings on some Microsoft VC++ compilers. -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4311) -#pragma warning(disable:4312) -#pragma warning(disable:4800) -#pragma warning(disable:4804) -#pragma warning(disable:4996) -#define _CRT_SECURE_NO_DEPRECATE 1 -#define _CRT_NONSTDC_NO_DEPRECATE 1 -#endif - -// Include OS-specific headers. -#if cimg_OS==1 -#include -#include -#include -#elif cimg_OS==2 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#ifndef _WIN32_IE -#define _WIN32_IE 0x0400 -#endif -#include -#include -#include -#define cimg_snprintf _snprintf -#define cimg_vsnprintf _vsnprintf -#endif -#ifndef cimg_snprintf -#include -#define cimg_snprintf snprintf -#define cimg_vsnprintf vsnprintf -#endif - -// Configure filename separator. -// -// Filename separator is set by default to '/', except for Windows where it is '\'. -#ifndef cimg_file_separator -#if cimg_OS==2 -#define cimg_file_separator '\\' -#else -#define cimg_file_separator '/' -#endif -#endif - -// Configure verbosity of output messages. -// -// Define 'cimg_verbosity' to: '0' to hide library messages (quiet mode). -// '1' to output library messages on the console. -// '2' to output library messages on a basic dialog window (default behavior). -// '3' to do as '1' + add extra warnings (may slow down the code!). -// '4' to do as '2' + add extra warnings (may slow down the code!). -// -// Define 'cimg_strict_warnings' to replace warning messages by exception throwns. -// -// Define 'cimg_use_vt100' to allow output of color messages on VT100-compatible terminals. -#ifndef cimg_verbosity -#define cimg_verbosity 2 -#elif !(cimg_verbosity==0 || cimg_verbosity==1 || cimg_verbosity==2 || cimg_verbosity==3 || cimg_verbosity==4) -#error CImg Library: Configuration variable 'cimg_verbosity' is badly defined. -#error (should be { 0=quiet | 1=console | 2=dialog | 3=console+warnings | 4=dialog+warnings }). -#endif - -// Configure display framework. -// -// Define 'cimg_display' to: '0' to disable display capabilities. -// '1' to use the X-Window framework (X11). -// '2' to use the Microsoft GDI32 framework. -#ifndef cimg_display -#if cimg_OS==0 -#define cimg_display 0 -#elif cimg_OS==1 -#if defined(__MACOSX__) || defined(__APPLE__) -#define cimg_display 1 -#else -#define cimg_display 1 -#endif -#elif cimg_OS==2 -#define cimg_display 2 -#endif -#elif !(cimg_display==0 || cimg_display==1 || cimg_display==2) -#error CImg Library: Configuration variable 'cimg_display' is badly defined. -#error (should be { 0=none | 1=X-Window (X11) | 2=Microsoft GDI32 }). -#endif - -// Include display-specific headers. -#if cimg_display==1 -#include -#include -#include -#include -#ifdef cimg_use_xshm -#include -#include -#include -#endif -#ifdef cimg_use_xrandr -#include -#endif -#endif -#ifndef cimg_appname -#define cimg_appname "CImg" -#endif - -// Configure OpenMP support. -// (http://www.openmp.org) -// -// Define 'cimg_use_openmp' to enable OpenMP support. -// -// OpenMP directives may be used in a (very) few CImg functions to get -// advantages of multi-core CPUs. -#ifdef cimg_use_openmp -#include "omp.h" -#endif - -// Configure OpenCV support. -// (http://opencv.willowgarage.com/wiki/) -// -// Define 'cimg_use_opencv' to enable OpenCV support. -// -// OpenCV library may be used to access images from cameras -// (see method 'CImg::load_camera()'). -#ifdef cimg_use_opencv -#ifdef True -#undef True -#define _cimg_redefine_True -#endif -#ifdef False -#undef False -#define _cimg_redefine_False -#endif -#include -#include "cv.h" -#include "highgui.h" -#endif - -// Configure LibPNG support. -// (http://www.libpng.org) -// -// Define 'cimg_use_png' to enable LibPNG support. -// -// PNG library may be used to get a native support of '.png' files. -// (see methods 'CImg::{load,save}_png()'. -#ifdef cimg_use_png -extern "C" { -#include "png.h" -} -#endif - -// Configure LibJPEG support. -// (http://en.wikipedia.org/wiki/Libjpeg) -// -// Define 'cimg_use_jpeg' to enable LibJPEG support. -// -// JPEG library may be used to get a native support of '.jpg' files. -// (see methods 'CImg::{load,save}_jpeg()'). -#ifdef cimg_use_jpeg -extern "C" { -#include "jpeglib.h" -#include "setjmp.h" -} -#endif - -// Configure LibTIFF support. -// (http://www.libtiff.org) -// -// Define 'cimg_use_tiff' to enable LibTIFF support. -// -// TIFF library may be used to get a native support of '.tif' files. -// (see methods 'CImg[List]::{load,save}_tiff()'). -#ifdef cimg_use_tiff -extern "C" { -#define uint64 uint64_hack_ -#define int64 int64_hack_ -#include "tiffio.h" -#undef uint64 -#undef int64 -} -#endif - -// Configure LibMINC2 support. -// (http://en.wikibooks.org/wiki/MINC/Reference/MINC2.0_File_Format_Reference) -// -// Define 'cimg_use_minc2' to enable LibMINC2 support. -// -// MINC2 library may be used to get a native support of '.mnc' files. -// (see methods 'CImg::{load,save}_minc2()'). -#ifdef cimg_use_minc2 -#include "minc_io_simple_volume.h" -#include "minc_1_simple.h" -#include "minc_1_simple_rw.h" -#endif - -// Configure FFMPEG support. -// (http://www.ffmpeg.org) -// -// Define 'cimg_use_ffmpeg' to enable FFMPEG lib support. -// -// Avcodec and Avformat libraries from FFMPEG may be used -// to get a native support of various video file formats. -// (see methods 'CImg[List]::load_ffmpeg()'). -#ifdef cimg_use_ffmpeg -#if (defined(_STDINT_H) || defined(_STDINT_H_)) && !defined(UINT64_C) -#warning "__STDC_CONSTANT_MACROS has to be defined before including , this file will probably not compile." -#endif -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS // ...or stdint.h wont' define UINT64_C, needed by libavutil -#endif -extern "C" { -#include -#include -#include -} -#endif - -// Configure Zlib support. -// (http://www.zlib.net) -// -// Define 'cimg_use_zlib' to enable Zlib support. -// -// Zlib library may be used to allow compressed data in '.cimgz' files -// (see methods 'CImg[List]::{load,save}_cimg()'). -#ifdef cimg_use_zlib -extern "C" { -#include "zlib.h" -} -#endif - -// Configure Magick++ support. -// (http://www.imagemagick.org/Magick++) -// -// Define 'cimg_use_magick' to enable Magick++ support. -// -// Magick++ library may be used to get a native support of various image file formats. -// (see methods 'CImg::{load,save}()'). -#ifdef cimg_use_magick -#include "Magick++.h" -#endif - -// Configure FFTW3 support. -// (http://www.fftw.org) -// -// Define 'cimg_use_fftw3' to enable libFFTW3 support. -// -// FFTW3 library may be used to efficiently compute the Fast Fourier Transform -// of image data, without restriction on the image size. -// (see method 'CImg[List]::FFT()'). -#ifdef cimg_use_fftw3 -extern "C" { -#include "fftw3.h" -} -#endif - -// Configure LibBoard support. -// (http://libboard.sourceforge.net/) -// -// Define 'cimg_use_board' to enable Board support. -// -// Board library may be used to draw 3d objects in vector-graphics canvas -// that can be saved as '.ps' or '.svg' files afterwards. -// (see method 'CImg::draw_object3d()'). -#ifdef cimg_use_board -#ifdef None -#undef None -#define _cimg_redefine_None -#endif -#include "Board.h" -#endif - -// Configure OpenEXR support. -// (http://www.openexr.com/) -// -// Define 'cimg_use_openexr' to enable OpenEXR support. -// -// OpenEXR library may be used to get a native support of '.exr' files. -// (see methods 'CImg::{load,save}_exr()'). -#ifdef cimg_use_openexr -#include "ImfRgbaFile.h" -#include "ImfInputFile.h" -#include "ImfChannelList.h" -#include "ImfMatrixAttribute.h" -#include "ImfArray.h" -#endif - -// Lapack configuration. -// (http://www.netlib.org/lapack) -// -// Define 'cimg_use_lapack' to enable LAPACK support. -// -// Lapack library may be used in several CImg methods to speed up -// matrix computations (eigenvalues, inverse, ...). -#ifdef cimg_use_lapack -extern "C" { - extern void sgetrf_(int*, int*, float*, int*, int*, int*); - extern void sgetri_(int*, float*, int*, int*, float*, int*, int*); - extern void sgetrs_(char*, int*, int*, float*, int*, int*, float*, int*, int*); - extern void sgesvd_(char*, char*, int*, int*, float*, int*, float*, float*, int*, float*, int*, float*, int*, int*); - extern void ssyev_(char*, char*, int*, float*, int*, float*, float*, int*, int*); - extern void dgetrf_(int*, int*, double*, int*, int*, int*); - extern void dgetri_(int*, double*, int*, int*, double*, int*, int*); - extern void dgetrs_(char*, int*, int*, double*, int*, int*, double*, int*, int*); - extern void dgesvd_(char*, char*, int*, int*, double*, int*, double*, double*, int*, double*, int*, double*, int*, int*); - extern void dsyev_(char*, char*, int*, double*, int*, double*, double*, int*, int*); - extern void dgels_(char*, int*,int*,int*,double*,int*,double*,int*,double*,int*,int*); - extern void sgels_(char*, int*,int*,int*,float*,int*,float*,int*,float*,int*,int*); -} -#endif - -// Check if min/max/PI macros are defined. -// -// CImg does not compile if macros 'min', 'max' or 'PI' are defined, -// because it redefines functions min(), max() and const variable PI in the cimg:: namespace. -// so it '#undef' these macros if necessary, and restore them to reasonable -// values at the end of this file. -#ifdef min -#undef min -#define _cimg_redefine_min -#endif -#ifdef max -#undef max -#define _cimg_redefine_max -#endif -#ifdef PI -#undef PI -#define _cimg_redefine_PI -#endif - -// Define 'cimg_library' namespace suffix. -// -// You may want to add a suffix to the 'cimg_library' namespace, for instance if you need to work -// with several versions of the library at the same time. -#ifdef cimg_namespace_suffix -#define __cimg_library_suffixed(s) cimg_library_##s -#define _cimg_library_suffixed(s) __cimg_library_suffixed(s) -#define cimg_library_suffixed _cimg_library_suffixed(cimg_namespace_suffix) -#else -#define cimg_library_suffixed cimg_library -#endif - -/*------------------------------------------------------------------------------ - # - # Define user-friendly macros. - # - # These CImg macros are prefixed by 'cimg_' and can be used safely in your own - # code. They are useful to parse command line options, or to write image loops. - # - ------------------------------------------------------------------------------*/ - -// Macros to define program usage, and retrieve command line arguments. -#define cimg_usage(usage) cimg_library_suffixed::cimg::option((char*)0,argc,argv,(char*)0,usage,false) -#define cimg_help(str) cimg_library_suffixed::cimg::option((char*)0,argc,argv,str,(char*)0) -#define cimg_option(name,defaut,usage) cimg_library_suffixed::cimg::option(name,argc,argv,defaut,usage) -#define cimg_argument(pos) cimg_library_suffixed::cimg::argument(pos,argc,argv) -#define cimg_argument1(pos,s0) cimg_library_suffixed::cimg::argument(pos,argc,argv,1,s0) -#define cimg_argument2(pos,s0,s1) cimg_library_suffixed::cimg::argument(pos,argc,argv,2,s0,s1) -#define cimg_argument3(pos,s0,s1,s2) cimg_library_suffixed::cimg::argument(pos,argc,argv,3,s0,s1,s2) -#define cimg_argument4(pos,s0,s1,s2,s3) cimg_library_suffixed::cimg::argument(pos,argc,argv,4,s0,s1,s2,s3) -#define cimg_argument5(pos,s0,s1,s2,s3,s4) cimg_library_suffixed::cimg::argument(pos,argc,argv,5,s0,s1,s2,s3,s4) -#define cimg_argument6(pos,s0,s1,s2,s3,s4,s5) cimg_library_suffixed::cimg::argument(pos,argc,argv,6,s0,s1,s2,s3,s4,s5) -#define cimg_argument7(pos,s0,s1,s2,s3,s4,s5,s6) cimg_library_suffixed::cimg::argument(pos,argc,argv,7,s0,s1,s2,s3,s4,s5,s6) -#define cimg_argument8(pos,s0,s1,s2,s3,s4,s5,s6,s7) cimg_library_suffixed::cimg::argument(pos,argc,argv,8,s0,s1,s2,s3,s4,s5,s6,s7) -#define cimg_argument9(pos,s0,s1,s2,s3,s4,s5,s6,s7,s8) cimg_library_suffixed::cimg::argument(pos,argc,argv,9,s0,s1,s2,s3,s4,s5,s6,s7,s8) - -// Macros to define and manipulate local neighborhoods. -#define CImg_2x2(I,T) T I[4]; \ - T& I##cc = I[0]; T& I##nc = I[1]; \ - T& I##cn = I[2]; T& I##nn = I[3]; \ - I##cc = I##nc = \ - I##cn = I##nn = 0 - -#define CImg_3x3(I,T) T I[9]; \ - T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; \ - T& I##pc = I[3]; T& I##cc = I[4]; T& I##nc = I[5]; \ - T& I##pn = I[6]; T& I##cn = I[7]; T& I##nn = I[8]; \ - I##pp = I##cp = I##np = \ - I##pc = I##cc = I##nc = \ - I##pn = I##cn = I##nn = 0 - -#define CImg_4x4(I,T) T I[16]; \ - T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; T& I##ap = I[3]; \ - T& I##pc = I[4]; T& I##cc = I[5]; T& I##nc = I[6]; T& I##ac = I[7]; \ - T& I##pn = I[8]; T& I##cn = I[9]; T& I##nn = I[10]; T& I##an = I[11]; \ - T& I##pa = I[12]; T& I##ca = I[13]; T& I##na = I[14]; T& I##aa = I[15]; \ - I##pp = I##cp = I##np = I##ap = \ - I##pc = I##cc = I##nc = I##ac = \ - I##pn = I##cn = I##nn = I##an = \ - I##pa = I##ca = I##na = I##aa = 0 - -#define CImg_5x5(I,T) T I[25]; \ - T& I##bb = I[0]; T& I##pb = I[1]; T& I##cb = I[2]; T& I##nb = I[3]; T& I##ab = I[4]; \ - T& I##bp = I[5]; T& I##pp = I[6]; T& I##cp = I[7]; T& I##np = I[8]; T& I##ap = I[9]; \ - T& I##bc = I[10]; T& I##pc = I[11]; T& I##cc = I[12]; T& I##nc = I[13]; T& I##ac = I[14]; \ - T& I##bn = I[15]; T& I##pn = I[16]; T& I##cn = I[17]; T& I##nn = I[18]; T& I##an = I[19]; \ - T& I##ba = I[20]; T& I##pa = I[21]; T& I##ca = I[22]; T& I##na = I[23]; T& I##aa = I[24]; \ - I##bb = I##pb = I##cb = I##nb = I##ab = \ - I##bp = I##pp = I##cp = I##np = I##ap = \ - I##bc = I##pc = I##cc = I##nc = I##ac = \ - I##bn = I##pn = I##cn = I##nn = I##an = \ - I##ba = I##pa = I##ca = I##na = I##aa = 0 - -#define CImg_2x2x2(I,T) T I[8]; \ - T& I##ccc = I[0]; T& I##ncc = I[1]; \ - T& I##cnc = I[2]; T& I##nnc = I[3]; \ - T& I##ccn = I[4]; T& I##ncn = I[5]; \ - T& I##cnn = I[6]; T& I##nnn = I[7]; \ - I##ccc = I##ncc = \ - I##cnc = I##nnc = \ - I##ccn = I##ncn = \ - I##cnn = I##nnn = 0 - -#define CImg_3x3x3(I,T) T I[27]; \ - T& I##ppp = I[0]; T& I##cpp = I[1]; T& I##npp = I[2]; \ - T& I##pcp = I[3]; T& I##ccp = I[4]; T& I##ncp = I[5]; \ - T& I##pnp = I[6]; T& I##cnp = I[7]; T& I##nnp = I[8]; \ - T& I##ppc = I[9]; T& I##cpc = I[10]; T& I##npc = I[11]; \ - T& I##pcc = I[12]; T& I##ccc = I[13]; T& I##ncc = I[14]; \ - T& I##pnc = I[15]; T& I##cnc = I[16]; T& I##nnc = I[17]; \ - T& I##ppn = I[18]; T& I##cpn = I[19]; T& I##npn = I[20]; \ - T& I##pcn = I[21]; T& I##ccn = I[22]; T& I##ncn = I[23]; \ - T& I##pnn = I[24]; T& I##cnn = I[25]; T& I##nnn = I[26]; \ - I##ppp = I##cpp = I##npp = \ - I##pcp = I##ccp = I##ncp = \ - I##pnp = I##cnp = I##nnp = \ - I##ppc = I##cpc = I##npc = \ - I##pcc = I##ccc = I##ncc = \ - I##pnc = I##cnc = I##nnc = \ - I##ppn = I##cpn = I##npn = \ - I##pcn = I##ccn = I##ncn = \ - I##pnn = I##cnn = I##nnn = 0 - -#define cimg_get2x2(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), I[3] = (T)(img)(_n1##x,_n1##y,z,c) - -#define cimg_get3x3(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), I[3] = (T)(img)(_p1##x,y,z,c), \ - I[4] = (T)(img)(x,y,z,c), I[5] = (T)(img)(_n1##x,y,z,c), I[6] = (T)(img)(_p1##x,_n1##y,z,c), I[7] = (T)(img)(x,_n1##y,z,c), \ - I[8] = (T)(img)(_n1##x,_n1##y,z,c) - -#define cimg_get4x4(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), I[3] = (T)(img)(_n2##x,_p1##y,z,c), \ - I[4] = (T)(img)(_p1##x,y,z,c), I[5] = (T)(img)(x,y,z,c), I[6] = (T)(img)(_n1##x,y,z,c), I[7] = (T)(img)(_n2##x,y,z,c), \ - I[8] = (T)(img)(_p1##x,_n1##y,z,c), I[9] = (T)(img)(x,_n1##y,z,c), I[10] = (T)(img)(_n1##x,_n1##y,z,c), I[11] = (T)(img)(_n2##x,_n1##y,z,c), \ - I[12] = (T)(img)(_p1##x,_n2##y,z,c), I[13] = (T)(img)(x,_n2##y,z,c), I[14] = (T)(img)(_n1##x,_n2##y,z,c), I[15] = (T)(img)(_n2##x,_n2##y,z,c) - -#define cimg_get5x5(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), I[3] = (T)(img)(_n1##x,_p2##y,z,c), \ - I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_p2##x,_p1##y,z,c), I[6] = (T)(img)(_p1##x,_p1##y,z,c), I[7] = (T)(img)(x,_p1##y,z,c), \ - I[8] = (T)(img)(_n1##x,_p1##y,z,c), I[9] = (T)(img)(_n2##x,_p1##y,z,c), I[10] = (T)(img)(_p2##x,y,z,c), I[11] = (T)(img)(_p1##x,y,z,c), \ - I[12] = (T)(img)(x,y,z,c), I[13] = (T)(img)(_n1##x,y,z,c), I[14] = (T)(img)(_n2##x,y,z,c), I[15] = (T)(img)(_p2##x,_n1##y,z,c), \ - I[16] = (T)(img)(_p1##x,_n1##y,z,c), I[17] = (T)(img)(x,_n1##y,z,c), I[18] = (T)(img)(_n1##x,_n1##y,z,c), I[19] = (T)(img)(_n2##x,_n1##y,z,c), \ - I[20] = (T)(img)(_p2##x,_n2##y,z,c), I[21] = (T)(img)(_p1##x,_n2##y,z,c), I[22] = (T)(img)(x,_n2##y,z,c), I[23] = (T)(img)(_n1##x,_n2##y,z,c), \ - I[24] = (T)(img)(_n2##x,_n2##y,z,c) - -#define cimg_get6x6(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), I[3] = (T)(img)(_n1##x,_p2##y,z,c), \ - I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_n3##x,_p2##y,z,c), I[6] = (T)(img)(_p2##x,_p1##y,z,c), I[7] = (T)(img)(_p1##x,_p1##y,z,c), \ - I[8] = (T)(img)(x,_p1##y,z,c), I[9] = (T)(img)(_n1##x,_p1##y,z,c), I[10] = (T)(img)(_n2##x,_p1##y,z,c), I[11] = (T)(img)(_n3##x,_p1##y,z,c), \ - I[12] = (T)(img)(_p2##x,y,z,c), I[13] = (T)(img)(_p1##x,y,z,c), I[14] = (T)(img)(x,y,z,c), I[15] = (T)(img)(_n1##x,y,z,c), \ - I[16] = (T)(img)(_n2##x,y,z,c), I[17] = (T)(img)(_n3##x,y,z,c), I[18] = (T)(img)(_p2##x,_n1##y,z,c), I[19] = (T)(img)(_p1##x,_n1##y,z,c), \ - I[20] = (T)(img)(x,_n1##y,z,c), I[21] = (T)(img)(_n1##x,_n1##y,z,c), I[22] = (T)(img)(_n2##x,_n1##y,z,c), I[23] = (T)(img)(_n3##x,_n1##y,z,c), \ - I[24] = (T)(img)(_p2##x,_n2##y,z,c), I[25] = (T)(img)(_p1##x,_n2##y,z,c), I[26] = (T)(img)(x,_n2##y,z,c), I[27] = (T)(img)(_n1##x,_n2##y,z,c), \ - I[28] = (T)(img)(_n2##x,_n2##y,z,c), I[29] = (T)(img)(_n3##x,_n2##y,z,c), I[30] = (T)(img)(_p2##x,_n3##y,z,c), I[31] = (T)(img)(_p1##x,_n3##y,z,c), \ - I[32] = (T)(img)(x,_n3##y,z,c), I[33] = (T)(img)(_n1##x,_n3##y,z,c), I[34] = (T)(img)(_n2##x,_n3##y,z,c), I[35] = (T)(img)(_n3##x,_n3##y,z,c) - -#define cimg_get7x7(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), I[3] = (T)(img)(x,_p3##y,z,c), \ - I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_p3##x,_p2##y,z,c), \ - I[8] = (T)(img)(_p2##x,_p2##y,z,c), I[9] = (T)(img)(_p1##x,_p2##y,z,c), I[10] = (T)(img)(x,_p2##y,z,c), I[11] = (T)(img)(_n1##x,_p2##y,z,c), \ - I[12] = (T)(img)(_n2##x,_p2##y,z,c), I[13] = (T)(img)(_n3##x,_p2##y,z,c), I[14] = (T)(img)(_p3##x,_p1##y,z,c), I[15] = (T)(img)(_p2##x,_p1##y,z,c), \ - I[16] = (T)(img)(_p1##x,_p1##y,z,c), I[17] = (T)(img)(x,_p1##y,z,c), I[18] = (T)(img)(_n1##x,_p1##y,z,c), I[19] = (T)(img)(_n2##x,_p1##y,z,c), \ - I[20] = (T)(img)(_n3##x,_p1##y,z,c), I[21] = (T)(img)(_p3##x,y,z,c), I[22] = (T)(img)(_p2##x,y,z,c), I[23] = (T)(img)(_p1##x,y,z,c), \ - I[24] = (T)(img)(x,y,z,c), I[25] = (T)(img)(_n1##x,y,z,c), I[26] = (T)(img)(_n2##x,y,z,c), I[27] = (T)(img)(_n3##x,y,z,c), \ - I[28] = (T)(img)(_p3##x,_n1##y,z,c), I[29] = (T)(img)(_p2##x,_n1##y,z,c), I[30] = (T)(img)(_p1##x,_n1##y,z,c), I[31] = (T)(img)(x,_n1##y,z,c), \ - I[32] = (T)(img)(_n1##x,_n1##y,z,c), I[33] = (T)(img)(_n2##x,_n1##y,z,c), I[34] = (T)(img)(_n3##x,_n1##y,z,c), I[35] = (T)(img)(_p3##x,_n2##y,z,c), \ - I[36] = (T)(img)(_p2##x,_n2##y,z,c), I[37] = (T)(img)(_p1##x,_n2##y,z,c), I[38] = (T)(img)(x,_n2##y,z,c), I[39] = (T)(img)(_n1##x,_n2##y,z,c), \ - I[40] = (T)(img)(_n2##x,_n2##y,z,c), I[41] = (T)(img)(_n3##x,_n2##y,z,c), I[42] = (T)(img)(_p3##x,_n3##y,z,c), I[43] = (T)(img)(_p2##x,_n3##y,z,c), \ - I[44] = (T)(img)(_p1##x,_n3##y,z,c), I[45] = (T)(img)(x,_n3##y,z,c), I[46] = (T)(img)(_n1##x,_n3##y,z,c), I[47] = (T)(img)(_n2##x,_n3##y,z,c), \ - I[48] = (T)(img)(_n3##x,_n3##y,z,c) - -#define cimg_get8x8(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), I[3] = (T)(img)(x,_p3##y,z,c), \ - I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_n4##x,_p3##y,z,c), \ - I[8] = (T)(img)(_p3##x,_p2##y,z,c), I[9] = (T)(img)(_p2##x,_p2##y,z,c), I[10] = (T)(img)(_p1##x,_p2##y,z,c), I[11] = (T)(img)(x,_p2##y,z,c), \ - I[12] = (T)(img)(_n1##x,_p2##y,z,c), I[13] = (T)(img)(_n2##x,_p2##y,z,c), I[14] = (T)(img)(_n3##x,_p2##y,z,c), I[15] = (T)(img)(_n4##x,_p2##y,z,c), \ - I[16] = (T)(img)(_p3##x,_p1##y,z,c), I[17] = (T)(img)(_p2##x,_p1##y,z,c), I[18] = (T)(img)(_p1##x,_p1##y,z,c), I[19] = (T)(img)(x,_p1##y,z,c), \ - I[20] = (T)(img)(_n1##x,_p1##y,z,c), I[21] = (T)(img)(_n2##x,_p1##y,z,c), I[22] = (T)(img)(_n3##x,_p1##y,z,c), I[23] = (T)(img)(_n4##x,_p1##y,z,c), \ - I[24] = (T)(img)(_p3##x,y,z,c), I[25] = (T)(img)(_p2##x,y,z,c), I[26] = (T)(img)(_p1##x,y,z,c), I[27] = (T)(img)(x,y,z,c), \ - I[28] = (T)(img)(_n1##x,y,z,c), I[29] = (T)(img)(_n2##x,y,z,c), I[30] = (T)(img)(_n3##x,y,z,c), I[31] = (T)(img)(_n4##x,y,z,c), \ - I[32] = (T)(img)(_p3##x,_n1##y,z,c), I[33] = (T)(img)(_p2##x,_n1##y,z,c), I[34] = (T)(img)(_p1##x,_n1##y,z,c), I[35] = (T)(img)(x,_n1##y,z,c), \ - I[36] = (T)(img)(_n1##x,_n1##y,z,c), I[37] = (T)(img)(_n2##x,_n1##y,z,c), I[38] = (T)(img)(_n3##x,_n1##y,z,c), I[39] = (T)(img)(_n4##x,_n1##y,z,c), \ - I[40] = (T)(img)(_p3##x,_n2##y,z,c), I[41] = (T)(img)(_p2##x,_n2##y,z,c), I[42] = (T)(img)(_p1##x,_n2##y,z,c), I[43] = (T)(img)(x,_n2##y,z,c), \ - I[44] = (T)(img)(_n1##x,_n2##y,z,c), I[45] = (T)(img)(_n2##x,_n2##y,z,c), I[46] = (T)(img)(_n3##x,_n2##y,z,c), I[47] = (T)(img)(_n4##x,_n2##y,z,c), \ - I[48] = (T)(img)(_p3##x,_n3##y,z,c), I[49] = (T)(img)(_p2##x,_n3##y,z,c), I[50] = (T)(img)(_p1##x,_n3##y,z,c), I[51] = (T)(img)(x,_n3##y,z,c), \ - I[52] = (T)(img)(_n1##x,_n3##y,z,c), I[53] = (T)(img)(_n2##x,_n3##y,z,c), I[54] = (T)(img)(_n3##x,_n3##y,z,c), I[55] = (T)(img)(_n4##x,_n3##y,z,c), \ - I[56] = (T)(img)(_p3##x,_n4##y,z,c), I[57] = (T)(img)(_p2##x,_n4##y,z,c), I[58] = (T)(img)(_p1##x,_n4##y,z,c), I[59] = (T)(img)(x,_n4##y,z,c), \ - I[60] = (T)(img)(_n1##x,_n4##y,z,c), I[61] = (T)(img)(_n2##x,_n4##y,z,c), I[62] = (T)(img)(_n3##x,_n4##y,z,c), I[63] = (T)(img)(_n4##x,_n4##y,z,c); - -#define cimg_get9x9(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p4##x,_p4##y,z,c), I[1] = (T)(img)(_p3##x,_p4##y,z,c), I[2] = (T)(img)(_p2##x,_p4##y,z,c), I[3] = (T)(img)(_p1##x,_p4##y,z,c), \ - I[4] = (T)(img)(x,_p4##y,z,c), I[5] = (T)(img)(_n1##x,_p4##y,z,c), I[6] = (T)(img)(_n2##x,_p4##y,z,c), I[7] = (T)(img)(_n3##x,_p4##y,z,c), \ - I[8] = (T)(img)(_n4##x,_p4##y,z,c), I[9] = (T)(img)(_p4##x,_p3##y,z,c), I[10] = (T)(img)(_p3##x,_p3##y,z,c), I[11] = (T)(img)(_p2##x,_p3##y,z,c), \ - I[12] = (T)(img)(_p1##x,_p3##y,z,c), I[13] = (T)(img)(x,_p3##y,z,c), I[14] = (T)(img)(_n1##x,_p3##y,z,c), I[15] = (T)(img)(_n2##x,_p3##y,z,c), \ - I[16] = (T)(img)(_n3##x,_p3##y,z,c), I[17] = (T)(img)(_n4##x,_p3##y,z,c), I[18] = (T)(img)(_p4##x,_p2##y,z,c), I[19] = (T)(img)(_p3##x,_p2##y,z,c), \ - I[20] = (T)(img)(_p2##x,_p2##y,z,c), I[21] = (T)(img)(_p1##x,_p2##y,z,c), I[22] = (T)(img)(x,_p2##y,z,c), I[23] = (T)(img)(_n1##x,_p2##y,z,c), \ - I[24] = (T)(img)(_n2##x,_p2##y,z,c), I[25] = (T)(img)(_n3##x,_p2##y,z,c), I[26] = (T)(img)(_n4##x,_p2##y,z,c), I[27] = (T)(img)(_p4##x,_p1##y,z,c), \ - I[28] = (T)(img)(_p3##x,_p1##y,z,c), I[29] = (T)(img)(_p2##x,_p1##y,z,c), I[30] = (T)(img)(_p1##x,_p1##y,z,c), I[31] = (T)(img)(x,_p1##y,z,c), \ - I[32] = (T)(img)(_n1##x,_p1##y,z,c), I[33] = (T)(img)(_n2##x,_p1##y,z,c), I[34] = (T)(img)(_n3##x,_p1##y,z,c), I[35] = (T)(img)(_n4##x,_p1##y,z,c), \ - I[36] = (T)(img)(_p4##x,y,z,c), I[37] = (T)(img)(_p3##x,y,z,c), I[38] = (T)(img)(_p2##x,y,z,c), I[39] = (T)(img)(_p1##x,y,z,c), \ - I[40] = (T)(img)(x,y,z,c), I[41] = (T)(img)(_n1##x,y,z,c), I[42] = (T)(img)(_n2##x,y,z,c), I[43] = (T)(img)(_n3##x,y,z,c), \ - I[44] = (T)(img)(_n4##x,y,z,c), I[45] = (T)(img)(_p4##x,_n1##y,z,c), I[46] = (T)(img)(_p3##x,_n1##y,z,c), I[47] = (T)(img)(_p2##x,_n1##y,z,c), \ - I[48] = (T)(img)(_p1##x,_n1##y,z,c), I[49] = (T)(img)(x,_n1##y,z,c), I[50] = (T)(img)(_n1##x,_n1##y,z,c), I[51] = (T)(img)(_n2##x,_n1##y,z,c), \ - I[52] = (T)(img)(_n3##x,_n1##y,z,c), I[53] = (T)(img)(_n4##x,_n1##y,z,c), I[54] = (T)(img)(_p4##x,_n2##y,z,c), I[55] = (T)(img)(_p3##x,_n2##y,z,c), \ - I[56] = (T)(img)(_p2##x,_n2##y,z,c), I[57] = (T)(img)(_p1##x,_n2##y,z,c), I[58] = (T)(img)(x,_n2##y,z,c), I[59] = (T)(img)(_n1##x,_n2##y,z,c), \ - I[60] = (T)(img)(_n2##x,_n2##y,z,c), I[61] = (T)(img)(_n3##x,_n2##y,z,c), I[62] = (T)(img)(_n4##x,_n2##y,z,c), I[63] = (T)(img)(_p4##x,_n3##y,z,c), \ - I[64] = (T)(img)(_p3##x,_n3##y,z,c), I[65] = (T)(img)(_p2##x,_n3##y,z,c), I[66] = (T)(img)(_p1##x,_n3##y,z,c), I[67] = (T)(img)(x,_n3##y,z,c), \ - I[68] = (T)(img)(_n1##x,_n3##y,z,c), I[69] = (T)(img)(_n2##x,_n3##y,z,c), I[70] = (T)(img)(_n3##x,_n3##y,z,c), I[71] = (T)(img)(_n4##x,_n3##y,z,c), \ - I[72] = (T)(img)(_p4##x,_n4##y,z,c), I[73] = (T)(img)(_p3##x,_n4##y,z,c), I[74] = (T)(img)(_p2##x,_n4##y,z,c), I[75] = (T)(img)(_p1##x,_n4##y,z,c), \ - I[76] = (T)(img)(x,_n4##y,z,c), I[77] = (T)(img)(_n1##x,_n4##y,z,c), I[78] = (T)(img)(_n2##x,_n4##y,z,c), I[79] = (T)(img)(_n3##x,_n4##y,z,c), \ - I[80] = (T)(img)(_n4##x,_n4##y,z,c) - -#define cimg_get2x2x2(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), I[3] = (T)(img)(_n1##x,_n1##y,z,c), \ - I[4] = (T)(img)(x,y,_n1##z,c), I[5] = (T)(img)(_n1##x,y,_n1##z,c), I[6] = (T)(img)(x,_n1##y,_n1##z,c), I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c) - -#define cimg_get3x3x3(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[1] = (T)(img)(x,_p1##y,_p1##z,c), I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c), \ - I[3] = (T)(img)(_p1##x,y,_p1##z,c), I[4] = (T)(img)(x,y,_p1##z,c), I[5] = (T)(img)(_n1##x,y,_p1##z,c), \ - I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[7] = (T)(img)(x,_n1##y,_p1##z,c), I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c), \ - I[9] = (T)(img)(_p1##x,_p1##y,z,c), I[10] = (T)(img)(x,_p1##y,z,c), I[11] = (T)(img)(_n1##x,_p1##y,z,c), \ - I[12] = (T)(img)(_p1##x,y,z,c), I[13] = (T)(img)(x,y,z,c), I[14] = (T)(img)(_n1##x,y,z,c), \ - I[15] = (T)(img)(_p1##x,_n1##y,z,c), I[16] = (T)(img)(x,_n1##y,z,c), I[17] = (T)(img)(_n1##x,_n1##y,z,c), \ - I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[19] = (T)(img)(x,_p1##y,_n1##z,c), I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c), \ - I[21] = (T)(img)(_p1##x,y,_n1##z,c), I[22] = (T)(img)(x,y,_n1##z,c), I[23] = (T)(img)(_n1##x,y,_n1##z,c), \ - I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[25] = (T)(img)(x,_n1##y,_n1##z,c), I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c) - -// Macros to perform various image loops. -// -// These macros are simpler to use than loops with C++ iterators. -#define cimg_for(img,ptrs,T_ptrs) for (T_ptrs *ptrs = (img)._data, *_max##ptrs = (img)._data + (img).size(); ptrs<_max##ptrs; ++ptrs) -#define cimg_rof(img,ptrs,T_ptrs) for (T_ptrs *ptrs = (img)._data + (img).size(); (ptrs--)>(img)._data; ) -#define cimg_foroff(img,off) for (unsigned long off = 0, _max##off = (img).size(); off<_max##off; ++off) - -#define cimg_for1(bound,i) for (int i = 0; i<(int)(bound); ++i) -#define cimg_forX(img,x) cimg_for1((img)._width,x) -#define cimg_forY(img,y) cimg_for1((img)._height,y) -#define cimg_forZ(img,z) cimg_for1((img)._depth,z) -#define cimg_forC(img,c) cimg_for1((img)._spectrum,c) -#define cimg_forXY(img,x,y) cimg_forY(img,y) cimg_forX(img,x) -#define cimg_forXZ(img,x,z) cimg_forZ(img,z) cimg_forX(img,x) -#define cimg_forYZ(img,y,z) cimg_forZ(img,z) cimg_forY(img,y) -#define cimg_forXC(img,x,c) cimg_forC(img,c) cimg_forX(img,x) -#define cimg_forYC(img,y,c) cimg_forC(img,c) cimg_forY(img,y) -#define cimg_forZC(img,z,c) cimg_forC(img,c) cimg_forZ(img,z) -#define cimg_forXYZ(img,x,y,z) cimg_forZ(img,z) cimg_forXY(img,x,y) -#define cimg_forXYC(img,x,y,c) cimg_forC(img,c) cimg_forXY(img,x,y) -#define cimg_forXZC(img,x,z,c) cimg_forC(img,c) cimg_forXZ(img,x,z) -#define cimg_forYZC(img,y,z,c) cimg_forC(img,c) cimg_forYZ(img,y,z) -#define cimg_forXYZC(img,x,y,z,c) cimg_forC(img,c) cimg_forXYZ(img,x,y,z) - -#define cimg_rof1(bound,i) for (int i = (int)(bound)-1; i>=0; --i) -#define cimg_rofX(img,x) cimg_rof1((img)._width,x) -#define cimg_rofY(img,y) cimg_rof1((img)._height,y) -#define cimg_rofZ(img,z) cimg_rof1((img)._depth,z) -#define cimg_rofC(img,c) cimg_rof1((img)._spectrum,c) -#define cimg_rofXY(img,x,y) cimg_rofY(img,y) cimg_rofX(img,x) -#define cimg_rofXZ(img,x,z) cimg_rofZ(img,z) cimg_rofX(img,x) -#define cimg_rofYZ(img,y,z) cimg_rofZ(img,z) cimg_rofY(img,y) -#define cimg_rofXC(img,x,c) cimg_rofC(img,c) cimg_rofX(img,x) -#define cimg_rofYC(img,y,c) cimg_rofC(img,c) cimg_rofY(img,y) -#define cimg_rofZC(img,z,c) cimg_rofC(img,c) cimg_rofZ(img,z) -#define cimg_rofXYZ(img,x,y,z) cimg_rofZ(img,z) cimg_rofXY(img,x,y) -#define cimg_rofXYC(img,x,y,c) cimg_rofC(img,c) cimg_rofXY(img,x,y) -#define cimg_rofXZC(img,x,z,c) cimg_rofC(img,c) cimg_rofXZ(img,x,z) -#define cimg_rofYZC(img,y,z,c) cimg_rofC(img,c) cimg_rofYZ(img,y,z) -#define cimg_rofXYZC(img,x,y,z,c) cimg_rofC(img,c) cimg_rofXYZ(img,x,y,z) - -#define cimg_for_in1(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound)-1; i<=_max##i; ++i) -#define cimg_for_inX(img,x0,x1,x) cimg_for_in1((img)._width,x0,x1,x) -#define cimg_for_inY(img,y0,y1,y) cimg_for_in1((img)._height,y0,y1,y) -#define cimg_for_inZ(img,z0,z1,z) cimg_for_in1((img)._depth,z0,z1,z) -#define cimg_for_inC(img,c0,c1,c) cimg_for_in1((img)._spectrum,c0,c1,c) -#define cimg_for_inXY(img,x0,y0,x1,y1,x,y) cimg_for_inY(img,y0,y1,y) cimg_for_inX(img,x0,x1,x) -#define cimg_for_inXZ(img,x0,z0,x1,z1,x,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inX(img,x0,x1,x) -#define cimg_for_inXC(img,x0,c0,x1,c1,x,c) cimg_for_inC(img,c0,c1,c) cimg_for_inX(img,x0,x1,x) -#define cimg_for_inYZ(img,y0,z0,y1,z1,y,z) cimg_for_inZ(img,x0,z1,z) cimg_for_inY(img,y0,y1,y) -#define cimg_for_inYC(img,y0,c0,y1,c1,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inY(img,y0,y1,y) -#define cimg_for_inZC(img,z0,c0,z1,c1,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inZ(img,z0,z1,z) -#define cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inXY(img,x0,y0,x1,y1,x,y) -#define cimg_for_inXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXY(img,x0,y0,x1,y1,x,y) -#define cimg_for_inXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXZ(img,x0,z0,x1,z1,x,z) -#define cimg_for_inYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inYZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_inXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) -#define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img)._width-1-(n),x) -#define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img)._height-1-(n),y) -#define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img)._depth-1-(n),z) -#define cimg_for_insideC(img,c,n) cimg_for_inC(img,n,(img)._spectrum-1-(n),c) -#define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img)._width-1-(n),(img)._height-1-(n),x,y) -#define cimg_for_insideXYZ(img,x,y,z,n) cimg_for_inXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) -#define cimg_for_insideXYZC(img,x,y,z,c,n) cimg_for_inXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) - -#define cimg_for_out1(boundi,i0,i1,i) \ - for (int i = (int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1)+1:i) -#define cimg_for_out2(boundi,boundj,i0,j0,i1,j1,i,j) \ - for (int j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \ - ++i, i = _n1j?i:(i==(int)(i0)?(int)(i1)+1:i)) -#define cimg_for_out3(boundi,boundj,boundk,i0,j0,k0,i1,j1,k1,i,j,k) \ - for (int k = 0; k<(int)(boundk); ++k) \ - for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \ - ++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1)+1:i)) -#define cimg_for_out4(boundi,boundj,boundk,boundl,i0,j0,k0,l0,i1,j1,k1,l1,i,j,k,l) \ - for (int l = 0; l<(int)(boundl); ++l) \ - for (int _n1l = (int)(l<(int)(l0) || l>(int)(l1)), k = 0; k<(int)(boundk); ++k) \ - for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \ - ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1)+1:i)) -#define cimg_for_outX(img,x0,x1,x) cimg_for_out1((img)._width,x0,x1,x) -#define cimg_for_outY(img,y0,y1,y) cimg_for_out1((img)._height,y0,y1,y) -#define cimg_for_outZ(img,z0,z1,z) cimg_for_out1((img)._depth,z0,z1,z) -#define cimg_for_outC(img,c0,c1,c) cimg_for_out1((img)._spectrum,c0,c1,c) -#define cimg_for_outXY(img,x0,y0,x1,y1,x,y) cimg_for_out2((img)._width,(img)._height,x0,y0,x1,y1,x,y) -#define cimg_for_outXZ(img,x0,z0,x1,z1,x,z) cimg_for_out2((img)._width,(img)._depth,x0,z0,x1,z1,x,z) -#define cimg_for_outXC(img,x0,c0,x1,c1,x,c) cimg_for_out2((img)._width,(img)._spectrum,x0,c0,x1,c1,x,c) -#define cimg_for_outYZ(img,y0,z0,y1,z1,y,z) cimg_for_out2((img)._height,(img)._depth,y0,z0,y1,z1,y,z) -#define cimg_for_outYC(img,y0,c0,y1,c1,y,c) cimg_for_out2((img)._height,(img)._spectrum,y0,c0,y1,c1,y,c) -#define cimg_for_outZC(img,z0,c0,z1,c1,z,c) cimg_for_out2((img)._depth,(img)._spectrum,z0,c0,z1,c1,z,c) -#define cimg_for_outXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_out3((img)._width,(img)._height,(img)._depth,x0,y0,z0,x1,y1,z1,x,y,z) -#define cimg_for_outXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) cimg_for_out3((img)._width,(img)._height,(img)._spectrum,x0,y0,c0,x1,y1,c1,x,y,c) -#define cimg_for_outXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) cimg_for_out3((img)._width,(img)._depth,(img)._spectrum,x0,z0,c0,x1,z1,c1,x,z,c) -#define cimg_for_outYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_out3((img)._height,(img)._depth,(img)._spectrum,y0,z0,c0,y1,z1,c1,y,z,c) -#define cimg_for_outXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ - cimg_for_out4((img)._width,(img)._height,(img)._depth,(img)._spectrum,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) -#define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img)._width-1-(n),x) -#define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img)._height-1-(n),y) -#define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img)._depth-1-(n),z) -#define cimg_for_borderC(img,c,n) cimg_for_outC(img,n,(img)._spectrum-1-(n),c) -#define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img)._width-1-(n),(img)._height-1-(n),x,y) -#define cimg_for_borderXYZ(img,x,y,z,n) cimg_for_outXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) -#define cimg_for_borderXYZC(img,x,y,z,c,n) \ - cimg_for_outXYZC(img,n,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),(img)._spectrum-1-(n),x,y,z,c) - -#define cimg_for_spiralXY(img,x,y) \ - for (int x = 0, y = 0, _n1##x = 1, _n1##y = (img).width()*(img).height(); _n1##y; \ - --_n1##y, _n1##x+=(_n1##x>>2)-((!(_n1##x&3)?--y:((_n1##x&3)==1?(img)._width-1-++x:((_n1##x&3)==2?(img)._height-1-++y:--x))))?0:1) - -#define cimg_for_lineXY(x,y,x0,y0,x1,y1) \ - for (int x = (int)(x0), y = (int)(y0), _sx = 1, _sy = 1, _steep = 0, \ - _dx=(x1)>(x0)?(int)(x1)-(int)(x0):(_sx=-1,(int)(x0)-(int)(x1)), \ - _dy=(y1)>(y0)?(int)(y1)-(int)(y0):(_sy=-1,(int)(y0)-(int)(y1)), \ - _counter = _dx, \ - _err = _dx>_dy?(_dy>>1):((_steep=1),(_counter=_dy),(_dx>>1)); \ - _counter>=0; \ - --_counter, x+=_steep? \ - (y+=_sy,(_err-=_dx)<0?_err+=_dy,_sx:0): \ - (y+=(_err-=_dy)<0?_err+=_dx,_sy:0,_sx)) - -#define cimg_for2(bound,i) \ - for (int i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1; \ - _n1##i<(int)(bound) || i==--_n1##i; \ - ++i, ++_n1##i) -#define cimg_for2X(img,x) cimg_for2((img)._width,x) -#define cimg_for2Y(img,y) cimg_for2((img)._height,y) -#define cimg_for2Z(img,z) cimg_for2((img)._depth,z) -#define cimg_for2C(img,c) cimg_for2((img)._spectrum,c) -#define cimg_for2XY(img,x,y) cimg_for2Y(img,y) cimg_for2X(img,x) -#define cimg_for2XZ(img,x,z) cimg_for2Z(img,z) cimg_for2X(img,x) -#define cimg_for2XC(img,x,c) cimg_for2C(img,c) cimg_for2X(img,x) -#define cimg_for2YZ(img,y,z) cimg_for2Z(img,z) cimg_for2Y(img,y) -#define cimg_for2YC(img,y,c) cimg_for2C(img,c) cimg_for2Y(img,y) -#define cimg_for2ZC(img,z,c) cimg_for2C(img,c) cimg_for2Z(img,z) -#define cimg_for2XYZ(img,x,y,z) cimg_for2Z(img,z) cimg_for2XY(img,x,y) -#define cimg_for2XZC(img,x,z,c) cimg_for2C(img,c) cimg_for2XZ(img,x,z) -#define cimg_for2YZC(img,y,z,c) cimg_for2C(img,c) cimg_for2YZ(img,y,z) -#define cimg_for2XYZC(img,x,y,z,c) cimg_for2C(img,c) cimg_for2XYZ(img,x,y,z) - -#define cimg_for_in2(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \ - i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ - ++i, ++_n1##i) -#define cimg_for_in2X(img,x0,x1,x) cimg_for_in2((img)._width,x0,x1,x) -#define cimg_for_in2Y(img,y0,y1,y) cimg_for_in2((img)._height,y0,y1,y) -#define cimg_for_in2Z(img,z0,z1,z) cimg_for_in2((img)._depth,z0,z1,z) -#define cimg_for_in2C(img,c0,c1,c) cimg_for_in2((img)._spectrum,c0,c1,c) -#define cimg_for_in2XY(img,x0,y0,x1,y1,x,y) cimg_for_in2Y(img,y0,y1,y) cimg_for_in2X(img,x0,x1,x) -#define cimg_for_in2XZ(img,x0,z0,x1,z1,x,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2X(img,x0,x1,x) -#define cimg_for_in2XC(img,x0,c0,x1,c1,x,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2X(img,x0,x1,x) -#define cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2Y(img,y0,y1,y) -#define cimg_for_in2YC(img,y0,c0,y1,c1,y,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Y(img,y0,y1,y) -#define cimg_for_in2ZC(img,z0,c0,z1,c1,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Z(img,z0,z1,z) -#define cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in2XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in2YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in2XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for3(bound,i) \ - for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ - _n1##i<(int)(bound) || i==--_n1##i; \ - _p1##i = i++, ++_n1##i) -#define cimg_for3X(img,x) cimg_for3((img)._width,x) -#define cimg_for3Y(img,y) cimg_for3((img)._height,y) -#define cimg_for3Z(img,z) cimg_for3((img)._depth,z) -#define cimg_for3C(img,c) cimg_for3((img)._spectrum,c) -#define cimg_for3XY(img,x,y) cimg_for3Y(img,y) cimg_for3X(img,x) -#define cimg_for3XZ(img,x,z) cimg_for3Z(img,z) cimg_for3X(img,x) -#define cimg_for3XC(img,x,c) cimg_for3C(img,c) cimg_for3X(img,x) -#define cimg_for3YZ(img,y,z) cimg_for3Z(img,z) cimg_for3Y(img,y) -#define cimg_for3YC(img,y,c) cimg_for3C(img,c) cimg_for3Y(img,y) -#define cimg_for3ZC(img,z,c) cimg_for3C(img,c) cimg_for3Z(img,z) -#define cimg_for3XYZ(img,x,y,z) cimg_for3Z(img,z) cimg_for3XY(img,x,y) -#define cimg_for3XZC(img,x,z,c) cimg_for3C(img,c) cimg_for3XZ(img,x,z) -#define cimg_for3YZC(img,y,z,c) cimg_for3C(img,c) cimg_for3YZ(img,y,z) -#define cimg_for3XYZC(img,x,y,z,c) cimg_for3C(img,c) cimg_for3XYZ(img,x,y,z) - -#define cimg_for_in3(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \ - i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ - _p1##i = i++, ++_n1##i) -#define cimg_for_in3X(img,x0,x1,x) cimg_for_in3((img)._width,x0,x1,x) -#define cimg_for_in3Y(img,y0,y1,y) cimg_for_in3((img)._height,y0,y1,y) -#define cimg_for_in3Z(img,z0,z1,z) cimg_for_in3((img)._depth,z0,z1,z) -#define cimg_for_in3C(img,c0,c1,c) cimg_for_in3((img)._spectrum,c0,c1,c) -#define cimg_for_in3XY(img,x0,y0,x1,y1,x,y) cimg_for_in3Y(img,y0,y1,y) cimg_for_in3X(img,x0,x1,x) -#define cimg_for_in3XZ(img,x0,z0,x1,z1,x,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3X(img,x0,x1,x) -#define cimg_for_in3XC(img,x0,c0,x1,c1,x,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3X(img,x0,x1,x) -#define cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3Y(img,y0,y1,y) -#define cimg_for_in3YC(img,y0,c0,y1,c1,y,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Y(img,y0,y1,y) -#define cimg_for_in3ZC(img,z0,c0,z1,c1,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Z(img,z0,z1,z) -#define cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in3XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in3YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in3XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for4(bound,i) \ - for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2; \ - _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ - _p1##i = i++, ++_n1##i, ++_n2##i) -#define cimg_for4X(img,x) cimg_for4((img)._width,x) -#define cimg_for4Y(img,y) cimg_for4((img)._height,y) -#define cimg_for4Z(img,z) cimg_for4((img)._depth,z) -#define cimg_for4C(img,c) cimg_for4((img)._spectrum,c) -#define cimg_for4XY(img,x,y) cimg_for4Y(img,y) cimg_for4X(img,x) -#define cimg_for4XZ(img,x,z) cimg_for4Z(img,z) cimg_for4X(img,x) -#define cimg_for4XC(img,x,c) cimg_for4C(img,c) cimg_for4X(img,x) -#define cimg_for4YZ(img,y,z) cimg_for4Z(img,z) cimg_for4Y(img,y) -#define cimg_for4YC(img,y,c) cimg_for4C(img,c) cimg_for4Y(img,y) -#define cimg_for4ZC(img,z,c) cimg_for4C(img,c) cimg_for4Z(img,z) -#define cimg_for4XYZ(img,x,y,z) cimg_for4Z(img,z) cimg_for4XY(img,x,y) -#define cimg_for4XZC(img,x,z,c) cimg_for4C(img,c) cimg_for4XZ(img,x,z) -#define cimg_for4YZC(img,y,z,c) cimg_for4C(img,c) cimg_for4YZ(img,y,z) -#define cimg_for4XYZC(img,x,y,z,c) cimg_for4C(img,c) cimg_for4XYZ(img,x,y,z) - -#define cimg_for_in4(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \ - i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ - _p1##i = i++, ++_n1##i, ++_n2##i) -#define cimg_for_in4X(img,x0,x1,x) cimg_for_in4((img)._width,x0,x1,x) -#define cimg_for_in4Y(img,y0,y1,y) cimg_for_in4((img)._height,y0,y1,y) -#define cimg_for_in4Z(img,z0,z1,z) cimg_for_in4((img)._depth,z0,z1,z) -#define cimg_for_in4C(img,c0,c1,c) cimg_for_in4((img)._spectrum,c0,c1,c) -#define cimg_for_in4XY(img,x0,y0,x1,y1,x,y) cimg_for_in4Y(img,y0,y1,y) cimg_for_in4X(img,x0,x1,x) -#define cimg_for_in4XZ(img,x0,z0,x1,z1,x,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4X(img,x0,x1,x) -#define cimg_for_in4XC(img,x0,c0,x1,c1,x,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4X(img,x0,x1,x) -#define cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4Y(img,y0,y1,y) -#define cimg_for_in4YC(img,y0,c0,y1,c1,y,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Y(img,y0,y1,y) -#define cimg_for_in4ZC(img,z0,c0,z1,c1,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Z(img,z0,z1,z) -#define cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in4XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in4YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in4XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for5(bound,i) \ - for (int i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2; \ - _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ - _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) -#define cimg_for5X(img,x) cimg_for5((img)._width,x) -#define cimg_for5Y(img,y) cimg_for5((img)._height,y) -#define cimg_for5Z(img,z) cimg_for5((img)._depth,z) -#define cimg_for5C(img,c) cimg_for5((img)._spectrum,c) -#define cimg_for5XY(img,x,y) cimg_for5Y(img,y) cimg_for5X(img,x) -#define cimg_for5XZ(img,x,z) cimg_for5Z(img,z) cimg_for5X(img,x) -#define cimg_for5XC(img,x,c) cimg_for5C(img,c) cimg_for5X(img,x) -#define cimg_for5YZ(img,y,z) cimg_for5Z(img,z) cimg_for5Y(img,y) -#define cimg_for5YC(img,y,c) cimg_for5C(img,c) cimg_for5Y(img,y) -#define cimg_for5ZC(img,z,c) cimg_for5C(img,c) cimg_for5Z(img,z) -#define cimg_for5XYZ(img,x,y,z) cimg_for5Z(img,z) cimg_for5XY(img,x,y) -#define cimg_for5XZC(img,x,z,c) cimg_for5C(img,c) cimg_for5XZ(img,x,z) -#define cimg_for5YZC(img,y,z,c) cimg_for5C(img,c) cimg_for5YZ(img,y,z) -#define cimg_for5XYZC(img,x,y,z,c) cimg_for5C(img,c) cimg_for5XYZ(img,x,y,z) - -#define cimg_for_in5(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \ - i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ - _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) -#define cimg_for_in5X(img,x0,x1,x) cimg_for_in5((img)._width,x0,x1,x) -#define cimg_for_in5Y(img,y0,y1,y) cimg_for_in5((img)._height,y0,y1,y) -#define cimg_for_in5Z(img,z0,z1,z) cimg_for_in5((img)._depth,z0,z1,z) -#define cimg_for_in5C(img,c0,c1,c) cimg_for_in5((img)._spectrum,c0,c1,c) -#define cimg_for_in5XY(img,x0,y0,x1,y1,x,y) cimg_for_in5Y(img,y0,y1,y) cimg_for_in5X(img,x0,x1,x) -#define cimg_for_in5XZ(img,x0,z0,x1,z1,x,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5X(img,x0,x1,x) -#define cimg_for_in5XC(img,x0,c0,x1,c1,x,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5X(img,x0,x1,x) -#define cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5Y(img,y0,y1,y) -#define cimg_for_in5YC(img,y0,c0,y1,c1,y,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Y(img,y0,y1,y) -#define cimg_for_in5ZC(img,z0,c0,z1,c1,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Z(img,z0,z1,z) -#define cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in5XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in5YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in5XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for6(bound,i) \ - for (int i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3; \ - _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ - _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) -#define cimg_for6X(img,x) cimg_for6((img)._width,x) -#define cimg_for6Y(img,y) cimg_for6((img)._height,y) -#define cimg_for6Z(img,z) cimg_for6((img)._depth,z) -#define cimg_for6C(img,c) cimg_for6((img)._spectrum,c) -#define cimg_for6XY(img,x,y) cimg_for6Y(img,y) cimg_for6X(img,x) -#define cimg_for6XZ(img,x,z) cimg_for6Z(img,z) cimg_for6X(img,x) -#define cimg_for6XC(img,x,c) cimg_for6C(img,c) cimg_for6X(img,x) -#define cimg_for6YZ(img,y,z) cimg_for6Z(img,z) cimg_for6Y(img,y) -#define cimg_for6YC(img,y,c) cimg_for6C(img,c) cimg_for6Y(img,y) -#define cimg_for6ZC(img,z,c) cimg_for6C(img,c) cimg_for6Z(img,z) -#define cimg_for6XYZ(img,x,y,z) cimg_for6Z(img,z) cimg_for6XY(img,x,y) -#define cimg_for6XZC(img,x,z,c) cimg_for6C(img,c) cimg_for6XZ(img,x,z) -#define cimg_for6YZC(img,y,z,c) cimg_for6C(img,c) cimg_for6YZ(img,y,z) -#define cimg_for6XYZC(img,x,y,z,c) cimg_for6C(img,c) cimg_for6XYZ(img,x,y,z) - -#define cimg_for_in6(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \ - i<=(int)(i1) && (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ - _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) -#define cimg_for_in6X(img,x0,x1,x) cimg_for_in6((img)._width,x0,x1,x) -#define cimg_for_in6Y(img,y0,y1,y) cimg_for_in6((img)._height,y0,y1,y) -#define cimg_for_in6Z(img,z0,z1,z) cimg_for_in6((img)._depth,z0,z1,z) -#define cimg_for_in6C(img,c0,c1,c) cimg_for_in6((img)._spectrum,c0,c1,c) -#define cimg_for_in6XY(img,x0,y0,x1,y1,x,y) cimg_for_in6Y(img,y0,y1,y) cimg_for_in6X(img,x0,x1,x) -#define cimg_for_in6XZ(img,x0,z0,x1,z1,x,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6X(img,x0,x1,x) -#define cimg_for_in6XC(img,x0,c0,x1,c1,x,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6X(img,x0,x1,x) -#define cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6Y(img,y0,y1,y) -#define cimg_for_in6YC(img,y0,c0,y1,c1,y,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Y(img,y0,y1,y) -#define cimg_for_in6ZC(img,z0,c0,z1,c1,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Z(img,z0,z1,z) -#define cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in6XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in6YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in6XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for7(bound,i) \ - for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3; \ - _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ - _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) -#define cimg_for7X(img,x) cimg_for7((img)._width,x) -#define cimg_for7Y(img,y) cimg_for7((img)._height,y) -#define cimg_for7Z(img,z) cimg_for7((img)._depth,z) -#define cimg_for7C(img,c) cimg_for7((img)._spectrum,c) -#define cimg_for7XY(img,x,y) cimg_for7Y(img,y) cimg_for7X(img,x) -#define cimg_for7XZ(img,x,z) cimg_for7Z(img,z) cimg_for7X(img,x) -#define cimg_for7XC(img,x,c) cimg_for7C(img,c) cimg_for7X(img,x) -#define cimg_for7YZ(img,y,z) cimg_for7Z(img,z) cimg_for7Y(img,y) -#define cimg_for7YC(img,y,c) cimg_for7C(img,c) cimg_for7Y(img,y) -#define cimg_for7ZC(img,z,c) cimg_for7C(img,c) cimg_for7Z(img,z) -#define cimg_for7XYZ(img,x,y,z) cimg_for7Z(img,z) cimg_for7XY(img,x,y) -#define cimg_for7XZC(img,x,z,c) cimg_for7C(img,c) cimg_for7XZ(img,x,z) -#define cimg_for7YZC(img,y,z,c) cimg_for7C(img,c) cimg_for7YZ(img,y,z) -#define cimg_for7XYZC(img,x,y,z,c) cimg_for7C(img,c) cimg_for7XYZ(img,x,y,z) - -#define cimg_for_in7(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \ - i<=(int)(i1) && (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ - _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) -#define cimg_for_in7X(img,x0,x1,x) cimg_for_in7((img)._width,x0,x1,x) -#define cimg_for_in7Y(img,y0,y1,y) cimg_for_in7((img)._height,y0,y1,y) -#define cimg_for_in7Z(img,z0,z1,z) cimg_for_in7((img)._depth,z0,z1,z) -#define cimg_for_in7C(img,c0,c1,c) cimg_for_in7((img)._spectrum,c0,c1,c) -#define cimg_for_in7XY(img,x0,y0,x1,y1,x,y) cimg_for_in7Y(img,y0,y1,y) cimg_for_in7X(img,x0,x1,x) -#define cimg_for_in7XZ(img,x0,z0,x1,z1,x,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7X(img,x0,x1,x) -#define cimg_for_in7XC(img,x0,c0,x1,c1,x,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7X(img,x0,x1,x) -#define cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7Y(img,y0,y1,y) -#define cimg_for_in7YC(img,y0,c0,y1,c1,y,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Y(img,y0,y1,y) -#define cimg_for_in7ZC(img,z0,c0,z1,c1,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Z(img,z0,z1,z) -#define cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in7XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in7YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in7XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for8(bound,i) \ - for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(bound)?(int)(bound)-1:4; \ - _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ - _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) -#define cimg_for8X(img,x) cimg_for8((img)._width,x) -#define cimg_for8Y(img,y) cimg_for8((img)._height,y) -#define cimg_for8Z(img,z) cimg_for8((img)._depth,z) -#define cimg_for8C(img,c) cimg_for8((img)._spectrum,c) -#define cimg_for8XY(img,x,y) cimg_for8Y(img,y) cimg_for8X(img,x) -#define cimg_for8XZ(img,x,z) cimg_for8Z(img,z) cimg_for8X(img,x) -#define cimg_for8XC(img,x,c) cimg_for8C(img,c) cimg_for8X(img,x) -#define cimg_for8YZ(img,y,z) cimg_for8Z(img,z) cimg_for8Y(img,y) -#define cimg_for8YC(img,y,c) cimg_for8C(img,c) cimg_for8Y(img,y) -#define cimg_for8ZC(img,z,c) cimg_for8C(img,c) cimg_for8Z(img,z) -#define cimg_for8XYZ(img,x,y,z) cimg_for8Z(img,z) cimg_for8XY(img,x,y) -#define cimg_for8XZC(img,x,z,c) cimg_for8C(img,c) cimg_for8XZ(img,x,z) -#define cimg_for8YZC(img,y,z,c) cimg_for8C(img,c) cimg_for8YZ(img,y,z) -#define cimg_for8XYZC(img,x,y,z,c) cimg_for8C(img,c) cimg_for8XYZ(img,x,y,z) - -#define cimg_for_in8(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \ - i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) -#define cimg_for_in8X(img,x0,x1,x) cimg_for_in8((img)._width,x0,x1,x) -#define cimg_for_in8Y(img,y0,y1,y) cimg_for_in8((img)._height,y0,y1,y) -#define cimg_for_in8Z(img,z0,z1,z) cimg_for_in8((img)._depth,z0,z1,z) -#define cimg_for_in8C(img,c0,c1,c) cimg_for_in8((img)._spectrum,c0,c1,c) -#define cimg_for_in8XY(img,x0,y0,x1,y1,x,y) cimg_for_in8Y(img,y0,y1,y) cimg_for_in8X(img,x0,x1,x) -#define cimg_for_in8XZ(img,x0,z0,x1,z1,x,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8X(img,x0,x1,x) -#define cimg_for_in8XC(img,x0,c0,x1,c1,x,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8X(img,x0,x1,x) -#define cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8Y(img,y0,y1,y) -#define cimg_for_in8YC(img,y0,c0,y1,c1,y,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Y(img,y0,y1,y) -#define cimg_for_in8ZC(img,z0,c0,z1,c1,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Z(img,z0,z1,z) -#define cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in8XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in8YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in8XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for9(bound,i) \ - for (int i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4; \ - _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ - _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) -#define cimg_for9X(img,x) cimg_for9((img)._width,x) -#define cimg_for9Y(img,y) cimg_for9((img)._height,y) -#define cimg_for9Z(img,z) cimg_for9((img)._depth,z) -#define cimg_for9C(img,c) cimg_for9((img)._spectrum,c) -#define cimg_for9XY(img,x,y) cimg_for9Y(img,y) cimg_for9X(img,x) -#define cimg_for9XZ(img,x,z) cimg_for9Z(img,z) cimg_for9X(img,x) -#define cimg_for9XC(img,x,c) cimg_for9C(img,c) cimg_for9X(img,x) -#define cimg_for9YZ(img,y,z) cimg_for9Z(img,z) cimg_for9Y(img,y) -#define cimg_for9YC(img,y,c) cimg_for9C(img,c) cimg_for9Y(img,y) -#define cimg_for9ZC(img,z,c) cimg_for9C(img,c) cimg_for9Z(img,z) -#define cimg_for9XYZ(img,x,y,z) cimg_for9Z(img,z) cimg_for9XY(img,x,y) -#define cimg_for9XZC(img,x,z,c) cimg_for9C(img,c) cimg_for9XZ(img,x,z) -#define cimg_for9YZC(img,y,z,c) cimg_for9C(img,c) cimg_for9YZ(img,y,z) -#define cimg_for9XYZC(img,x,y,z,c) cimg_for9C(img,c) cimg_for9XYZ(img,x,y,z) - -#define cimg_for_in9(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \ - i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) -#define cimg_for_in9X(img,x0,x1,x) cimg_for_in9((img)._width,x0,x1,x) -#define cimg_for_in9Y(img,y0,y1,y) cimg_for_in9((img)._height,y0,y1,y) -#define cimg_for_in9Z(img,z0,z1,z) cimg_for_in9((img)._depth,z0,z1,z) -#define cimg_for_in9C(img,c0,c1,c) cimg_for_in9((img)._spectrum,c0,c1,c) -#define cimg_for_in9XY(img,x0,y0,x1,y1,x,y) cimg_for_in9Y(img,y0,y1,y) cimg_for_in9X(img,x0,x1,x) -#define cimg_for_in9XZ(img,x0,z0,x1,z1,x,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9X(img,x0,x1,x) -#define cimg_for_in9XC(img,x0,c0,x1,c1,x,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9X(img,x0,x1,x) -#define cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9Y(img,y0,y1,y) -#define cimg_for_in9YC(img,y0,c0,y1,c1,y,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Y(img,y0,y1,y) -#define cimg_for_in9ZC(img,z0,c0,z1,c1,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Z(img,z0,z1,z) -#define cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in9XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in9YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in9XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for2x2(img,x,y,z,c,I,T) \ - cimg_for2((img)._height,y) for (int x = 0, \ - _n1##x = (int)( \ - (I[0] = (T)(img)(0,y,z,c)), \ - (I[2] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[1] = (T)(img)(_n1##x,y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x; \ - I[0] = I[1], \ - I[2] = I[3], \ - ++x, ++_n1##x) - -#define cimg_for_in2x2(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _n1##x = (int)( \ - (I[0] = (T)(img)(x,y,z,c)), \ - (I[2] = (T)(img)(x,_n1##y,z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ - x<=(int)(x1) && ((_n1##x<(img).width() && ( \ - (I[1] = (T)(img)(_n1##x,y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x); \ - I[0] = I[1], \ - I[2] = I[3], \ - ++x, ++_n1##x) - -#define cimg_for3x3(img,x,y,z,c,I,T) \ - cimg_for3((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = (int)( \ - (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[3] = I[4] = (T)(img)(0,y,z,c)), \ - (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x; \ - I[0] = I[1], I[1] = I[2], \ - I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], \ - _p1##x = x++, ++_n1##x) - -#define cimg_for_in3x3(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = (int)( \ - (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[3] = (T)(img)(_p1##x,y,z,c)), \ - (I[6] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[1] = (T)(img)(x,_p1##y,z,c)), \ - (I[4] = (T)(img)(x,y,z,c)), \ - (I[7] = (T)(img)(x,_n1##y,z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ - x<=(int)(x1) && ((_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x); \ - I[0] = I[1], I[1] = I[2], \ - I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], \ - _p1##x = x++, ++_n1##x) - -#define cimg_for4x4(img,x,y,z,c,I,T) \ - cimg_for4((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = (int)( \ - (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[4] = I[5] = (T)(img)(0,y,z,c)), \ - (I[8] = I[9] = (T)(img)(0,_n1##y,z,c)), \ - (I[12] = I[13] = (T)(img)(0,_n2##y,z,c)), \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ - 2>=(img)._width?(img).width()-1:2); \ - (_n2##x<(img).width() && ( \ - (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], \ - I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for_in4x4(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in4((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = (int)( \ - (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[4] = (T)(img)(_p1##x,y,z,c)), \ - (I[8] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[12] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[1] = (T)(img)(x,_p1##y,z,c)), \ - (I[5] = (T)(img)(x,y,z,c)), \ - (I[9] = (T)(img)(x,_n1##y,z,c)), \ - (I[13] = (T)(img)(x,_n2##y,z,c)), \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ - x+2>=(int)(img)._width?(img).width()-1:x+2); \ - x<=(int)(x1) && ((_n2##x<(img).width() && ( \ - (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], \ - I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for5x5(img,x,y,z,c,I,T) \ - cimg_for5((img)._height,y) for (int x = 0, \ - _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = (int)( \ - (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[5] = I[6] = I[7] = (T)(img)(0,_p1##y,z,c)), \ - (I[10] = I[11] = I[12] = (T)(img)(0,y,z,c)), \ - (I[15] = I[16] = I[17] = (T)(img)(0,_n1##y,z,c)), \ - (I[20] = I[21] = I[22] = (T)(img)(0,_n2##y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ - 2>=(img)._width?(img).width()-1:2); \ - (_n2##x<(img).width() && ( \ - (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ - I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for_in5x5(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in5((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = (int)( \ - (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[5] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[10] = (T)(img)(_p2##x,y,z,c)), \ - (I[15] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[20] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[6] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[11] = (T)(img)(_p1##x,y,z,c)), \ - (I[16] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[21] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[2] = (T)(img)(x,_p2##y,z,c)), \ - (I[7] = (T)(img)(x,_p1##y,z,c)), \ - (I[12] = (T)(img)(x,y,z,c)), \ - (I[17] = (T)(img)(x,_n1##y,z,c)), \ - (I[22] = (T)(img)(x,_n2##y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ - x+2>=(int)(img)._width?(img).width()-1:x+2); \ - x<=(int)(x1) && ((_n2##x<(img).width() && ( \ - (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ - I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for6x6(img,x,y,z,c,I,T) \ - cimg_for6((img)._height,y) for (int x = 0, \ - _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = 2>=(img)._width?(img).width()-1:2, \ - _n3##x = (int)( \ - (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[6] = I[7] = I[8] = (T)(img)(0,_p1##y,z,c)), \ - (I[12] = I[13] = I[14] = (T)(img)(0,y,z,c)), \ - (I[18] = I[19] = I[20] = (T)(img)(0,_n1##y,z,c)), \ - (I[24] = I[25] = I[26] = (T)(img)(0,_n2##y,z,c)), \ - (I[30] = I[31] = I[32] = (T)(img)(0,_n3##y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,y,z,c)), \ - (I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,y,z,c)), \ - (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ - 3>=(img)._width?(img).width()-1:3); \ - (_n3##x<(img).width() && ( \ - (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,y,z,c)), \ - (I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for_in6x6(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in6((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)x0, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = x+2>=(int)(img)._width?(img).width()-1:x+2, \ - _n3##x = (int)( \ - (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[6] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[12] = (T)(img)(_p2##x,y,z,c)), \ - (I[18] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[24] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[30] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[7] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[13] = (T)(img)(_p1##x,y,z,c)), \ - (I[19] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[25] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[31] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[2] = (T)(img)(x,_p2##y,z,c)), \ - (I[8] = (T)(img)(x,_p1##y,z,c)), \ - (I[14] = (T)(img)(x,y,z,c)), \ - (I[20] = (T)(img)(x,_n1##y,z,c)), \ - (I[26] = (T)(img)(x,_n2##y,z,c)), \ - (I[32] = (T)(img)(x,_n3##y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,y,z,c)), \ - (I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,y,z,c)), \ - (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ - x+3>=(int)(img)._width?(img).width()-1:x+3); \ - x<=(int)(x1) && ((_n3##x<(img).width() && ( \ - (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,y,z,c)), \ - (I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for7x7(img,x,y,z,c,I,T) \ - cimg_for7((img)._height,y) for (int x = 0, \ - _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = 2>=(img)._width?(img).width()-1:2, \ - _n3##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p2##y,z,c)), \ - (I[14] = I[15] = I[16] = I[17] = (T)(img)(0,_p1##y,z,c)), \ - (I[21] = I[22] = I[23] = I[24] = (T)(img)(0,y,z,c)), \ - (I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_n1##y,z,c)), \ - (I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_n2##y,z,c)), \ - (I[42] = I[43] = I[44] = I[45] = (T)(img)(0,_n3##y,z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[25] = (T)(img)(_n1##x,y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[26] = (T)(img)(_n2##x,y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ - 3>=(img)._width?(img).width()-1:3); \ - (_n3##x<(img).width() && ( \ - (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[27] = (T)(img)(_n3##x,y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ - I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for_in7x7(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in7((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = x+2>=(int)(img)._width?(img).width()-1:x+2, \ - _n3##x = (int)( \ - (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[7] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[14] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[21] = (T)(img)(_p3##x,y,z,c)), \ - (I[28] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[35] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[42] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[8] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[15] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[22] = (T)(img)(_p2##x,y,z,c)), \ - (I[29] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[36] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[43] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[9] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[16] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[23] = (T)(img)(_p1##x,y,z,c)), \ - (I[30] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[37] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[44] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[3] = (T)(img)(x,_p3##y,z,c)), \ - (I[10] = (T)(img)(x,_p2##y,z,c)), \ - (I[17] = (T)(img)(x,_p1##y,z,c)), \ - (I[24] = (T)(img)(x,y,z,c)), \ - (I[31] = (T)(img)(x,_n1##y,z,c)), \ - (I[38] = (T)(img)(x,_n2##y,z,c)), \ - (I[45] = (T)(img)(x,_n3##y,z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[25] = (T)(img)(_n1##x,y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[26] = (T)(img)(_n2##x,y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ - x+3>=(int)(img)._width?(img).width()-1:x+3); \ - x<=(int)(x1) && ((_n3##x<(img).width() && ( \ - (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[27] = (T)(img)(_n3##x,y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ - I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for8x8(img,x,y,z,c,I,T) \ - cimg_for8((img)._height,y) for (int x = 0, \ - _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p2##y,z,c)), \ - (I[16] = I[17] = I[18] = I[19] = (T)(img)(0,_p1##y,z,c)), \ - (I[24] = I[25] = I[26] = I[27] = (T)(img)(0,y,z,c)), \ - (I[32] = I[33] = I[34] = I[35] = (T)(img)(0,_n1##y,z,c)), \ - (I[40] = I[41] = I[42] = I[43] = (T)(img)(0,_n2##y,z,c)), \ - (I[48] = I[49] = I[50] = I[51] = (T)(img)(0,_n3##y,z,c)), \ - (I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_n4##y,z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[28] = (T)(img)(_n1##x,y,z,c)), \ - (I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[29] = (T)(img)(_n2##x,y,z,c)), \ - (I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[30] = (T)(img)(_n3##x,y,z,c)), \ - (I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ - 4>=((img)._width)?(img).width()-1:4); \ - (_n4##x<(img).width() && ( \ - (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[31] = (T)(img)(_n4##x,y,z,c)), \ - (I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_for_in8x8(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in8((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = (int)( \ - (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[8] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[16] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[24] = (T)(img)(_p3##x,y,z,c)), \ - (I[32] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[40] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[48] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[56] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[9] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[17] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[25] = (T)(img)(_p2##x,y,z,c)), \ - (I[33] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[41] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[49] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[57] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[10] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[18] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[26] = (T)(img)(_p1##x,y,z,c)), \ - (I[34] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[42] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[50] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[58] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[3] = (T)(img)(x,_p3##y,z,c)), \ - (I[11] = (T)(img)(x,_p2##y,z,c)), \ - (I[19] = (T)(img)(x,_p1##y,z,c)), \ - (I[27] = (T)(img)(x,y,z,c)), \ - (I[35] = (T)(img)(x,_n1##y,z,c)), \ - (I[43] = (T)(img)(x,_n2##y,z,c)), \ - (I[51] = (T)(img)(x,_n3##y,z,c)), \ - (I[59] = (T)(img)(x,_n4##y,z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[28] = (T)(img)(_n1##x,y,z,c)), \ - (I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[29] = (T)(img)(_n2##x,y,z,c)), \ - (I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[30] = (T)(img)(_n3##x,y,z,c)), \ - (I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ - x+4>=(img).width()?(img).width()-1:x+4); \ - x<=(int)(x1) && ((_n4##x<(img).width() && ( \ - (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[31] = (T)(img)(_n4##x,y,z,c)), \ - (I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_for9x9(img,x,y,z,c,I,T) \ - cimg_for9((img)._height,y) for (int x = 0, \ - _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p3##y,z,c)), \ - (I[18] = I[19] = I[20] = I[21] = I[22] = (T)(img)(0,_p2##y,z,c)), \ - (I[27] = I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_p1##y,z,c)), \ - (I[36] = I[37] = I[38] = I[39] = I[40] = (T)(img)(0,y,z,c)), \ - (I[45] = I[46] = I[47] = I[48] = I[49] = (T)(img)(0,_n1##y,z,c)), \ - (I[54] = I[55] = I[56] = I[57] = I[58] = (T)(img)(0,_n2##y,z,c)), \ - (I[63] = I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_n3##y,z,c)), \ - (I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_n4##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[41] = (T)(img)(_n1##x,y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[42] = (T)(img)(_n2##x,y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[43] = (T)(img)(_n3##x,y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ - 4>=((img)._width)?(img).width()-1:4); \ - (_n4##x<(img).width() && ( \ - (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[44] = (T)(img)(_n4##x,y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \ - I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \ - I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \ - _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_for_in9x9(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in9((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = (int)( \ - (I[0] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[9] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[18] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[27] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[36] = (T)(img)(_p4##x,y,z,c)), \ - (I[45] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[54] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[63] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[72] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[1] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[10] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[19] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[28] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[37] = (T)(img)(_p3##x,y,z,c)), \ - (I[46] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[55] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[64] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[73] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[2] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[11] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[20] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[29] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[38] = (T)(img)(_p2##x,y,z,c)), \ - (I[47] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[56] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[65] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[74] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[3] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[12] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[21] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[30] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[39] = (T)(img)(_p1##x,y,z,c)), \ - (I[48] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[57] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[66] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[75] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[4] = (T)(img)(x,_p4##y,z,c)), \ - (I[13] = (T)(img)(x,_p3##y,z,c)), \ - (I[22] = (T)(img)(x,_p2##y,z,c)), \ - (I[31] = (T)(img)(x,_p1##y,z,c)), \ - (I[40] = (T)(img)(x,y,z,c)), \ - (I[49] = (T)(img)(x,_n1##y,z,c)), \ - (I[58] = (T)(img)(x,_n2##y,z,c)), \ - (I[67] = (T)(img)(x,_n3##y,z,c)), \ - (I[76] = (T)(img)(x,_n4##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[41] = (T)(img)(_n1##x,y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[42] = (T)(img)(_n2##x,y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[43] = (T)(img)(_n3##x,y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ - x+4>=(img).width()?(img).width()-1:x+4); \ - x<=(int)(x1) && ((_n4##x<(img).width() && ( \ - (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[44] = (T)(img)(_n4##x,y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \ - I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \ - I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \ - _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_for2x2x2(img,x,y,z,c,I,T) \ - cimg_for2((img)._depth,z) cimg_for2((img)._height,y) for (int x = 0, \ - _n1##x = (int)( \ - (I[0] = (T)(img)(0,y,z,c)), \ - (I[2] = (T)(img)(0,_n1##y,z,c)), \ - (I[4] = (T)(img)(0,y,_n1##z,c)), \ - (I[6] = (T)(img)(0,_n1##y,_n1##z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[1] = (T)(img)(_n1##x,y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ - x==--_n1##x; \ - I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \ - ++x, ++_n1##x) - -#define cimg_for_in2x2x2(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in2((img)._depth,z0,z1,z) cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _n1##x = (int)( \ - (I[0] = (T)(img)(x,y,z,c)), \ - (I[2] = (T)(img)(x,_n1##y,z,c)), \ - (I[4] = (T)(img)(x,y,_n1##z,c)), \ - (I[6] = (T)(img)(x,_n1##y,_n1##z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ - x<=(int)(x1) && ((_n1##x<(img).width() && ( \ - (I[1] = (T)(img)(_n1##x,y,z,c)), \ - (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ - x==--_n1##x); \ - I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \ - ++x, ++_n1##x) - -#define cimg_for3x3x3(img,x,y,z,c,I,T) \ - cimg_for3((img)._depth,z) cimg_for3((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = (int)( \ - (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[3] = I[4] = (T)(img)(0,y,_p1##z,c)), \ - (I[6] = I[7] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[9] = I[10] = (T)(img)(0,_p1##y,z,c)), \ - (I[12] = I[13] = (T)(img)(0,y,z,c)), \ - (I[15] = I[16] = (T)(img)(0,_n1##y,z,c)), \ - (I[18] = I[19] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[21] = I[22] = (T)(img)(0,y,_n1##z,c)), \ - (I[24] = I[25] = (T)(img)(0,_n1##y,_n1##z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,y,z,c)), \ - (I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ - x==--_n1##x; \ - I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \ - I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \ - _p1##x = x++, ++_n1##x) - -#define cimg_for_in3x3x3(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in3((img)._depth,z0,z1,z) cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = (int)( \ - (I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[3] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[9] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[12] = (T)(img)(_p1##x,y,z,c)), \ - (I[15] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[21] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[1] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[4] = (T)(img)(x,y,_p1##z,c)), \ - (I[7] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[10] = (T)(img)(x,_p1##y,z,c)), \ - (I[13] = (T)(img)(x,y,z,c)), \ - (I[16] = (T)(img)(x,_n1##y,z,c)), \ - (I[19] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[22] = (T)(img)(x,y,_n1##z,c)), \ - (I[25] = (T)(img)(x,_n1##y,_n1##z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ - x<=(int)(x1) && ((_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,y,z,c)), \ - (I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ - x==--_n1##x); \ - I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \ - I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \ - _p1##x = x++, ++_n1##x) - -#define cimglist_for(list,l) for (int l = 0; l<(int)(list)._width; ++l) -#define cimglist_for_in(list,l0,l1,l) \ - for (int l = (int)(l0)<0?0:(int)(l0), _max##l = (unsigned int)l1<(list)._width?(int)(l1):(int)(list)._width-1; l<=_max##l; ++l) - -#define cimglist_apply(list,fn) cimglist_for(list,__##fn) (list)[__##fn].fn - -// Macros used to display error messages when exceptions are thrown. -// You should not use these macros is your own code. -#define _cimgdisplay_instance "[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" -#define cimgdisplay_instance _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']' -#define _cimg_instance "[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" -#define cimg_instance _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type() -#define _cimglist_instance "[instance(%u,%u,%p)] CImgList<%s>::" -#define cimglist_instance _width,_allocated_width,_data,pixel_type() - -/*------------------------------------------------ - # - # - # Define cimg_library:: namespace - # - # - -------------------------------------------------*/ -//! Contains all classes and functions of the \CImg library. -/** - This namespace is defined to avoid functions and class names collisions - that could happen with the inclusion of other C++ header files. - Anyway, it should not happen often and you should reasonnably start most of your - \CImg-based programs with - \code - #include "CImg.h" - using namespace cimg_library; - \endcode - to simplify the declaration of \CImg Library objects afterwards. -**/ -namespace cimg_library_suffixed { - - // Declare the four classes of the CImg Library. - template struct CImg; - template struct CImgList; - struct CImgDisplay; - struct CImgException; - - // Declare cimg:: namespace. - // This is an uncomplete namespace definition here. It only contains some - // necessary stuffs to ensure a correct declaration order of the classes and functions - // defined afterwards. - namespace cimg { - - // Define ascii sequences for colored terminal output. -#ifdef cimg_use_vt100 - const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; - const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; - const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; - const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; - const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; - const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; - const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; - const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; - const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; - const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; - const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; -#else - const char t_normal[] = { 0 }; - const char *const t_black = cimg::t_normal, - *const t_red = cimg::t_normal, - *const t_green = cimg::t_normal, - *const t_yellow = cimg::t_normal, - *const t_blue = cimg::t_normal, - *const t_magenta = cimg::t_normal, - *const t_cyan = cimg::t_normal, - *const t_white = cimg::t_normal, - *const t_bold = cimg::t_normal, - *const t_underscore = cimg::t_normal; -#endif - - inline std::FILE* output(std::FILE *file=0); - inline void info(); - - //! Avoid warning messages due to unused parameters. Do nothing actually. - template - inline void unused(const T&, ...) {} - - // [internal] Lock/unlock a mutex for managing concurrent threads. - // 'lock_mode' can be { 0=unlock | 1=lock | 2=trylock }. - // 'n' can be in [0,31] but mutex range [0,16] is reserved by CImg. - inline int mutex(const unsigned int n, const int lock_mode=1); - - inline unsigned int& _exception_mode(const unsigned int value, const bool is_set) { - static unsigned int mode = cimg_verbosity; - cimg::mutex(0); - if (is_set) mode = value; - cimg::mutex(0,0); - return mode; - } - - //! Set current \CImg exception mode. - /** - The way error messages are handled by \CImg can be changed dynamically, using this function. - \param mode Desired exception mode. Possible values are: - - \c 0: Hide library messages (quiet mode). - - \c 1: Print library messages on the console. - - \c 2: Display library messages on a dialog window (default behavior). - - \c 3: Do as \c 1 + add extra debug warnings (slow down the code!). - - \c 4: Do as \c 2 + add extra debug warnings (slow down the code!). - **/ - inline unsigned int& exception_mode(const unsigned int mode) { - return _exception_mode(mode,true); - } - - //! Return current \CImg exception mode. - /** - \note By default, return the value of configuration macro \c cimg_verbosity - **/ - inline unsigned int& exception_mode() { - return _exception_mode(0,false); - } - - inline int dialog(const char *const title, const char *const msg, const char *const button1_label="OK", - const char *const button2_label=0, const char *const button3_label=0, - const char *const button4_label=0, const char *const button5_label=0, - const char *const button6_label=0, const bool centering=false); - - inline double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0); - } - - /*--------------------------------------- - # - # Define the CImgException structures - # - --------------------------------------*/ - //! Instances of \c CImgException are thrown when errors are encountered in a \CImg function call. - /** - \par Overview - - CImgException is the base class of all exceptions thrown by \CImg. - CImgException is never thrown itself. Derived classes that specify the type of errord are thrown instead. - These derived classes can be: - - - \b CImgArgumentException: Thrown when one argument of a called \CImg function is invalid. - This is probably one of the most thrown exception by \CImg. - For instance, the following example throws a \c CImgArgumentException: - \code - CImg img(100,100,1,3); // Define a 100x100 color image with float-valued pixels. - img.mirror('e'); // Try to mirror image along the (non-existing) 'e'-axis. - \endcode - - - \b CImgDisplayException: Thrown when something went wrong during the display of images in CImgDisplay instances. - - - \b CImgInstanceException: Thrown when an instance associated to a called \CImg method does not fit - the function requirements. For instance, the following example throws a \c CImgInstanceException: - \code - const CImg img; // Define an empty image. - const float value = img.at(0); // Try to read first pixel value (does not exist). - \endcode - - - \b CImgIOException: Thrown when an error occured when trying to load or save image files. - This happens when trying to read files that do not exist or with invalid formats. - For instance, the following example throws a \c CImgIOException: - \code - const CImg img("missing_file.jpg"); // Try to load a file that does not exist. - \endcode - - - \b CImgWarningException: Thrown only if configuration macro \c cimg_strict_warnings is set, and - when a \CImg function has to display a warning message (see cimg::warn()). - - It is not recommended to throw CImgException instances by yourself, since they are expected to be thrown only by \CImg. - When an error occurs in a library function call, \CImg may display error messages on the screen or on the - standard output, depending on the current \CImg exception mode. - The \CImg exception mode can be get and set by functions cimg::exception_mode() and cimg::exception_mode(unsigned int). - - \par Exceptions handling - - In all cases, when an error occurs in \CImg, an instance of the corresponding exception class is thrown. - This may lead the program to break (this is the default behavior), but you can bypass this behavior by handling the exceptions by yourself, - using a usual try { ... } catch () { ... } bloc, as in the following example: - \code - #define "CImg.h" - using namespace cimg_library; - int main() { - cimg::exception_mode(0); // Enable quiet exception mode. - try { - ... // Here, do what you want to stress the CImg library. - } catch (CImgException &e) { // You succeeded: something went wrong! - std::fprintf(stderr,"CImg Library Error: %s",e.what()); // Display your custom error message. - ... // Do what you want now to save the ship! - } - } - \endcode - **/ - struct CImgException : public std::exception { -#define _cimg_exception_err(etype,disp_flag) \ - std::va_list ap; va_start(ap,format); cimg_vsnprintf(_message,sizeof(_message),format,ap); va_end(ap); \ - if (cimg::exception_mode()) { \ - std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,etype,cimg::t_normal,_message); \ - if (cimg_display && disp_flag && !(cimg::exception_mode()%2)) try { cimg::dialog(etype,_message,"Abort"); } catch (CImgException&) {} \ - if (cimg::exception_mode()>=3) cimg_library_suffixed::cimg::info(); \ - } - - char _message[16384]; - CImgException() { *_message = 0; } - CImgException(const char *const format, ...) { _cimg_exception_err("CImgException",true); } - //! Return a C-string containing the error message associated to the thrown exception. - const char *what() const throw() { return _message; } - }; - - // The CImgInstanceException class is used to throw an exception related - // to an invalid instance encountered in a library function call. - struct CImgInstanceException : public CImgException { - CImgInstanceException(const char *const format, ...) { _cimg_exception_err("CImgInstanceException",true); } - }; - - // The CImgArgumentException class is used to throw an exception related - // to invalid arguments encountered in a library function call. - struct CImgArgumentException : public CImgException { - CImgArgumentException(const char *const format, ...) { _cimg_exception_err("CImgArgumentException",true); } - }; - - // The CImgIOException class is used to throw an exception related - // to input/output file problems encountered in a library function call. - struct CImgIOException : public CImgException { - CImgIOException(const char *const format, ...) { _cimg_exception_err("CImgIOException",true); } - }; - - // The CImgDisplayException class is used to throw an exception related - // to display problems encountered in a library function call. - struct CImgDisplayException : public CImgException { - CImgDisplayException(const char *const format, ...) { _cimg_exception_err("CImgDisplayException",false); } - }; - - // The CImgWarningException class is used to throw an exception for warnings - // encountered in a library function call. - struct CImgWarningException : public CImgException { - CImgWarningException(const char *const format, ...) { _cimg_exception_err("CImgWarningException",false); } - }; - - /*------------------------------------- - # - # Define cimg:: namespace - # - -----------------------------------*/ - //! Contains \a low-level functions and variables of the \CImg Library. - /** - Most of the functions and variables within this namespace are used by the \CImg library for low-level operations. - You may use them to access specific const values or environment variables internally used by \CImg. - \warning Never write using namespace cimg_library::cimg; in your source code. Lot of functions in the - cimg:: namespace have the same names as standard C functions that may be defined in the global namespace ::. - **/ - namespace cimg { - - // Define traits that will be used to determine the best data type to work in CImg functions. - // - template struct type { - static const char* string() { - static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24", - "unknown32", "unknown40", "unknown48", "unknown56", - "unknown64", "unknown72", "unknown80", "unknown88", - "unknown96", "unknown104", "unknown112", "unknown120", - "unknown128" }; - return s[(sizeof(T)<17)?sizeof(T):0]; - } - static bool is_float() { return false; } - static bool is_inf(const T) { return false; } - static bool is_nan(const T) { return false; } - static T min() { return (T)-1>0?(T)0:(T)-1<<(8*sizeof(T)-1); } - static T max() { return (T)-1>0?(T)-1:~((T)-1<<(8*sizeof(T)-1)); } - static T inf() { return max(); } - static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; } - static const char* format() { return "%s"; } - static const char* format(const T val) { static const char *const s = "unknown"; cimg::unused(val); return s; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "bool"; return s; } - static bool is_float() { return false; } - static bool is_inf(const bool) { return false; } - static bool is_nan(const bool) { return false; } - static bool min() { return false; } - static bool max() { return true; } - static bool inf() { return max(); } - static bool is_inf() { return false; } - static bool cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(bool)val; } - static const char* format() { return "%s"; } - static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "unsigned char"; return s; } - static bool is_float() { return false; } - static bool is_inf(const unsigned char) { return false; } - static bool is_nan(const unsigned char) { return false; } - static unsigned char min() { return 0; } - static unsigned char max() { return (unsigned char)~0U; } - static unsigned char inf() { return max(); } - static unsigned char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; } - static const char* format() { return "%u"; } - static unsigned int format(const unsigned char val) { return (unsigned int)val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "char"; return s; } - static bool is_float() { return false; } - static bool is_inf(const char) { return false; } - static bool is_nan(const char) { return false; } - static char min() { return (char)(-1L<<(8*sizeof(char)-1)); } - static char max() { return (char)~((char)(-1L<<(8*sizeof(char)-1))); } - static char inf() { return max(); } - static char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(char)val; } - static const char* format() { return "%d"; } - static int format(const char val) { return (int)val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "signed char"; return s; } - static bool is_float() { return false; } - static bool is_inf(const signed char) { return false; } - static bool is_nan(const signed char) { return false; } - static signed char min() { return (signed char)(-1L<<(8*sizeof(signed char)-1)); } - static signed char max() { return ~((signed char)(-1L<<(8*sizeof(signed char)-1))); } - static signed char inf() { return max(); } - static signed char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(signed char)val; } - static const char* format() { return "%d"; } - static unsigned int format(const signed char val) { return (int)val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "unsigned short"; return s; } - static bool is_float() { return false; } - static bool is_inf(const unsigned short) { return false; } - static bool is_nan(const unsigned short) { return false; } - static unsigned short min() { return 0; } - static unsigned short max() { return (unsigned short)~0U; } - static unsigned short inf() { return max(); } - static unsigned short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned short)val; } - static const char* format() { return "%u"; } - static unsigned int format(const unsigned short val) { return (unsigned int)val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "short"; return s; } - static bool is_float() { return false; } - static bool is_inf(const short) { return false; } - static bool is_nan(const short) { return false; } - static short min() { return (short)(-1L<<(8*sizeof(short)-1)); } - static short max() { return ~((short)(-1L<<(8*sizeof(short)-1))); } - static short inf() { return max(); } - static short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(short)val; } - static const char* format() { return "%d"; } - static int format(const short val) { return (int)val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "unsigned int"; return s; } - static bool is_float() { return false; } - static bool is_inf(const unsigned int) { return false; } - static bool is_nan(const unsigned int) { return false; } - static unsigned int min() { return 0; } - static unsigned int max() { return (unsigned int)~0U; } - static unsigned int inf() { return max(); } - static unsigned int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned int)val; } - static const char* format() { return "%u"; } - static unsigned int format(const unsigned int val) { return val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "int"; return s; } - static bool is_float() { return false; } - static bool is_inf(const int) { return false; } - static bool is_nan(const int) { return false; } - static int min() { return (int)(-1L<<(8*sizeof(int)-1)); } - static int max() { return ~((int)(-1L<<(8*sizeof(int)-1))); } - static int inf() { return max(); } - static int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(int)val; } - static const char* format() { return "%d"; } - static int format(const int val) { return val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "unsigned long"; return s; } - static bool is_float() { return false; } - static bool is_inf(const unsigned long) { return false; } - static bool is_nan(const unsigned long) { return false; } - static unsigned long min() { return 0; } - static unsigned long max() { return (unsigned long)~0UL; } - static unsigned long inf() { return max(); } - static unsigned long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned long)val; } - static const char* format() { return "%lu"; } - static unsigned long format(const unsigned long val) { return val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "long"; return s; } - static bool is_float() { return false; } - static bool is_inf(const long) { return false; } - static bool is_nan(const long) { return false; } - static long min() { return (long)(-1L<<(8*sizeof(long)-1)); } - static long max() { return ~((long)(-1L<<(8*sizeof(long)-1))); } - static long inf() { return max(); } - static long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(long)val; } - static const char* format() { return "%ld"; } - static long format(const long val) { return val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "double"; return s; } - static bool is_float() { return true; } - static bool is_inf(const double val) { -#ifdef isinf - return (bool)isinf(val); -#else - return !is_nan(val) && (val::min() || val>cimg::type::max()); -#endif - } - static bool is_nan(const double val) { -#ifdef isnan - return (bool)isnan(val); -#else - return !(val==val); -#endif - } - static double min() { return -1.7E308; } - static double max() { return 1.7E308; } - static double inf() { return max()*max(); } - static double nan() { static const double val_nan = -std::sqrt(-1.0); return val_nan; } - static double cut(const double val) { return valmax()?max():val; } - static const char* format() { return "%.16g"; } - static double format(const double val) { return val; } - }; - - template<> struct type { - static const char* string() { static const char *const s = "float"; return s; } - static bool is_float() { return true; } - static bool is_inf(const float val) { -#ifdef isinf - return (bool)isinf(val); -#else - return !is_nan(val) && (val::min() || val>cimg::type::max()); -#endif - } - static bool is_nan(const float val) { -#ifdef isnan - return (bool)isnan(val); -#else - return !(val==val); -#endif - } - static float min() { return -3.4E38f; } - static float max() { return 3.4E38f; } - static float inf() { return (float)cimg::type::inf(); } - static float nan() { return (float)cimg::type::nan(); } - static float cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(float)val; } - static const char* format() { return "%.16g"; } - static double format(const float val) { return (double)val; } - }; - - template struct superset { typedef T type; }; - template<> struct superset { typedef unsigned char type; }; - template<> struct superset { typedef char type; }; - template<> struct superset { typedef signed char type; }; - template<> struct superset { typedef unsigned short type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef unsigned int type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef unsigned long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef unsigned short type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef unsigned int type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef unsigned long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef short type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef unsigned int type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef unsigned long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef int type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef unsigned long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef float type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef long type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef double type; }; - template<> struct superset { typedef double type; }; - - template struct superset2 { - typedef typename superset::type>::type type; - }; - - template struct superset3 { - typedef typename superset::type>::type type; - }; - - template struct last { typedef t2 type; }; - -#define _cimg_Tt typename cimg::superset::type -#define _cimg_Tfloat typename cimg::superset::type -#define _cimg_Ttfloat typename cimg::superset2::type -#define _cimg_Ttdouble typename cimg::superset2::type - - // Define variables used internally by CImg. -#if cimg_display==1 - struct X11_info { - volatile unsigned int nb_wins; - pthread_t* events_thread; - pthread_cond_t wait_event; - pthread_mutex_t wait_event_mutex; - CImgDisplay* wins[1024]; - Display* display; - unsigned int nb_bits; - bool is_blue_first; - bool is_shm_enabled; - bool byte_order; -#ifdef cimg_use_xrandr - XRRScreenSize *resolutions; - Rotation curr_rotation; - unsigned int curr_resolution; - unsigned int nb_resolutions; -#endif - X11_info():nb_wins(0),events_thread(0),display(0), - nb_bits(0),is_blue_first(false),is_shm_enabled(false),byte_order(false) { - XInitThreads(); - pthread_mutex_init(&wait_event_mutex,0); - pthread_cond_init(&wait_event,0); -#ifdef cimg_use_xrandr - resolutions = 0; - curr_rotation = 0; - curr_resolution = nb_resolutions = 0; -#endif - } - - ~X11_info() { - if (events_thread) { - pthread_cancel(*events_thread); - delete events_thread; - } - if (display) {} // XCloseDisplay(display); - pthread_cond_destroy(&wait_event); - pthread_mutex_unlock(&wait_event_mutex); - pthread_mutex_destroy(&wait_event_mutex); - } - }; -#if defined(cimg_module) - X11_info& X11_attr(); -#elif defined(cimg_main) - X11_info& X11_attr() { static X11_info val; return val; } -#else - inline X11_info& X11_attr() { static X11_info val; return val; } -#endif - -#elif cimg_display==2 - struct Win32_info { - HANDLE wait_event; - Win32_info() { wait_event = CreateEvent(0,FALSE,FALSE,0); } - }; -#if defined(cimg_module) - Win32_info& Win32_attr(); -#elif defined(cimg_main) - Win32_info& Win32_attr() { static Win32_info val; return val; } -#else - inline Win32_info& Win32_attr() { static Win32_info val; return val; } -#endif -#endif - - struct Mutex_info { -#if cimg_OS==2 - HANDLE mutex[32]; - Mutex_info() { for (unsigned int i = 0; i<32; ++i) mutex[i] = CreateMutex(0,FALSE,0); } - void lock(const unsigned int n) { WaitForSingleObject(mutex[n],INFINITE); } - void unlock(const unsigned int n) { ReleaseMutex(mutex[n]); } - int trylock(const unsigned int) { return 0; } -#elif defined(_PTHREAD_H) - pthread_mutex_t mutex[32]; - Mutex_info() { for (unsigned int i = 0; i<32; ++i) pthread_mutex_init(&mutex[i],0); } - void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } - void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } - int trylock(const unsigned int n) { return pthread_mutex_trylock(&mutex[n]); } -#else - Mutex_info() {} - void lock(const unsigned int) {} - void unlock(const unsigned int) {} - int trylock(const unsigned int) { return 0; } -#endif - }; -#if defined(cimg_module) - Mutex_info& Mutex_attr(); -#elif defined(cimg_main) - Mutex_info& Mutex_attr() { static Mutex_info val; return val; } -#else - inline Mutex_info& Mutex_attr() { static Mutex_info val; return val; } -#endif - -#if defined(cimg_use_magick) - static struct Magick_info { - Magick_info() { - Magick::InitializeMagick(""); - } - } _Magick_info; -#endif - -#if cimg_display==1 - // Define keycodes for X11-based graphical systems. - const unsigned int keyESC = XK_Escape; - const unsigned int keyF1 = XK_F1; - const unsigned int keyF2 = XK_F2; - const unsigned int keyF3 = XK_F3; - const unsigned int keyF4 = XK_F4; - const unsigned int keyF5 = XK_F5; - const unsigned int keyF6 = XK_F6; - const unsigned int keyF7 = XK_F7; - const unsigned int keyF8 = XK_F8; - const unsigned int keyF9 = XK_F9; - const unsigned int keyF10 = XK_F10; - const unsigned int keyF11 = XK_F11; - const unsigned int keyF12 = XK_F12; - const unsigned int keyPAUSE = XK_Pause; - const unsigned int key1 = XK_1; - const unsigned int key2 = XK_2; - const unsigned int key3 = XK_3; - const unsigned int key4 = XK_4; - const unsigned int key5 = XK_5; - const unsigned int key6 = XK_6; - const unsigned int key7 = XK_7; - const unsigned int key8 = XK_8; - const unsigned int key9 = XK_9; - const unsigned int key0 = XK_0; - const unsigned int keyBACKSPACE = XK_BackSpace; - const unsigned int keyINSERT = XK_Insert; - const unsigned int keyHOME = XK_Home; - const unsigned int keyPAGEUP = XK_Page_Up; - const unsigned int keyTAB = XK_Tab; - const unsigned int keyQ = XK_q; - const unsigned int keyW = XK_w; - const unsigned int keyE = XK_e; - const unsigned int keyR = XK_r; - const unsigned int keyT = XK_t; - const unsigned int keyY = XK_y; - const unsigned int keyU = XK_u; - const unsigned int keyI = XK_i; - const unsigned int keyO = XK_o; - const unsigned int keyP = XK_p; - const unsigned int keyDELETE = XK_Delete; - const unsigned int keyEND = XK_End; - const unsigned int keyPAGEDOWN = XK_Page_Down; - const unsigned int keyCAPSLOCK = XK_Caps_Lock; - const unsigned int keyA = XK_a; - const unsigned int keyS = XK_s; - const unsigned int keyD = XK_d; - const unsigned int keyF = XK_f; - const unsigned int keyG = XK_g; - const unsigned int keyH = XK_h; - const unsigned int keyJ = XK_j; - const unsigned int keyK = XK_k; - const unsigned int keyL = XK_l; - const unsigned int keyENTER = XK_Return; - const unsigned int keySHIFTLEFT = XK_Shift_L; - const unsigned int keyZ = XK_z; - const unsigned int keyX = XK_x; - const unsigned int keyC = XK_c; - const unsigned int keyV = XK_v; - const unsigned int keyB = XK_b; - const unsigned int keyN = XK_n; - const unsigned int keyM = XK_m; - const unsigned int keySHIFTRIGHT = XK_Shift_R; - const unsigned int keyARROWUP = XK_Up; - const unsigned int keyCTRLLEFT = XK_Control_L; - const unsigned int keyAPPLEFT = XK_Super_L; - const unsigned int keyALT = XK_Alt_L; - const unsigned int keySPACE = XK_space; - const unsigned int keyALTGR = XK_Alt_R; - const unsigned int keyAPPRIGHT = XK_Super_R; - const unsigned int keyMENU = XK_Menu; - const unsigned int keyCTRLRIGHT = XK_Control_R; - const unsigned int keyARROWLEFT = XK_Left; - const unsigned int keyARROWDOWN = XK_Down; - const unsigned int keyARROWRIGHT = XK_Right; - const unsigned int keyPAD0 = XK_KP_0; - const unsigned int keyPAD1 = XK_KP_1; - const unsigned int keyPAD2 = XK_KP_2; - const unsigned int keyPAD3 = XK_KP_3; - const unsigned int keyPAD4 = XK_KP_4; - const unsigned int keyPAD5 = XK_KP_5; - const unsigned int keyPAD6 = XK_KP_6; - const unsigned int keyPAD7 = XK_KP_7; - const unsigned int keyPAD8 = XK_KP_8; - const unsigned int keyPAD9 = XK_KP_9; - const unsigned int keyPADADD = XK_KP_Add; - const unsigned int keyPADSUB = XK_KP_Subtract; - const unsigned int keyPADMUL = XK_KP_Multiply; - const unsigned int keyPADDIV = XK_KP_Divide; - -#elif cimg_display==2 - // Define keycodes for Windows. - const unsigned int keyESC = VK_ESCAPE; - const unsigned int keyF1 = VK_F1; - const unsigned int keyF2 = VK_F2; - const unsigned int keyF3 = VK_F3; - const unsigned int keyF4 = VK_F4; - const unsigned int keyF5 = VK_F5; - const unsigned int keyF6 = VK_F6; - const unsigned int keyF7 = VK_F7; - const unsigned int keyF8 = VK_F8; - const unsigned int keyF9 = VK_F9; - const unsigned int keyF10 = VK_F10; - const unsigned int keyF11 = VK_F11; - const unsigned int keyF12 = VK_F12; - const unsigned int keyPAUSE = VK_PAUSE; - const unsigned int key1 = '1'; - const unsigned int key2 = '2'; - const unsigned int key3 = '3'; - const unsigned int key4 = '4'; - const unsigned int key5 = '5'; - const unsigned int key6 = '6'; - const unsigned int key7 = '7'; - const unsigned int key8 = '8'; - const unsigned int key9 = '9'; - const unsigned int key0 = '0'; - const unsigned int keyBACKSPACE = VK_BACK; - const unsigned int keyINSERT = VK_INSERT; - const unsigned int keyHOME = VK_HOME; - const unsigned int keyPAGEUP = VK_PRIOR; - const unsigned int keyTAB = VK_TAB; - const unsigned int keyQ = 'Q'; - const unsigned int keyW = 'W'; - const unsigned int keyE = 'E'; - const unsigned int keyR = 'R'; - const unsigned int keyT = 'T'; - const unsigned int keyY = 'Y'; - const unsigned int keyU = 'U'; - const unsigned int keyI = 'I'; - const unsigned int keyO = 'O'; - const unsigned int keyP = 'P'; - const unsigned int keyDELETE = VK_DELETE; - const unsigned int keyEND = VK_END; - const unsigned int keyPAGEDOWN = VK_NEXT; - const unsigned int keyCAPSLOCK = VK_CAPITAL; - const unsigned int keyA = 'A'; - const unsigned int keyS = 'S'; - const unsigned int keyD = 'D'; - const unsigned int keyF = 'F'; - const unsigned int keyG = 'G'; - const unsigned int keyH = 'H'; - const unsigned int keyJ = 'J'; - const unsigned int keyK = 'K'; - const unsigned int keyL = 'L'; - const unsigned int keyENTER = VK_RETURN; - const unsigned int keySHIFTLEFT = VK_SHIFT; - const unsigned int keyZ = 'Z'; - const unsigned int keyX = 'X'; - const unsigned int keyC = 'C'; - const unsigned int keyV = 'V'; - const unsigned int keyB = 'B'; - const unsigned int keyN = 'N'; - const unsigned int keyM = 'M'; - const unsigned int keySHIFTRIGHT = VK_SHIFT; - const unsigned int keyARROWUP = VK_UP; - const unsigned int keyCTRLLEFT = VK_CONTROL; - const unsigned int keyAPPLEFT = VK_LWIN; - const unsigned int keyALT = VK_LMENU; - const unsigned int keySPACE = VK_SPACE; - const unsigned int keyALTGR = VK_CONTROL; - const unsigned int keyAPPRIGHT = VK_RWIN; - const unsigned int keyMENU = VK_APPS; - const unsigned int keyCTRLRIGHT = VK_CONTROL; - const unsigned int keyARROWLEFT = VK_LEFT; - const unsigned int keyARROWDOWN = VK_DOWN; - const unsigned int keyARROWRIGHT = VK_RIGHT; - const unsigned int keyPAD0 = 0x60; - const unsigned int keyPAD1 = 0x61; - const unsigned int keyPAD2 = 0x62; - const unsigned int keyPAD3 = 0x63; - const unsigned int keyPAD4 = 0x64; - const unsigned int keyPAD5 = 0x65; - const unsigned int keyPAD6 = 0x66; - const unsigned int keyPAD7 = 0x67; - const unsigned int keyPAD8 = 0x68; - const unsigned int keyPAD9 = 0x69; - const unsigned int keyPADADD = VK_ADD; - const unsigned int keyPADSUB = VK_SUBTRACT; - const unsigned int keyPADMUL = VK_MULTIPLY; - const unsigned int keyPADDIV = VK_DIVIDE; - -#else - // Define random keycodes when no display is available. - // (should rarely be used then!). - const unsigned int keyESC = 1U; //!< Keycode for the \c ESC key (architecture-dependent). - const unsigned int keyF1 = 2U; //!< Keycode for the \c F1 key (architecture-dependent). - const unsigned int keyF2 = 3U; //!< Keycode for the \c F2 key (architecture-dependent). - const unsigned int keyF3 = 4U; //!< Keycode for the \c F3 key (architecture-dependent). - const unsigned int keyF4 = 5U; //!< Keycode for the \c F4 key (architecture-dependent). - const unsigned int keyF5 = 6U; //!< Keycode for the \c F5 key (architecture-dependent). - const unsigned int keyF6 = 7U; //!< Keycode for the \c F6 key (architecture-dependent). - const unsigned int keyF7 = 8U; //!< Keycode for the \c F7 key (architecture-dependent). - const unsigned int keyF8 = 9U; //!< Keycode for the \c F8 key (architecture-dependent). - const unsigned int keyF9 = 10U; //!< Keycode for the \c F9 key (architecture-dependent). - const unsigned int keyF10 = 11U; //!< Keycode for the \c F10 key (architecture-dependent). - const unsigned int keyF11 = 12U; //!< Keycode for the \c F11 key (architecture-dependent). - const unsigned int keyF12 = 13U; //!< Keycode for the \c F12 key (architecture-dependent). - const unsigned int keyPAUSE = 14U; //!< Keycode for the \c PAUSE key (architecture-dependent). - const unsigned int key1 = 15U; //!< Keycode for the \c 1 key (architecture-dependent). - const unsigned int key2 = 16U; //!< Keycode for the \c 2 key (architecture-dependent). - const unsigned int key3 = 17U; //!< Keycode for the \c 3 key (architecture-dependent). - const unsigned int key4 = 18U; //!< Keycode for the \c 4 key (architecture-dependent). - const unsigned int key5 = 19U; //!< Keycode for the \c 5 key (architecture-dependent). - const unsigned int key6 = 20U; //!< Keycode for the \c 6 key (architecture-dependent). - const unsigned int key7 = 21U; //!< Keycode for the \c 7 key (architecture-dependent). - const unsigned int key8 = 22U; //!< Keycode for the \c 8 key (architecture-dependent). - const unsigned int key9 = 23U; //!< Keycode for the \c 9 key (architecture-dependent). - const unsigned int key0 = 24U; //!< Keycode for the \c 0 key (architecture-dependent). - const unsigned int keyBACKSPACE = 25U; //!< Keycode for the \c BACKSPACE key (architecture-dependent). - const unsigned int keyINSERT = 26U; //!< Keycode for the \c INSERT key (architecture-dependent). - const unsigned int keyHOME = 27U; //!< Keycode for the \c HOME key (architecture-dependent). - const unsigned int keyPAGEUP = 28U; //!< Keycode for the \c PAGEUP key (architecture-dependent). - const unsigned int keyTAB = 29U; //!< Keycode for the \c TAB key (architecture-dependent). - const unsigned int keyQ = 30U; //!< Keycode for the \c Q key (architecture-dependent). - const unsigned int keyW = 31U; //!< Keycode for the \c W key (architecture-dependent). - const unsigned int keyE = 32U; //!< Keycode for the \c E key (architecture-dependent). - const unsigned int keyR = 33U; //!< Keycode for the \c R key (architecture-dependent). - const unsigned int keyT = 34U; //!< Keycode for the \c T key (architecture-dependent). - const unsigned int keyY = 35U; //!< Keycode for the \c Y key (architecture-dependent). - const unsigned int keyU = 36U; //!< Keycode for the \c U key (architecture-dependent). - const unsigned int keyI = 37U; //!< Keycode for the \c I key (architecture-dependent). - const unsigned int keyO = 38U; //!< Keycode for the \c O key (architecture-dependent). - const unsigned int keyP = 39U; //!< Keycode for the \c P key (architecture-dependent). - const unsigned int keyDELETE = 40U; //!< Keycode for the \c DELETE key (architecture-dependent). - const unsigned int keyEND = 41U; //!< Keycode for the \c END key (architecture-dependent). - const unsigned int keyPAGEDOWN = 42U; //!< Keycode for the \c PAGEDOWN key (architecture-dependent). - const unsigned int keyCAPSLOCK = 43U; //!< Keycode for the \c CAPSLOCK key (architecture-dependent). - const unsigned int keyA = 44U; //!< Keycode for the \c A key (architecture-dependent). - const unsigned int keyS = 45U; //!< Keycode for the \c S key (architecture-dependent). - const unsigned int keyD = 46U; //!< Keycode for the \c D key (architecture-dependent). - const unsigned int keyF = 47U; //!< Keycode for the \c F key (architecture-dependent). - const unsigned int keyG = 48U; //!< Keycode for the \c G key (architecture-dependent). - const unsigned int keyH = 49U; //!< Keycode for the \c H key (architecture-dependent). - const unsigned int keyJ = 50U; //!< Keycode for the \c J key (architecture-dependent). - const unsigned int keyK = 51U; //!< Keycode for the \c K key (architecture-dependent). - const unsigned int keyL = 52U; //!< Keycode for the \c L key (architecture-dependent). - const unsigned int keyENTER = 53U; //!< Keycode for the \c ENTER key (architecture-dependent). - const unsigned int keySHIFTLEFT = 54U; //!< Keycode for the \c SHIFTLEFT key (architecture-dependent). - const unsigned int keyZ = 55U; //!< Keycode for the \c Z key (architecture-dependent). - const unsigned int keyX = 56U; //!< Keycode for the \c X key (architecture-dependent). - const unsigned int keyC = 57U; //!< Keycode for the \c C key (architecture-dependent). - const unsigned int keyV = 58U; //!< Keycode for the \c V key (architecture-dependent). - const unsigned int keyB = 59U; //!< Keycode for the \c B key (architecture-dependent). - const unsigned int keyN = 60U; //!< Keycode for the \c N key (architecture-dependent). - const unsigned int keyM = 61U; //!< Keycode for the \c M key (architecture-dependent). - const unsigned int keySHIFTRIGHT = 62U; //!< Keycode for the \c SHIFTRIGHT key (architecture-dependent). - const unsigned int keyARROWUP = 63U; //!< Keycode for the \c ARROWUP key (architecture-dependent). - const unsigned int keyCTRLLEFT = 64U; //!< Keycode for the \c CTRLLEFT key (architecture-dependent). - const unsigned int keyAPPLEFT = 65U; //!< Keycode for the \c APPLEFT key (architecture-dependent). - const unsigned int keyALT = 66U; //!< Keycode for the \c ALT key (architecture-dependent). - const unsigned int keySPACE = 67U; //!< Keycode for the \c SPACE key (architecture-dependent). - const unsigned int keyALTGR = 68U; //!< Keycode for the \c ALTGR key (architecture-dependent). - const unsigned int keyAPPRIGHT = 69U; //!< Keycode for the \c APPRIGHT key (architecture-dependent). - const unsigned int keyMENU = 70U; //!< Keycode for the \c MENU key (architecture-dependent). - const unsigned int keyCTRLRIGHT = 71U; //!< Keycode for the \c CTRLRIGHT key (architecture-dependent). - const unsigned int keyARROWLEFT = 72U; //!< Keycode for the \c ARROWLEFT key (architecture-dependent). - const unsigned int keyARROWDOWN = 73U; //!< Keycode for the \c ARROWDOWN key (architecture-dependent). - const unsigned int keyARROWRIGHT = 74U; //!< Keycode for the \c ARROWRIGHT key (architecture-dependent). - const unsigned int keyPAD0 = 75U; //!< Keycode for the \c PAD0 key (architecture-dependent). - const unsigned int keyPAD1 = 76U; //!< Keycode for the \c PAD1 key (architecture-dependent). - const unsigned int keyPAD2 = 77U; //!< Keycode for the \c PAD2 key (architecture-dependent). - const unsigned int keyPAD3 = 78U; //!< Keycode for the \c PAD3 key (architecture-dependent). - const unsigned int keyPAD4 = 79U; //!< Keycode for the \c PAD4 key (architecture-dependent). - const unsigned int keyPAD5 = 80U; //!< Keycode for the \c PAD5 key (architecture-dependent). - const unsigned int keyPAD6 = 81U; //!< Keycode for the \c PAD6 key (architecture-dependent). - const unsigned int keyPAD7 = 82U; //!< Keycode for the \c PAD7 key (architecture-dependent). - const unsigned int keyPAD8 = 83U; //!< Keycode for the \c PAD8 key (architecture-dependent). - const unsigned int keyPAD9 = 84U; //!< Keycode for the \c PAD9 key (architecture-dependent). - const unsigned int keyPADADD = 85U; //!< Keycode for the \c PADADD key (architecture-dependent). - const unsigned int keyPADSUB = 86U; //!< Keycode for the \c PADSUB key (architecture-dependent). - const unsigned int keyPADMUL = 87U; //!< Keycode for the \c PADMUL key (architecture-dependent). - const unsigned int keyPADDIV = 88U; //!< Keycode for the \c PADDDIV key (architecture-dependent). -#endif - - const double PI = 3.14159265358979323846; //!< Value of the mathematical constant PI - - // Define a 12x13 font (small size). - const char *const data_font12x13 = -" .wjwlwmyuw>wjwkwbwjwkwRxuwmwjwkwmyuwJwjwlx`w Fw mwlwlwuwnwuynwuwmyTwlwkwuwmwuwnwlwkwuwmwuw_wuxl" -"wlwkwuwnwuynwuwTwlwlwtwnwtwnw my Qw +wlw b{ \\w Wx`xTw_w[wbxawSwkw nynwkyw bwswcwkwuwjwuwozpwtwuwnwtwowkwjwmwuwuwkwIxmxuxowuwmwswowswmxnwjwhwowswowsw0wmwowswuwnwrwowswpwswowkwjwrwqw" -"rwpwkwkwtwnwkxsxqxswowswpwswnwswpwswowrwnwmwrwqwqwqwswswrwswowswjwpwlxjwkxuxLw[wcw_wSwkw mw\"wlwiw=wtwmxlwFw cwswnwuwnwkwjwswo{pwrwpwtwtwpwswby`w`yUwlw" -"twpwqwpwswowlw\\wrwrxuwHwrwfwuwjwlwlwTyuwVwlwtwawswowswowswcwuwmwuwmwuwmwuwmwuwlwkwuwnwswpwkwkwkwkwkwkwkwkwswoxswowswowswowswowswowswowrwpwswpwrwpwrwpw" -"rwpwrwpwswoznwtw Ww (wGwtwtwqwqwqwuwuwuwqwswuwqwqw=wqxtw`{nzp~q{ozowrwnxmwtwow bzawkwuwl}rwuwnwtwuwnwtwowkwjwlyjwIwlwswmwiwkwnwuwnwkwhwnwswowswowkwew" -"ewixnwsytwswuwnwrwpwkwrwpwkwkwkwrwpwkwkwuwmwkxsxqwuwtwpwqwqwswowqwqwswowiwmwrwpwswowtwtwpwuwmwuwjwowkwjwlxsxXynzmymznyozlzoznwkwkwtwnwkzuyrzmynzmzowux" -"myozmwswpwrwowtwtwrwrwpwrwp{mwlwiwHyuwpwtwkwmxlynzoxswmwmwswnwswowtxq|owtwtwpym{p{owswnwuwmwlwkwqwqxuwuxqwrwpwtwtwqwqwowlwuwuwkwmwlwtwowuwuwdwjznwl{nw" -"uwnwkx_wtxtwswtwlwtwWwuytwgyjwmwjwawswoyuwVwlwtwnwtwmwtwnwtwmwuwmwlwuwmwuwmwuwmwuwmwuwmwuwmxuwowkwkwkwkwkwkwkwkwkwrwpwuwtwpwqwqwqwqwqwqwqwqwqwowtwpwsw" -"uwqwrwpwrwpwrwpwrwowuwnwswowuwlymymymymymymyuyqymymymymynwkwkwkwjynzmymymymymykwmzowswowswowswowswpwrwozowrwW}q}qwtwtwqwtwtwqwtwtwA}rwuw_{p~r~r}pwtwow" -"rwnxmwtwow aw_w]wtwpwuwmxuwmybwjwlyjwIwlwswmwiwnynwtwnznzkwmynwswTyp}pylwmwtwtwtwswuwn{owkwrwp{o{owk|pwkwkxlwkwuwuwuwqwuwtwpwqwqwswowqwqwswoykwmwrwpws" -"wowuwuwuwowkwjwnwkwjwDwowswowkwswowswowkwswowswowkwkwuwmwkwswswswswowswowswowswoxlwswowkwswpwrwowtwtwqwtwowrwlwoxkwhxVxuxpwtypwuwjwnwtwnwkwswowtxnxmws" -"wowqwqwtwuxqwtwnwtwtwqwswowswmwm{nwuwlxnwkwqwqwtwtwqwrwpwtwtwqwuyuwpwiwhwnwmwrwnwbwkwuwlwlwswoxuxowlwtw`wuwrwszmwtwo}dwuwtwuw[}qymx`wswoyuwow_ylxlwtwo" -"yuwoyuwoyuwmwlwuwmwuwmwuwmwuwmwuwmwuwmwt{swk{o{o{o{owkwkwkwlztwpwuwtwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowuwiwkwkwkwkwkwkwswswkwswowswo" -"wswowswowkwkwkwkwswowswowswowswowswowswowswcwtxowswowswowswowswpwrwowswpwrwWwtwtwqwqwqwuwuwuwqwuwswqwqw>wowuw`}q~q|q}qwrwpwrwowtwnwtwo~ izaw]wtwoykwux" -"qwtwswfwjwmwuwuwn}eyaxlwswmwjwjwpwswjwowswmwmwswnzWy]ypwlwtwtwuwswswowrwpwkwrwpwkwkwsyqwrwpwkwkwuwmwkwuwuwuwqwtwuwpwqwqznwqwqzkynwmwrwowuwnwuwuwuwowkw" -"jwnwkxkwGzowswowkwswo{owkwswowswowkwkxlwkwswswswswowswowswowswowjxmwkwswowtwnwuwuwuwpxmwtwlwlwlwiwlytwewtwtwqwswowtxoznwswnxmwswnwuwmwuwnwswowtwtwqwtw" -"twqwtwnwtwtwqwswowswmwmwswowswmwmwkwqwqwtwtwqwrwowuwuwpwuyuwq~own~own~owbwkwuwmznwswmwbwswawuwrwgwtwhwdwuytwXwJwswnxuw=wtwmwswowtxowswqxmwswowswowswow" -"swowswowswnwtwowkwkwkwkwkwkwkwkwkwrwpwtwuwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowtwmznznznznznzn~swk{o{o{o{owkwkwkwkwswowswowswowswowswow" -"swowswo}qwuwuwowswowswowswowswowtwnwswowtwUwuwuwowswowswowswowsw@}qx`}q~pzo{pwrwpwrwowtwnwtwow aw_w_}owuwmwuwtwrwswuwewjwkwiwJwkwswmwkwiwp|kwowswmwmws" -"wkwWym}mypwlwszr{owrwpwkwrwpwkwkwqwqwrwpwkwkwtwnwkwtwtwqwtwuwpwqwqwkwqwqwtwiwnwmwrwowuwnwuwuwuwpwuwlwkwmwjwkwHwswowswowkwswowkwkwswowswowkwkwuwmwkwsws" -"wswswowswowswowswowhwnwkwswowtwnwuwuwuwpxmwtwmwkwlwiwmwtydwtwtwqwswowswowtwnwswowkwswnwuwnwtwnwswowtwtwqwtwtwqwtwnwtwtwqwswowswmwmwswowswnwlwkwqwqxuwu" -"xqwrwnyowqwpwiwhwpwuwuwowrwpwuwuwdwkwuwlwlwswo{owkxuwawtxtwszmwtwiwdwuwtwuwXwJwswmwuwKzmwtwlwtxowrwpwtxrxl{o{o{o{o{o{o{owkwkwkwkwkwkwkwkwkwrwpwtwuwpwq" -"wqwqwqwqwqwqwqwqwowtwpwuwswqwrwpwrwpwrwpwrwnwmznwswowswowswowswowswowswowswowswowkwkwkwkwkwkwkwkwkwswowswowswowswowswowswowswcwuwuwowswowswowswowswowt" -"wnwswowtwTymymymymy=wmw^wuwuwmxlxmyowrwowtwnwtwmxmw bwswIwuwmwuwmwuwtwrxswdwjw]wJwkxuxmwlwlwswlwjwowswmwmwswlwSycyawlwswowrwowswpwswowkwjwrwqwrwpwkwkw" -"swowkwqwqwsxowswpwjwswpwswowrwnwmxtxnwlwswpwswmwlwlwjwkwHwswowswowkwswowswowkwswowswowkwkwtwnwkwswswswswowswowswowswowkwswowkwswnxlwswpwtwmxmwjwlwiwTx" -"uxpwtxowswowtwnwswowkwswnynwtwnwswowtwtwqxuwuxqwtwnwtwtwqwswowswmwlwuwnwswowkwjwswo{pwrwmwmwswnwjwiwnymwtwnycwkwuwlwl{mwmwiw_wrwdwtwVwrw*wswmwuw?wtwlw" -"tzqwrwpwtzswkwswowswowswowswowswowswowswnwswpwkwkwkwkwkwkwkwkwswowsxowswowswowswowswowswowrwpwswpxtxpxtxpxtxpxtxnwmwkwswowswowswowswowswowswowswowtxow" -"kwswowswowswowswowkwkwkwkwswowswowswowswowswowswowswlwnxtwowswowswowswowswnxmwswnx >wlw\\wkx`wnwrwoznwtwmxl| gybw^wtwozmwsxpzuxfxlx]wnw_wlxjyn{o{nykwnz" -"mymwkynymwkwewewjwjwrwswqwp{myozn{owizpwrwpwkwkwrwp{owqwqwsxnyowiyowrwozmwlzmwlwswqxsxnwm}qwjxlwGzozmymznynwjzowswowkwkwswowkwswswswswnynzmzowjymxlznx" -"lwswqwrwnwm{mwlwiwHxuxpzmxlymynwswmwnwrwozmxuxo{pwtxn{pzmykwmyo}p{owkyuynwnwrwmwly`w_w_wbwjzo{pwqwnwmwhw_z>zY}M|nwuw2wqwqwryrwqwqyowqwqwqwqwqwqwqwqwqw" -"qwqwqwr{qyo{o{o{o{owkwkwkwkznwsxnymymymymycwuynznznznzmwmwkwuynznznznznznznyuzrymymymymynwkwkwkwjynwswnymymymymybzmznznznznwlzmw hwHwlwSwTw {+qnrmqapmp Kpepgpiuhpephscqfqhqfqhqfqhqfqhqfqhqfqhqixgudxdxdxdxdq]q]q]q]wcqjr" -"bt`t`t`t`taphpgplt`s_s_s_s_q`q]qmsctnqctnqctnqctnqctnqctnqbsktgs_uauauaucq]q]q]q[saqjqbs_s_s_s_sNpms_snqbsnqbsnqbsnqaq`qns_q !p Zp jp#q\\q6q7q l" -"q [sjq Qq -q OqZq]q Cq;q HqWq $rIq`qZq _q iqbqKqFqIq`q hp$q]u JqYpmpLp .p jp ]p Xr`q[r !p Tp\"p\\p6q6q mq Yx Qr -r Ps\\q_s" -" Ipkq:q HqWq $qHq`qZq _q iqbqKqFqIq`q hp$q]t IqYpmpLq /q kq Fq_q[q #s Tp\"q^q6p 1p Vu Rs YsJsMy &v])]2_4^U^ 6^T\\5])]1_2]T\\8^U^ K])]2`4^V^3] " -" U]*\\2a4`V\\8^U^5a F]*\\1\\X\\4^U^=]*\\" -"2a5^U^ 7aV\\4]*\\1a4`V\\8^U^ J]*\\1\\X\\4^V^3\\ " -" S],\\1\\W\\5g8^U^6c F],\\1\\V\\5^U^<],\\2]W]6^U^ 8h3],\\0\\W\\5g8^U^ I],\\1\\V\\5^V" -"^4\\ ;] " -" :\\-]2\\U\\6\\V`7^U^7]U] F\\-]2\\T\\6^U^;\\-]3]U]7^U^ 8\\Va1\\-]1\\U\\6\\V`7^U^ H\\-]2\\T\\6^V^5] =a " -" J] " -" N\\/]2\\S\\7\\T]6^U^7\\S\\ E\\/]2\\R\\7^U^:\\/]3]S]8^U^ 8\\T^/\\/]1\\S\\7\\T]6^U^ G\\/]2\\R\\7^V^6] =c L^ " -" *^ U` O^ )\\S\\ " -" !^$^3\\ E]U\\ K^$^4^ G^$^4] J^$^3\\ #^$^3\\ 4^ B[ " -"&^ Xe S^ (\\S\\ )Z Q^&^3^2]S\\ A\\S\\ K^&^3^ F^&^4_ >]S" -"\\9^&^3^2]S\\ W^&^3^ 6^ Q] M[ ?` ![1^H]?` =]4](\\ %` >b4c Bb ?`2a .a Ib Pb Aa `0`*^ $^.` <^F]F^F]G`G] F\\S\\ ;b %a2a2a2a2a a:]" -".a !^T_ Bg ` Dd2_8n?m7g3]:rD]P]P]@g <] 8] 8] B] 3e J^K^ If7^U^+b@d Fb@f5a Ad4e-] :f Ra0d AaF\\HaF\\HeJ\\?]._0_0_0_0_2\\U\\0tHh@n?n?n?n?].].].]" -"-h:_J]w " -"P[ 9[/a:aQa7[ Wl \"h E]1]T]+\\R\\;[4dL]Ag=])]2])\\ U^1f8c8k;j1`;k7h?n;h9g 5i*b:_8k6kBl=n?l7mD]H]C].].]L_A].`I`H`K]>kAj6kAj9kBuB]H]F]E]E^L_L^" -"R^L^D^I^BrBb7^+b(a D] ;] '] Gd A].].].].] ;] (b:].b #^Q] Dj !a Ff3_8n?m8i4]:rD]P]P]Bk ?_ 9] 9_ C]&[0f I]K]=]0g7^U^-fC\\S] IfBf6c B[" -"S]5[S].] `K]>k]*]3]W]6^U^._V_;]Wa5]*]2\\V\\6]Wa7^V^ I]*]2\\V\\5^V^2]7]+^V^ @]W\\=v P[ 9\\1c_8m:`R`Cn?n?l9`QaE]H]C].].]M_@].aKaH`K]?`S`Bk8`S`Bk;_R_BuB]H]F]E]D]MaM]P]L]B^K^ArB]1]&])c D] <] '] G] :].].].].] " -";] (^6]*^ #]P^ E^P\\ V^ H^T^4_8n?m:`S`6]:rD]P]P]C`S` Aa :] :a D]&[1^S\\ I^M^=]0^R[7^U^/^R^EZO\\ L^R^ N]U] :],\\0] \\H]B\\H]=\\M]>" -"]._0_0_0_0_0_/uK`R`Cn?n?n?n?].].].]-n@`K]?`S`>`S`>`S`>`S`>`S` H`ScE]H]C]H]C]H]C]H]E^K^@],^T^5],]1\\V\\6\\U`7^V^6]U\\ F],]2\\T\\6^U^=],]2\\U\\6^U^-e9\\U`4],]1\\" -"V\\6\\U`7^V^ H],]1\\V\\5^V^3]6]+^V^ B`1`1`1`1`6]W]>u P[ 9]2e>eUf;^ %q $^O\\ F]1]T],]S];[5]T]N\\@]P[=]*]0]2ZR\\RZ $]2]P]<_W]8]N]\\H\\A\\H\\<\\M\\=]/a2a2a" -"2a2a1_/]V];_M]C].].].].].].].]-]ObBaL]@^M^@^M^@^M^@^M^@^M^ J^N`D]H]C]H]C]H]C]H]E^K^@]-^Q]5].]1\\T\\7\\S]6^V^5c E].]2]S\\7^U^<].]2\\S\\7^U^,a6\\S]2].]1\\T\\7\\S" -"]6^V^ G].]1\\T\\6^V^4]5]+^V^ De6e6e6e6e9\\U\\>u P[ :_3f@gVf<_ &r $]M[ F]1]T],\\R]>d<^T^P]A^OZ=]+].]4]T\\T] &^3^P^=[S]8[K].]4\\X];],]!]<]N]>^O^ " -" 8ZM^3`P`Ba9]M^=^J\\C]K_B].],^H\\E]H]C].].]O_>].aKaHaL]A^K^D]N^<^K^D]N^>]JZ6]6]H]E]G]C]MaM]O^P^@^M^-^A]1]&]+_W_ D] >] '] H] 9] B].] ;] )]4](]" -" %]N]:c6] G] J^P^7a8_1],^K^;c=]H]D]P]P]E^K^ Ee <] \\I]A\\I]<\\N]=]/a2a2a2a2a2a1]U]<" -"^J\\C].].].].].].].]-]K_CaL]A^K^B^K^B^K^B^K^B^K^ K]K^D]H]C]H]C]H]C]H]D^M^?]-]P]4]0]1\\R\\ Ha C]0]2]R] E]0]2\\Q\\ 9c 9]0]1\\R\\ !]0]1\\R\\ ?]4] Di:i:i:i:i" -";\\6]G] P\\ :`5g@gWh>a (_ J]KZ F]1]T],\\R\\?h>]R]P\\@]1]+].]3^V\\V^.] T]2]N]5]8ZJ]-]6]X];]-]!^=]L]?]M] *]5_J_Ec:]L^>]H[C]I^C].],]F[E]H]C].].]" -"P_=].]X]M]X]HbM]A]I]D]M]<]I]D]M]?]%]6]H]E]G]C^NaN^N]Q^>^O^-^@]0]'],_U_ &] '] H] 9] B].] ;] )]4](] %]N]:d7] F] K]N]8c8^1],]I]>i@]H" -"]D]P]P]E]I] Fg =] =g G]&[2] <]O];]1] 1\\F\\=\\ Q\\F\\ S\\Q\\+]3\\.] IeU\\ M\\3\\N\\ ?\\I\\@\\I\\=]M\\<]0c4c4c4c4c3a1]U]<]H[C].].].].].].].]-]J_DbM]A]I]B]I]B]I]B]I]" -"B]I] L]J_E]H]C]H]C]H]C]H]C^O^>].]N] .] '`X_ I] FbWa=bWa=bWa=bWa=bWa<\\6^I^ ?Z2[ :a5gAiXh?c *^ H] 7]1]T]-]S]Aj>]R]Q]@]1]," -"],\\1^X\\X^,] T]3]L]6]'].]7]W];]-]!]<]L]?]M^ +]6^F^F]W]:]K]?]FZC]H^D].]-]DZE]H]C].].]Q_<].]X]M]X]H]X]M]B]G]E]M^>]G]E]M^@]%]6]H]E^I^B]O^X]O]M^R^=]O^" -"-^@]0]']-_S_ '] '] H] 9] B].] ;] )]4](] %]N]:e8_ H] L]M]8]W]7^2]-]G]AmB]H]D]P]P]F]G] Hi >] >i J[3] ;^Q^;]1] 2\\RbT\\Ge R\\VdR\\ T\\" -"Q\\+]4\\2a IfU\\ M\\3\\N\\ ?\\J\\?\\J\\AaM\\ G]W]4]W]4]W]4]W]4]W]4c3^U]=]FZC].].].].].].].]-]H]D]X]M]B]G]D]G]D]G]D]G]D]G]A[H[B]J`E]H]C]H]C]H]C]H]B]O^>g8]N] " -" 1]T_ 3[ 9] G_O^?_O^?_O^?_O^?_O^=\\5]I^ @\\3[ ;c6gAy?d7`8]L]7^7]L]>^ H] 6]1]T]-]S]B_W[U]>]R]R]?]1],],]0d*] T]3]L]6]'].]7\\V];]" -".] ]<]L]@]K] 7Z PZ X]7^D^G]W]:]K]?]/]G]D].]-]/]H]C].].]R_;].]X^O^X]H]X^N]B]G]E]L]>]G]E]L]@]%]6]H]D]I]A]O]W]O]L^T^<^Q^-^?]0]'].^O^ Sb7]U`2b4`U]8a8])`" -"7]T_ M].]%_O_@_2`0`3`/_3c9] )]4](] N_6]N]3^7a/c0_ <^ D[U^ Ga N]L]9]W]6^3]-]G]B`W]W`C]H]D]P]P]F]G] I_X]X_ ?] ?_X]X_ Nb7]2ZFZ=]Q]:]0] 3[SfU[I" -"g R[UfS[ T\\Q\\+]5]2a IfU\\ M\\3\\N\\ ?\\K]?\\K]AaN] G]W]4]W]4]W]4]W]4]W]4]W]3]T]=]/].].].].].].].]-]G]E]X^N]B]G]D]G]D]G]D]G]D]G]B]J]C]KbF]H]C]H]C]H]C]H]B" -"^Q^=j;]P_9b3b3b3b3b3b3bN`Bb3a2a2a2a V_2_2`1`1`1`1` ;aU] :]U` S^T]U^A^L^A^L^A^L^A^L^?]5]I] @^5\\ ]R]R\\>]1],],].`(] U^3]L]6]'].]8]V];].]!^<]L]@]K] :] P]#^8^A]I^W^;]K]@].]G^E].].].]H]C].].]S_:].]W]O]W]H]W]N]C]E]F]L]?]E]F]L]@]%]6]H]D]J^A]O]W]O]" -"L^U^:^S^-^>]0^(]/^M^ Wh:]Wd6f8dW]:e>h2dW]?]Vd<].].]O_>].]WdScK]Vd8f;]Wd7dW]?]Wa6h>h6]L]B]I]A]P`P]K^L^B^K^@l4]4](] PdU]A]N]2^8e5g;]Vd?^J^8]6]L] E]V`" -">pA]S]S]:e6kDo>]L]:^W^6^4].]E]D_U]U_D]H]D]P]P]G]E] K_W]W_ @] @_W]W_ Qf9]3\\H\\>^S^:]0_ 6[ThT[K]Q\\ S[T\\R]S[ U]S]+]6],] ?]L]@fU\\ M\\3\\N\\ ?\\K\\>\\K\\;]O\\ G" -"^W^6^W^6^W^6^W^6^W^5]W]4^T]>].].].].].].].].]-]G^F]W]N]C]E]F]E]F]E]F]E]F]E]D_L_E]K]W]F]H]C]H]C]H]C]H]A^S^^K^ O]S]S]B]I]B]I]B]I]B]I]@]5^K^ @]4[ ;f8gAyAg] F] 6]1]T]-\\R\\B]T[6]R]S]>^2]-]*\\.`(] U" -"]2]L]6]'].]9]U];].]!];]L]@]K] =` P`'^7]?\\I]U];]K]@].]F]E].].].]H]C].].]T_9].]W]O]W]H]W^O]C]E]F]L]?]E]F]L]@]%]6]H]C]K]@^P]W]P^K^V^9]S]-^=]/](]0^K^ Xi" -";]Xf9h9fX]h6]L]A]K]@^Q`Q^J^N^@]K]?l4]4](] QfW^A]O^1]6f9h;]Xg@_K]7]6]L]=]G]C^Wc@pA]S]S]]L]:]U" -"]5^5].]E]E^S]S^E]H]D]P]P]G]E]@Z+]V]V^-Z4]5ZKZ:]V]V^ Sh9]4^J^>]S]9]._ 8[U_Q[T[L]P\\ S[T\\Q]T[ T]U]*]7]*] @]L]@fU\\ M\\3\\N\\ ?\\L]>\\L]:]Q]:]1]U]6]U]6]U]6]" -"U]6]U]6^W^5]S]>].].].].].].].].]-]F]F]W^O]C]E]F]E]F]E]F]E]F]E]C_N_D]L^W]F]H]C]H]C]H]C]H]@]S];]P_=]S^8i:i:i:i:i:i:iVgIh9h9h9h9h<].].].]'d<]Xg:h9h9h9h9h" -"0^8k?]L]?]L]?]L]?]L]A]K]>]Xf>]K] O]R]R]D]G]D]VZOZV]D]KZV]D]G]A]4]K] @]3[ j=]L]8`7]N]?] F^ 6]1]T]5uI]T[6]R]S\\<^3]-]*]1d*] U]3]J]7]']" -".]9\\T];].\\Ua-^;]L]@]K^?].] Uc Pc+_8]>]J]U];]K]@].]F]E].].].]H]C].].]U_8].]W^Q^W]H]V]O]C]E]F]L]?]E]F]L]@^&]6]H]C]K]?]Q^V]Q]I^X^8^U^.^<]/](]1^I^ ]R_h6]L]A]K]?]Q`Q]H^P^?]K]?l4]4](] R^U^W]@]O]0^7g;_S];bT^@`L]8_7]L]>]E]E^W]V]@pA]S]S]" -"=_T_].].].].].].].].]-]F]F]V]O]C]E]F]E]F]E]F]E]F]E]B_P_C]L]V^G]H]C]H]C]H]C]H]@^U^;]N^>]T]6]R_;]R_;]R_;]R_;]R_;]R_;]R" -"_X_T^K_R\\:_S^;_S^;_S^;_S^=].].].]*h=bT^;_T_;_T_;_T_;_T_;_T_1^9_T`>]L]?]L]?]L]?]L]A]K]>aT_?]K] P]Q]R]E]F]E]V\\Q\\W]E]K\\W]E]F]A]4^L] A^@ZN\\ =i8e@yCk?^R^" -"=]L]9b8]O^?] Im B]1]T]5uI]T[6]S^T]<^3]-]*]3^X\\X^,] V^3]J]7](^/]9]T];e7]We/]9]N]?]K^?].] Wd Nd._8]O`U\\T\\K]S]<]L^A]-]F^F].]/]-]H]C].].]V_7].]V]Q" -"]V]H]V^P]D]C]G]L]@]C]G]L]?^']6]H]C^M^?]Q]U]Q]Ic6^W^._<]/^)]2^G^ !ZM^=`Q^=^NZ;^Q`>^P^=].^Q`?`Q^>].].]R_;].`R^X\\R^M`Q^=^P^>`Q^=^Q`?`1]MZ;].]L]A^M^?]Q`Q]" -"G^R^>^M^1^4]4](] D]P^A]R^X]@]P^/]9^Vb=^NZ;`Q^AaN^8_7]L]>]E]F^V]U]>]P]>]S]S]>^P^>`T`7]6]J]<]S]5^6]/]C]G]Q]Q]F]H]D]P]P]H]C]C^&]TZ,^7]7^N^6]TZ H]/^U[TZ9" -"]2n;]U]8]0d <[U]F[M\\P]2[R[ M[S\\P\\S[ Tb(]9]'\\ @]L]@fU\\ M\\3]P]9[R[1\\M\\<\\M\\7\\R\\8]2]S]8]S]8]S]8]S]8]S]7]U]6]R]?]-].].].].].].].]-]F]F]V^P]D]C]H]C]H]C]H]" -"C]H]C]B_R_C]L]T]G]H]C]H]C]H]C]H]?^W^:]M]>]U^6ZM^].].].]+i=`Q^=^P^=^P^=^P^=^P^=^P^2^:^P^>]L]?]L]?]L]?]L]" -"A^M^>`Q^@^M^ P]Q]Q]F]E]F]W^S^W]F]L^W]F]E]B]3]M^ B^B^O[ =k8d?xClA^P^>]L]9]X]8^P]>\\ Hl A] 9uI]T[5]T]T]:^ =]*]5^V\\V^.] V]2]J]7](]/^:]S];h:]Xg0]" -"9^P^?]K^?].]!e Je2_7\\PdW\\S\\L]S]<]M^@]-]E]F].]/]-]H]C].].]X_5].]V]Q]V]H]U^Q]D]C]G]L]@]C]G]M^?`)]6]H]B]M]>]Q]U]Q]Hb5c-^;].])] B]=_O]=].]O_>]N^>].]O_?_" -"O]>].].]S_:]._P`P]M_O]=]N]>_O]=]O_?_1]-].]L]@]M]>]RbR]G^R^=]M]1^3]4](] FaSaD^Qa?]R_.]9]R`>]._O]>^N]8`7]L]>]E]G^U]U^?]P]>]S]S]>]N]>^P^7]6]J]<]S]4^7]/]" -"C]G]Q]Q]F]H]D]P]P]H]C]D_&]&_8]8_N_7] B]/]T[3]1l:^W^8]1]W` >\\U\\E\\N\\P]3\\S\\ N\\S\\P\\S\\ S_']:]&\\ @]L]@fU\\ M\\2\\P\\8\\S\\2\\N]<\\N]7\\S]8]2]S]8]S]8]S]8]S]8]S]8]S]" -"7]R]?]-].].].].].].].]-]E]G]U^Q]D]C]H]C]H]C]H]C]H]C]A_T_B]M]S]G]H]C]H]C]H]C]H]>c9]M^?]U]'].].].].].].`O^N].]N^>]N^>]N^>]N^?].].].],_R^>_O]=]N]=]N]=]N]" -"=]N]=]N]2^:]O_?]L]?]L]?]L]?]L]@]M]=_O]?]M] O\\P]Q]F\\D]F\\U^U^V]F\\L^V]F\\D]B]3]M] RuJ`O[ >m9c>wCmA]N]>]L]9]X]7]P]?] Im A] 2\\R\\A]T[5^V^T\\:` ?](\\6]T" -"\\T]/] V]2]J]7])^1_9]S];i;bS^2^8^S_>]K^?].]$e@u@e6_7]QfX\\S\\M^S^=]N^?]-]E]F].]/]-]H]C].].c4].]U]S]U]H]T]Q]D]C]G]M^@]C]G]M]=c-]6]H]B]M]>^R]U]R^G`4c.^:]" -".])] B]=^M]?^/]M^?]L]>]/]M^?^N^?].].]T_9].^O_O^N^N^?]M^?^M]?]M^?^0]-].]L]@]M]>^S]X]S^F^T^<^O^2_3]4](] GcUcE]Pa?]Vb-]:]O_?].^N^>]O^8a8]L]?]C]H]T]T]?" -"]P]>]S]S]?]L]@^N^8]6]J]=^S^4^8]/]C]H^Q]Q^G]H]D]P]P]H]C]E_%]%_9]9_L_8] B]0^T[3]0_T_>cWc=]1]U_ ?[U\\C[N]R^4]T] N[R\\Q]R[ 'uG]&] @]L]?eU\\ M\\2]R]8]T]3\\N\\;" -"\\N\\7]S\\7]3^S^:^S^:^S^:^S^:^S^9]S]8^R]?]-].].].].].].].]-]E]G]T]Q]D]C]H]C]H]C]H]C]H]C]@_V_A]N]R]G]H]C]H]C]H]C]H]>c9]L]?]U]'].].].].].]._M]O^/]L]?]L]?]L" -"]?]L]?].].].]-^O]>^N^?]M^?]M^?]M^?]M^?]M^ I]O`?]L]?]L]?]L]?]L]@^O^=^M]@^O^ P]P]P\\G]C\\G]T^W^T\\G]M^T\\G]C\\B]3^O^ RuJ[X]P[ >o=\\XaX]BwDoC]L\\>]L]:^X^8]P]?" -"] E] 5] 3]S]A^U[4dT];b @](]6ZR\\RZ.] V]2]J]7]*^7d8]R];]R_]-]E]Fm>k=]-rC].].b3].]U]S]U]H]T^R]D]C]G]M]?]C]" -"G]N^^M]?].]M^?]L]>]/]M^?^M]?].].]U_8].^N^N]N^M]?]L]?^M]?]M^?^0]-].]L]@^O^=]S]X]S]D^V^:]O]2_2]4](] H\\U^W]U\\E]Pa?" -"]Vb-];]M^?].^M]>^P]7a8]L]?]C]H]T]T]?]P]>]S]S]?]L]@]L]8]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]F_$]$_:]:_J_9] B]0]S[3]0]P]>o=]2]S_ @[U\\C[M]T_5^U^;u O[R\\R]" -"Q[ 'uH]/ZQ] ?]L]?eU\\ M\\1]T]7^U^4\\O]O]I\\O]T`MZQ]S]O]E]3]Q]:]Q]:]Q]:]Q]:]Q]:^S^9]QmO]-m>m>m>m>].].].]1hL]G]T^R]D]C]H]C]H]C]H]C]H]C]?_X_@]O]Q]G]H]C]H]C]" -"H]C]H]=a8]L]?]U]&].].].].].].^M]O].]L]?]L]?]L]?]L]?].].].].^M]?^M]?]L]?]L]?]L]?]L]?]L] I]Pa?]L]?]L]?]L]?]L]?]O]<^M]?]O] O]P]P\\G]C\\G]ScS\\G]N^S\\G]P]P\\B" -"]2]O] QuF]Q[ >oAqDuDqD]L]?]L]:^X^8^R^?\\ D] 5] 3]S]@`X[3bS\\R^G]W^N] P](].\\&] W]1]J]7]*^7c8]Q];ZM^=`O^4]4d:]M_?].])d:u:d=_5\\R]O^R\\N]Q]=j<]-]E]F" -"m>k=]-rC].].a2].]U^U^U]H]S]R]D]C]G]N^?]C]G]P_:g3]6]H]A]O]<]S]S]S]E^1_.^8]-]*] A]>^M]?]/^M^?]K]?]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M]@^M^?]/]-].]L]?]" -"O]<]S]X]S]C^X^9]O]2^1]4](]0_IZ O[R\\X]S\\G^O_>]Vd9_U];]L]?].]L]=]P]8]X^9]L]?]C]I^T]S]@]P]>]S]S]?]L]@]L^9]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]G_#]#_;];_H" -"_:] B]0]S[3]0\\N\\>o=]2]Q^ A[U\\C[LcX\\6]T]9u O[RfP[ 'uIf7e >]L]>dU\\<] :f5d4]T]:fT\\O^NfT\\UdOeR\\O^F^3]Q]:]Q]:]Q]:]Q]:]Q]:]Q]:^QmO]-m>m>m>m>].].].]1hL]G]S]R" -"]D]C]H]C]H]C]H]C]H]C]>d?]P^Q]G]H]C]H]C]H]C]H]<_7]L]?]U^'].].].].].].^L]P].]K]@]K]@]K]@]K]@].].].].]L]?]L]@^L]@^L]@^L]@^L]@^L] I]Q]X^@]L]?]L]?]L]?]L]?]" -"O]<^M]?]O] O\\WmX]H\\WmX]H\\QaR]H\\N^R]H\\O]P]C]2]O] QuF]R\\ ?qCsDtDrE]L]?]L]:]V]7]R]>x '] 5] 3\\R\\?e3^R\\SbJ^V^O] P](].\\&] W]1]J]7]+^6e:]Q]-^>_M]5^6" -"h<^O` Qe8u8e@^5]R\\M]R\\O^Q^>m?]-]E]Fm>k=]KdFrC].].b3].]T]U]T]H]S^S]D]C]G]P_>]C]Gk6f5]6]H]A^Q^<]S]S]S]F_1_/_8]-]*] A]>]K]A].]K]@]J]?]0]K]?]L]?].].]W_" -"6].]M]M]N]L]@]J]@]K]A]K]?]/^.].]L]?]O]<]T^W]T]C^X^9^Q^3^1]3]']3dN\\ P\\R`Q[G]N_>]Q`;bW];\\K^?]/]L]=]Q^8]W]9]L]?]C]I]S]S]@]P]>]S]S]@]J]B^L^9]6p>^Q^4^9]/]C" -"]H]P]P]G]H]C]Q]Q]G]ViV]H_\"]\"_<]<_F_;] B]1]R[3]1]N]8a6]2]P^ B[U\\C[K`V\\7]T]8u O[RdN[ 'uIf5a <]L]=cU\\<] :f3`1]T];fU\\N^NfU\\T[S]NaQ\\N^G^3^Q^<^Q^<^Q^<^Q^<^Q" -"^;]Q]:]PmO]-m>m>m>m>].].].]1hL]G]S^S]D]C]H]C]H]C]H]C]H]C]=b>]P]P]G]H]C]H]C]H]C]H]<_7]L]?]U_(].].].].].].]K]Q].]J]A]J]A]J]A]J]@].].].].]L]?]L]@]J]A]J]A" -"]J]A]J]A]J] K]P\\V]@]L]?]L]?]L]?]L]?^Q^<]K]@^Q^ O\\WmX]H\\WmX]H\\P_Q]H\\O^Q]H\\O]P]C]2^Q^ D^<]R[ >qDuEsCqD]L]?]L]:]V]7]R]>x '] 5] 3\\R\\=f+]TdL^T^P] P]" -"(].\\2u *]1]J]7],^-_=]P],]>_M]5]7_R^<^Qa Sd .dC^4\\R]M]R\\O]O]>]N_@]-]E]F].]/]KdF]H]C].].]X^4].]T]U]T]H]R]S]D]C]Gk=]C]Gj1c6]6]H]@]Q];^T]S]T^Ga1].^7]-]*" -"] Lh>]K]A].]K]@]J]?]0]K]?]L]?].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]._0].]L]>]Q];^U]V]U^Bb7]Q]3^1^3]'^6iS^ P[P^P[G]N_>]N^=dX]<]J]>^1]L]=^R]8^W]9]L]@]A]J]S" -"]S]@]P]>]S]S]@]J]B]J]9]6]J]>]O]5^8]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]]K]@]" -"O[X\\I`3]O]<]O]<]O]<]O]<]O]<]O];]P]?]-].].].].].].].]-]E]G]R]S]D]C]H]C]H]C]H]C]H]C]<`=]Q]O]G]H]C]H]C]H]C]H];]6]L]?]T_4h9h9h9h9h9h9hK]Q].]J]A]J]A]J]A]J]" -"@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]Q\\U]@]L]?]L]?]L]?]L]>]Q];]K]?]Q] N\\WmX]H\\WmX]H\\P_Q]H\\P^P]H\\O]P]C]1]Q] C]:]S[ ?sEvEqAoC]L]?]L];^V^8^T^>x " -" '] 5] 4]S]]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?].c4].]L]>]Q]:]U]V]U]@`6^S^4^5b2]&b^Ua<]J]=" -"c7]L]<]S^8]V^:]L]@]A]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?^O^7^7]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]\\I\\@\\O\\X\\J`3^O^>^O^>^O^>^O^>^O^=]O]<^P]?]-].].].].].].].]-]E]G]R^T]D]C]H]C]H]C]H]C]H]C];^<]R]N]G]H]C]H]C]H]C]H];]6]L]?]S`8j;j;j;j;j" -";j;|Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]R]U]@]L]?]L]?]L]?]L]>^S^;]K]?^S^ N\\WmX]H\\WmX]H\\QaR]H\\Q^O]H\\O]P]C]1^S^ D]9]T\\ ?sFwDo?nC]L]?]L];" -"]T]7]T]=] Hj ?] 4]S]8d/]T]T]N^R_R\\ O](] =u Se =]0]J]7].^(]?]O]+]?^K]7]7]L]]K]A].]K]@p?]0]K]?]L]?].].a2].]M]M]N]L]@]J]@]K]A]K]?]-f8].]L]>^S^:]U]V]U]?^4]S]4^4`0]$`<^Si O[O" -"\\O\\H]N^=]M^@^S`<]J]=c7]L]<]S]8^U]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]7]6]/^E^H]P]P]G]H]A]S]S]E]C]Iz<]]M]>]M]>]M]>]M]>^O^=]O]?]-].].].].].].].]-]E]G]Q]T]D]C]H]C]H]C]H]C]H]C]<`=]S]M]G]H]C]H]C]H]" -"C]H];]6]M^?]R`;l=l=l=l=l=l=~Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]S]T]@]L]?]L]?]L]?]L]=]S]:]K]>]S] M]P]P\\G]C\\G]ScS\\G]S^N\\G]P]P\\B]0]S] D]" -"7\\T[ >sFwCn?mB]L]?]L];]T]7]T]=] Hi >] 4]S]7[Xa1]T^T^O]P_T] O](] =u Se =]0]J]7]/^'^A]N]+]?^K]7]8^L^]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?]+e9].]L]=]S]9]V]T]" -"V]@_4]S]5_4b2]&b<\\Nd M[O]P\\H]N^=]L]@]Q_<]J]?e7]L];]T]8]T]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]8^6].]E]G]P]Q^G]H]A^T]T^E]C]Iz<]]M]>]M]>]M]>]M]>]M]>^O]?]-].].].].].].].]-]E]G]Q^U]D]C]H]C]H]C]H]C]" -"H]C]=b>]T]L]G]H]C]H]C]H]C]H];]6]M]>]Qa>`P]>`P]>`P]>`P]>`P]>`P]>`PoQ].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]T]S]@]L]?]L]?]L]?]L]=]S]:]K]>]S] " -"L\\P]P\\F\\C\\F\\T^W^T\\F\\T^M\\F\\C\\B]0]S] E^7]U[ >sFwBl=kA]L]?]L]<^T^8^V^=] Ij >] ]K]A].]K]@],]0]K]?]L]?].].c4].]M]M]N]" -"L]@]J]@]K]A]K]?](d;].]L]=]S]9^W]T]W^@`5^U^5^/_3]'_8ZJ` K[O]P\\H]N^=]L]@]P];]J]@_0]L];]U^9^T^;]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]@^M^:^5].]E]F]Q]Q]F" -"]H]@^U]U^C]E]G_\"]\"_BZT]TZB_F_;] B]1]R[3]1\\L\\?o I_S] A[U]F[ V]T] W] N[S\\R]R[ S] ]L]6\\U\\ ']T]/\\O\\V\\@\\H\\A\\O\\V\\M_0o@o@o@o@o?m>l>].].].].].].].].]-]F^" -"G]P]U]C]E]F]E]F]E]F]E]F]E]=d?^V]L]F]H]C]H]C]H]C]H];]6]N^>]O`?]M]>]M]>]M]>]M]>]M]>]M]>]M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]U]R]@]L]?]L]?" -"]L]?]L]=^U^:]K]>^U^ L\\P]Q]F\\D]F\\U^U^V]F\\U^M]F\\D]B\\/^U^ OuD]V[ =sFwBk;i@]L]?]L]<]R]7]V];] F^ Nu=[T^3]S]R]O]N_V\\ N](] 1] ].]L]6]1_%]Aq0]>]K]" -"8]7]J]/] Md:u:d>]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]S^9].]RaR]H]P^V]C]E]F].]E]F]M],]8]6]H]>]U^8]W^Q^W]H^U^4]2^3]+],] R^M]>]K]A].]K]@],]0]K]?]L]?" -"].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]$`;].]L]=^U^8]W]T]W]@b5]U]5^,]3]'] J\\Q_Q[G]N^=]L]A]O];]J]@].]L];]U]8]R];]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]5]L]?]K];" -"^4].^G^F]Q]Q]F]H]?_W]W_B]E]F_#]#_B\\U]U\\B_H_A\\U]U[ H]1]R[3]1]N]?o H`V] @[T]G[ U]T] X] N[S\\Q]S[ S] ]L]6\\U\\ (]T]/]P\\U\\A]I]B]P\\U\\M^/o@o@o@o@o@o@m>].]" -".].].].].].].]-]F]F]P^V]C]E]F]E]F]E]F]E]F]E]>_X_?]W^L]F]H]C]H]C]H]C]H];]6]P_=]M^@^M]?^M]?^M]?^M]?^M]?^M]?^M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]" -"A]J] K]U\\Q]@]L]?]L]?]L]?]L]<]U]9]K]=]U] K]Q]Q]F]E]F]W^S^W]F]W^L]F]E]B\\.]U] NuC\\V[ =eXZXdFgXhAi9h@]L]?]L]<]R]7]V];] E] Nu=[S]3\\R]R]O]M_X\\ M](" -"] 1] ].]L]6]2_$]Aq0]>]K]8]7]J]/] Ke=u=e<]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]R^:].]RaR]H]O^W]C]E]F].]E]F]M^-]8]6]H]>]U]7]W]O]W]I^S^5]3^2]+],] R" -"]L]>]K]A].]K]@],]0]K]?]L]?].].]W_6].]M]M]N]L]@]J]@]K]A]K]?]\"_<].]L]<]U]7]W]T]W]Ac5^W^6^+^4](] H[R\\X]S\\G]N^=]L]A]O];]J]A^.]L]:]W^9^R];]L]@]O]O]J]S]S]@" -"]P]>]S]S]@]J]B]J]9]5]L]?]K];^4]-]G]D]R]R]E]H]>kA]E]E_$]$_B^V]V^B_J_A^V]V] I]1]R[3]0\\N\\>o G`X] ?\\U_Q[T\\ T]T] ] N\\T\\Q]T\\ S] ]L]6\\U\\ )]T].\\P\\T\\A\\I]A" -"\\P\\T\\N^.o@o@o@o@o@o@m>].].].].].].].].]-]F]F]O^W]C]E]F]E]F]E]F]E]F]E]?_V_@]W]K]F]H]C]H]C]H]C]H];]6k<]L^A]L]?]L]?]L]?]L]?]L]?]L]?]L]?].].].].]-].].].]/" -"]J]@]L]@]J]A]J]A]J]A]J]A]J] K]V\\P]@]L]?]L]?]L]?]L]<^W^9]K]=^W^ J]R]R]D]G]D]W\\Q\\W]D]W\\L]D]G]A\\.^V] NuC]W[ ]K]9]6]J]/] He@u@e H\\R]M]T]Q^J]A]J]@]/]G^E].]-]F]F]H]C].].]Q^;].]Q_Q]H]N]W]B]G]E]-]G^F]L]-]8]6]I^>^W^7]" -"W]O]W]I^R^6]4^1]+],] R]M^>^M^@]/^M^?]-]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M^A^M^?] ]<].]L]<]U]7]X]R]X]B^W^5]W]6^)]4](] H\\T]W]U\\F]O_=]L]A]P^;^L^A]-]L" -"]:]W]8]P]<]L]@]O]O]J^T]T]?]P]>]S]S]@^L]A^L]8]5]L]@^J]=^3]-^I^D^S]S^E]H]]G]C_%]%_A_W]W_A_L_@_W]W_ J]0]S[3]0]P]5]4],b =[ThT[ R]T]!] M[T\\P]U[ R] ]L" -"]6\\U\\ *]T].]P[S\\B]J]A]P[S\\N].^J]B^J]B^J]B^J]B^J]B^K^A]M]=]/].].].].].].].]-]G^F]N]W]B]G]D]G]D]G]D]G]D]G]?_T_AbK]E]I^C]I^C]I^C]I^;]6j;]K]A]M^?]M^?]M^" -"?]M^?]M^?]M^?]M_?].].].].].].].].]/]J]@]L]@^L]@^L]@^L]@^L]@^L] J^X]Q]?]L]?]L]?]L]?]L];]W]8^M^<]W] I]R]S]C]H]C]VZOZW]C]VZL]C]H]@\\-]W] MuC]X[ ;cWZWbDe" -"WZXe>e6e>]L]?]L]=]P]8^X^:] F^ H\\R\\5[S]5]Q]R]O^L` K]*] 0] !^.]L]6]4_\"]2],^>^M]8]6]J]0] DeCuCe E]R\\M]T\\P]I]A]J]@]/]G]D].]-]F]F]H]C].].]P^<].]Q" -"_Q]H]N^X]B]G]E]-]G]E]L^.]8]5]J]<]W]6^X]O]X^J^Q^6]5^0]+^-] R]M^>^M]?].]M^?]-]/]M^?]L]?].].]U_8].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^<^W^6aRbB^V^6]W]7^(]4]" -"(] GcUcE]P_=]L]A]P]9]L]@]-]L]:^X]9^P]<]M^@]P^O]I]T]T]?]P]>]S]S]@^L]@]L]8]5]M]?]I]>^2],]I]B_U]U_D]H]:c<]G]B_&]&_?_X]X_?_N_>_X]X_ I]0]S[3]0_T_5]4]+` ;[" -"SfU[ P^U^#] L[U\\P]V[ Q] ]M^6\\U\\ ,^U^-\\P\\S\\B\\J]@\\P\\S\\N].]I]B]I]B]I]B]I]B]I]B]I]B^M]=]/].].].].].].].]-]G]E]N^X]B]G]D]G]D]G]D]G]D]G]@_R_A`J]D]J]A]J" -"]A]J]A]J]:]6g8]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?].].].].].].].].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;aP]?]M^?]M^?]M^?]M^;]W]8^M];]W] H]S]T^B]J^B]J^B]J^B]J^@" -"\\-]W] G^1_ :aW[V`BcW[Wc]N]<]P]7]X]8] F]KZ X]S]5[S]5\\P]R]N]K_ K]*] 0] !],]N]5]5_\"]1],]<]M]9^6^L^0] Ad Nd A\\R]O^U\\P^I^B]K^?]H[C]H^D]" -".],]G]F]H]C].].]O^=].]P^Q]H]M]X]A]I]D],]I^E]K]AZH^8]5]J]<]W]5bObJ^O^7]6_0]*]-] R]M^>^M]?^/]M^?^.]/]M^?]L]?].].]T_9].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^;" -"]W]5aRaB^U^6c8_(]4](] FaSaD]P_=]M]@]P]9]L]@]-]L]9b9]O^=^N^?\\P_Q]H]T]T]?]P]=]T]T]?^L]@]L]8]4]N]@^I^?]1],^K^A`W]W`C]H]7]8]I]@^&]&^=i=^N^^P^=^P]7]X]8_ H^M[ F] 6]S]>ZQ[T^6]P]S^N^K^ K]*] 0]:] 8]0],]O^5]6_2ZI]1]-^<^O^9]4]L]0]<].] Uc Pc1]2\\Q^S`W^P]G]B]K]" -">^J\\C]I^C].],^H]F]H]C].].]N^>].]C]H]MbA^K^D],^K^D]K^B[I]7]5^L^_O]=].]O_>].].]O_?]L]?].].]S_:].]M]M]N]L]>]N]>_O]=]O_?] ]<]-" -"]O_;]X^5aRaC^S^6a8_']4](] D]P^B^Ra>^N]@]Q]7]N]?^.]L]9a8]N]=^N^?]Q_Q]G]U]U]>]P]=]T]T]?_N]>]N]7]4^P^@]G]@^1]+^M^?mB]H]7]8^K^?\\%]%\\;g;\\L\\:g G]/]T[3]2n7]" -"4]'^ <\\F\\ M\\S\\ J\\F\\ L^N^6\\U\\ ,\\S\\-]OhG]K]@]OhQ]LZ=]G]D]G]D]G]D]G]D]G]D]G]D^L]<^J\\C].].].].].].].]-]J_D]MbA^K^B^K^B^K^B^K^B^K^A_N_B^K]B^L^A^L^A^" -"L^A^L^:]6].]K]A^O_?^O_?^O_?^O_?^O_?^O_?^Oa?].].].].]/].].].]-]N]>]L]>]N]=]N]=]N]=]N]=]N]2^;_O]=]O_>]O_>]O_>]O_:a7_O]9a E^P_>^P_>^P_>^P_>^P_>\\,a H^.]" -" /[5]T[S\\8a1`<]L]=^R^<]O^8b7_ H^O\\ F] 6\\R\\=[R[U^5\\N]T]L^M` L]*] 0]:] 8]1^+]P]4]7_1[L_1]ZM];].] R` P`.]2]QfXaN]G]B]L^=^L]C]K_B].]+" -"_J]F]H]C].].]M^?].]C]H]La@^M^C]+^M^C]J]B]L^7]4^N^:a4aMaK^M^8]7^.]*^.] Q]P`>`Q^=^NZ;^Q`>_LZ>].^Q`?]L]?].].]Q^;].]M]M]N]L]>^P^>`Q^=^Q`?]/ZL];]-^Q`:a4`" -"P`D^Q^7a8^&]4](] S]Sb>_P^@]R^7^P^>^MZ<]L]9a9]M]=_P`XZB]Q_Q]G^V]V^>]P]=^U]U^?`P^>^P^6]4]Q^?]G]A^0]*^O^]P`>]P`>]P`>]P`>]P`>]P]X^LZN^NZ;_LZ>_LZ>_LZ>_LZ?].].].]-^P^>]L]>^P^=^P^=^P^=^P^=^P^2^:^P^=^Q`>^Q`>^Q`>^Q`:a7`Q^9a Dk],a " -"H]-] /[,[._0_;]L]=j<]N]7`5a J_S^ F] 6\\R\\=^U[W_5]N^V^K_Rd L],] /]:] 8]1])^T^3]8_0^Q`0]<]Q_8^S^8^3_R_=]R^:].] O] P]+]1\\PdW`N^G^C]N_;`R`C]NaA].]*`O" -"`F]H]C].].]L^@].]C]H]La?`S`B]*`S`B]J]B`Q_6]3_R_9a4aMaL^K^9]8^-])].] Q_Tb>aS^;_R\\:^Sa=`Q]>]-^Sa?]L]?].].]P^<].]M]M]N]L]=_T_=aS^;^Sa?]/^R_:]-^Sa:a3_P_" -"C^P^7_8^%]4](] S_V^X^?aS^>]T^5_T_=`R]<]L]8_8]M^>`SdA]SaS]E^W]W^=]P^=_W]W_>]X]T_<_T_5^4^T^?^G^C^/])^Q^8c=]H]7]6`S` ?] ;c >c E]._W[V\\9]4^J^9]4]%] ;]L]" -" IZQZ H]L] !u ,`Sd9\\U\\ ,ZQZ,]E\\E]L]?]E\\M_S^>^G^F^G^F^G^F^G^F^G^F^G^F^K]:`R`C].].].].].].].]-]ObB]La?`S`>`S`>`S`>`S`>`S`?]J]CcS`?_R_=_R_=_R_=_R_8]6" -"].]V[R^?_Tb>_Tb>_Tb>_Tb>_Tb>_Tb>_T^V_Q]M_R\\:`Q]=`Q]=`Q]=`Q]?].].].],_T_=]L]=_T_;_T_;_T_;_T_;_T_1^:`T_;^Sa=^Sa=^Sa=^Sa9_6aS^7_ Bi:i:i:i:i=]+` I],] /[" -",[-].]:]L]]C]H]K`>kA])kA]J^Cm5" -"]2j7_2`M`K^J]9]8tC])].] PgX]>]Xf9h9fX]],fX]?]L]?].].]O^=].]M]M]N]L]qA^U]W]U^D" -"i<]O`?k=]Xg:h3a7f>uCn?]/eSe;]:]H]7]5k >] :a n?\\H\\8]4]%] 9^R^ *^R^ Xu ,q9\\U\\ /]D\\F]LfH]D\\Li>]E]F]E]F]E]F]E]F]E]F]E]F]JnIkBn?n?n?n?].].]." -"]-n@]K`>ki-]]C]H]K`]Wd6f8dW]:i>]+dW]?]L]?].].]N^>].]M]M]N]L];f;]Wd7dW]?]/i7c3dV]9_2_P_E^M^8_8m4]4](] QdV`B]Xe;d1f8h<]L]8_9]K]>]XdW_@eWeBg;]O" -"`=g;]Vd8f1`6d=uCn?]/eSe;]:]H]7]3g <] 9_ :_ C]+f>n>ZFZ7]4]%] 7f &f Vu ,]XdW_9\\U\\ /\\C\\F\\KfH\\C\\Kg=]E]F]E]F]E]F]E]F]E]F]E]F]JnHh@n?n?n?n?].].].]-l>" -"]K`]C]H]J_9a<]$d?]I^?c0].b3_2" -"_K_M^G^;]8tC](]/] M`T]>]U`2b4`U]7c;])`U]?]L]?].].]M^?].]M]M]N]L]8`8]U`3`U]?],c2a0_T]9_2^N^F^K^8]7m4]4](] O`R^B]Va8b-`3d:]L]7]9^J]?]V`T]>cUc?c9]N_:" -"a8]T`3`-_4`X IX *W FW " -" " -" " -" HX W 4Z 3VCT X W 4Z " -" HX W 4Z 'VCT ;X W 3Y 2UCT KX W 3Y 0W " -" " -" " -" @W !W 4\\ 5YET ?XHX 8] >W !W 4\\ 7XGX KW !W 4\\ 7XHX +YET :W !W 3[ 5ZFT ?XGX EW !W 3[ 7XGX 5W " -" " -" " -" >W \"V 3\\ 7]HU ?XHX 9` ?W \"" -"V 3\\ 7XGX JW \"V 3\\ 7XHX -]HU 9W \"V 3] 7]HT ?XGX DW \"V 3] 8XGX 5V " -" " -" " -" W $V 3VNV 8XGX IW $V 3VNV 8XHX -_KV 8W $V 2] 7_KU ?XGX CW $V " -"2] 8XGX 6V " -" " -" :W &W " -"4VLV :j >XHX :VJV >W &W 4VLV 9XGX HW &W 4VLV 9XHX .j 6W &W 3VMV 9i >XGX BW &W 3VMV 9XGX 7W MW " -" " -" " -" CV 'W 4VJV ;j >XHX ;UGV >V 'W 4VJV :XGX GV 'W 4VJV :XHX .j" -" 5V 'W 3VKV :i >XGX AV 'W 3VKV :XGX 8W N[ " -" " -" " -" DV )W 4VHU TEY ;XHX V ,V 2UEU TCU :XGX =U -V 2UCU =XGX ;V NV" -"IV \"W " -" " -" JU /V 3VBV ETBT :U /" -"V 3VBV FU /V 3VBV (U /V 2UAU DU /V 2UAU @V NVGV " -" $X " -" *X " -" JX GTBT MX GX 7V :UEU DX GX 7V " -" JX GX 7W 4X GX 6V GX GX 5V (X &X " -" )X 8V " -" ;X FTBT " -" LX IX 7X W E\\ AW ,W ,W ,W ,W " -" HY GV +Y 4Z NX @X %W " -" DUDU =Y 7W KW 6Z 4XDT BTAT BW KW 6Z IW KW 6[ ,Y )XDT AW KW 5Z 4XDT " -" KW KW 4Z ,W BW 8V (S W H_ AW ,W ,W ,W ,W L] GV +] ;a " -" #[ F^ 8XGX +W BTEU " -" *R 9a :W MW 6\\ 6ZET ?XHX W Ja AW ,W ,W ,W ,W N_ GV +_ " -"?e 8] J] Jb 8[ <[ $Y FY 7XGX =Z Di 5W 8Z .Y !W FW *Y 4W)V*W)V-Y(V " -" W $a MY " -" EW 5W >W Kb AW ,W ,W ,W ,W !a GV +a Ch =f ^ Mf 2Z @x Mx a 5a &W 0g #\\ -_ <\\*V.\\*V0a-V\"X )Z /Z /Z /Z /Z 4WJV 1~U+d Kx Mx Mx Mx MX -X -X -X ,j" -" @[3X Dc 8c 8c 8c 8c W \"W 4VNV 8]HU ?XHX " -"BW \"W 3VNV 8XHX 2W ?W &XHX ^ K~\\ >S 3Q +[ @[;[ ;Q ;e HX 2VFV #VBV FS 6`1V#g GV !V 3V !T 7W 0d" -" :` ;j ?k -[ Dq :g Ky Df ;d $f 1Z @o 5j Np Ex Mt :m\"X/X'X -X -X3Z%X -]0]0\\4X Gi Lm 4i Ln ;m#~W$X/X-X(X-X4Y4XCY1Y-Y.Y&~S%a >W $a N[ EV " -"5W >W Lc AW ,W ,W ,W ,W \"b GV +a Dk Aj \"_ h 3Z @x Mx ?i 6X C~Q)X?X?X Ni 6V /V /" -"V DX &f #W0W e >XGX %c#e +b\"i 9_ Be 9d 'V 3k %^ /c @^*V0^*V2d.V\"X )Z /Z /Z /Z /Z 3b 1~U.j Nx Mx Mx Mx MX -X -X -X ,p F\\4X Gi >i " -">i >i >i BiEV.X/X'X/X'X/X'X/X.Y.Y#X 'j ;V \"V 5VLV :_IT >XHX V \"V 5VLV 9XGX IV \"V 4VMV 9XGX ,ZHY A_IT XHX AV \"V 3VLV 9" -"XHX 2V >W &XHX !_ K~[ >T 4R -_ D_?_ >S =t Fh IX 2VFV #VBV FS 7c4V#i HV \"W 3V !T 7V 0f @e >o Co 0" -"\\ Dq W M" -"d AW ,W ,W ,W ,W HW 1b GV +b Fm Dm #` \"j 4Z @x Mx Am 8X C~Q)X?X?X!m 9X 0V 0X EX 'h" -" $W0W \"h ?XGX 'g%g 0h%i :a Cf :f *V 4m %^ 0e A^+V/^+V1f1V!X )Z /Z /Z /Z /Z 2` 1~V0o\"x Mx Mx Mx MX -X -X -X ,t J\\4X Im Bm Bm Bm Bm F" -"mHV-X/X'X/X'X/X'X/X-X.X\"X (l ;V $V 4UJU :ULXLU >XHX XHX @V $V 2UJU 9XHX 3V" -" =W &XHX !` K~Z >T 4S /a FaAa @T @w Hl KX 2VFV $WCV ES 8e5V$j HV \"V 1V \"T 7V 2j Eh ?q Dp 1\\ Dq >" -"l Ly Hn Bj +l %e E\\ At >s$v Kx Mt >u&X/X'X -X -X5Z#X -^2^0]5X Jo q ;o r Br%~W$X/X-X(X,X6[6XAY3Y+Y0Y%~S%W 3V IW !_ FW 7W >W Md AW " -",W ,W ,W ,W HW 2[ ?V #[ Hn En #` #l 6\\ Ax Mx Cp 9X C~Q)X?X?X\"o ;Z 1V 1Z FX KS 0i #W2" -"W LV ,i ?XGX *l'h 3l'i ;c Dg ;g ,W 6o %^ 1g B^,V.^,V0g3V X *\\ 1\\ 1\\ 1\\ 1\\ 2^ 0~V2s$x Mx Mx Mx MX -X -X -X ,v L]5X Jo Do Do Do Do HpKW" -"-X/X'X/X'X/X'X/X-Y0Y\"X )n XHX ;UEU XHX @W &W 3VJV :XHX 4W =W &XHX " -" 1\\ 1\\ 1\\ 1\\ 1\\ =XMV K~Y =S 4U 1c IdCc AU Dz In LX 2VFV $VBV ES 9g7V$k HV #W 1W #T 8W 3l Fh ?r Eq 3] Dq ?m L" -"y Ip Em -n )k H\\ Au Av%x Mx Mt ?x(X/X'X -X -X6Z\"X -^2^0]5X Ls\"s ?s\"s Et%~W$X/X,X*X+X6[6X@Y5Y)Y2Y$~S%W 3W JW \"a FW 8W >W NZ 6W ,W " -",W ,W ,W HW 2X \\ 2V 2\\ GX KS 1j #" -"W2W LV -j ?XGX +ZEZ)VGY 5ZDZ)i T 5V 2e KfEe CW G| Jp MX 2VFV $VBV ES 9XIX8V$l HV #V /V #T " -" 8V 3n Gh ?s Fr 5^ Dq @n Lx Ir Go .o -q L^ Bv Cx&z x Mt A{)X/X'X -X -X7Z!X -^2^0^6X Mu#t Au#t Gu%~W$X/X,X*X+X6[6X?X5X'X2X#~S%W 2V JW #c FW" -" 9W >W NX 4W ,W ,W ,W ,W HW 2W ;V NW IZCY Hp JY &ZDZ 9^ Bx Mx Eu W *W 2UFU ;XHX 6W ;W &XHX 7h =h =h =h =h DWJV K~X >T 5W 4g MgFg EY J~ K]FZ MX 2VFV $VBV " -"ES :XGX9V%\\GX HV $W /W 3PATAP GV 3[H[ Gh ?]F] GZE^ 6^ Dq A]FX Lx I\\F\\ G\\G[ /[H] 0u N^ Bw E_D^&{!x Mt B`C_)X/X'X -X -X8Z X -_4_0_7X N^" -"E^$u C^E^$u H^E\\%~W$X/X,Y,Y*W7]8X>Y7Y'Y4Y#~S%W 2V JW $e FV 9W >W NW 3W ,W ,W ,W ,W HW 2W ;V NW IY@X >X " -"4[AV IX &X@X 9^ Bx Mx F^E^ =X C~Q)X?X?X&^E^ B` 4V 4` IX KS 3\\GW \"W4W KV .YBT ?XGX .V7V,P=W :W8W /VEV 3V +V /V " -" 7eGU KU 3WCW ;U-V$U-V LV5V NX +^ 3^ 3^ 3^ 3^ 3^ 1~W6_D^&x Mx Mx Mx MX -X -X -X ,{\"_7X N^E^ L^E^ L^E^ L^E^ L^E^ !^Ed*X/X'X/X'X/X'X/X+Y4Y X +Y?" -"X ;V *V 4UDU >TEZ TEZ T 5Y 5g MhHi G[ M~Q L\\AW MX 2VFV $VCV DS :WEW:V%ZAU HV $V -V 3RCTCR HW 4ZDZ H\\LX ?Y?[ HV>\\ 8_ DX )[?T -Y J[B" -"[ I[CZ 0WAZ 2x ^ BX>^ G]=Z&X=b#X -X '];[)X/X'X -X -X:[ NX -_4_0_7X \\?\\%X@^ E\\?\\%X?] J[=X =X W X 3W 4W ,W HW 3X ;V NX KY?X Ca 9Y:R HX (X>X :VNV BZ /X '\\?\\ A^ FX0X)X?X?X'\\?\\ " -" Db 5V 5b JX KS 3ZBT !W6W JV .X?R 4V4U HV ;V4V 1VCV 4V *U 0V 7fGU KU 4WAW TDX ;a 6V ,V 4UBU GV ,V 3UCU 0` 6TDX 4V ,V" -" 2UDU >TDX >V ,V 1UDU :V 9W (o Do Do Do Do GWIU J~V >T 6Z 6i jIj I\\ N~R M[=U MX 2VFV %VBV H] AWCW;V%Y=R" -" HV %W -V 4UETEU IV 4ZBZ IWGX ?V;[ IS9Z 9VNX DX *Z;R -X JZ>Y JZ?Y 1U>Z 5`C_#` CX;[ H[7W&X9_$X -X (\\6X)X/X'X -X -X;[ MX -_4_0`8X![;[&X" -"=[ F[;[&X<[ LZ8U =X W W 2W 4W ,W HW 3W :V MW KX=W Cc " -";X7P HX (WR !X8X JV /X

W W " -" 2W 4W ,W HW 3W :V MW KWU.U 4VAV &V 5U *U 2V 6gGU KU 5W?W =U/V\"U/V IU7V LX ,WNW 5WNW 5WNW 5WNW 5WNW 5WNW 4XHX H[4U&X -X -" -"X -X -X -X -X -X ,X6]&`8X\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z 'Z8['X/X'X/X'X/X'X/X)Y8Y MX ,W:W 9V 0V 3U@U ?[ 1V 0V 3U@V GV 0V 3U?U 8h 1V 0V 2U@U " -" CV 0V 1U@U >V 7W *`L` I`L` I`L` I`L` I`L` JV =X,X >T 6] 9k\"lKl K_ #\\ 'Y8S MX 2VFV %VBV Nk IVAV=V$X 1V %V +V " -"6YHTHY -V EW 5Y>Y :X ?R5Z .Y ;VMX DX +Y DX IYW W 2W 4W ,W HW 3W :V MW KW;W De =W " -" -X *W:W V$X 1V &W +W 5XITIX +V EV 4X[ JX -XNW8WNX0a9X#Y3Y(X9Y JY3Y(X9Y NX LX W W 2W 4W ,W HW " -" 3W :V MW LX;W Df >W ,W +W8W >WLW @Y 2X +Z3Z!t\"X0X)X?X?X*Y3Y Kj 9V 9j AS 5X 8W:W HV /W #T)T KV " -" @T(T 6U?U &V 5T +V AhGU KU 5V=V =U0V!U0V JV7V WLW 7WLW 7WLW 7WLW 7WLW 7XNX 6XGX IY.R&X -X -X -X -X -X -X -X ,X2Z'a9X#Y3Y%Y3Y%Y3Y%Y3Y%Y3" -"Y )Y3Z)X/X'X/X'X/X'X/X'X:X Ki >W8V *XHZ FW ,ZW W " -" 2W 4W ,W HW 3W :V MW LW:W Dg ?W ,X ,W8W >WLW ?Y 3X +Y1Y\"v#X0X)X?X?X+Y1Y MYNVNY :V :" -"YNVNY BS 5X 8XU1V U1V KW7V NWLW 7WLW 7WLW 7WLW 7WLW 7WLW 6XGX JY,Q&X -X " -"-X -X -X -X -X -X ,X1Z(XNX:X$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y P)P$Y3[)X/X'X/X'X/X'X/X'YVKX DX -X BX IX8X NX7W KP 1P =X Y *Z W 0W MW +ZAZ 0W >W W 2W 4W ,W HW 3W :V MW LW:W DSF[ @X -X " -" -X8W ?WJW ?Y 4X ,Y/Y%z%X0X)X?X?X,Y/Y YMVMY ;V ;YMVMY CS 5X 5P*Q JWU2V NU2V$_7V NXLX 9XLX 9XLX 9XLX 9XLX 8WLW 6XGX KY*P&X -X -X -X -X -X -X -X ,X0Z)XNX:X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y\"R+R&Y3]*X/X'X/X'X/X'X/X&Y>Y Jp EW:Y " -" +R@Y 7Q 2W .XEVFY\"X5Y\"X5Y\"X5Y\"X5Y NV ;X/X 0V 5T 8c ^ AW4W ?Z >W6W KY " -" \"Y 0X 2VFV &VCW#[LSKZ KV?V@V\"W 0V 'W )W 1XNTNX &V FW 6Y:Y X *Z NW 0W MW ,Z?Z 1W >W W 2W 4W ,W H" -"W 3W :V MW LW:W DPAY ?Y .W -W6W @WJW >Y 5X ,X-X&_MXM_&X0X)X?X?X,Y/Y !YLVLY " -"W FV /X 'TCfFT2i CUGfBT 9U?U &V 7U 5] >iGU KU 6V;V >U2V NU2V$]5V NWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX KY /X -X -X -X -X -X -X -X ,X" -"/Y)XMX;X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y#T-T'Y3]*X/X'X/X'X/X'X/X%X>X Ir GW=\\ GY 9S 3W /XDVDX$X2X$X2X$X" -"2X$X2X V ;X0X 0X 7T 8d X$X-WJW EX6X Y .X.Y)X -X -Y .X/X'X -X -XBZ EX -XLV:VLX0XMX;X&Y-Y+X7X NY-Y+X7X!X KX Z W FV .X (TDgFT3j CTFhDT 9U?U &V 8U 4\\ =iGU KU 6V" -";V >U3V MU3V#\\5V MWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX LY .X -X -X -X -X -X -X -X ,X.Y*XMX;X&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y%V/V)Y3_+X/X'X/X'X/X'X/X%Y@Y Is HW?^ " -"?Z /Z /Z /Z /Z /Z /Z6Y NZ 0Z /Z /Z /Z 8Y 1Y 3Z /Z /Z /Z /Z 3ZCV 5WDX DXCVCW%X0W%X0W%X0W%X0W V :X1X 0X 7T 9f =k#~`\"h Cf " -"EW4W @\\ ?X8X LX !Y /X 2VFV 'VBV#XHSET KV?VAV!W 0V (W 'W .` \"V GW 5X8X W\"W.XJX" -" FX6X X -X.Y)X -X -X -X/X'X -X -XCZ DX -XLV:VLX0XLX^4WG_ 9` @WG^ 9^GW MWG\\ ;f Gm ^BV\"W:W 3X ?^ 0e AWG_ KV.X ?X Z 7X -X+X)\\HXH\\(X0X)X?X?X-X+X $YJVJY >V >YJVJY Ma =X 7V0V JW@W EV .Y *TEiET5k DTEiDT :VAV &V 9U 3_ ;W6W NiGU " -"KU 6V;V >U3V MU3V#_8V NXJX ;XJX ;XJX ;XJX ;XJX ;XJX :XEX LX -X -X -X -X -X -X -X -X ,X.Y*XLXa'b 7` 5` 5` 5` AW ,W ,W ,W DY EWG_ 9` 5` 5` 5` 5` (Z <`GV W6W MW6W MW6W MW6W#W1X NWG^ HW1X NWBVBW&W.W&WJP:PJW&W4PJW&W." -"W!V :X2X 0X 6S 8g >k#~`#j Fj GW4W @\\ >W8W LX X .X 2VFV 'VBV$XGSCR KV?VBV X 1V (W 'W ,\\ V GW 5X8X f CWIb =bIW MWI^ =j Im U4V LU4V\"`:V GX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :XEX MY -X -X -X -X -X -X -X -X ,X-Y+XKWf ;f ;f ;f ;f +Z >eJU NW6W MW6W MW6W MW6W\"W" -"2W MWIb IW2W NWAVAW(W,W(WJRU5V KU5V GXTKW)W4TKW)W+W\"V 9X3X 2X 5T :k ?i\"~`$m Jn IW4W A^ ?X:X MW " -" NY .X 2VFV 7~X2XFS VIV>X2YIY DYFY +Z JW .V NW 1Y3Y 1n DWLh Bm ChLW Gk Ll 6hLW MWKg HW ,W ,W;Y JW " -",WKfGg8WKg Cl FWLh ChLW MWK` @m Im Y =W6W JW-W&YJb }!WCWCW Hk Dx&{ W4W CWFW P JSCVAVDS :WEV $V W6W NiGU KU 6V" -";V BP>P /U5V KU5V EW=V FX 0XHX =XHX =XHX =XHX =XHX =XHX W:X MW NX -X 2VFV 7~X2WES WKX0XJX>X(Y)X,X7X!Y)X,X7X!Y LX VIV>X1YKY BXFX +Z IW .W " -" W 2Y1Y 2o EWMj Dn DjMW Hn Nl 7jMW MWLi IW ,W ,WW6W NiGU KU 6V;V BQ?Q 0U6V JU6V BU>V EX 0WFW =WFW =WFW =WFW =WFW =WFW X(Y)X.Y)X.Y)X.Y)X.Y)X%Z9Z*Y6WJX,X/X'X/X'X/X'X/X!XFX EX;Z LWDX ?o Do Do Do Do Do DoKn4n Cn Cn Cn Cn HW ,W ,W ,W %l HWLi En Cn Cn Cn Cn /Z Cs LW6W MW6" -"W MW6W MW6W!W4W LWMj LW4W W?V?V+W(V+WKXBXKV+W5XKV+W(V$W 8W4X 2X 5T ;n ?g!~_%p LZDZ JW4W A^ >W:W MW MX -X 2VFV 7~X2WES VJX0XIW>X(X" -"'X-X7X!X'X-X7X!Y LX VIV>X1YKY AXHX +Z HW -V W 3Y/Y 3p FWMk Fo EkMW Io Nl 8kMW MWMk JW ,W ,W=Y HW ,WMjJj:WMk Gp HWMk GkMW MWMb Bo Im \\>W0X=X LW5X u 6W :V MW EkJV Wj Fn CWMk\"\\6X =Z >W6W KW+W)[Ke\"}!WCWCW Jo Hz&{ W4W DWDW ;Y ;X /X'X.YBXBY+X0X)X?X?X/X'X#T HV IT " -":V ;T3T :V CV +o BX 6ZM`MZ GXFX CV *\\ 3SFW,S:V>V 0R@R KSBV@VDS 9e #V ?W \"V ?W6W NiGU KU 6V;V BR@R 1U6V JU6V BV?V EX 1XFX ?XFX ?XFX ?XFX" -" ?XFX ?XFW =XCX NX +X -X -X -X -X -X -X -X ,X+X,XIW>X(X'X/X'X/X'X/X'X/X'X%Z;Z)X5VHX-X/X'X/X'X/X'X/X XHX DX:Y LWEX >p Ep Ep Ep Ep Ep EpMp6o Do Do Do Do" -" HW ,W ,W ,W 'o IWMk Gp Ep Ep Ep Ep 0Z Ds KW6W MW6W MW6W MW6W!W5X LWMk MW5X V>V?W,V'W,VKZDYKW,V5YKW,V'W%W 8X5W 2X 4T ;o @g ~^%q NY@Y KW4W B`" -" ?XX -XJW@WJX0XIX?X(X'X-X7X!X'X-X8Y Y MX W/YMY @YJY +Y GW -V W 4X+X 4YE\\ FWNXG\\ H]EX F\\GXNW J\\F[ " -"GW ,\\GXNW MWNXG[ JW ,W ,W?Z GW ,WNXH[KXH[:WNXG[ H]H] IWNXG\\ I\\GXNW MWNXFQ C\\CW CW ,W6W!X6X NW?\\?W.X?X JW6W 1X 6W :V MW 9X=X\"[IZKW W=Y /W @m H]DV " -"CWNXG[\"\\6W =[ >W6W LW)W*ZJWKY\"}!WCWCW K\\H] J{&{ V3W DWDW :Y XCX NX +X -X -X -X -X -X -X -X ,X+X,XIX?" -"X(X'X/X'X/X'X/X'X/X'X$Z=Z(X6WHX-X/X'X/X'X/X'X/X YJY DX9Y MWEW =YE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE]N\\G[7]EX E\\F[ F\\F[ F\\F[ F\\F[ IW ,W ,W ,W (p IWNXG[ H]H" -"] G]H] G]H] G]H] G]H] 1Z E]H^ JW6W MW6W MW6W MW6W W6W KWNXG\\ MW6W NV>V>V,V&V,VJZFYIV,V6YIV,V&V%W 7W6X 3X LR:T ;q @e N~^&s!Y>Y LW4W B` >WXJX +Z GW -W !W 5X)X 5U>Z G_CZ I[>T FZC_ KZAZ HW -ZB_ " -"M^BZ KW ,W ,W@Z FW ,^CZMVCZ;^BZ IZBZ I_CZ IZC_ M^ 5YY .W AXJa IZW2W EWDW 9Y =X /X'X/YAXAY,X0X)X?X?X/X'X%X JV KX Z FU>Z FU>Z FU>Z FU>Z FU>Z FU>eBZ9[>T FZAZ HZAZ HZAZ HZAZ JW ,W ,W ,W )r J^BZ IZBZ GZBZ GZBZ GZBZ" -" GZBZ 1Z EZB[ JW6W MW6W MW6W MW6W W6W K_CZ MW6W V=V>V-V%V-VHZHYHV-V6YHV-V%V%W 7X7X 4X NU:T WX !Y 0Y BVDX Dk CXJc -X BX>X LX5Y MX -X Ee Le 3Z ?U=bKUCU6XDX IX9Y X +X+X+X -X /X +X/X" -"'X -X -XL[ Y J]?Y KY?] M] 4X8P CW ,W6W X8X MW?\\?W-XAX IW7X 3Y 5W :V MW =_C_(YBXLV NW?Z -W CXC\\ KY ,]@Y LW8X >] ?W6W LW)W,YHWHY MW=W JWCWCW MY>Y " -"L[B[ ;W >W2W FWBW 9Y >X 0X%X0X@X@X,X0X)X?X?X/X'X&Y JV KY =V >Y7Y =V CV .[HSFR BX 3t BWHW AV .WN\\ 9SFV)S;V?W 3UCU LSAV@VCS 7_ V BV LU ?W" -"6W MhGU KU 5W?W AUCU 4U8V HU8V ?UAV CX 2XDX AXDX AXDX AXDX AXDX AXDX @XBX NX +X -X -X -X -X -X -X -X ,X+X,XHX@X(X'X/X'X/X'X/X'X/X'X\"ZAZ&X8WFX-X/X'" -"X/X'X/X'X/X MXLX BX8X MWFW Y;Z:R GY=Y JY=Y JY=Y JY=Y KW ,W ,W ,W *]E[ J]@Y JY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y JW6W MW" -"6W MW6W MW6W W7X K]?Y NW7X V=V=U-V$U-VGZJYFU-V7YFU-V$U%W 7X8X &~X/X:T =t @c L~\\'v\"W:W LW4W CXNX ?X>X MV $x EX 2~X2WES :VDW" -"EV FZ :W #W 7XKTKX )V IV 4X4X >X !X 0Y BWDX Dm FXKf /Y AYBY KX5Y MX -X Gd ~X d 5Y ?V>dLUCU6WBW IX;Z Y +X+Y,X -X 0Y +X/X'X -X -XM[ ;X -XIWBWIX" -"0XGW@X)Y'Y.X8X!Y'Y.X9Y M] #X aEa)X@XNW NWA[ ,W DW?[ LX +[=X KW:X =] ?W6W MW'W-XGWGX MW=W JWCWCW MXZ W2W FWBW 9Z ?X" -" 0X%X0X@X@X,X0X(X@X@X/Y'Y(Y IV JY >V ?Y5Y >V CV .YFSDP BX 2q @XJX AV /WK[ :SFV)S;V@X 4VDV LSAV@VCS 6\\ MV CV KU ?W6W MhGU KU 4V?V @V" -"DV 5U9V GU9V >UBV BX 2WBW AWBW AWBW AWBW AWBW AXDX @XBX Y +X -X -X -X -X -X -X -X ,X+Y-XGW@X)Y'Y1Y'Y1Y'Y1Y'Y1Y'Y\"ZCZ&Y9WEY.X/X'X/X'X/X'X/X MYNY BX8Y N" -"WFW X NW $w DX $VBV#XFS :WFXEV H] ;W #W 9XITIX" -" +V JW 4X4X >X \"Y 3[ BWCX Dn GXLi 1X ?ZFZ JY7Z MX -X Je M~X Me 9Y >U?gMUCV7WBW IX>\\ NX *X*X,X -X 0X *X/X'X -X -XNZ 9X -XHVBVHX0XGXAX)X%X.X9Y!X%" -"X.X:Y La 'X _ @W6W MW'W.YGWFX NW=W JWCWCW NX:X NYW2W FWBW 8Z @X 0X%X0X@X@X,X0X(X@X@X" -"/X%X)Y HV IY ?V @Y3Y ?V CV /YES 6X 1\\H[ JcJc LV 0WI\\ =TFV)S;WAX 5WEW MTAVAWCS 3W 4~W.W KV ?W6W LgGU KU 4WAW @WEW 6U9V GU9V ?VBV BX 2" -"WBW AWBW AWBW AWBW AWBW AWBW AXAX X *X -X -X -X -X -X -X -X ,X*X-XGXAX)X%X1X%X1X%X1X%X1X%X!ZEZ%X9WCX.X/X'X/X'X/X'X/X LXNX AX7X NWFW !W ,W ,W ,W ,W ,W " -",]:X=Y .X9X LX9X LX9X LX9X LW ,W ,W ,W +Z=X K[x A` J~\\(y%W8W MW4W CXMW >W>W MV $x DX $VCV\"XFS 9XIXEV H_ X #Y ?g AVBX Do HXM" -"k 3Y >l HX7Z MX -X Me J~X Je =Y >V?hNUBU8XBX Ju MX *X*X,w Lq IX *~R'X -X -c 8X -XHVBVHX0XFWAX)X%X.X9Y!X%X.X;Z Ke ,X WNV MW" -"Ib +W EW;Y MW *Z;X KV:W =_ @W6W NW%W/XFWFX NW=W JWCWCW NW8X!Y:Y =W >| GW@W 8Y @X 0X%X1Y@X@Y-X0X(X@X@X/XImIX*Y GV HY @V AY1Y @V CV /XDS 6X 0YDY JdL" -"d LV 1WF[ >SFV'SW6W LgGU KU 3WCW ?XFX 7U:V FU:V >UBV AX 3XBX CXBX CXBX CXBX CXBX CXBX BXAw?X *w Lw Lw Lw " -"LX -X -X -X ,X*X-XFWAX)X%X1X%X1X%X1X%X1X%X ZGZ$X:WBX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8W=X -W7W LW7W LW7W LW7W LW ,W ,W ,W ,Y:X LZ;X M" -"Y:Y MY:Y MY:Y MY:Y MY:Y \"Y=\\ LW6W MW6W MW6W MW6W MW:W IZ9X NW:W NVV&V 4W:X %~X2TNVW \"W ;WFTFW -V JV 3X4X >X #Y ?f AWBX Dp IXNm 4X ` @W6W NW%W/WEWEW NW=W JW" -"CWCW X8X!X8X =W >| GW@W 7Y AX 0X%X1X?X?X-X0X(X@X@X/XImIX+Y FV GY AV BY/Y AV DX 1XCS 6X 0W@X KdLd LV 1VCZ ?SFV'S;WE[ 7XFX G~X .S@VBWAS @~W0W " -".P>W >W6W KfGU KU 3XEX >XFX 8U;V:W3U;VCZ9P>WCV:W/Y 3W@W CW@W CW@W CW@W CW@W CXBX CX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XFXBX)X%X1X%X1X%X1X%X1X%X N" -"ZIZ#X:VAX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8X?X -X7X NX7X NX7X NX7X MW ,W ,W ,W ,X9X LY9W MX8X MX8X MX8X MX8X MX8X \"X=] LW6W MW6W MW6" -"W MW6W MW:W IZ9X NW:W NVLuKU/VLuKU/VBaAU/V:YAU/V=X=U&V 4X;X %~X2RLW>T >{!z'~Z)}(W6W NW4W DXLX ?X@X MV KX ,X %VBV!YHS 8eEV" -" Ic ?W !W ;UETEU ,V KW 3X4X >X $Y >c ?WAX DWD^ JbG] 5X 9d DY9[ MX -X #d D~X Dd DY a AW6W NW%W0XEWEX W=W JWCWCW W6W!X8X =W >| HX@X 7Y BX 0X%X1X?X?X-X0" -"X(X@X@X/XImIX,Y EV FY BV CY-Y BV DX 1XCS 6X 1W>W KeNe LV 1VB[ ASFV'S;YI] 9YGY F~X .S@VDX@S @~W1V ,TEZ >W6W JeGU IX +U 2YIY T ?|\"}(~X)~(W6W NW4W DXKW >W@X MV KX ,X %VBV!ZIS 7cEV IYNZ8W 0W !W :RCTCR +V KW 3X4X >X %Y" -" =b >V@X DS=\\ K`C[ 6Y 8b BX9[ Nd A~X Ad HY W ,X8X8W=X8X X6X MY7X\"X7Y MX 0W )W ,W6W MXXMW AW6W NW%W0XEWDW W=W JWCWCW!X6X#X6X >W >| HW>W 6Y CX 0X%X1X?X?X-X0X'XAXAX.XImIX-Y DV EY CV DY+Y CV DX 2X" -"BS 6X 1Vh =W6W JeGU IX 4g :g :YFX DgEV:XhCV:X/X 3X?W EX?W EX?W EX?W EX?W EX@X EX?w?" -"X *w Lw Lw Lw LX -X -X -X 5p9X-XEXCX)X%X1X%X1X%X1X%X1X%X LZMZ!XX7X NWFY !V +V +V +V +V +V +Y6W@X ,W5W NW5W NW5W NW5W MW ,W ,W" -" ,W -X7X MX8X X6X X6X X6X X6X X6X $X=_ MW6W MW6W MW6W MW6W LWS >}%~R)~V(~P)W6W NW4W" -" DWJX ?XAW L~^ $X ,X %VCV N\\LS 6aDVAW0XLZ9W 0W !W :PATAP +V KV 2X4X >X &Z =e BW@X DP8[ L^?Z 7X :h EY;\\ \"d >~X ?e LY ;U@W>Y" -"AU:W>W Ks KX *X*X,w Lq IX6f+~R'X -X -b 7X -XGWFWGX0XDWCX)X%X.X@^ NX%X.s Bl 8X X IXDVCVDX)[ 4\\ -Z @W *V #W $W JX5W\"X -W5X W4W KW 0W5X MX7W" -" MW ,W ,WIZ =W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LWX >XMX BW6W W#W1WD" -"WDW W=W JWCWCW!W4W#X6X >W >| HW>W 7Y BX 0X%X1X?X?X-X0X'XAXAX.XImIX.Y CV DY DV EY)Y DV DX 2XBS 6X 2WY BSFV'S9bMV ;XFY D~X .S@h>S " -"@~W2i >g W EW>W EW>W EW>W EW>W EW>W EX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDWCX)X%X1X%X1X%X1X%X1X%X " -"Ke X=W?X.X/X'X/X'X/X'X/X I\\ >X7X NWEY \"W ,W ,W ,W ,W ,W ,X5W@X -W4W W4W W4W W4W MW ,W ,W ,W -W6X MX7W W4W W4W W4W W4W W4W $W=VMW MW6W MW6W MW6W MW6W " -"LW=X HX5W NW=X MVLuKU/VLuKU/V?[>U/V=Y>U/V=X=U&V 3X=W 7X FW@T ?~&~T*~V)~R*W5V NW4W EXJX ?XBX L~^ $X ,X &VBV Mb 4]CVC]4XJZ:W" -" 0W !W +T KV KV 2X4X >X 'Z X Lu MX *X*X,w Lq IX6f+~R'X -X -c 8X -XFVFVFX0XDXDX)X%X.u MX%X.r" -" ?l :X X IXDVCVDX)\\ 4Z ,Y ?W *V #W $W JX5W\"W ,W5X W3W LW 0W5X MX7W MW ,W ,WJY ;W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LWW 6Y 0X 9V LX 5`3R 0T?[?T/W:[ KWId DbKW HW5X NW +X7W JV>W =WLX BW6W W#W1WDWDW W=W JWCWCW!W4W#W4W >W >| IX>X 9Y AX 0X%X1X?X?X-X0X'XAXAX.XImIX/Y B" -"V CY EV FY'Y EV DX 2WAS ?r CV:V =^ =V 2V=Y CSFV'S8`LV e :W6W GbGU IX 4g 8c 5XFX FgFV:YX GX>X GX>" -"X GX>X GX>X GX>X FX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDXDX)X%X1X%X1X%X1X%X1X%X Jc NX>W>X.X/X'X/X'X/X'X/X HZ =X7X NWEZ #W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3" -"W!W3W!W3W NW ,W ,W ,W .X5W MX7W W4W W4W W4W W4W W4W $W>VLW MW6W MW6W MW6W MW6W KW>W GX5W MW>W LVLuKU/VLuKU/V>Z>U/V>Y=U/V=X=U&V 2W>X 8Y FW@T " -" ?~P(~V*~T(~Q)V4V NW4W EXJX >WBX L~^ $X ,X &VBV Ld 4WAVD`6XHZ;W 0W !W +T KV LW 2X4X >X 'Y ;i GV>X *Z M\\;Y 9X =p HZ?^ 'd " -" Id$Y 9UAWX GWEVJVEW#a >W>W 7Y 1Y 8V KY 9e8T 0T?Z>T0X:[ KWIf GdLW HW4W MW ,W6W JV?X >XKW BW6" -"W W#W2XDWDX!W=W JWCWCW!W4W#W4W >W >| IWX GX>w?X *w Lw Lw Lw LX -X -X -X 5p9X-XCWDX)X%X1X%X1X%", -// Start of second string. -"X1X%X1X%X Ia MX?W=X.X/X'X/X'X/X'X/X GX W GX5W MW>W LVLuKU/VLuKU/V?\\?U/V?YX 8X DWBT ?~Q)~W)~R&~(V4V NW4W EWHW >WBW K~^ $X ,X &VBV Kg \"" -"VEc8WFZ=W /W !W +T 4~W 5V 1X4X >X (Y -] IW>X )Y M[9X 9X >\\F\\ H[C` 'a Ca$Y 9UAV:WAU;WW )V $W 6i JX5X$X -X5X V2W LW 1W3W MW6W MW ,W ,WLY 9W ,W7W7W=W6W!X4X NX5X$X5X MW .[ .W ,W6W KW>" -"W FWEVJVEW#a >W?X 8Z 4\\ 8V K[ =iW2W IWX X *X -X -X -X -X -X -X -X ,X*X-XCXEX)X%X1X%X1X%X1X%X1X%X H_ LX@Wi >i >i >i" -" >i >i3WBX ,V2W!V2W!V2W!V2W NW ,W ,W ,W .W4W MW6W!X4X\"X4X\"X4X\"X4X\"X4X M~Y2X@VIW NW6W MW6W MW6W MW6W KW?X GX5X NW?X LVLuKU/VLuKU/V@^@U/V@Y;U/V=X=U&" -"V 2X?W 8X CWBT ?~R*~X)~Q%}(V4W W4W FXHX ?XDX K~^ $X ,X 'WCV Ii &VEe:XEZ>W /W !W +T 4~W 5V 1X4X >X )Y )[ KW=X (Y N[9Y ;Y " -"?Z@Z I]Gb '^ =^$X 9U@V:WAUXIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W3X ?W >W2W JW;X ~R+~Z*~P#{'V4W W4W FXHX ?XDX K~^ $X " -" ,X 'VBV Gi (VFg;WCZ?W /W !W +T 4~W 6W 1X4X >X *Y &Z LW=X (Y NZ7X ;X ?Z>Z ImNX '[ 8\\%Y 9UAW:WAUX XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W JW:W =Y >X 0Y'" -"X0X?X?X-X0X%XCXCX,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V V&V 1XAW 9" -"X @WDT ?~S+~Z)}!y'W4W W4W FWFW >WDW J~^ *r ?V &VBV Eh *VEXIXX +Y $Z NWXHX DW6W!WW2W KX:X ?Y =X /X'X0Y@X@Y-X0X%YDXDY,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V ;X DW;V DSFV'S >XFX " -" ;V .S@VFW=S (V \"W6W :UGU IX 0XFX -V;TLU MV0U!V;TLU6Y 0X:X KX:X KX:X KX:X KX:X KX:X JWV&V 1XBX :X ?WDT ?~S,~[({ x&W4W W4W FWFX ?XFX JV \"q >V &VBV Af -VEXGX=W@ZB" -"W .W !W +T 4~W 5f 8V 0X4X >X ,Y \"Y W;X 'X NZ7X X -XDVJVDX0XAXGX)X%X.i" -" AX%X.X>Z ,\\ ?X XGW DW6W!WW2W KW9X ?Y =X /X'X/X@X@X,X0X$YEXEY" -"+X%X2~a GV H~a HV I~b HV DX 3W@S 6X 3V8V ;X DXWEW :V .TAVEW?T (V \"W6W :UGU IX /WEW .V;TKU NV/U\"V;TKU7Y /X:X KX:X KX:" -"X KX:X KX:X KX:X KXWDS >~T-~\\(y" -" Mw&W4W W4W GXFX ?XFX JV #r >V 'WCV X -Y Y!W;X 'Y Y5X =X @Y8Y HgKX 'a Ca%X 8UAV8" -"VAU=W8W NX4X%X *X+Y,X -X 0X(X+X/X'X -X -XI[ ?X -XDWLWDX0X@WGX)X&Y.X 0X&Y.X=Y *[ @X XFX EW6W!WW2W KW8W @Y ] Jt It It It It It I~iBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WCVEW NW6W MW6W MW6W MW6W IWCX EW3W L" -"WCX IV=V=V.V$V.VFYKZFV.VFY7V.V$V&V 0XCW ;Y =WFT >~T-~\\'w Ku%W4W W4W GXEW >WFW IV #q =V 6~X JSN^ /VEWCW?W=ZDW .W !W :~W" -" 5f 9V /X4X >X .Y MX\"W:X &X Y5X >Y @X6X FcJX &d Id%X 8UAV8VAU>X8X X4X$X +X+X+X -X /X)X+X/X'X -X -XH[ @X -XCVLVCX0X@XHX(X'X-X /X'X-XXFX EW6W!WV-V%V-VGYIZHV-VGY7V-V%V%V /WDX ;X ~T-~\\'v Is" -"$W4W W4W GWDX ?XGW HV %r =V 6~X JSJ[ 0VEVAV?WX ?X6X D`IX $d Ne#X 8UAV8" -"VBU=x X4X$X +X+X+X -X /X)X+X/X'X -X -XG[ AX -XCVLVCX0X?WHX(X'X-X /X'X-X;Y *Y @X WDW EW6W!WV>V,V&V,VIYGZIV,VIY6V,V&V&W /XEW N~X'VGT =~T-~\\&u Ir#W4W NV4W HXDX ?XHX HV KX ,V 6~X JSHZ 2VDVAV?W;ZGW -W !W \"V " -"Lf :W .X6X =X 0Z LY#~ /X NX5X >X @X5Y AYFX !d >~X >d X 8UAV8VBU>z!X3X%X +X+X+X -X /X)X+X/X'X -X -XF[ BX -XCWNWCX0X?XIX(X'X-X /X'X-X:X )Y AX XDX FW6W!WV?W,V'W,VJYEZKW,VJY6W,V'W&W /XFX N~X'WHT =~T-~\\%s Gp\"W4W NV4V GXCW >WH" -"X HW LX ,V 6~X JSGY 3VDWAW@W:ZIW ,W !W \"V Lf :W .X6X =X 1Z JX#~ /X NX5X ?Y @X4X .X Md A~X Ad LX 8UAV8VBU>z!X3X%X +X+X+" -"X -X /X)X+X/X'X -X -XE[ CX -XBVNVBX0X>WIX(X'X-X /X'X-X9X *Y AX Q.X $T>Z?T0W8W HW5W\"WWCX FW6W!WXFX >V ,SBVBWCS &V \"W6W :U" -"GU *m 8XFX .VWIX(X'X/X'X/X'X/X'X/X'X KZMZ XHW6X-X/X'X/X'X/X'X/X GX XIW GW LX ;~X JSFX 3VDV?V@W9ZJW +V \"W !V V -X6X =X 2Z IX#" -"~ /X NX5X ?X ?X4X .X Jd D~X Dd IX 8UAV8VCV>z!X3X%Y ,X,Y+X -X /Y*X+X/X'X -X -XD[ DX -XBVNVBX0X>XJX(Y)X,X /Y)X,X9Y *X AX XBW FW6W!WXJX" -"(Y)X.Y)X.Y)X.Y)X.Y)X KZKZ!YJW6X,X/X'X/X'X/X'X/X GX |\"X3X$X ,X,X*X -X .X*X+X/X'X -X -XC[ EX" -" -XA\\AX0X=WJX'X)X,X .X)X,X8X *X AX XBX GW6W!WW 9X =\\KW >SEWWJX FW LX <~X JSEX 6WCV?V@W7ZMW *W #W !V !W -X6X =X 4Z GX#~ /X NX5X @X >X4X " -"/X De J~X Je DX 8U@V:WDV>|\"X3X$X ,X-Y*X -X .X*X+X/X'X -X -XB[ FX -XA\\AX0X=XKX'X*Y,X .X*Y,X8Y +X AX W WJW DW MX .VCV" -" :SDW 6VBV?V@W6b )W #W !V !V +X8X X4X /X Ad L~X Ld AX 8VAV:WDU=|\"X3X$Y -X-Y*X -X .Y+X+X/X'X -X -XA[ GX -XA\\AX0XWKVDVKW\"XLX 9WJW =Z #X :V MX AUEVKVDU/X:Y IW5W#WX@W GW6W!W=Y=W2WDWDW W=W JWCWCW\"X4W#W4W >W X4X 0X =d ~X" -" d LUAWX2X#X3X#X -X.Y)X -X -X+X+X/X'X -X -X@[ HX -X@Z@X0XW ,W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W7X FWHW >WLVBVLW#YKX :WJW =Y !W :V MW @VHXJWHV-W:Y IW5W#WY>W1WDWDW W=W JWCWCW\"X4W#W4W >W W MW7X MW7X " -"MW7X MW7X EWJW AX5W GWJW AXCVCW%X0W%X0W%X0W%X0W\"V +WJX ?X 2WLT 9bKQKb)gLQMh Mi =g MW4W MV6W IX@X ?XLX CW MX 0VBV :SDW " -"7VAV?V@X5_ (W #W !V \"W +X8X XLV;VLX1Y?Y >X 9Z 2W %W )W EW7X JX5W\"X -W5X X )W 0X7Y MW6W MW ,W ,WFY ?W ,W7W7W=W6W W4W MX5W\"W5X MW AW FW ,W7X FXJX" -" =WMVBVMW#YJY ;WKX >Y W :V MW ?dId,W;Z IW5W#W=W DW4W!W )W6W DVKW >X>W HW6W W>Y>W1WDWDW W=W JWCWDX\"X4W#W4W >W ;V7W LX2X LY 4X *X1X%]JXJ]'X0X Hj L" -"Y-Y%Y IV JY LYKVKY MY5Y MYJVJY $X 2XBS 6X 2q 9X :V #\\ 7TDgFT /XFX EV )TFV>VJT #V \"W6W :UGU +XFX *V=TCU%V1V!V=TCU=X ,X1W$X1W$X1W" -"$X1W$X1W$X2X%X7X LY .X -X -X -X -X -X -X -X ,X.Y*X;XMX&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y ZAZ$_3Y*X1X%X1X%X1X%X1X FX W3W$W7X MW7X MW7X MW7X MW7X MW7X MW7Z NX -X " -"-X -X -X +W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWMV=W MW7X MW7X MW7X MW7X EWKX AX5W GWKX @XDVDX$X2X$X2X$X2X$X2X\"V +XKW ?X 1WMT 7`JQKa" -"'fLQLf Kg W >WLW BX NY 1VBV :SDW 8V@V?V?W4] &V $W V \"V *Y:Y YGW>X0X$X4Y\"Y /X/Y(X -X ,Y-X+X/X'X -X -X>[ JX -X@Z@X0X;XMX%Y/Y*X ,Y/Y*X6Y -X AX ;Y3Y IXLX =WLV;VLW0X=Y ?X :Z 1W $V )W EW8Y JY7X\"X -X7Y X " -")W 0X7Y MW6W MW ,W ,WEY @W ,W7W7W=W6W X6X MY7X\"X7Y MW AW FW ,X8X EWJW Y NW :V MW >bGc,W;[ JW6X#W=W DX6X!W )W6W DVLX >W=X IW7" -"X W>Y>W1XEWEX W=W IWDWDW!Y6X#X6X >W ;W8W MX0X MY 4X *Y3Y$^LXL^&X0X Ff IY/Y#Y JV KY JYLVLY KY7Y KYKVKY #X 2XBS 6X 3t ;X :V ![ 8TCfFT .XFX FV )U" -"GV>WKT MW7X :UGU ,XFX *V=TBU&V2W!V=TBU=X -X0X&X0X&X0X&X0X&X0X&X0W%X7X KY /X -X -X -X -X -X -X -X ,X/Y)X;XMX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y Z?Z$" -"^4Y)Y3Y%Y3Y%Y3Y%Y3Y FX XEVFY\"X5Y\"X5Y\"X5Y\"X5Y!V *WLX @X /WNT 7`JQJ_&eKQKe Je :d KW4W MW8W HW>X ?XNX AX Y 1VCV 9SDW 9V?V?V?X4\\ " -" &W %W V \"V )X:X ;X 9Z CX 4X (Y KW7X AX W BW6W W )W6W DWMX ?X=X IX8X W?[?W0WEWEW NW=W IWDWDW!Y6W!W6W =W ;W8W MX0X NY 3X )Y5Y\"z%X0X C` FY/Y\"X JV " -"KX HYMVMY IX7X IYLVLY \"X 1XCS 6X 4v X ?XNX AY Y4P VBV 9SDW 9V?V?V?Y4Z %W %W V #W )X:X ;X :Z CY 4X (Y KX9Y AX ;X6X 1Y 1e /e @U@XB[JXW BX8X W )W6W CVNX >W;W IX8X X@[@X0XFWEW " -"NW=W IWDWEX!Z8X!X8X =W :W:W LX0X Y 2X (Y7Y Nv#X0X ?X AY1Y V IV JV FYNVNY GV5V GYMVMY !X 1XCS 6X 5x =X :V MZ 8T?ZBT *VDV FV 'T&T KX" -"8X :UGU ,VDV )VWNX @Y !Z6Q VBV KP>SEW 9V>WAW>X3Z &W %W V " -" #V 'XU?ZH^MZ\\ JX8X\"W?W AX9Y X *W6W CVNX ?X;X JX9Y NW@[@W/XFWFX NW=W IXEWEX!Z8X!X8W ;W ;W;X MX.X\"Y 1X 'Y9Y Lt\"X0X ?X @Y3Y MT HV IT Dj ET3T EYNVN" -"Y X 0XDS 6X 6ZM`LY >X :V LY 7T)T (UCU ET(T JX9Y :UGU ,UCU )V;m.V3V NV;mCY7P HX.X(X.X(X.X(X.X(X.X(X.X(X6X IY.R&X -X -X -X -" -"X -X -X -X ,X2Z'X9a$Z3Y&Z3Y&Z3Y&Z3Y&Z3Y!Z9Z&Z3Y&Y5Y#Y5Y#Y5Y#Y5Y EX `" -" >Y !Y8S MX +VBV KQ?SFX 9V=VAV=Y6] &V &W NV BX 1X 1V 'Y>Y :X X:W JY;Z NXB]BX.XGWGX MW=W H" -"XFWFX [:X NX:X ;W :WX HXX 9X =Z 1P2Z 3X GQ5Z GX=Y @X 9Y:Y KP8Z GX -X 4^ 1^ +X 5U?gM_9W,W%X7Z L[4U&X6]%X -X )[2X+X/X'X -X -X9[ X -X&X0X8`\"Z7Z'X )Z7Z'X3X%T2Y ?X 9Z9Z E` :" -"_9_3Y7Y BX >Z -W #W +W DX=\\ J\\=Y LY7P HY=\\ LY5R JW -Y?] MW6W MW ,W ,W@Y EW ,W7W7W=W6W MYX LX.X#Y 0X %Y=Z Gl MX0X ?X ?Z7Z JP FV GP @f AP/P Ah MX " -"/YFSDP BX 8ZFVEY @X :V JX 7V.U %SAS CU.U HZ\\=Y B^ 7r Gr Gr Gr Gr KV (_ BX )Y S 8RBSCR <] 2\\ GW4W KZBZ HX;W >_ <[ " -" $[=U MX ,VBV JUCSHY :V;WCW<[Z 0R5Z 2X GT9[ GY?Z AY 9[>[ KR;Z FX -X 1[ 1[ (X 5V>dL^9X,X&X9[ J[7W&X9_$X " -"-X (\\6Z+X/X'X -X -X8[!X -X&X0X8`![;[&X ([;[&X3Y&W7[ ?X 8Z;Z D` :^7^3X5Y CX ?Z ,W #W +W DY?] J]?Y KZ:R GY?] LZ8T JW -ZA^ MW6W MW ,W ,W?Y FW ,W7W7" -"W=W6W LY>Y J]?Y KY?] MW /T9X DX ,Y@] CWNW 9]>]'Y@Y =^ AY IW :V MW HYCXNW L\\>Y VAX >Y>Y LY ,W6W B] >X9X K[>[ MXDVMVDX,YIWIY LW=W GYHWHY N]>Y LY" -">Y :X :X@X LX,X%Y /X $ZAZ Ch KX0X ?X >[;[ ?V 6d >f LX /[HSFR BX 9Z3Y AX :V IX 7V1V #R@R BU0U G[>[ :UGU ,R@R 'V(U)V6W" -" LV(UU IX,X*X,X*X,X*X,X*X,X*X,X*W4X G[7W&X -X -X -X -X -X -X -X ,X9_%X8`![;[![;[![;[![;[![;[\"Z3Z(];[\"Z;Z NZ;Z NZ;Z NZ;Z CX Y JW6W LY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y HY@] KY@] KY@] KY@] B^ >]?Y A^ 6o Do Do Do " -"Do IV (_ CX (Y S (S ,[ 0[ GW4W J\\H\\ GW:W >^ :\\ %[@W MX ,VBV JXFSIZ :V:WEW:\\@e (V 'V MV BX 1X 2V $ZDZ 8X ?Z /U;] 2X GV=" -"\\ EZC[ @X 7[@[ JT?[ EX -X /Y 1Y &X 5V=bK\\7X,X&X<^ I]=Z&X=b#X -X ']:\\+X/X'X -X -X7[\"X -X&X0X7_ \\?\\%X '\\?\\%X2X&Z<\\ >X 7[?[ B^ 9^7^4Y5Y CX ?Y +W \"V +W " -" DZB_ J_CZ I[>T G[C_ K[=W JW ,\\GXNW MW6W MW ,W ,W>Y GW ,W7W7W=W6W KZBZ I_CZ J[C_ MW /W>Z DZ .ZB^ C` 8\\>\\&X>Y =\\ AY HW :V MW GZFYNY N]AZ N" -"WCX _ FX0X ?X =\\?\\ >V 5b W;[>T F[=W J[=W J[=W J[=W LW ,W ,W ,W *ZBZ IW6W KZBZ GZBZ " -"GZBZ GZBZ GZBZ 1Z F[BZ GZB^ KZB^ KZB^ KZB^ A\\ =_CZ ?\\ 3l Al Al Al Al HV (^ BX (X NS (S ,Z .Y FW4W In GX:X ?^ 9_ (]FZ MX " -",VBV J[ISL\\ :V9XGX9^Fi )W )W MV BX 1X 3W #[H[ Et Mx MZC_ 1X GZD^ C[G\\ @Y 7^F] IXF] DX -X ,V 1V #X 4V<^IY5X*X'y G_D^&{!y NX &`B`+X/X'X -X -X6[#" -"w LX&X0X7_ N^E^$X &^E^$X2Y'^C^ =X 7^E^ B^ 8]7]4Y3Y DX @~U&W \"W ,W C\\HYNW JWNXG\\ H]EX F\\GXNW J]D[ JW +kMW MW6W MW ,W ,W=Y HW ,W7W7W=W6W K]H] IWNX" -"G\\ I\\GXNW MW /[E\\ Be 9[GXNW B^ 7\\>\\'XP @W8W 3~W :_GaKP @UGU ,P>P 'V&U+V6V KV&" -"U;]GZ JX*X,X*X,X*X,X*X,X*X,Y,Y,X4y7_D^&y Ny Ny Ny NX -X -X -X ,{\"X7_ N^E^ L^E^ L^E^ L^E^ L^E^ MV/V(dE^ N^E^ L^E^ L^E^ L^E^ BX \\ Av 6W :V MW FkL]$u LXGX 9p Hp EW6W A[ ?X6X LpN\\#" -"hKh)s JW<] Lu LWNm Hp 6` Bl K~W'x MX 1iEi HX CX0X ?X ;u X :V HW 3X=X )X\\ /c 8c 8c 8c 8c CV '\\ ?T %W U *T *W ,V DW4W Gj EW8W " -">\\ 5~P In LX -VBV Is 9V7g6qJZ *V )V LV BX 1X 3V !l Dt Mx Mt /X Gr ?m ?X 4r Hm BX -X &P 1P LX 3V 3X*X'w Cv%x My NX #x(X/X'X" -" -X -X4[%w LX&X0X5] Ls\"X $s\"X1Y(w ;X 5s ?\\ 7\\5\\5Y1Y EX @~U&W !V ,W BjLW JWMj Dn DjMW Hr JW )hLW MW6W MW ,W ,W;Y JW ,W7W7W=W6W In GWMj EjMW MW /p" -" ?d 8iLW B^ 6Z<[)Y:Y >Z @v 6W :V MW EiK]$t JYLZ 7n Fo EW6W A[ ?X5W LWNfM\\\"gKg'q IW<] Ks KWMk Fn 5` Aj J~W'x MX 1iEi HX CX0X ?X :s ;V 2\\ 6" -"^ HX +n Lz MR,R =X :V HW 1ZEZ %ZDZ 0~W :WNfM\\ @UGU !V%U,V6i/V%U9n JX*X,X*X,X*X,X*X,X*X,X*X-X3y5v%y Ny Ny Ny NX -X -X -X ," -"x NX5] Ls Hs Hs Hs Hs IR+R(WMs Js Hs Hs Hs @X R $V NU *U *U *U DW4W Fh DW8X ?\\ 4~ Hl KX -VBV Hp 8V5e4nGZ +W +W LV BX" -" 1X 3V j Ct Mx Mr -X Gq =j >Y 3p Gl AX -X 2X 3W 5X(X(u ?s$v Ky NX \"v'X/X'X -X -X3[&w LX&X0X5] Kq!X #p X0X(v :X 4p =\\ 7\\5\\6Y/Y FX @~U&W !V ,W " -" AhKW JWLh Bm ChLW Gq JW (eJW MW6W MW ,W ,W:Y KW ,W7W7W=W6W Hl FWLh ChLW MW /o >d 7gKW A\\ 5ZZ @v 6W :V MW DgI\\$s He 5l Dn EW6W @Y " -">W4X MWMeM\\!eIe%o HW<] Jq JWLi Dk 2_ @h J~Y(x MX 1iEi HX CX0X ?X 9q :V 1Z 4\\ GX *m Lz LP*P X X ?v 6W :V MW CeG[$r Fc 2h Am EW6W @Y ?X3W MWMdL\\ cGc#m GW;\\ Hm HWKg Ah /] ?f I~Y(x MX 1iEi HX CX0X ?X 7m 8V 0" -"X 2Z FX (j Kz AX :V HW -g Lh ,~W :WMdL\\ @UGU \"V$U-V5i0V$U7i HX(X.X(X.X(X.X(X.X(X.X(X/X2y1o\"y Ny Ny Ny NX -X -X -X ,t" -" JX4\\ Im Bm Bm Bm Bm %VHm Dm Bm Bm Bm =X eJW GeJW" -" GeJW GeJW ?X ;WJe 9X MW &Z =U W ,W *R &Q BW4W B` AW6W >[ /y Dd GX -VCV Af 5V2a.gBZ ,W -W KV CX 0X 4V " -" Kd @t Mx Km *X Ek 6d ;X .h Bh >X .X 1X 1W 7X(X(q 7j Np Ey NX Mm\"X/X'X -X -X1[(w LX&X0X4\\ Gi LX Ni LX/X$n 7X 0i 9Z 5[5[6Y-Y GX @~U&W V -W " -" >cIW JWIb k EW6W @Y ?" -"W2W MWK`I[ NaEa i EW;\\ Fi FWIc >e ,\\ =b G~Y(x MX 1iEi HX CX0X ?X 5i 6V /V 0X EX &f Iz AX :V /P;W *c Gb )~W :WK`I[ @UGU " -" #V#U.V4i1V#U6f FX(X.X(X.X(X.X(X.X(X.X(X/X2y/j Ny Ny Ny Ny NX -X -X -X ,p FX4\\ Gi >i >i >i >i $VEi @i >i >i >i ;X i0g ;i >i >i >i HW ,W ,W ,W #d BW6W Ef ;f ;f ;f ;f JUJe ;cIW FcIW FcIW FcIW ?X ;WIb 7X MW %Y =T X -X )P %P AW4W ?Z" -" >W6X ?Z ,w B` EX .VBV <] 1V0]*b?[ -W -W KV CW /X 4V I` >t Mx Hg 'X Bf 2` :X +d =b ;X .W 0X 1X 9X&X)m 0d Kj ?y NX Jg " -"NX/X'X -X -X0[)w LX&X0X3[ Dc IX Kf LX/Y!g 4X .e 7Z 5Z3Z7Y+Y HX @~U&W V -W =`GW JWG^ 7b 9^GW Ad CW \"YDW MW6W MW ,W ,W7Y NW ,W7W7W=W6W B` @WG^ 9" -"^GW MW (c 2] 3_GW @Z 3X:X*Y4Y @X ?v 6W :V MW ?_AW$WKb @^ +` 9g CW6W ?W ?X2X NWJ^GY K]B^ Ke CW:[ Dd CWG_ 9` 'Y ;^ F~[)x MX 1iEi HX CX0X ?X 2c " -"3V .T .V DX $b Gz AX :V /R>X &[ ?Z %~W :WJ^GY ?UGU #V +V +V 1b EX&X0X&X0X&X0X&X0X&X0Y'X1X1y,d Ky Ny Ny Ny NX -X -X " -"-X ,j @X3[ Dc 8c 8c 8c 8c !VBc ;e :e :e :e 9X Y BS .V,W#Z ;V -V 7W ;W EX ;\\ 6] " -"+Z 5\\ 5Z WGXBU FX=X E` \"W >] @WDY 3Z 2X C[ >T :[ KV /TAY " -" EWGXBU =UGU BT 6V +V +V ,Y ?\\ +[ 0[ 0[ 0[ 0[ KT=[ 2[ 0[ 0[ 0[ 7Z ;Y .Y .Y .Y .Y .Y -" -"Y2\\\"Z /\\ 1\\ 1\\ 1\\ CZ 3Z /Z /Z /Z /Z FVCZ 1Y .Y .Y .Y ,W :WDX 2W LW 7R #S" -" >W /W 8W :V \"W 5X )X &Z CW NV .W :W %W" -" @W :W -X -W :V MW LW FW ?W >W NW 0W =W 3S GV /XGZ " -" DW HUGU AT %T 'R JT " -" #T (X :W NX LW 7S =V /V 7W :V \"W" -" 4X'Q &Y %Z DW NV .W :W %W @W :W -W ,W :V MW " -" LW FW ?W >W NW 0W =W 3S GV /j CW HUGU @T " -" %T 'P HT \"Q 'W 9W NW KW " -" 7S =W 1W 7V :W \"V 2X)R &X #Z " -" EW NW /W :W %W @W :W -W ,X ;V NX LW FW ?W >W NW 0W =W " -" 3S GV /j CW HUGU @U &U " -" U \"P 'W 9W NW KV 6S " -" W NW 0W =W 3S GV /h " -" AW HUGU ?T %T NT " -" )X 9W X KV 6S W NW 0W =W 3S GV .f @W HUGU ?U &" -"U U *W 8W W JV " -" 6S ;V 3V 6V :W \"V .[5[ *Y Z " -" Ha (W :a W NW 0W =W " -" 3S GV +a >W HUGU >T %T " -" NT +X 8W !X (VIV 6S :V 5V 5U" -" 9W \"U +\\;] )X MZ Ia (W :a =Y %W ?W :W " -" /W )[ ?V #[ KW FW ?W >W NW 0W =W 3S GV 'Z ;W " -" HUGU >U &U U ,W 7W !" -"W 'VIV 6S :V 6W 6V 4V *_C` " -" )Y LZ Ja :a (P7Y $W ?W :W 0X (b GV +b JW FW ?W >W " -" NW 0W =W 3S GV 7W HUGU >U &U " -" U -X 7W \"X 'VJW " -" 6S 9V 7V 5U 3U 'x (Z KZ Ka :a " -" (R:Z $W ?W :W 0X (b GV +b JW FW ?W >W NW 0W =W 3S " -" GV 7W #U &U U " -" -X 7W \"X &UJW 6S 9W 9W " -" Bu ([ IZ La :a (T>[ $X ?W :W 1X &a GV +a " -" IW FW ?W >W NW 0W =W 3S GV 7W $V " -" 'V !V .X 6W #X %VLW " -" 5S 2p -a " -" 8XE] %Y >W :W 3Z $_ GV +_ GW FW ?W >W NW 0W =W " -" 3S GV 7W /QGW 2QGW ,QG" -"W 0Z 6W %Z %a 5S " -" 0l +a 8p +_ >W :W ;a !] G" -"V +] EW FW ?W >W NW 0W =W 3S GV 7W /` " -" 1` +` 7a 5W -a #` " -" >e '` " -" 7o *^ =W :W ;` KY GV +Y AW FW ?W >W NW 0W =W " -" 3S GV 7W /` 1` +` " -" 7` 4W -` \"_ " -" 8\\ #_ \"} 3n )^ =W :W ;` 9V " -" BW FW ?W >W NW 0W =W 'V 7W /_ " -" 0_ *_ 6` 4W -` !] " -" -] " -" } 3l '] W NW 0W =W " -" 'V 7W /^ /^ )^ " -" 5_ 3W -_ N[ " -" ,[ M} 2j &\\ ;W :W ;^ 7V BW " -" FW ?W >W NW 0W =W 7W -Y *Y " -" $Y 2^ 2W -^ LX " -" *X J} " -" /d #Z 9W :W ;\\ 5V BW FW ?W >W NW 0W =W " -" 7W " -" /\\ 0W HT " -" I} *[ NW 6W :W ;Z 3V BW FW ?W >W" -" NW 0W =W 7W " -" /Z .W " -" =} " -" " -" D" }; - - // Define a 40x38 'danger' color logo (used by cimg::dialog()). - const unsigned char logo40x38[4576] = { - 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, - 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, - 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, - 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0, - 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255, - 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189, - 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189, - 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123, - 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200, - 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0, - 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1, - 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189, - 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255, - 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189, - 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255,255, - 0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2,123, - 123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0,1,189, - 189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11,255,255, - 0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0,1,189,189, - 189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11,255,255,0,1, - 0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123,123,0,26,255, - 255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0,0,4,123,123, - 123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25,123,123,123,86, - 200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0}; - - //! Get/set default output stream for the \CImg library messages. - /** - \param file Desired output stream. Set to \c 0 to get the currently used output stream only. - \return Currently used output stream. - **/ - inline std::FILE* output(std::FILE *file) { - cimg::mutex(1); - static std::FILE *res = stderr; - if (file) res = file; - cimg::mutex(1,0); - return res; - } - - // Return number of available CPU cores. - inline unsigned int nb_cpus() { - unsigned int res = 1; -#if cimg_OS==2 - SYSTEM_INFO sysinfo; - GetSystemInfo(&sysinfo); - res = (unsigned int)sysinfo.dwNumberOfProcessors; -#else - res = (unsigned int)sysconf(_SC_NPROCESSORS_ONLN); -#endif - return res?res:1U; - } - - // Lock/unlock mutex for CImg multi-thread programming. - inline int mutex(const unsigned int n, const int lock_mode) { - switch (lock_mode) { - case 0 : cimg::Mutex_attr().unlock(n); return 0; - case 1 : cimg::Mutex_attr().lock(n); return 0; - default : return cimg::Mutex_attr().trylock(n); - } - } - - //! Display a warning message on the default output stream. - /** - \param format C-string containing the format of the message, as with std::printf(). - \note If configuration macro \c cimg_strict_warnings is set, this function throws a \c CImgWarningException instead. - \warning As the first argument is a format string, it is highly recommended to write - \code - cimg::warn("%s",warning_message); - \endcode - instead of - \code - cimg::warn(warning_message); - \endcode - if \c warning_message can be arbitrary, to prevent nasty memory access. - **/ - inline void warn(const char *const format, ...) { - if (cimg::exception_mode()>=1) { - char message[16384] = { 0 }; - std::va_list ap; - va_start(ap,format); - cimg_vsnprintf(message,sizeof(message),format,ap); - va_end(ap); -#ifdef cimg_strict_warnings - throw CImgWarningException(message); -#else - std::fprintf(cimg::output(),"\n%s[CImg] *** Warning ***%s%s",cimg::t_red,cimg::t_normal,message); -#endif - } - } - - // Execute an external system command. - /** - \param command C-string containing the command line to execute. - \param module_name Module name. - \return Status value of the executed command, whose meaning is OS-dependent. - \note This function is similar to std::system() - but it does not open an extra console windows - on Windows-based systems. - **/ - inline int system(const char *const command, const char *const module_name=0) { -#ifdef cimg_no_system_calls - return -1; -#else -#if cimg_OS==2 - PROCESS_INFORMATION pi; - STARTUPINFO si; - std::memset(&pi,0,sizeof(PROCESS_INFORMATION)); - std::memset(&si,0,sizeof(STARTUPINFO)); - GetStartupInfo(&si); - si.cb = sizeof(si); - si.wShowWindow = SW_HIDE; - si.dwFlags |= SW_HIDE | STARTF_USESHOWWINDOW; - const BOOL res = CreateProcess((LPCTSTR)module_name,(LPTSTR)command,0,0,FALSE,0,0,0,&si,&pi); - if (res) { - WaitForSingleObject(pi.hProcess, INFINITE); - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - return 0; - } else -#endif - return std::system(command); - return module_name?0:1; -#endif - } - - //! Return a reference to a temporary variable of type T. - template - inline T& temporary(const T&) { - static T temp; - return temp; - } - - //! Exchange values of variables \c a and \c b. - template - inline void swap(T& a, T& b) { T t = a; a = b; b = t; } - - //! Exchange values of variables (\c a1,\c a2) and (\c b1,\c b2). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2) { - cimg::swap(a1,b1); cimg::swap(a2,b2); - } - - //! Exchange values of variables (\c a1,\c a2,\c a3) and (\c b1,\c b2,\c b3). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3) { - cimg::swap(a1,b1,a2,b2); cimg::swap(a3,b3); - } - - //! Exchange values of variables (\c a1,\c a2,...,\c a4) and (\c b1,\c b2,...,\c b4). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4) { - cimg::swap(a1,b1,a2,b2,a3,b3); cimg::swap(a4,b4); - } - - //! Exchange values of variables (\c a1,\c a2,...,\c a5) and (\c b1,\c b2,...,\c b5). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5) { - cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4); cimg::swap(a5,b5); - } - - //! Exchange values of variables (\c a1,\c a2,...,\c a6) and (\c b1,\c b2,...,\c b6). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6) { - cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5); cimg::swap(a6,b6); - } - - //! Exchange values of variables (\c a1,\c a2,...,\c a7) and (\c b1,\c b2,...,\c b7). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, - T7& a7, T7& b7) { - cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6); cimg::swap(a7,b7); - } - - //! Exchange values of variables (\c a1,\c a2,...,\c a8) and (\c b1,\c b2,...,\c b8). - template - inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, - T7& a7, T7& b7, T8& a8, T8& b8) { - cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7); cimg::swap(a8,b8); - } - - //! Return the endianness of the current architecture. - /** - \return \c false for Little Endian or \c true for Big Endian. - **/ - inline bool endianness() { - const int x = 1; - return ((unsigned char*)&x)[0]?false:true; - } - - //! Reverse endianness of all elements in a memory buffer. - /** - \param[in,out] buffer Memory buffer whose endianness must be reversed. - \param size Number of buffer elements to reverse. - **/ - template - inline void invert_endianness(T* const buffer, const unsigned long size) { - if (size) switch (sizeof(T)) { - case 1 : break; - case 2 : { for (unsigned short *ptr = (unsigned short*)buffer+size; ptr>(unsigned short*)buffer; ) { - const unsigned short val = *(--ptr); - *ptr = (unsigned short)((val>>8)|((val<<8))); - } - } break; - case 4 : { for (unsigned int *ptr = (unsigned int*)buffer+size; ptr>(unsigned int*)buffer; ) { - const unsigned int val = *(--ptr); - *ptr = (val>>24)|((val>>8)&0xff00)|((val<<8)&0xff0000)|(val<<24); - } - } break; - default : { for (T* ptr = buffer+size; ptr>buffer; ) { - unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T); - for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe)); - } - } - } - } - - //! Reverse endianness of a single variable. - /** - \param[in,out] a Variable to reverse. - \return Reference to reversed variable. - **/ - template - inline T& invert_endianness(T& a) { - invert_endianness(&a,1); - return a; - } - - // Conversion functions to get more precision when trying to store unsigned ints values as floats. - inline unsigned int float2uint(const float f) { - int tmp = 0; - std::memcpy(&tmp,&f,sizeof(float)); - if (tmp>=0) return (unsigned int)f; - unsigned int u; - std::memcpy(&u,&f,sizeof(float)); // use memcpy instead of assignment to avoid undesired optimizations by C++-compiler. - return ((u)<<1)>>1; // set sign bit to 0. - } - - inline float uint2float(const unsigned int u) { - if (u<(1U<<19)) return (float)u; // Consider safe storage of unsigned int as floats until 19bits (i.e 524287). - float f; - const unsigned int v = u|(1U<<(8*sizeof(unsigned int)-1)); // set sign bit to 1. - std::memcpy(&f,&v,sizeof(float)); // use memcpy instead of simple assignment to avoid undesired optimizations by C++-compiler. - return f; - } - - //! Return the value of a system timer, with a millisecond precision. - /** - \note The timer does not necessarily starts from \c 0. - **/ - inline unsigned long time() { -#if cimg_OS==1 - struct timeval st_time; - gettimeofday(&st_time,0); - return (unsigned long)(st_time.tv_usec/1000 + st_time.tv_sec*1000); -#elif cimg_OS==2 - SYSTEMTIME st_time; - GetSystemTime(&st_time); - return (unsigned long)(st_time.wMilliseconds + 1000*(st_time.wSecond + 60*(st_time.wMinute + 60*st_time.wHour))); -#else - return 0; -#endif - } - - // Implement a tic/toc mechanism to display elapsed time of algorithms. - inline unsigned long tictoc(const bool is_tic); - - //! Start tic/toc timer for time measurement between code instructions. - /** - \return Current value of the timer (same value as time()). - **/ - inline unsigned long tic() { - return cimg::tictoc(true); - } - - //! End tic/toc timer and displays elapsed time from last call to tic(). - /** - \return Time elapsed (in ms) since last call to tic(). - **/ - inline unsigned long toc() { - return cimg::tictoc(false); - } - - //! Sleep for a given numbers of milliseconds. - /** - \param milliseconds Number of milliseconds to wait for. - \note This function frees the CPU ressources during the sleeping time. - It can be used to temporize your program properly, without wasting CPU time. - **/ - inline void sleep(const unsigned int milliseconds) { -#if cimg_OS==1 - struct timespec tv; - tv.tv_sec = milliseconds/1000; - tv.tv_nsec = (milliseconds%1000)*1000000; - nanosleep(&tv,0); -#elif cimg_OS==2 - Sleep(milliseconds); -#endif - } - - inline unsigned int _wait(const unsigned int milliseconds, unsigned long& timer) { - if (!timer) timer = cimg::time(); - const unsigned long current_time = cimg::time(); - if (current_time>=timer+milliseconds) { timer = current_time; return 0; } - const unsigned long time_diff = timer + milliseconds - current_time; - timer = current_time + time_diff; - cimg::sleep(time_diff); - return (unsigned int)time_diff; - } - - //! Wait for a given number of milliseconds since the last call to wait(). - /** - \param milliseconds Number of milliseconds to wait for. - \return Number of milliseconds elapsed since the last call to wait(). - \note Same as sleep() with a waiting time computed with regard to the last call - of wait(). It may be used to temporize your program properly, without wasting CPU time. - **/ - inline unsigned int wait(const unsigned int milliseconds) { - cimg::mutex(3); - static unsigned long timer = 0; - if (!timer) timer = cimg::time(); - cimg::mutex(3,0); - return _wait(milliseconds,timer); - } - - // Random number generators. - // CImg may use its own Random Number Generator (RNG) if configuration macro 'cimg_use_rng' is set. - // Use it for instance when you have to deal with concurrent threads trying to call std::srand() - // at the same time! -#ifdef cimg_use_rng - -#include - - // Use a custom RNG. - inline unsigned int _rand(const unsigned int seed=0, const bool set_seed=false) { - static unsigned long next = 1; - cimg::mutex(4); - if (set_seed) next = (unsigned long)seed; - next = next*1103515245 + 12345 + rand(); - cimg::mutex(4,0); - return (unsigned int)((next>>16)&0x7FFF); - } - - inline void srand() { - const unsigned int t = (unsigned int)cimg::time(); -#if cimg_OS==1 - cimg::_rand(t+(unsigned int)getpid(),true); -#elif cimg_OS==2 - cimg::_rand(t+(unsigned int)_getpid(),true); -#else - cimg::_rand(t,true); -#endif - } - - inline void srand(const unsigned int seed) { - _rand(seed,true); - } - - inline double rand() { - return cimg::_rand()/32767.; - } - -#else - - // Use the system RNG. - inline void srand() { - const unsigned int t = (unsigned int)cimg::time(); -#if cimg_OS==1 - std::srand(t+(unsigned int)getpid()); -#elif cimg_OS==2 - std::srand(t+(unsigned int)_getpid()); -#else - std::srand(t); -#endif - } - - inline void srand(const unsigned int seed) { - std::srand(seed); - } - - //! Return a random variable between [0,1] with respect to an uniform distribution. - /** - **/ - inline double rand() { - return (double)std::rand()/RAND_MAX; - } -#endif - - //! Return a random variable between [-1,1] with respect to an uniform distribution. - /** - **/ - inline double crand() { - return 1-2*cimg::rand(); - } - - //! Return a random variable following a gaussian distribution and a standard deviation of 1. - /** - **/ - inline double grand() { - double x1, w; - do { - const double x2 = 2*cimg::rand() - 1.0; - x1 = 2*cimg::rand()-1.0; - w = x1*x1 + x2*x2; - } while (w<=0 || w>=1.0); - return x1*std::sqrt((-2*std::log(w))/w); - } - - //! Return a random variable following a Poisson distribution of parameter z. - /** - **/ - inline unsigned int prand(const double z) { - if (z<=1.0e-10) return 0; - if (z>100) return (unsigned int)((std::sqrt(z) * cimg::grand()) + z); - unsigned int k = 0; - const double y = std::exp(-z); - for (double s = 1.0; s>=y; ++k) s*=cimg::rand(); - return k-1; - } - - //! Bitwise-rotate value on the left. - template - inline T rol(const T a, const unsigned int n=1) { - return n?(T)((a<>((sizeof(T)<<3)-n))):a; - } - - inline float rol(const float a, const unsigned int n=1) { - return (float)rol((int)a,n); - } - - inline double rol(const double a, const unsigned int n=1) { - return (double)rol((long)a,n); - } - - //! Bitwise-rotate value on the right. - template - inline T ror(const T a, const unsigned int n=1) { - return n?(T)((a>>n)|(a<<((sizeof(T)<<3)-n))):a; - } - - inline float ror(const float a, const unsigned int n=1) { - return (float)ror((int)a,n); - } - - inline double ror(const double a, const unsigned int n=1) { - return (double)ror((long)a,n); - } - - //! Return absolute value of a value. - template - inline T abs(const T a) { - return a>=0?a:-a; - } - inline bool abs(const bool a) { - return a; - } - inline unsigned char abs(const unsigned char a) { - return a; - } - inline unsigned short abs(const unsigned short a) { - return a; - } - inline unsigned int abs(const unsigned int a) { - return a; - } - inline unsigned long abs(const unsigned long a) { - return a; - } - inline double abs(const double a) { - return std::fabs(a); - } - inline float abs(const float a) { - return (float)std::fabs((double)a); - } - inline int abs(const int a) { - return std::abs(a); - } - - //! Return square of a value. - template - inline T sqr(const T val) { - return val*val; - } - - //! Return 1 + log_10(x) of a value \c x. - inline int xln(const int x) { - return x>0?(int)(1+std::log10((double)x)):1; - } - - //! Return the minimum between two values. - template - inline typename cimg::superset::type min(const t1& a, const t2& b) { - typedef typename cimg::superset::type t1t2; - return (t1t2)(a<=b?a:b); - } - - //! Return the minimum between three values. - template - inline typename cimg::superset2::type min(const t1& a, const t2& b, const t3& c) { - typedef typename cimg::superset2::type t1t2t3; - return (t1t2t3)cimg::min(cimg::min(a,b),c); - } - - //! Return the minimum between four values. - template - inline typename cimg::superset3::type min(const t1& a, const t2& b, const t3& c, const t4& d) { - typedef typename cimg::superset3::type t1t2t3t4; - return (t1t2t3t4)cimg::min(cimg::min(a,b,c),d); - } - - //! Return the maximum between two values. - template - inline typename cimg::superset::type max(const t1& a, const t2& b) { - typedef typename cimg::superset::type t1t2; - return (t1t2)(a>=b?a:b); - } - - //! Return the maximum between three values. - template - inline typename cimg::superset2::type max(const t1& a, const t2& b, const t3& c) { - typedef typename cimg::superset2::type t1t2t3; - return (t1t2t3)cimg::max(cimg::max(a,b),c); - } - - //! Return the maximum between four values. - template - inline typename cimg::superset3::type max(const t1& a, const t2& b, const t3& c, const t4& d) { - typedef typename cimg::superset3::type t1t2t3t4; - return (t1t2t3t4)cimg::max(cimg::max(a,b,c),d); - } - - //! Return the sign of a value. - template - inline T sign(const T x) { - return (x<0)?(T)(-1):(x==0?(T)0:(T)1); - } - - //! Return the nearest power of 2 higher than given value. - template - inline unsigned long nearest_pow2(const T x) { - unsigned long i = 1; - while (x>i) i<<=1; - return i; - } - - //! Return the sinc of a given value. - inline double sinc(const double x) { - return x?std::sin(x)/x:1; - } - - //! Return the modulo of a value. - /** - \param x Input value. - \param m Modulo value. - \note This modulo function accepts negative and floating-points modulo numbers, as well as variables of any type. - **/ - template - inline T mod(const T& x, const T& m) { - const double dx = (double)x, dm = (double)m; - return (T)(dx - dm * std::floor(dx / dm)); - } - inline int mod(const bool x, const bool m) { - return m?(x?1:0):0; - } - inline int mod(const char x, const char m) { - return x>=0?x%m:(x%m?m+x%m:0); - } - inline int mod(const short x, const short m) { - return x>=0?x%m:(x%m?m+x%m:0); - } - inline int mod(const int x, const int m) { - return x>=0?x%m:(x%m?m+x%m:0); - } - inline int mod(const long x, const long m) { - return x>=0?x%m:(x%m?m+x%m:0); - } - inline int mod(const unsigned char x, const unsigned char m) { - return x%m; - } - inline int mod(const unsigned short x, const unsigned short m) { - return x%m; - } - inline int mod(const unsigned int x, const unsigned int m) { - return x%m; - } - inline int mod(const unsigned long x, const unsigned long m) { - return x%m; - } - - //! Return the min-mod of two values. - /** - \note minmod(\p a,\p b) is defined to be: - - minmod(\p a,\p b) = min(\p a,\p b), if \p a and \p b have the same sign. - - minmod(\p a,\p b) = 0, if \p a and \p b have different signs. - **/ - template - inline T minmod(const T a, const T b) { - return a*b<=0?0:(a>0?(a - inline T round(const T x, const double y=1, const int rounding_type=0) { - if (y<=0) return x; - const double sx = (double)x/y, floor = std::floor(sx), delta = sx - floor; - return (T)(y*(rounding_type<0?floor:rounding_type>0?std::ceil(sx):delta<0.5?floor:std::ceil(sx))); - } - - inline double _pythagore(double a, double b) { - const double absa = cimg::abs(a), absb = cimg::abs(b); - if (absa>absb) { const double tmp = absb/absa; return absa*std::sqrt(1.0+tmp*tmp); } - else { const double tmp = absa/absb; return absb==0?0:absb*std::sqrt(1.0+tmp*tmp); } - } - - inline bool _is_self_expr(const char *expression) { - if (!expression || *expression=='>' || *expression=='<') return false; - for (const char *s = expression; *s; ++s) - if ((*s=='i' || *s=='j') && (s[1]=='(' || s[1]=='[')) return true; - return false; - } - - //! Convert ascii character to lower case. - inline char uncase(const char x) { - return (char)((x<'A'||x>'Z')?x:x-'A'+'a'); - } - - //! Convert C-string to lower case. - inline void uncase(char *const str) { - if (str) for (char *ptr = str; *ptr; ++ptr) *ptr = uncase(*ptr); - } - - //! Read value in a C-string. - /** - \param str C-string containing the float value to read. - \return Read value. - \note Same as std::atof() extended to manage the retrieval of fractions from C-strings, as in "1/2". - **/ - inline double atof(const char *const str) { - double x = 0, y = 1; - if (!str) return 0; else { std::sscanf(str,"%lf/%lf",&x,&y); return x/y; } - } - - //! Compare the first \p l characters of two C-strings, ignoring the case. - /** - \param str1 C-string. - \param str2 C-string. - \param l Number of characters to compare. - \return \c 0 if the two strings are equal, something else otherwise. - \note This function has to be defined since it is not provided by all C++-compilers (not ANSI). - **/ - inline int strncasecmp(const char *const str1, const char *const str2, const int l) { - if (!l) return 0; - if (!str1) return str2?-1:0; - const char *nstr1 = str1, *nstr2 = str2; - int k, diff = 0; for (k = 0; kp && str[q]==delimiter; ) { --q; if (!is_iterative) break; } - } - const int n = q - p + 1; - if (n!=l) { std::memmove(str,str+p,n); str[n] = 0; return true; } - return false; - } - - //! Replace escape sequences in C-strings by their binary ascii values. - /** - \param[in,out] str C-string to work with (modified at output). - **/ - inline void strunescape(char *const str) { -#define cimg_strunescape(ci,co) case ci: *nd = co; ++ns; break; - unsigned int val = 0; - for (char *ns = str, *nd = str; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) { - cimg_strunescape('n','\n'); - cimg_strunescape('t','\t'); - cimg_strunescape('v','\v'); - cimg_strunescape('b','\b'); - cimg_strunescape('r','\r'); - cimg_strunescape('f','\f'); - cimg_strunescape('a','\a'); - cimg_strunescape('\\','\\'); - cimg_strunescape('\?','\?'); - cimg_strunescape('\'','\''); - cimg_strunescape('\"','\"'); - case 0 : *nd = 0; break; - case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : - std::sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; - *nd = val; break; - case 'x': - std::sscanf(++ns,"%x",&val); while ((*ns>='0' && *ns<='7') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; - *nd = val; break; - default : *nd = *(ns++); - } else *nd = *(ns++); - } - - // Return a temporary string describing the size of a memory buffer. - inline const char *strbuffersize(const unsigned long size) { - static char res[256] = { 0 }; - cimg::mutex(5); - if (size<1024LU) cimg_snprintf(res,sizeof(res),"%lu byte%s",size,size>1?"s":""); - else if (size<1024*1024LU) { const float nsize = size/1024.0f; cimg_snprintf(res,sizeof(res),"%.1f Kio",nsize); } - else if (size<1024*1024*1024LU) { const float nsize = size/(1024*1024.0f); cimg_snprintf(res,sizeof(res),"%.1f Mio",nsize); } - else { const float nsize = size/(1024*1024*1024.0f); cimg_snprintf(res,sizeof(res),"%.1f Gio",nsize); } - cimg::mutex(5,0); - return res; - } - - // Return string that identifies the running OS. - inline const char *stros() { -#if defined(linux) || defined(__linux) || defined(__linux__) - const char *const str = "Linux"; -#elif defined(sun) || defined(__sun) - const char *const str = "Sun OS"; -#elif defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined (__DragonFly__) - const char *const str = "BSD"; -#elif defined(sgi) || defined(__sgi) - const char *const str = "Irix"; -#elif defined(__MACOSX__) || defined(__APPLE__) - const char *const str = "Mac OS"; -#elif defined(unix) || defined(__unix) || defined(__unix__) - const char *const str = "Generic Unix"; -#elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) - const char *const str = "Windows"; -#else - const char - *const _str1 = std::getenv("OSTYPE"), - *const _str2 = _str1?_str1:std::getenv("OS"), - *const str = _str2?_str2:"Unknown OS"; -#endif - return str; - } - - //! Return the basename of a filename. - inline const char* basename(const char *const str) { - const char *p = 0; - for (const char *np = str; np>=str && (p=np); np = std::strchr(np,cimg_file_separator)+1) {} - return p; - } - - // Return a random filename. - inline const char* filenamerand() { - cimg::mutex(6); - static char randomid[9] = { 0 }; - cimg::srand(); - for (unsigned int k = 0; k<8; ++k) { - const int v = (int)std::rand()%3; - randomid[k] = (char)(v==0?('0'+(std::rand()%10)):(v==1?('a'+(std::rand()%26)):('A'+(std::rand()%26)))); - } - cimg::mutex(6,0); - return randomid; - } - - // Convert filename as a Windows-style filename (short path name). - inline void winformat_string(char *const str) { - if (str && *str) { -#if cimg_OS==2 - char *const nstr = new char[MAX_PATH]; - if (GetShortPathNameA(str,nstr,MAX_PATH)) std::strcpy(str,nstr); -#endif - } - } - - //! Open a file. - /** - \param path Path of the filename to open. - \param mode C-string describing the opening mode. - \return Opened file. - \note Same as std::fopen() but throw a \c CImgIOException when - the specified file cannot be opened, instead of returning \c 0. - **/ - inline std::FILE *fopen(const char *const path, const char *const mode) { - if (!path) - throw CImgArgumentException("cimg::fopen(): Specified file path is (null)."); - if (!mode) - throw CImgArgumentException("cimg::fopen(): File '%s', specified mode is (null).", - path); - std::FILE *res = 0; - if (*path=='-' && (!path[1] || path[1]=='.')) { - res = (*mode=='r')?stdin:stdout; -#if cimg_OS==2 - if (*mode && mode[1]=='b') { // Force stdin/stdout to be in binary mode. - if (_setmode(_fileno(res),0x8000)==-1) res = 0; - } -#endif - } else res = std::fopen(path,mode); - if (!res) throw CImgIOException("cimg::fopen(): Failed to open file '%s' with mode '%s'.", - path,mode); - return res; - } - - //! Close a file. - /** - \param file File to close. - \return \c 0 if file has been closed properly, something else otherwise. - \note Same as std::fclose() but display a warning message if - the file has not been closed properly. - **/ - inline int fclose(std::FILE *file) { - if (!file) warn("cimg::fclose(): Specified file is (null)."); - if (!file || file==stdin || file==stdout) return 0; - const int errn = std::fclose(file); - if (errn!=0) warn("cimg::fclose(): Error code %d returned during file closing.", - errn); - return errn; - } - - //! Get/set path to store temporary files. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path where temporary files can be saved. - **/ - inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false) { -#define _cimg_test_temporary_path(p) \ - if (!path_found) { \ - cimg_snprintf(s_path,1024,"%s",p); \ - cimg_snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,cimg_file_separator,filetmp); \ - if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } \ - } - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - char tmp[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file = 0; - cimg_snprintf(filetmp,sizeof(filetmp),"%s.tmp",cimg::filenamerand()); - char *tmpPath = std::getenv("TMP"); - if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } - if (tmpPath) _cimg_test_temporary_path(tmpPath); -#if cimg_OS==2 - _cimg_test_temporary_path("C:\\WINNT\\Temp"); - _cimg_test_temporary_path("C:\\WINDOWS\\Temp"); - _cimg_test_temporary_path("C:\\Temp"); - _cimg_test_temporary_path("C:"); - _cimg_test_temporary_path("D:\\WINNT\\Temp"); - _cimg_test_temporary_path("D:\\WINDOWS\\Temp"); - _cimg_test_temporary_path("D:\\Temp"); - _cimg_test_temporary_path("D:"); -#else - _cimg_test_temporary_path("/tmp"); - _cimg_test_temporary_path("/var/tmp"); -#endif - if (!path_found) { - *s_path = 0; - std::strncpy(tmp,filetmp,sizeof(tmp)-1); - if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } - } - if (!path_found) { - cimg::mutex(7,0); - throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); - } - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the Program Files/ directory (Windows only). - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the program files. - **/ -#if cimg_OS==2 - inline const char* programfiles_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[MAX_PATH]; - std::memset(s_path,0,MAX_PATH); - // Note: in the following line, 0x26 = CSIDL_PROGRAM_FILES (not defined on every compiler). -#if !defined(__INTEL_COMPILER) - if (!SHGetSpecialFolderPathA(0,s_path,0x0026,false)) { - const char *const pfPath = std::getenv("PROGRAMFILES"); - if (pfPath) std::strncpy(s_path,pfPath,MAX_PATH-1); - else std::strcpy(s_path,"C:\\PROGRA~1"); - } -#else - std::strcpy(s_path,"C:\\PROGRA~1"); -#endif - } - cimg::mutex(7,0); - return s_path; - } -#endif - - //! Get/set path to the ImageMagick's \c convert binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c convert binary. - **/ - inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\convert.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%.2d-\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%d-Q\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%d\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%.2d-\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%d-Q\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%d\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%.2d-\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%d-Q\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%d\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"convert.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./convert"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"convert"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the GraphicsMagick's \c gm binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gm binary. - **/ - inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\gm.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%.2d-\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%d-Q\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%d\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%.2d-\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%d-Q\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%d\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"C:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%.2d-\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%d-Q\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%d\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,sizeof(s_path),"D:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gm.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gm"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gm"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the XMedcon's \c medcon binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c medcon binary. - **/ - inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\medcon.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\XMedCon\\bin\\medcon.bat",pf_path); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) { - cimg_snprintf(s_path,sizeof(s_path),"%s\\XMedCon\\bin\\medcon.exe",pf_path); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"medcon.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./medcon"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"medcon"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the FFMPEG's \c ffmpeg binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c ffmpeg binary. - **/ - inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\ffmpeg.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"ffmpeg.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./ffmpeg"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"ffmpeg"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c gzip binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gzip binary. - **/ - inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\gzip.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gzip.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gzip"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gzip"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c gzip binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gunzip binary. - **/ - inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\gunzip.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gunzip.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gunzip"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gunzip"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c dcraw binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c dcraw binary. - **/ - inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\dcraw.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"dcraw.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./dcraw"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"dcraw"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c wget binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c wget binary. - **/ - inline const char *wget_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\wget.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"wget.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./wget"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"wget"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c curl binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c curl binary. - **/ - inline const char *curl_path(const char *const user_path=0, const bool reinit_path=false) { - static char *s_path = 0; - cimg::mutex(7); - if (reinit_path) { delete[] s_path; s_path = 0; } - if (user_path) { - if (!s_path) s_path = new char[1024]; - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path = new char[1024]; - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\curl.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"curl.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./curl"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"curl"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Split filename into two C-strings \c body and \c extension. - inline const char *split_filename(const char *const filename, char *const body=0) { - if (!filename) { if (body) *body = 0; return 0; } - const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.')+1) {} - if (p==filename) { - if (body) std::strcpy(body,filename); - return filename + std::strlen(filename); - } - const unsigned int l = (unsigned int)(p - filename - 1); - if (body) { std::memcpy(body,filename,l); body[l] = 0; } - return p; - } - - //! Generate a numbered version of a filename. - inline char* number_filename(const char *const filename, const int number, const unsigned int digits, char *const str) { - if (!filename) { if (str) *str = 0; return 0; } - char format[1024] = { 0 }, body[1024] = { 0 }; - const char *const ext = cimg::split_filename(filename,body); - if (*ext) cimg_snprintf(format,sizeof(format),"%%s_%%.%ud.%%s",digits); - else cimg_snprintf(format,sizeof(format),"%%s_%%.%ud",digits); - std::sprintf(str,format,body,number,ext); - return str; - } - - //! Try to guess format from an image file. - /** - \param file Input file (can be \c 0 if \c filename is set). - \param filename Filename, as a C-string (can be \c 0 if \c file is set). - \return C-string containing the guessed file format, or \c 0 if nothing has been guessed. - **/ - inline const char *file_type(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); - static const char - *const _pnm = "pnm", - *const _pfm = "pfm", - *const _bmp = "bmp", - *const _gif = "gif", - *const _jpg = "jpg", - *const _off = "off", - *const _pan = "pan", - *const _png = "png", - *const _tif = "tif", - *const _inr = "inr", - *const _dcm = "dcm"; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - const char *f_type = 0, *head; - char header[2048] = { 0 }, item[1024] = { 0 }; - const unsigned char *const uheader = (unsigned char*)header; - int err; char cerr; - const unsigned int siz = (unsigned int)std::fread(header,2048,1,nfile); // Read first 2048 bytes. - if (!file) cimg::fclose(nfile); - - if (!std::strncmp(header,"OFF\n",4)) f_type = _off; // Check for OFF format. - else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; // Check for INRIMAGE format. - else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; // Check for PANDORE format. - else if (!std::strncmp(header+128,"DICM",4)) f_type = _dcm; // Check for DICOM format. - else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; // Check for JPEG format. - else if (header[0]=='B' && header[1]=='M') f_type = _bmp; // Check for BMP format. - else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && // Check for GIF format. - (header[4]=='7' || header[4]=='9')) f_type = _gif; - else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && // Check for PNG format. - uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; - else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; // Check for TIFF format. - else { // Check for PNM or PFM format. - head = header; - while (headstd::fread() but may display warning message if all elements could not be read. - **/ - template - inline int fread(T *const ptr, const unsigned long nmemb, std::FILE *stream) { - if (!ptr || nmemb<=0 || !stream) - throw CImgArgumentException("cimg::fread(): Invalid reading request of %u %s%s from file %p to buffer %p.", - nmemb,cimg::type::string(),nmemb>1?"s":"",stream,ptr); - - const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); - unsigned long to_read = nmemb, al_read = 0, l_to_read = 0, l_al_read = 0; - do { - l_to_read = (to_read*sizeof(T))0); - if (to_read>0) - warn("cimg::fread(): Only %u/%u elements could be read from file.", - al_read,nmemb); - return al_read; - } - - //! Write data to file. - /** - \param ptr Pointer to memory buffer containing the binary data to write on file. - \param nmemb Number of elements to write. - \param[out] stream File to write data on. - \return Number of written elements. - \note Similar to std::fwrite but may display warning messages if all elements could not be written. - **/ - template - inline int fwrite(const T *ptr, const unsigned long nmemb, std::FILE *stream) { - if (!ptr || !stream) - throw CImgArgumentException("cimg::fwrite(): Invalid writing request of %u %s%s from buffer %p to file %p.", - nmemb,cimg::type::string(),nmemb>1?"s":"",ptr,stream); - if (nmemb<=0) return 0; - const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); - unsigned long to_write = nmemb, al_write = 0, l_to_write = 0, l_al_write = 0; - do { - l_to_write = (to_write*sizeof(T))0); - if (to_write>0) - warn("cimg::fwrite(): Only %u/%u elements could be written in file.", - al_write,nmemb); - return al_write; - } - - //! Create an empty file. - /** - \param file Input file (can be \c 0 if \c filename is set). - \param filename Filename, as a C-string (can be \c 0 if \c file is set). - **/ - inline void fempty(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - if (!file) cimg::fclose(nfile); - } - - //! Load file from network as a local temporary file. - /** - \param filename Filename, as a C-string. - \param[out] filename_local C-string containing the path to a local copy of \c filename. - \return Value of \c filename_local. - \note Use external binaries \c wget or \c curl to perform. You must have one of these tools installed - to be able to use this function. - **/ - inline char *load_network_external(const char *const filename, char *const filename_local) { - if (!filename) - throw CImgArgumentException("cimg::load_network_external(): Specified filename is (null)."); - if (!filename_local) - throw CImgArgumentException("cimg::load_network_external(): Specified destination string is (null)."); - const char *const _ext = cimg::split_filename(filename), *const ext = (*_ext && _ext>filename)?_ext-1:_ext; - char command[1024] = { 0 }; - std::FILE *file = 0; - *filename_local = 0; - do { - cimg_snprintf(filename_local,512,"%s%c%s%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); - if ((file=std::fopen(filename_local,"rb"))!=0) cimg::fclose(file); - } while (file); - - // Try with 'curl' first. - cimg_snprintf(command,sizeof(command),"%s -f --silent --compressed -o \"%s\" \"%s\"", - cimg::curl_path(),filename_local,filename); - cimg::system(command); - if (!(file = std::fopen(filename_local,"rb"))) { - - // Try with 'wget' else. - cimg_snprintf(command,sizeof(command),"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", - cimg::wget_path(),filename_local,filename); - cimg::system(command); - if (!(file = std::fopen(filename_local,"rb"))) - throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external tools 'wget' or 'curl'.",filename); - cimg::fclose(file); - - // Try gunzip it. - cimg_snprintf(command,sizeof(command),"%s.gz",filename_local); - std::rename(filename_local,command); - cimg_snprintf(command,sizeof(command),"%s --quiet \"%s.gz\"", - gunzip_path(),filename_local); - cimg::system(command); - file = std::fopen(filename_local,"rb"); - if (!file) { - cimg_snprintf(command,sizeof(command),"%s.gz",filename_local); - std::rename(command,filename_local); - file = std::fopen(filename_local,"rb"); - } - } - std::fseek(file,0,SEEK_END); // Check if file size is 0. - if (std::ftell(file)<=0) - throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external commands 'wget' or 'curl'.",filename); - cimg::fclose(file); - return filename_local; - } - - //! Return options specified on the command line. - inline const char* option(const char *const name, const int argc, const char *const *const argv, - const char *const defaut, const char *const usage, const bool reset_static) { - static bool first = true, visu = false; - if (reset_static) { first = true; return 0; } - const char *res = 0; - if (first) { - first = false; - visu = cimg::option("-h",argc,argv,(char*)0,(char*)0,false)!=0; - visu |= cimg::option("-help",argc,argv,(char*)0,(char*)0,false)!=0; - visu |= cimg::option("--help",argc,argv,(char*)0,(char*)0,false)!=0; - } - if (!name && visu) { - if (usage) { - std::fprintf(cimg::output(),"\n %s%s%s",cimg::t_red,cimg::basename(argv[0]),cimg::t_normal); - std::fprintf(cimg::output(),": %s",usage); - std::fprintf(cimg::output()," (%s, %s)\n\n",__DATE__,__TIME__); - } - if (defaut) std::fprintf(cimg::output(),"%s\n",defaut); - } - if (name) { - if (argc>0) { - int k = 0; - while (k Operating System: %s%-13s%s %s('cimg_OS'=%d)%s\n", - cimg::t_bold, - cimg_OS==1?"Unix":(cimg_OS==2?"Windows":"Unknow"), - cimg::t_normal,cimg::t_green, - cimg_OS, - cimg::t_normal); - - std::fprintf(cimg::output()," > CPU endianness: %s%s Endian%s\n", - cimg::t_bold, - cimg::endianness()?"Big":"Little", - cimg::t_normal); - - std::fprintf(cimg::output()," > Verbosity mode: %s%-13s%s %s('cimg_verbosity'=%d)%s\n", - cimg::t_bold, - cimg_verbosity==0?"Quiet":(cimg_verbosity==1?"Console":(cimg_verbosity==2?"Dialog":(cimg_verbosity==3?"Console+Warnings":"Dialog+Warnings"))), - cimg::t_normal,cimg::t_green, - cimg_verbosity, - cimg::t_normal); - - std::fprintf(cimg::output()," > Stricts warnings: %s%-13s%s %s('cimg_strict_warnings' %s)%s\n", - cimg::t_bold, -#ifdef cimg_strict_warnings - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using VT100 messages: %s%-13s%s %s('cimg_use_vt100' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_vt100 - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Display type: %s%-13s%s %s('cimg_display'=%d)%s\n", - cimg::t_bold, - cimg_display==0?"No display":cimg_display==1?"X11":cimg_display==2?"Windows GDI":"Unknown", - cimg::t_normal,cimg::t_green, - cimg_display, - cimg::t_normal); - -#if cimg_display==1 - std::fprintf(cimg::output()," > Using XShm for X11: %s%-13s%s %s('cimg_use_xshm' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_xshm - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using XRand for X11: %s%-13s%s %s('cimg_use_xrandr' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_xrandr - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); -#endif - std::fprintf(cimg::output()," > Using OpenMP: %s%-13s%s %s('cimg_use_openmp' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_openmp - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - std::fprintf(cimg::output()," > Using PNG library: %s%-13s%s %s('cimg_use_png' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_png - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - std::fprintf(cimg::output()," > Using JPEG library: %s%-13s%s %s('cimg_use_jpeg' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_jpeg - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using TIFF library: %s%-13s%s %s('cimg_use_tiff' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_tiff - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using Magick++ library: %s%-13s%s %s('cimg_use_magick' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_magick - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using FFTW3 library: %s%-13s%s %s('cimg_use_fftw3' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_fftw3 - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - std::fprintf(cimg::output()," > Using LAPACK library: %s%-13s%s %s('cimg_use_lapack' %s)%s\n", - cimg::t_bold, -#ifdef cimg_use_lapack - "Yes",cimg::t_normal,cimg::t_green,"defined", -#else - "No",cimg::t_normal,cimg::t_green,"undefined", -#endif - cimg::t_normal); - - cimg_snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::imagemagick_path()); - std::fprintf(cimg::output()," > Path of ImageMagick: %s%-13s%s\n", - cimg::t_bold, - tmp, - cimg::t_normal); - - cimg_snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::graphicsmagick_path()); - std::fprintf(cimg::output()," > Path of GraphicsMagick: %s%-13s%s\n", - cimg::t_bold, - tmp, - cimg::t_normal); - - cimg_snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::medcon_path()); - std::fprintf(cimg::output()," > Path of 'medcon': %s%-13s%s\n", - cimg::t_bold, - tmp, - cimg::t_normal); - - cimg_snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::temporary_path()); - std::fprintf(cimg::output()," > Temporary path: %s%-13s%s\n", - cimg::t_bold, - tmp, - cimg::t_normal); - - std::fprintf(cimg::output(),"\n"); - } - - // Declare LAPACK function signatures if LAPACK support is enabled. -#ifdef cimg_use_lapack - template - inline void getrf(int &N, T *lapA, int *IPIV, int &INFO) { - dgetrf_(&N,&N,lapA,&N,IPIV,&INFO); - } - - inline void getrf(int &N, float *lapA, int *IPIV, int &INFO) { - sgetrf_(&N,&N,lapA,&N,IPIV,&INFO); - } - - template - inline void getri(int &N, T *lapA, int *IPIV, T* WORK, int &LWORK, int &INFO) { - dgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO); - } - - inline void getri(int &N, float *lapA, int *IPIV, float* WORK, int &LWORK, int &INFO) { - sgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO); - } - - template - inline void gesvd(char &JOB, int &M, int &N, T *lapA, int &MN, - T *lapS, T *lapU, T *lapV, T *WORK, int &LWORK, int &INFO) { - dgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO); - } - - inline void gesvd(char &JOB, int &M, int &N, float *lapA, int &MN, - float *lapS, float *lapU, float *lapV, float *WORK, int &LWORK, int &INFO) { - sgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO); - } - - template - inline void getrs(char &TRANS, int &N, T *lapA, int *IPIV, T *lapB, int &INFO) { - int one = 1; - dgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO); - } - - inline void getrs(char &TRANS, int &N, float *lapA, int *IPIV, float *lapB, int &INFO) { - int one = 1; - sgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO); - } - - template - inline void syev(char &JOB, char &UPLO, int &N, T *lapA, T *lapW, T *WORK, int &LWORK, int &INFO) { - dsyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO); - } - - inline void syev(char &JOB, char &UPLO, int &N, float *lapA, float *lapW, float *WORK, int &LWORK, int &INFO) { - ssyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO); - } - - template - inline void sgels(char & TRANS, int &M, int &N, int &NRHS, T* lapA, int &LDA, - T* lapB, int &LDB, T* WORK, int &LWORK, int &INFO){ - dgels_(&TRANS, &M, &N, &NRHS, lapA, &LDA, lapB, &LDB, WORK, &LWORK, &INFO); - } - - inline void sgels(char & TRANS, int &M, int &N, int &NRHS, float* lapA, int &LDA, - float* lapB, int &LDB, float* WORK, int &LWORK, int &INFO){ - sgels_(&TRANS, &M, &N, &NRHS, lapA, &LDA, lapB, &LDB, WORK, &LWORK, &INFO); - } - -#endif - - // End of the 'cimg' namespace - } - - /*------------------------------------------------ - # - # - # Definition of mathematical operators and - # external functions. - # - # - -------------------------------------------------*/ - -#define _cimg_create_ext_operators(typ) \ - template \ - inline CImg::type> operator+(const typ val, const CImg& img) { \ - return img + val; \ - } \ - template \ - inline CImg::type> operator-(const typ val, const CImg& img) { \ - typedef typename cimg::superset::type Tt; \ - return CImg(img._width,img._height,img._depth,img._spectrum,val)-=img; \ - } \ - template \ - inline CImg::type> operator*(const typ val, const CImg& img) { \ - return img*val; \ - } \ - template \ - inline CImg::type> operator/(const typ val, const CImg& img) { \ - return val*img.get_invert(); \ - } \ - template \ - inline CImg::type> operator&(const typ val, const CImg& img) { \ - return img & val; \ - } \ - template \ - inline CImg::type> operator|(const typ val, const CImg& img) { \ - return img | val; \ - } \ - template \ - inline CImg::type> operator^(const typ val, const CImg& img) { \ - return img ^ val; \ - } \ - template \ - inline bool operator==(const typ val, const CImg& img) { \ - return img == val; \ - } \ - template \ - inline bool operator!=(const typ val, const CImg& img) { \ - return img != val; \ - } - - _cimg_create_ext_operators(bool) - _cimg_create_ext_operators(unsigned char) - _cimg_create_ext_operators(char) - _cimg_create_ext_operators(signed char) - _cimg_create_ext_operators(unsigned short) - _cimg_create_ext_operators(short) - _cimg_create_ext_operators(unsigned int) - _cimg_create_ext_operators(int) - _cimg_create_ext_operators(unsigned long) - _cimg_create_ext_operators(long) - _cimg_create_ext_operators(float) - _cimg_create_ext_operators(double) - - template - inline CImg<_cimg_Tfloat> operator+(const char *const expression, const CImg& img) { - return img + expression; - } - - template - inline CImg<_cimg_Tfloat> operator-(const char *const expression, const CImg& img) { - return CImg<_cimg_Tfloat>(img._width,img._height,img._depth,img._spectrum,expression,true)-=img; - } - - template - inline CImg<_cimg_Tfloat> operator*(const char *const expression, const CImg& img) { - return img*expression; - } - - template - inline CImg<_cimg_Tfloat> operator/(const char *const expression, const CImg& img) { - return expression*img.get_invert(); - } - - template - inline CImg operator&(const char *const expression, const CImg& img) { - return img & expression; - } - - template - inline CImg operator|(const char *const expression, const CImg& img) { - return img | expression; - } - - template - inline CImg operator^(const char *const expression, const CImg& img) { - return img ^ expression; - } - - template - inline bool operator==(const char *const expression, const CImg& img) { - return img == expression; - } - - template - inline bool operator!=(const char *const expression, const CImg& img) { - return img != expression; - } - - template - inline CImg<_cimg_Tfloat> sqr(const CImg& instance) { - return instance.get_sqr(); - } - - template - inline CImg<_cimg_Tfloat> sqrt(const CImg& instance) { - return instance.get_sqrt(); - } - - template - inline CImg<_cimg_Tfloat> exp(const CImg& instance) { - return instance.get_exp(); - } - - template - inline CImg<_cimg_Tfloat> log(const CImg& instance) { - return instance.get_log(); - } - - template - inline CImg<_cimg_Tfloat> log2(const CImg& instance) { - return instance.get_log2(); - } - - template - inline CImg<_cimg_Tfloat> log10(const CImg& instance) { - return instance.get_log10(); - } - - template - inline CImg<_cimg_Tfloat> abs(const CImg& instance) { - return instance.get_abs(); - } - - template - inline CImg<_cimg_Tfloat> sign(const CImg& instance) { - return instance.get_sign(); - } - - template - inline CImg<_cimg_Tfloat> cos(const CImg& instance) { - return instance.get_cos(); - } - - template - inline CImg<_cimg_Tfloat> sin(const CImg& instance) { - return instance.get_sin(); - } - - template - inline CImg<_cimg_Tfloat> sinc(const CImg& instance) { - return instance.get_sinc(); - } - - template - inline CImg<_cimg_Tfloat> tan(const CImg& instance) { - return instance.get_tan(); - } - - template - inline CImg<_cimg_Tfloat> acos(const CImg& instance) { - return instance.get_acos(); - } - - template - inline CImg<_cimg_Tfloat> asin(const CImg& instance) { - return instance.get_asin(); - } - - template - inline CImg<_cimg_Tfloat> atan(const CImg& instance) { - return instance.get_atan(); - } - - template - inline CImg<_cimg_Tfloat> cosh(const CImg& instance) { - return instance.get_cosh(); - } - - template - inline CImg<_cimg_Tfloat> sinh(const CImg& instance) { - return instance.get_sinh(); - } - - template - inline CImg<_cimg_Tfloat> tanh(const CImg& instance) { - return instance.get_tanh(); - } - - template - inline CImg transpose(const CImg& instance) { - return instance.get_transpose(); - } - - template - inline CImg<_cimg_Tfloat> invert(const CImg& instance) { - return instance.get_invert(); - } - - template - inline CImg<_cimg_Tfloat> pseudoinvert(const CImg& instance) { - return instance.get_pseudoinvert(); - } - - /*----------------------------------- - # - # Define the CImgDisplay structure - # - ----------------------------------*/ - //! Allow to create windows, display images on them and manage user events (keyboard, mouse and windows events). - /** - CImgDisplay methods rely on a low-level graphic library to perform: it can be either \b X-Window (X11, for Unix-based systems) - or \b GDI32 (for Windows-based systems). - If both libraries are missing, CImgDisplay will not be able to display images on screen, and will enter a minimal mode - where warning messages will be outputed each time the program is trying to call one of the CImgDisplay method. - - The configuration variable \c cimg_display tells about the graphic library used. - It is set automatically by \CImg when one of these graphic libraries has been detected. - But, you can override its value if necessary. Valid choices are: - - 0: Disable display capabilities. - - 1: Use \b X-Window (X11) library. - - 2: Use \b GDI32 library. - - Remember to link your program against \b X11 or \b GDI32 libraries if you use CImgDisplay. - **/ - struct CImgDisplay { - unsigned long _timer, _fps_frames, _fps_timer; - unsigned int _width, _height, _normalization; - float _fps_fps, _min, _max; - bool _is_fullscreen; - char *_title; - volatile unsigned int _window_width, _window_height, _button, _keys[128], _released_keys[128]; - volatile int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; - volatile bool _is_closed, _is_resized, _is_moved, _is_event, - _is_keyESC, _is_keyF1, _is_keyF2, _is_keyF3, _is_keyF4, _is_keyF5, _is_keyF6, _is_keyF7, - _is_keyF8, _is_keyF9, _is_keyF10, _is_keyF11, _is_keyF12, _is_keyPAUSE, _is_key1, _is_key2, - _is_key3, _is_key4, _is_key5, _is_key6, _is_key7, _is_key8, _is_key9, _is_key0, - _is_keyBACKSPACE, _is_keyINSERT, _is_keyHOME, _is_keyPAGEUP, _is_keyTAB, _is_keyQ, _is_keyW, _is_keyE, - _is_keyR, _is_keyT, _is_keyY, _is_keyU, _is_keyI, _is_keyO, _is_keyP, _is_keyDELETE, - _is_keyEND, _is_keyPAGEDOWN, _is_keyCAPSLOCK, _is_keyA, _is_keyS, _is_keyD, _is_keyF, _is_keyG, - _is_keyH, _is_keyJ, _is_keyK, _is_keyL, _is_keyENTER, _is_keySHIFTLEFT, _is_keyZ, _is_keyX, - _is_keyC, _is_keyV, _is_keyB, _is_keyN, _is_keyM, _is_keySHIFTRIGHT, _is_keyARROWUP, _is_keyCTRLLEFT, - _is_keyAPPLEFT, _is_keyALT, _is_keySPACE, _is_keyALTGR, _is_keyAPPRIGHT, _is_keyMENU, _is_keyCTRLRIGHT, _is_keyARROWLEFT, - _is_keyARROWDOWN, _is_keyARROWRIGHT, _is_keyPAD0, _is_keyPAD1, _is_keyPAD2, _is_keyPAD3, _is_keyPAD4, _is_keyPAD5, - _is_keyPAD6, _is_keyPAD7, _is_keyPAD8, _is_keyPAD9, _is_keyPADADD, _is_keyPADSUB, _is_keyPADMUL, _is_keyPADDIV; - - //@} - //--------------------------- - // - //! \name Plugins - //@{ - //--------------------------- - -#ifdef cimgdisplay_plugin -#include cimgdisplay_plugin -#endif -#ifdef cimgdisplay_plugin1 -#include cimgdisplay_plugin1 -#endif -#ifdef cimgdisplay_plugin2 -#include cimgdisplay_plugin2 -#endif -#ifdef cimgdisplay_plugin3 -#include cimgdisplay_plugin3 -#endif -#ifdef cimgdisplay_plugin4 -#include cimgdisplay_plugin4 -#endif -#ifdef cimgdisplay_plugin5 -#include cimgdisplay_plugin5 -#endif -#ifdef cimgdisplay_plugin6 -#include cimgdisplay_plugin6 -#endif -#ifdef cimgdisplay_plugin7 -#include cimgdisplay_plugin7 -#endif -#ifdef cimgdisplay_plugin8 -#include cimgdisplay_plugin8 -#endif - - //@} - //-------------------------------------------------------- - // - //! \name Constructors / Destructor / Instance Management - //@{ - //-------------------------------------------------------- - - //! Destructor. - /** - \note If the associated window is visible on the screen, it is closed by the call to the destructor. - **/ - ~CImgDisplay() { - assign(); - } - - //! Construct an empty display. - /** - \note Constructing an empty CImgDisplay instance does not make a window appearing on the screen, until - display of valid data is performed. - \par Example - \code - CImgDisplay disp; // Does actually nothing. - ... - disp.display(img); // Construct new window and display image in it. - \endcode - **/ - CImgDisplay(): - _width(0),_height(0),_normalization(0), - _min(0),_max(0), - _is_fullscreen(false), - _title(0), - _window_width(0),_window_height(0),_button(0), - _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), - _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { - assign(); - } - - //! Construct a display with specified dimensions. - /** \param width Window width. - \param height Window height. - \param title Window title. - \param normalization Normalization type (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). - \param is_fullscreen Tells if fullscreen mode is enabled. - \param is_closed Tells if associated window is initially visible or not. - \note A black background is initially displayed on the associated window. - **/ - CImgDisplay(const unsigned int width, const unsigned int height, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false): - _width(0),_height(0),_normalization(0), - _min(0),_max(0), - _is_fullscreen(false), - _title(0), - _window_width(0),_window_height(0),_button(0), - _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), - _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { - assign(width,height,title,normalization,is_fullscreen,is_closed); - } - - //! Construct a display from an image. - /** \param img Image used as a model to create the window. - \param title Window title. - \param normalization Normalization type (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). - \param is_fullscreen Tells if fullscreen mode is enabled. - \param is_closed Tells if associated window is initially visible or not. - \note The pixels of the input image are initially displayed on the associated window. - **/ - template - explicit CImgDisplay(const CImg& img, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false): - _width(0),_height(0),_normalization(0), - _min(0),_max(0), - _is_fullscreen(false), - _title(0), - _window_width(0),_window_height(0),_button(0), - _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), - _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { - assign(img,title,normalization,is_fullscreen,is_closed); - } - - //! Construct a display from an image list. - /** \param list The images list to display. - \param title Window title. - \param normalization Normalization type (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). - \param is_fullscreen Tells if fullscreen mode is enabled. - \param is_closed Tells if associated window is initially visible or not. - \note All images of the list, appended along the X-axis, are initially displayed on the associated window. - **/ - template - explicit CImgDisplay(const CImgList& list, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false): - _width(0),_height(0),_normalization(0), - _min(0),_max(0), - _is_fullscreen(false), - _title(0), - _window_width(0),_window_height(0),_button(0), - _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), - _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { - assign(list,title,normalization,is_fullscreen,is_closed); - } - - //! Construct a display as a copy of an existing one. - /** - \param disp Display instance to copy. - \note The pixel buffer of the input window is initially displayed on the associated window. - **/ - CImgDisplay(const CImgDisplay& disp): - _width(0),_height(0),_normalization(0), - _min(0),_max(0), - _is_fullscreen(false), - _title(0), - _window_width(0),_window_height(0),_button(0), - _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), - _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { - assign(disp); - } - -#if cimg_display==0 - - static void _no_display_exception() { - throw CImgDisplayException("CImgDisplay(): No display available."); - } - - //! Destructor - Empty constructor \inplace. - /** - \note Replace the current instance by an empty display. - **/ - CImgDisplay& assign() { - return flush(); - } - - //! Construct a display with specified dimensions \inplace. - /** - **/ - CImgDisplay& assign(const unsigned int width, const unsigned int height, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false) { - cimg::unused(width,height,title,normalization,is_fullscreen,is_closed); - _no_display_exception(); - return assign(); - } - - //! Construct a display from an image \inplace. - /** - **/ - template - CImgDisplay& assign(const CImg& img, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false) { - _no_display_exception(); - return assign(img._width,img._height,title,normalization,is_fullscreen,is_closed); - } - - //! Construct a display from an image list \inplace. - /** - **/ - template - CImgDisplay& assign(const CImgList& list, - const char *const title=0, const unsigned int normalization=3, - const bool is_fullscreen=false, const bool is_closed=false) { - _no_display_exception(); - return assign(list._width,list._width,title,normalization,is_fullscreen,is_closed); - } - - //! Construct a display as a copy of another one \inplace. - /** - **/ - CImgDisplay& assign(const CImgDisplay &disp) { - _no_display_exception(); - return assign(disp._width,disp._height); - } - -#endif - - //! Return a reference to an empty display. - /** - \note Can be useful for writing function prototypes where one of the argument (of type CImgDisplay&) - must have a default value. - \par Example - \code - void foo(CImgDisplay& disp=CImgDisplay::empty()); - \endcode - **/ - static CImgDisplay& empty() { - static CImgDisplay _empty; - return _empty.assign(); - } - -#define cimg_fitscreen(dx,dy,dz) CImgDisplay::_fitscreen(dx,dy,dz,128,-85,false),CImgDisplay::_fitscreen(dx,dy,dz,128,-85,true) - static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz, - const int dmin, const int dmax,const bool return_y) { - const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0); - unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1; - const unsigned int - sw = CImgDisplay::screen_width(), sh = CImgDisplay::screen_height(), - mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin, - mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin, - Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax, - Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax; - if (nwMw) { nh = nh*Mw/nw; nh+=(nh==0?1:0); nw = Mw; } - if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0?1:0); nh = Mh; } - if (nwdisp = img is equivalent to disp.display(img). - **/ - template - CImgDisplay& operator=(const CImg& img) { - return display(img); - } - - //! Display list of images on associated window. - /** - \note disp = list is equivalent to disp.display(list). - **/ - template - CImgDisplay& operator=(const CImgList& list) { - return display(list); - } - - //! Construct a display as a copy of another one \inplace. - /** - \note Equivalent to assign(const CImgDisplay&). - **/ - CImgDisplay& operator=(const CImgDisplay& disp) { - return assign(disp); - } - - //! Return \c false if display is empty, \c true otherwise. - /** - \note if (disp) { ... } is equivalent to if (!disp.is_empty()) { ... }. - **/ - operator bool() const { - return !is_empty(); - } - - //@} - //------------------------------------------ - // - //! \name Instance Checking - //@{ - //------------------------------------------ - - //! Return \c true if display is empty, \c false otherwise. - /** - **/ - bool is_empty() const { - return !(_width && _height); - } - - //! Return \c true if display is closed (i.e. not visible on the screen), \c false otherwise. - /** - \note - - When a user physically closes the associated window, the display is set to closed. - - A closed display is not destroyed. Its associated window can be show again on the screen using show(). - **/ - bool is_closed() const { - return _is_closed; - } - - //! Return \c true if associated window has been resized on the screen, \c false otherwise. - /** - **/ - bool is_resized() const { - return _is_resized; - } - - //! Return \c true if associated window has been moved on the screen, \c false otherwise. - /** - **/ - bool is_moved() const { - return _is_moved; - } - - //! Return \c true if any event has occured on the associated window, \c false otherwise. - /** - **/ - bool is_event() const { - return _is_event; - } - - //! Return \c true if current display is in fullscreen mode, \c false otherwise. - /** - **/ - bool is_fullscreen() const { - return _is_fullscreen; - } - - //! Return \c true if any key is being pressed on the associated window, \c false otherwise. - /** - \note The methods below do the same only for specific keys. - **/ - bool is_key() const { - return _is_keyESC || _is_keyF1 || _is_keyF2 || _is_keyF3 || - _is_keyF4 || _is_keyF5 || _is_keyF6 || _is_keyF7 || - _is_keyF8 || _is_keyF9 || _is_keyF10 || _is_keyF11 || - _is_keyF12 || _is_keyPAUSE || _is_key1 || _is_key2 || - _is_key3 || _is_key4 || _is_key5 || _is_key6 || - _is_key7 || _is_key8 || _is_key9 || _is_key0 || - _is_keyBACKSPACE || _is_keyINSERT || _is_keyHOME || - _is_keyPAGEUP || _is_keyTAB || _is_keyQ || _is_keyW || - _is_keyE || _is_keyR || _is_keyT || _is_keyY || - _is_keyU || _is_keyI || _is_keyO || _is_keyP || - _is_keyDELETE || _is_keyEND || _is_keyPAGEDOWN || - _is_keyCAPSLOCK || _is_keyA || _is_keyS || _is_keyD || - _is_keyF || _is_keyG || _is_keyH || _is_keyJ || - _is_keyK || _is_keyL || _is_keyENTER || - _is_keySHIFTLEFT || _is_keyZ || _is_keyX || _is_keyC || - _is_keyV || _is_keyB || _is_keyN || _is_keyM || - _is_keySHIFTRIGHT || _is_keyARROWUP || _is_keyCTRLLEFT || - _is_keyAPPLEFT || _is_keyALT || _is_keySPACE || _is_keyALTGR || - _is_keyAPPRIGHT || _is_keyMENU || _is_keyCTRLRIGHT || - _is_keyARROWLEFT || _is_keyARROWDOWN || _is_keyARROWRIGHT || - _is_keyPAD0 || _is_keyPAD1 || _is_keyPAD2 || - _is_keyPAD3 || _is_keyPAD4 || _is_keyPAD5 || - _is_keyPAD6 || _is_keyPAD7 || _is_keyPAD8 || - _is_keyPAD9 || _is_keyPADADD || _is_keyPADSUB || - _is_keyPADMUL || _is_keyPADDIV; - } - - //! Return \c true if key specified by given keycode is being pressed on the associated window, \c false otherwise. - /** - \param keycode Keycode to test. - \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - \par Example - \code - CImgDisplay disp(400,400); - while (!disp.is_closed()) { - if (disp.key(cimg::keyTAB)) { ... } // Equivalent to 'if (disp.is_keyTAB())'. - disp.wait(); - } - \endcode - **/ - bool is_key(const unsigned int keycode) const { -#define _cimg_iskey_test(k) if (keycode==cimg::key##k) return _is_key##k; - _cimg_iskey_test(ESC); _cimg_iskey_test(F1); _cimg_iskey_test(F2); _cimg_iskey_test(F3); - _cimg_iskey_test(F4); _cimg_iskey_test(F5); _cimg_iskey_test(F6); _cimg_iskey_test(F7); - _cimg_iskey_test(F8); _cimg_iskey_test(F9); _cimg_iskey_test(F10); _cimg_iskey_test(F11); - _cimg_iskey_test(F12); _cimg_iskey_test(PAUSE); _cimg_iskey_test(1); _cimg_iskey_test(2); - _cimg_iskey_test(3); _cimg_iskey_test(4); _cimg_iskey_test(5); _cimg_iskey_test(6); - _cimg_iskey_test(7); _cimg_iskey_test(8); _cimg_iskey_test(9); _cimg_iskey_test(0); - _cimg_iskey_test(BACKSPACE); _cimg_iskey_test(INSERT); _cimg_iskey_test(HOME); - _cimg_iskey_test(PAGEUP); _cimg_iskey_test(TAB); _cimg_iskey_test(Q); _cimg_iskey_test(W); - _cimg_iskey_test(E); _cimg_iskey_test(R); _cimg_iskey_test(T); _cimg_iskey_test(Y); - _cimg_iskey_test(U); _cimg_iskey_test(I); _cimg_iskey_test(O); _cimg_iskey_test(P); - _cimg_iskey_test(DELETE); _cimg_iskey_test(END); _cimg_iskey_test(PAGEDOWN); - _cimg_iskey_test(CAPSLOCK); _cimg_iskey_test(A); _cimg_iskey_test(S); _cimg_iskey_test(D); - _cimg_iskey_test(F); _cimg_iskey_test(G); _cimg_iskey_test(H); _cimg_iskey_test(J); - _cimg_iskey_test(K); _cimg_iskey_test(L); _cimg_iskey_test(ENTER); - _cimg_iskey_test(SHIFTLEFT); _cimg_iskey_test(Z); _cimg_iskey_test(X); _cimg_iskey_test(C); - _cimg_iskey_test(V); _cimg_iskey_test(B); _cimg_iskey_test(N); _cimg_iskey_test(M); - _cimg_iskey_test(SHIFTRIGHT); _cimg_iskey_test(ARROWUP); _cimg_iskey_test(CTRLLEFT); - _cimg_iskey_test(APPLEFT); _cimg_iskey_test(ALT); _cimg_iskey_test(SPACE); _cimg_iskey_test(ALTGR); - _cimg_iskey_test(APPRIGHT); _cimg_iskey_test(MENU); _cimg_iskey_test(CTRLRIGHT); - _cimg_iskey_test(ARROWLEFT); _cimg_iskey_test(ARROWDOWN); _cimg_iskey_test(ARROWRIGHT); - _cimg_iskey_test(PAD0); _cimg_iskey_test(PAD1); _cimg_iskey_test(PAD2); - _cimg_iskey_test(PAD3); _cimg_iskey_test(PAD4); _cimg_iskey_test(PAD5); - _cimg_iskey_test(PAD6); _cimg_iskey_test(PAD7); _cimg_iskey_test(PAD8); - _cimg_iskey_test(PAD9); _cimg_iskey_test(PADADD); _cimg_iskey_test(PADSUB); - _cimg_iskey_test(PADMUL); _cimg_iskey_test(PADDIV); - return false; - } - - //! Return \c true if key specified by given keycode is being pressed on the associated window, \c false otherwise. - /** - \param keycode C-string containing the keycode label of the key to test. - \note Use it when the key you want to test can be dynamically set by the user. - \par Example - \code - CImgDisplay disp(400,400); - const char *const keycode = "TAB"; - while (!disp.is_closed()) { - if (disp.is_key(keycode)) { ... } // Equivalent to 'if (disp.is_keyTAB())'. - disp.wait(); - } - \endcode - **/ - bool is_key(const char *const keycode) const { -#define _cimg_iskey_test2(k) if (!cimg::strcasecmp(keycode,#k)) return _is_key##k; - _cimg_iskey_test2(ESC); _cimg_iskey_test2(F1); _cimg_iskey_test2(F2); _cimg_iskey_test2(F3); - _cimg_iskey_test2(F4); _cimg_iskey_test2(F5); _cimg_iskey_test2(F6); _cimg_iskey_test2(F7); - _cimg_iskey_test2(F8); _cimg_iskey_test2(F9); _cimg_iskey_test2(F10); _cimg_iskey_test2(F11); - _cimg_iskey_test2(F12); _cimg_iskey_test2(PAUSE); _cimg_iskey_test2(1); _cimg_iskey_test2(2); - _cimg_iskey_test2(3); _cimg_iskey_test2(4); _cimg_iskey_test2(5); _cimg_iskey_test2(6); - _cimg_iskey_test2(7); _cimg_iskey_test2(8); _cimg_iskey_test2(9); _cimg_iskey_test2(0); - _cimg_iskey_test2(BACKSPACE); _cimg_iskey_test2(INSERT); _cimg_iskey_test2(HOME); - _cimg_iskey_test2(PAGEUP); _cimg_iskey_test2(TAB); _cimg_iskey_test2(Q); _cimg_iskey_test2(W); - _cimg_iskey_test2(E); _cimg_iskey_test2(R); _cimg_iskey_test2(T); _cimg_iskey_test2(Y); - _cimg_iskey_test2(U); _cimg_iskey_test2(I); _cimg_iskey_test2(O); _cimg_iskey_test2(P); - _cimg_iskey_test2(DELETE); _cimg_iskey_test2(END); _cimg_iskey_test2(PAGEDOWN); - _cimg_iskey_test2(CAPSLOCK); _cimg_iskey_test2(A); _cimg_iskey_test2(S); _cimg_iskey_test2(D); - _cimg_iskey_test2(F); _cimg_iskey_test2(G); _cimg_iskey_test2(H); _cimg_iskey_test2(J); - _cimg_iskey_test2(K); _cimg_iskey_test2(L); _cimg_iskey_test2(ENTER); - _cimg_iskey_test2(SHIFTLEFT); _cimg_iskey_test2(Z); _cimg_iskey_test2(X); _cimg_iskey_test2(C); - _cimg_iskey_test2(V); _cimg_iskey_test2(B); _cimg_iskey_test2(N); _cimg_iskey_test2(M); - _cimg_iskey_test2(SHIFTRIGHT); _cimg_iskey_test2(ARROWUP); _cimg_iskey_test2(CTRLLEFT); - _cimg_iskey_test2(APPLEFT); _cimg_iskey_test2(ALT); _cimg_iskey_test2(SPACE); _cimg_iskey_test2(ALTGR); - _cimg_iskey_test2(APPRIGHT); _cimg_iskey_test2(MENU); _cimg_iskey_test2(CTRLRIGHT); - _cimg_iskey_test2(ARROWLEFT); _cimg_iskey_test2(ARROWDOWN); _cimg_iskey_test2(ARROWRIGHT); - _cimg_iskey_test2(PAD0); _cimg_iskey_test2(PAD1); _cimg_iskey_test2(PAD2); - _cimg_iskey_test2(PAD3); _cimg_iskey_test2(PAD4); _cimg_iskey_test2(PAD5); - _cimg_iskey_test2(PAD6); _cimg_iskey_test2(PAD7); _cimg_iskey_test2(PAD8); - _cimg_iskey_test2(PAD9); _cimg_iskey_test2(PADADD); _cimg_iskey_test2(PADSUB); - _cimg_iskey_test2(PADMUL); _cimg_iskey_test2(PADDIV); - return false; - } - - //! Return \c true if specified key sequence has been typed on the associated window, \c false otherwise. - /** - \param keycodes_sequence Buffer of keycodes to test. - \param length Number of keys in the \c keycodes_sequence buffer. - \param remove_sequence Tells if the key sequence must be removed from the key history, if found. - \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - \par Example - \code - CImgDisplay disp(400,400); - const unsigned int key_seq[] = { cimg::keyCTRLLEFT, cimg::keyD }; - while (!disp.is_closed()) { - if (disp.is_key_sequence(key_seq,2)) { ... } // Test for the 'CTRL+D' keyboard event. - disp.wait(); - } - \endcode - **/ - bool is_key_sequence(const unsigned int *const keycodes_sequence, const unsigned int length, const bool remove_sequence=false) { - if (keycodes_sequence && length) { - const unsigned int - *const ps_end = keycodes_sequence + length - 1, - *const pk_end = (unsigned int*)_keys + 1 + sizeof(_keys)/sizeof(unsigned int) - length, - k = *ps_end; - for (unsigned int *pk = (unsigned int*)_keys; pk[0,255]. If the range of values of the data to display - is different, a normalization may be required for displaying the data in a correct way. - The normalization type can be one of: - - \c 0: Value normalization is disabled. It is then assumed that all input data to be displayed by the CImgDisplay instance - have values in range [0,255]. - - \c 1: Value normalization is always performed (this is the default behavior). - Before displaying an input image, its values will be (virtually) stretched - in range [0,255], so that the contrast of the displayed pixels will be maximum. - Use this mode for images whose minimum and maximum values are not prescribed to known values (e.g. float-valued images). - Note that when normalized versions of images are computed for display purposes, the actual values of these images are not modified. - - \c 2: Value normalization is performed once (on the first image display), then the same normalization coefficients are kept for - next displayed frames. - - \c 3: Value normalization depends on the pixel type of the data to display. For integer pixel types, the normalization - is done regarding the minimum/maximum values of the type (no normalization occurs then for unsigned char). - For float-valued pixel types, the normalization is done regarding the minimum/maximum value of the image data instead. - - **/ - unsigned int normalization() const { - return _normalization; - } - - //! Return title of the associated window as a C-string. - /** - \note Window title may be not visible, depending on the used window manager or if the current display is in fullscreen mode. - **/ - const char *title() const { - return _title; - } - - //! Return width of the associated window. - /** - \note The width of the display (i.e. the width of the pixel data buffer associated to the CImgDisplay instance) - may be different from the actual width of the associated window. - **/ - int window_width() const { - return (int)_window_width; - } - - //! Return height of the associated window. - /** - \note The height of the display (i.e. the height of the pixel data buffer associated to the CImgDisplay instance) - may be different from the actual height of the associated window. - **/ - int window_height() const { - return (int)_window_height; - } - - //! Return X-coordinate of the associated window. - /** - \note The returned coordinate corresponds to the location of the upper-left corner of the associated window. - **/ - int window_x() const { - return _window_x; - } - - //! Return Y-coordinate of the associated window. - /** - \note The returned coordinate corresponds to the location of the upper-left corner of the associated window. - **/ - int window_y() const { - return _window_y; - } - - //! Return X-coordinate of the mouse pointer. - /** - \note - - If the mouse pointer is outside window area, \c -1 is returned. - - Otherwise, the returned value is in the range [0,width()-1]. - **/ - int mouse_x() const { - return _mouse_x; - } - - //! Return Y-coordinate of the mouse pointer. - /** - \note - - If the mouse pointer is outside window area, \c -1 is returned. - - Otherwise, the returned value is in the range [0,height()-1]. - **/ - int mouse_y() const { - return _mouse_y; - } - - //! Return current state of the mouse buttons. - /** - \note Three mouse buttons can be managed. If one button is pressed, its corresponding bit in the returned value is set: - - bit \c 0 (value \c 0x1): State of the left mouse button. - - bit \c 1 (value \c 0x2): State of the right mouse button. - - bit \c 2 (value \c 0x4): State of the middle mouse button. - - Several bits can be activated if more than one button are pressed at the same time. - \par Example - \code - CImgDisplay disp(400,400); - while (!disp.is_closed()) { - if (disp.button()&1) { // Left button clicked. - ... - } - if (disp.button()&2) { // Right button clicked. - ... - } - if (disp.button()&4) { // Middle button clicked. - ... - } - disp.wait(); - } - \endcode - **/ - unsigned int button() const { - return _button; - } - - //! Return current state of the mouse wheel. - /** - \note - - The returned value can be positive or negative depending on whether the mouse wheel has been scrolled forward or backward. - - Scrolling the wheel forward add \c 1 to the wheel value. - - Scrolling the wheel backward substract \c 1 to the wheel value. - - The returned value cumulates the number of forward of backward scrolls since the creation of the display, or since the - last reset of the wheel value (using set_wheel()). It is strongly recommended to quickly reset the wheel counter - when an action has been performed regarding the current wheel value. Otherwise, the returned wheel value may be for instance \c 0 - despite the fact that many scrolls have been done (as many in forward as in backward directions). - \par Example - \code - CImgDisplay disp(400,400); - while (!disp.is_closed()) { - if (disp.wheel()) { - int counter = disp.wheel(); // Read the state of the mouse wheel. - ... // Do what you want with 'counter'. - disp.set_wheel(); // Reset the wheel value to 0. - } - disp.wait(); - } - \endcode - **/ - int wheel() const { - return _wheel; - } - - //! Return one entry from the pressed keys history. - /** - \param pos Indice to read from the pressed keys history (indice \c 0 corresponds to latest entry). - \return Keycode of a pressed key or \c 0 for a released key. - \note - - Each CImgDisplay stores a history of the pressed keys in a buffer of size \c 128. When a new key is pressed, - its keycode is stored in the pressed keys history. When a key is released, \c 0 is put instead. - This means that up to the 64 last pressed keys may be read from the pressed keys history. - When a new value is stored, the pressed keys history is shifted so that the latest entry is always - stored at position \c 0. - - Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - **/ - unsigned int key(const unsigned int pos=0) const { - return pos<(sizeof(_keys)/sizeof(unsigned int))?_keys[pos]:0; - } - - //! Return one entry from the released keys history. - /** - \param pos Indice to read from the released keys history (indice \c 0 corresponds to latest entry). - \return Keycode of a released key or \c 0 for a pressed key. - \note - - Each CImgDisplay stores a history of the released keys in a buffer of size \c 128. When a new key is released, - its keycode is stored in the pressed keys history. When a key is pressed, \c 0 is put instead. - This means that up to the 64 last released keys may be read from the released keys history. - When a new value is stored, the released keys history is shifted so that the latest entry is always - stored at position \c 0. - - Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - **/ - unsigned int released_key(const unsigned int pos=0) const { - return pos<(sizeof(_released_keys)/sizeof(unsigned int))?_released_keys[pos]:0; - } - - //! Return keycode corresponding to the specified string. - /** - \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - \par Example - \code - const unsigned int keyTAB = CImgDisplay::keycode("TAB"); // Return cimg::keyTAB. - \endcode - **/ - static unsigned int keycode(const char *const keycode) { -#define _cimg_keycode(k) if (!cimg::strcasecmp(keycode,#k)) return cimg::key##k; - _cimg_keycode(ESC); _cimg_keycode(F1); _cimg_keycode(F2); _cimg_keycode(F3); - _cimg_keycode(F4); _cimg_keycode(F5); _cimg_keycode(F6); _cimg_keycode(F7); - _cimg_keycode(F8); _cimg_keycode(F9); _cimg_keycode(F10); _cimg_keycode(F11); - _cimg_keycode(F12); _cimg_keycode(PAUSE); _cimg_keycode(1); _cimg_keycode(2); - _cimg_keycode(3); _cimg_keycode(4); _cimg_keycode(5); _cimg_keycode(6); - _cimg_keycode(7); _cimg_keycode(8); _cimg_keycode(9); _cimg_keycode(0); - _cimg_keycode(BACKSPACE); _cimg_keycode(INSERT); _cimg_keycode(HOME); - _cimg_keycode(PAGEUP); _cimg_keycode(TAB); _cimg_keycode(Q); _cimg_keycode(W); - _cimg_keycode(E); _cimg_keycode(R); _cimg_keycode(T); _cimg_keycode(Y); - _cimg_keycode(U); _cimg_keycode(I); _cimg_keycode(O); _cimg_keycode(P); - _cimg_keycode(DELETE); _cimg_keycode(END); _cimg_keycode(PAGEDOWN); - _cimg_keycode(CAPSLOCK); _cimg_keycode(A); _cimg_keycode(S); _cimg_keycode(D); - _cimg_keycode(F); _cimg_keycode(G); _cimg_keycode(H); _cimg_keycode(J); - _cimg_keycode(K); _cimg_keycode(L); _cimg_keycode(ENTER); - _cimg_keycode(SHIFTLEFT); _cimg_keycode(Z); _cimg_keycode(X); _cimg_keycode(C); - _cimg_keycode(V); _cimg_keycode(B); _cimg_keycode(N); _cimg_keycode(M); - _cimg_keycode(SHIFTRIGHT); _cimg_keycode(ARROWUP); _cimg_keycode(CTRLLEFT); - _cimg_keycode(APPLEFT); _cimg_keycode(ALT); _cimg_keycode(SPACE); _cimg_keycode(ALTGR); - _cimg_keycode(APPRIGHT); _cimg_keycode(MENU); _cimg_keycode(CTRLRIGHT); - _cimg_keycode(ARROWLEFT); _cimg_keycode(ARROWDOWN); _cimg_keycode(ARROWRIGHT); - _cimg_keycode(PAD0); _cimg_keycode(PAD1); _cimg_keycode(PAD2); - _cimg_keycode(PAD3); _cimg_keycode(PAD4); _cimg_keycode(PAD5); - _cimg_keycode(PAD6); _cimg_keycode(PAD7); _cimg_keycode(PAD8); - _cimg_keycode(PAD9); _cimg_keycode(PADADD); _cimg_keycode(PADSUB); - _cimg_keycode(PADMUL); _cimg_keycode(PADDIV); - return 0; - } - - //! Return the current refresh rate, in frames per second. - /** - \note Returns a significant value when the current instance is used to display successive frames. - It measures the delay between successive calls to frames_per_second(). - **/ - float frames_per_second() { - if (!_fps_timer) _fps_timer = cimg::time(); - const float delta = (cimg::time()-_fps_timer)/1000.0f; - ++_fps_frames; - if (delta>=1) { - _fps_fps = _fps_frames/delta; - _fps_frames = 0; - _fps_timer = cimg::time(); - } - return _fps_fps; - } - - //@} - //--------------------------------------- - // - //! \name Window Manipulation - //@{ - //--------------------------------------- - -#if cimg_display==0 - - //! Display image on associated window. - /** - \param img Input image to display. - \note This method returns immediately. - **/ - template - CImgDisplay& display(const CImg& img) { - return assign(img); - } - -#endif - - //! Display list of images on associated window. - /** - \param list List of images to display. - \param axis Axis used to append the images along, for the visualization (can be \c x, \c y, \c z or \c c). - \param align Relative position of aligned images when displaying lists with images of different sizes - (\c 0 for upper-left, \c 0.5 for centering and \c 1 for lower-right). - \note This method returns immediately. - **/ - template - CImgDisplay& display(const CImgList& list, const char axis='x', const float align=0) { - return display(list.get_append(axis,align)); - } - -#if cimg_display==0 - - //! Show (closed) associated window on the screen. - /** - \note - - Force the associated window of a display to be visible on the screen, even if it has been closed before. - - Using show() on a visible display does nothing. - **/ - CImgDisplay& show() { - return assign(); - } - - //! Close (visible) associated window and make it disappear from the screen. - /** - \note - - A closed display only means the associated window is not visible anymore. This does not mean the display has been destroyed. - Use show() to make the associated window reappear. - - Using close() on a closed display does nothing. - **/ - CImgDisplay& close() { - return assign(); - } - - //! Move associated window to a new location. - /** - \param pos_x X-coordinate of the new window location. - \param pos_y Y-coordinate of the new window location. - \note Depending on the window manager behavior, this method may not succeed (no exceptions are thrown nevertheless). - **/ - CImgDisplay& move(const int pos_x, const int pos_y) { - return assign(pos_x,pos_y); - } - -#endif - - //! Resize display to the size of the associated window. - /** - \param force_redraw Tells if the previous window content must be updated and refreshed as well. - \note - - Calling this method ensures that width() and window_width() become equal, as well as height() and window_height(). - - The associated window is also resized to specified dimensions. - **/ - CImgDisplay& resize(const bool force_redraw=true) { - resize(_window_width,_window_height,force_redraw); - return *this; - } - -#if cimg_display==0 - - //! Resize display to the specified size. - /** - \param width Requested display width. - \param height Requested display height. - \param force_redraw Tells if the previous window content must be updated and refreshed as well. - \note The associated window is also resized to specified dimensions. - **/ - CImgDisplay& resize(const int width, const int height, const bool force_redraw=true) { - return assign(width,height,0,3,force_redraw); - } - -#endif - - //! Resize display to the size of an input image. - /** - \param img Input image to take size from. - \param force_redraw Tells if the previous window content must be resized and updated as well. - \note - - Calling this method ensures that width() and img.width() become equal, as well as height() and img.height(). - - The associated window is also resized to specified dimensions. - **/ - template - CImgDisplay& resize(const CImg& img, const bool force_redraw=true) { - return resize(img._width,img._height,force_redraw); - } - - //! Resize display to the size of another CImgDisplay instance. - /** - \param disp Input display to take size from. - \param force_redraw Tells if the previous window content must be resized and updated as well. - \note - - Calling this method ensures that width() and disp.width() become equal, as well as height() and disp.height(). - - The associated window is also resized to specified dimensions. - **/ - CImgDisplay& resize(const CImgDisplay& disp, const bool force_redraw=true) { - return resize(disp._width,disp._height,force_redraw); - } - - // [internal] Render pixel buffer with size (wd,hd) from source buffer of size (ws,hs). - template - static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs, - t *ptrd, const unsigned int wd, const unsigned int hd) { - unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd+1], *poffx, *poffy; - float s, curr, old; - s = (float)ws/wd; - poffx = offx; curr = 0; for (unsigned int x = 0; xstd::printf(). - \warning As the first argument is a format string, it is highly recommended to write - \code - disp.set_title("%s",window_title); - \endcode - instead of - \code - disp.set_title(window_title); - \endcode - if \c window_title can be arbitrary, to prevent nasty memory access. - **/ - CImgDisplay& set_title(const char *const format, ...) { - return assign(0,0,format); - } - -#endif - - //! Enable or disable fullscreen mode. - /** - \param is_fullscreen Tells is the fullscreen mode must be activated or not. - \param force_redraw Tells if the previous window content must be displayed as well. - \note - - When the fullscreen mode is enabled, the associated window fills the entire screen but the size of the current display - is not modified. - - The screen resolution may be switched to fit the associated window size and ensure it appears the largest as possible. - For X-Window (X11) users, the configuration flag \c cimg_use_xrandr has to be set to allow the screen resolution change - (requires the X11 extensions to be enabled). - **/ - CImgDisplay& set_fullscreen(const bool is_fullscreen, const bool force_redraw=true) { - if (is_empty() || _is_fullscreen==is_fullscreen) return *this; - return toggle_fullscreen(force_redraw); - } - -#if cimg_display==0 - - //! Toggle fullscreen mode. - /** - \param force_redraw Tells if the previous window content must be displayed as well. - \note Enable fullscreen mode if it was not enabled, and disable it otherwise. - **/ - CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { - return assign(_width,_height,0,3,force_redraw); - } - - //! Show mouse pointer. - /** - \note Depending on the window manager behavior, this method may not succeed (no exceptions are thrown nevertheless). - **/ - CImgDisplay& show_mouse() { - return assign(); - } - - //! Hide mouse pointer. - /** - \note Depending on the window manager behavior, this method may not succeed (no exceptions are thrown nevertheless). - **/ - CImgDisplay& hide_mouse() { - return assign(); - } - - //! Move mouse pointer to a specified location. - /** - \note Depending on the window manager behavior, this method may not succeed (no exceptions are thrown nevertheless). - **/ - CImgDisplay& set_mouse(const int pos_x, const int pos_y) { - return assign(pos_x,pos_y); - } - -#endif - - //! Simulate a mouse button release event. - /** - \note All mouse buttons are considered released at the same time. - **/ - CImgDisplay& set_button() { - _button = 0; - _is_event = true; -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - return *this; - } - - //! Simulate a mouse button press or release event. - /** - \param button Buttons event code, where each button is associated to a single bit. - \param is_pressed Tells if the mouse button is considered as pressed or released. - **/ - CImgDisplay& set_button(const unsigned int button, const bool is_pressed=true) { - const unsigned int buttoncode = button==1?1:button==2?2:button==3?4:0; - if (is_pressed) _button |= buttoncode; else _button &= ~buttoncode; - _is_event = buttoncode?true:false; - if (buttoncode) { -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - } - return *this; - } - - //! Flush all mouse wheel events. - /** - \note Make wheel() to return \c 0, if called afterwards. - **/ - CImgDisplay& set_wheel() { - _wheel = 0; - _is_event = true; -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - return *this; - } - - //! Simulate a wheel event. - /** - \param amplitude Amplitude of the wheel scrolling to simulate. - \note Make wheel() to return \c amplitude, if called afterwards. - **/ - CImgDisplay& set_wheel(const int amplitude) { - _wheel+=amplitude; - _is_event = amplitude?true:false; - if (amplitude) { -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - } - return *this; - } - - //! Flush all key events. - /** - \note Make key() to return \c 0, if called afterwards. - **/ - CImgDisplay& set_key() { - std::memset((void*)_keys,0,sizeof(_keys)); - std::memset((void*)_released_keys,0,sizeof(_released_keys)); - _is_keyESC = _is_keyF1 = _is_keyF2 = _is_keyF3 = _is_keyF4 = _is_keyF5 = _is_keyF6 = _is_keyF7 = _is_keyF8 = _is_keyF9 = - _is_keyF10 = _is_keyF11 = _is_keyF12 = _is_keyPAUSE = _is_key1 = _is_key2 = _is_key3 = _is_key4 = _is_key5 = _is_key6 = - _is_key7 = _is_key8 = _is_key9 = _is_key0 = _is_keyBACKSPACE = _is_keyINSERT = _is_keyHOME = _is_keyPAGEUP = _is_keyTAB = - _is_keyQ = _is_keyW = _is_keyE = _is_keyR = _is_keyT = _is_keyY = _is_keyU = _is_keyI = _is_keyO = _is_keyP = _is_keyDELETE = - _is_keyEND = _is_keyPAGEDOWN = _is_keyCAPSLOCK = _is_keyA = _is_keyS = _is_keyD = _is_keyF = _is_keyG = _is_keyH = _is_keyJ = - _is_keyK = _is_keyL = _is_keyENTER = _is_keySHIFTLEFT = _is_keyZ = _is_keyX = _is_keyC = _is_keyV = _is_keyB = _is_keyN = - _is_keyM = _is_keySHIFTRIGHT = _is_keyARROWUP = _is_keyCTRLLEFT = _is_keyAPPLEFT = _is_keyALT = _is_keySPACE = _is_keyALTGR = _is_keyAPPRIGHT = - _is_keyMENU = _is_keyCTRLRIGHT = _is_keyARROWLEFT = _is_keyARROWDOWN = _is_keyARROWRIGHT = _is_keyPAD0 = _is_keyPAD1 = _is_keyPAD2 = - _is_keyPAD3 = _is_keyPAD4 = _is_keyPAD5 = _is_keyPAD6 = _is_keyPAD7 = _is_keyPAD8 = _is_keyPAD9 = _is_keyPADADD = _is_keyPADSUB = - _is_keyPADMUL = _is_keyPADDIV = false; - _is_event = true; -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - return *this; - } - - //! Simulate a keyboard press/release event. - /** - \param keycode Keycode of the associated key. - \param is_pressed Tells if the key is considered as pressed or released. - \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure - your code stay portable (see cimg::keyESC). - **/ - CImgDisplay& set_key(const unsigned int keycode, const bool is_pressed=true) { -#define _cimg_set_key(k) if (keycode==cimg::key##k) _is_key##k = is_pressed; - _cimg_set_key(ESC); _cimg_set_key(F1); _cimg_set_key(F2); _cimg_set_key(F3); - _cimg_set_key(F4); _cimg_set_key(F5); _cimg_set_key(F6); _cimg_set_key(F7); - _cimg_set_key(F8); _cimg_set_key(F9); _cimg_set_key(F10); _cimg_set_key(F11); - _cimg_set_key(F12); _cimg_set_key(PAUSE); _cimg_set_key(1); _cimg_set_key(2); - _cimg_set_key(3); _cimg_set_key(4); _cimg_set_key(5); _cimg_set_key(6); - _cimg_set_key(7); _cimg_set_key(8); _cimg_set_key(9); _cimg_set_key(0); - _cimg_set_key(BACKSPACE); _cimg_set_key(INSERT); _cimg_set_key(HOME); - _cimg_set_key(PAGEUP); _cimg_set_key(TAB); _cimg_set_key(Q); _cimg_set_key(W); - _cimg_set_key(E); _cimg_set_key(R); _cimg_set_key(T); _cimg_set_key(Y); - _cimg_set_key(U); _cimg_set_key(I); _cimg_set_key(O); _cimg_set_key(P); - _cimg_set_key(DELETE); _cimg_set_key(END); _cimg_set_key(PAGEDOWN); - _cimg_set_key(CAPSLOCK); _cimg_set_key(A); _cimg_set_key(S); _cimg_set_key(D); - _cimg_set_key(F); _cimg_set_key(G); _cimg_set_key(H); _cimg_set_key(J); - _cimg_set_key(K); _cimg_set_key(L); _cimg_set_key(ENTER); - _cimg_set_key(SHIFTLEFT); _cimg_set_key(Z); _cimg_set_key(X); _cimg_set_key(C); - _cimg_set_key(V); _cimg_set_key(B); _cimg_set_key(N); _cimg_set_key(M); - _cimg_set_key(SHIFTRIGHT); _cimg_set_key(ARROWUP); _cimg_set_key(CTRLLEFT); - _cimg_set_key(APPLEFT); _cimg_set_key(ALT); _cimg_set_key(SPACE); _cimg_set_key(ALTGR); - _cimg_set_key(APPRIGHT); _cimg_set_key(MENU); _cimg_set_key(CTRLRIGHT); - _cimg_set_key(ARROWLEFT); _cimg_set_key(ARROWDOWN); _cimg_set_key(ARROWRIGHT); - _cimg_set_key(PAD0); _cimg_set_key(PAD1); _cimg_set_key(PAD2); - _cimg_set_key(PAD3); _cimg_set_key(PAD4); _cimg_set_key(PAD5); - _cimg_set_key(PAD6); _cimg_set_key(PAD7); _cimg_set_key(PAD8); - _cimg_set_key(PAD9); _cimg_set_key(PADADD); _cimg_set_key(PADSUB); - _cimg_set_key(PADMUL); _cimg_set_key(PADDIV); - if (is_pressed) { - if (*_keys) - std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); - *_keys = keycode; - if (*_released_keys) { - std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); - *_released_keys = 0; - } - } else { - if (*_keys) { - std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); - *_keys = 0; - } - if (*_released_keys) - std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); - *_released_keys = keycode; - } - _is_event = keycode?true:false; - if (keycode) { -#if cimg_display==1 - pthread_cond_broadcast(&cimg::X11_attr().wait_event); -#elif cimg_display==2 - SetEvent(cimg::Win32_attr().wait_event); -#endif - } - return *this; - } - - //! Flush all display events. - /** - \note Remove all passed events from the current display. - **/ - CImgDisplay& flush() { - set_key().set_button().set_wheel(); - _is_resized = _is_moved = _is_event = false; - _fps_timer = _fps_frames = _timer = 0; - _fps_fps = 0; - return *this; - } - - //! Wait for any user event occuring on the current display. - CImgDisplay& wait() { - wait(*this); - return *this; - } - - //! Wait for a given number of milliseconds since the last call to wait(). - /** - \param milliseconds Number of milliseconds to wait for. - \note Similar to cimg::wait(). - **/ - CImgDisplay& wait(const unsigned int milliseconds) { - cimg::_wait(milliseconds,_timer); - return *this; - } - - //! Wait for any event occuring on the display \c disp1. - static void wait(CImgDisplay& disp1) { - disp1._is_event = false; - while (!disp1._is_closed && !disp1._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1 or \c disp2. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2) { - disp1._is_event = disp2._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed) && - !disp1._is_event && !disp2._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2 or \c disp3. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3) { - disp1._is_event = disp2._is_event = disp3._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3 or \c disp4. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4 or \c disp5. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp6. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, - CImgDisplay& disp6) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = - disp6._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || - !disp6._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && - !disp6._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp7. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, - CImgDisplay& disp6, CImgDisplay& disp7) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = - disp6._is_event = disp7._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || - !disp6._is_closed || !disp7._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && - !disp6._is_event && !disp7._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp8. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, - CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = - disp6._is_event = disp7._is_event = disp8._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || - !disp6._is_closed || !disp7._is_closed || !disp8._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && - !disp6._is_event && !disp7._is_event && !disp8._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp9. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, - CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = - disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || - !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && - !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event) wait_all(); - } - - //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp10. - static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, - CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9, CImgDisplay& disp10) { - disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = - disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = disp10._is_event = false; - while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || - !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed || !disp10._is_closed) && - !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && - !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event && !disp10._is_event) wait_all(); - } - -#if cimg_display==0 - - //! Wait for any window event occuring in any opened CImgDisplay. - static void wait_all() { - return _no_display_exception(); - } - - //! Render image into internal display buffer. - /** - \param img Input image data to render. - \note - - Convert image data representation into the internal display buffer (architecture-dependent structure). - - The content of the associated window is not modified, until paint() is called. - - Should not be used for common CImgDisplay uses, since display() is more useful. - **/ - template - CImgDisplay& render(const CImg& img) { - return assign(img); - } - - //! Paint internal display buffer on associated window. - /** - \note - - Update the content of the associated window with the internal display buffer, e.g. after a render() call. - - Should not be used for common CImgDisplay uses, since display() is more useful. - **/ - CImgDisplay& paint() { - return assign(); - } - - //! Take a snapshot of the associated window content. - /** - \param[out] img Output snapshot. Can be empty on input. - **/ - template - const CImgDisplay& snapshot(CImg& img) const { - cimg::unused(img); - _no_display_exception(); - return *this; - } -#endif - - // X11-based implementation - //-------------------------- -#if cimg_display==1 - - Atom _wm_window_atom, _wm_protocol_atom; - Window _window, _background_window; - Colormap _colormap; - XImage *_image; - void *_data; -#ifdef cimg_use_xshm - XShmSegmentInfo *_shminfo; -#endif - - static int screen_width() { - Display *const dpy = cimg::X11_attr().display; - int res = 0; - if (!dpy) { - Display *const _dpy = XOpenDisplay(0); - if (!_dpy) - throw CImgDisplayException("CImgDisplay::screen_width(): Failed to open X11 display."); - res = DisplayWidth(_dpy,DefaultScreen(_dpy)); - XCloseDisplay(_dpy); - } else { -#ifdef cimg_use_xrandr - if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) - res = cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].width; - else res = DisplayWidth(dpy,DefaultScreen(dpy)); -#else - res = DisplayWidth(dpy,DefaultScreen(dpy)); -#endif - } - return res; - } - - static int screen_height() { - Display *const dpy = cimg::X11_attr().display; - int res = 0; - if (!dpy) { - Display *const _dpy = XOpenDisplay(0); - if (!_dpy) - throw CImgDisplayException("CImgDisplay::screen_height(): Failed to open X11 display."); - res = DisplayHeight(_dpy,DefaultScreen(_dpy)); - XCloseDisplay(_dpy); - } else { -#ifdef cimg_use_xrandr - if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) - res = cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].height; - else res = DisplayHeight(dpy,DefaultScreen(dpy)); -#else - res = DisplayHeight(dpy,DefaultScreen(dpy)); -#endif - } - return res; - } - - static void wait_all() { - if (!cimg::X11_attr().display) return; - if (cimg::mutex(13,2)) { cimg::sleep(10); return; } - pthread_cond_wait(&cimg::X11_attr().wait_event,&cimg::X11_attr().wait_event_mutex); - cimg::mutex(13,0); - } - - void _handle_events(const XEvent *const pevent) { - Display *const dpy = cimg::X11_attr().display; - XEvent event = *pevent; - switch (event.type) { - case ClientMessage : { - if ((int)event.xclient.message_type==(int)_wm_protocol_atom && - (int)event.xclient.data.l[0]==(int)_wm_window_atom) { - XUnmapWindow(cimg::X11_attr().display,_window); - _is_closed = _is_event = true; - pthread_cond_broadcast(&cimg::X11_attr().wait_event); - } - } break; - case ConfigureNotify : { - while (XCheckWindowEvent(dpy,_window,StructureNotifyMask,&event)) {} - const unsigned int nw = event.xconfigure.width, nh = event.xconfigure.height; - const int nx = event.xconfigure.x, ny = event.xconfigure.y; - if (nw && nh && (nw!=_window_width || nh!=_window_height)) { - _window_width = nw; _window_height = nh; _mouse_x = _mouse_y = -1; - XResizeWindow(dpy,_window,_window_width,_window_height); - _is_resized = _is_event = true; - pthread_cond_broadcast(&cimg::X11_attr().wait_event); - } - if (nx!=_window_x || ny!=_window_y) { - _window_x = nx; _window_y = ny; _is_moved = _is_event = true; - pthread_cond_broadcast(&cimg::X11_attr().wait_event); - } - } break; - case Expose : { - while (XCheckWindowEvent(dpy,_window,ExposureMask,&event)) {} - _paint(false); - if (_is_fullscreen) { - XWindowAttributes attr; - XGetWindowAttributes(dpy,_window,&attr); - while (attr.map_state!=IsViewable) XSync(dpy,0); - XSetInputFocus(dpy,_window,RevertToParent,CurrentTime); - } - } break; - case ButtonPress : { - do { - _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; - if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; - switch (event.xbutton.button) { - case 1 : set_button(1); break; - case 3 : set_button(2); break; - case 2 : set_button(3); break; - } - } while (XCheckWindowEvent(dpy,_window,ButtonPressMask,&event)); - } break; - case ButtonRelease : { - do { - _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; - if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; - switch (event.xbutton.button) { - case 1 : set_button(1,false); break; - case 3 : set_button(2,false); break; - case 2 : set_button(3,false); break; - case 4 : set_wheel(1); break; - case 5 : set_wheel(-1); break; - } - } while (XCheckWindowEvent(dpy,_window,ButtonReleaseMask,&event)); - } break; - case KeyPress : { - char tmp = 0; KeySym ksym; - XLookupString(&event.xkey,&tmp,1,&ksym,0); - set_key((unsigned int)ksym,true); - } break; - case KeyRelease : { - char keys_return[32]; // Check that the key has been physically unpressed. - XQueryKeymap(dpy,keys_return); - const unsigned int kc = event.xkey.keycode, kc1 = kc/8, kc2 = kc%8; - const bool is_key_pressed = kc1>=32?false:(keys_return[kc1]>>kc2)&1; - if (!is_key_pressed) { - char tmp = 0; KeySym ksym; - XLookupString(&event.xkey,&tmp,1,&ksym,0); - set_key((unsigned int)ksym,false); - } - } break; - case EnterNotify: { - while (XCheckWindowEvent(dpy,_window,EnterWindowMask,&event)) {} - _mouse_x = event.xmotion.x; - _mouse_y = event.xmotion.y; - if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; - } break; - case LeaveNotify : { - while (XCheckWindowEvent(dpy,_window,LeaveWindowMask,&event)) {} - _mouse_x = _mouse_y =-1; _is_event = true; - pthread_cond_broadcast(&cimg::X11_attr().wait_event); - } break; - case MotionNotify : { - while (XCheckWindowEvent(dpy,_window,PointerMotionMask,&event)) {} - _mouse_x = event.xmotion.x; - _mouse_y = event.xmotion.y; - if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; - _is_event = true; - pthread_cond_broadcast(&cimg::X11_attr().wait_event); - } break; - } - } - - static void* _events_thread(void *) { // Thread to manage events for all opened display windows. - Display *const dpy = cimg::X11_attr().display; - XEvent event; - pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,0); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0); - for (;;) { - XLockDisplay(dpy); - bool event_flag = XCheckTypedEvent(dpy,ClientMessage,&event); - if (!event_flag) event_flag = XCheckMaskEvent(dpy, - ExposureMask | StructureNotifyMask | ButtonPressMask | - KeyPressMask | PointerMotionMask | EnterWindowMask | LeaveWindowMask| - ButtonReleaseMask | KeyReleaseMask,&event); - if (event_flag) - for (unsigned int i = 0; i_is_closed && event.xany.window==cimg::X11_attr().wins[i]->_window) - cimg::X11_attr().wins[i]->_handle_events(&event); - XUnlockDisplay(dpy); - pthread_testcancel(); - cimg::sleep(8); - } - return 0; - } - - void _set_colormap(Colormap& _colormap, const unsigned int dim) { - XColor colormap[256]; - switch (dim) { - case 1 : { // colormap for greyscale images - for (unsigned int index = 0; index<256; ++index) { - colormap[index].pixel = index; - colormap[index].red = colormap[index].green = colormap[index].blue = (unsigned short)(index<<8); - colormap[index].flags = DoRed | DoGreen | DoBlue; - } - } break; - case 2 : { // colormap for RG images - for (unsigned int index = 0, r = 8; r<256; r+=16) - for (unsigned int g = 8; g<256; g+=16) { - colormap[index].pixel = index; - colormap[index].red = colormap[index].blue = (unsigned short)(r<<8); - colormap[index].green = (unsigned short)(g<<8); - colormap[index++].flags = DoRed | DoGreen | DoBlue; - } - } break; - default : { // colormap for RGB images - for (unsigned int index = 0, r = 16; r<256; r+=32) - for (unsigned int g = 16; g<256; g+=32) - for (unsigned int b = 32; b<256; b+=64) { - colormap[index].pixel = index; - colormap[index].red = (unsigned short)(r<<8); - colormap[index].green = (unsigned short)(g<<8); - colormap[index].blue = (unsigned short)(b<<8); - colormap[index++].flags = DoRed | DoGreen | DoBlue; - } - } - } - XStoreColors(cimg::X11_attr().display,_colormap,colormap,256); - } - - void _map_window() { - Display *const dpy = cimg::X11_attr().display; - bool is_exposed = false, is_mapped = false; - XWindowAttributes attr; - XEvent event; - XMapRaised(dpy,_window); - do { // Wait for the window to be mapped. - XWindowEvent(dpy,_window,StructureNotifyMask | ExposureMask,&event); - switch (event.type) { - case MapNotify : is_mapped = true; break; - case Expose : is_exposed = true; break; - } - } while (!is_exposed || !is_mapped); - do { // Wait for the window to be visible. - XGetWindowAttributes(dpy,_window,&attr); - if (attr.map_state!=IsViewable) { XSync(dpy,0); cimg::sleep(10); } - } while (attr.map_state!=IsViewable); - _window_x = attr.x; - _window_y = attr.y; - } - - void _paint(const bool wait_expose=true) { - if (_is_closed || !_image) return; - Display *const dpy = cimg::X11_attr().display; - if (wait_expose) { // Send an expose event sticked to display window to force repaint. - XEvent event; - event.xexpose.type = Expose; - event.xexpose.serial = 0; - event.xexpose.send_event = 1; - event.xexpose.display = dpy; - event.xexpose.window = _window; - event.xexpose.x = 0; - event.xexpose.y = 0; - event.xexpose.width = width(); - event.xexpose.height = height(); - event.xexpose.count = 0; - XSendEvent(dpy,_window,0,0,&event); - } else { // Repaint directly (may be called from the expose event). - GC gc = DefaultGC(dpy,DefaultScreen(dpy)); -#ifdef cimg_use_xshm - if (_shminfo) XShmPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height,1); - else XPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height); -#else - XPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height); -#endif - } - } - - template - void _resize(T pixel_type, const unsigned int ndimx, const unsigned int ndimy, const bool force_redraw) { - Display *const dpy = cimg::X11_attr().display; - cimg::unused(pixel_type); - -#ifdef cimg_use_xshm - if (_shminfo) { - XShmSegmentInfo *const nshminfo = new XShmSegmentInfo; - XImage *const nimage = XShmCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)), - cimg::X11_attr().nb_bits,ZPixmap,0,nshminfo,ndimx,ndimy); - if (!nimage) { delete nshminfo; return; } - else { - nshminfo->shmid = shmget(IPC_PRIVATE,ndimx*ndimy*sizeof(T),IPC_CREAT | 0777); - if (nshminfo->shmid==-1) { XDestroyImage(nimage); delete nshminfo; return; } - else { - nshminfo->shmaddr = nimage->data = (char*)shmat(nshminfo->shmid,0,0); - if (nshminfo->shmaddr==(char*)-1) { shmctl(nshminfo->shmid,IPC_RMID,0); XDestroyImage(nimage); delete nshminfo; return; } - else { - nshminfo->readOnly = 0; - cimg::X11_attr().is_shm_enabled = true; - XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm); - XShmAttach(dpy,nshminfo); - XFlush(dpy); - XSetErrorHandler(oldXErrorHandler); - if (!cimg::X11_attr().is_shm_enabled) { - shmdt(nshminfo->shmaddr); - shmctl(nshminfo->shmid,IPC_RMID,0); - XDestroyImage(nimage); - delete nshminfo; - return; - } else { - T *const ndata = (T*)nimage->data; - if (force_redraw) _render_resize((T*)_data,_width,_height,ndata,ndimx,ndimy); - else std::memset(ndata,0,sizeof(T)*ndimx*ndimy); - XShmDetach(dpy,_shminfo); - XDestroyImage(_image); - shmdt(_shminfo->shmaddr); - shmctl(_shminfo->shmid,IPC_RMID,0); - delete _shminfo; - _shminfo = nshminfo; - _image = nimage; - _data = (void*)ndata; - } - } - } - } - } else -#endif - { - T *ndata = (T*)std::malloc(ndimx*ndimy*sizeof(T)); - if (force_redraw) _render_resize((T*)_data,_width,_height,ndata,ndimx,ndimy); - else std::memset(ndata,0,sizeof(T)*ndimx*ndimy); - _data = (void*)ndata; - XDestroyImage(_image); - _image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)), - cimg::X11_attr().nb_bits,ZPixmap,0,(char*)_data,ndimx,ndimy,8,0); - } - } - - void _init_fullscreen() { - if (!_is_fullscreen || _is_closed) return; - Display *const dpy = cimg::X11_attr().display; - _background_window = 0; - -#ifdef cimg_use_xrandr - int foo; - if (XRRQueryExtension(dpy,&foo,&foo)) { - XRRRotations(dpy,DefaultScreen(dpy),&cimg::X11_attr().curr_rotation); - if (!cimg::X11_attr().resolutions) { - cimg::X11_attr().resolutions = XRRSizes(dpy,DefaultScreen(dpy),&foo); - cimg::X11_attr().nb_resolutions = (unsigned int)foo; - } - if (cimg::X11_attr().resolutions) { - cimg::X11_attr().curr_resolution = 0; - for (unsigned int i = 0; i=_width && nh>=_height && - nw<=(unsigned int)(cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].width) && - nh<=(unsigned int)(cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].height)) - cimg::X11_attr().curr_resolution = i; - } - if (cimg::X11_attr().curr_resolution>0) { - XRRScreenConfiguration *config = XRRGetScreenInfo(dpy,DefaultRootWindow(dpy)); - XRRSetScreenConfig(dpy,config,DefaultRootWindow(dpy), - cimg::X11_attr().curr_resolution,cimg::X11_attr().curr_rotation,CurrentTime); - XRRFreeScreenConfigInfo(config); - XSync(dpy,0); - } - } - } - if (!cimg::X11_attr().resolutions) - cimg::warn(_cimgdisplay_instance - "init_fullscreen(): Xrandr extension not supported by the X server.", - cimgdisplay_instance); -#endif - - const unsigned int sx = screen_width(), sy = screen_height(); - if (sx==_width && sy==_height) return; - XSetWindowAttributes winattr; - winattr.override_redirect = 1; - _background_window = XCreateWindow(dpy,DefaultRootWindow(dpy),0,0,sx,sy,0,0, - InputOutput,CopyFromParent,CWOverrideRedirect,&winattr); - const unsigned long buf_size = (unsigned long)sx*sy*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); - void *background_data = std::malloc(buf_size); - std::memset(background_data,0,buf_size); - XImage *background_image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits, - ZPixmap,0,(char*)background_data,sx,sy,8,0); - XEvent event; - XSelectInput(dpy,_background_window,StructureNotifyMask); - XMapRaised(dpy,_background_window); - do XWindowEvent(dpy,_background_window,StructureNotifyMask,&event); - while (event.type!=MapNotify); - GC gc = DefaultGC(dpy,DefaultScreen(dpy)); -#ifdef cimg_use_xshm - if (_shminfo) XShmPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy,0); - else XPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy); -#else - XPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy); -#endif - XWindowAttributes attr; - XGetWindowAttributes(dpy,_background_window,&attr); - while (attr.map_state!=IsViewable) XSync(dpy,0); - XDestroyImage(background_image); - } - - void _desinit_fullscreen() { - if (!_is_fullscreen) return; - Display *const dpy = cimg::X11_attr().display; - XUngrabKeyboard(dpy,CurrentTime); -#ifdef cimg_use_xrandr - if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) { - XRRScreenConfiguration *config = XRRGetScreenInfo(dpy,DefaultRootWindow(dpy)); - XRRSetScreenConfig(dpy,config,DefaultRootWindow(dpy),0,cimg::X11_attr().curr_rotation,CurrentTime); - XRRFreeScreenConfigInfo(config); - XSync(dpy,0); - cimg::X11_attr().curr_resolution = 0; - } -#endif - if (_background_window) XDestroyWindow(dpy,_background_window); - _background_window = 0; - _is_fullscreen = false; - } - - static int _assign_xshm(Display *dpy, XErrorEvent *error) { - cimg::unused(dpy,error); - cimg::X11_attr().is_shm_enabled = false; - return 0; - } - - void _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - cimg::mutex(14); - - // Allocate space for window title - const char *const nptitle = ptitle?ptitle:""; - const unsigned int s = std::strlen(nptitle) + 1; - char *const tmp_title = s?new char[s]:0; - if (s) std::memcpy(tmp_title,nptitle,s*sizeof(char)); - - // Destroy previous display window if existing - if (!is_empty()) assign(); - - // Open X11 display and retrieve graphical properties. - Display* &dpy = cimg::X11_attr().display; - if (!dpy) { - dpy = XOpenDisplay(0); - if (!dpy) - throw CImgDisplayException(_cimgdisplay_instance - "assign(): Failed to open X11 display.", - cimgdisplay_instance); - - cimg::X11_attr().nb_bits = DefaultDepth(dpy,DefaultScreen(dpy)); - if (cimg::X11_attr().nb_bits!=8 && cimg::X11_attr().nb_bits!=16 && cimg::X11_attr().nb_bits!=24 && cimg::X11_attr().nb_bits!=32) - throw CImgDisplayException(_cimgdisplay_instance - "assign(): Invalid %u bits screen mode detected " - "(only 8, 16, 24 and 32 bits modes are managed).", - cimgdisplay_instance, - cimg::X11_attr().nb_bits); - XVisualInfo vtemplate; - vtemplate.visualid = XVisualIDFromVisual(DefaultVisual(dpy,DefaultScreen(dpy))); - int nb_visuals; - XVisualInfo *vinfo = XGetVisualInfo(dpy,VisualIDMask,&vtemplate,&nb_visuals); - if (vinfo && vinfo->red_maskblue_mask) cimg::X11_attr().is_blue_first = true; - cimg::X11_attr().byte_order = ImageByteOrder(dpy); - XFree(vinfo); - - XLockDisplay(dpy); - cimg::X11_attr().events_thread = new pthread_t; - pthread_create(cimg::X11_attr().events_thread,0,_events_thread,0); - } else XLockDisplay(dpy); - - // Set display variables. - _width = cimg::min(dimw,(unsigned int)screen_width()); - _height = cimg::min(dimh,(unsigned int)screen_height()); - _normalization = normalization_type<4?normalization_type:3; - _is_fullscreen = fullscreen_flag; - _window_x = _window_y = 0; - _is_closed = closed_flag; - _title = tmp_title; - flush(); - - // Create X11 window (and LUT, if 8bits display) - if (_is_fullscreen) { - if (!_is_closed) _init_fullscreen(); - const unsigned int sx = screen_width(), sy = screen_height(); - XSetWindowAttributes winattr; - winattr.override_redirect = 1; - _window = XCreateWindow(dpy,DefaultRootWindow(dpy),(sx-_width)/2,(sy-_height)/2,_width,_height,0,0, - InputOutput,CopyFromParent,CWOverrideRedirect,&winattr); - } else - _window = XCreateSimpleWindow(dpy,DefaultRootWindow(dpy),0,0,_width,_height,0,0L,0L); - - XSelectInput(dpy,_window, - ExposureMask | StructureNotifyMask | ButtonPressMask | KeyPressMask | PointerMotionMask | - EnterWindowMask | LeaveWindowMask | ButtonReleaseMask | KeyReleaseMask); - - XStoreName(dpy,_window,_title?_title:" "); - if (cimg::X11_attr().nb_bits==8) { - _colormap = XCreateColormap(dpy,_window,DefaultVisual(dpy,DefaultScreen(dpy)),AllocAll); - _set_colormap(_colormap,3); - XSetWindowColormap(dpy,_window,_colormap); - } - - static const char *const _window_class = cimg_appname; - XClassHint *const window_class = XAllocClassHint(); - window_class->res_name = (char*)_window_class; - window_class->res_class = (char*)_window_class; - XSetClassHint(dpy,_window,window_class); - XFree(window_class); - - _window_width = _width; - _window_height = _height; - - // Create XImage -#ifdef cimg_use_xshm - _shminfo = 0; - if (XShmQueryExtension(dpy)) { - _shminfo = new XShmSegmentInfo; - _image = XShmCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits,ZPixmap,0,_shminfo,_width,_height); - if (!_image) { delete _shminfo; _shminfo = 0; } - else { - _shminfo->shmid = shmget(IPC_PRIVATE,_image->bytes_per_line*_image->height,IPC_CREAT|0777); - if (_shminfo->shmid==-1) { XDestroyImage(_image); delete _shminfo; _shminfo = 0; } - else { - _shminfo->shmaddr = _image->data = (char*)(_data = shmat(_shminfo->shmid,0,0)); - if (_shminfo->shmaddr==(char*)-1) { shmctl(_shminfo->shmid,IPC_RMID,0); XDestroyImage(_image); delete _shminfo; _shminfo = 0; } - else { - _shminfo->readOnly = 0; - cimg::X11_attr().is_shm_enabled = true; - XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm); - XShmAttach(dpy,_shminfo); - XSync(dpy,0); - XSetErrorHandler(oldXErrorHandler); - if (!cimg::X11_attr().is_shm_enabled) { - shmdt(_shminfo->shmaddr); shmctl(_shminfo->shmid,IPC_RMID,0); XDestroyImage(_image); delete _shminfo; _shminfo = 0; - } - } - } - } - } - if (!_shminfo) -#endif - { - const unsigned long buf_size = (unsigned long)_width*_height*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); - _data = std::malloc(buf_size); - _image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits,ZPixmap,0,(char*)_data,_width,_height,8,0); - } - - _wm_window_atom = XInternAtom(dpy,"WM_DELETE_WINDOW",0); - _wm_protocol_atom = XInternAtom(dpy,"WM_PROTOCOLS",0); - XSetWMProtocols(dpy,_window,&_wm_window_atom,1); - - if (_is_fullscreen) XGrabKeyboard(dpy,_window,1,GrabModeAsync,GrabModeAsync,CurrentTime); - cimg::X11_attr().wins[cimg::X11_attr().nb_wins++]=this; - if (!_is_closed) _map_window(); else { _window_x = _window_y = cimg::type::min(); } - XUnlockDisplay(dpy); - cimg::mutex(14,0); - } - - CImgDisplay& assign() { - if (is_empty()) return flush(); - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - - // Remove display window from event thread list. - unsigned int i; - for (i = 0; ishmaddr); - shmctl(_shminfo->shmid,IPC_RMID,0); - delete _shminfo; - _shminfo = 0; - } else -#endif - XDestroyImage(_image); - _data = 0; _image = 0; - if (cimg::X11_attr().nb_bits==8) XFreeColormap(dpy,_colormap); - _colormap = 0; - XSync(dpy,0); - - // Reset display variables. - delete[] _title; - _width = _height = _normalization = _window_width = _window_height = 0; - _window_x = _window_y = 0; - _is_fullscreen = false; - _is_closed = true; - _min = _max = 0; - _title = 0; - flush(); - - XUnlockDisplay(dpy); - return *this; - } - - CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!dimw || !dimh) return assign(); - _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag); - _min = _max = 0; - std::memset(_data,0,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): - (cimg::X11_attr().nb_bits==16?sizeof(unsigned short):sizeof(unsigned int)))*(unsigned long)_width*_height); - return paint(); - } - - template - CImgDisplay& assign(const CImg& img, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!img) return assign(); - CImg tmp; - const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); - if (_normalization==2) _min = (float)nimg.min_max(_max); - return render(nimg).paint(); - } - - template - CImgDisplay& assign(const CImgList& list, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!list) return assign(); - CImg tmp; - const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); - if (_normalization==2) _min = (float)nimg.min_max(_max); - return render(nimg).paint(); - } - - CImgDisplay& assign(const CImgDisplay& disp) { - if (!disp) return assign(); - _assign(disp._width,disp._height,disp._title,disp._normalization,disp._is_fullscreen,disp._is_closed); - std::memcpy(_data,disp._data,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): - cimg::X11_attr().nb_bits==16?sizeof(unsigned short): - sizeof(unsigned int))*(unsigned long)_width*_height); - return paint(); - } - - CImgDisplay& resize(const int nwidth, const int nheight, const bool force_redraw=true) { - if (!nwidth || !nheight || (is_empty() && (nwidth<0 || nheight<0))) return assign(); - if (is_empty()) return assign(nwidth,nheight); - Display *const dpy = cimg::X11_attr().display; - const unsigned int - tmpdimx = (nwidth>0)?nwidth:(-nwidth*width()/100), - tmpdimy = (nheight>0)?nheight:(-nheight*height()/100), - dimx = tmpdimx?tmpdimx:1, - dimy = tmpdimy?tmpdimy:1; - XLockDisplay(dpy); - if (_window_width!=dimx || _window_height!=dimy) { - XWindowAttributes attr; - for (unsigned int i = 0; i<10; ++i) { - XResizeWindow(dpy,_window,dimx,dimy); - XGetWindowAttributes(dpy,_window,&attr); - if (attr.width==(int)dimx && attr.height==(int)dimy) break; - cimg::wait(5); - } - } - if (_width!=dimx || _height!=dimy) switch (cimg::X11_attr().nb_bits) { - case 8 : { unsigned char pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; - case 16 : { unsigned short pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; - default : { unsigned int pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } - } - _window_width = _width = dimx; _window_height = _height = dimy; - _is_resized = false; - XUnlockDisplay(dpy); - if (_is_fullscreen) move((screen_width()-_width)/2,(screen_height()-_height)/2); - if (force_redraw) return paint(); - return *this; - } - - CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { - if (is_empty()) return *this; - if (force_redraw) { - const unsigned long buf_size = (unsigned long)_width*_height*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); - void *image_data = std::malloc(buf_size); - std::memcpy(image_data,_data,buf_size); - assign(_width,_height,_title,_normalization,!_is_fullscreen,false); - std::memcpy(_data,image_data,buf_size); - std::free(image_data); - return paint(); - } - return assign(_width,_height,_title,_normalization,!_is_fullscreen,false); - } - - CImgDisplay& show() { - if (is_empty() || !_is_closed) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - if (_is_fullscreen) _init_fullscreen(); - _map_window(); - _is_closed = false; - XUnlockDisplay(dpy); - return paint(); - } - - CImgDisplay& close() { - if (is_empty() || _is_closed) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - if (_is_fullscreen) _desinit_fullscreen(); - XUnmapWindow(dpy,_window); - _window_x = _window_y = -1; - _is_closed = true; - XUnlockDisplay(dpy); - return *this; - } - - CImgDisplay& move(const int posx, const int posy) { - if (is_empty()) return *this; - show(); - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - XMoveWindow(dpy,_window,posx,posy); - _window_x = posx; _window_y = posy; - _is_moved = false; - XUnlockDisplay(dpy); - return paint(); - } - - CImgDisplay& show_mouse() { - if (is_empty()) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - XUndefineCursor(dpy,_window); - XUnlockDisplay(dpy); - return *this; - } - - CImgDisplay& hide_mouse() { - if (is_empty()) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - const char pix_data[8] = { 0 }; - XColor col; - col.red = col.green = col.blue = 0; - Pixmap pix = XCreateBitmapFromData(dpy,_window,pix_data,8,8); - Cursor cur = XCreatePixmapCursor(dpy,pix,pix,&col,&col,0,0); - XFreePixmap(dpy,pix); - XDefineCursor(dpy,_window,cur); - XUnlockDisplay(dpy); - return *this; - } - - CImgDisplay& set_mouse(const int posx, const int posy) { - if (is_empty() || _is_closed) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - XWarpPointer(dpy,0L,_window,0,0,0,0,posx,posy); - _mouse_x = posx; _mouse_y = posy; - _is_moved = false; - XSync(dpy,0); - XUnlockDisplay(dpy); - return *this; - } - - CImgDisplay& set_title(const char *const format, ...) { - if (is_empty()) return *this; - char tmp[1024] = { 0 }; - va_list ap; - va_start(ap, format); - cimg_vsnprintf(tmp,sizeof(tmp),format,ap); - va_end(ap); - if (!std::strcmp(_title,tmp)) return *this; - delete[] _title; - const unsigned int s = std::strlen(tmp) + 1; - _title = new char[s]; - std::memcpy(_title,tmp,s*sizeof(char)); - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - XStoreName(dpy,_window,tmp); - XUnlockDisplay(dpy); - return *this; - } - - template - CImgDisplay& display(const CImg& img) { - if (!img) - throw CImgArgumentException(_cimgdisplay_instance - "display(): Empty specified image.", - cimgdisplay_instance); - if (is_empty()) return assign(img); - return render(img).paint(false); - } - - CImgDisplay& paint(const bool wait_expose=true) { - if (is_empty()) return *this; - Display *const dpy = cimg::X11_attr().display; - XLockDisplay(dpy); - _paint(wait_expose); - XUnlockDisplay(dpy); - return *this; - } - - template - CImgDisplay& render(const CImg& img, const bool flag8=false) { - if (!img) - throw CImgArgumentException(_cimgdisplay_instance - "render(): Empty specified image.", - cimgdisplay_instance); - if (is_empty()) return *this; - if (img._depth!=1) return render(img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - if (cimg::X11_attr().nb_bits==8 && (img._width!=_width || img._height!=_height)) return render(img.get_resize(_width,_height,1,-100,1)); - if (cimg::X11_attr().nb_bits==8 && !flag8 && img._spectrum==3) { - static const CImg::ucharT> default_colormap = CImg::ucharT>::default_LUT256(); - return render(img.get_index(default_colormap,1,false)); - } - - Display *const dpy = cimg::X11_attr().display; - const T - *data1 = img._data, - *data2 = (img._spectrum>1)?img.data(0,0,0,1):data1, - *data3 = (img._spectrum>2)?img.data(0,0,0,2):data1; - - if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); - XLockDisplay(dpy); - - if (!_normalization || (_normalization==3 && cimg::type::string()==cimg::type::string())) { - _min = _max = 0; - switch (cimg::X11_attr().nb_bits) { - case 8 : { // 256 colormap, no normalization - _set_colormap(_colormap,img._spectrum); - unsigned char *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data:new unsigned char[(unsigned long)img._width*img._height]; - unsigned char *ptrd = (unsigned char*)ndata; - switch (img._spectrum) { - case 1 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) (*ptrd++) = (unsigned char)*(data1++); - break; - case 2 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char R = (unsigned char)*(data1++), G = (unsigned char)*(data2++); - (*ptrd++) = (R&0xf0) | (G>>4); - } break; - default : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char R = (unsigned char)*(data1++), G = (unsigned char)*(data2++), B = (unsigned char)*(data3++); - (*ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); delete[] ndata; } - } break; - case 16 : { // 16 bits colors, no normalization - unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data:new unsigned short[(unsigned long)img._width*img._height]; - unsigned char *ptrd = (unsigned char*)ndata; - const unsigned int M = 248; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)*(data1++), G = val>>2; - *(ptrd++) = (val&M) | (G>>3); - *(ptrd++) = (G<<5) | (G>>1); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)*(data1++), G = val>>2; - *(ptrd++) = (G<<5) | (G>>1); - *(ptrd++) = (val&M) | (G>>3); - } - break; - case 2 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)*(data2++)>>2; - *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); - *(ptrd++) = (G<<5); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)*(data2++)>>2; - *(ptrd++) = (G<<5); - *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); - } - break; - default : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)*(data2++)>>2; - *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); - *(ptrd++) = (G<<5) | ((unsigned char)*(data3++)>>3); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)*(data2++)>>2; - *(ptrd++) = (G<<5) | ((unsigned char)*(data3++)>>3); - *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); delete[] ndata; } - } break; - default : { // 24 bits colors, no normalization - unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data:new unsigned int[(unsigned long)img._width*img._height]; - if (sizeof(int)==4) { // 32 bits int uses optimized version - unsigned int *ptrd = ndata; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)*(data1++); - *(ptrd++) = (val<<16) | (val<<8) | val; - } - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)*(data1++); - *(ptrd++) = (val<<16) | (val<<8) | val; - } - break; - case 2 : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8); - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data2++)<<16) | ((unsigned char)*(data1++)<<8); - break; - default : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8) | (unsigned char)*(data3++); - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data3++)<<24) | ((unsigned char)*(data2++)<<16) | ((unsigned char)*(data1++)<<8); - } - } else { - unsigned char *ptrd = (unsigned char*)ndata; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(ptrd++) = 0; - *(ptrd++) = (unsigned char)*(data1++); - *(ptrd++) = 0; - *(ptrd++) = 0; - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(ptrd++) = 0; - *(ptrd++) = 0; - *(ptrd++) = (unsigned char)*(data1++); - *(ptrd++) = 0; - } - break; - case 2 : - if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(ptrd++) = 0; - *(ptrd++) = (unsigned char)*(data2++); - *(ptrd++) = (unsigned char)*(data1++); - *(ptrd++) = 0; - } - break; - default : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(ptrd++) = 0; - *(ptrd++) = (unsigned char)*(data1++); - *(ptrd++) = (unsigned char)*(data2++); - *(ptrd++) = (unsigned char)*(data3++); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(ptrd++) = (unsigned char)*(data3++); - *(ptrd++) = (unsigned char)*(data2++); - *(ptrd++) = (unsigned char)*(data1++); - *(ptrd++) = 0; - } - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); delete[] ndata; } - } - } - } else { - if (_normalization==3) { - if (cimg::type::is_float()) _min = (float)img.min_max(_max); - else { _min = (float)cimg::type::min(); _max = (float)cimg::type::max(); } - } else if ((_min>_max) || _normalization==1) _min = (float)img.min_max(_max); - const float delta = _max - _min, mm = 255/(delta?delta:1.0f); - switch (cimg::X11_attr().nb_bits) { - case 8 : { // 256 colormap, with normalization - _set_colormap(_colormap,img._spectrum); - unsigned char *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data:new unsigned char[(unsigned long)img._width*img._height]; - unsigned char *ptrd = (unsigned char*)ndata; - switch (img._spectrum) { - case 1 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char R = (unsigned char)((*(data1++)-_min)*mm); - *(ptrd++) = R; - } break; - case 2 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (R&0xf0) | (G>>4); - } break; - default : - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm), - B = (unsigned char)((*(data3++)-_min)*mm); - *(ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); delete[] ndata; } - } break; - case 16 : { // 16 bits colors, with normalization - unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data:new unsigned short[(unsigned long)img._width*img._height]; - unsigned char *ptrd = (unsigned char*)ndata; - const unsigned int M = 248; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; - *(ptrd++) = (val&M) | (G>>3); - *(ptrd++) = (G<<5) | (val>>3); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; - *(ptrd++) = (G<<5) | (val>>3); - *(ptrd++) = (val&M) | (G>>3); - } - break; - case 2 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); - *(ptrd++) = (G<<5); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = (G<<5); - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); - } - break; - default : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); - *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); delete[] ndata; } - } break; - default : { // 24 bits colors, with normalization - unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data:new unsigned int[(unsigned long)img._width*img._height]; - if (sizeof(int)==4) { // 32 bits int uses optimized version - unsigned int *ptrd = ndata; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); - *(ptrd++) = (val<<16) | (val<<8) | val; - } - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); - *(ptrd++) = (val<<24) | (val<<16) | (val<<8); - } - break; - case 2 : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = - ((unsigned char)((*(data1++)-_min)*mm)<<16) | - ((unsigned char)((*(data2++)-_min)*mm)<<8); - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = - ((unsigned char)((*(data2++)-_min)*mm)<<16) | - ((unsigned char)((*(data1++)-_min)*mm)<<8); - break; - default : - if (cimg::X11_attr().byte_order==cimg::endianness()) - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = - ((unsigned char)((*(data1++)-_min)*mm)<<16) | - ((unsigned char)((*(data2++)-_min)*mm)<<8) | - (unsigned char)((*(data3++)-_min)*mm); - else - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = - ((unsigned char)((*(data3++)-_min)*mm)<<24) | - ((unsigned char)((*(data2++)-_min)*mm)<<16) | - ((unsigned char)((*(data1++)-_min)*mm)<<8); - } - } else { - unsigned char *ptrd = (unsigned char*)ndata; - switch (img._spectrum) { - case 1 : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = 0; - (*ptrd++) = val; - (*ptrd++) = val; - (*ptrd++) = val; - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = val; - (*ptrd++) = val; - (*ptrd++) = val; - (*ptrd++) = 0; - } - break; - case 2 : - if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - (*ptrd++) = 0; - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = 0; - } - break; - default : - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - (*ptrd++) = 0; - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = 0; - } - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); delete[] ndata; } - } - } - } - XUnlockDisplay(dpy); - return *this; - } - - template - const CImgDisplay& snapshot(CImg& img) const { - if (is_empty()) { img.assign(); return *this; } - const unsigned char *ptrs = (unsigned char*)_data; - img.assign(_width,_height,1,3); - T - *data1 = img.data(0,0,0,0), - *data2 = img.data(0,0,0,1), - *data3 = img.data(0,0,0,2); - if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); - switch (cimg::X11_attr().nb_bits) { - case 8 : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = *(ptrs++); - *(data1++) = (T)(val&0xe0); - *(data2++) = (T)((val&0x1c)<<3); - *(data3++) = (T)(val<<6); - } - } break; - case 16 : { - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val0 = *(ptrs++), val1 = *(ptrs++); - *(data1++) = (T)(val0&0xf8); - *(data2++) = (T)((val0<<5) | ((val1&0xe0)>>5)); - *(data3++) = (T)(val1<<3); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned short val0 = *(ptrs++), val1 = *(ptrs++); - *(data1++) = (T)(val1&0xf8); - *(data2++) = (T)((val1<<5) | ((val0&0xe0)>>5)); - *(data3++) = (T)(val0<<3); - } - } break; - default : { - if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - ++ptrs; - *(data1++) = (T)*(ptrs++); - *(data2++) = (T)*(ptrs++); - *(data3++) = (T)*(ptrs++); - } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - *(data3++) = (T)*(ptrs++); - *(data2++) = (T)*(ptrs++); - *(data1++) = (T)*(ptrs++); - ++ptrs; - } - } - } - return *this; - } - - // Windows-based implementation. - //------------------------------- -#elif cimg_display==2 - - bool _is_mouse_tracked, _is_cursor_visible; - HANDLE _thread, _is_created, _mutex; - HWND _window, _background_window; - CLIENTCREATESTRUCT _ccs; - unsigned int *_data; - DEVMODE _curr_mode; - BITMAPINFO _bmi; - HDC _hdc; - - static int screen_width() { - DEVMODE mode; - mode.dmSize = sizeof(DEVMODE); - mode.dmDriverExtra = 0; - EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&mode); - return mode.dmPelsWidth; - } - - static int screen_height() { - DEVMODE mode; - mode.dmSize = sizeof(DEVMODE); - mode.dmDriverExtra = 0; - EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&mode); - return mode.dmPelsHeight; - } - - static void wait_all() { - WaitForSingleObject(cimg::Win32_attr().wait_event,INFINITE); - } - - static LRESULT APIENTRY _handle_events(HWND window, UINT msg, WPARAM wParam, LPARAM lParam) { -#ifdef _WIN64 - CImgDisplay *const disp = (CImgDisplay*)GetWindowLongPtr(window,GWLP_USERDATA); -#else - CImgDisplay *const disp = (CImgDisplay*)GetWindowLong(window,GWL_USERDATA); -#endif - MSG st_msg; - switch (msg) { - case WM_CLOSE : - disp->_mouse_x = disp->_mouse_y = -1; - disp->_window_x = disp->_window_y = 0; - disp->set_button().set_key(0).set_key(0,false)._is_closed = true; - ReleaseMutex(disp->_mutex); - ShowWindow(disp->_window,SW_HIDE); - disp->_is_event = true; - SetEvent(cimg::Win32_attr().wait_event); - return 0; - case WM_SIZE : { - while (PeekMessage(&st_msg,window,WM_SIZE,WM_SIZE,PM_REMOVE)) {} - WaitForSingleObject(disp->_mutex,INFINITE); - const unsigned int nw = LOWORD(lParam),nh = HIWORD(lParam); - if (nw && nh && (nw!=disp->_width || nh!=disp->_height)) { - disp->_window_width = nw; - disp->_window_height = nh; - disp->_mouse_x = disp->_mouse_y = -1; - disp->_is_resized = disp->_is_event = true; - SetEvent(cimg::Win32_attr().wait_event); - } - ReleaseMutex(disp->_mutex); - } break; - case WM_MOVE : { - while (PeekMessage(&st_msg,window,WM_SIZE,WM_SIZE,PM_REMOVE)) {} - WaitForSingleObject(disp->_mutex,INFINITE); - const int nx = (int)(short)(LOWORD(lParam)), ny = (int)(short)(HIWORD(lParam)); - if (nx!=disp->_window_x || ny!=disp->_window_y) { - disp->_window_x = nx; - disp->_window_y = ny; - disp->_is_moved = disp->_is_event = true; - SetEvent(cimg::Win32_attr().wait_event); - } - ReleaseMutex(disp->_mutex); - } break; - case WM_PAINT : - disp->paint(); - break; - case WM_KEYDOWN : - disp->set_key((unsigned int)wParam); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_KEYUP : - disp->set_key((unsigned int)wParam,false); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_MOUSEMOVE : { - while (PeekMessage(&st_msg,window,WM_MOUSEMOVE,WM_MOUSEMOVE,PM_REMOVE)) {} - disp->_mouse_x = LOWORD(lParam); - disp->_mouse_y = HIWORD(lParam); -#if (_WIN32_WINNT>=0x0400) && !defined(NOTRACKMOUSEEVENT) - if (!disp->_is_mouse_tracked) { - TRACKMOUSEEVENT tme; - tme.cbSize = sizeof(TRACKMOUSEEVENT); - tme.dwFlags = TME_LEAVE; - tme.hwndTrack = disp->_window; - if (TrackMouseEvent(&tme)) disp->_is_mouse_tracked = true; - } -#endif - if (disp->_mouse_x<0 || disp->_mouse_y<0 || disp->_mouse_x>=disp->width() || disp->_mouse_y>=disp->height()) - disp->_mouse_x = disp->_mouse_y = -1; - disp->_is_event = true; - SetEvent(cimg::Win32_attr().wait_event); - } break; - case WM_MOUSELEAVE : { - disp->_mouse_x = disp->_mouse_y = -1; - disp->_is_mouse_tracked = false; - } break; - case WM_LBUTTONDOWN : - disp->set_button(1); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_RBUTTONDOWN : - disp->set_button(2); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_MBUTTONDOWN : - disp->set_button(3); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_LBUTTONUP : - disp->set_button(1,false); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_RBUTTONUP : - disp->set_button(2,false); - SetEvent(cimg::Win32_attr().wait_event); - break; - case WM_MBUTTONUP : - disp->set_button(3,false); - SetEvent(cimg::Win32_attr().wait_event); - break; - case 0x020A : // WM_MOUSEWHEEL: - disp->set_wheel((int)((short)HIWORD(wParam))/120); - SetEvent(cimg::Win32_attr().wait_event); - case WM_SETCURSOR : - if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); - else while (ShowCursor(FALSE)>=0); - break; - } - return DefWindowProc(window,msg,wParam,lParam); - } - - static DWORD WINAPI _events_thread(void* arg) { - CImgDisplay *const disp = (CImgDisplay*)(((void**)arg)[0]); - const char *const title = (const char*)(((void**)arg)[1]); - MSG msg; - delete[] (void**)arg; - disp->_bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - disp->_bmi.bmiHeader.biWidth = disp->width(); - disp->_bmi.bmiHeader.biHeight = -disp->height(); - disp->_bmi.bmiHeader.biPlanes = 1; - disp->_bmi.bmiHeader.biBitCount = 32; - disp->_bmi.bmiHeader.biCompression = BI_RGB; - disp->_bmi.bmiHeader.biSizeImage = 0; - disp->_bmi.bmiHeader.biXPelsPerMeter = 1; - disp->_bmi.bmiHeader.biYPelsPerMeter = 1; - disp->_bmi.bmiHeader.biClrUsed = 0; - disp->_bmi.bmiHeader.biClrImportant = 0; - disp->_data = new unsigned int[(unsigned long)disp->_width*disp->_height]; - if (!disp->_is_fullscreen) { // Normal window - RECT rect; - rect.left = rect.top = 0; rect.right = disp->_width-1; rect.bottom = disp->_height-1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int - border1 = (rect.right - rect.left + 1 - disp->_width)/2, - border2 = rect.bottom - rect.top + 1 - disp->_height - border1; - disp->_window = CreateWindowA("MDICLIENT",title?title:" ", - WS_OVERLAPPEDWINDOW | (disp->_is_closed?0:WS_VISIBLE), CW_USEDEFAULT,CW_USEDEFAULT, - disp->_width + 2*border1, disp->_height + border1 + border2, - 0,0,0,&(disp->_ccs)); - if (!disp->_is_closed) { - GetWindowRect(disp->_window,&rect); - disp->_window_x = rect.left + border1; - disp->_window_y = rect.top + border2; - } else disp->_window_x = disp->_window_y = 0; - } else { // Fullscreen window - const unsigned int sx = screen_width(), sy = screen_height(); - disp->_window = CreateWindowA("MDICLIENT",title?title:" ", - WS_POPUP | (disp->_is_closed?0:WS_VISIBLE), (sx-disp->_width)/2, (sy-disp->_height)/2, - disp->_width,disp->_height,0,0,0,&(disp->_ccs)); - disp->_window_x = disp->_window_y = 0; - } - SetForegroundWindow(disp->_window); - disp->_hdc = GetDC(disp->_window); - disp->_window_width = disp->_width; - disp->_window_height = disp->_height; - disp->flush(); -#ifdef _WIN64 - SetWindowLongPtr(disp->_window,GWLP_USERDATA,(LONG_PTR)disp); - SetWindowLongPtr(disp->_window,GWLP_WNDPROC,(LONG_PTR)_handle_events); -#else - SetWindowLong(disp->_window,GWL_USERDATA,(LONG)disp); - SetWindowLong(disp->_window,GWL_WNDPROC,(LONG)_handle_events); -#endif - SetEvent(disp->_is_created); - while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg); - return 0; - } - - CImgDisplay& _update_window_pos() { - if (_is_closed) _window_x = _window_y = -1; - else { - RECT rect; - rect.left = rect.top = 0; rect.right = _width-1; rect.bottom = _height-1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int - border1 = (rect.right - rect.left + 1 - _width)/2, - border2 = rect.bottom - rect.top + 1 - _height - border1; - GetWindowRect(_window,&rect); - _window_x = rect.left + border1; - _window_y = rect.top + border2; - } - return *this; - } - - void _init_fullscreen() { - _background_window = 0; - if (!_is_fullscreen || _is_closed) _curr_mode.dmSize = 0; - else { - DEVMODE mode; - unsigned int imode = 0, ibest = 0, bestbpp = 0, bw = ~0U, bh = ~0U; - for (mode.dmSize = sizeof(DEVMODE), mode.dmDriverExtra = 0; EnumDisplaySettings(0,imode,&mode); ++imode) { - const unsigned int nw = mode.dmPelsWidth, nh = mode.dmPelsHeight; - if (nw>=_width && nh>=_height && mode.dmBitsPerPel>=bestbpp && nw<=bw && nh<=bh) { - bestbpp = mode.dmBitsPerPel; - ibest = imode; - bw = nw; bh = nh; - } - } - if (bestbpp) { - _curr_mode.dmSize = sizeof(DEVMODE); _curr_mode.dmDriverExtra = 0; - EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&_curr_mode); - EnumDisplaySettings(0,ibest,&mode); - ChangeDisplaySettings(&mode,0); - } else _curr_mode.dmSize = 0; - - const unsigned int sx = screen_width(), sy = screen_height(); - if (sx!=_width || sy!=_height) { - CLIENTCREATESTRUCT background_ccs; - _background_window = CreateWindowA("MDICLIENT","",WS_POPUP | WS_VISIBLE, 0,0,sx,sy,0,0,0,&background_ccs); - SetForegroundWindow(_background_window); - } - } - } - - void _desinit_fullscreen() { - if (!_is_fullscreen) return; - if (_background_window) DestroyWindow(_background_window); - _background_window = 0; - if (_curr_mode.dmSize) ChangeDisplaySettings(&_curr_mode,0); - _is_fullscreen = false; - } - - CImgDisplay& _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - - // Allocate space for window title - const char *const nptitle = ptitle?ptitle:""; - const unsigned int s = (unsigned int)std::strlen(nptitle) + 1; - char *const tmp_title = s?new char[s]:0; - if (s) std::memcpy(tmp_title,nptitle,s*sizeof(char)); - - // Destroy previous window if existing - if (!is_empty()) assign(); - - // Set display variables - _width = cimg::min(dimw,(unsigned int)screen_width()); - _height = cimg::min(dimh,(unsigned int)screen_height()); - _normalization = normalization_type<4?normalization_type:3; - _is_fullscreen = fullscreen_flag; - _window_x = _window_y = 0; - _is_closed = closed_flag; - _is_cursor_visible = true; - _is_mouse_tracked = false; - _title = tmp_title; - flush(); - if (_is_fullscreen) _init_fullscreen(); - - // Create event thread - void *const arg = (void*)(new void*[2]); - ((void**)arg)[0] = (void*)this; - ((void**)arg)[1] = (void*)_title; - _mutex = CreateMutex(0,FALSE,0); - _is_created = CreateEvent(0,FALSE,FALSE,0); - _thread = CreateThread(0,0,_events_thread,arg,0,0); - WaitForSingleObject(_is_created,INFINITE); - return *this; - } - - CImgDisplay& assign() { - if (is_empty()) return flush(); - DestroyWindow(_window); - TerminateThread(_thread,0); - delete[] _data; - delete[] _title; - _data = 0; - _title = 0; - if (_is_fullscreen) _desinit_fullscreen(); - _width = _height = _normalization = _window_width = _window_height = 0; - _window_x = _window_y = 0; - _is_fullscreen = false; - _is_closed = true; - _min = _max = 0; - _title = 0; - flush(); - return *this; - } - - CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!dimw || !dimh) return assign(); - _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag); - _min = _max = 0; - std::memset(_data,0,sizeof(unsigned int)*_width*_height); - return paint(); - } - - template - CImgDisplay& assign(const CImg& img, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!img) return assign(); - CImg tmp; - const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); - if (_normalization==2) _min = (float)nimg.min_max(_max); - return display(nimg); - } - - template - CImgDisplay& assign(const CImgList& list, const char *const title=0, - const unsigned int normalization_type=3, - const bool fullscreen_flag=false, const bool closed_flag=false) { - if (!list) return assign(); - CImg tmp; - const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); - if (_normalization==2) _min = (float)nimg.min_max(_max); - return display(nimg); - } - - CImgDisplay& assign(const CImgDisplay& disp) { - if (!disp) return assign(); - _assign(disp._width,disp._height,disp._title,disp._normalization,disp._is_fullscreen,disp._is_closed); - std::memcpy(_data,disp._data,sizeof(unsigned int)*_width*_height); - return paint(); - } - - CImgDisplay& resize(const int nwidth, const int nheight, const bool force_redraw=true) { - if (!nwidth || !nheight || (is_empty() && (nwidth<0 || nheight<0))) return assign(); - if (is_empty()) return assign(nwidth,nheight); - const unsigned int - tmpdimx = (nwidth>0)?nwidth:(-nwidth*_width/100), - tmpdimy = (nheight>0)?nheight:(-nheight*_height/100), - dimx = tmpdimx?tmpdimx:1, - dimy = tmpdimy?tmpdimy:1; - if (_window_width!=dimx || _window_height!=dimy) { - RECT rect; rect.left = rect.top = 0; rect.right = dimx - 1; rect.bottom = dimy - 1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int cwidth = rect.right - rect.left + 1, cheight = rect.bottom - rect.top + 1; - SetWindowPos(_window,0,0,0,cwidth,cheight,SWP_NOMOVE | SWP_NOZORDER | SWP_NOCOPYBITS); - } - if (_width!=dimx || _height!=dimy) { - unsigned int *const ndata = new unsigned int[dimx*dimy]; - if (force_redraw) _render_resize(_data,_width,_height,ndata,dimx,dimy); - else std::memset(ndata,0x80,sizeof(unsigned int)*dimx*dimy); - delete[] _data; - _data = ndata; - _bmi.bmiHeader.biWidth = dimx; - _bmi.bmiHeader.biHeight = -(int)dimy; - _width = dimx; - _height = dimy; - } - _window_width = dimx; _window_height = dimy; - _is_resized = false; - if (_is_fullscreen) move((screen_width()-_width)/2,(screen_height()-_height)/2); - if (force_redraw) return paint(); - return *this; - } - - CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { - if (is_empty()) return *this; - if (force_redraw) { - const unsigned long buf_size = _width*_height*4UL; - void *odata = std::malloc(buf_size); - std::memcpy(odata,_data,buf_size); - assign(_width,_height,_title,_normalization,!_is_fullscreen,false); - std::memcpy(_data,odata,buf_size); - std::free(odata); - return paint(); - } - return assign(_width,_height,_title,_normalization,!_is_fullscreen,false); - } - - CImgDisplay& show() { - if (is_empty() || !_is_closed) return *this; - _is_closed = false; - if (_is_fullscreen) _init_fullscreen(); - ShowWindow(_window,SW_SHOW); - _update_window_pos(); - return paint(); - } - - CImgDisplay& close() { - if (is_empty() || _is_closed) return *this; - _is_closed = true; - if (_is_fullscreen) _desinit_fullscreen(); - ShowWindow(_window,SW_HIDE); - _window_x = _window_y = 0; - return *this; - } - - CImgDisplay& move(const int posx, const int posy) { - if (is_empty()) return *this; - if (!_is_fullscreen) { - RECT rect; rect.left = rect.top = 0; rect.right = _window_width-1; rect.bottom = _window_height-1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int border1 = (rect.right-rect.left+1-_width)/2, border2 = rect.bottom-rect.top+1-_height-border1; - SetWindowPos(_window,0,posx-border1,posy-border2,0,0,SWP_NOSIZE | SWP_NOZORDER); - } else SetWindowPos(_window,0,posx,posy,0,0,SWP_NOSIZE | SWP_NOZORDER); - _window_x = posx; - _window_y = posy; - _is_moved = false; - return show(); - } - - CImgDisplay& show_mouse() { - if (is_empty()) return *this; - _is_cursor_visible = true; - SendMessage(_window,WM_SETCURSOR,0,0); - return *this; - } - - CImgDisplay& hide_mouse() { - if (is_empty()) return *this; - _is_cursor_visible = false; - SendMessage(_window,WM_SETCURSOR,0,0); - return *this; - } - - CImgDisplay& set_mouse(const int posx, const int posy) { - if (_is_closed || posx<0 || posy<0) return *this; - _update_window_pos(); - const int res = (int)SetCursorPos(_window_x + posx,_window_y + posy); - if (res) { _mouse_x = posx; _mouse_y = posy; } - return *this; - } - - CImgDisplay& set_title(const char *const format, ...) { - if (is_empty()) return *this; - char tmp[1024] = { 0 }; - va_list ap; - va_start(ap, format); - cimg_vsnprintf(tmp,sizeof(tmp),format,ap); - va_end(ap); - if (!std::strcmp(_title,tmp)) return *this; - delete[] _title; - const unsigned int s = (unsigned int)std::strlen(tmp) + 1; - _title = new char[s]; - std::memcpy(_title,tmp,s*sizeof(char)); - SetWindowTextA(_window, tmp); - return *this; - } - - template - CImgDisplay& display(const CImg& img) { - if (!img) - throw CImgArgumentException(_cimgdisplay_instance - "display(): Empty specified image.", - cimgdisplay_instance); - if (is_empty()) return assign(img); - return render(img).paint(); - } - - CImgDisplay& paint() { - if (_is_closed) return *this; - WaitForSingleObject(_mutex,INFINITE); - SetDIBitsToDevice(_hdc,0,0,_width,_height,0,0,0,_height,_data,&_bmi,DIB_RGB_COLORS); - ReleaseMutex(_mutex); - return *this; - } - - template - CImgDisplay& render(const CImg& img) { - if (!img) - throw CImgArgumentException(_cimgdisplay_instance - "render(): Empty specified image.", - cimgdisplay_instance); - - if (is_empty()) return *this; - if (img._depth!=1) return render(img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); - - const T - *data1 = img._data, - *data2 = (img._spectrum>=2)?img.data(0,0,0,1):data1, - *data3 = (img._spectrum>=3)?img.data(0,0,0,2):data1; - - WaitForSingleObject(_mutex,INFINITE); - unsigned int - *const ndata = (img._width==_width && img._height==_height)?_data:new unsigned int[(unsigned long)img._width*img._height], - *ptrd = ndata; - - if (!_normalization || (_normalization==3 && cimg::type::string()==cimg::type::string())) { - _min = _max = 0; - switch (img._spectrum) { - case 1 : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)*(data1++); - *(ptrd++) = (val<<16) | (val<<8) | val; - } - } break; - case 2 : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8); - } break; - default : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) - *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8) | (unsigned char)*(data3++); - } - } - } else { - if (_normalization==3) { - if (cimg::type::is_float()) _min = (float)img.min_max(_max); - else { _min = (float)cimg::type::min(); _max = (float)cimg::type::max(); } - } else if ((_min>_max) || _normalization==1) _min = (float)img.min_max(_max); - const float delta = _max - _min, mm = 255/(delta?delta:1.0f); - switch (img._spectrum) { - case 1 : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); - *(ptrd++) = (val<<16) | (val<<8) | val; - } - } break; - case 2 : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm); - *(ptrd++) = (R<<16) | (G<<8); - } - } break; - default : { - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm), - B = (unsigned char)((*(data3++)-_min)*mm); - *(ptrd++) = (R<<16) | (G<<8) | B; - } - } - } - } - if (ndata!=_data) { _render_resize(ndata,img._width,img._height,_data,_width,_height); delete[] ndata; } - ReleaseMutex(_mutex); - return *this; - } - - template - const CImgDisplay& snapshot(CImg& img) const { - if (is_empty()) { img.assign(); return *this; } - const unsigned int *ptrs = _data; - img.assign(_width,_height,1,3); - T - *data1 = img.data(0,0,0,0), - *data2 = img.data(0,0,0,1), - *data3 = img.data(0,0,0,2); - for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned int val = *(ptrs++); - *(data1++) = (T)(unsigned char)(val>>16); - *(data2++) = (T)(unsigned char)((val>>8)&0xFF); - *(data3++) = (T)(unsigned char)(val&0xFF); - } - return *this; - } -#endif - - //@} - }; - - /* - #-------------------------------------- - # - # - # - # Definition of the CImg structure - # - # - # - #-------------------------------------- - */ - - //! Class representing an image (up to 4 dimensions wide), each pixel being of type \c T. - /** - This is the main class of the %CImg Library. It declares and constructs - an image, allows access to its pixel values, and is able to perform various image operations. - - \par Image representation - - A %CImg image is defined as an instance of the container \c CImg, which contains a regular grid of pixels, - each pixel value being of type \c T. The image grid can have up to 4 dimensions: width, height, depth - and number of channels. - Usually, the three first dimensions are used to describe spatial coordinates (x,y,z), while the number of channels - is rather used as a vector-valued dimension (it may describe the R,G,B color channels for instance). - If you need a fifth dimension, you can use image lists \c CImgList rather than simple images \c CImg. - - Thus, the \c CImg class is able to represent volumetric images of vector-valued pixels, - as well as images with less dimensions (1d scalar signal, 2d color images, ...). - Most member functions of the class CImg<\c T> are designed to handle this maximum case of (3+1) dimensions. - - Concerning the pixel value type \c T: - fully supported template types are the basic C++ types: unsigned char, char, short, unsigned int, int, - unsigned long, long, float, double, ... . - Typically, fast image display can be done using CImg images, - while complex image processing algorithms may be rather coded using CImg or CImg - images that have floating-point pixel values. The default value for the template T is \c float. - Using your own template types may be possible. However, you will certainly have to define the complete set - of arithmetic and logical operators for your class. - - \par Image structure - - The \c CImg structure contains \e six fields: - - \c _width defines the number of \a columns of the image (size along the X-axis). - - \c _height defines the number of \a rows of the image (size along the Y-axis). - - \c _depth defines the number of \a slices of the image (size along the Z-axis). - - \c _spectrum defines the number of \a channels of the image (size along the C-axis). - - \c _data defines a \a pointer to the \a pixel \a data (of type \c T). - - \c _is_shared is a boolean that tells if the memory buffer \c data is shared with - another image. - - You can access these fields publicly although it is recommended to use the dedicated functions - width(), height(), depth(), spectrum() and ptr() to do so. - Image dimensions are not limited to a specific range (as long as you got enough available memory). - A value of \e 1 usually means that the corresponding dimension is \a flat. - If one of the dimensions is \e 0, or if the data pointer is null, the image is considered as \e empty. - Empty images should not contain any pixel data and thus, will not be processed by CImg member functions - (a CImgInstanceException will be thrown instead). - Pixel data are stored in memory, in a non interlaced mode (See \ref cimg_storage). - - \par Image declaration and construction - - Declaring an image can be done by using one of the several available constructors. - Here is a list of the most used: - - - Construct images from arbitrary dimensions: - - CImg img; declares an empty image. - - CImg img(128,128); declares a 128x128 greyscale image with - \c unsigned \c char pixel values. - - CImg img(3,3); declares a 3x3 matrix with \c double coefficients. - - CImg img(256,256,1,3); declares a 256x256x1x3 (color) image - (colors are stored as an image with three channels). - - CImg img(128,128,128); declares a 128x128x128 volumetric and greyscale image - (with \c double pixel values). - - CImg<> img(128,128,128,3); declares a 128x128x128 volumetric color image - (with \c float pixels, which is the default value of the template parameter \c T). - - \b Note: images pixels are not automatically initialized to 0. You may use the function \c fill() to - do it, or use the specific constructor taking 5 parameters like this: - CImg<> img(128,128,128,3,0); declares a 128x128x128 volumetric color image with all pixel values to 0. - - - Construct images from filenames: - - CImg img("image.jpg"); reads a JPEG color image from the file "image.jpg". - - CImg img("analyze.hdr"); reads a volumetric image (ANALYZE7.5 format) from the file "analyze.hdr". - - \b Note: You need to install ImageMagick - to be able to read common compressed image formats (JPG,PNG, ...) (See \ref cimg_files_io). - - - Construct images from C-style arrays: - - CImg img(data_buffer,256,256); constructs a 256x256 greyscale image from a \c int* buffer - \c data_buffer (of size 256x256=65536). - - CImg img(data_buffer,256,256,1,3,false); constructs a 256x256 color image - from a \c unsigned \c char* buffer \c data_buffer (where R,G,B channels follow each others). - - CImg img(data_buffer,256,256,1,3,true); constructs a 256x256 color image - from a \c unsigned \c char* buffer \c data_buffer (where R,G,B channels are multiplexed). - - The complete list of constructors can be found here. - - \par Most useful functions - - The \c CImg class contains a lot of functions that operates on images. - Some of the most useful are: - - - operator()(): allows to access or write pixel values. - - display(): displays the image in a new window. - **/ - template - struct CImg { - - unsigned int _width, _height, _depth, _spectrum; - bool _is_shared; - T *_data; - - //! Simple iterator type, to loop through each pixel value of an image instance. - /** - \note - - The \c CImg::iterator type is defined to be a T*. - - You will seldom have to use iterators in %CImg, most classical operations - being achieved (often in a faster way) using methods of \c CImg. - \par Example - \code - CImg img("reference.jpg"); // Load image from file. - for (CImg::iterator it = img.begin(), it::const_iterator type is defined to be a \c const \c T*. - - You will seldom have to use iterators in %CImg, most classical operations - being achieved (often in a faster way) using methods of \c CImg. - \par Example - \code - const CImg img("reference.jpg"); // Load image from file. - float sum = 0; - for (CImg::iterator it = img.begin(), it::value_type type of a \c CImg is defined to be a \c T. - - \c CImg::value_type is actually not used in %CImg methods. It has been mainly defined for - compatibility with STL naming conventions. - **/ - typedef T value_type; - - // Define common types related to template type T. - typedef typename cimg::superset::type Tbool; - typedef typename cimg::superset::type Tuchar; - typedef typename cimg::superset::type Tchar; - typedef typename cimg::superset::type Tushort; - typedef typename cimg::superset::type Tshort; - typedef typename cimg::superset::type Tuint; - typedef typename cimg::superset::type Tint; - typedef typename cimg::superset::type Tulong; - typedef typename cimg::superset::type Tlong; - typedef typename cimg::superset::type Tfloat; - typedef typename cimg::superset::type Tdouble; - typedef typename cimg::last::type boolT; - typedef typename cimg::last::type ucharT; - typedef typename cimg::last::type charT; - typedef typename cimg::last::type ushortT; - typedef typename cimg::last::type shortT; - typedef typename cimg::last::type uintT; - typedef typename cimg::last::type intT; - typedef typename cimg::last::type ulongT; - typedef typename cimg::last::type longT; - typedef typename cimg::last::type floatT; - typedef typename cimg::last::type doubleT; - - //@} - //--------------------------- - // - //! \name Plugins - //@{ - //--------------------------- -#ifdef cimg_plugin -#include cimg_plugin -#endif -#ifdef cimg_plugin1 -#include cimg_plugin1 -#endif -#ifdef cimg_plugin2 -#include cimg_plugin2 -#endif -#ifdef cimg_plugin3 -#include cimg_plugin3 -#endif -#ifdef cimg_plugin4 -#include cimg_plugin4 -#endif -#ifdef cimg_plugin5 -#include cimg_plugin5 -#endif -#ifdef cimg_plugin6 -#include cimg_plugin6 -#endif -#ifdef cimg_plugin7 -#include cimg_plugin7 -#endif -#ifdef cimg_plugin8 -#include cimg_plugin8 -#endif - - //@} - //--------------------------------------------------------- - // - //! \name Constructors / Destructor / Instance Management - //@{ - //--------------------------------------------------------- - - //! Destroy image. - /** - \note - - The pixel buffer data() is deallocated if necessary, e.g. for non-empty and non-shared image instances. - - Destroying an empty or shared image does nothing actually. - \warning - - When destroying a non-shared image, make sure that you will \e not operate on a remaining shared image - that shares its buffer with the destroyed instance, in order to avoid further invalid memory access (to a deallocated buffer). - **/ - ~CImg() { - if (!_is_shared) delete[] _data; - } - - //! Construct empty image. - /** - \note - - An empty image has no pixel data and all of its dimensions width(), height(), depth(), spectrum() - are set to \c 0, as well as its pixel buffer pointer data(). - - An empty image may be re-assigned afterwards, e.g. with the family of assign(unsigned int,unsigned int,unsigned int,unsigned int) methods, - or by operator=(const CImg&). In all cases, the type of pixels stays \c T. - - An empty image is never shared. - \par Example - \code - CImg img1, img2; // Construct two empty images. - img1.assign(256,256,1,3); // Re-assign 'img1' to be a 256x256x1x3 (color) image. - img2 = img1.get_rand(0,255); // Re-assign 'img2' to be a random-valued version of 'img1'. - img2.assign(); // Re-assign 'img2' to be an empty image again. - \endcode - **/ - CImg():_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {} - - //! Construct image with specified size. - /** - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \note - - It is able to create only \e non-shared images, and allocates thus a pixel buffer data() for each constructed image instance. - - Setting one dimension \c size_x,\c size_y,\c size_z or \c size_c to \c 0 leads to the construction of an \e empty image. - - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated (e.g. when requested size is too big for available memory). - \warning - - The allocated pixel buffer is \e not filled with a default value, and is likely to contain garbage values. - In order to initialize pixel values during construction (e.g. with \c 0), use constructor - CImg(unsigned int,unsigned int,unsigned int,unsigned int,T) instead. - \par Example - \code - CImg img1(256,256,1,3); // Construct a 256x256x1x3 (color) image, filled with garbage values. - CImg img2(256,256,1,3,0); // Construct a 256x256x1x3 (color) image, filled with value '0'. - \endcode - **/ - explicit CImg(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1): - _is_shared(false) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (siz) { - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Construct image with specified size and initialize pixel values. - /** - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \param value Initialization value. - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), - but it also fills the pixel buffer with the specified \c value. - \warning - - It cannot be used to construct a vector-valued image and initialize it with \e vector-valued pixels (e.g. RGB vector, for color images). - For this task, you may use fillC() after construction. - **/ - CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value): - _is_shared(false) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (siz) { - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - fill(value); - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Construct image with specified size and initialize pixel values from a sequence of integers. - /** - Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, and initialize pixel - values from the specified sequence of integers \c value0,\c value1,\c ... - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \param value0 First value of the initialization sequence (must be an \e integer). - \param value1 Second value of the initialization sequence (must be an \e integer). - \param ... - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it also fills - the pixel buffer with a sequence of specified integer values. - \warning - - You must specify \e exactly \c size_x*\c size_y*\c size_z*\c size_c integers in the initialization sequence. - Otherwise, the constructor may crash or fill your image pixels with garbage. - \par Example - \code - const CImg img(2,2,1,3, // Construct a 2x2 color (RGB) image. - 0,255,0,255, // Set the 4 values for the red component. - 0,0,255,255, // Set the 4 values for the green component. - 64,64,64,64); // Set the 4 values for the blue component. - img.resize(150,150).display(); - \endcode - \image html ref_constructor1.jpg - **/ - CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const int value0, const int value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { -#define _CImg_stdarg(img,a0,a1,N,t) { \ - unsigned long _siz = (unsigned long)N; \ - if (_siz--) { \ - va_list ap; \ - va_start(ap,a1); \ - T *ptrd = (img)._data; \ - *(ptrd++) = (T)a0; \ - if (_siz--) { \ - *(ptrd++) = (T)a1; \ - for (; _siz; --_siz) *(ptrd++) = (T)va_arg(ap,t); \ - } \ - va_end(ap); \ - } \ - } - assign(size_x,size_y,size_z,size_c); - _CImg_stdarg(*this,value0,value1,(unsigned long)size_x*size_y*size_z*size_c,int); - } - - //! Construct image with specified size and initialize pixel values from a sequence of doubles. - /** - Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, and initialize pixel - values from the specified sequence of doubles \c value0,\c value1,\c ... - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \param value0 First value of the initialization sequence (must be a \e double). - \param value1 Second value of the initialization sequence (must be a \e double). - \param ... - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int,int,int,...), but - takes a sequence of double values instead of integers. - \warning - - You must specify \e exactly \c dx*\c dy*\c dz*\c dc doubles in the initialization sequence. - Otherwise, the constructor may crash or fill your image with garbage. - For instance, the code below will probably crash on most platforms: - \code - const CImg img(2,2,1,1, 0.5,0.5,255,255); // FAIL: The two last arguments are 'int', not 'double'! - \endcode - **/ - CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const double value0, const double value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(size_x,size_y,size_z,size_c); - _CImg_stdarg(*this,value0,value1,(unsigned long)size_x*size_y*size_z*size_c,double); - } - - //! Construct image with specified size and initialize pixel values from a value string. - /** - Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, and initializes pixel - values from the specified string \c values. - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \param values Value string describing the way pixel values are set. - \param repeat_values Tells if the value filling process is repeated over the image. - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it also fills - the pixel buffer with values described in the value string \c values. - - Value string \c values may describe two different filling processes: - - Either \c values is a sequences of values assigned to the image pixels, as in "1,2,3,7,8,2". - In this case, set \c repeat_values to \c true to periodically fill the image with the value sequence. - - Either, \c values is a formula, as in "cos(x/10)*sin(y/20)". In this case, parameter \c repeat_values is pointless. - - For both cases, specifying \c repeat_values is mandatory. It disambiguates the possible overloading of constructor - CImg(unsigned int,unsigned int,unsigned int,unsigned int,T) with \c T being a const char*. - - A \c CImgArgumentException is thrown when an invalid value string \c values is specified. - \par Example - \code - const CImg img1(129,129,1,3,"0,64,128,192,255",true), // Construct image filled from a value sequence. - img2(129,129,1,3,"if(c==0,255*abs(cos(x/10)),1.8*y)",false); // Construct image filled from a formula. - (img1,img2).display(); - \endcode - \image html ref_constructor2.jpg - **/ - CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const char *const values, const bool repeat_values):_is_shared(false) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (siz) { - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - fill(values,repeat_values); - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Construct image with specified size and initialize pixel values from a memory buffer. - /** - Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, and initializes pixel - values from the specified \c t* memory buffer. - \param values Pointer to the input memory buffer. - \param size_x Image width(). - \param size_y Image height(). - \param size_z Image depth(). - \param size_c Image spectrum() (number of channels). - \param is_shared Tells if input memory buffer must be shared by the current instance. - \note - - If \c is_shared is \c false, the image instance allocates its own pixel buffer, and values from the specified input buffer - are copied to the instance buffer. If buffer types \c T and \c t are different, a regular static cast is performed during buffer copy. - - Otherwise, the image instance does \e not allocate a new buffer, and uses the input memory buffer as its own pixel buffer. This case - requires that types \c T and \c t are the same. Later, destroying such a shared image will not deallocate the pixel buffer, - this task being obviously charged to the initial buffer allocator. - - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated (e.g. when requested size is too big for available memory). - \warning - - You must take care when operating on a shared image, since it may have an invalid pixel buffer pointer data() (e.g. already deallocated). - \par Example - \code - unsigned char tab[256*256] = { 0 }; - CImg img1(tab,256,256,1,1,false), // Construct new non-shared image from buffer 'tab'. - img2(tab,256,256,1,1,true); // Construct new shared-image from buffer 'tab'. - tab[1024] = 255; // Here, 'img2' is indirectly modified, but not 'img1'. - \endcode - **/ - template - CImg(const t *const values, const unsigned int size_x, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false):_is_shared(false) { - if (is_shared) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgArgumentException(_cimg_instance - "CImg(): Invalid construction request of a (%u,%u,%u,%u) shared instance from a (%s*) buffer " - "(pixel types are different).", - cimg_instance, - size_x,size_y,size_z,size_c,CImg::pixel_type()); - } - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (values && siz) { - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - - } - const t *ptrs = values; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Construct image with specified size and initialize pixel values from a memory buffer \specialization. - CImg(const T *const values, const unsigned int size_x, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (values && siz) { - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = is_shared; - if (_is_shared) _data = const_cast(values); - else { - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - std::memcpy(_data,values,siz*sizeof(T)); } - } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } - } - - //! Construct image from reading an image file. - /** - Construct a new image instance with pixels of type \c T, and initialize pixel values with the data read from an image file. - \param filename Filename, as a C-string. - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it reads the image - dimensions and pixel values from the specified image file. - - The recognition of the image file format by %CImg higly depends on the tools installed on your system - and on the external libraries you used to link your code against. - - Considered pixel type \c T should better fit the file format specification, or data loss may occur during file load - (e.g. constructing a \c CImg from a float-valued image file). - - A \c CImgIOException is thrown when the specified \c filename cannot be read, or if the file format is not recognized. - \par Example - \code - const CImg img("reference.jpg"); - img.display(); - \endcode - \image html ref_image.jpg - **/ - explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(filename); - } - - //! Construct image copy. - /** - Construct a new image instance with pixels of type \c T, as a copy of an existing \c CImg instance. - \param img Input image to copy. - \note - - Constructed copy has the same size width() x height() x depth() x spectrum() and pixel values as the input image \c img. - - If input image \c img is \e shared and if types \c T and \c t are the same, the constructed copy is also \e shared, - and shares its pixel buffer with \c img. - Modifying a pixel value in the constructed copy will thus also modifies it in the input image \c img. - This behavior is needful to allow functions to return shared images. - - Otherwise, the constructed copy allocates its own pixel buffer, and copies pixel values from the input image \c img - into its buffer. The copied pixel values may be eventually statically casted if types \c T and \c t are different. - - Constructing a copy from an image \c img when types \c t and \c T are the same is significantly faster than with different types. - - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated (e.g. not enough available memory). - **/ - template - CImg(const CImg& img):_is_shared(false) { - const unsigned long siz = img.size(); - if (img._data && siz) { - _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), - img._width,img._height,img._depth,img._spectrum); - } - const t *ptrs = img._data; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Construct image copy \specialization. - CImg(const CImg& img) { - const unsigned long siz = img.size(); - if (img._data && siz) { - _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = img._is_shared; - if (_is_shared) _data = const_cast(img._data); - else { - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), - img._width,img._height,img._depth,img._spectrum); - - } - std::memcpy(_data,img._data,siz*sizeof(T)); - } - } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } - } - - //! Advanced copy constructor. - /** - Construct a new image instance with pixels of type \c T, as a copy of an existing \c CImg instance, - while forcing the shared state of the constructed copy. - \param img Input image to copy. - \param is_shared Tells about the shared state of the constructed copy. - \note - - Similar to CImg(const CImg&), except that it allows to decide the shared state of - the constructed image, which does not depend anymore on the shared state of the input image \c img: - - If \c is_shared is \c true, the constructed copy will share its pixel buffer with the input image \c img. - For that case, the pixel types \c T and \c t \e must be the same. - - If \c is_shared is \c false, the constructed copy will allocate its own pixel buffer, whether the input image \c img is - shared or not. - - A \c CImgArgumentException is thrown when a shared copy is requested with different pixel types \c T and \c t. - **/ - template - CImg(const CImg& img, const bool is_shared):_is_shared(false) { - if (is_shared) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgArgumentException(_cimg_instance - "CImg(): Invalid construction request of a shared instance from a " - "CImg<%s> image (%u,%u,%u,%u,%p) (pixel types are different).", - cimg_instance, - CImg::pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data); - } - const unsigned long siz = img.size(); - if (img._data && siz) { - _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), - img._width,img._height,img._depth,img._spectrum); - } - const t *ptrs = img._data; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); - } else { _width = _height = _depth = _spectrum = 0; _data = 0; } - } - - //! Advanced copy constructor \specialization. - CImg(const CImg& img, const bool is_shared) { - const unsigned long siz = img.size(); - if (img._data && siz) { - _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = is_shared; - if (_is_shared) _data = const_cast(img._data); - else { - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), - img._width,img._height,img._depth,img._spectrum); - } - std::memcpy(_data,img._data,siz*sizeof(T)); - } - } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } - } - - //! Construct image with dimensions borrowed from another image. - /** - Construct a new image instance with pixels of type \c T, and size get from some dimensions of an existing \c CImg instance. - \param img Input image from which dimensions are borrowed. - \param dimensions C-string describing the image size along the X,Y,Z and C-dimensions. - \note - - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it takes the image dimensions - (\e not its pixel values) from an existing \c CImg instance. - - The allocated pixel buffer is \e not filled with a default value, and is likely to contain garbage values. - In order to initialize pixel values (e.g. with \c 0), use constructor CImg(const CImg&,const char*,T) instead. - \par Example - \code - const CImg img1(256,128,1,3), // 'img1' is a 256x128x1x3 image. - img2(img1,"xyzc"), // 'img2' is a 256x128x1x3 image. - img3(img1,"y,x,z,c"), // 'img3' is a 128x256x1x3 image. - img4(img1,"c,x,y,3",0), // 'img4' is a 3x128x256x3 image (with pixels initialized to '0'). - \endcode - **/ - template - CImg(const CImg& img, const char *const dimensions):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(img,dimensions); - } - - //! Construct image with dimensions borrowed from another image and initialize pixel values. - /** - Construct a new image instance with pixels of type \c T, and size get from the dimensions of an existing \c CImg instance, - and set all pixel values to specified \c value. - \param img Input image from which dimensions are borrowed. - \param dimensions String describing the image size along the X,Y,Z and V-dimensions. - \param value Value used for initialization. - \note - - Similar to CImg(const CImg&,const char*), but it also fills the pixel buffer with the specified \c value. - **/ - template - CImg(const CImg& img, const char *const dimensions, const T value): - _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(img,dimensions).fill(value); - } - - //! Construct image from a display window. - /** - Construct a new image instance with pixels of type \c T, as a snapshot of an existing \c CImgDisplay instance. - \param disp Input display window. - \note - - The width() and height() of the constructed image instance are the same as the specified \c CImgDisplay. - - The depth() and spectrum() of the constructed image instance are respectively set to \c 1 and \c 3 (i.e. a 2d color image). - - The image pixels are read as 8-bits RGB values. - **/ - explicit CImg(const CImgDisplay &disp):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - disp.snapshot(*this); - } - - //! Construct empty image \inplace. - /** - In-place version of the default constructor CImg(). It simply resets the instance to an empty image. - **/ - CImg& assign() { - if (!_is_shared) delete[] _data; - _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; - return *this; - } - - //! Construct image with specified size \inplace. - /** - In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int). - **/ - CImg& assign(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (!siz) return assign(); - const unsigned long curr_siz = size(); - if (siz!=curr_siz) { - if (_is_shared) - throw CImgArgumentException(_cimg_instance - "assign(): Invalid assignement request of shared instance from specified image (%u,%u,%u,%u).", - cimg_instance, - size_x,size_y,size_z,size_c); - else { - delete[] _data; - try { _data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - } - } - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - return *this; - } - - //! Construct image with specified size and initialize pixel values \inplace. - /** - In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,T). - **/ - CImg& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value) { - return assign(size_x,size_y,size_z,size_c).fill(value); - } - - //! Construct image with specified size and initialize pixel values from a sequence of integers \inplace. - /** - In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,int,int,...). - **/ - CImg& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const int value0, const int value1, ...) { - assign(size_x,size_y,size_z,size_c); - _CImg_stdarg(*this,value0,value1,(unsigned long)size_x*size_y*size_z*size_c,int); - return *this; - } - - //! Construct image with specified size and initialize pixel values from a sequence of doubles \inplace. - /** - In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,double,double,...). - **/ - CImg& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const double value0, const double value1, ...) { - assign(size_x,size_y,size_z,size_c); - _CImg_stdarg(*this,value0,value1,(unsigned long)size_x*size_y*size_z*size_c,double); - return *this; - } - - //! Construct image with specified size and initialize pixel values from a value string \inplace. - /** - In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,const char*,bool). - **/ - CImg& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, - const char *const values, const bool repeat_values) { - return assign(size_x,size_y,size_z,size_c).fill(values,repeat_values); - } - - //! Construct image with specified size and initialize pixel values from a memory buffer \inplace. - /** - In-place version of the constructor CImg(const t*,unsigned int,unsigned int,unsigned int,unsigned int). - **/ - template - CImg& assign(const t *const values, const unsigned int size_x, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (!values || !siz) return assign(); - assign(size_x,size_y,size_z,size_c); - const t *ptrs = values; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); - return *this; - } - - //! Construct image with specified size and initialize pixel values from a memory buffer \specialization. - CImg& assign(const T *const values, const unsigned int size_x, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (!values || !siz) return assign(); - const unsigned long curr_siz = size(); - if (values==_data && siz==curr_siz) return assign(size_x,size_y,size_z,size_c); - if (_is_shared || values+siz<_data || values>=_data+size()) { - assign(size_x,size_y,size_z,size_c); - if (_is_shared) std::memmove(_data,values,siz*sizeof(T)); - else std::memcpy(_data,values,siz*sizeof(T)); - } else { - T *new_data = 0; - try { new_data = new T[siz]; } catch (...) { - _width = _height = _depth = _spectrum = 0; _data = 0; - throw CImgInstanceException(_cimg_instance - "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", - cimg_instance, - cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); - } - std::memcpy(new_data,values,siz*sizeof(T)); - delete[] _data; _data = new_data; _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; - } - return *this; - } - - //! Construct image with specified size and initialize pixel values from a memory buffer \overloading. - template - CImg& assign(const t *const values, const unsigned int size_x, const unsigned int size_y, - const unsigned int size_z, const unsigned int size_c, const bool is_shared) { - if (is_shared) - throw CImgArgumentException(_cimg_instance - "assign(): Invalid assignment request of shared instance from (%s*) buffer" - "(pixel types are different).", - cimg_instance, - CImg::pixel_type()); - return assign(values,size_x,size_y,size_z,size_c); - } - - //! Construct image with specified size and initialize pixel values from a memory buffer \overloading. - CImg& assign(const T *const values, const unsigned int size_x, const unsigned int size_y, - const unsigned int size_z, const unsigned int size_c, const bool is_shared) { - const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; - if (!values || !siz) { - if (is_shared) - throw CImgArgumentException(_cimg_instance - "assign(): Invalid assignment request of shared instance from (null) or empty buffer.", - cimg_instance); - else return assign(); - } - if (!is_shared) { if (_is_shared) assign(); assign(values,size_x,size_y,size_z,size_c); } - else { - if (!_is_shared) { - if (values+siz<_data || values>=_data+size()) assign(); - else cimg::warn(_cimg_instance - "assign(): Shared image instance has overlapping memory.", - cimg_instance); - } - _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = true; - _data = const_cast(values); - } - return *this; - } - - //! Construct image from reading an image file \inplace. - /** - In-place version of the constructor CImg(const char*). - **/ - CImg& assign(const char *const filename) { - return load(filename); - } - - //! Construct image copy \inplace. - /** - In-place version of the constructor CImg(const CImg&). - **/ - template - CImg& assign(const CImg& img) { - return assign(img._data,img._width,img._height,img._depth,img._spectrum); - } - - //! In-place version of the advanced copy constructor. - /** - In-place version of the constructor CImg(const CImg&,bool). - **/ - template - CImg& assign(const CImg& img, const bool is_shared) { - return assign(img._data,img._width,img._height,img._depth,img._spectrum,is_shared); - } - - //! Construct image with dimensions borrowed from another image \inplace. - /** - In-place version of the constructor CImg(const CImg&,const char*). - **/ - template - CImg& assign(const CImg& img, const char *const dimensions) { - if (!dimensions || !*dimensions) return assign(img._width,img._height,img._depth,img._spectrum); - unsigned int siz[4] = { 0,1,1,1 }, k = 0; - for (const char *s = dimensions; *s && k<4; ++k) { - char item[256] = { 0 }; - if (std::sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item)>0) s+=std::strlen(item); - if (*s) { - unsigned int val = 0; char sep = 0; - if (std::sscanf(s,"%u%c",&val,&sep)>0) { - if (sep=='%') siz[k] = val*(k==0?_width:k==1?_height:k==2?_depth:_spectrum)/100; - else siz[k] = val; - while (*s>='0' && *s<='9') ++s; if (sep=='%') ++s; - } else switch (cimg::uncase(*s)) { - case 'x' : case 'w' : siz[k] = img._width; ++s; break; - case 'y' : case 'h' : siz[k] = img._height; ++s; break; - case 'z' : case 'd' : siz[k] = img._depth; ++s; break; - case 'c' : case 's' : siz[k] = img._spectrum; ++s; break; - default : - throw CImgArgumentException(_cimg_instance - "assign(): Invalid character '%c' detected in specified dimension string '%s'.", - cimg_instance, - *s,dimensions); - } - } - } - return assign(siz[0],siz[1],siz[2],siz[3]); - } - - //! Construct image with dimensions borrowed from another image and initialize pixel values \inplace. - /** - In-place version of the constructor CImg(const CImg&,const char*,T). - **/ - template - CImg& assign(const CImg& img, const char *const dimensions, const T value) { - return assign(img,dimensions).fill(value); - } - - //! Construct image from a display window \inplace. - /** - In-place version of the constructor CImg(const CImgDisplay&). - **/ - CImg& assign(const CImgDisplay &disp) { - disp.snapshot(*this); - return *this; - } - - //! Construct empty image \inplace. - /** - Equivalent to assign(). - \note - - It has been defined for compatibility with STL naming conventions. - **/ - CImg& clear() { - return assign(); - } - - //! Transfer content of an image instance into another one. - /** - Transfer the dimensions and the pixel buffer content of an image instance into another one, - and replace instance by an empty image. It avoids the copy of the pixel buffer - when possible. - \param img Destination image. - \note - - Pixel types \c T and \c t of source and destination images can be different, though the process is designed to be - instantaneous when \c T and \c t are the same. - \par Example - \code - CImg src(256,256,1,3,0), // Construct a 256x256x1x3 (color) image filled with value '0'. - dest(16,16); // Construct a 16x16x1x1 (scalar) image. - src.move_to(dest); // Now, 'src' is empty and 'dest' is the 256x256x1x3 image. - \endcode - **/ - template - CImg& move_to(CImg& img) { - img.assign(*this); - assign(); - return img; - } - - //! Transfer content of an image instance into another one \specialization. - CImg& move_to(CImg& img) { - if (_is_shared || img._is_shared) img.assign(*this); - else swap(img); - assign(); - return img; - } - - //! Transfer content of an image instance into a new image in an image list. - /** - Transfer the dimensions and the pixel buffer content of an image instance - into a newly inserted image at position \c pos in specified \c CImgList instance. - \param list Destination list. - \param pos Position of the newly inserted image in the list. - \note - - When optionnal parameter \c pos is ommited, the image instance is transfered as a new - image at the end of the specified \c list. - - It is convenient to sequentially insert new images into image lists, with no - additional copies of memory buffer. - \par Example - \code - CImgList list; // Construct an empty image list. - CImg img("reference.jpg"); // Read image from filename. - img.move_to(list); // Transfer image content as a new item in the list (no buffer copy). - \endcode - **/ - template - CImgList& move_to(CImgList& list, const unsigned int pos=~0U) { - const unsigned int npos = pos>list._width?list._width:pos; - move_to(list.insert(1,npos)[npos]); - return list; - } - - //! Swap fields of two image instances. - /** - \param img Image to swap fields with. - \note - - It can be used to interchange the content of two images in a very fast way. Can be convenient when dealing - with algorithms requiring two swapping buffers. - \par Example - \code - CImg img1("lena.jpg"), - img2("milla.jpg"); - img1.swap(img2); // Now, 'img1' is 'milla' and 'img2' is 'lena'. - \endcode - **/ - CImg& swap(CImg& img) { - cimg::swap(_width,img._width); - cimg::swap(_height,img._height); - cimg::swap(_depth,img._depth); - cimg::swap(_spectrum,img._spectrum); - cimg::swap(_data,img._data); - cimg::swap(_is_shared,img._is_shared); - return img; - } - - //! Return a reference to an empty image. - /** - \note - This function is useful mainly to declare optional parameters having type \c CImg in functions prototypes, e.g. - \code - void f(const int x=0, const int y=0, const CImg& img=CImg::empty()); - \endcode - **/ - static CImg& empty() { - static CImg _empty; - return _empty.assign(); - } - - //@} - //------------------------------------------ - // - //! \name Overloaded Operators - //@{ - //------------------------------------------ - - //! Access to a pixel value. - /** - Return a reference to a located pixel value of the image instance, - being possibly \e const, whether the image instance is \e const or not. - This is the standard method to get/set pixel values in \c CImg images. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Range of pixel coordinates start from (0,0,0,0) to (width()-1,height()-1,depth()-1,spectrum()-1). - - Due to the particular arrangement of the pixel buffers defined in %CImg, you can omit one coordinate if the corresponding dimension - is equal to \c 1. - For instance, pixels of a 2d image (depth() equal to \c 1) can be accessed by img(x,y,c) instead of img(x,y,0,c). - \warning - - There is \e no boundary checking done in this operator, to make it as fast as possible. - You \e must take care of out-of-bounds access by yourself, if necessary. - For debuging purposes, you may want to define macro \c 'cimg_verbosity'>=3 to enable additional boundary checking operations - in this operator. In that case, warning messages will be printed on the error output when accessing out-of-bounds pixels. - \par Example - \code - CImg img(100,100,1,3,0); // Construct a 100x100x1x3 (color) image with pixels set to '0'. - const float - valR = img(10,10,0,0), // Read red value at coordinates (10,10). - valG = img(10,10,0,1), // Read green value at coordinates (10,10) - valB = img(10,10,2), // Read blue value at coordinates (10,10) (Z-coordinate can be omitted). - avg = (valR + valG + valB)/3; // Compute average pixel value. - img(10,10,0) = img(10,10,1) = img(10,10,2) = avg; // Replace the color pixel (10,10) by the average grey value. - \endcode - **/ -#if cimg_verbosity>=3 - T& operator()(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { - const unsigned long off = (unsigned long)offset(x,y,z,c); - if (!_data || off>=size()) { - cimg::warn(_cimg_instance - "operator(): Invalid pixel request, at coordinates (%u,%u,%u,%u) [offset=%u].", - cimg_instance, - x,y,z,c,off); - return *_data; - } - else return _data[off]; - } - - //! Access to a pixel value \const. - const T& operator()(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { - return const_cast*>(this)->operator()(x,y,z,c); - } - - //! Access to a pixel value. - /** - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param wh Precomputed offset, must be equal to width()*\ref height(). - \param whd Precomputed offset, must be equal to width()*\ref height()*\ref depth(). - \note - - Similar to (but faster than) operator()(). - It uses precomputed offsets to optimize memory access. You may use it to optimize - the reading/writing of several pixel values in the same image (e.g. in a loop). - **/ - T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, - const unsigned long wh, const unsigned long whd=0) { - cimg::unused(wh,whd); - return (*this)(x,y,z,c); - } - - //! Access to a pixel value \const. - const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, - const unsigned long wh, const unsigned long whd=0) const { - cimg::unused(wh,whd); - return (*this)(x,y,z,c); - } -#else - T& operator()(const unsigned int x) { - return _data[x]; - } - - const T& operator()(const unsigned int x) const { - return _data[x]; - } - - T& operator()(const unsigned int x, const unsigned int y) { - return _data[x + y*_width]; - } - - const T& operator()(const unsigned int x, const unsigned int y) const { - return _data[x + y*_width]; - } - - T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) { - return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; - } - - const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) const { - return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; - } - - T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) { - return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; - } - - const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) const { - return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; - } - - T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, - const unsigned long wh) { - return _data[x + y*_width + z*wh]; - } - - const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, - const unsigned long wh) const { - return _data[x + y*_width + z*wh]; - } - - T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, - const unsigned long wh, const unsigned long whd) { - return _data[x + y*_width + z*wh + c*whd]; - } - - const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, - const unsigned long wh, const unsigned long whd) const { - return _data[x + y*_width + z*wh + c*whd]; - } -#endif - - //! Implicitely cast an image into a \c T*. - /** - Implicitely cast a \c CImg instance into a \c T* or \c const \c T* pointer, whether the image instance - is \e const or not. The returned pointer points on the first value of the image pixel buffer. - \note - - It simply returns the pointer data() to the pixel buffer. - - This implicit conversion is convenient to test the empty state of images (data() being \c 0 in this case), e.g. - \code - CImg img1(100,100), img2; // 'img1' is a 100x100 image, 'img2' is an empty image. - if (img1) { // Test succeeds, 'img1' is not an empty image. - if (!img2) { // Test succeeds, 'img2' is an empty image. - std::printf("'img1' is not empty, 'img2' is empty."); - } - } - \endcode - - It also allows to use brackets to access pixel values, without need for a \c CImg::operator[](), e.g. - \code - CImg img(100,100); - const float value = img[99]; // Access to value of the last pixel on the first row. - img[510] = 255; // Set pixel value at (10,5). - \endcode - **/ - operator T*() { - return _data; - } - - //! Implicitely cast an image into a \c T* \const. - operator const T*() const { - return _data; - } - - //! Assign a value to all image pixels. - /** - Assign specified \c value to each pixel value of the image instance. - \param value Value that will be assigned to image pixels. - \note - - The image size is never modified. - - The \c value may be casted to pixel type \c T if necessary. - \par Example - \code - CImg img(100,100); // Declare image (with garbage values). - img = 0; // Set all pixel values to '0'. - img = 1.2; // Set all pixel values to '1' (cast of '1.2' as a 'char'). - \endcode - **/ - CImg& operator=(const T value) { - return fill(value); - } - - //! Assign pixels values from a specified expression. - /** - Initialize all pixel values from the specified string \c expression. - \param expression Value string describing the way pixel values are set. - \note - - String parameter \c expression may describe different things: - - If \c expression is a list of values (as in \c "1,2,3,8,3,2"), or a formula (as in \c "(x*y)%255"), - the pixel values are set from specified \c expression and the image size is not modified. - - If \c expression is a filename (as in \c "reference.jpg"), the corresponding image file is loaded and replace the image instance. - The image size is modified if necessary. - \par Example - \code - CImg img1(100,100), img2(img1), img3(img1); // Declare three 100x100 scalar images with unitialized pixel values. - img1 = "0,50,100,150,200,250,200,150,100,50"; // Set pixel values of 'img1' from a value sequence. - img2 = "10*((x*y)%25)"; // Set pixel values of 'img2' from a formula. - img3 = "reference.jpg"; // Set pixel values of 'img3' from a file (image size is modified). - (img1,img2,img3).display(); - \endcode - \image html ref_operator_eq.jpg - **/ - CImg& operator=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - load(expression); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Copy an image into the current image instance. - /** - Similar to the in-place copy constructor assign(const CImg&). - **/ - template - CImg& operator=(const CImg& img) { - return assign(img); - } - - //! Copy an image into the current image instance \specialization. - CImg& operator=(const CImg& img) { - return assign(img); - } - - //! Copy the content of a display window to the current image instance. - /** - Similar to assign(const CImgDisplay&). - **/ - CImg& operator=(const CImgDisplay& disp) { - disp.snapshot(*this); - return *this; - } - - //! In-place addition operator. - /** - Add specified \c value to all pixels of an image instance. - \param value Value to add. - \note - - Resulting pixel values are casted to fit the pixel type \c T. For instance, adding \c 0.2 to a \c CImg is possible but does nothing indeed. - - Overflow values are treated as with standard C++ numeric types. For instance, - \code - CImg img(100,100,1,1,255); // Construct a 100x100 image with pixel values '255'. - img+=1; // Add '1' to each pixels -> Overflow. - // here all pixels of image 'img' are equal to '0'. - \endcode - - To prevent value overflow, you may want to consider pixel type \c T as \c float or \c double, and use cut() after addition. - \par Example - \code - CImg img1("reference.jpg"); // Load a 8-bits RGB image (values in [0,255]). - CImg img2(img1); // Construct a float-valued copy of 'img1'. - img2+=100; // Add '100' to pixel values -> goes out of [0,255] but no problems with floats. - img2.cut(0,255); // Cut values in [0,255] to fit the 'unsigned char' constraint. - img1 = img2; // Rewrite safe result in 'unsigned char' version 'img1'. - const CImg img3 = (img1 + 100).cut(0,255); // Do the same in a more simple and elegant way. - (img1,img2,img3).display(); - \endcode - \image html ref_operator_plus.jpg - **/ - template - CImg& operator+=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(*ptrd + value); - return *this; - } - - //! In-place addition operator. - /** - Add values to image pixels, according to the specified string \c expression. - \param expression Value string describing the way pixel values are added. - \note - - Similar to operator=(const char*), except that it adds values to the pixels of the current image instance, - instead of assigning them. - **/ - CImg& operator+=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator+="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd + mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd + mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this+=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place addition operator. - /** - Add values to image pixels, according to the values of the input image \c img. - \param img Input image to add. - \note - - The size of the image instance is never modified. - - It is not mandatory that input image \c img has the same size as the image instance. If less values are available - in \c img, then the values are added cyclically. For instance, adding one WxH scalar image (spectrum() equal to \c 1) to - one WxH color image (spectrum() equal to \c 3) means each color channel will be incremented with the same values at the same - locations. - \par Example - \code - CImg img1("reference.jpg"); // Load a RGB color image (img1.spectrum()==3) - const CImg img2(img1.width(),img.height(),1,1,"255*(x/w)^2"); // Construct a scalar shading (img2.spectrum()==1). - img1+=img2; // Add shading to each channel of 'img1'. - img1.cut(0,255); // Prevent [0,255] overflow. - (img2,img1).display(); - \endcode - \image html ref_operator_plus1.jpg - **/ - template - CImg& operator+=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this+=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs& operator++() { - cimg_for(*this,ptrd,T) ++*ptrd; - return *this; - } - - //! In-place increment operator (postfix). - /** - Add \c 1 to all image pixels, and return a new copy of the initial (pre-incremented) image instance. - \note - - Use the prefixed version operator++() if you don't need a copy of the initial (pre-incremented) image instance, since - a useless image copy may be expensive in terms of memory usage. - **/ - CImg operator++(int) { - const CImg copy(*this,false); - ++*this; - return copy; - } - - //! Return a non-shared copy of the image instance. - /** - \note - - Use this operator to ensure you get a non-shared copy of an image instance with same pixel type \c T. - Indeed, the usual copy constructor CImg(const CImg&) returns a shared copy of a shared input image, and it may be - not desirable to work on a regular copy (e.g. for a resize operation) if you have no informations about the shared state - of the input image. - - Writing \c (+img) is equivalent to \c CImg(img,false). - **/ - CImg operator+() const { - return CImg(*this,false); - } - - //! Addition operator. - /** - Similar to operator+=(const t), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator+(const t value) const { - return CImg<_cimg_Tt>(*this,false)+=value; - } - - //! Addition operator. - /** - Similar to operator+=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - CImg operator+(const char *const expression) const { - return CImg(*this,false)+=expression; - } - - //! Addition operator. - /** - Similar to operator+=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator+(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false)+=img; - } - - //! In-place substraction operator. - /** - Similar to operator+=(const t), except that it performs a substraction instead of an addition. - **/ - template - CImg& operator-=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(*ptrd - value); - return *this; - } - - //! In-place substraction operator. - /** - Similar to operator+=(const char*), except that it performs a substraction instead of an addition. - **/ - CImg& operator-=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator-="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd - mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd - mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this-=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place substraction operator. - /** - Similar to operator+=(const CImg&), except that it performs a substraction instead of an addition. - **/ - template - CImg& operator-=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this-=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs& operator--() { - cimg_for(*this,ptrd,T) *ptrd = *ptrd-(T)1; - return *this; - } - - //! In-place decrement operator (postfix). - /** - Similar to operator++(int), except that it performs a decrement instead of an increment. - **/ - CImg operator--(int) { - const CImg copy(*this,false); - --*this; - return copy; - } - - //! Replace each pixel by its opposite value. - /** - \note - - If the computed opposite values are out-of-range, they are treated as with standard C++ numeric types. For instance, - the \c unsigned \c char opposite of \c 1 is \c 255. - \par Example - \code - const CImg - img1("reference.jpg"), // Load a RGB color image. - img2 = -img1; // Compute its opposite (in 'unsigned char'). - (img1,img2).display(); - \endcode - \image html ref_operator_minus.jpg - **/ - CImg operator-() const { - return CImg(_width,_height,_depth,_spectrum,(T)0)-=*this; - } - - //! Substraction operator. - /** - Similar to operator-=(const t), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator-(const t value) const { - return CImg<_cimg_Tt>(*this,false)-=value; - } - - //! Substraction operator. - /** - Similar to operator-=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - CImg operator-(const char *const expression) const { - return CImg(*this,false)-=expression; - } - - //! Substraction operator. - /** - Similar to operator-=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator-(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false)-=img; - } - - //! In-place multiplication operator. - /** - Similar to operator+=(const t), except that it performs a multiplication instead of an addition. - **/ - template - CImg& operator*=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(*ptrd * value); - return *this; - } - - //! In-place multiplication operator. - /** - Similar to operator+=(const char*), except that it performs a multiplication instead of an addition. - **/ - CImg& operator*=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator*="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd * mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd * mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - mul(CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place multiplication operator. - /** - Replace the image instance by the matrix multiplication between the image instance and the specified matrix \c img. - \param img Second operand of the matrix multiplication. - \note - - It does \e not compute a pointwise multiplication between two images. For this purpose, use mul(const CImg&) instead. - - The size of the image instance can be modified by this operator. - \par Example - \code - CImg A(2,2,1,1, 1,2,3,4); // Construct 2x2 matrix A = [1,2;3,4]. - const CImg X(1,2,1,1, 1,2); // Construct 1x2 vector X = [1;2]. - A*=X; // Assign matrix multiplication A*X to 'A'. - // 'A' is now a 1x2 vector whose values are [5;11]. - \endcode - **/ - template - CImg& operator*=(const CImg& img) { - return ((*this)*img).move_to(*this); - } - - //! Multiplication operator. - /** - Similar to operator*=(const t), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator*(const t value) const { - return CImg<_cimg_Tt>(*this,false)*=value; - } - - //! Multiplication operator. - /** - Similar to operator*=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - CImg operator*(const char *const expression) const { - return CImg(*this,false)*=expression; - } - - //! Multiplication operator. - /** - Similar to operator*=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator*(const CImg& img) const { - if (_width!=img._height || _depth!=1 || _spectrum!=1) - throw CImgArgumentException(_cimg_instance - "operator*(): Invalid multiplication of instance by specified matrix (%u,%u,%u,%u,%p)", - cimg_instance, - img._width,img._height,img._depth,img._spectrum,img._data); - CImg<_cimg_Tt> res(img._width,_height); - _cimg_Ttdouble value; -#ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=1000 && img.size()>=1000) private(value) - cimg_forXY(res,i,j) { value = 0; cimg_forX(*this,k) value+=(*this)(k,j)*img(i,k); res(i,j) = (_cimg_Tt)value; } -#else - _cimg_Tt *ptrd = res._data; - cimg_forXY(res,i,j) { value = 0; cimg_forX(*this,k) value+=(*this)(k,j)*img(i,k); *(ptrd++) = (_cimg_Tt)value; } -#endif - return res; - } - - //! In-place division operator. - /** - Similar to operator+=(const t), except that it performs a division instead of an addition. - **/ - template - CImg& operator/=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(*ptrd / value); - return *this; - } - - //! In-place division operator. - /** - Similar to operator+=(const char*), except that it performs a division instead of an addition. - **/ - CImg& operator/=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator/="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd / mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd / mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - div(CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place division operator. - /** - Replace the image instance by the (right) matrix division between the image instance and the specified matrix \c img. - \param img Second operand of the matrix division. - \note - - It does \e not compute a pointwise division between two images. For this purpose, use div(const CImg&) instead. - - It returns the matrix operation \c A*inverse(img). - - The size of the image instance can be modified by this operator. - **/ - template - CImg& operator/=(const CImg& img) { - return (*this*img.get_invert()).move_to(*this); - } - - //! Division operator. - /** - Similar to operator/=(const t), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator/(const t value) const { - return CImg<_cimg_Tt>(*this,false)/=value; - } - - //! Division operator. - /** - Similar to operator/=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - CImg operator/(const char *const expression) const { - return CImg(*this,false)/=expression; - } - - //! Division operator. - /** - Similar to operator/=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator/(const CImg& img) const { - return (*this)*img.get_invert(); - } - - //! In-place modulo operator. - /** - Similar to operator+=(const t), except that it performs a modulo operation instead of an addition. - **/ - template - CImg& operator%=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)cimg::mod(*ptrd,(T)value); - return *this; - } - - //! In-place modulo operator. - /** - Similar to operator+=(const char*), except that it performs a modulo operation instead of an addition. - **/ - CImg& operator%=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator%="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::mod(*ptrd,(T)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::mod(*ptrd,(T)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this%=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place modulo operator. - /** - Similar to operator+=(const CImg&), except that it performs a modulo operation instead of an addition. - **/ - template - CImg& operator%=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this%=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg<_cimg_Tt> operator%(const t value) const { - return CImg<_cimg_Tt>(*this,false)%=value; - } - - //! Modulo operator. - /** - Similar to operator%=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - CImg operator%(const char *const expression) const { - return CImg(*this,false)%=expression; - } - - //! Modulo operator. - /** - Similar to operator%=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. - **/ - template - CImg<_cimg_Tt> operator%(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false)%=img; - } - - //! In-place bitwise AND operator. - /** - Similar to operator+=(const t), except that it performs a bitwise AND operation instead of an addition. - **/ - template - CImg& operator&=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)value); - return *this; - } - - //! In-place bitwise AND operator. - /** - Similar to operator+=(const char*), except that it performs a bitwise AND operation instead of an addition. - **/ - CImg& operator&=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator&="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this&=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place bitwise AND operator. - /** - Similar to operator+=(const CImg&), except that it performs a bitwise AND operation instead of an addition. - **/ - template - CImg& operator&=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this&=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg operator&(const t value) const { - return (+*this)&=value; - } - - //! Bitwise AND operator. - /** - Similar to operator&=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - CImg operator&(const char *const expression) const { - return (+*this)&=expression; - } - - //! Bitwise AND operator. - /** - Similar to operator&=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator&(const CImg& img) const { - return (+*this)&=img; - } - - //! In-place bitwise OR operator. - /** - Similar to operator+=(const t), except that it performs a bitwise OR operation instead of an addition. - **/ - template - CImg& operator|=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)value); - return *this; - } - - //! In-place bitwise OR operator. - /** - Similar to operator+=(const char*), except that it performs a bitwise OR operation instead of an addition. - **/ - CImg& operator|=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator|="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this|=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place bitwise OR operator. - /** - Similar to operator+=(const CImg&), except that it performs a bitwise OR operation instead of an addition. - **/ - template - CImg& operator|=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this|=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg operator|(const t value) const { - return (+*this)|=value; - } - - //! Bitwise OR operator. - /** - Similar to operator|=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - CImg operator|(const char *const expression) const { - return (+*this)|=expression; - } - - //! Bitwise OR operator. - /** - Similar to operator|=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator|(const CImg& img) const { - return (+*this)|=img; - } - - //! In-place bitwise XOR operator. - /** - Similar to operator+=(const t), except that it performs a bitwise XOR operation instead of an addition. - \warning - - It does \e not compute the \e power of pixel values. For this purpose, use pow(const t) instead. - **/ - template - CImg& operator^=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)value); - return *this; - } - - //! In-place bitwise XOR operator. - /** - Similar to operator+=(const char*), except that it performs a bitwise XOR operation instead of an addition. - \warning - - It does \e not compute the \e power of pixel values. For this purpose, use pow(const char*) instead. - **/ - CImg& operator^=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator^="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this^=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place bitwise XOR operator. - /** - Similar to operator+=(const CImg&), except that it performs a bitwise XOR operation instead of an addition. - \warning - - It does \e not compute the \e power of pixel values. For this purpose, use pow(const CImg&) instead. - **/ - template - CImg& operator^=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this^=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg operator^(const t value) const { - return (+*this)^=value; - } - - //! Bitwise XOR operator. - /** - Similar to operator^=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - CImg operator^(const char *const expression) const { - return (+*this)^=expression; - } - - //! Bitwise XOR operator. - /** - Similar to operator^=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator^(const CImg& img) const { - return (+*this)^=img; - } - - //! In-place bitwise left shift operator. - /** - Similar to operator+=(const t), except that it performs a bitwise left shift instead of an addition. - **/ - template - CImg& operator<<=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(((long)*ptrd) << (int)value); - return *this; - } - - //! In-place bitwise left shift operator. - /** - Similar to operator+=(const char*), except that it performs a bitwise left shift instead of an addition. - **/ - CImg& operator<<=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd << (int)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd << (int)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this<<=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place bitwise left shift operator. - /** - Similar to operator+=(const CImg&), except that it performs a bitwise left shift instead of an addition. - **/ - template - CImg& operator<<=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this^=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg operator<<(const t value) const { - return (+*this)<<=value; - } - - //! Bitwise left shift operator. - /** - Similar to operator<<=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - CImg operator<<(const char *const expression) const { - return (+*this)<<=expression; - } - - //! Bitwise left shift operator. - /** - Similar to operator<<=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator<<(const CImg& img) const { - return (+*this)<<=img; - } - - //! In-place bitwise right shift operator. - /** - Similar to operator+=(const t), except that it performs a bitwise right shift instead of an addition. - **/ - template - CImg& operator>>=(const t value) { - cimg_for(*this,ptrd,T) *ptrd = (T)(((long)*ptrd) >> (int)value); - return *this; - } - - //! In-place bitwise right shift operator. - /** - Similar to operator+=(const char*), except that it performs a bitwise right shift instead of an addition. - **/ - CImg& operator>>=(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd >> (int)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd >> (int)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - cimg::exception_mode() = omode; - *this>>=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode() = omode; - return *this; - } - - //! In-place bitwise right shift operator. - /** - Similar to operator+=(const CImg&), except that it performs a bitwise right shift instead of an addition. - **/ - template - CImg& operator>>=(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return *this^=+img; - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs> (int)*(ptrs++)); - for (const t *ptrs = img._data; ptrd> (int)*(ptrs++)); - } - return *this; - } - - //! Bitwise right shift operator. - /** - Similar to operator>>=(const t), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator>>(const t value) const { - return (+*this)>>=value; - } - - //! Bitwise right shift operator. - /** - Similar to operator>>=(const char*), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - CImg operator>>(const char *const expression) const { - return (+*this)>>=expression; - } - - //! Bitwise right shift operator. - /** - Similar to operator>>=(const CImg&), except that it returns a new image instance instead of operating in-place. - The pixel type of the returned image is \c T. - **/ - template - CImg operator>>(const CImg& img) const { - return (+*this)>>=img; - } - - //! Bitwise inversion operator. - /** - Similar to operator-(), except that it compute the bitwise inverse instead of the opposite value. - **/ - CImg operator~() const { - CImg res(_width,_height,_depth,_spectrum); - const T *ptrs = _data; - cimg_for(res,ptrd,T) { const unsigned long value = (unsigned long)*(ptrs++); *ptrd = (T)~value; } - return res; - } - - //! Test if all pixels of an image have the same value. - /** - Return \c true is all pixels of the image instance are equal to the specified \c value. - \param value Reference value to compare with. - **/ - template - bool operator==(const t value) const { - if (is_empty()) return false; - typedef _cimg_Tt Tt; - bool is_equal = true; - for (T *ptrd = _data + size(); is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)value)) {} - return is_equal; - } - - //! Test if all pixel values of an image follow a specified expression. - /** - Return \c true is all pixels of the image instance are equal to the specified \c expression. - \param expression Value string describing the way pixel values are compared. - **/ - bool operator==(const char *const expression) const { - if (is_empty()) return !*expression; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - bool is_equal = true; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - const T *ptrs = _data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { if (!is_equal) break; is_equal = ((double)*(ptrs--)==mp.eval(x,y,z,c)); } - else cimg_forXYZC(*this,x,y,z,c) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp.eval(x,y,z,c)); } - } catch (CImgException&) { - cimg::exception_mode() = omode; - is_equal = (*this==CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode() = omode; - return is_equal; - } - - //! Test if two images have the same size and values. - /** - Return \c true if the image instance and the input image \c img have the same dimensions and pixel values, and \c false otherwise. - \param img Input image to compare with. - \note - - The pixel buffer pointers data() of the two compared images do not have to be the same for operator==() to return \c true. - Only the dimensions and the pixel values matter. Thus, the comparison can be \c true even for different pixel types \c T and \c t. - \par Example - \code - const CImg img1(1,3,1,1, 0,1,2); // Construct a 1x3 vector [0;1;2] (with 'float' pixel values). - const CImg img2(1,3,1,1, 0,1,2); // Construct a 1x3 vector [0;1;2] (with 'char' pixel values). - if (img1==img2) { // Test succeeds, image dimensions and values are the same. - std::printf("'img1' and 'img2' have same dimensions and values."); - } - \endcode - **/ - template - bool operator==(const CImg& img) const { - typedef _cimg_Tt Tt; - const unsigned long siz = size(); - bool is_equal = true; - if (siz!=img.size()) return false; - t *ptrs = img._data + siz; - for (T *ptrd = _data + siz; is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)*(--ptrs))) {} - return is_equal; - } - - //! Test if pixels of an image are all different from a value. - /** - Return \c true is all pixels of the image instance are different than the specified \c value. - \param value Reference value to compare with. - **/ - template - bool operator!=(const t value) const { - return !((*this)==value); - } - - //! Test if all pixel values of an image are different from a specified expression. - /** - Return \c true is all pixels of the image instance are different to the specified \c expression. - \param expression Value string describing the way pixel values are compared. - **/ - bool operator!=(const char *const expression) const { - return !((*this)==expression); - } - - //! Test if two images have different sizes or values. - /** - Return \c true if the image instance and the input image \c img have different dimensions or pixel values, and \c false otherwise. - \param img Input image to compare with. - \note - - Writing \c img1!=img2 is equivalent to \c !(img1==img2). - **/ - template - bool operator!=(const CImg& img) const { - return !((*this)==img); - } - - //! Construct an image list from two images. - /** - Return a new list of image (\c CImgList instance) containing exactly two elements: - - A copy of the image instance, at position [\c 0]. - - A copy of the specified image \c img, at position [\c 1]. - - \param img Input image that will be the second image of the resulting list. - \note - - The family of operator,() is convenient to easily create list of images, but it is also \e quite \e slow in practice (see warning below). - - Constructed lists contain no shared images. If image instance or input image \c img are shared, they are - inserted as new non-shared copies in the resulting list. - - The pixel type of the returned list may be a superset of the initial pixel type \c T, if necessary. - \warning - - Pipelining operator,() \c N times will perform \c N copies of the entire content of a (growing) image list. - This may become very expensive in terms of speed and used memory. You should avoid using this technique to - build a new CImgList instance from several images, if you are seeking for performance. - Fast insertions of images in an image list are possible with CImgList::insert(const CImg&,unsigned int,bool) or - move_to(CImgList&,unsigned int). - \par Example - \code - const CImg - img1("reference.jpg"), - img2 = img1.get_mirror('x'), - img3 = img2.get_blur(5); - const CImgList list = (img1,img2); // Create list of two elements from 'img1' and 'img2'. - (list,img3).display(); // Display image list containing copies of 'img1','img2' and 'img3'. - \endcode - \image html ref_operator_comma.jpg - **/ - template - CImgList<_cimg_Tt> operator,(const CImg& img) const { - return CImgList<_cimg_Tt>(*this,img); - } - - //! Construct an image list from image instance and an input image list. - /** - Return a new list of images (\c CImgList instance) containing exactly \c list.size() \c + \c 1 elements: - - A copy of the image instance, at position [\c 0]. - - A copy of the specified image list \c list, from positions [\c 1] to [\c list.size()]. - - \param list Input image list that will be appended to the image instance. - \note - - Similar to operator,(const CImg&) const, except that it takes an image list as an argument. - **/ - template - CImgList<_cimg_Tt> operator,(const CImgList& list) const { - return CImgList<_cimg_Tt>(list,false).insert(*this,0); - } - - //! Split image along specified axis. - /** - Return a new list of images (\c CImgList instance) containing the splitted components - of the instance image along the specified axis. - \param axis Splitting axis (can be '\c x','\c y','\c z' or '\c c') - \note - - Similar to get_split(char,int) const, with default second argument. - \par Example - \code - const CImg img("reference.jpg"); // Load a RGB color image. - const CImgList list = (img<'c'); // Get a list of its three R,G,B channels. - (img,list).display(); - \endcode - \image html ref_operator_less.jpg - **/ - CImgList operator<(const char axis) const { - return get_split(axis); - } - - //@} - //------------------------------------- - // - //! \name Instance Characteristics - //@{ - //------------------------------------- - - //! Return the type of image pixel values as a C string. - /** - Return a \c char* string containing the usual type name of the image pixel values - (i.e. a stringified version of the template parameter \c T). - \note - - The returned string may contain spaces (as in \c "unsigned char"). - - If the pixel type \c T does not correspond to a registered type, the string "unknown" is returned. - **/ - static const char* pixel_type() { - return cimg::type::string(); - } - - //! Return the number of image columns. - /** - Return the image width, i.e. the image dimension along the X-axis. - \note - - The width() of an empty image is equal to \c 0. - - width() is typically equal to \c 1 when considering images as \e vectors for matrix calculations. - - width() returns an \c int, although the image width is internally stored as an \c unsigned \c int. - Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving - \c unsigned \c int variables. - Access to the initial \c unsigned \c int variable is possible (though not recommended) by (*this)._width. - **/ - int width() const { - return (int)_width; - } - - //! Return the number of image rows. - /** - Return the image height, i.e. the image dimension along the Y-axis. - \note - - The height() of an empty image is equal to \c 0. - - height() returns an \c int, although the image height is internally stored as an \c unsigned \c int. - Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving - \c unsigned \c int variables. - Access to the initial \c unsigned \c int variable is possible (though not recommended) by (*this)._height. - **/ - int height() const { - return (int)_height; - } - - //! Return the number of image slices. - /** - Return the image depth, i.e. the image dimension along the Z-axis. - \note - - The depth() of an empty image is equal to \c 0. - - depth() is typically equal to \c 1 when considering usual 2d images. When depth()\c > \c 1, the image - is said to be \e volumetric. - - depth() returns an \c int, although the image depth is internally stored as an \c unsigned \c int. - Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving - \c unsigned \c int variables. - Access to the initial \c unsigned \c int variable is possible (though not recommended) by (*this)._depth. - **/ - int depth() const { - return (int)_depth; - } - - //! Return the number of image channels. - /** - Return the number of image channels, i.e. the image dimension along the C-axis. - \note - - The spectrum() of an empty image is equal to \c 0. - - spectrum() is typically equal to \c 1 when considering scalar-valued images, to \c 3 for RGB-coded color images, and to - \c 4 for RGBA-coded color images (with alpha-channel). The number of channels of an image instance - is not limited. The meaning of the pixel values is not linked up to the number of channels - (e.g. a 4-channel image may indifferently stands for a RGBA or CMYK color image). - - spectrum() returns an \c int, although the image spectrum is internally stored as an \c unsigned \c int. - Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving - \c unsigned \c int variables. - Access to the initial \c unsigned \c int variable is possible (though not recommended) by (*this)._spectrum. - **/ - int spectrum() const { - return (int)_spectrum; - } - - //! Return the total number of pixel values. - /** - Return width()*\ref height()*\ref depth()*\ref spectrum(), - i.e. the total number of values of type \c T in the pixel buffer of the image instance. - \note - - The size() of an empty image is equal to \c 0. - - The allocated memory size for a pixel buffer of a non-shared \c CImg instance is equal to size()*sizeof(T). - \par Example - \code - const CImg img(100,100,1,3); // Construct new 100x100 color image. - if (img.size()==30000) // Test succeeds. - std::printf("Pixel buffer uses %lu bytes", - img.size()*sizeof(float)); - \endcode - **/ - unsigned long size() const { - return (unsigned long)_width*_height*_depth*_spectrum; - } - - //! Return a pointer to the first pixel value. - /** - Return a \c T*, or a \c const \c T* pointer to the first value in the pixel buffer of the image instance, - whether the instance is \c const or not. - \note - - The data() of an empty image is equal to \c 0 (null pointer). - - The allocated pixel buffer for the image instance starts from \c data() - and goes to data()+\ref size()-1 (included). - - To get the pointer to one particular location of the pixel buffer, use data(unsigned int,unsigned int,unsigned int,unsigned int) instead. - **/ - T* data() { - return _data; - } - - //! Return a pointer to the first pixel value \const. - const T* data() const { - return _data; - } - - //! Return a pointer to a located pixel value. - /** - Return a \c T*, or a \c const \c T* pointer to the value located at (\c x,\c y,\c z,\c c) in the pixel buffer of the image instance, - whether the instance is \c const or not. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Writing \c img.data(x,y,z,c) is equivalent to &(img(x,y,z,c)). Thus, this method has the same properties as - operator()(unsigned int,unsigned int,unsigned int,unsigned int). - **/ -#if cimg_verbosity>=3 - T *data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { - const unsigned long off = (unsigned long)offset(x,y,z,c); - if (off>=size()) - cimg::warn(_cimg_instance - "data(): Invalid pointer request, at coordinates (%u,%u,%u,%u) [offset=%u].", - cimg_instance, - x,y,z,c,off); - return _data + off; - } - - //! Return a pointer to a located pixel value \const. - const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { - return const_cast*>(this)->data(x,y,z,c); - } -#else - T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { - return _data + x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; - } - - const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { - return _data + x + y*_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; - } -#endif - - //! Return the offset to a located pixel value, with respect to the beginning of the pixel buffer. - /** - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Writing \c img.data(x,y,z,c) is equivalent to &(img(x,y,z,c)) - img.data(). - Thus, this method has the same properties as operator()(unsigned int,unsigned int,unsigned int,unsigned int). - \par Example - \code - const CImg img(100,100,1,3); // Define a 100x100 RGB-color image. - const long off = img.offset(10,10,0,2); // Get the offset of the blue value of the pixel located at (10,10). - const float val = img[off]; // Get the blue value of this pixel. - \endcode - **/ - long offset(const int x, const int y=0, const int z=0, const int c=0) const { - return x + y*(long)_width + z*(long)_width*_height + c*(long)_width*_height*_depth; - } - - //! Return a CImg::iterator pointing to the first pixel value. - /** - \note - - Equivalent to data(). - - It has been mainly defined for compatibility with STL naming conventions. - **/ - iterator begin() { - return _data; - } - - //! Return a CImg::iterator pointing to the first value of the pixel buffer \const. - const_iterator begin() const { - return _data; - } - - //! Return a CImg::iterator pointing next to the last pixel value. - /** - \note - - Writing \c img.end() is equivalent to img.data() + img.size(). - - It has been mainly defined for compatibility with STL naming conventions. - \warning - - The returned iterator actually points to a value located \e outside the acceptable bounds of the pixel buffer. Trying - to read or write the content of the returned iterator will probably result in a crash. Use it mainly as an - strict upper bound for a CImg::iterator. - \par Example - \code - CImg img(100,100,1,3); // Define a 100x100 RGB color image. - for (CImg::iterator it = img.begin(); it::iterator pointing next to the last pixel value \const. - const_iterator end() const { - return _data + size(); - } - - //! Return a reference to the first pixel value. - /** - \note - - Writing \c img.front() is equivalent to img[0], or img(0,0,0,0). - - It has been mainly defined for compatibility with STL naming conventions. - **/ - T& front() { - return *_data; - } - - //! Return a reference to the first pixel value \const. - const T& front() const { - return *_data; - } - - //! Return a reference to the last pixel value. - /** - \note - - Writing \c img.end() is equivalent to img[img.size()-1], or - img(img.width()-1,img.height()-1,img.depth()-1,img.spectrum()-1). - - It has been mainly defined for compatibility with STL naming conventions. - **/ - T& back() { - return *(_data + size() - 1); - } - - //! Return a reference to the last pixel value \const. - const T& back() const { - return *(_data + size() - 1); - } - - //! Access to a pixel value at a specified offset, using Dirichlet boundary conditions. - /** - Return a reference to the pixel value of the image instance located at a specified \c offset, - or to a specified default value in case of out-of-bounds access. - \param offset Offset to the desired pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note - - Writing \c img.at(offset,out_value) is similar to img[offset], except that if \c offset - is outside bounds (e.g. \c offset<0 or \c offset>=img.size()), a reference to a value \c out_value - is safely returned instead. - - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when - you are \e not sure about the validity of the specified pixel offset. - **/ - T& at(const int offset, const T out_value) { - return (offset<0 || offset>=(int)size())?(cimg::temporary(out_value)=out_value):(*this)[offset]; - } - - //! Access to a pixel value at a specified offset, using Dirichlet boundary conditions \const. - T at(const int offset, const T out_value) const { - return (offset<0 || offset>=(int)size())?out_value:(*this)[offset]; - } - - //! Access to a pixel value at a specified offset, using Neumann boundary conditions. - /** - Return a reference to the pixel value of the image instance located at a specified \c offset, - or to the nearest pixel location in the image instance in case of out-of-bounds access. - \param offset Offset to the desired pixel value. - \note - - Similar to at(int,const T), except that an out-of-bounds access returns the value of the - nearest pixel in the image instance, regarding the specified offset, i.e. - - If \c offset<0, then \c img[0] is returned. - - If \c offset>=img.size(), then \c img[img.size()-1] is returned. - - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when - you are \e not sure about the validity of the specified pixel offset. - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _at(int). - **/ - T& at(const int offset) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "at(): Empty instance.", - cimg_instance); - return _at(offset); - } - - T& _at(const int offset) { - const unsigned int siz = (unsigned int)size(); - return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; - } - - //! Access to a pixel value at a specified offset, using Neumann boundary conditions \const. - T at(const int offset) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "at(): Empty instance.", - cimg_instance); - return _at(offset); - } - - T _at(const int offset) const { - const unsigned int siz = (unsigned int)size(); - return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X-coordinate. - /** - Return a reference to the pixel value of the image instance located at (\c x,\c y,\c z,\c c), - or to a specified default value in case of out-of-bounds access along the X-axis. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c (\c x,\c y,\c z,\c c) is outside image bounds. - \note - - Similar to operator()(), except that an out-of-bounds access along the X-axis returns the specified value \c out_value. - - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when - you are \e not sure about the validity of the specified pixel coordinates. - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - T& atX(const int x, const int y, const int z, const int c, const T out_value) { - return (x<0 || x>=width())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X-coordinate \const. - T atX(const int x, const int y, const int z, const int c, const T out_value) const { - return (x<0 || x>=width())?out_value:(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X-coordinate. - /** - Return a reference to the pixel value of the image instance located at (\c x,\c y,\c z,\c c), - or to the nearest pixel location in the image instance in case of out-of-bounds access along the X-axis. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Similar to at(int,int,int,int,const T), except that an out-of-bounds access returns the value of the - nearest pixel in the image instance, regarding the specified X-coordinate. - - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when - you are \e not sure about the validity of the specified pixel coordinates. - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _at(int,int,int,int). - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - T& atX(const int x, const int y=0, const int z=0, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atX(): Empty instance.", - cimg_instance); - return _atX(x,y,z,c); - } - - T& _atX(const int x, const int y=0, const int z=0, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X-coordinate \const. - T atX(const int x, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atX(): Empty instance.", - cimg_instance); - return _atX(x,y,z,c); - } - - T _atX(const int x, const int y=0, const int z=0, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X and Y-coordinates. - /** - Similar to atX(int,int,int,int,const T), except that boundary checking is performed both on X and Y-coordinates. - **/ - T& atXY(const int x, const int y, const int z, const int c, const T out_value) { - return (x<0 || y<0 || x>=width() || y>=height())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X and Y coordinates \const. - T atXY(const int x, const int y, const int z, const int c, const T out_value) const { - return (x<0 || y<0 || x>=width() || y>=height())?out_value:(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X and Y-coordinates. - /** - Similar to atX(int,int,int,int), except that boundary checking is performed both on X and Y-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _atXY(int,int,int,int). - **/ - T& atXY(const int x, const int y, const int z=0, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXY(): Empty instance.", - cimg_instance); - return _atXY(x,y,z,c); - } - - T& _atXY(const int x, const int y, const int z=0, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X and Y-coordinates \const. - T atXY(const int x, const int y, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXY(): Empty instance.", - cimg_instance); - return _atXY(x,y,z,c); - } - - T _atXY(const int x, const int y, const int z=0, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X,Y and Z-coordinates. - /** - Similar to atX(int,int,int,int,const T), except that boundary checking is performed both on X,Y and Z-coordinates. - **/ - T& atXYZ(const int x, const int y, const int z, const int c, const T out_value) { - return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())? - (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions for the X,Y and Z-coordinates \const. - T atXYZ(const int x, const int y, const int z, const int c, const T out_value) const { - return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())?out_value:(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X,Y and Z-coordinates. - /** - Similar to atX(int,int,int,int), except that boundary checking is performed both on X,Y and Z-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _atXYZ(int,int,int,int). - **/ - T& atXYZ(const int x, const int y, const int z, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXYZ(): Empty instance.", - cimg_instance); - return _atXYZ(x,y,z,c); - } - - T& _atXYZ(const int x, const int y, const int z, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z),c); - } - - //! Access to a pixel value, using Neumann boundary conditions for the X,Y and Z-coordinates \const. - T atXYZ(const int x, const int y, const int z, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXYZ(): Empty instance.", - cimg_instance); - return _atXYZ(x,y,z,c); - } - - T _atXYZ(const int x, const int y, const int z, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z),c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions. - /** - Similar to atX(int,int,int,int,const T), except that boundary checking is performed on all X,Y,Z and C-coordinates. - **/ - T& atXYZC(const int x, const int y, const int z, const int c, const T out_value) { - return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())? - (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Dirichlet boundary conditions \const. - T atXYZC(const int x, const int y, const int z, const int c, const T out_value) const { - return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())?out_value:(*this)(x,y,z,c); - } - - //! Access to a pixel value, using Neumann boundary conditions. - /** - Similar to atX(int,int,int,int), except that boundary checking is performed on all X,Y,Z and C-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _atXYZC(int,int,int,int). - **/ - T& atXYZC(const int x, const int y, const int z, const int c) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXYZC(): Empty instance.", - cimg_instance); - return _atXYZC(x,y,z,c); - } - - T& _atXYZC(const int x, const int y, const int z, const int c) { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); - } - - //! Access to a pixel value, using Neumann boundary conditions \const. - T atXYZC(const int x, const int y, const int z, const int c) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "atXYZC(): Empty instance.", - cimg_instance); - return _atXYZC(x,y,z,c); - } - - T _atXYZC(const int x, const int y, const int z, const int c) const { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); - } - - //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X-coordinate. - /** - Return a linearly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), - or a specified default value in case of out-of-bounds access along the X-axis. - \param fx X-coordinate of the pixel value (float-valued). - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c (\c fx,\c y,\c z,\c c) is outside image bounds. - \note - - Similar to atX(int,int,int,int,const T), except that the returned pixel value is approximated by a linear interpolation along the X-axis, - if corresponding coordinates are not integers. - - The type of the returned pixel value is extended to \c float, if the pixel type \c T is not float-valued. - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - Tfloat linear_atX(const float fx, const int y, const int z, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1; - const float - dx = fx - x; - const Tfloat - Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atXY(nx,y,z,c,out_value); - return Ic + dx*(In-Ic); - } - - //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X-coordinate. - /** - Return a linearly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), - or the value of the nearest pixel location in the image instance in case of out-of-bounds access along the X-axis. - \param fx X-coordinate of the pixel value (float-valued). - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Similar to linear_atX(float,int,int,int,const T) const, except that an out-of-bounds access returns the value of the - nearest pixel in the image instance, regarding the specified X-coordinate. - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _linear_atX(float,int,int,int). - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - Tfloat linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "linear_atX(): Empty instance.", - cimg_instance); - - return _linear_atX(fx,y,z,c); - } - - Tfloat _linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx); - const unsigned int - x = (unsigned int)nfx; - const float - dx = nfx - x; - const unsigned int - nx = dx>0?x+1:x; - const Tfloat - Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c); - return Ic + dx*(In-Ic); - } - - //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X and Y-coordinates. - /** - Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the boundary checking - are achieved both for X and Y-coordinates. - **/ - Tfloat linear_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1, - y = (int)fy - (fy>=0?0:1), ny = y + 1; - const float - dx = fx - x, - dy = fy - y; - const Tfloat - Icc = (Tfloat)atXY(x,y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), - Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value); - return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); - } - - //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X and Y-coordinates. - /** - Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking - are achieved both for X and Y-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _linear_atXY(float,float,int,int). - **/ - Tfloat linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "linear_atXY(): Empty instance.", - cimg_instance); - - return _linear_atXY(fx,fy,z,c); - } - - Tfloat _linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy); - const unsigned int - x = (unsigned int)nfx, - y = (unsigned int)nfy; - const float - dx = nfx - x, - dy = nfy - y; - const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y; - const Tfloat - Icc = (Tfloat)(*this)(x,y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), - Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c); - return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); - } - - //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. - /** - Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the boundary checking - are achieved both for X,Y and Z-coordinates. - **/ - Tfloat linear_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1, - y = (int)fy - (fy>=0?0:1), ny = y + 1, - z = (int)fz - (fz>=0?0:1), nz = z + 1; - const float - dx = fx - x, - dy = fy - y, - dz = fz - z; - const Tfloat - Iccc = (Tfloat)atXYZ(x,y,z,c,out_value), Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), - Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), - Iccn = (Tfloat)atXYZ(x,y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), - Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value); - return Iccc + - dx*(Incc-Iccc + - dy*(Iccc+Innc-Icnc-Incc + - dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + - dz*(Iccc+Incn-Iccn-Incc)) + - dy*(Icnc-Iccc + - dz*(Iccc+Icnn-Iccn-Icnc)) + - dz*(Iccn-Iccc); - } - - //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. - /** - Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking - are achieved both for X,Y and Z-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _linear_atXYZ(float,float,float,int). - **/ - Tfloat linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "linear_atXYZ(): Empty instance.", - cimg_instance); - - return _linear_atXYZ(fx,fy,fz,c); - } - - Tfloat _linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); - const unsigned int - x = (unsigned int)nfx, - y = (unsigned int)nfy, - z = (unsigned int)nfz; - const float - dx = nfx - x, - dy = nfy - y, - dz = nfz - z; - const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y, - nz = dz>0?z+1:z; - const Tfloat - Iccc = (Tfloat)(*this)(x,y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), - Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), - Iccn = (Tfloat)(*this)(x,y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), - Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c); - return Iccc + - dx*(Incc-Iccc + - dy*(Iccc+Innc-Icnc-Incc + - dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + - dz*(Iccc+Incn-Iccn-Incc)) + - dy*(Icnc-Iccc + - dz*(Iccc+Icnn-Iccn-Icnc)) + - dz*(Iccn-Iccc); - } - - //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for all X,Y,Z and C-coordinates. - /** - Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the boundary checking - are achieved for all X,Y,Z and C-coordinates. - **/ - Tfloat linear_atXYZC(const float fx, const float fy, const float fz, const float fc, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1, - y = (int)fy - (fy>=0?0:1), ny = y + 1, - z = (int)fz - (fz>=0?0:1), nz = z + 1, - c = (int)fc - (fc>=0?0:1), nc = c + 1; - const float - dx = fx - x, - dy = fy - y, - dz = fz - z, - dc = fc - c; - const Tfloat - Icccc = (Tfloat)atXYZC(x,y,z,c,out_value), Inccc = (Tfloat)atXYZC(nx,y,z,c,out_value), - Icncc = (Tfloat)atXYZC(x,ny,z,c,out_value), Inncc = (Tfloat)atXYZC(nx,ny,z,c,out_value), - Iccnc = (Tfloat)atXYZC(x,y,nz,c,out_value), Incnc = (Tfloat)atXYZC(nx,y,nz,c,out_value), - Icnnc = (Tfloat)atXYZC(x,ny,nz,c,out_value), Innnc = (Tfloat)atXYZC(nx,ny,nz,c,out_value), - Icccn = (Tfloat)atXYZC(x,y,z,nc,out_value), Inccn = (Tfloat)atXYZC(nx,y,z,nc,out_value), - Icncn = (Tfloat)atXYZC(x,ny,z,nc,out_value), Inncn = (Tfloat)atXYZC(nx,ny,z,nc,out_value), - Iccnn = (Tfloat)atXYZC(x,y,nz,nc,out_value), Incnn = (Tfloat)atXYZC(nx,y,nz,nc,out_value), - Icnnn = (Tfloat)atXYZC(x,ny,nz,nc,out_value), Innnn = (Tfloat)atXYZC(nx,ny,nz,nc,out_value); - return Icccc + - dx*(Inccc-Icccc + - dy*(Icccc+Inncc-Icncc-Inccc + - dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + - dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + - dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + - dz*(Icccc+Incnc-Iccnc-Inccc + - dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + - dc*(Icccc+Inccn-Inccc-Icccn)) + - dy*(Icncc-Icccc + - dz*(Icccc+Icnnc-Iccnc-Icncc + - dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + - dc*(Icccc+Icncn-Icncc-Icccn)) + - dz*(Iccnc-Icccc + - dc*(Icccc+Iccnn-Iccnc-Icccn)) + - dc*(Icccn-Icccc); - } - - //! Return pixel value, using linear interpolation and Neumann boundary conditions for all X,Y,Z and C-coordinates. - /** - Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking - are achieved for all X,Y,Z and C-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _linear_atXYZC(float,float,float,float). - **/ - Tfloat linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "linear_atXYZC(): Empty instance.", - cimg_instance); - - return _linear_atXYZC(fx,fy,fz,fc); - } - - Tfloat _linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz), - nfc = fc<0?0:(fc>_spectrum-1?_spectrum-1:fc); - const unsigned int - x = (unsigned int)nfx, - y = (unsigned int)nfy, - z = (unsigned int)nfz, - c = (unsigned int)nfc; - const float - dx = nfx - x, - dy = nfy - y, - dz = nfz - z, - dc = nfc - c; - const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y, - nz = dz>0?z+1:z, - nc = dc>0?c+1:c; - const Tfloat - Icccc = (Tfloat)(*this)(x,y,z,c), Inccc = (Tfloat)(*this)(nx,y,z,c), - Icncc = (Tfloat)(*this)(x,ny,z,c), Inncc = (Tfloat)(*this)(nx,ny,z,c), - Iccnc = (Tfloat)(*this)(x,y,nz,c), Incnc = (Tfloat)(*this)(nx,y,nz,c), - Icnnc = (Tfloat)(*this)(x,ny,nz,c), Innnc = (Tfloat)(*this)(nx,ny,nz,c), - Icccn = (Tfloat)(*this)(x,y,z,nc), Inccn = (Tfloat)(*this)(nx,y,z,nc), - Icncn = (Tfloat)(*this)(x,ny,z,nc), Inncn = (Tfloat)(*this)(nx,ny,z,nc), - Iccnn = (Tfloat)(*this)(x,y,nz,nc), Incnn = (Tfloat)(*this)(nx,y,nz,nc), - Icnnn = (Tfloat)(*this)(x,ny,nz,nc), Innnn = (Tfloat)(*this)(nx,ny,nz,nc); - return Icccc + - dx*(Inccc-Icccc + - dy*(Icccc+Inncc-Icncc-Inccc + - dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + - dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + - dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + - dz*(Icccc+Incnc-Iccnc-Inccc + - dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + - dc*(Icccc+Inccn-Inccc-Icccn)) + - dy*(Icncc-Icccc + - dz*(Icccc+Icnnc-Iccnc-Icncc + - dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + - dc*(Icccc+Icncn-Icncc-Icccn)) + - dz*(Iccnc-Icccc + - dc*(Icccc+Iccnn-Iccnc-Icccn)) + - dc*(Icccn-Icccc); - } - - //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. - /** - Return a cubicly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), - or a specified default value in case of out-of-bounds access along the X-axis. - The cubic interpolation uses Hermite splines. - \param fx d X-coordinate of the pixel value (float-valued). - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c (\c fx,\c y,\c z,\c c) is outside image bounds. - \note - - Similar to linear_atX(float,int,int,int,const T) const, except that the returned pixel value is approximated by a - \e cubic interpolation along the X-axis. - - The type of the returned pixel value is extended to \c float, if the pixel type \c T is not float-valued. - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2; - const float - dx = fx - x; - const Tfloat - Ip = (Tfloat)atX(px,y,z,c,out_value), Ic = (Tfloat)atX(x,y,z,c,out_value), - In = (Tfloat)atX(nx,y,z,c,out_value), Ia = (Tfloat)atX(ax,y,z,c,out_value); - return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. - /** - Similar to cubic_atX(float,int,int,int,const T) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atX(fx,y,z,c,out_value); - return valmax_value?max_value:val; - } - - //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X-coordinate. - /** - Return a cubicly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), - or the value of the nearest pixel location in the image instance in case of out-of-bounds access along the X-axis. - The cubic interpolation uses Hermite splines. - \param fx X-coordinate of the pixel value (float-valued). - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Similar to cubic_atX(float,int,int,int,const T) const, except that the returned pixel value is approximated by a cubic interpolation along the X-axis. - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _cubic_atX(float,int,int,int). - \warning - - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. - **/ - Tfloat cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "cubic_atX(): Empty instance.", - cimg_instance); - return _cubic_atX(fx,y,z,c); - } - - Tfloat _cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx); - const int - x = (int)nfx; - const float - dx = nfx - x; - const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2; - const Tfloat - Ip = (Tfloat)(*this)(px,y,z,c), Ic = (Tfloat)(*this)(x,y,z,c), - In = (Tfloat)(*this)(nx,y,z,c), Ia = (Tfloat)(*this)(ax,y,z,c); - return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the X-coordinate. - /** - Similar to cubic_atX(float,int,int,int) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atX(const float fx, const int y, const int z, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atX(fx,y,z,c); - return valmax_value?max_value:val; - } - - Tfloat _cubic_atX(const float fx, const int y, const int z, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = _cubic_atX(fx,y,z,c); - return valmax_value?max_value:val; - } - - //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X and Y-coordinates. - /** - Similar to cubic_atX(float,int,int,int,const T) const, except that the cubic interpolation and boundary checking - are achieved both for X and Y-coordinates. - **/ - Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, - y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2; - const float dx = fx - x, dy = fy - y; - const Tfloat - Ipp = (Tfloat)atXY(px,py,z,c,out_value), Icp = (Tfloat)atXY(x,py,z,c,out_value), Inp = (Tfloat)atXY(nx,py,z,c,out_value), Iap = (Tfloat)atXY(ax,py,z,c,out_value), - Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), - Ipc = (Tfloat)atXY(px,y,z,c,out_value), Icc = (Tfloat)atXY(x, y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), Iac = (Tfloat)atXY(ax,y,z,c,out_value), - Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), - Ipn = (Tfloat)atXY(px,ny,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value), Ian = (Tfloat)atXY(ax,ny,z,c,out_value), - In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), - Ipa = (Tfloat)atXY(px,ay,z,c,out_value), Ica = (Tfloat)atXY(x,ay,z,c,out_value), Ina = (Tfloat)atXY(nx,ay,z,c,out_value), Iaa = (Tfloat)atXY(ax,ay,z,c,out_value), - Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X and Y-coordinates. - /** - Similar to cubic_atXY(float,float,int,int,const T) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atXY(fx,fy,z,c,out_value); - return valmax_value?max_value:val; - } - - //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X and Y-coordinates. - /** - Similar to cubic_atX(float,int,int,int) const, except that the cubic interpolation and boundary checking - are achieved for both X and Y-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _cubic_atXY(float,float,int,int). - **/ - Tfloat cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "cubic_atXY(): Empty instance.", - cimg_instance); - return _cubic_atXY(fx,fy,z,c); - } - - Tfloat _cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy); - const int x = (int)nfx, y = (int)nfy; - const float dx = nfx - x, dy = nfy - y; - const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, - py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2; - const Tfloat - Ipp = (Tfloat)(*this)(px,py,z,c), Icp = (Tfloat)(*this)(x,py,z,c), Inp = (Tfloat)(*this)(nx,py,z,c), Iap = (Tfloat)(*this)(ax,py,z,c), - Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), - Ipc = (Tfloat)(*this)(px,y,z,c), Icc = (Tfloat)(*this)(x, y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), Iac = (Tfloat)(*this)(ax,y,z,c), - Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), - Ipn = (Tfloat)(*this)(px,ny,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c), Ian = (Tfloat)(*this)(ax,ny,z,c), - In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), - Ipa = (Tfloat)(*this)(px,ay,z,c), Ica = (Tfloat)(*this)(x,ay,z,c), Ina = (Tfloat)(*this)(nx,ay,z,c), Iaa = (Tfloat)(*this)(ax,ay,z,c), - Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the X and Y-coordinates. - /** - Similar to cubic_atXY(float,float,int,int) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atXY(fx,fy,z,c); - return valmax_value?max_value:val; - } - - Tfloat _cubic_atXY(const float fx, const float fy, const int z, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = _cubic_atXY(fx,fy,z,c); - return valmax_value?max_value:val; - } - - //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. - /** - Similar to cubic_atX(float,int,int,int,const T) const, except that the cubic interpolation and boundary checking - are achieved both for X,Y and Z-coordinates. - **/ - Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { - const int - x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, - y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2, - z = (int)fz - (fz>=0?0:1), pz = z - 1, nz = z + 1, az = z + 2; - const float dx = fx - x, dy = fy - y, dz = fz - z; - const Tfloat - Ippp = (Tfloat)atXYZ(px,py,pz,c,out_value), Icpp = (Tfloat)atXYZ(x,py,pz,c,out_value), - Inpp = (Tfloat)atXYZ(nx,py,pz,c,out_value), Iapp = (Tfloat)atXYZ(ax,py,pz,c,out_value), - Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), - Ipcp = (Tfloat)atXYZ(px,y,pz,c,out_value), Iccp = (Tfloat)atXYZ(x, y,pz,c,out_value), - Incp = (Tfloat)atXYZ(nx,y,pz,c,out_value), Iacp = (Tfloat)atXYZ(ax,y,pz,c,out_value), - Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), - Ipnp = (Tfloat)atXYZ(px,ny,pz,c,out_value), Icnp = (Tfloat)atXYZ(x,ny,pz,c,out_value), - Innp = (Tfloat)atXYZ(nx,ny,pz,c,out_value), Ianp = (Tfloat)atXYZ(ax,ny,pz,c,out_value), - Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), - Ipap = (Tfloat)atXYZ(px,ay,pz,c,out_value), Icap = (Tfloat)atXYZ(x,ay,pz,c,out_value), - Inap = (Tfloat)atXYZ(nx,ay,pz,c,out_value), Iaap = (Tfloat)atXYZ(ax,ay,pz,c,out_value), - Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), - Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), - Ippc = (Tfloat)atXYZ(px,py,z,c,out_value), Icpc = (Tfloat)atXYZ(x,py,z,c,out_value), - Inpc = (Tfloat)atXYZ(nx,py,z,c,out_value), Iapc = (Tfloat)atXYZ(ax,py,z,c,out_value), - Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), - Ipcc = (Tfloat)atXYZ(px,y,z,c,out_value), Iccc = (Tfloat)atXYZ(x, y,z,c,out_value), - Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), Iacc = (Tfloat)atXYZ(ax,y,z,c,out_value), - Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), - Ipnc = (Tfloat)atXYZ(px,ny,z,c,out_value), Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), - Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), Ianc = (Tfloat)atXYZ(ax,ny,z,c,out_value), - Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), - Ipac = (Tfloat)atXYZ(px,ay,z,c,out_value), Icac = (Tfloat)atXYZ(x,ay,z,c,out_value), - Inac = (Tfloat)atXYZ(nx,ay,z,c,out_value), Iaac = (Tfloat)atXYZ(ax,ay,z,c,out_value), - Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), - Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), - Ippn = (Tfloat)atXYZ(px,py,nz,c,out_value), Icpn = (Tfloat)atXYZ(x,py,nz,c,out_value), - Inpn = (Tfloat)atXYZ(nx,py,nz,c,out_value), Iapn = (Tfloat)atXYZ(ax,py,nz,c,out_value), - Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), - Ipcn = (Tfloat)atXYZ(px,y,nz,c,out_value), Iccn = (Tfloat)atXYZ(x, y,nz,c,out_value), - Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Iacn = (Tfloat)atXYZ(ax,y,nz,c,out_value), - Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), - Ipnn = (Tfloat)atXYZ(px,ny,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), - Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value), Iann = (Tfloat)atXYZ(ax,ny,nz,c,out_value), - Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), - Ipan = (Tfloat)atXYZ(px,ay,nz,c,out_value), Ican = (Tfloat)atXYZ(x,ay,nz,c,out_value), - Inan = (Tfloat)atXYZ(nx,ay,nz,c,out_value), Iaan = (Tfloat)atXYZ(ax,ay,nz,c,out_value), - Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), - In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), - Ippa = (Tfloat)atXYZ(px,py,az,c,out_value), Icpa = (Tfloat)atXYZ(x,py,az,c,out_value), - Inpa = (Tfloat)atXYZ(nx,py,az,c,out_value), Iapa = (Tfloat)atXYZ(ax,py,az,c,out_value), - Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), - Ipca = (Tfloat)atXYZ(px,y,az,c,out_value), Icca = (Tfloat)atXYZ(x, y,az,c,out_value), - Inca = (Tfloat)atXYZ(nx,y,az,c,out_value), Iaca = (Tfloat)atXYZ(ax,y,az,c,out_value), - Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), - Ipna = (Tfloat)atXYZ(px,ny,az,c,out_value), Icna = (Tfloat)atXYZ(x,ny,az,c,out_value), - Inna = (Tfloat)atXYZ(nx,ny,az,c,out_value), Iana = (Tfloat)atXYZ(ax,ny,az,c,out_value), - Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), - Ipaa = (Tfloat)atXYZ(px,ay,az,c,out_value), Icaa = (Tfloat)atXYZ(x,ay,az,c,out_value), - Inaa = (Tfloat)atXYZ(nx,ay,az,c,out_value), Iaaa = (Tfloat)atXYZ(ax,ay,az,c,out_value), - Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), - Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. - /** - Similar to cubic_atXYZ(float,float,float,int,const T) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atXYZ(fx,fy,fz,c,out_value); - return valmax_value?max_value:val; - } - - //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. - /** - Similar to cubic_atX(float,int,int,int) const, except that the cubic interpolation and boundary checking - are achieved both for X,Y and Z-coordinates. - \note - - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _cubic_atXYZ(float,float,float,int). - **/ - Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "cubic_atXYZ(): Empty instance.", - cimg_instance); - return _cubic_atXYZ(fx,fy,fz,c); - } - - Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { - const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); - const int x = (int)nfx, y = (int)nfy, z = (int)nfz; - const float dx = nfx - x, dy = nfy - y, dz = nfz - z; - const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, - py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2, - pz = z-1<0?0:z-1, nz = dz>0?z+1:z, az = z+2>=depth()?depth()-1:z+2; - const Tfloat - Ippp = (Tfloat)(*this)(px,py,pz,c), Icpp = (Tfloat)(*this)(x,py,pz,c), - Inpp = (Tfloat)(*this)(nx,py,pz,c), Iapp = (Tfloat)(*this)(ax,py,pz,c), - Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), - Ipcp = (Tfloat)(*this)(px,y,pz,c), Iccp = (Tfloat)(*this)(x, y,pz,c), - Incp = (Tfloat)(*this)(nx,y,pz,c), Iacp = (Tfloat)(*this)(ax,y,pz,c), - Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), - Ipnp = (Tfloat)(*this)(px,ny,pz,c), Icnp = (Tfloat)(*this)(x,ny,pz,c), - Innp = (Tfloat)(*this)(nx,ny,pz,c), Ianp = (Tfloat)(*this)(ax,ny,pz,c), - Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), - Ipap = (Tfloat)(*this)(px,ay,pz,c), Icap = (Tfloat)(*this)(x,ay,pz,c), - Inap = (Tfloat)(*this)(nx,ay,pz,c), Iaap = (Tfloat)(*this)(ax,ay,pz,c), - Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), - Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), - Ippc = (Tfloat)(*this)(px,py,z,c), Icpc = (Tfloat)(*this)(x,py,z,c), - Inpc = (Tfloat)(*this)(nx,py,z,c), Iapc = (Tfloat)(*this)(ax,py,z,c), - Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), - Ipcc = (Tfloat)(*this)(px,y,z,c), Iccc = (Tfloat)(*this)(x, y,z,c), - Incc = (Tfloat)(*this)(nx,y,z,c), Iacc = (Tfloat)(*this)(ax,y,z,c), - Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), - Ipnc = (Tfloat)(*this)(px,ny,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), - Innc = (Tfloat)(*this)(nx,ny,z,c), Ianc = (Tfloat)(*this)(ax,ny,z,c), - Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), - Ipac = (Tfloat)(*this)(px,ay,z,c), Icac = (Tfloat)(*this)(x,ay,z,c), - Inac = (Tfloat)(*this)(nx,ay,z,c), Iaac = (Tfloat)(*this)(ax,ay,z,c), - Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), - Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), - Ippn = (Tfloat)(*this)(px,py,nz,c), Icpn = (Tfloat)(*this)(x,py,nz,c), - Inpn = (Tfloat)(*this)(nx,py,nz,c), Iapn = (Tfloat)(*this)(ax,py,nz,c), - Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), - Ipcn = (Tfloat)(*this)(px,y,nz,c), Iccn = (Tfloat)(*this)(x, y,nz,c), - Incn = (Tfloat)(*this)(nx,y,nz,c), Iacn = (Tfloat)(*this)(ax,y,nz,c), - Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), - Ipnn = (Tfloat)(*this)(px,ny,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), - Innn = (Tfloat)(*this)(nx,ny,nz,c), Iann = (Tfloat)(*this)(ax,ny,nz,c), - Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), - Ipan = (Tfloat)(*this)(px,ay,nz,c), Ican = (Tfloat)(*this)(x,ay,nz,c), - Inan = (Tfloat)(*this)(nx,ay,nz,c), Iaan = (Tfloat)(*this)(ax,ay,nz,c), - Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), - In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), - Ippa = (Tfloat)(*this)(px,py,az,c), Icpa = (Tfloat)(*this)(x,py,az,c), - Inpa = (Tfloat)(*this)(nx,py,az,c), Iapa = (Tfloat)(*this)(ax,py,az,c), - Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), - Ipca = (Tfloat)(*this)(px,y,az,c), Icca = (Tfloat)(*this)(x, y,az,c), - Inca = (Tfloat)(*this)(nx,y,az,c), Iaca = (Tfloat)(*this)(ax,y,az,c), - Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), - Ipna = (Tfloat)(*this)(px,ny,az,c), Icna = (Tfloat)(*this)(x,ny,az,c), - Inna = (Tfloat)(*this)(nx,ny,az,c), Iana = (Tfloat)(*this)(ax,ny,az,c), - Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), - Ipaa = (Tfloat)(*this)(px,ay,az,c), Icaa = (Tfloat)(*this)(x,ay,az,c), - Inaa = (Tfloat)(*this)(nx,ay,az,c), Iaaa = (Tfloat)(*this)(ax,ay,az,c), - Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), - Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); - } - - //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. - /** - Similar to cubic_atXYZ(float,float,float,int) const, except that you can specify the authorized minimum and maximum of the returned value. - **/ - Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = cubic_atXYZ(fx,fy,fz,c); - return valmax_value?max_value:val; - } - - Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c, - const Tfloat min_value, const Tfloat max_value) const { - const Tfloat val = _cubic_atXYZ(fx,fy,fz,c); - return valmax_value?max_value:val; - } - - //! Set pixel value, using linear interpolation for the X and Y-coordinates. - /** - Set pixel value at specified coordinates (\c fx,\c fy,\c z,\c c) in the image instance, in a way that the value is spread - amongst several neighbors if the pixel coordinates are indeed float-valued. - \param value Pixel value to set. - \param fx X-coordinate of the pixel value (float-valued). - \param fy Y-coordinate of the pixel value (float-valued). - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param is_added Tells if the pixel value is added to (\c true), or simply replace (\c false) the current image pixel(s). - \return A reference to the current image instance. - \note - - If specified coordinates are outside image bounds, no operations are performed. - **/ - CImg& set_linear_atXY(const T& value, const float fx, const float fy=0, const int z=0, const int c=0, - const bool is_added=false) { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1, - y = (int)fy - (fy>=0?0:1), ny = y + 1; - const float - dx = fx - x, - dy = fy - y; - if (z>=0 && z=0 && c=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx& set_linear_atXYZ(const T& value, const float fx, const float fy=0, const float fz=0, const int c=0, - const bool is_added=false) { - const int - x = (int)fx - (fx>=0?0:1), nx = x + 1, - y = (int)fy - (fy>=0?0:1), ny = y + 1, - z = (int)fz - (fz>=0?0:1), nz = z + 1; - const float - dx = fx - x, - dy = fy - y, - dz = fz - z; - if (c>=0 && c=0 && z=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx=0 && nz=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx image whose buffer data() is a \c char* string describing the list of all pixel values - of the image instance (written in base 10), separated by specified \c separator character. - \param separator A \c char character which specifies the separator between values in the returned C-string. - \param max_size Maximum size of the returned image. - \note - - The returned image is never empty. - - For an empty image instance, the returned string is "". - - If \c max_size is equal to \c 0, there are no limits on the size of the returned string. - - Otherwise, if the maximum number of string characters is exceeded, the value string is cut off - and terminated by character \c '\0'. In that case, the returned image size is max_size + 1. - **/ - CImg value_string(const char separator=',', const unsigned int max_size=0) const { - if (is_empty()) return CImg::string(""); - CImgList items; - char s_item[256] = { 0 }; - const T *ptrs = _data; - unsigned int string_size = 0; - for (unsigned long off = 0, siz = (unsigned int)size(); off::format(),cimg::type::format(*(ptrs++))); - CImg item(s_item,printed_size); - item[printed_size-1] = separator; - item.move_to(items); - if (max_size) string_size+=printed_size; - } - CImg res; - (items>'x').move_to(res); - if (max_size && res._width>max_size) res.crop(0,max_size); - res.back() = 0; - return res; - } - - //@} - //------------------------------------- - // - //! \name Instance Checking - //@{ - //------------------------------------- - - //! Test shared state of the pixel buffer. - /** - Return \c true if image instance has a shared memory buffer, and \c false otherwise. - \note - - A shared image do not own his pixel buffer data() and will not deallocate it on destruction. - - Most of the time, a \c CImg image instance will \e not be shared. - - A shared image can only be obtained by a limited set of constructors and methods (see list below). - **/ - bool is_shared() const { - return _is_shared; - } - - //! Test if image instance is empty. - /** - Return \c true, if image instance is empty, i.e. does \e not contain any pixel values, has dimensions \c 0 x \c 0 x \c 0 x \c 0 - and a pixel buffer pointer set to \c 0 (null pointer), and \c false otherwise. - **/ - bool is_empty() const { - return !(_data && _width && _height && _depth && _spectrum); - } - - //! Test if image instance contains a 'inf' value. - /** - Return \c true, if image instance contains a 'inf' value, and \c false otherwise. - **/ - bool is_inf() const { - if (cimg::type::is_float()) cimg_for(*this,p,T) if (cimg::type::is_inf((float)*p)) return true; - return false; - } - - //! Test if image instance contains a 'nan' value. - /** - Return \c true, if image instance contains a 'nan' value, and \c false otherwise. - **/ - bool is_nan() const { - if (cimg::type::is_float()) cimg_for(*this,p,T) if (cimg::type::is_nan((float)*p)) return true; - return false; - } - - //! Test if image width is equal to specified value. - bool is_sameX(const unsigned int size_x) const { - return _width==size_x; - } - - //! Test if image width is equal to specified value. - template - bool is_sameX(const CImg& img) const { - return is_sameX(img._width); - } - - //! Test if image width is equal to specified value. - bool is_sameX(const CImgDisplay& disp) const { - return is_sameX(disp._width); - } - - //! Test if image height is equal to specified value. - bool is_sameY(const unsigned int size_y) const { - return _height==size_y; - } - - //! Test if image height is equal to specified value. - template - bool is_sameY(const CImg& img) const { - return is_sameY(img._height); - } - - //! Test if image height is equal to specified value. - bool is_sameY(const CImgDisplay& disp) const { - return is_sameY(disp._height); - } - - //! Test if image depth is equal to specified value. - bool is_sameZ(const unsigned int size_z) const { - return _depth==size_z; - } - - //! Test if image depth is equal to specified value. - template - bool is_sameZ(const CImg& img) const { - return is_sameZ(img._depth); - } - - //! Test if image spectrum is equal to specified value. - bool is_sameC(const unsigned int size_c) const { - return _spectrum==size_c; - } - - //! Test if image spectrum is equal to specified value. - template - bool is_sameC(const CImg& img) const { - return is_sameC(img._spectrum); - } - - //! Test if image width and height are equal to specified values. - /** - Test if is_sameX(unsigned int) const and is_sameY(unsigned int) const are both verified. - **/ - bool is_sameXY(const unsigned int size_x, const unsigned int size_y) const { - return _width==size_x && _height==size_y; - } - - //! Test if image width and height are the same as that of another image. - /** - Test if is_sameX(const CImg&) const and is_sameY(const CImg&) const are both verified. - **/ - template - bool is_sameXY(const CImg& img) const { - return is_sameXY(img._width,img._height); - } - - //! Test if image width and height are the same as that of an existing display window. - /** - Test if is_sameX(const CImgDisplay&) const and is_sameY(const CImgDisplay&) const are both verified. - **/ - bool is_sameXY(const CImgDisplay& disp) const { - return is_sameXY(disp._width,disp._height); - } - - //! Test if image width and depth are equal to specified values. - /** - Test if is_sameX(unsigned int) const and is_sameZ(unsigned int) const are both verified. - **/ - bool is_sameXZ(const unsigned int size_x, const unsigned int size_z) const { - return _width==size_x && _depth==size_z; - } - - //! Test if image width and depth are the same as that of another image. - /** - Test if is_sameX(const CImg&) const and is_sameZ(const CImg&) const are both verified. - **/ - template - bool is_sameXZ(const CImg& img) const { - return is_sameXZ(img._width,img._depth); - } - - //! Test if image width and spectrum are equal to specified values. - /** - Test if is_sameX(unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameXC(const unsigned int size_x, const unsigned int size_c) const { - return _width==size_x && _spectrum==size_c; - } - - //! Test if image width and spectrum are the same as that of another image. - /** - Test if is_sameX(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameXC(const CImg& img) const { - return is_sameXC(img._width,img._spectrum); - } - - //! Test if image height and depth are equal to specified values. - /** - Test if is_sameY(unsigned int) const and is_sameZ(unsigned int) const are both verified. - **/ - bool is_sameYZ(const unsigned int size_y, const unsigned int size_z) const { - return _height==size_y && _depth==size_z; - } - - //! Test if image height and depth are the same as that of another image. - /** - Test if is_sameY(const CImg&) const and is_sameZ(const CImg&) const are both verified. - **/ - template - bool is_sameYZ(const CImg& img) const { - return is_sameYZ(img._height,img._depth); - } - - //! Test if image height and spectrum are equal to specified values. - /** - Test if is_sameY(unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameYC(const unsigned int size_y, const unsigned int size_c) const { - return _height==size_y && _spectrum==size_c; - } - - //! Test if image height and spectrum are the same as that of another image. - /** - Test if is_sameY(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameYC(const CImg& img) const { - return is_sameYC(img._height,img._spectrum); - } - - //! Test if image depth and spectrum are equal to specified values. - /** - Test if is_sameZ(unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameZC(const unsigned int size_z, const unsigned int size_c) const { - return _depth==size_z && _spectrum==size_c; - } - - //! Test if image depth and spectrum are the same as that of another image. - /** - Test if is_sameZ(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameZC(const CImg& img) const { - return is_sameZC(img._depth,img._spectrum); - } - - //! Test if image width, height and depth are equal to specified values. - /** - Test if is_sameXY(unsigned int,unsigned int) const and is_sameZ(unsigned int) const are both verified. - **/ - bool is_sameXYZ(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z) const { - return is_sameXY(size_x,size_y) && _depth==size_z; - } - - //! Test if image width, height and depth are the same as that of another image. - /** - Test if is_sameXY(const CImg&) const and is_sameZ(const CImg&) const are both verified. - **/ - template - bool is_sameXYZ(const CImg& img) const { - return is_sameXYZ(img._width,img._height,img._depth); - } - - //! Test if image width, height and spectrum are equal to specified values. - /** - Test if is_sameXY(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameXYC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_c) const { - return is_sameXY(size_x,size_y) && _spectrum==size_c; - } - - //! Test if image width, height and spectrum are the same as that of another image. - /** - Test if is_sameXY(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameXYC(const CImg& img) const { - return is_sameXYC(img._width,img._height,img._spectrum); - } - - //! Test if image width, depth and spectrum are equal to specified values. - /** - Test if is_sameXZ(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameXZC(const unsigned int size_x, const unsigned int size_z, const unsigned int size_c) const { - return is_sameXZ(size_x,size_z) && _spectrum==size_c; - } - - //! Test if image width, depth and spectrum are the same as that of another image. - /** - Test if is_sameXZ(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameXZC(const CImg& img) const { - return is_sameXZC(img._width,img._depth,img._spectrum); - } - - //! Test if image height, depth and spectrum are equal to specified values. - /** - Test if is_sameYZ(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameYZC(const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { - return is_sameYZ(size_y,size_z) && _spectrum==size_c; - } - - //! Test if image height, depth and spectrum are the same as that of another image. - /** - Test if is_sameYZ(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameYZC(const CImg& img) const { - return is_sameYZC(img._height,img._depth,img._spectrum); - } - - //! Test if image width, height, depth and spectrum are equal to specified values. - /** - Test if is_sameXYZ(unsigned int,unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. - **/ - bool is_sameXYZC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { - return is_sameXYZ(size_x,size_y,size_z) && _spectrum==size_c; - } - - //! Test if image width, height, depth and spectrum are the same as that of another image. - /** - Test if is_sameXYZ(const CImg&) const and is_sameC(const CImg&) const are both verified. - **/ - template - bool is_sameXYZC(const CImg& img) const { - return is_sameXYZC(img._width,img._height,img._depth,img._spectrum); - } - - //! Test if specified coordinates are inside image bounds. - /** - Return \c true if pixel located at (\c x,\c y,\c z,\c c) is inside bounds of the image instance, and \c false otherwise. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note - - Return \c true only if all these conditions are verified: - - The image instance is \e not empty. - - 0<=x<=\ref width()-1. - - 0<=y<=\ref height()-1. - - 0<=z<=\ref depth()-1. - - 0<=c<=\ref spectrum()-1. - **/ - bool containsXYZC(const int x, const int y=0, const int z=0, const int c=0) const { - return !is_empty() && x>=0 && x=0 && y=0 && z=0 && c img(100,100,1,3); // Construct a 100x100 RGB color image. - const unsigned long offset = 1249; // Offset to the pixel (49,12,0,0). - unsigned int x,y,z,c; - if (img.contains(img[offset],x,y,z,c)) { // Convert offset to (x,y,z,c) coordinates. - std::printf("Offset %u refers to pixel located at (%u,%u,%u,%u).\n", - offset,x,y,z,c); - } - \endcode - **/ - template - bool contains(const T& pixel, t& x, t& y, t& z, t& c) const { - const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; - const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; - unsigned long off = (unsigned long)(ppixel - _data); - const unsigned long nc = off/whd; - off%=whd; - const unsigned long nz = off/wh; - off%=wh; - const unsigned long ny = off/_width, nx = off%_width; - x = (t)nx; y = (t)ny; z = (t)nz; c = (t)nc; - return true; - } - - //! Test if pixel value is inside image bounds and get its X,Y and Z-coordinates. - /** - Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X,Y and Z-coordinates are set. - **/ - template - bool contains(const T& pixel, t& x, t& y, t& z) const { - const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; - const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; - unsigned long off = ((unsigned long)(ppixel - _data))%whd; - const unsigned long nz = off/wh; - off%=wh; - const unsigned long ny = off/_width, nx = off%_width; - x = (t)nx; y = (t)ny; z = (t)nz; - return true; - } - - //! Test if pixel value is inside image bounds and get its X and Y-coordinates. - /** - Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X and Y-coordinates are set. - **/ - template - bool contains(const T& pixel, t& x, t& y) const { - const unsigned long wh = (unsigned long)_width*_height, siz = wh*_depth*_spectrum; - const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; - unsigned long off = ((unsigned int)(ppixel - _data))%wh; - const unsigned long ny = off/_width, nx = off%_width; - x = (t)nx; y = (t)ny; - return true; - } - - //! Test if pixel value is inside image bounds and get its X-coordinate. - /** - Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X-coordinate is set. - **/ - template - bool contains(const T& pixel, t& x) const { - const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+size()) return false; - x = (t)(((unsigned long)(ppixel - _data))%_width); - return true; - } - - //! Test if pixel value is inside image bounds. - /** - Similar to contains(const T&,t&,t&,t&,t&) const, except that no pixel coordinates are set. - **/ - bool contains(const T& pixel) const { - const T *const ppixel = &pixel; - return !is_empty() && ppixel>=_data && ppixel<_data + size(); - } - - //! Test if pixel buffers of instance and input images overlap. - /** - Return \c true, if pixel buffers attached to image instance and input image \c img overlap, and \c false otherwise. - \param img Input image to compare with. - \note - - Buffer overlapping may happen when manipulating \e shared images. - - If two image buffers overlap, operating on one of the image will probably modify the other one. - - Most of the time, \c CImg instances are \e non-shared and do not overlap between each others. - \par Example - \code - const CImg - img1("reference.jpg"), // Load RGB-color image. - img2 = img1.get_shared_channel(1); // Get shared version of the green channel. - if (img1.is_overlapped(img2)) { // Test succeeds, 'img1' and 'img2' overlaps. - std::printf("Buffers overlap!\n"); - } - \endcode - **/ - template - bool is_overlapped(const CImg& img) const { - const unsigned long csiz = size(), isiz = img.size(); - return !((void*)(_data + csiz)<=(void*)img._data || (void*)_data>=(void*)(img._data + isiz)); - } - - //! Test if the set {\c *this,\c primitives,\c colors,\c opacities} defines a valid 3d object. - /** - Return \c true is the 3d object represented by the set {\c *this,\c primitives,\c colors,\c opacities} defines a - valid 3d object, and \c false otherwise. The vertex coordinates are defined by the instance image. - \param primitives List of primitives of the 3d object. - \param colors List of colors of the 3d object. - \param opacities List (or image) of opacities of the 3d object. - \param full_check Tells if full checking of the 3d object must be performed. - \param[out] error_message C-string to contain the error message, if the test does not succeed. - \note - - Set \c full_checking to \c false to speed-up the 3d object checking. In this case, only the size of - each 3d object component is checked. - - Size of the string \c error_message should be at least 128-bytes long, to be able to contain the error message. - **/ - template - bool is_object3d(const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool full_check=true, - char *const error_message=0) const { - if (error_message) *error_message = 0; - - // Check consistency for the particular case of an empty 3d object. - if (is_empty()) { - if (primitives || colors || opacities) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines no vertices but %u primitives, %u colors and %lu opacities", - _width,primitives._width,primitives._width,colors._width,(unsigned long)opacities.size()); - return false; - } - return true; - } - - // Check consistency of vertices. - if (_height!=3 || _depth>1 || _spectrum>1) { // Check vertices dimensions. - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) has invalid vertex dimensions (%u,%u,%u,%u)", - _width,primitives._width,_width,_height,_depth,_spectrum); - return false; - } - if (colors._width>primitives._width+1) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines %u colors", - _width,primitives._width,colors._width); - return false; - } - if (opacities.size()>primitives._width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines %lu opacities", - _width,primitives._width,(unsigned long)opacities.size()); - return false; - } - if (!full_check) return true; - - // Check consistency of primitives. - cimglist_for(primitives,l) { - const CImg& primitive = primitives[l]; - const unsigned long psiz = primitive.size(); - switch (psiz) { - case 1 : { // Point. - const unsigned int i0 = (unsigned int)primitive(0); - if (i0>=_width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", - _width,primitives._width,i0,l); - return false; - } - } break; - case 5 : { // Sphere. - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1); - if (i0>=_width || i1>=_width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", - _width,primitives._width,i0,i1,l); - return false; - } - } break; - case 2 : // Segment. - case 6 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1); - if (i0>=_width || i1>=_width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", - _width,primitives._width,i0,i1,l); - return false; - } - } break; - case 3 : // Triangle. - case 9 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2); - if (i0>=_width || i1>=_width || i2>=_width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", - _width,primitives._width,i0,i1,i2,l); - return false; - } - } break; - case 4 : // Quadrangle. - case 12 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2), - i3 = (unsigned int)primitive(3); - if (i0>=_width || i1>=_width || i2>=_width || i3>=_width) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", - _width,primitives._width,i0,i1,i2,i3,l); - return false; - } - } break; - default : - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines an invalid primitive [%u] of size %u", - _width,primitives._width,l,(unsigned int)psiz); - return false; - } - } - - // Check consistency of colors. - cimglist_for(colors,c) { - const CImg& color = colors[c]; - if (!color) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines no color for primitive [%u]", - _width,primitives._width,c); - return false; - } - } - - // Check consistency of light texture. - if (colors._width>primitives._width) { - const CImg &light = colors.back(); - if (!light || light._depth>1) { - if (error_message) std::sprintf(error_message, - "3d object (%u,%u) defines an invalid light texture (%u,%u,%u,%u)", - _width,primitives._width,light._width,light._height,light._depth,light._spectrum); - return false; - } - } - - return true; - } - - //! Test if image instance represents a valid serialization of a 3d object. - /** - Return \c true if the image instance represents a valid serialization of a 3d object, and \c false otherwise. - \param full_check Tells if full checking of the instance must be performed. - \param[out] error_message C-string to contain the error message, if the test does not succeed. - \note - - Set \c full_check to \c false to speed-up the 3d object checking. In this case, only the size of - each 3d object component is checked. - - Size of the string \c error_message should be at least 128-bytes long, to be able to contain the error message. - **/ - bool is_CImg3d(const bool full_check=true, char *const error_message=0) const { - if (error_message) *error_message = 0; - - // Check instance dimension and header. - if (_width!=1 || _height<8 || _depth!=1 || _spectrum!=1) { - if (error_message) std::sprintf(error_message, - "CImg3d has invalid dimensions (%u,%u,%u,%u)", - _width,_height,_depth,_spectrum); - return false; - } - const T *ptrs = _data, *const ptre = end(); - if (!_is_CImg3d(*(ptrs++),'C') || !_is_CImg3d(*(ptrs++),'I') || !_is_CImg3d(*(ptrs++),'m') || - !_is_CImg3d(*(ptrs++),'g') || !_is_CImg3d(*(ptrs++),'3') || !_is_CImg3d(*(ptrs++),'d')) { - if (error_message) std::sprintf(error_message, - "CImg3d header not found"); - return false; - } - const unsigned int - nb_points = cimg::float2uint((float)*(ptrs++)), - nb_primitives = cimg::float2uint((float)*(ptrs++)); - - // Check consistency of number of vertices / primitives. - if (!full_check) { - const unsigned long minimal_size = 8UL + 3*nb_points + 6*nb_primitives; - if (_data + minimal_size>ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) has only %lu values, while at least %lu values were expected", - nb_points,nb_primitives,size(),minimal_size); - return false; - } - } - - // Check consistency of vertex data. - if (!nb_points) { - if (nb_primitives) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines no vertices but %u primitives", - nb_points,nb_primitives,nb_primitives); - return false; - } - if (ptrs!=ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) is an empty object but contains %u value%s more than expected", - nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); - return false; - } - return true; - } - if (ptrs+3*nb_points>ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines only %u vertices data", - nb_points,nb_primitives,(unsigned int)(ptre-ptrs)/3); - return false; - } - ptrs+=3*nb_points; - - // Check consistency of primitive data. - if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines %u vertices but no primitive", - nb_points,nb_primitives,nb_points); - return false; - } - - if (!full_check) return true; - - for (unsigned int p = 0; p=nb_points) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", - nb_points,nb_primitives,i0,p); - return false; - } - } break; - case 5 : { // Sphere. - const unsigned int - i0 = cimg::float2uint((float)*(ptrs++)), - i1 = cimg::float2uint((float)*(ptrs++)); - ptrs+=3; - if (i0>=nb_points || i1>=nb_points) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", - nb_points,nb_primitives,i0,i1,p); - return false; - } - } break; - case 2 : case 6 : { // Segment. - const unsigned int - i0 = cimg::float2uint((float)*(ptrs++)), - i1 = cimg::float2uint((float)*(ptrs++)); - if (nb_inds==6) ptrs+=4; - if (i0>=nb_points || i1>=nb_points) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", - nb_points,nb_primitives,i0,i1,p); - return false; - } - } break; - case 3 : case 9 : { // Triangle. - const unsigned int - i0 = cimg::float2uint((float)*(ptrs++)), - i1 = cimg::float2uint((float)*(ptrs++)), - i2 = cimg::float2uint((float)*(ptrs++)); - if (nb_inds==9) ptrs+=6; - if (i0>=nb_points || i1>=nb_points || i2>=nb_points) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", - nb_points,nb_primitives,i0,i1,i2,p); - return false; - } - } break; - case 4 : case 12 : { // Quadrangle. - const unsigned int - i0 = cimg::float2uint((float)*(ptrs++)), - i1 = cimg::float2uint((float)*(ptrs++)), - i2 = cimg::float2uint((float)*(ptrs++)), - i3 = cimg::float2uint((float)*(ptrs++)); - if (nb_inds==12) ptrs+=8; - if (i0>=nb_points || i1>=nb_points || i2>=nb_points || i3>=nb_points) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", - nb_points,nb_primitives,i0,i1,i2,i3,p); - return false; - } - } break; - default : - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines an invalid primitive [%u] of size %u", - nb_points,nb_primitives,p,nb_inds); - return false; - } - if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) has incomplete primitive data for primitive [%u], %u values missing", - nb_points,nb_primitives,p,(unsigned int)(ptrs-ptre)); - return false; - } - } - - // Check consistency of color data. - if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines no color/texture data", - nb_points,nb_primitives); - return false; - } - for (unsigned int c = 0; c=c) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid shared sprite/texture indice %u for primitive [%u]", - nb_points,nb_primitives,w,c); - return false; - } - } else ptrs+=w*h*s; - } - if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) has incomplete color/texture data for primitive [%u], %u values missing", - nb_points,nb_primitives,c,(unsigned int)(ptrs-ptre)); - return false; - } - } - - // Check consistency of opacity data. - if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) defines no opacity data", - nb_points,nb_primitives); - return false; - } - for (unsigned int o = 0; o=o) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) refers to invalid shared opacity indice %u for primitive [%u]", - nb_points,nb_primitives,w,o); - return false; - } - } else ptrs+=w*h*s; - } - if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, - "CImg3d (%u,%u) has incomplete opacity data for primitive [%u]", - nb_points,nb_primitives,o); - return false; - } - } - - // Check end of data. - if (ptrs1?"s":""); - return false; - } - return true; - } - - static bool _is_CImg3d(const T val, const char c) { - return val>=(T)c && val<(T)(c+1); - } - - //@} - //------------------------------------- - // - //! \name Mathematical Functions - //@{ - //------------------------------------- - - // Define the math formula parser/compiler and evaluator. - struct _cimg_math_parser { - CImgList labelM; - CImgList code; - CImg level, opcode, labelMpos, label1pos; - const CImg* p_code; - CImg mem; - CImg expr; - const CImg& reference; - CImg reference_stats; - unsigned int mempos, result; - const char *const calling_function; - typedef double (_cimg_math_parser::*mp_func)(); - const mp_func *mp_funcs; - -#define _cimg_mp_return(x) { *se = saved_char; return x; } -#define _cimg_mp_opcode0(op) _cimg_mp_return(opcode0(op)); -#define _cimg_mp_opcode1(op,i1) _cimg_mp_return(opcode1(op,i1)); -#define _cimg_mp_opcode2(op,i1,i2) { const unsigned int _i1 = i1, _i2 = i2; _cimg_mp_return(opcode2(op,_i1,_i2)); } -#define _cimg_mp_opcode3(op,i1,i2,i3) { const unsigned int _i1 = i1, _i2 = i2, _i3 = i3; _cimg_mp_return(opcode3(op,_i1,_i2,_i3)); } -#define _cimg_mp_opcode6(op,i1,i2,i3,i4,i5,i6) { const unsigned int _i1 = i1, _i2 = i2, _i3 = i3, _i4 = i4, _i5 = i5, _i6 = i6; \ - _cimg_mp_return(opcode6(op,_i1,_i2,_i3,_i4,_i5,_i6)); } - - // Constructor - Destructor. - _cimg_math_parser(const CImg& img, const char *const expression, const char *const funcname=0): - reference(img),calling_function(funcname?funcname:"cimg_math_parser") { - unsigned int l = 0; - if (expression) { - l = (unsigned int)std::strlen(expression); - expr.assign(expression,l+1); - if (*expr._data) { - char *d = expr._data; - for (const char *s = expr._data; *s || (bool)(*d=0); ++s) if (*s!=' ') *(d++) = *s; - l = (unsigned int)(d - expr._data); - } - } - if (!l) throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Empty specified expression.", - pixel_type(),calling_function); - - int lv = 0; // Count parentheses/brackets level of expression. - level.assign(l); - unsigned int *pd = level._data; - for (const char *ps = expr._data; *ps && lv>=0; ++ps) *(pd++) = (unsigned int)(*ps=='('||*ps=='['?lv++:*ps==')'||*ps==']'?--lv:lv); - if (lv!=0) { - throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Unbalanced parentheses/brackets in specified expression '%s'.", - pixel_type(),calling_function, - expr._data); - } - // Init constant values. - mem.assign(512); - mem[0] = 0; - mem[1] = 1; - mem[2] = 2; - mem[3] = (double)reference._width; - mem[4] = (double)reference._height; - mem[5] = (double)reference._depth; - mem[6] = (double)reference._spectrum; - mem[7] = cimg::PI; - mem[8] = std::exp(1.0); // Then [9] = x, [10] = y, [11] = z, [12] = c - mempos = 13; - labelMpos.assign(8); - label1pos.assign(128,1,1,1,~0U); - label1pos['w'] = 3; - label1pos['h'] = 4; - label1pos['d'] = 5; - label1pos['s'] = 6; - label1pos[0] = 7; // pi - label1pos['e'] = 8; - label1pos['x'] = 9; - label1pos['y'] = 10; - label1pos['z'] = 11; - label1pos['c'] = 12; - result = compile(expr._data,expr._data+l); // Compile formula into a serie of opcodes. - } - - // Insert code instructions. - unsigned int opcode0(const char op) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(op,pos).move_to(code); - return pos; - } - - unsigned int opcode1(const char op, const unsigned int arg1) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(op,pos,arg1).move_to(code); - return pos; - } - - unsigned int opcode2(const char op, const unsigned int arg1, const unsigned int arg2) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(op,pos,arg1,arg2).move_to(code); - return pos; - } - - unsigned int opcode3(const char op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(op,pos,arg1,arg2,arg3).move_to(code); - return pos; - } - - unsigned int opcode6(const char op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, - const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(op,pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); - return pos; - } - - // Compilation procedure. - unsigned int compile(char *const ss, char *const se) { - if (!ss || se<=ss || !*ss) { - throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Missing item in specified expression '%s'.", - pixel_type(),calling_function, - expr._data); - } - char - *const se1 = se-1, *const se2 = se-2, *const se3 = se-3, *const se4 = se-4, - *const ss1 = ss+1, *const ss2 = ss+2, *const ss3 = ss+3, *const ss4 = ss+4, - *const ss5 = ss+5, *const ss6 = ss+6, *const ss7 = ss+7; - const char saved_char = *se; *se = 0; - const unsigned int clevel = level[ss-expr._data], clevel1 = clevel+1; - if (*se1==';') return compile(ss,se1); - - // Look for a single value, variable or variable assignment. - char end = 0, sep = 0; double val = 0; - const int nb = std::sscanf(ss,"%lf%c%c",&val,&sep,&end); - if (nb==1) { - if (val==0 || val==1 || val==2) _cimg_mp_return((int)val); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = val; - _cimg_mp_return(pos); - } - if (nb==2 && sep=='%') { - if (val==0 || val==100 || val==200) _cimg_mp_return((int)(val/100)); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = val/100; - _cimg_mp_return(pos); - } - if (ss1==se) switch (*ss) { - case 'w' : case 'h' : case 'd' : case 's' : - case 'x' : case 'y' : case 'z' : case 'c' : case 'e' : _cimg_mp_return(label1pos[*ss]); - case 'u' : if (label1pos['u']!=~0U) _cimg_mp_return(label1pos['u']); _cimg_mp_opcode2(0,0,1); - case 'g' : if (label1pos['g']!=~0U) _cimg_mp_return(label1pos['g']); _cimg_mp_opcode0(1); - case 'i' : if (label1pos['i']!=~0U) _cimg_mp_return(label1pos['i']); _cimg_mp_opcode0(2); - case '?' : _cimg_mp_opcode2(0,0,1); - } - if (ss1==se1) { - if (*ss=='p' && *ss1=='i') _cimg_mp_return(label1pos[0]); // pi - if (*ss=='i') { - if (*ss1=='m') { if (label1pos[1]!=~0U) _cimg_mp_return(label1pos[1]); _cimg_mp_opcode0(57); } // im - if (*ss1=='M') { if (label1pos[2]!=~0U) _cimg_mp_return(label1pos[2]); _cimg_mp_opcode0(58); } // iM - if (*ss1=='a') { if (label1pos[3]!=~0U) _cimg_mp_return(label1pos[3]); _cimg_mp_opcode0(59); } // ia - if (*ss1=='v') { if (label1pos[4]!=~0U) _cimg_mp_return(label1pos[4]); _cimg_mp_opcode0(60); } // iv - } - if (*ss1=='m') { - if (*ss=='x') { if (label1pos[5]!=~0U) _cimg_mp_return(label1pos[5]); _cimg_mp_opcode0(61); } // xm - if (*ss=='y') { if (label1pos[6]!=~0U) _cimg_mp_return(label1pos[6]); _cimg_mp_opcode0(62); } // ym - if (*ss=='z') { if (label1pos[7]!=~0U) _cimg_mp_return(label1pos[7]); _cimg_mp_opcode0(63); } // zm - if (*ss=='c') { if (label1pos[8]!=~0U) _cimg_mp_return(label1pos[8]); _cimg_mp_opcode0(64); } // cm - } - if (*ss1=='M') { - if (*ss=='x') { if (label1pos[9]!=~0U) _cimg_mp_return(label1pos[9]); _cimg_mp_opcode0(65); } // xM - if (*ss=='y') { if (label1pos[10]!=~0U) _cimg_mp_return(label1pos[10]); _cimg_mp_opcode0(66); } // yM - if (*ss=='z') { if (label1pos[11]!=~0U) _cimg_mp_return(label1pos[11]); _cimg_mp_opcode0(67); } // zM - if (*ss=='c') { if (label1pos[12]!=~0U) _cimg_mp_return(label1pos[12]); _cimg_mp_opcode0(6); } // cM - } - } - - // Look for variable declarations. - for (char *s = se2; s>ss; --s) if (*s==';' && level[s-expr._data]==clevel) { compile(ss,s); _cimg_mp_return(compile(s+1,se)); } - for (char *s = ss1, *ps = ss, *ns = ss2; s variable_name(ss,(unsigned int)(s-ss+1)); - variable_name.back() = 0; - bool is_valid_name = true; - if (*ss>='0' && *ss<='9') is_valid_name = false; - else for (const char *ns = ss+1; ns'z') && (*ns<'A' || *ns>'Z') && (*ns<'0' || *ns>'9') && *ns!='_') { - is_valid_name = false; break; - } - if (!is_valid_name) { - *se = saved_char; - throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Invalid variable name '%s' in specified expression '%s%s%s'.", - pixel_type(),calling_function, - variable_name._data, - (ss-8)>expr._data?"...":"", - (ss-8)>expr._data?ss-8:expr._data, - se<&expr.back()?"...":""); - } - const unsigned int pos = compile(s+1,se); - if (variable_name[0] && variable_name[1] && !variable_name[2]) { // Check for particular case of a reserved variable. - const char c1 = variable_name[0], c2 = variable_name[1]; - if (c1=='p' && c2=='i') variable_name.fill((char)0,(char)0); // pi - else if (c1=='i') { - if (c2=='m') variable_name.fill(1,0); // im - else if (c2=='M') variable_name.fill(2,0); // iM - else if (c2=='a') variable_name.fill(3,0); // ia - else if (c2=='v') variable_name.fill(4,0); // iv - } else if (c2=='m') { - if (c1=='x') variable_name.fill(5,0); // xm - else if (c1=='y') variable_name.fill(6,0); // ym - else if (c1=='z') variable_name.fill(7,0); // zm - else if (c1=='c') variable_name.fill(8,0); // cm - } else if (c2=='M') { - if (c1=='x') variable_name.fill(9,0); // xM - else if (c1=='y') variable_name.fill(10,0); // yM - else if (c1=='z') variable_name.fill(11,0); // zM - else if (c1=='c') variable_name.fill(12,0); // cM - } - } - if (variable_name[1]) { // Multi-char variable. - int label_pos = -1; - cimglist_for(labelM,i) if (!std::strcmp(variable_name,labelM[i])) { label_pos = i; break; } // Check for existing variable with same name. - if (label_pos<0) { // If new variable. - if (labelM._width>=labelMpos._width) labelMpos.resize(-200,1,1,1,0); - label_pos = labelM._width; - variable_name.move_to(labelM); - } - labelMpos[label_pos] = pos; - } else label1pos[*variable_name] = pos; // Single-char variable. - _cimg_mp_return(pos); - } - - // Look for unary/binary operators. The operator precedences is defined as in C++. - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='|' && *ns=='|' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(8,pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); - _cimg_mp_return(pos); - } - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='&' && *ns=='&' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(9,pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); - _cimg_mp_return(pos); - } - for (char *s = se2; s>ss; --s) if (*s=='|' && level[s-expr._data]==clevel) _cimg_mp_opcode2(10,compile(ss,s),compile(s+1,se)); - for (char *s = se2; s>ss; --s) if (*s=='&' && level[s-expr._data]==clevel) _cimg_mp_opcode2(11,compile(ss,s),compile(s+1,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='!' && *ns=='=' && level[s-expr._data]==clevel) _cimg_mp_opcode2(12,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='=' && *ns=='=' && level[s-expr._data]==clevel) _cimg_mp_opcode2(13,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='=' && level[s-expr._data]==clevel) _cimg_mp_opcode2(14,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='=' && level[s-expr._data]==clevel) _cimg_mp_opcode2(15,compile(ss,s),compile(s+2,se)); - for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) - if (*s=='<' && *ns!='<' && *ps!='<' && level[s-expr._data]==clevel) _cimg_mp_opcode2(16,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) - if (*s=='>' && *ns!='>' && *ps!='>' && level[s-expr._data]==clevel) _cimg_mp_opcode2(17,compile(ss,s),compile(s+1,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='<' && level[s-expr._data]==clevel) _cimg_mp_opcode2(18,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='>' && level[s-expr._data]==clevel) _cimg_mp_opcode2(19,compile(ss,s),compile(s+2,se)); - for (char *s = se2, *ps = se3; s>ss; --s, --ps) - if (*s=='+' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && - (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) - _cimg_mp_opcode2(21,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ps = se3; s>ss; --s, --ps) - if (*s=='-' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && - (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) - _cimg_mp_opcode2(20,compile(ss,s),compile(s+1,se)); - for (char *s = se2; s>ss; --s) if (*s=='*' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+1,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(22,pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); - _cimg_mp_return(pos); - } - for (char *s = se2; s>ss; --s) if (*s=='/' && level[s-expr._data]==clevel) _cimg_mp_opcode2(23,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ns = se1; s>ss; --s, --ns) - if (*s=='%' && *ns!='^' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(24,compile(ss,s),compile(s+1,se)); - if (ssss; --s) if (*s=='^' && level[s-expr._data]==clevel) _cimg_mp_opcode2(25,compile(ss,s),compile(s+1,se)); - - // Look for a function call or a parenthesis. - if (*se1==']') { - const bool is_relative = *ss=='j'; - if ((*ss=='i' || is_relative) && *ss1=='[') { - if (*ss2==']') _cimg_mp_opcode0(2); - _cimg_mp_opcode1(is_relative?69:68,compile(ss2,se1)); - } - } - if (*se1==')') { - if (*ss=='(') _cimg_mp_return(compile(ss1,se1)); - if (!std::strncmp(ss,"sin(",4)) _cimg_mp_opcode1(29,compile(ss4,se1)); - if (!std::strncmp(ss,"cos(",4)) _cimg_mp_opcode1(30,compile(ss4,se1)); - if (!std::strncmp(ss,"tan(",4)) _cimg_mp_opcode1(31,compile(ss4,se1)); - if (!std::strncmp(ss,"asin(",5)) _cimg_mp_opcode1(32,compile(ss5,se1)); - if (!std::strncmp(ss,"acos(",5)) _cimg_mp_opcode1(33,compile(ss5,se1)); - if (!std::strncmp(ss,"atan(",5)) _cimg_mp_opcode1(34,compile(ss5,se1)); - if (!std::strncmp(ss,"sinh(",5)) _cimg_mp_opcode1(35,compile(ss5,se1)); - if (!std::strncmp(ss,"cosh(",5)) _cimg_mp_opcode1(36,compile(ss5,se1)); - if (!std::strncmp(ss,"tanh(",5)) _cimg_mp_opcode1(37,compile(ss5,se1)); - if (!std::strncmp(ss,"log10(",6)) _cimg_mp_opcode1(38,compile(ss6,se1)); - if (!std::strncmp(ss,"log2(",5)) _cimg_mp_opcode1(3,compile(ss5,se1)); - if (!std::strncmp(ss,"log(",4)) _cimg_mp_opcode1(39,compile(ss4,se1)); - if (!std::strncmp(ss,"exp(",4)) _cimg_mp_opcode1(40,compile(ss4,se1)); - if (!std::strncmp(ss,"sqrt(",5)) _cimg_mp_opcode1(41,compile(ss5,se1)); - if (!std::strncmp(ss,"sign(",5)) _cimg_mp_opcode1(42,compile(ss5,se1)); - if (!std::strncmp(ss,"abs(",4)) _cimg_mp_opcode1(43,compile(ss4,se1)); - if (!std::strncmp(ss,"atan2(",6)) { - char *s1 = ss6; while (s1=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(45,pos,mem_cond,mem_A,mem_B,bp2-bp1,code._width-bp2).move_to(code,bp1); - _cimg_mp_return(pos); - } - if (!std::strncmp(ss,"round(",6)) { - unsigned int value = 0, round = 1, direction = 0; - char *s1 = ss6; while (s1 opcode; - if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(*ss=='k'?71:ss[1]=='i'?48:ss[1]=='a'?49:70,pos).move_to(opcode); - for (char *s = ss4; s::vector(compile(s,ns)).move_to(opcode); - s = ns; - } - (opcode>'y').move_to(code); - _cimg_mp_return(pos); - } - if (!std::strncmp(ss,"arg(",4)) { - CImgList opcode; - if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(5,pos).move_to(opcode); - for (char *s = ss4; s::vector(compile(s,ns)).move_to(opcode); - s = ns; - } - (opcode>'y').move_to(code); - _cimg_mp_return(pos); - } - if (!std::strncmp(ss,"narg(",5)) { - if (*ss5==')') _cimg_mp_return(0); - unsigned int nb_args = 0; - for (char *s = ss5; s=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = nb_args; - _cimg_mp_return(pos); - } - if (!std::strncmp(ss,"isval(",6)) { - char sep = 0, end = 0; double val = 0; - if (std::sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') _cimg_mp_return(1); - _cimg_mp_return(0); - } - if (!std::strncmp(ss,"isnan(",6)) _cimg_mp_opcode1(50,compile(ss6,se1)); - if (!std::strncmp(ss,"isinf(",6)) _cimg_mp_opcode1(51,compile(ss6,se1)); - if (!std::strncmp(ss,"isint(",6)) _cimg_mp_opcode1(52,compile(ss6,se1)); - if (!std::strncmp(ss,"isbool(",7)) _cimg_mp_opcode1(53,compile(ss7,se1)); - if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { - unsigned int value = 0, nb = 1; - char *s1 = ss4; while (s1 variable_name(ss,(unsigned int)(se-ss+1)); - variable_name.back() = 0; - if (variable_name[1]) { cimglist_for(labelM,i) if (!std::strcmp(variable_name,labelM[i])) _cimg_mp_return(labelMpos[i]); } // Multi-char variable. - else if (label1pos[*variable_name]!=~0U) _cimg_mp_return(label1pos[*variable_name]); // Single-char variable. - *se = saved_char; - throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Invalid item '%s' in specified expression '%s%s%s'.\n", - pixel_type(),calling_function, - variable_name._data, - (ss-8)>expr._data?"...":"", - (ss-8)>expr._data?ss-8:expr._data, - se<&expr.back()?"...":""); - return 0; - } - - // Evaluation functions, known by the parser. - double mp_u() { - return mem[opcode(2)] + cimg::rand()*(mem[opcode(3)]-mem[opcode(2)]); - } - double mp_g() { - return cimg::grand(); - } - double mp_i() { - return (double)reference.atXYZC((int)mem[9],(int)mem[10],(int)mem[11],(int)mem[12],0); - } - double mp_logical_and() { - const bool is_A = (bool)mem[opcode(2)]; - const CImg *const pE = ++p_code + opcode(4); - if (!is_A) { p_code = pE - 1; return 0; } - const unsigned int mem_B = opcode(3); - for ( ; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - --p_code; - return (double)(bool)mem[mem_B]; - } - double mp_logical_or() { - const bool is_A = (bool)mem[opcode(2)]; - const CImg *const pE = ++p_code + opcode(4); - if (is_A) { p_code = pE - 1; return 1; } - const unsigned int mem_B = opcode(3); - for ( ; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - --p_code; - return (double)(bool)mem[mem_B]; - } - double mp_infeq() { - return (double)(mem[opcode(2)]<=mem[opcode(3)]); - } - double mp_supeq() { - return (double)(mem[opcode(2)]>=mem[opcode(3)]); - } - double mp_noteq() { - return (double)(mem[opcode(2)]!=mem[opcode(3)]); - } - double mp_eqeq() { - return (double)(mem[opcode(2)]==mem[opcode(3)]); - } - double mp_inf() { - return (double)(mem[opcode(2)]mem[opcode(3)]); - } - double mp_add() { - return mem[opcode(2)] + mem[opcode(3)]; - } - double mp_sub() { - return mem[opcode(2)] - mem[opcode(3)]; - } - double mp_mul() { - const double A = mem[opcode(2)]; - const CImg *const pE = ++p_code + opcode(4); - if (!A) { p_code = pE - 1; return 0; } - const unsigned int mem_B = opcode(3); - for ( ; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - --p_code; - return A*(double)mem[mem_B]; - } - double mp_div() { - return mem[opcode(2)] / mem[opcode(3)]; - } - double mp_minus() { - return -mem[opcode(2)]; - } - double mp_not() { - return !mem[opcode(2)]; - } - double mp_logical_not() { - return !mem[opcode(2)]; - } - double mp_bitwise_not() { - return ~(unsigned long)mem[opcode(2)]; - } - double mp_modulo() { - return cimg::mod(mem[opcode(2)],mem[opcode(3)]); - } - double mp_bitwise_and() { - return ((unsigned long)mem[opcode(2)] & (unsigned long)mem[opcode(3)]); - } - double mp_bitwise_or() { - return ((unsigned long)mem[opcode(2)] | (unsigned long)mem[opcode(3)]); - } - double mp_pow() { - const double v = mem[opcode(2)], p = mem[opcode(3)]; - if (p==0) return 1; - if (p==0.5) return std::sqrt(v); - if (p==1) return v; - if (p==2) return v*v; - if (p==3) return v*v*v; - if (p==4) return v*v*v*v; - return std::pow(v,p); - } - double mp_sin() { - return std::sin(mem[opcode(2)]); - } - double mp_cos() { - return std::cos(mem[opcode(2)]); - } - double mp_tan() { - return std::tan(mem[opcode(2)]); - } - double mp_asin() { - return std::asin(mem[opcode(2)]); - } - double mp_acos() { - return std::acos(mem[opcode(2)]); - } - double mp_atan() { - return std::atan(mem[opcode(2)]); - } - double mp_sinh() { - return std::sinh(mem[opcode(2)]); - } - double mp_cosh() { - return std::cosh(mem[opcode(2)]); - } - double mp_tanh() { - return std::tanh(mem[opcode(2)]); - } - double mp_log10() { - return std::log10(mem[opcode(2)]); - } - double mp_log2() { - return cimg::log2(mem[opcode(2)]); - } - double mp_log() { - return std::log(mem[opcode(2)]); - } - double mp_exp() { - return std::exp(mem[opcode(2)]); - } - double mp_sqrt() { - return std::sqrt(mem[opcode(2)]); - } - double mp_sign() { - return cimg::sign(mem[opcode(2)]); - } - double mp_abs() { - return cimg::abs(mem[opcode(2)]); - } - double mp_atan2() { - return std::atan2(mem[opcode(2)],mem[opcode(3)]); - } - double mp_if() { - const bool is_cond = (bool)mem[opcode(2)]; - const unsigned int mem_A = opcode(3), mem_B = opcode(4); - const CImg - *const pB = ++p_code + opcode(5), - *const pE = pB + opcode(6); - if (is_cond) { // Evaluate on-the-fly only the correct argument. - for ( ; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - p_code = pE - 1; - return mem[mem_A]; - } - for (p_code = pB; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - --p_code; - return mem[mem_B]; - } - double mp_round() { - return cimg::round(mem[opcode(2)],mem[opcode(3)],(int)mem[opcode(4)]); - } - double mp_ixyzc() { - const int i = (int)mem[opcode(6)], b = (int)mem[opcode(7)]; - if (i==0) { // Nearest neighbor interpolation. - if (b==2) return (double)reference.atXYZC(cimg::mod((int)mem[opcode(2)],reference.width()), - cimg::mod((int)mem[opcode(3)],reference.height()), - cimg::mod((int)mem[opcode(4)],reference.depth()), - cimg::mod((int)mem[opcode(5)],reference.spectrum())); - if (b==1) return (double)reference.atXYZC((int)mem[opcode(2)], - (int)mem[opcode(3)], - (int)mem[opcode(4)], - (int)mem[opcode(5)]); - return (double)reference.atXYZC((int)mem[opcode(2)], - (int)mem[opcode(3)], - (int)mem[opcode(4)], - (int)mem[opcode(5)],0); - } else { // Linear interpolation. - if (b==2) return (double)reference.linear_atXYZC(cimg::mod((float)mem[opcode(2)],(float)reference.width()), - cimg::mod((float)mem[opcode(3)],(float)reference.height()), - cimg::mod((float)mem[opcode(4)],(float)reference.depth()), - cimg::mod((float)mem[opcode(5)],(float)reference.spectrum())); - if (b==1) return (double)reference.linear_atXYZC((float)mem[opcode(2)], - (float)mem[opcode(3)], - (float)mem[opcode(4)], - (float)mem[opcode(5)]); - return (double)reference.linear_atXYZC((float)mem[opcode(2)], - (float)mem[opcode(3)], - (float)mem[opcode(4)], - (float)mem[opcode(5)],0); - } - } - double mp_jxyzc() { - const double x = mem[9], y = mem[10], z = mem[11], c = mem[12]; - const int i = (int)mem[opcode(6)], b = (int)mem[opcode(7)]; - if (i==0) { // Nearest neighbor interpolation. - if (b==2) return (double)reference.atXYZC(cimg::mod((int)(x+mem[opcode(2)]),reference.width()), - cimg::mod((int)(y+mem[opcode(3)]),reference.height()), - cimg::mod((int)(z+mem[opcode(4)]),reference.depth()), - cimg::mod((int)(c+mem[opcode(5)]),reference.spectrum())); - if (b==1) return (double)reference.atXYZC((int)(x+mem[opcode(2)]), - (int)(y+mem[opcode(3)]), - (int)(z+mem[opcode(4)]), - (int)(c+mem[opcode(5)])); - return (double)reference.atXYZC((int)(x+mem[opcode(2)]), - (int)(y+mem[opcode(3)]), - (int)(z+mem[opcode(4)]), - (int)(c+mem[opcode(5)]),0); - } else { // Linear interpolation. - if (b==2) return (double)reference.linear_atXYZC(cimg::mod((float)(x+mem[opcode(2)]),(float)reference.width()), - cimg::mod((float)(y+mem[opcode(3)]),(float)reference.height()), - cimg::mod((float)(z+mem[opcode(4)]),(float)reference.depth()), - cimg::mod((float)(c+mem[opcode(5)]),(float)reference.spectrum())); - if (b==1) return (double)reference.linear_atXYZC((float)(x+mem[opcode(2)]), - (float)(y+mem[opcode(3)]), - (float)(z+mem[opcode(4)]), - (float)(c+mem[opcode(5)])); - return (double)reference.linear_atXYZC((float)(x+mem[opcode(2)]), - (float)(y+mem[opcode(3)]), - (float)(z+mem[opcode(4)]), - (float)(c+mem[opcode(5)]),0); - } - } - double mp_min() { - double val = mem[opcode(2)]; - for (unsigned int i = 3; i values(opcode._height-2); - double *p = values.data(); - for (unsigned int i = 2; i values(opcode._height-3); - double *p = values.data(); - for (unsigned int i = 3; i::is_nan(val); - } - double mp_isinf() { - const double val = mem[opcode(2)]; - return cimg::type::is_inf(val); - } - double mp_isint() { - const double val = mem[opcode(2)]; - return (double)(cimg::mod(val,1.0)==0); - } - double mp_isbool() { - const double val = mem[opcode(2)]; - return (val==0.0 || val==1.0); - } - double mp_rol() { - return cimg::rol(mem[opcode(2)],(unsigned int)mem[opcode(3)]); - } - double mp_ror() { - return cimg::ror(mem[opcode(2)],(unsigned int)mem[opcode(3)]); - } - double mp_lsl() { - return (long)mem[opcode(2)]<<(unsigned int)mem[opcode(3)]; - } - double mp_lsr() { - return (long)mem[opcode(2)]>>(unsigned int)mem[opcode(3)]; - } - double mp_sinc() { - return cimg::sinc(mem[opcode(2)]); - } - double mp_im() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[0]:0; - } - double mp_iM() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[1]:0; - } - double mp_ia() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[2]:0; - } - double mp_iv() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[3]:0; - } - double mp_xm() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[4]:0; - } - double mp_ym() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[5]:0; - } - double mp_zm() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[6]:0; - } - double mp_cm() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[7]:0; - } - double mp_xM() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[8]:0; - } - double mp_yM() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[9]:0; - } - double mp_zM() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[10]:0; - } - double mp_cM() { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - return reference_stats?reference_stats[11]:0; - } - double mp_arg() { - const int _ind = (int)mem[opcode(2)]; - const unsigned int nb_args = opcode._height-2, ind = _ind<0?_ind+nb_args:(unsigned int)_ind; - if (ind>=nb_args) return 0; - return mem[opcode(ind+2)]; - } - double mp_int() { - return (double)(long)mem[opcode(2)]; - } - double mp_ioff() { - const unsigned long off = (unsigned long)mem[opcode(2)]; - if (off>=reference.size()) return 0; - return (double)reference[off]; - } - double mp_joff() { - const int x = (int)mem[9], y = (int)mem[10], z = (int)mem[11], c = (int)mem[12]; - const unsigned long off = reference.offset(x,y,z,c) + (unsigned long)(mem[opcode(2)]); - if (off>=reference.size()) return 0; - return (double)reference[off]; - } - - // Evaluation procedure, with image data. - double eval(const double x, const double y, const double z, const double c) { - static const mp_func mp_funcs[] = { - &_cimg_math_parser::mp_u, // 0 - &_cimg_math_parser::mp_g, // 1 - &_cimg_math_parser::mp_i, // 2 - &_cimg_math_parser::mp_log2, // 3 - &_cimg_math_parser::mp_int, // 4 - &_cimg_math_parser::mp_arg, // 5 - &_cimg_math_parser::mp_cM, // 6 - &_cimg_math_parser::mp_jxyzc, // 7 - &_cimg_math_parser::mp_logical_or, // 8 - &_cimg_math_parser::mp_logical_and, // 9 - &_cimg_math_parser::mp_bitwise_or, // 10 - &_cimg_math_parser::mp_bitwise_and, // 11 - &_cimg_math_parser::mp_noteq, // 12 - &_cimg_math_parser::mp_eqeq, // 13 - &_cimg_math_parser::mp_infeq, // 14 - &_cimg_math_parser::mp_supeq, // 15 - &_cimg_math_parser::mp_inf, // 16 - &_cimg_math_parser::mp_sup, // 17 - &_cimg_math_parser::mp_lsl, // 18 - &_cimg_math_parser::mp_lsr, // 19 - &_cimg_math_parser::mp_sub, // 20 - &_cimg_math_parser::mp_add, // 21 - &_cimg_math_parser::mp_mul, // 22 - &_cimg_math_parser::mp_div, // 23 - &_cimg_math_parser::mp_modulo, // 24 - &_cimg_math_parser::mp_pow, // 25 - &_cimg_math_parser::mp_minus, // 26 - &_cimg_math_parser::mp_logical_not, // 27 - &_cimg_math_parser::mp_bitwise_not, // 28 - &_cimg_math_parser::mp_sin, // 29 - &_cimg_math_parser::mp_cos, // 30 - &_cimg_math_parser::mp_tan, // 31 - &_cimg_math_parser::mp_asin, // 32 - &_cimg_math_parser::mp_acos, // 33 - &_cimg_math_parser::mp_atan, // 34 - &_cimg_math_parser::mp_sinh, // 35 - &_cimg_math_parser::mp_cosh, // 36 - &_cimg_math_parser::mp_tanh, // 37 - &_cimg_math_parser::mp_log10, // 38 - &_cimg_math_parser::mp_log, // 39 - &_cimg_math_parser::mp_exp, // 40 - &_cimg_math_parser::mp_sqrt, // 41 - &_cimg_math_parser::mp_sign, // 42 - &_cimg_math_parser::mp_abs, // 43 - &_cimg_math_parser::mp_atan2, // 44 - &_cimg_math_parser::mp_if, // 45 - &_cimg_math_parser::mp_round, // 46 - &_cimg_math_parser::mp_ixyzc, // 47 - &_cimg_math_parser::mp_min, // 48 - &_cimg_math_parser::mp_max, // 49 - &_cimg_math_parser::mp_isnan, // 50 - &_cimg_math_parser::mp_isinf, // 51 - &_cimg_math_parser::mp_isint, // 52 - &_cimg_math_parser::mp_isbool, // 53 - &_cimg_math_parser::mp_rol, // 54 - &_cimg_math_parser::mp_ror, // 55 - &_cimg_math_parser::mp_sinc, // 56 - &_cimg_math_parser::mp_im, // 57 - &_cimg_math_parser::mp_iM, // 58 - &_cimg_math_parser::mp_ia, // 59 - &_cimg_math_parser::mp_iv, // 60 - &_cimg_math_parser::mp_xm, // 61 - &_cimg_math_parser::mp_ym, // 62 - &_cimg_math_parser::mp_zm, // 63 - &_cimg_math_parser::mp_cm, // 64 - &_cimg_math_parser::mp_xM, // 65 - &_cimg_math_parser::mp_yM, // 66 - &_cimg_math_parser::mp_zM, // 67 - &_cimg_math_parser::mp_ioff, // 68 - &_cimg_math_parser::mp_joff, // 69 - &_cimg_math_parser::mp_med, // 70 - &_cimg_math_parser::mp_kth // 71 - }; - if (!mem) return 0; - this->mp_funcs = mp_funcs; - mem[9] = x; mem[10] = y; mem[11] = z; mem[12] = c; - opcode._is_shared = true; opcode._width = opcode._depth = opcode._spectrum = 1; - - for (p_code = code._data; p_code &op = *p_code; - opcode._data = op._data; opcode._height = op._height; // Allows to avoid parameter passing to evaluation functions. - const unsigned int target = opcode(1); - mem[target] = (this->*mp_funcs[opcode[0]])(); - } - return mem[result]; - } - }; - - //! Compute the square value of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its square value \f$I_{(x,y,z,c)}^2\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - \par Example - \code - const CImg img("reference.jpg"); - (img,img.get_sqr().normalize(0,255)).display(); - \endcode - \image html ref_sqr.jpg - **/ - CImg& sqr() { - cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(val*val); }; - return *this; - } - - //! Compute the square value of each pixel value \newinstance. - CImg get_sqr() const { - return CImg(*this,false).sqr(); - } - - //! Compute the square root of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its square root \f$\sqrt{I_{(x,y,z,c)}}\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - \par Example - \code - const CImg img("reference.jpg"); - (img,img.get_sqrt().normalize(0,255)).display(); - \endcode - \image html ref_sqrt.jpg - **/ - CImg& sqrt() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::sqrt((double)*ptrd); - return *this; - } - - //! Compute the square root of each pixel value \newinstance. - CImg get_sqrt() const { - return CImg(*this,false).sqrt(); - } - - //! Compute the exponential of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its exponential \f$e^{I_{(x,y,z,c)}}\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& exp() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::exp((double)*ptrd); - return *this; - } - - //! Compute the exponential of each pixel value \newinstance. - CImg get_exp() const { - return CImg(*this,false).exp(); - } - - //! Compute the logarithm of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its logarithm \f$\mathrm{log}_{e}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& log() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::log((double)*ptrd); - return *this; - } - - //! Compute the logarithm of each pixel value \newinstance. - CImg get_log() const { - return CImg(*this,false).log(); - } - - //! Compute the base-2 logarithm of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its base-2 logarithm \f$\mathrm{log}_{2}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& log2() { - cimg_for(*this,ptrd,T) *ptrd = (T)cimg::log2((double)*ptrd); - return *this; - } - - //! Compute the base-10 logarithm of each pixel value \newinstance. - CImg get_log2() const { - return CImg(*this,false).log2(); - } - - //! Compute the base-10 logarithm of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its base-10 logarithm \f$\mathrm{log}_{10}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& log10() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::log10((double)*ptrd); - return *this; - } - - //! Compute the base-10 logarithm of each pixel value \newinstance. - CImg get_log10() const { - return CImg(*this,false).log10(); - } - - //! Compute the absolute value of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its absolute value \f$|I_{(x,y,z,c)}|\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& abs() { - cimg_for(*this,ptrd,T) *ptrd = cimg::abs(*ptrd); - return *this; - } - - //! Compute the absolute value of each pixel value \newinstance. - CImg get_abs() const { - return CImg(*this,false).abs(); - } - - //! Compute the sign of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sign \f$\mathrm{sign}(I_{(x,y,z,c)})\f$. - \note - - The sign is set to: - - \c 1 if pixel value is strictly positive. - - \c -1 if pixel value is strictly negative. - - \c 0 if pixel value is equal to \c 0. - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& sign() { - cimg_for(*this,ptrd,T) *ptrd = cimg::sign(*ptrd); - return *this; - } - - //! Compute the sign of each pixel value \newinstance. - CImg get_sign() const { - return CImg(*this,false).sign(); - } - - //! Compute the cosine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its cosine \f$\cos(I_{(x,y,z,c)})\f$. - \note - - Pixel values are regarded as being in \e radian. - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& cos() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::cos((double)*ptrd); - return *this; - } - - //! Compute the cosine of each pixel value \newinstance. - CImg get_cos() const { - return CImg(*this,false).cos(); - } - - //! Compute the sine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sine \f$\sin(I_{(x,y,z,c)})\f$. - \note - - Pixel values are regarded as being in \e radian. - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& sin() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::sin((double)*ptrd); - return *this; - } - - //! Compute the sine of each pixel value \newinstance. - CImg get_sin() const { - return CImg(*this,false).sin(); - } - - //! Compute the sinc of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sinc \f$\mathrm{sinc}(I_{(x,y,z,c)})\f$. - \note - - Pixel values are regarded as being exin \e radian. - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& sinc() { - cimg_for(*this,ptrd,T) *ptrd = (T)cimg::sinc((double)*ptrd); - return *this; - } - - //! Compute the sinc of each pixel value \newinstance. - CImg get_sinc() const { - return CImg(*this,false).sinc(); - } - - //! Compute the tangent of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its tangent \f$\tan(I_{(x,y,z,c)})\f$. - \note - - Pixel values are regarded as being exin \e radian. - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& tan() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::tan((double)*ptrd); - return *this; - } - - //! Compute the tangent of each pixel value \newinstance. - CImg get_tan() const { - return CImg(*this,false).tan(); - } - - //! Compute the hyperbolic cosine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic cosine \f$\mathrm{cosh}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& cosh() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::cosh((double)*ptrd); - return *this; - } - - //! Compute the hyperbolic cosine of each pixel value \newinstance. - CImg get_cosh() const { - return CImg(*this,false).cosh(); - } - - //! Compute the hyperbolic sine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic sine \f$\mathrm{sinh}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& sinh() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::sinh((double)*ptrd); - return *this; - } - - //! Compute the hyperbolic sine of each pixel value \newinstance. - CImg get_sinh() const { - return CImg(*this,false).sinh(); - } - - //! Compute the hyperbolic tangent of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic tangent \f$\mathrm{tanh}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& tanh() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::tanh((double)*ptrd); - return *this; - } - - //! Compute the hyperbolic tangent of each pixel value \newinstance. - CImg get_tanh() const { - return CImg(*this,false).tanh(); - } - - //! Compute the arccosine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arccosine \f$\mathrm{acos}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& acos() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::acos((double)*ptrd); - return *this; - } - - //! Compute the arccosine of each pixel value \newinstance. - CImg get_acos() const { - return CImg(*this,false).acos(); - } - - //! Compute the arcsine of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arcsine \f$\mathrm{asin}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& asin() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::asin((double)*ptrd); - return *this; - } - - //! Compute the arcsine of each pixel value \newinstance. - CImg get_asin() const { - return CImg(*this,false).asin(); - } - - //! Compute the arctangent of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arctangent \f$\mathrm{atan}(I_{(x,y,z,c)})\f$. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - **/ - CImg& atan() { - cimg_for(*this,ptrd,T) *ptrd = (T)std::atan((double)*ptrd); - return *this; - } - - //! Compute the arctangent of each pixel value \newinstance. - CImg get_atan() const { - return CImg(*this,false).atan(); - } - - //! Compute the arctangent2 of each pixel value. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arctangent2 \f$\mathrm{atan2}(I_{(x,y,z,c)})\f$. - \param img Image whose pixel values specify the second argument of the \c atan2() function. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - \par Example - \code - const CImg - img_x(100,100,1,1,"x-w/2",false), // Define an horizontal centered gradient, from '-width/2' to 'width/2'. - img_y(100,100,1,1,"y-h/2",false), // Define a vertical centered gradient, from '-height/2' to 'height/2'. - img_atan2 = img_y.get_atan2(img_x); // Compute atan2(y,x) for each pixel value. - (img_x,img_y,img_atan2).display(); - \endcode - **/ - template - CImg& atan2(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return atan2(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg get_atan2(const CImg& img) const { - return CImg(*this,false).atan2(img); - } - - //! In-place pointwise multiplication. - /** - Compute the pointwise multiplication between the image instance and the specified input image \c img. - \param img Input image, as the second operand of the multiplication. - \note - - Similar to operator+=(const CImg&), except that it performs a pointwise multiplication instead of an addition. - - It does \e not perform a \e matrix multiplication. For this purpose, use operator*=(const CImg&) instead. - \par Example - \code - CImg - img("reference.jpg"), - shade(img.width,img.height(),1,1,"-(x-w/2)^2-(y-h/2)^2",false); - shade.normalize(0,1); - (img,shade,img.get_mul(shade)).display(); - \endcode - **/ - template - CImg& mul(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return mul(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg<_cimg_Tt> get_mul(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false).mul(img); - } - - //! In-place pointwise division. - /** - Similar to mul(const CImg&), except that it performs a pointwise division instead of a multiplication. - **/ - template - CImg& div(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return div(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg<_cimg_Tt> get_div(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false).div(img); - } - - //! Raise each pixel value to a specified power. - /** - Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its power \f$I_{(x,y,z,c)}^p\f$. - \param p Exponent value. - \note - - The \inplace of this method statically casts the computed values to the pixel type \c T. - - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. - \par Example - \code - const CImg - img0("reference.jpg"), // Load reference color image. - img1 = (img0/255).pow(1.8)*=255, // Compute gamma correction, with gamma = 1.8. - img2 = (img0/255).pow(0.5)*=255; // Compute gamma correction, with gamma = 0.5. - (img0,img1,img2).display(); - \endcode - **/ - CImg& pow(const double p) { - if (p==-4) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val*val)); } return *this; } - if (p==-3) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val)); } return *this; } - if (p==-2) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val)); } return *this; } - if (p==-1) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/val); } return *this; } - if (p==-0.5) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1/std::sqrt((double)val)); } return *this; } - if (p==0) return fill(1); - if (p==0.5) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)std::sqrt((double)val); } return *this; } - if (p==1) return *this; - if (p==2) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val; } return *this; } - if (p==3) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val; } return *this; } - if (p==4) { cimg_for(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val*val; } return *this; } - cimg_for(*this,ptrd,T) *ptrd = (T)std::pow((double)*ptrd,p); - return *this; - } - - //! Raise each pixel value to a specified power \newinstance. - CImg get_pow(const double p) const { - return CImg(*this,false).pow(p); - } - - //! Raise each pixel value to a power, specified from an expression. - /** - Similar to operator+=(const char*), except it performs a pointwise exponentiation instead of an addition. - **/ - CImg& pow(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"pow"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)std::pow((double)*ptrd,mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)std::pow((double)*ptrd,mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - values.load(expression); - } - pow(values); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Raise each pixel value to a power, specified from an expression \newinstance. - CImg get_pow(const char *const expression) const { - return CImg(*this,false).pow(expression); - } - - //! Raise each pixel value to a power, pointwisely specified from another image. - /** - Similar to operator+=(const CImg& img), except that it performs an exponentiation instead of an addition. - **/ - template - CImg& pow(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return pow(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg get_pow(const CImg& img) const { - return CImg(*this,false).pow(img); - } - - //! Compute the bitwise left rotation of each pixel value. - /** - Similar to operator<<=(unsigned int), except that it performs a left rotation instead of a left shift. - **/ - CImg& rol(const unsigned int n=1) { - cimg_for(*this,ptrd,T) *ptrd = (T)cimg::rol(*ptrd,n); - return *this; - } - - //! Compute the bitwise left rotation of each pixel value \newinstance. - CImg get_rol(const unsigned int n=1) const { - return (+*this).rol(n); - } - - //! Compute the bitwise left rotation of each pixel value. - /** - Similar to operator<<=(const char*), except that it performs a left rotation instead of a left shift. - **/ - CImg& rol(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"rol"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - values.load(expression); - } - rol(values); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Compute the bitwise left rotation of each pixel value \newinstance. - CImg get_rol(const char *const expression) const { - return (+*this).rol(expression); - } - - //! Compute the bitwise left rotation of each pixel value. - /** - Similar to operator<<=(const CImg&), except that it performs a left rotation instead of a left shift. - **/ - template - CImg& rol(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return rol(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg get_rol(const CImg& img) const { - return (+*this).rol(img); - } - - //! Compute the bitwise right rotation of each pixel value. - /** - Similar to operator>>=(unsigned int), except that it performs a right rotation instead of a right shift. - **/ - CImg& ror(const unsigned int n=1) { - cimg_for(*this,ptrd,T) *ptrd = (T)cimg::ror(*ptrd,n); - return *this; - } - - //! Compute the bitwise right rotation of each pixel value \newinstance. - CImg get_ror(const unsigned int n=1) const { - return (+*this).ror(n); - } - - //! Compute the bitwise right rotation of each pixel value. - /** - Similar to operator>>=(const char*), except that it performs a right rotation instead of a right shift. - **/ - CImg& ror(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"ror"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - values.load(expression); - } - ror(values); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Compute the bitwise right rotation of each pixel value \newinstance. - CImg get_ror(const char *const expression) const { - return (+*this).ror(expression); - } - - //! Compute the bitwise right rotation of each pixel value. - /** - Similar to operator>>=(const CImg&), except that it performs a right rotation instead of a right shift. - **/ - template - CImg& ror(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return ror(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg get_ror(const CImg& img) const { - return (+*this).ror(img); - } - - //! Pointwise min operator between instance image and a value. - /** - \param val Value used as the reference argument of the min operator. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{val})\f$. - **/ - CImg& min(const T val) { - cimg_for(*this,ptrd,T) *ptrd = cimg::min(*ptrd,val); - return *this; - } - - //! Pointwise min operator between instance image and a value \newinstance. - CImg get_min(const T val) const { - return (+*this).min(val); - } - - //! Pointwise min operator between two images. - /** - \param img Image used as the reference argument of the min operator. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{img}_{(x,y,z,c)})\f$. - **/ - template - CImg& min(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return min(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg<_cimg_Tt> get_min(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false).min(img); - } - - //! Pointwise min operator between an image and an expression. - /** - \param expression Math formula as a C-string. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. - **/ - CImg& min(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"min"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::min(*ptrd,(T)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::min(*ptrd,(T)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - values.load(expression); - } - min(values); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Pointwise min operator between an image and an expression \newinstance. - CImg get_min(const char *const expression) const { - return CImg(*this,false).min(expression); - } - - //! Pointwise max operator between instance image and a value. - /** - \param val Value used as the reference argument of the max operator. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{val})\f$. - **/ - CImg& max(const T val) { - cimg_for(*this,ptrd,T) *ptrd = cimg::max(*ptrd,val); - return *this; - } - - //! Pointwise max operator between instance image and a value \newinstance. - CImg get_max(const T val) const { - return (+*this).max(val); - } - - //! Pointwise max operator between two images. - /** - \param img Image used as the reference argument of the max operator. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{img}_{(x,y,z,c)})\f$. - **/ - template - CImg& max(const CImg& img) { - const unsigned long siz = size(), isiz = img.size(); - if (siz && isiz) { - if (is_overlapped(img)) return max(+img); - T *ptrd = _data, *const ptre = _data + siz; - if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) - for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs - CImg<_cimg_Tt> get_max(const CImg& img) const { - return CImg<_cimg_Tt>(*this,false).max(img); - } - - //! Pointwise max operator between an image and an expression. - /** - \param expression Math formula as a C-string. - \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. - **/ - CImg& max(const char *const expression) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"max"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::max(*ptrd,(T)mp.eval(x,y,z,c)); --ptrd; } - else cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::max(*ptrd,(T)mp.eval(x,y,z,c)); ++ptrd; } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode() = omode; - values.load(expression); - } - max(values); - } - cimg::exception_mode() = omode; - return *this; - } - - //! Pointwise max operator between an image and an expression \newinstance. - CImg get_max(const char *const expression) const { - return CImg(*this,false).max(expression); - } - - //! Return a reference to the minimum pixel value. - /** - **/ - T& min() { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "min(): Empty instance.", - cimg_instance); - T *ptr_min = _data; - T min_value = *ptr_min; - cimg_for(*this,ptrs,T) if (*ptrsmax_value) max_value = *(ptr_max=ptrs); - return *ptr_max; - } - - //! Return a reference to the maximum pixel value \const. - const T& max() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "max(): Empty instance.", - cimg_instance); - const T *ptr_max = _data; - T max_value = *ptr_max; - cimg_for(*this,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); - return *ptr_max; - } - - //! Return a reference to the minimum pixel value as well as the maximum pixel value. - /** - \param[out] max_val Maximum pixel value. - **/ - template - T& min_max(t& max_val) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "min_max(): Empty instance.", - cimg_instance); - T *ptr_min = _data; - T min_value = *ptr_min, max_value = min_value; - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - if (valmax_value) max_value = val; - } - max_val = (t)max_value; - return *ptr_min; - } - - //! Return a reference to the minimum pixel value as well as the maximum pixel value \const. - template - const T& min_max(t& max_val) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "min_max(): Empty instance.", - cimg_instance); - const T *ptr_min = _data; - T min_value = *ptr_min, max_value = min_value; - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - if (valmax_value) max_value = val; - } - max_val = (t)max_value; - return *ptr_min; - } - - //! Return a reference to the maximum pixel value as well as the minimum pixel value. - /** - \param[out] min_val Minimum pixel value. - **/ - template - T& max_min(t& min_val) { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "max_min(): Empty instance.", - cimg_instance); - T *ptr_max = _data; - T max_value = *ptr_max, min_value = max_value; - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - if (val>max_value) { max_value = val; ptr_max = ptrs; } - if (val - const T& max_min(t& min_val) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "max_min(): Empty instance.", - cimg_instance); - const T *ptr_max = _data; - T max_value = *ptr_max, min_value = max_value; - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - if (val>max_value) { max_value = val; ptr_max = ptrs; } - if (val arr(*this); - unsigned int l = 0, ir = size() - 1; - for (;;) { - if (ir<=l+1) { - if (ir==l+1 && arr[ir]>1; - cimg::swap(arr[mid],arr[l+1]); - if (arr[l]>arr[ir]) cimg::swap(arr[l],arr[ir]); - if (arr[l+1]>arr[ir]) cimg::swap(arr[l+1],arr[ir]); - if (arr[l]>arr[l+1]) cimg::swap(arr[l],arr[l+1]); - unsigned int i = l + 1, j = ir; - const T pivot = arr[l+1]; - for (;;) { - do ++i; while (arr[i]pivot); - if (j=k) ir = j - 1; - if (j<=k) l = i; - } - } - return 0; - } - - //! Return the median pixel value. - /** - **/ - T median() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "median(): Empty instance.", - cimg_instance); - const unsigned int s = size(); - const T res = kth_smallest(s>>1); - return (s%2)?res:((res+kth_smallest((s>>1)-1))/2); - } - - //! Return the sum of all the pixel values. - /** - **/ - Tdouble sum() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "sum(): Empty instance.", - cimg_instance); - Tdouble res = 0; - cimg_for(*this,ptrs,T) res+=(Tdouble)*ptrs; - return res; - } - - //! Return the average pixel value. - /** - **/ - Tdouble mean() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "mean(): Empty instance.", - cimg_instance); - Tdouble res = 0; - cimg_for(*this,ptrs,T) res+=(Tdouble)*ptrs; - return res/size(); - } - - //! Return the variance of the pixel values. - /** - \param variance_method Method used to estimate the variance. Can be: - - \c 0: Second moment, computed as - \f$1/N \sum\limits_{k=1}^{N} (x_k - \bar x)^2 = 1/N \left( \sum\limits_{k=1}^N x_k^2 - \left( \sum\limits_{k=1}^N x_k \right)^2 / N \right)\f$ - with \f$ \bar x = 1/N \sum\limits_{k=1}^N x_k \f$. - - \c 1: Best unbiased estimator, computed as \f$\frac{1}{N-1} \sum\limits_{k=1}^{N} (x_k - \bar x)^2 \f$. - - \c 2: Least median of squares. - - \c 3: Least trimmed of squares. - **/ - Tdouble variance(const unsigned int variance_method=1) const { - Tdouble foo; - return variance_mean(variance_method,foo); - } - - //! Return the variance as well as the average of the pixel values. - /** - \param variance_method Method used to estimate the variance (see variance(const unsigned int) const). - \param[out] mean Average pixel value. - **/ - template - Tdouble variance_mean(const unsigned int variance_method, t& mean) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "variance_mean(): Empty instance.", - cimg_instance); - - Tdouble variance = 0, average = 0; - const unsigned long siz = size(); - switch (variance_method) { - case 0 :{ // Least mean square (standard definition) - Tdouble S = 0, S2 = 0; - cimg_for(*this,ptrs,T) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } - variance = (S2 - S*S/siz)/siz; - average = S; - } break; - case 1 : { // Least mean square (robust definition) - Tdouble S = 0, S2 = 0; - cimg_for(*this,ptrs,T) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } - variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; - average = S; - } break; - case 2 : { // Least Median of Squares (MAD) - CImg buf(*this,false); - buf.sort(); - const unsigned long siz2 = siz>>1; - const Tdouble med_i = (double)buf[siz2]; - cimg_for(buf,ptrs,Tfloat) { const Tdouble val = (Tdouble)*ptrs; *ptrs = (Tfloat)cimg::abs(val - med_i); average+=val; } - buf.sort(); - const Tdouble sig = (Tdouble)(1.4828*buf[siz2]); - variance = sig*sig; - } break; - default : { // Least trimmed of Squares - CImg buf(*this,false); - const unsigned long siz2 = siz>>1; - cimg_for(buf,ptrs,Tfloat) { const Tdouble val = (Tdouble)*ptrs; (*ptrs)=(Tfloat)((*ptrs)*val); average+=val; } - buf.sort(); - Tdouble a = 0; - const Tfloat *ptrs = buf._data; - for (unsigned long j = 0; j0?variance:0; - } - - //! Return estimated variance of the noise. - /** - \param variance_method Method used to compute the variance (see variance(const unsigned int) const). - \note Because of structures such as edges in images it is - recommanded to use a robust variance estimation. The variance of the - noise is estimated by computing the variance of the Laplacian \f$(\Delta - I)^2 \f$ scaled by a factor \f$c\f$ insuring \f$ c E[(\Delta I)^2]= - \sigma^2\f$ where \f$\sigma\f$ is the noise variance. - **/ - Tdouble variance_noise(const unsigned int variance_method=2) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "variance_noise(): Empty instance.", - cimg_instance); - - const unsigned long siz = size(); - if (!siz || !_data) return 0; - if (variance_method>1) { // Compute a scaled version of the Laplacian. - CImg tmp(*this); - if (_depth==1) { - const Tdouble cste = 1.0/std::sqrt(20.0); // Depends on how the Laplacian is computed. - CImg_3x3(I,T); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,T) { - tmp(x,y,c) = cste*((Tdouble)Inc + (Tdouble)Ipc + (Tdouble)Icn + - (Tdouble)Icp - 4*(Tdouble)Icc); - } - } else { - const Tdouble cste = 1.0/std::sqrt(42.0); // Depends on how the Laplacian is computed. - CImg_3x3x3(I,T); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,T) { - tmp(x,y,z,c) = cste*( - (Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + (Tdouble)Icpc + - (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); - } - } - return tmp.variance(variance_method); - } - - // Version that doesn't need intermediate images. - Tdouble variance = 0, S = 0, S2 = 0; - if (_depth==1) { - const Tdouble cste = 1.0/std::sqrt(20.0); - CImg_3x3(I,T); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,T) { - const Tdouble val = cste*((Tdouble)Inc + (Tdouble)Ipc + - (Tdouble)Icn + (Tdouble)Icp - 4*(Tdouble)Icc); - S+=val; S2+=val*val; - } - } else { - const Tdouble cste = 1.0/std::sqrt(42.0); - CImg_3x3x3(I,T); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,T) { - const Tdouble val = cste * - ((Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + - (Tdouble)Icpc + - (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); - S+=val; S2+=val*val; - } - } - if (variance_method) variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; - else variance = (S2 - S*S/siz)/siz; - return variance>0?variance:0; - } - - //! Compute the MSE (Mean-Squared Error) between two images. - /** - \param img Image used as the second argument of the MSE operator. - **/ - template - Tdouble MSE(const CImg& img) const { - if (img.size()!=size()) - throw CImgArgumentException(_cimg_instance - "MSE(): Instance and specified image (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - img._width,img._height,img._depth,img._spectrum,img._data); - Tdouble vMSE = 0; - const t* ptr2 = img._data; - cimg_for(*this,ptr1,T) { - const Tdouble diff = (Tdouble)*ptr1 - (Tdouble)*(ptr2++); - vMSE+=diff*diff; - } - const unsigned long siz = img.size(); - if (siz) vMSE/=siz; - return vMSE; - } - - //! Compute the PSNR (Peak Signal-to-Noise Ratio) between two images. - /** - \param img Image used as the second argument of the PSNR operator. - \param max_value Maximum theoretical value of the signal. - **/ - template - Tdouble PSNR(const CImg& img, const Tdouble max_value=255) const { - const Tdouble vMSE = (Tdouble)std::sqrt(MSE(img)); - return (vMSE!=0)?(Tdouble)(20*std::log10(max_value/vMSE)):(Tdouble)(cimg::type::max()); - } - - //! Evaluate math formula. - /** - \param expression Math formula, as a C-string. - \param x Value of the pre-defined variable \c x. - \param y Value of the pre-defined variable \c y. - \param z Value of the pre-defined variable \c z. - \param c Value of the pre-defined variable \c c. - **/ - double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0) const { - if (!expression) return 0; - return _cimg_math_parser(*this,expression,"eval").eval(x,y,z,c); - } - - //! Evaluate math formula on a set of variables. - /** - \param expression Math formula, as a C-string. - \param xyzc Set of values (x,y,z,c) used for the evaluation. - **/ - template - CImg eval(const char *const expression, const CImg& xyzc) const { - CImg res(1,xyzc.size()/4); - if (!expression) return res.fill(0); - _cimg_math_parser mp(*this,expression,"eval"); - const t *ps = xyzc._data; - double x, y, z, c; - cimg_for(res,pd,double) { - x = (double)*(ps++); y = (double)*(ps++); z = (double)*(ps++); c = (double)*(ps++); - *pd = mp.eval(x,y,z,c); - } - return res; - } - - //! Compute statistics vector from the pixel values. - /* - \param variance_method Method used to compute the variance (see variance(const unsigned int) const). - \return Statistics vector as [min; max; mean; variance; xmin; ymin; zmin; cmin; xmax; ymax; zmax; cmax]. - **/ - CImg get_stats(const unsigned int variance_method=1) const { - if (is_empty()) return CImg(); - const unsigned long siz = size(); - const T *const odata = _data; - const T *pm = odata, *pM = odata; - Tdouble S = 0, S2 = 0; - T m = *pm, M = m; - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - const Tdouble _val = (Tdouble)val; - if (valM) { M = val; pM = ptrs; } - S+=_val; - S2+=_val*_val; - } - const Tdouble - mean_value = S/siz, - _variance_value = variance_method==0?(S2 - S*S/siz)/siz: - (variance_method==1?(siz>1?(S2 - S*S/siz)/(siz - 1):0): - variance(variance_method)), - variance_value = _variance_value>0?_variance_value:0; - int - xm = 0, ym = 0, zm = 0, cm = 0, - xM = 0, yM = 0, zM = 0, cM = 0; - contains(*pm,xm,ym,zm,cm); - contains(*pM,xM,yM,zM,cM); - return CImg(1,12).fill((Tdouble)m,(Tdouble)M,mean_value,variance_value, - (Tdouble)xm,(Tdouble)ym,(Tdouble)zm,(Tdouble)cm, - (Tdouble)xM,(Tdouble)yM,(Tdouble)zM,(Tdouble)cM); - } - - //! Compute statistics vector from the pixel values \inplace. - CImg& stats(const unsigned int variance_method=1) { - return get_stats(variance_method).move_to(*this); - } - - //@} - //------------------------------------- - // - //! \name Vector / Matrix Operations - //@{ - //------------------------------------- - - //! Compute norm of the image, viewed as a matrix. - /** - \param magnitude_type Norm type. Can be: - - \c -1: Linf-norm - - \c 0: L2-norm - - \c 1: L1-norm - **/ - Tdouble magnitude(const int magnitude_type=2) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "magnitude(): Empty instance.", - cimg_instance); - Tdouble res = 0; - switch (magnitude_type) { - case -1 : { - cimg_for(*this,ptrs,T) { const Tdouble val = (Tdouble)cimg::abs(*ptrs); if (val>res) res = val; } - } break; - case 1 : { - cimg_for(*this,ptrs,T) res+=(Tdouble)cimg::abs(*ptrs); - } break; - default : { - cimg_for(*this,ptrs,T) res+=(Tdouble)cimg::sqr(*ptrs); - res = (Tdouble)std::sqrt(res); - } - } - return res; - } - - //! Compute the trace of the image, viewed as a matrix. - /** - **/ - Tdouble trace() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "trace(): Empty instance.", - cimg_instance); - Tdouble res = 0; - cimg_forX(*this,k) res+=(Tdouble)(*this)(k,k); - return res; - } - - //! Compute the determinant of the image, viewed as a matrix. - /** - **/ - Tdouble det() const { - if (is_empty() || _width!=_height || _depth!=1 || _spectrum!=1) - throw CImgInstanceException(_cimg_instance - "det(): Instance is not a square matrix.", - cimg_instance); - - switch (_width) { - case 1 : return (Tdouble)((*this)(0,0)); - case 2 : return (Tdouble)((*this)(0,0))*(Tdouble)((*this)(1,1)) - (Tdouble)((*this)(0,1))*(Tdouble)((*this)(1,0)); - case 3 : { - const Tdouble - a = (Tdouble)_data[0], d = (Tdouble)_data[1], g = (Tdouble)_data[2], - b = (Tdouble)_data[3], e = (Tdouble)_data[4], h = (Tdouble)_data[5], - c = (Tdouble)_data[6], f = (Tdouble)_data[7], i = (Tdouble)_data[8]; - return i*a*e - a*h*f - i*b*d + b*g*f + c*d*h - c*g*e; - } - default : { - CImg lu(*this); - CImg indx; - bool d; - lu._LU(indx,d); - Tdouble res = d?(Tdouble)1:(Tdouble)-1; - cimg_forX(lu,i) res*=lu(i,i); - return res; - } - } - return 0; - } - - //! Compute the dot product between instance and argument, viewed as matrices. - /** - \param img Image used as a second argument of the dot product. - **/ - template - Tdouble dot(const CImg& img) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "dot(): Empty instance.", - cimg_instance); - if (!img) - throw CImgArgumentException(_cimg_instance - "dot(): Empty specified image.", - cimg_instance); - - const unsigned int nb = cimg::min(size(),img.size()); - Tdouble res = 0; - for (unsigned int off = 0; off get_vector_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { - CImg res; - if (res._height!=_spectrum) res.assign(1,_spectrum); - const unsigned long whd = (unsigned long)_width*_height*_depth; - const T *ptrs = data(x,y,z); - T *ptrd = res._data; - cimg_forC(*this,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - return res; - } - - //! Get (square) matrix-valued pixel located at specified position. - /** - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \note - The spectrum() of the image must be a square. - **/ - CImg get_matrix_at(const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) const { - const int n = (int)std::sqrt((double)_spectrum); - const T *ptrs = data(x,y,z,0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - CImg res(n,n); - T *ptrd = res._data; - cimg_forC(*this,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - return res; - } - - //! Get tensor-valued pixel located at specified position. - /** - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - **/ - CImg get_tensor_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { - const T *ptrs = data(x,y,z,0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - if (_spectrum==6) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd),*(ptrs+3*whd),*(ptrs+4*whd),*(ptrs+5*whd)); - if (_spectrum==3) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd)); - return tensor(*ptrs); - } - - //! Set vector-valued pixel at specified position. - /** - \param vec Vector to put on the instance image. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - **/ - template - CImg& set_vector_at(const CImg& vec, const unsigned int x, const unsigned int y=0, const unsigned int z=0) { - if (x<_width && y<_height && z<_depth) { - const t *ptrs = vec._data; - const unsigned long whd = (unsigned long)_width*_height*_depth; - T *ptrd = data(x,y,z); - for (unsigned int k = cimg::min((unsigned int)vec.size(),_spectrum); k; --k) { *ptrd = (T)*(ptrs++); ptrd+=whd; } - } - return *this; - } - - //! Set (square) matrix-valued pixel at specified position. - /** - \param mat Matrix to put on the instance image. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - **/ - template - CImg& set_matrix_at(const CImg& mat, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { - return set_vector_at(mat,x,y,z); - } - - //! Set tensor-valued pixel at specified position. - /** - \param ten Tensor to put on the instance image. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - **/ - template - CImg& set_tensor_at(const CImg& ten, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { - T *ptrd = data(x,y,z,0); - const unsigned long siz = (unsigned long)_width*_height*_depth; - if (ten._height==2) { - *ptrd = (T)ten[0]; ptrd+=siz; - *ptrd = (T)ten[1]; ptrd+=siz; - *ptrd = (T)ten[3]; - } - else { - *ptrd = (T)ten[0]; ptrd+=siz; - *ptrd = (T)ten[1]; ptrd+=siz; - *ptrd = (T)ten[2]; ptrd+=siz; - *ptrd = (T)ten[4]; ptrd+=siz; - *ptrd = (T)ten[5]; ptrd+=siz; - *ptrd = (T)ten[8]; - } - return *this; - } - - //! Unroll pixel values along axis \c y. - /** - \note Equivalent to \code unroll('y'); \endcode. - **/ - CImg& vector() { - return unroll('y'); - } - - //! Unroll pixel values along axis \c y \newinstance. - CImg get_vector() const { - return get_unroll('y'); - } - - //! Resize image to become a scalar square matrix. - /** - **/ - CImg& matrix() { - const unsigned long siz = size(); - switch (siz) { - case 1 : break; - case 4 : _width = _height = 2; break; - case 9 : _width = _height = 3; break; - case 16 : _width = _height = 4; break; - case 25 : _width = _height = 5; break; - case 36 : _width = _height = 6; break; - case 49 : _width = _height = 7; break; - case 64 : _width = _height = 8; break; - case 81 : _width = _height = 9; break; - case 100 : _width = _height = 10; break; - default : { - unsigned long i = 11, i2 = i*i; - while (i2 get_matrix() const { - return (+*this).matrix(); - } - - //! Resize image to become a symmetric tensor. - /** - **/ - CImg& tensor() { - return get_tensor().move_to(*this); - } - - //! Resize image to become a symmetric tensor \newinstance. - CImg get_tensor() const { - CImg res; - const unsigned long siz = size(); - switch (siz) { - case 1 : break; - case 3 : - res.assign(2,2); - res(0,0) = (*this)(0); - res(1,0) = res(0,1) = (*this)(1); - res(1,1) = (*this)(2); - break; - case 6 : - res.assign(3,3); - res(0,0) = (*this)(0); - res(1,0) = res(0,1) = (*this)(1); - res(2,0) = res(0,2) = (*this)(2); - res(1,1) = (*this)(3); - res(2,1) = res(1,2) = (*this)(4); - res(2,2) = (*this)(5); - break; - default : - throw CImgInstanceException(_cimg_instance - "tensor(): Invalid instance size (does not define a 1x1, 2x2 or 3x3 tensor).", - cimg_instance); - } - return res; - } - - //! Resize image to become a diagonal matrix. - /** - \note Transform the image as a diagonal matrix so that each of its initial value becomes a diagonal coefficient. - **/ - CImg& diagonal() { - return get_diagonal().move_to(*this); - } - - //! Resize image to become a diagonal matrix \newinstance. - CImg get_diagonal() const { - if (is_empty()) return *this; - CImg res(size(),size(),1,1,0); - cimg_foroff(*this,off) res(off,off) = (*this)(off); - return res; - } - - //! Replace the image by an identity matrix. - /** - \note If the instance image is not square, it is resized to a square matrix using its maximum dimension as a reference. - **/ - CImg& identity_matrix() { - return identity_matrix(cimg::max(_width,_height)).move_to(*this); - } - - //! Replace the image by an identity matrix \newinstance. - CImg get_identity_matrix() const { - return identity_matrix(cimg::max(_width,_height)); - } - - //! Fill image with a linear sequence of values. - /** - \param a0 Starting value of the sequence. - \param a1 Ending value of the sequence. - **/ - CImg& sequence(const T a0, const T a1) { - if (is_empty()) return *this; - const unsigned int siz = size() - 1; - T* ptr = _data; - if (siz) { - const Tdouble delta = (Tdouble)a1 - (Tdouble)a0; - cimg_foroff(*this,l) *(ptr++) = (T)(a0 + delta*l/siz); - } else *ptr = a0; - return *this; - } - - //! Fill image with a linear sequence of values \newinstance. - CImg get_sequence(const T a0, const T a1) const { - return (+*this).sequence(a0,a1); - } - - //! Transpose the image, viewed as a matrix. - /** - \note Equivalent to \code permute_axes("yxzc"); \endcode - **/ - CImg& transpose() { - if (_width==1) { _width = _height; _height = 1; return *this; } - if (_height==1) { _height = _width; _width = 1; return *this; } - if (_width==_height) { - cimg_forYZC(*this,y,z,c) for (int x = y; x get_transpose() const { - return get_permute_axes("yxzc"); - } - - //! Compute the cross product between two \c 1x3 images, viewed as 3d vectors. - /** - \param img Image used as the second argument of the cross product. - \note The first argument of the cross product is \c *this. - **/ - template - CImg& cross(const CImg& img) { - if (_width!=1 || _height<3 || img._width!=1 || img._height<3) - throw CImgInstanceException(_cimg_instance - "cross(): Instance and/or specified image (%u,%u,%u,%u,%p) are not 3d vectors.", - cimg_instance, - img._width,img._height,img._depth,img._spectrum,img._data); - - const T x = (*this)[0], y = (*this)[1], z = (*this)[2]; - (*this)[0] = (T)(y*img[2] - z*img[1]); - (*this)[1] = (T)(z*img[0] - x*img[2]); - (*this)[2] = (T)(x*img[1] - y*img[0]); - return *this; - } - - //! Compute the cross product between two \c 1x3 images, viewed as 3d vectors \newinstance. - template - CImg<_cimg_Tt> get_cross(const CImg& img) const { - return CImg<_cimg_Tt>(*this).cross(img); - } - - //! Invert the instance image, viewed as a matrix. - /** - \param use_LU Choose the inverting algorithm. Can be: - - \c true: LU-based matrix inversion. - - \c false: SVD-based matrix inversion. - **/ - CImg& invert(const bool use_LU=true) { - if (_width!=_height || _depth!=1 || _spectrum!=1) - throw CImgInstanceException(_cimg_instance - "invert(): Instance is not a square matrix.", - cimg_instance); -#ifdef cimg_use_lapack - int INFO = (int)use_LU, N = _width, LWORK = 4*N, *const IPIV = new int[N]; - Tfloat - *const lapA = new Tfloat[N*N], - *const WORK = new Tfloat[LWORK]; - cimg_forXY(*this,k,l) lapA[k*N+l] = (Tfloat)((*this)(k,l)); - cimg::getrf(N,lapA,IPIV,INFO); - if (INFO) - cimg::warn(_cimg_instance - "invert(): LAPACK function dgetrf_() returned error code %d.", - cimg_instance, - INFO); - else { - cimg::getri(N,lapA,IPIV,WORK,LWORK,INFO); - if (INFO) - cimg::warn(_cimg_instance - "invert(): LAPACK function dgetri_() returned error code %d.", - cimg_instance, - INFO); - } - if (!INFO) cimg_forXY(*this,k,l) (*this)(k,l) = (T)(lapA[k*N+l]); else fill(0); - delete[] IPIV; delete[] lapA; delete[] WORK; -#else - const double dete = _width>3?-1.0:det(); - if (dete!=0.0 && _width==2) { - const double - a = _data[0], c = _data[1], - b = _data[2], d = _data[3]; - _data[0] = (T)(d/dete); _data[1] = (T)(-c/dete); - _data[2] = (T)(-b/dete); _data[3] = (T)(a/dete); - } else if (dete!=0.0 && _width==3) { - const double - a = _data[0], d = _data[1], g = _data[2], - b = _data[3], e = _data[4], h = _data[5], - c = _data[6], f = _data[7], i = _data[8]; - _data[0] = (T)((i*e-f*h)/dete), _data[1] = (T)((g*f-i*d)/dete), _data[2] = (T)((d*h-g*e)/dete); - _data[3] = (T)((h*c-i*b)/dete), _data[4] = (T)((i*a-c*g)/dete), _data[5] = (T)((g*b-a*h)/dete); - _data[6] = (T)((b*f-e*c)/dete), _data[7] = (T)((d*c-a*f)/dete), _data[8] = (T)((a*e-d*b)/dete); - } else { - if (use_LU) { // LU-based inverse computation - CImg A(*this), indx, col(1,_width); - bool d; - A._LU(indx,d); - cimg_forX(*this,j) { - col.fill(0); - col(j) = 1; - col._solve(A,indx); - cimg_forX(*this,i) (*this)(j,i) = (T)col(i); - } - } else { // SVD-based inverse computation - CImg U(_width,_width), S(1,_width), V(_width,_width); - SVD(U,S,V,false); - U.transpose(); - cimg_forY(S,k) if (S[k]!=0) S[k]=1/S[k]; - S.diagonal(); - *this = V*S*U; - } - } -#endif - return *this; - } - - //! Invert the instance image, viewed as a matrix \newinstance. - CImg get_invert(const bool use_LU=true) const { - return CImg(*this,false).invert(use_LU); - } - - //! Compute the Moore-Penrose pseudo-inverse of the instance image, viewed as a matrix. - /** - **/ - CImg& pseudoinvert() { - return get_pseudoinvert().move_to(*this); - } - - //! Compute the Moore-Penrose pseudo-inverse of the instance image, viewed as a matrix \newinstance. - CImg get_pseudoinvert() const { - CImg U, S, V; - SVD(U,S,V); - const Tfloat tolerance = (sizeof(Tfloat)<=4?5.96e-8f:1.11e-16f)*cimg::max(_width,_height)*S.max(); - cimg_forX(V,x) { - const Tfloat s = S(x), invs = s>tolerance?1/s:(Tfloat)0; - cimg_forY(V,y) V(x,y)*=invs; - } - return V*U.transpose(); - } - - //! Solve a system of linear equations. - /** - \param A Matrix of the linear system. - \note Solve \c AX=B where \c B=*this. - **/ - template - CImg& solve(const CImg& A) { - if (_width!=1 || _depth!=1 || _spectrum!=1 || _height!=A._height || A._depth!=1 || A._spectrum!=1) - throw CImgArgumentException(_cimg_instance - "solve(): Instance and specified matrix (%u,%u,%u,%u,%p) have incompatible dimensions.", - cimg_instance, - A._width,A._height,A._depth,A._spectrum,A._data); - typedef _cimg_Ttfloat Ttfloat; - if (A._width==A._height) { -#ifdef cimg_use_lapack - char TRANS = 'N'; - int INFO, N = _height, LWORK = 4*N, *const IPIV = new int[N]; - Ttfloat - *const lapA = new Ttfloat[N*N], - *const lapB = new Ttfloat[N], - *const WORK = new Ttfloat[LWORK]; - cimg_forXY(A,k,l) lapA[k*N+l] = (Ttfloat)(A(k,l)); - cimg_forY(*this,i) lapB[i] = (Ttfloat)((*this)(i)); - cimg::getrf(N,lapA,IPIV,INFO); - if (INFO) - cimg::warn(_cimg_instance - "solve(): LAPACK library function dgetrf_() returned error code %d.", - cimg_instance, - INFO); - - if (!INFO) { - cimg::getrs(TRANS,N,lapA,IPIV,lapB,INFO); - if (INFO) - cimg::warn(_cimg_instance - "solve(): LAPACK library function dgetrs_() returned error code %d.", - cimg_instance, - INFO); - } - if (!INFO) cimg_forY(*this,i) (*this)(i) = (T)(lapB[i]); else fill(0); - delete[] IPIV; delete[] lapA; delete[] lapB; delete[] WORK; -#else - CImg lu(A,false); - CImg indx; - bool d; - lu._LU(indx,d); - _solve(lu,indx); -#endif - } else { // Least-square solution for non-square systems. -#ifdef cimg_use_lapack - char TRANS = 'N'; - int INFO, N = A._width, M = A._height, LWORK = -1, LDA = M, LDB = M, NRHS = _width; - Ttfloat WORK_QUERY; - Ttfloat - * const lapA = new Ttfloat[M*N], - * const lapB = new Ttfloat[M*NRHS]; - cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, &WORK_QUERY, LWORK, INFO); - LWORK = (int) WORK_QUERY; - Ttfloat *const WORK = new Ttfloat[LWORK]; - cimg_forXY(A,k,l) lapA[k*M+l] = (Ttfloat)(A(k,l)); - cimg_forXY(*this,k,l) lapB[k*M+l] = (Ttfloat)((*this)(k,l)); - cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, WORK, LWORK, INFO); - if (INFO != 0) - cimg::warn(_cimg_instance - "solve(): LAPACK library function sgels() returned error code %d.", - cimg_instance, - INFO); - assign(NRHS, N); - if (!INFO != 0) - cimg_forXY(*this,k,l) (*this)(k,l) = (T) lapB[k*M+l]; - else - assign(A.get_pseudoinvert()*(*this)); - delete[] lapA; delete[] lapB; delete[] WORK; -#else - assign(A.get_pseudoinvert()*(*this)); -#endif - } - return *this; - } - - //! Solve a system of linear equations \newinstance. - template - CImg<_cimg_Ttfloat> get_solve(const CImg& A) const { - return CImg<_cimg_Ttfloat>(*this,false).solve(A); - } - - template - CImg& _solve(const CImg& A, const CImg& indx) { - typedef _cimg_Ttfloat Ttfloat; - const int N = size(); - int ii = -1; - Ttfloat sum; - for (int i = 0; i=0) for (int j = ii; j<=i-1; ++j) sum-=A(j,i)*(*this)(j); - else if (sum!=0) ii = i; - (*this)(i) = (T)sum; - } - for (int i = N - 1; i>=0; --i) { - sum = (*this)(i); - for (int j = i + 1; j - CImg& solve_tridiagonal(const CImg& A) { - const unsigned int siz = (int)size(); - if (A._width!=3 || A._height!=siz) - throw CImgArgumentException(_cimg_instance - "solve_tridiagonal(): Instance and tridiagonal matrix " - "(%u,%u,%u,%u,%p) have incompatible dimensions.", - cimg_instance, - A._width,A._height,A._depth,A._spectrum,A._data); - typedef _cimg_Ttfloat Ttfloat; - const Ttfloat epsilon = 1e-4f; - CImg B = A.get_column(1), V(*this,false); - for (int i = 1; i<(int)siz; ++i) { - const Ttfloat m = A(0,i)/(B[i-1]?B[i-1]:epsilon); - B[i] -= m*A(2,i-1); - V[i] -= m*V[i-1]; - } - (*this)[siz-1] = (T)(V[siz-1]/(B[siz-1]?B[siz-1]:epsilon)); - for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i+1])/(B[i]?B[i]:epsilon)); - return *this; - } - - //! Solve a tridiagonal system of linear equations \newinstance. - template - CImg<_cimg_Ttfloat> get_solve_tridiagonal(const CImg& A) const { - return CImg<_cimg_Ttfloat>(*this,false).solve_tridiagonal(A); - } - - //! Compute eigenvalues and eigenvectors of the instance image, viewed as a matrix. - /** - \param[out] val Vector of the estimated eigenvalues, in decreasing order. - \param[out] vec Matrix of the estimated eigenvalues, sorted by columns. - **/ - template - const CImg& eigen(CImg& val, CImg &vec) const { - if (is_empty()) { val.assign(); vec.assign(); } - else { - if (_width!=_height || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "eigen(): Instance is not a square matrix.", - cimg_instance); - - if (val.size()<(unsigned long)_width) val.assign(1,_width); - if (vec.size()<(unsigned long)_width*_width) vec.assign(_width,_width); - switch (_width) { - case 1 : { val[0] = (t)(*this)[0]; vec[0] = (t)1; } break; - case 2 : { - const double a = (*this)[0], b = (*this)[1], c = (*this)[2], d = (*this)[3], e = a + d; - double f = e*e - 4*(a*d - b*c); - if (f<0) - cimg::warn(_cimg_instance - "eigen(): Complex eigenvalues found.", - cimg_instance); - - f = std::sqrt(f); - const double l1 = 0.5*(e-f), l2 = 0.5*(e+f); - const double theta1 = std::atan2(l2-a,b), theta2 = std::atan2(l1-a,b); - val[0] = (t)l2; - val[1] = (t)l1; - vec(0,0) = (t)std::cos(theta1); - vec(0,1) = (t)std::sin(theta1); - vec(1,0) = (t)std::cos(theta2); - vec(1,1) = (t)std::sin(theta2); - } break; - default : - throw CImgInstanceException(_cimg_instance - "eigen(): Eigenvalues computation of general matrices is limited to 2x2 matrices.", - cimg_instance); - } - } - return *this; - } - - //! Compute eigenvalues and eigenvectors of the instance image, viewed as a matrix. - /** - \return A list of two images [val; vec], whose meaning is similar as in eigen(CImg&,CImg&) const. - **/ - CImgList get_eigen() const { - CImgList res(2); - eigen(res[0],res[1]); - return res; - } - - //! Compute eigenvalues and eigenvectors of the instance image, viewed as a symmetric matrix. - /** - \param[out] val Vector of the estimated eigenvalues, in decreasing order. - \param[out] vec Matrix of the estimated eigenvalues, sorted by columns. - **/ - template - const CImg& symmetric_eigen(CImg& val, CImg& vec) const { - if (is_empty()) { val.assign(); vec.assign(); } - else { -#ifdef cimg_use_lapack - char JOB = 'V', UPLO = 'U'; - int N = _width, LWORK = 4*N, INFO; - Tfloat - *const lapA = new Tfloat[N*N], - *const lapW = new Tfloat[N], - *const WORK = new Tfloat[LWORK]; - cimg_forXY(*this,k,l) lapA[k*N+l] = (Tfloat)((*this)(k,l)); - cimg::syev(JOB,UPLO,N,lapA,lapW,WORK,LWORK,INFO); - if (INFO) - cimg::warn(_cimg_instance - "symmetric_eigen(): LAPACK library function dsyev_() returned error code %d.", - cimg_instance, - INFO); - - val.assign(1,N); - vec.assign(N,N); - if (!INFO) { - cimg_forY(val,i) val(i) = (T)lapW[N-1-i]; - cimg_forXY(vec,k,l) vec(k,l) = (T)(lapA[(N-1-k)*N+l]); - } else { val.fill(0); vec.fill(0); } - delete[] lapA; delete[] lapW; delete[] WORK; -#else - if (_width!=_height || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "eigen(): Instance is not a square matrix.", - cimg_instance); - - val.assign(1,_width); - if (vec._data) vec.assign(_width,_width); - if (_width<3) { - eigen(val,vec); - if (_width==2) { vec[1] = -vec[2]; vec[3] = vec[0]; } // Force orthogonality for 2x2 matrices. - return *this; - } - CImg V(_width,_width); - SVD(vec,val,V,false); - bool is_ambiguous = false; - float eig = 0; - cimg_forY(val,p) { // check for ambiguous cases. - if (val[p]>eig) eig = (float)val[p]; - t scal = 0; - cimg_forY(vec,y) scal+=vec(p,y)*V(p,y); - if (cimg::abs(scal)<0.9f) is_ambiguous = true; - if (scal<0) val[p] = -val[p]; - } - if (is_ambiguous) { - ++(eig*=2); - SVD(vec,val,V,false,40,eig); - val-=eig; - } - CImg permutations; // sort eigenvalues in decreasing order - CImg tmp(_width); - val.sort(permutations,false); - cimg_forY(vec,k) { - cimg_forY(permutations,y) tmp(y) = vec(permutations(y),k); - std::memcpy(vec.data(0,k),tmp._data,sizeof(t)*_width); - } -#endif - } - return *this; - } - - //! Compute eigenvalues and eigenvectors of the instance image, viewed as a symmetric matrix. - /** - \return A list of two images [val; vec], whose meaning are similar as in symmetric_eigen(CImg&,CImg&) const. - **/ - CImgList get_symmetric_eigen() const { - CImgList res(2); - symmetric_eigen(res[0],res[1]); - return res; - } - - //! Sort pixel values and get sorting permutations. - /** - \param[out] permutations Permutation map used for the sorting. - \param is_increasing Tells if pixel values are sorted in an increasing (\c true) or decreasing (\c false) way. - **/ - template - CImg& sort(CImg& permutations, const bool is_increasing=true) { - permutations.assign(_width,_height,_depth,_spectrum); - if (is_empty()) return *this; - cimg_foroff(permutations,off) permutations[off] = (t)off; - return _quicksort(0,size()-1,permutations,is_increasing,true); - } - - //! Sort pixel values and get sorting permutations \newinstance. - template - CImg get_sort(CImg& permutations, const bool is_increasing=true) const { - return (+*this).sort(permutations,is_increasing); - } - - //! Sort pixel values. - /** - \param is_increasing Tells if pixel values are sorted in an increasing (\c true) or decreasing (\c false) way. - \param axis Tells if the value sorting must be done along a specific axis. Can be: - - \c 0: All pixel values are sorted, independently on their initial position. - - \c 'x': Image columns are sorted, according to the first value in each column. - - \c 'y': Image rows are sorted, according to the first value in each row. - - \c 'z': Image slices are sorted, according to the first value in each slice. - - \c 'c': Image channels are sorted, according to the first value in each channel. - **/ - CImg& sort(const bool is_increasing=true, const char axis=0) { - if (is_empty()) return *this; - CImg perm; - switch (cimg::uncase(axis)) { - case 0 : - _quicksort(0,size()-1,perm,is_increasing,false); - break; - case 'x' : { - perm.assign(_width); - get_crop(0,0,0,0,_width-1,0,0,0).sort(perm,is_increasing); - CImg img(*this,false); - cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(perm[x],y,z,c); - } break; - case 'y' : { - perm.assign(_height); - get_crop(0,0,0,0,0,_height-1,0,0).sort(perm,is_increasing); - CImg img(*this,false); - cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,perm[y],z,c); - } break; - case 'z' : { - perm.assign(_depth); - get_crop(0,0,0,0,0,0,_depth-1,0).sort(perm,is_increasing); - CImg img(*this,false); - cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,perm[z],c); - } break; - case 'c' : { - perm.assign(_spectrum); - get_crop(0,0,0,0,0,0,0,_spectrum-1).sort(perm,is_increasing); - CImg img(*this,false); - cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,z,perm[c]); - } break; - default : - throw CImgArgumentException(_cimg_instance - "sort(): Invalid specified axis '%c' " - "(should be { x | y | z | c }).", - cimg_instance,axis); - } - return *this; - } - - //! Sort pixel values \newinstance. - CImg get_sort(const bool is_increasing=true, const char axis=0) const { - return (+*this).sort(is_increasing,axis); - } - - template - CImg& _quicksort(const int indm, const int indM, CImg& permutations, const bool is_increasing, const bool is_permutations) { - if (indm(*this)[mid]) { - cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); - } - if ((*this)[mid]>(*this)[indM]) { - cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); - } - if ((*this)[indm]>(*this)[mid]) { - cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); - } - } else { - if ((*this)[indm]<(*this)[mid]) { - cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); - } - if ((*this)[mid]<(*this)[indM]) { - cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); - } - if ((*this)[indm]<(*this)[mid]) { - cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); - } - } - if (indM - indm>=3) { - const T pivot = (*this)[mid]; - int i = indm, j = indM; - if (is_increasing) { - do { - while ((*this)[i]pivot) --j; - if (i<=j) { - if (is_permutations) cimg::swap(permutations[i],permutations[j]); - cimg::swap((*this)[i++],(*this)[j--]); - } - } while (i<=j); - } else { - do { - while ((*this)[i]>pivot) ++i; - while ((*this)[j] A; // Input matrix (assumed to contain some values). - CImg<> U,S,V; - A.SVD(U,S,V) - \endcode - **/ - template - const CImg& SVD(CImg& U, CImg& S, CImg& V, const bool sorting=true, - const unsigned int max_iteration=40, const float lambda=0) const { - if (is_empty()) { U.assign(); S.assign(); V.assign(); } - else { - U = *this; - if (lambda!=0) { - const unsigned int delta = cimg::min(U._width,U._height); - for (unsigned int i = 0; i rv1(_width); - t anorm = 0, c, f, g = 0, h, s, scale = 0; - int l = 0, nm = 0; - - cimg_forX(U,i) { - l = i+1; rv1[i] = scale*g; g = s = scale = 0; - if (i=0?-1:1)*std::sqrt(s)); h=f*g-s; U(i,i) = f-g; - for (int j = l; j=0?-1:1)*std::sqrt(s)); h = f*g-s; U(l,i) = f-g; - for (int k = l; k=0; --i) { - if (i=0; --i) { - l = i+1; g = S[i]; - for (int j = l; j=0; --k) { - for (unsigned int its = 0; its=1; --l) { - nm = l-1; - if ((cimg::abs(rv1[l])+anorm)==anorm) { flag = false; break; } - if ((cimg::abs(S[nm])+anorm)==anorm) break; - } - if (flag) { - c = 0; s = 1; - for (int i = l; i<=k; ++i) { - f = s*rv1[i]; rv1[i] = c*rv1[i]; - if ((cimg::abs(f)+anorm)==anorm) break; - g = S[i]; h = (t)cimg::_pythagore(f,g); S[i] = h; h = 1/h; c = g*h; s = -f*h; - cimg_forY(U,j) { const t y = U(nm,j), z = U(i,j); U(nm,j) = y*c + z*s; U(i,j) = z*c - y*s; } - } - } - const t z = S[k]; - if (l==k) { if (z<0) { S[k] = -z; cimg_forX(U,j) V(k,j) = -V(k,j); } break; } - nm = k-1; - t x = S[l], y = S[nm]; - g = rv1[nm]; h = rv1[k]; - f = ((y-z)*(y+z)+(g-h)*(g+h))/(2*h*y); - g = (t)cimg::_pythagore(f,1.0); - f = ((x-z)*(x+z)+h*((y/(f+ (f>=0?g:-g)))-h))/x; - c = s = 1; - for (int j = l; j<=nm; ++j) { - const int i = j+1; - g = rv1[i]; h = s*g; g = c*g; - t y = S[i]; - t z = (t)cimg::_pythagore(f,h); - rv1[j] = z; c = f/z; s = h/z; - f = x*c+g*s; g = g*c-x*s; h = y*s; y*=c; - cimg_forX(U,jj) { const t x = V(j,jj), z = V(i,jj); V(j,jj) = x*c + z*s; V(i,jj) = z*c - x*s; } - z = (t)cimg::_pythagore(f,h); S[j] = z; - if (z) { z = 1/z; c = f*z; s = h*z; } - f = c*g+s*y; x = c*y-s*g; - cimg_forY(U,jj) { const t y = U(j,jj); z = U(i,jj); U(j,jj) = y*c + z*s; U(i,jj) = z*c - y*s; } - } - rv1[l] = 0; rv1[k]=f; S[k]=x; - } - } - - if (sorting) { - CImg permutations; - CImg tmp(_width); - S.sort(permutations,false); - cimg_forY(U,k) { - cimg_forY(permutations,y) tmp(y) = U(permutations(y),k); - std::memcpy(U.data(0,k),tmp._data,sizeof(t)*_width); - } - cimg_forY(V,k) { - cimg_forY(permutations,y) tmp(y) = V(permutations(y),k); - std::memcpy(V.data(0,k),tmp._data,sizeof(t)*_width); - } - } - } - return *this; - } - - //! Compute the SVD of the instance image, viewed as a general matrix. - /** - \return A list of three images [U; S; V], whose meaning is similar as in SVD(CImg&,CImg&,CImg&,bool,unsigned int,float) const. - **/ - CImgList get_SVD(const bool sorting=true, - const unsigned int max_iteration=40, const float lambda=0) const { - CImgList res(3); - SVD(res[0],res[1],res[2],sorting,max_iteration,lambda); - return res; - } - - // [internal] Compute the LU decomposition of a permuted matrix. - template - CImg& _LU(CImg& indx, bool& d) { - const int N = width(); - int imax = 0; - CImg vv(N); - indx.assign(N); - d = true; - cimg_forX(*this,i) { - Tfloat vmax = 0; - cimg_forX(*this,j) { - const Tfloat tmp = cimg::abs((*this)(j,i)); - if (tmp>vmax) vmax = tmp; - } - if (vmax==0) { indx.fill(0); return fill(0); } - vv[i] = 1/vmax; - } - cimg_forX(*this,j) { - for (int i = 0; i=vmax) { vmax=tmp; imax=i; } - } - if (j!=imax) { - cimg_forX(*this,k) cimg::swap((*this)(k,imax),(*this)(k,j)); - d =!d; - vv[imax] = vv[j]; - } - indx[j] = (t)imax; - if ((*this)(j,j)==0) (*this)(j,j) = (T)1e-20; - if (j - static CImg dijkstra(const tf& distance, const unsigned int nb_nodes, - const unsigned int starting_node, const unsigned int ending_node, - CImg& previous_node) { - if (starting_node>=nb_nodes) - throw CImgArgumentException("CImg<%s>::dijkstra(): Specified indice of starting node %u is higher than number of nodes %u.", - pixel_type(),starting_node,nb_nodes); - CImg dist(1,nb_nodes,1,1,cimg::type::max()); - dist(starting_node) = 0; - previous_node.assign(1,nb_nodes,1,1,(t)-1); - previous_node(starting_node) = (t)starting_node; - CImg Q(nb_nodes); - cimg_forX(Q,u) Q(u) = u; - cimg::swap(Q(starting_node),Q(0)); - unsigned int sizeQ = nb_nodes; - while (sizeQ) { - // Update neighbors from minimal vertex - const unsigned int umin = Q(0); - if (umin==ending_node) sizeQ = 0; - else { - const T dmin = dist(umin); - const T infty = cimg::type::max(); - for (unsigned int q = 1; qdist(Q(left))) || (rightdist(Q(right)));) { - if (right - static CImg dijkstra(const tf& distance, const unsigned int nb_nodes, - const unsigned int starting_node, const unsigned int ending_node=~0U) { - CImg foo; - return dijkstra(distance,nb_nodes,starting_node,ending_node,foo); - } - - //! Return minimal path in a graph, using the Dijkstra algorithm. - /** - \param starting_node Indice of the starting node. - \param ending_node Indice of the ending node. - \param previous_node Array that gives the previous node indice in the path to the starting node (optional parameter). - \return Array of distances of each node to the starting node. - \note image instance corresponds to the adjacency matrix of the graph. - **/ - template - CImg& dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg& previous_node) { - return get_dijkstra(starting_node,ending_node,previous_node).move_to(*this); - } - - //! Return minimal path in a graph, using the Dijkstra algorithm \newinstance. - template - CImg get_dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg& previous_node) const { - if (_width!=_height || _depth!=1 || _spectrum!=1) - throw CImgInstanceException(_cimg_instance - "dijkstra(): Instance is not a graph adjacency matrix.", - cimg_instance); - - return dijkstra(*this,_width,starting_node,ending_node,previous_node); - } - - //! Return minimal path in a graph, using the Dijkstra algorithm. - CImg& dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) { - return get_dijkstra(starting_node,ending_node).move_to(*this); - } - - //! Return minimal path in a graph, using the Dijkstra algorithm \newinstance. - CImg get_dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) const { - CImg foo; - return get_dijkstra(starting_node,ending_node,foo); - } - - //! Return an image containing the ascii codes of the specified string. - /** - \param str input C-string to encode as an image. - \param is_last_zero Tells if the ending \c '0' character appear in the resulting image. - **/ - static CImg string(const char *const str, const bool is_last_zero=true) { - if (!str) return CImg(); - return CImg(str,(unsigned int)std::strlen(str)+(is_last_zero?1:0)); - } - - //! Return a \c 1x1 image containing specified value. - /** - \param a0 First vector value. - **/ - static CImg vector(const T& a0) { - CImg r(1,1); - r[0] = a0; - return r; - } - - //! Return a \c 1x2 image containing specified values. - /** - \param a0 First vector value. - \param a1 Second vector value. - **/ - static CImg vector(const T& a0, const T& a1) { - CImg r(1,2); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; - return r; - } - - //! Return a \c 1x3 image containing specified values. - /** - \param a0 First vector value. - \param a1 Second vector value. - \param a2 Third vector value. - **/ - static CImg vector(const T& a0, const T& a1, const T& a2) { - CImg r(1,3); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; - return r; - } - - //! Return a \c 1x4 image containing specified values. - /** - \param a0 First vector value. - \param a1 Second vector value. - \param a2 Third vector value. - \param a3 Fourth vector value. - **/ - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3) { - CImg r(1,4); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - return r; - } - - //! Return a \c 1x5 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { - CImg r(1,5); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; - return r; - } - - //! Return a \c 1x6 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { - CImg r(1,6); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; - return r; - } - - //! Return a \c 1x7 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6) { - CImg r(1,7); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; - return r; - } - - //! Return a \c 1x8 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7) { - CImg r(1,8); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - return r; - } - - //! Return a \c 1x9 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8) { - CImg r(1,9); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; - return r; - } - - //! Return a \c 1x10 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9) { - CImg r(1,10); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; - return r; - } - - //! Return a \c 1x11 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10) { - CImg r(1,11); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; - return r; - } - - //! Return a \c 1x12 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11) { - CImg r(1,12); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - return r; - } - - //! Return a \c 1x13 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11, - const T& a12) { - CImg r(1,13); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - *(ptr++) = a12; - return r; - } - - //! Return a \c 1x14 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11, - const T& a12, const T& a13) { - CImg r(1,14); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - *(ptr++) = a12; *(ptr++) = a13; - return r; - } - - //! Return a \c 1x15 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11, - const T& a12, const T& a13, const T& a14) { - CImg r(1,15); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; - return r; - } - - //! Return a \c 1x16 image containing specified values. - static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11, - const T& a12, const T& a13, const T& a14, const T& a15) { - CImg r(1,16); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; - return r; - } - - //! Return a 1x1 matrix containing specified coefficients. - /** - \param a0 First matrix value. - \note Equivalent to vector(const T&). - **/ - static CImg matrix(const T& a0) { - return vector(a0); - } - - //! Return a 2x2 matrix containing specified coefficients. - /** - \param a0 First matrix value. - \param a1 Second matrix value. - \param a2 Third matrix value. - \param a3 Fourth matrix value. - **/ - static CImg matrix(const T& a0, const T& a1, - const T& a2, const T& a3) { - CImg r(2,2); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; - *(ptr++) = a2; *(ptr++) = a3; - return r; - } - - //! Return a 3x3 matrix containing specified coefficients. - /** - \param a0 First matrix value. - \param a1 Second matrix value. - \param a2 Third matrix value. - \param a3 Fourth matrix value. - \param a4 Fifth matrix value. - \param a5 Sixth matrix value. - \param a6 Seventh matrix value. - \param a7 Eighth matrix value. - \param a8 Nineth matrix value. - **/ - static CImg matrix(const T& a0, const T& a1, const T& a2, - const T& a3, const T& a4, const T& a5, - const T& a6, const T& a7, const T& a8) { - CImg r(3,3); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; - *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; - *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; - return r; - } - - //! Return a 4x4 matrix containing specified coefficients. - static CImg matrix(const T& a0, const T& a1, const T& a2, const T& a3, - const T& a4, const T& a5, const T& a6, const T& a7, - const T& a8, const T& a9, const T& a10, const T& a11, - const T& a12, const T& a13, const T& a14, const T& a15) { - CImg r(4,4); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; - *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; - *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; - *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; - return r; - } - - //! Return a 5x5 matrix containing specified coefficients. - static CImg matrix(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, - const T& a5, const T& a6, const T& a7, const T& a8, const T& a9, - const T& a10, const T& a11, const T& a12, const T& a13, const T& a14, - const T& a15, const T& a16, const T& a17, const T& a18, const T& a19, - const T& a20, const T& a21, const T& a22, const T& a23, const T& a24) { - CImg r(5,5); T *ptr = r._data; - *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; - *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; *(ptr++) = a9; - *(ptr++) = a10; *(ptr++) = a11; *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; - *(ptr++) = a15; *(ptr++) = a16; *(ptr++) = a17; *(ptr++) = a18; *(ptr++) = a19; - *(ptr++) = a20; *(ptr++) = a21; *(ptr++) = a22; *(ptr++) = a23; *(ptr++) = a24; - return r; - } - - //! Return a 1x1 symmetric matrix containing specified coefficients. - /** - \param a0 First matrix value. - \note Equivalent to vector(const T&). - **/ - static CImg tensor(const T& a0) { - return matrix(a0); - } - - //! Return a 2x2 symmetric matrix tensor containing specified coefficients. - static CImg tensor(const T& a0, const T& a1, const T& a2) { - return matrix(a0,a1,a1,a2); - } - - //! Return a 3x3 symmetric matrix containing specified coefficients. - static CImg tensor(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { - return matrix(a0,a1,a2,a1,a3,a4,a2,a4,a5); - } - - //! Return a 1x1 diagonal matrix containing specified coefficients. - static CImg diagonal(const T& a0) { - return matrix(a0); - } - - //! Return a 2x2 diagonal matrix containing specified coefficients. - static CImg diagonal(const T& a0, const T& a1) { - return matrix(a0,0,0,a1); - } - - //! Return a 3x3 diagonal matrix containing specified coefficients. - static CImg diagonal(const T& a0, const T& a1, const T& a2) { - return matrix(a0,0,0,0,a1,0,0,0,a2); - } - - //! Return a 4x4 diagonal matrix containing specified coefficients. - static CImg diagonal(const T& a0, const T& a1, const T& a2, const T& a3) { - return matrix(a0,0,0,0,0,a1,0,0,0,0,a2,0,0,0,0,a3); - } - - //! Return a 5x5 diagonal matrix containing specified coefficients. - static CImg diagonal(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { - return matrix(a0,0,0,0,0,0,a1,0,0,0,0,0,a2,0,0,0,0,0,a3,0,0,0,0,0,a4); - } - - //! Return a NxN identity matrix. - /** - \param N Dimension of the matrix. - **/ - static CImg identity_matrix(const unsigned int N) { - CImg res(N,N,1,1,0); - cimg_forX(res,x) res(x,x) = 1; - return res; - } - - //! Return a N-numbered sequence vector from \p a0 to \p a1. - /** - \param N Size of the resulting vector. - \param a0 Starting value of the sequence. - \param a1 Ending value of the sequence. - **/ - static CImg sequence(const unsigned int N, const T a0, const T a1) { - if (N) return CImg(1,N).sequence(a0,a1); - return CImg(); - } - - //! Return a 3x3 rotation matrix along the (x,y,z)-axis with an angle w. - /** - \param x X-coordinate of the rotation axis, or first quaternion coordinate. - \param y Y-coordinate of the rotation axis, or second quaternion coordinate. - \param z Z-coordinate of the rotation axis, or third quaternion coordinate. - \param w Angle of the rotation axis, or fourth quaternion coordinate. - \param is_quaternion Tell is the four arguments denotes a set { axis + angle } or a quaternion. - **/ - static CImg rotation_matrix(const float x, const float y, const float z, const float w, const bool is_quaternion=false) { - float X,Y,Z,W; - if (!is_quaternion) { - const float norm = (float)std::sqrt(x*x + y*y + z*z), - nx = norm>0?x/norm:0, - ny = norm>0?y/norm:0, - nz = norm>0?z/norm:1, - nw = norm>0?w:0, - sina = (float)std::sin(nw/2), - cosa = (float)std::cos(nw/2); - X = nx*sina; - Y = ny*sina; - Z = nz*sina; - W = cosa; - } else { - const float norm = (float)std::sqrt(x*x + y*y + z*z + w*w); - if (norm>0) { X = x/norm; Y = y/norm; Z = z/norm; W = w/norm; } - else { X = Y = Z = 0; W = 1; } - } - const float xx = X*X, xy = X*Y, xz = X*Z, xw = X*W, yy = Y*Y, yz = Y*Z, yw = Y*W, zz = Z*Z, zw = Z*W; - return CImg::matrix((T)(1-2*(yy+zz)), (T)(2*(xy+zw)), (T)(2*(xz-yw)), - (T)(2*(xy-zw)), (T)(1-2*(xx+zz)), (T)(2*(yz+xw)), - (T)(2*(xz+yw)), (T)(2*(yz-xw)), (T)(1-2*(xx+yy))); - } - - //@} - //----------------------------------- - // - //! \name Value Manipulation - //@{ - //----------------------------------- - - //! Fill all pixel values with specified value. - /** - \param val Fill value. - **/ - CImg& fill(const T val) { - if (is_empty()) return *this; - if (val && sizeof(T)!=1) cimg_for(*this,ptrd,T) *ptrd = val; - else std::memset(_data,(int)val,sizeof(T)*size()); - return *this; - } - - //! Fill all pixel values with specified value \newinstance. - CImg get_fill(const T val) const { - return CImg(_width,_height,_depth,_spectrum).fill(val); - } - - //! Fill sequentially all pixel values with specified values. - /** - \param val0 First fill value. - \param val1 Second fill value. - **/ - CImg& fill(const T val0, const T val1) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-1; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-2; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-3; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-4; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-5; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-6; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-7; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-8; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-9; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-10; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-11; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-12; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-13; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, - val13); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13, const T val14) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-14; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13, const T val14) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, - val13,val14); - } - - //! Fill sequentially all pixel values with specified values \overloading. - CImg& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13, const T val14, const T val15) { - if (is_empty()) return *this; - T *ptrd, *ptre = end()-15; - for (ptrd = _data; ptrd get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, - const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, - const T val13, const T val14, const T val15) const { - return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, - val13,val14,val15); - } - - //! Fill sequentially pixel values according to a given expression. - /** - \param expression C-string describing a math formula, or a list of values. - \param repeat_flag In case a list of values is provided, tells if this list must be repeated for the filling. - **/ - CImg& fill(const char *const expression, const bool repeat_flag) { - if (is_empty() || !expression || !*expression) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { // Try to fill values according to a formula. - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"fill"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) *(ptrd--) = (T)mp.eval((double)x,(double)y,(double)z,(double)c); - else cimg_forXYZC(*this,x,y,z,c) *(ptrd++) = (T)mp.eval((double)x,(double)y,(double)z,(double)c); - } catch (CImgException& e) { // If failed, try to recognize a list of values. - char item[16384] = { 0 }, sep = 0; - const char *nexpression = expression; - unsigned long nb = 0; - const unsigned long siz = size(); - T *ptrd = _data; - for (double val = 0; *nexpression && nb0 && std::sscanf(item,"%lf",&val)==1) { - nexpression+=std::strlen(item) + (err>1?1:0); - *(ptrd++) = (T)val; - } else break; - } - cimg::exception_mode() = omode; - if (nb get_fill(const char *const values, const bool repeat_values) const { - return (+*this).fill(values,repeat_values); - } - - //! Fill sequentially pixel values according to the values found in another image. - /** - \param values Image containing the values used for the filling. - \param repeat_values In case there are less values than necessary in \c values, tells if these values must be repeated for the filling. - **/ - template - CImg& fill(const CImg& values, const bool repeat_values=true) { - if (is_empty() || !values) return *this; - T *ptrd = _data, *ptre = ptrd + size(); - for (t *ptrs = values._data, *ptrs_end = ptrs + values.size(); ptrs - CImg get_fill(const CImg& values, const bool repeat_values=true) const { - return repeat_values?CImg(_width,_height,_depth,_spectrum).fill(values,repeat_values):(+*this).fill(values,repeat_values); - } - - //! Fill pixel values along the X-axis at a specified pixel position. - /** - \param y Y-coordinate of the filled column. - \param z Z-coordinate of the filled column. - \param c C-coordinate of the filled column. - \param a0 First fill value. - **/ - CImg& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const int a0, ...) { -#define _cimg_fill1(x,y,z,c,off,siz,t) { \ - va_list ap; va_start(ap,a0); T *ptrd = data(x,y,z,c); *ptrd = (T)a0; \ - for (unsigned long k = 1; k& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const double a0, ...) { - if (y<_height && z<_depth && c<_spectrum) _cimg_fill1(0,y,z,c,1,_width,double); - return *this; - } - - //! Fill pixel values along the Y-axis at a specified pixel position. - /** - \param x X-coordinate of the filled row. - \param z Z-coordinate of the filled row. - \param c C-coordinate of the filled row. - \param a0 First fill value. - **/ - CImg& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const int a0, ...) { - if (x<_width && z<_depth && c<_spectrum) _cimg_fill1(x,0,z,c,_width,_height,int); - return *this; - } - - //! Fill pixel values along the Y-axis at a specified pixel position \overloading. - CImg& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const double a0, ...) { - if (x<_width && z<_depth && c<_spectrum) _cimg_fill1(x,0,z,c,_width,_height,double); - return *this; - } - - //! Fill pixel values along the Z-axis at a specified pixel position. - /** - \param x X-coordinate of the filled slice. - \param y Y-coordinate of the filled slice. - \param c C-coordinate of the filled slice. - \param a0 First fill value. - **/ - CImg& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const int a0, ...) { - const unsigned long wh = (unsigned long)_width*_height; - if (x<_width && y<_height && c<_spectrum) _cimg_fill1(x,y,0,c,wh,_depth,int); - return *this; - } - - //! Fill pixel values along the Z-axis at a specified pixel position \overloading. - CImg& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const double a0, ...) { - const unsigned long wh = (unsigned long)_width*_height; - if (x<_width && y<_height && c<_spectrum) _cimg_fill1(x,y,0,c,wh,_depth,double); - return *this; - } - - //! Fill pixel values along the C-axis at a specified pixel position. - /** - \param x X-coordinate of the filled channel. - \param y Y-coordinate of the filled channel. - \param z Z-coordinate of the filled channel. - \param a0 First filling value. - **/ - CImg& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const int a0, ...) { - const unsigned long whd = (unsigned long)_width*_height*_depth; - if (x<_width && y<_height && z<_depth) _cimg_fill1(x,y,z,0,whd,_spectrum,int); - return *this; - } - - //! Fill pixel values along the C-axis at a specified pixel position \overloading. - CImg& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const double a0, ...) { - const unsigned long whd = (unsigned long)_width*_height*_depth; - if (x<_width && y<_height && z<_depth) _cimg_fill1(x,y,z,0,whd,_spectrum,double); - return *this; - } - - //! Discard specified value in the image buffer. - /** - \param value Value to discard. - \note Discarded values will change the image geometry, so the resulting image - is returned as a one-column vector. - **/ - CImg& discard(const T value) { - return get_discard(value).move_to(*this); - } - - //! Discard specified value in the image buffer \newinstance. - CImg get_discard(const T value) const { - CImg res(1,size()); - T *pd = res._data; - for (const T *ps = _data, *const pse = end(); ps(); - return res.resize(1,pd-res._data,1,1,-1); - } - - //! Discard specified sequence of values in the image buffer. - /** - \param values Sequence of values to discard. - \note Discarded values will change the image geometry, so the resulting image - is returned as a one-column vector. - **/ - template - CImg& discard(const CImg& values) { - return get_discard(values).move_to(*this); - } - - //! Discard specified sequence of values in the image buffer \newinstance. - template - CImg get_discard(const CImg& values) const { - if (!values) return *this; - if (values.size()==1) return get_discard(*values); - CImg res(1,size()); - T *pd = res._data; - const t *const pve = values.end(); - for (const T *ps = _data, *const pse = end(); ps(); - return res.resize(1,pd-res._data,1,1,-1); - } - - //! Invert endianness of all pixel values. - /** - **/ - CImg& invert_endianness() { - cimg::invert_endianness(_data,size()); - return *this; - } - - //! Invert endianness of all pixel values \newinstance. - CImg get_invert_endianness() const { - return (+*this).invert_endianness(); - } - - //! Fill image with random values in specified range. - /** - \param val_min Minimal random value. - \param val_max Maximal random value. - \note Random samples are following a uniform distribution. - **/ - CImg& rand(const T val_min, const T val_max) { - const float delta = (float)val_max - (float)val_min; - cimg_for(*this,ptrd,T) *ptrd = (T)(val_min + cimg::rand()*delta); - return *this; - } - - //! Fill image with random values in specified range \newinstance. - CImg get_rand(const T val_min, const T val_max) const { - return (+*this).rand(val_min,val_max); - } - - //! Round pixel values. - /** - \param y Rounding precision. - \param rounding_type Rounding type. Can be: - - \c -1: Backward. - - \c 0: Nearest. - - \c 1: Forward. - **/ - CImg& round(const double y=1, const int rounding_type=0) { - if (y>0) cimg_for(*this,ptrd,T) *ptrd = cimg::round(*ptrd,y,rounding_type); - return *this; - } - - //! Round pixel values \newinstance. - CImg get_round(const double y=1, const unsigned int rounding_type=0) const { - return (+*this).round(y,rounding_type); - } - - //! Add random noise to pixel values. - /** - \param sigma Amplitude of the random additive noise. If \p sigma<0, it stands for a percentage of the global value range. - \param noise_type Type of additive noise (can be \p 0=gaussian, \p 1=uniform, \p 2=Salt and Pepper, \p 3=Poisson or \p 4=Rician). - \return A reference to the modified image instance. - \note - - For Poisson noise (\p noise_type=3), parameter \p sigma is ignored, as Poisson noise only depends on the image value itself. - - Function \p CImg::get_noise() is also defined. It returns a non-shared modified copy of the image instance. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_noise(40); - (img,res.normalize(0,255)).display(); - \endcode - \image html ref_noise.jpg - **/ - CImg& noise(const double sigma, const unsigned int noise_type=0) { - if (!is_empty()) { - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; - if (nsigma==0 && noise_type!=3) return *this; - if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); - if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); - switch (noise_type) { - case 0 : { // Gaussian noise - cimg_for(*this,ptrd,T) { - Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); - if (val>vmax) val = vmax; - if (valvmax) val = vmax; - if (val::is_float()?1:cimg::type::max()); } - cimg_for(*this,ptrd,T) if (cimg::rand()*100vmax) val = vmax; - if (val get_noise(const double sigma, const unsigned int noise_type=0) const { - return (+*this).noise(sigma,noise_type); - } - - //! Linearly normalize pixel values. - /** - \param min_value Minimum desired value of the resulting image. - \param max_value Maximum desired value of the resulting image. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_normalize(160,220); - (img,res).display(); - \endcode - \image html ref_normalize2.jpg - **/ - CImg& normalize(const T min_value, const T max_value) { - if (is_empty()) return *this; - const T a = min_value get_normalize(const T min_value, const T max_value) const { - return CImg(*this,false).normalize((Tfloat)min_value,(Tfloat)max_value); - } - - //! Normalize multi-valued pixels of the image instance, with respect to their L2-norm. - /** - \par Example - \code - const CImg img("reference.jpg"), res = img.get_normalize(); - (img,res.normalize(0,255)).display(); - \endcode - \image html ref_normalize.jpg - **/ - CImg& normalize() { - T *ptrd = _data; - const unsigned long whd = (unsigned long)_width*_height*_depth; - cimg_forXYZ(*this,x,y,z) { - const T *ptrs = ptrd; - float n = 0; - cimg_forC(*this,c) { n+=cimg::sqr((float)*ptrs); ptrs+=whd; } - n = (float)std::sqrt(n); - T *_ptrd = ptrd++; - if (n>0) cimg_forC(*this,c) { *_ptrd = (T)(*_ptrd/n); _ptrd+=whd; } - else cimg_forC(*this,c) { *_ptrd = (T)0; _ptrd+=whd; } - } - return *this; - } - - //! Normalize multi-valued pixels of the image instance, with respect to their L2-norm \newinstance. - CImg get_normalize() const { - return CImg(*this,false).normalize(); - } - - //! Compute L2-norm of each multi-valued pixel of the image instance. - /** - \param norm_type Type of computed vector norm (can be \p 0=Linf, \p 1=L1 or \p 2=L2). - \par Example - \code - const CImg img("reference.jpg"), res = img.get_norm(); - (img,res.normalize(0,255)).display(); - \endcode - \image html ref_norm.jpg - **/ - CImg& norm(const int norm_type=2) { - if (_spectrum==1) return abs(); - return get_norm(norm_type).move_to(*this); - } - - //! Compute L2-norm of each multi-valued pixel of the image instance \newinstance. - CImg get_norm(const int norm_type=2) const { - if (is_empty()) return *this; - if (_spectrum==1) return get_abs(); - const T *ptrs = _data; - const unsigned long whd = (unsigned long)_width*_height*_depth; - CImg res(_width,_height,_depth); - Tfloat *ptrd = res._data; - switch (norm_type) { - case -1 : { // Linf norm - cimg_forXYZ(*this,x,y,z) { - Tfloat n = 0; - const T *_ptrs = ptrs++; - cimg_forC(*this,c) { const Tfloat val = (Tfloat)cimg::abs(*_ptrs); if (val>n) n = val; _ptrs+=whd; } - *(ptrd++) = n; - } - } break; - case 1 : { // L1 norm - cimg_forXYZ(*this,x,y,z) { - Tfloat n = 0; - const T *_ptrs = ptrs++; - cimg_forC(*this,c) { n+=cimg::abs(*_ptrs); _ptrs+=whd; } - *(ptrd++) = n; - } - } break; - default : { // L2 norm - cimg_forXYZ(*this,x,y,z) { - Tfloat n = 0; - const T *_ptrs = ptrs++; - cimg_forC(*this,c) { n+=cimg::sqr((Tfloat)*_ptrs); _ptrs+=whd; } - *(ptrd++) = (Tfloat)std::sqrt((Tfloat)n); - } - } - } - return res; - } - - //! Cut pixel values in specified range. - /** - \param min_value Minimum desired value of the resulting image. - \param max_value Maximum desired value of the resulting image. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_cut(160,220); - (img,res).display(); - \endcode - \image html ref_cut.jpg - **/ - CImg& cut(const T min_value, const T max_value) { - if (is_empty()) return *this; - const T a = min_valueb)?b:*ptrd); - return *this; - } - - //! Cut pixel values in specified range \newinstance. - CImg get_cut(const T min_value, const T max_value) const { - return (+*this).cut(min_value,max_value); - } - - //! Uniformly quantize pixel values. - /** - \param nb_levels Number of quantization levels. - \param keep_range Tells if resulting values keep the same range as the original ones. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_quantize(4); - (img,res).display(); - \endcode - \image html ref_quantize.jpg - **/ - CImg& quantize(const unsigned int nb_levels, const bool keep_range=true) { - if (!nb_levels) - throw CImgArgumentException(_cimg_instance - "quantize(): Invalid quantization request with 0 values.", - cimg_instance); - - if (is_empty()) return *this; - Tfloat m, M = (Tfloat)max_min(m), range = M - m; - if (range>0) { - if (keep_range) cimg_for(*this,ptrd,T) { - const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); - *ptrd = (T)(m + cimg::min(val,nb_levels-1)*range/nb_levels); - } else cimg_for(*this,ptrd,T) { - const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); - *ptrd = (T)cimg::min(val,nb_levels-1); - } - } - return *this; - } - - //! Uniformly quantize pixel values \newinstance. - CImg get_quantize(const unsigned int n, const bool keep_range=true) const { - return (+*this).quantize(n,keep_range); - } - - //! Threshold pixel values. - /** - \param value Threshold value - \param soft_threshold Tells if soft thresholding must be applied (instead of hard one). - \param strict_threshold Tells if threshold value is strict. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_threshold(128); - (img,res.normalize(0,255)).display(); - \endcode - \image html ref_threshold.jpg - **/ - CImg& threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) { - if (is_empty()) return *this; - if (strict_threshold) { - if (soft_threshold) cimg_for(*this,ptrd,T) { const T v = *ptrd; *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v+value):(T)0; } - else cimg_for(*this,ptrd,T) *ptrd = *ptrd>value?(T)1:(T)0; - } else { - if (soft_threshold) cimg_for(*this,ptrd,T) { const T v = *ptrd; *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v+value):(T)0; } - else cimg_for(*this,ptrd,T) *ptrd = *ptrd>=value?(T)1:(T)0; - } - return *this; - } - - //! Threshold pixel values \newinstance. - CImg get_threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) const { - return (+*this).threshold(value,soft_threshold,strict_threshold); - } - - //! Compute the histogram of pixel values. - /** - \param nb_levels Number of desired histogram levels. - \param min_value Minimum pixel value considered for the histogram computation. All pixel values lower than \p min_value will not be counted. - \param max_value Maximum pixel value considered for the histogram computation. All pixel values higher than \p max_value will not be counted. - \note - - The histogram H of an image I is the 1d function where H(x) counts the number of occurences of the value x in the image I. - - If \p min_value==max_value==0 (default behavior), the function first estimates the whole range of pixel values - then uses it to compute the histogram. - - The resulting histogram is always defined in 1d. Histograms of multi-valued images are not multi-dimensional. - \par Example - \code - const CImg img = CImg("reference.jpg").histogram(256); - img.display_graph(0,3); - \endcode - \image html ref_histogram.jpg - **/ - CImg& histogram(const unsigned int nb_levels, const T min_value=(T)0, const T max_value=(T)0) { - return get_histogram(nb_levels,min_value,max_value).move_to(*this); - } - - //! Compute the histogram of pixel values \newinstance. - CImg get_histogram(const unsigned int nb_levels, const T min_value=(T)0, const T max_value=(T)0) const { - if (!nb_levels || is_empty()) return CImg(); - T vmin = min_value res(nb_levels,1,1,1,0); - cimg_for(*this,ptrs,T) { - const T val = *ptrs; - if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels-1:(unsigned int)((val-vmin)*nb_levels/(vmax-vmin))]; - } - return res; - } - - //! Equalize histogram of pixel values. - /** - \param nb_levels Number of histogram levels used for the equalization. - \param min_value Minimum pixel value considered for the histogram computation. All pixel values lower than \p min_value will not be counted. - \param max_value Maximum pixel value considered for the histogram computation. All pixel values higher than \p max_value will not be counted. - \note - - If \p min_value==max_value==0 (default behavior), the function first estimates the whole range of pixel values - then uses it to equalize the histogram. - \par Example - \code - const CImg img("reference.jpg"), res = img.get_equalize(256); - (img,res).display(); - \endcode - \image html ref_equalize.jpg - **/ - CImg& equalize(const unsigned int nb_levels, const T min_value=(T)0, const T max_value=(T)0) { - if (is_empty()) return *this; - T vmin = min_value, vmax = max_value; - if (vmin==vmax && vmin==0) vmin = min_max(vmax); - if (vmin hist = get_histogram(nb_levels,vmin,vmax); - unsigned long cumul = 0; - cimg_forX(hist,pos) { cumul+=hist[pos]; hist[pos] = cumul; } - cimg_for(*this,ptrd,T) { - const int pos = (int)((*ptrd-vmin)*(nb_levels-1)/(vmax-vmin)); - if (pos>=0 && pos<(int)nb_levels) *ptrd = (T)(vmin + (vmax-vmin)*hist[pos]/size()); - } - } - return *this; - } - - //! Equalize histogram of pixel values \newinstance. - CImg get_equalize(const unsigned int nblevels, const T val_min=(T)0, const T val_max=(T)0) const { - return (+*this).equalize(nblevels,val_min,val_max); - } - - //! Index multi-valued pixels regarding to a specified colormap. - /** - \param colormap Multi-valued colormap used as the basis for multi-valued pixel indexing. - \param dithering Level of dithering (0=disable, 1=standard level). - \param map_indexes Tell if the values of the resulting image are the colormap indices or the colormap vectors. - \note - - \p img.index(colormap,dithering,1) is equivalent to img.index(colormap,dithering,0).map(colormap). - \par Example - \code - const CImg img("reference.jpg"), colormap(3,1,1,3, 0,128,255, 0,128,255, 0,128,255); - const CImg res = img.get_index(colormap,1,true); - (img,res).display(); - \endcode - \image html ref_index.jpg - **/ - template - CImg& index(const CImg& colormap, const float dithering=1, const bool map_indexes=false) { - return get_index(colormap,dithering,map_indexes).move_to(*this); - } - - //! Index multi-valued pixels regarding to a specified colormap \newinstance. - template - CImg::Tuint> - get_index(const CImg& colormap, const float dithering=1, const bool map_indexes=true) const { - if (colormap._spectrum!=_spectrum) - throw CImgArgumentException(_cimg_instance - "index(): Instance and specified colormap (%u,%u,%u,%u,%p) " - "have incompatible dimensions.", - cimg_instance, - colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); - - typedef typename CImg::Tuint tuint; - if (is_empty()) return CImg(); - const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; - CImg res(_width,_height,_depth,map_indexes?_spectrum:1); - tuint *ptrd = res._data; - if (dithering>0) { // Dithered versions. - const float ndithering = (dithering<0?0:dithering>1?1:dithering)/16; - Tfloat valm = 0, valM = (Tfloat)max_min(valm); - if (valm==valM && valm>=0 && valM<=255) { valm = 0; valM = 255; } - CImg cache = get_crop(-1,0,0,0,_width,1,0,_spectrum-1); - Tfloat *cache_current = cache.data(1,0,0,0), *cache_next = cache.data(1,1,0,0); - const unsigned long cwhd = (unsigned long)cache._width*cache._height*cache._depth; - switch (_spectrum) { - case 1 : { // Optimized for scalars. - cimg_forYZ(*this,y,z) { - if (yvalM?valM:_val0; - Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0valM?valM:_val0, - _val1 = (Tfloat)*ptrs1, val1 = _val1valM?valM:_val1; - Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0valM?valM:_val0, - _val1 = (Tfloat)*ptrs1, val1 = _val1valM?valM:_val1, - _val2 = (Tfloat)*ptrs2, val2 = _val2valM?valM:_val2; - Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0::max(); const t *ptrmin = colormap._data; - for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrpvalM?valM:_val; - dist+=cimg::sqr((*_ptrs=val) - (Tfloat)*_ptrp); _ptrs+=cwhd; _ptrp+=pwhd; - } - if (dist::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0::max(); const t *ptrmin0 = colormap._data; - for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0::max(); const t *ptrmin = colormap._data; - for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp img("reference.jpg"), - colormap1(3,1,1,3, 0,128,255, 0,128,255, 0,128,255), - colormap2(3,1,1,3, 255,0,0, 0,255,0, 0,0,255), - res = img.get_index(colormap1,0).map(colormap2); - (img,res).display(); - \endcode - \image html ref_map.jpg - **/ - template - CImg& map(const CImg& colormap) { - return get_map(colormap).move_to(*this); - } - - //! Map predefined colormap on the scalar (indexed) image instance \newinstance. - template - CImg get_map(const CImg& colormap) const { - if (_spectrum!=1 && colormap._spectrum!=1) - throw CImgArgumentException(_cimg_instance - "map(): Instance and specified colormap (%u,%u,%u,%u,%p) " - "have incompatible dimensions.", - cimg_instance, - colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); - - const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; - CImg res(_width,_height,_depth,colormap._spectrum==1?_spectrum:colormap._spectrum); - switch (colormap._spectrum) { - case 1 : { // Optimized for scalars. - const T *ptrs = _data; - cimg_for(res,ptrd,t) { - const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind& label(const bool is_high_connectivity=false, const Tfloat tolerance=0) { - return get_label(is_high_connectivity,tolerance).move_to(*this); - } - - //! Label connected components \newinstance. - CImg get_label(const bool is_high_connectivity=false, - const Tfloat tolerance=0) const { - if (is_empty()) return CImg(); - - // Create neighborhood tables. - int dx[13], dy[13], dz[13], nb = 0; - dx[nb]=1; dy[nb] = 0; dz[nb++]=0; - dx[nb]=0; dy[nb] = 1; dz[nb++]=0; - if (is_high_connectivity) { - dx[nb]=1; dy[nb] = 1; dz[nb++]=0; - dx[nb]=1; dy[nb] = -1; dz[nb++]=0; - } - if (_depth>1) { // 3d version. - dx[nb]=0; dy[nb] = 0; dz[nb++]=1; - if (is_high_connectivity) { - dx[nb]=1; dy[nb] = 1; dz[nb++]=-1; - dx[nb]=1; dy[nb] = 0; dz[nb++]=-1; - dx[nb]=1; dy[nb] = -1; dz[nb++]=-1; - dx[nb]=0; dy[nb] = 1; dz[nb++]=-1; - - dx[nb]=0; dy[nb] = 1; dz[nb++]=1; - dx[nb]=1; dy[nb] = -1; dz[nb++]=1; - dx[nb]=1; dy[nb] = 0; dz[nb++]=1; - dx[nb]=1; dy[nb] = 1; dz[nb++]=1; - } - } - return _get_label(nb,dx,dy,dz,tolerance); - } - - //! Label connected components \overloading. - /** - \param connectivity_mask Mask of the neighboring pixels. - \param tolerance Tolerance used to determine if two neighboring pixels belong to the same region. - **/ - template - CImg& label(const CImg& connectivity_mask, const Tfloat tolerance=0) { - return get_label(connectivity_mask,tolerance).move_to(*this); - } - - //! Label connected components \newinstance. - template - CImg get_label(const CImg& connectivity_mask, - const Tfloat tolerance=0) const { - int nb = 0; - cimg_for(connectivity_mask,ptr,t) if (*ptr) ++nb; - CImg dx(nb,1,1,1,0), dy(nb,1,1,1,0), dz(nb,1,1,1,0); - nb = 0; - cimg_forXYZ(connectivity_mask,x,y,z) if ((x || y || z) && - connectivity_mask(x,y,z)) { - dx[nb] = x; dy[nb] = y; dz[nb++] = z; - } - return _get_label(nb,dx,dy,dz,tolerance); - } - - CImg _get_label(const unsigned int nb, const int - *const dx, const int *const dy, const int *const dz, - const Tfloat tolerance) const { - CImg res(_width,_height,_depth,_spectrum); - cimg_forC(*this,c) { - CImg _res = res.get_shared_channel(c); - - // Init label numbers. - unsigned long *ptr = _res.data(); - cimg_foroff(_res,p) *(ptr++) = p; - - // For each neighbour-direction, label. - for (unsigned int n = 0; n& _system_strescape() { -#define cimg_system_strescape(c,s) case c : if (p!=ptrs) CImg(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); \ - CImg(s,(unsigned int)std::strlen(s),1,1,1,false).move_to(list); ptrs = p+1; break - CImgList list; - const T *ptrs = _data; - cimg_for(*this,p,T) switch ((int)*p) { - cimg_system_strescape('\\',"\\\\"); - cimg_system_strescape('\"',"\\\""); - cimg_system_strescape('!',"\"\\!\""); - cimg_system_strescape('`',"\\`"); - cimg_system_strescape('$',"\\$"); - } - if (ptrs(ptrs,(unsigned int)(end()-ptrs),1,1,1,false).move_to(list); - return (list>'x').move_to(*this); - } - - //@} - //--------------------------------- - // - //! \name Color Base Management - //@{ - //--------------------------------- - - //! Return colormap \e "default", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_default.jpg - **/ - static const CImg& default_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - colormap.assign(1,256,1,3); - for (unsigned int index = 0, r = 16; r<256; r+=32) - for (unsigned int g = 16; g<256; g+=32) - for (unsigned int b = 32; b<256; b+=64) { - colormap(0,index,0) = (Tuchar)r; - colormap(0,index,1) = (Tuchar)g; - colormap(0,index++,2) = (Tuchar)b; - } - } - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "HSV", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_hsv.jpg - **/ - static const CImg& HSV_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - CImg tmp(1,256,1,3,1); - tmp.get_shared_channel(0).sequence(0,359); - colormap = tmp.HSVtoRGB(); - } - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "lines", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_lines.jpg - **/ - static const CImg& lines_LUT256() { - static const unsigned char pal[] = { - 217,62,88,75,1,237,240,12,56,160,165,116,1,1,204,2,15,248,148,185,133,141,46,246,222,116,16,5,207,226, - 17,114,247,1,214,53,238,0,95,55,233,235,109,0,17,54,33,0,90,30,3,0,94,27,19,0,68,212,166,130,0,15,7,119, - 238,2,246,198,0,3,16,10,13,2,25,28,12,6,2,99,18,141,30,4,3,140,12,4,30,233,7,10,0,136,35,160,168,184,20, - 233,0,1,242,83,90,56,180,44,41,0,6,19,207,5,31,214,4,35,153,180,75,21,76,16,202,218,22,17,2,136,71,74, - 81,251,244,148,222,17,0,234,24,0,200,16,239,15,225,102,230,186,58,230,110,12,0,7,129,249,22,241,37,219, - 1,3,254,210,3,212,113,131,197,162,123,252,90,96,209,60,0,17,0,180,249,12,112,165,43,27,229,77,40,195,12, - 87,1,210,148,47,80,5,9,1,137,2,40,57,205,244,40,8,252,98,0,40,43,206,31,187,0,180,1,69,70,227,131,108,0, - 223,94,228,35,248,243,4,16,0,34,24,2,9,35,73,91,12,199,51,1,249,12,103,131,20,224,2,70,32, - 233,1,165,3,8,154,246,233,196,5,0,6,183,227,247,195,208,36,0,0,226,160,210,198,69,153,210,1,23,8,192,2,4, - 137,1,0,52,2,249,241,129,0,0,234,7,238,71,7,32,15,157,157,252,158,2,250,6,13,30,11,162,0,199,21,11,27,224, - 4,157,20,181,111,187,218,3,0,11,158,230,196,34,223,22,248,135,254,210,157,219,0,117,239,3,255,4,227,5,247, - 11,4,3,188,111,11,105,195,2,0,14,1,21,219,192,0,183,191,113,241,1,12,17,248,0,48,7,19,1,254,212,0,239,246, - 0,23,0,250,165,194,194,17,3,253,0,24,6,0,141,167,221,24,212,2,235,243,0,0,205,1,251,133,204,28,4,6,1,10, - 141,21,74,12,236,254,228,19,1,0,214,1,186,13,13,6,13,16,27,209,6,216,11,207,251,59,32,9,155,23,19,235,143, - 116,6,213,6,75,159,23,6,0,228,4,10,245,249,1,7,44,234,4,102,174,0,19,239,103,16,15,18,8,214,22,4,47,244, - 255,8,0,251,173,1,212,252,250,251,252,6,0,29,29,222,233,246,5,149,0,182,180,13,151,0,203,183,0,35,149,0, - 235,246,254,78,9,17,203,73,11,195,0,3,5,44,0,0,237,5,106,6,130,16,214,20,168,247,168,4,207,11,5,1,232,251, - 129,210,116,231,217,223,214,27,45,38,4,177,186,249,7,215,172,16,214,27,249,230,236,2,34,216,217,0,175,30, - 243,225,244,182,20,212,2,226,21,255,20,0,2,13,62,13,191,14,76,64,20,121,4,118,0,216,1,147,0,2,210,1,215, - 95,210,236,225,184,46,0,248,24,11,1,9,141,250,243,9,221,233,160,11,147,2,55,8,23,12,253,9,0,54,0,231,6,3, - 141,8,2,246,9,180,5,11,8,227,8,43,110,242,1,130,5,97,36,10,6,219,86,133,11,108,6,1,5,244,67,19,28,0,174, - 154,16,127,149,252,188,196,196,228,244,9,249,0,0,0,37,170,32,250,0,73,255,23,3,224,234,38,195,198,0,255,87, - 33,221,174,31,3,0,189,228,6,153,14,144,14,108,197,0,9,206,245,254,3,16,253,178,248,0,95,125,8,0,3,168,21, - 23,168,19,50,240,244,185,0,1,144,10,168,31,82,1,13 }; - static const CImg colormap(pal,1,256,1,3,false); - return colormap; - } - - //! Return colormap \e "hot", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_hot.jpg - **/ - static const CImg& hot_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - colormap.assign(1,4,1,3,0); - colormap[1] = colormap[2] = colormap[3] = colormap[6] = colormap[7] = colormap[11] = 255; - colormap.resize(1,256,1,3,3); - } - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "cool", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_cool.jpg - **/ - static const CImg& cool_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) colormap.assign(1,2,1,3).fill(0,255,255,0,255,255).resize(1,256,1,3,3); - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "jet", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_jet.jpg - **/ - static const CImg& jet_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - colormap.assign(1,4,1,3,0); - colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255; - colormap.resize(1,256,1,3,3); - } - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "flag", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_flag.jpg - **/ - static const CImg& flag_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - colormap.assign(1,4,1,3,0); - colormap[0] = colormap[1] = colormap[5] = colormap[9] = colormap[10] = 255; - colormap.resize(1,256,1,3,0,2); - } - cimg::mutex(8,0); - return colormap; - } - - //! Return colormap \e "cube", containing 256 colors entries in RGB. - /** - \return The following \c 256x1x1x3 colormap is returned: - \image html ref_colormap_cube.jpg - **/ - static const CImg& cube_LUT256() { - static CImg colormap; - cimg::mutex(8); - if (!colormap) { - colormap.assign(1,8,1,3,0); - colormap[1] = colormap[3] = colormap[5] = colormap[7] = - colormap[10] = colormap[11] = colormap[12] = colormap[13] = - colormap[20] = colormap[21] = colormap[22] = colormap[23] = 255; - colormap.resize(1,256,1,3,3); - } - cimg::mutex(8,0); - return colormap; - } - - //! Convert pixel values from sRGB to RGB color spaces. - CImg& sRGBtoRGB() { - cimg_for(*this,ptr,T) { - const Tfloat - sval = (Tfloat)*ptr, - nsval = (sval<0?0:sval>255?255:sval)/255, - val = (Tfloat)(nsval<=0.04045f?nsval/12.92f:std::pow((nsval+0.055f)/(1.055f),2.4f)); - *ptr = (T)(val*255); - } - return *this; - } - - //! Convert pixel values from sRGB to RGB color spaces \newinstance. - CImg get_sRGBtoRGB() const { - return CImg(*this,false).sRGBtoRGB(); - } - - //! Convert pixel values from RGB to sRGB color spaces. - CImg& RGBtosRGB() { - cimg_for(*this,ptr,T) { - const Tfloat - val = (Tfloat)*ptr, - nval = (val<0?0:val>255?255:val)/255, - sval = (Tfloat)(nval<=0.0031308f?nval*12.92f:1.055f*std::pow(nval,0.416667f)-0.055f); - *ptr = (T)(sval*255); - } - return *this; - } - - //! Convert pixel values from RGB to sRGB color spaces \newinstance. - CImg get_RGBtosRGB() const { - return CImg(*this,false).RGBtosRGB(); - } - - //! Convert pixel values from RGB to HSV color spaces. - CImg& RGBtoHSV() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoHSV(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1, - G = (Tfloat)*p2, - B = (Tfloat)*p3, - nR = (R<0?0:(R>255?255:R))/255, - nG = (G<0?0:(G>255?255:G))/255, - nB = (B<0?0:(B>255?255:B))/255, - m = cimg::min(nR,nG,nB), - M = cimg::max(nR,nG,nB); - Tfloat H = 0, S = 0; - if (M!=m) { - const Tfloat - f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), - i = (Tfloat)((nR==m)?3:((nG==m)?5:1)); - H = (i-f/(M-m)); - if (H>=6) H-=6; - H*=60; - S = (M-m)/M; - } - *(p1++) = (T)H; - *(p2++) = (T)S; - *(p3++) = (T)M; - } - return *this; - } - - //! Convert pixel values from RGB to HSV color spaces \newinstance. - CImg get_RGBtoHSV() const { - return CImg(*this,false).RGBtoHSV(); - } - - //! Convert pixel values from HSV to RGB color spaces. - CImg& HSVtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "HSVtoRGB(): Instance is not a HSV image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - Tfloat - H = (Tfloat)*p1, - S = (Tfloat)*p2, - V = (Tfloat)*p3, - R = 0, G = 0, B = 0; - if (H==0 && S==0) R = G = B = V; - else { - H/=60; - const int i = (int)std::floor(H); - const Tfloat - f = (i&1)?(H - i):(1 - H + i), - m = V*(1 - S), - n = V*(1 - S*f); - switch (i) { - case 6 : - case 0 : R = V; G = n; B = m; break; - case 1 : R = n; G = V; B = m; break; - case 2 : R = m; G = V; B = n; break; - case 3 : R = m; G = n; B = V; break; - case 4 : R = n; G = m; B = V; break; - case 5 : R = V; G = m; B = n; break; - } - } - R*=255; G*=255; B*=255; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from HSV to RGB color spaces \newinstance. - CImg get_HSVtoRGB() const { - return CImg(*this,false).HSVtoRGB(); - } - - //! Convert pixel values from RGB to HSL color spaces. - CImg& RGBtoHSL() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoHSL(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1, - G = (Tfloat)*p2, - B = (Tfloat)*p3, - nR = (R<0?0:(R>255?255:R))/255, - nG = (G<0?0:(G>255?255:G))/255, - nB = (B<0?0:(B>255?255:B))/255, - m = cimg::min(nR,nG,nB), - M = cimg::max(nR,nG,nB), - L = (m + M)/2; - Tfloat H = 0, S = 0; - if (M==m) H = S = 0; - else { - const Tfloat - f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), - i = (nR==m)?3.0f:((nG==m)?5.0f:1.0f); - H = (i-f/(M-m)); - if (H>=6) H-=6; - H*=60; - S = (2*L<=1)?((M-m)/(M+m)):((M-m)/(2-M-m)); - } - *(p1++) = (T)H; - *(p2++) = (T)S; - *(p3++) = (T)L; - } - return *this; - } - - //! Convert pixel values from RGB to HSL color spaces \newinstance. - CImg get_RGBtoHSL() const { - return CImg< Tfloat>(*this,false).RGBtoHSL(); - } - - //! Convert pixel values from HSL to RGB color spaces. - CImg& HSLtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "HSLtoRGB(): Instance is not a HSL image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - H = (Tfloat)*p1, - S = (Tfloat)*p2, - L = (Tfloat)*p3, - q = 2*L<1?L*(1+S):(L+S-L*S), - p = 2*L-q, - h = H/360, - tr = h + 1.0f/3, - tg = h, - tb = h - 1.0f/3, - ntr = tr<0?tr+1:(tr>1?tr-1:tr), - ntg = tg<0?tg+1:(tg>1?tg-1:tg), - ntb = tb<0?tb+1:(tb>1?tb-1:tb), - R = 255*(6*ntr<1?p+(q-p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p+(q-p)*6*(2.0f/3-ntr):p))), - G = 255*(6*ntg<1?p+(q-p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p+(q-p)*6*(2.0f/3-ntg):p))), - B = 255*(6*ntb<1?p+(q-p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p+(q-p)*6*(2.0f/3-ntb):p))); - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from HSL to RGB color spaces \newinstance. - CImg get_HSLtoRGB() const { - return CImg(*this,false).HSLtoRGB(); - } - - //! Convert pixel values from RGB to HSI color spaces. - CImg& RGBtoHSI() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoHSI(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1, - G = (Tfloat)*p2, - B = (Tfloat)*p3, - nR = (R<0?0:(R>255?255:R))/255, - nG = (G<0?0:(G>255?255:G))/255, - nB = (B<0?0:(B>255?255:B))/255, - m = cimg::min(nR,nG,nB), - theta = (Tfloat)(std::acos(0.5f*((nR-nG)+(nR-nB))/std::sqrt(std::pow(nR-nG,2)+(nR-nB)*(nG-nB)))*180/cimg::PI), - sum = nR + nG + nB; - Tfloat H = 0, S = 0, I = 0; - if (theta>0) H = (nB<=nG)?theta:360-theta; - if (sum>0) S = 1 - 3/sum*m; - I = sum/3; - *(p1++) = (T)H; - *(p2++) = (T)S; - *(p3++) = (T)I; - } - return *this; - } - - //! Convert pixel values from RGB to HSI color spaces \newinstance. - CImg get_RGBtoHSI() const { - return CImg(*this,false).RGBtoHSI(); - } - - //! Convert pixel values from HSI to RGB color spaces. - CImg& HSItoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "HSItoRGB(): Instance is not a HSI image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - Tfloat - H = (Tfloat)*p1, - S = (Tfloat)*p2, - I = (Tfloat)*p3, - a = I*(1-S), - R = 0, G = 0, B = 0; - if (H<120) { - B = a; - R = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - G = 3*I-(R+B); - } else if (H<240) { - H-=120; - R = a; - G = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - B = 3*I-(R+G); - } else { - H-=240; - G = a; - B = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - R = 3*I-(G+B); - } - R*=255; G*=255; B*=255; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from HSI to RGB color spaces \newinstance. - CImg get_HSItoRGB() const { - return CImg< Tuchar>(*this,false).HSItoRGB(); - } - - //! Convert pixel values from RGB to YCbCr color spaces. - CImg& RGBtoYCbCr() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoYCbCr(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1, - G = (Tfloat)*p2, - B = (Tfloat)*p3, - Y = (66*R + 129*G + 25*B + 128)/256 + 16, - Cb = (-38*R - 74*G + 112*B + 128)/256 + 128, - Cr = (112*R - 94*G - 18*B + 128)/256 + 128; - *(p1++) = (T)(Y<0?0:(Y>255?255:Y)); - *(p2++) = (T)(Cb<0?0:(Cb>255?255:Cb)); - *(p3++) = (T)(Cr<0?0:(Cr>255?255:Cr)); - } - return *this; - } - - //! Convert pixel values from RGB to YCbCr color spaces \newinstance. - CImg get_RGBtoYCbCr() const { - return CImg(*this,false).RGBtoYCbCr(); - } - - //! Convert pixel values from RGB to YCbCr color spaces. - CImg& YCbCrtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "YCbCrtoRGB(): Instance is not a YCbCr image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - Y = (Tfloat)*p1 - 16, - Cb = (Tfloat)*p2 - 128, - Cr = (Tfloat)*p3 - 128, - R = (298*Y + 409*Cr + 128)/256, - G = (298*Y - 100*Cb - 208*Cr + 128)/256, - B = (298*Y + 516*Cb + 128)/256; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from RGB to YCbCr color spaces \newinstance. - CImg get_YCbCrtoRGB() const { - return CImg(*this,false).YCbCrtoRGB(); - } - - //! Convert pixel values from RGB to YUV color spaces. - CImg& RGBtoYUV() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoYUV(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1/255, - G = (Tfloat)*p2/255, - B = (Tfloat)*p3/255, - Y = 0.299f*R + 0.587f*G + 0.114f*B; - *(p1++) = (T)Y; - *(p2++) = (T)(0.492f*(B-Y)); - *(p3++) = (T)(0.877*(R-Y)); - } - return *this; - } - - //! Convert pixel values from RGB to YUV color spaces \newinstance. - CImg get_RGBtoYUV() const { - return CImg(*this,false).RGBtoYUV(); - } - - //! Convert pixel values from YUV to RGB color spaces. - CImg& YUVtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "YUVtoRGB(): Instance is not a YUV image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - Y = (Tfloat)*p1, - U = (Tfloat)*p2, - V = (Tfloat)*p3, - R = (Y + 1.140f*V)*255, - G = (Y - 0.395f*U - 0.581f*V)*255, - B = (Y + 2.032f*U)*255; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from YUV to RGB color spaces \newinstance. - CImg get_YUVtoRGB() const { - return CImg< Tuchar>(*this,false).YUVtoRGB(); - } - - //! Convert pixel values from RGB to CMY color spaces. - CImg& RGBtoCMY() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoCMY(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1, - G = (Tfloat)*p2, - B = (Tfloat)*p3, - C = 255 - R, - M = 255 - G, - Y = 255 - B; - *(p1++) = (T)(C<0?0:(C>255?255:C)); - *(p2++) = (T)(M<0?0:(M>255?255:M)); - *(p3++) = (T)(Y<0?0:(Y>255?255:Y)); - } - return *this; - } - - //! Convert pixel values from RGB to CMY color spaces \newinstance. - CImg get_RGBtoCMY() const { - return CImg(*this,false).RGBtoCMY(); - } - - //! Convert pixel values from CMY to RGB color spaces. - CImg& CMYtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "CMYtoRGB(): Instance is not a CMY image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - C = (Tfloat)*p1, - M = (Tfloat)*p2, - Y = (Tfloat)*p3, - R = 255 - C, - G = 255 - M, - B = 255 - Y; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from CMY to RGB color spaces \newinstance. - CImg get_CMYtoRGB() const { - return CImg(*this,false).CMYtoRGB(); - } - - //! Convert pixel values from CMY to CMYK color spaces. - CImg& CMYtoCMYK() { - return get_CMYtoCMYK().move_to(*this); - } - - //! Convert pixel values from CMY to CMYK color spaces \newinstance. - CImg get_CMYtoCMYK() const { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "CMYtoCMYK(): Instance is not a CMY image.", - cimg_instance); - - CImg res(_width,_height,_depth,4); - const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2); - Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2), *pd4 = res.data(0,0,0,3); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - Tfloat - C = (Tfloat)*(ps1++), - M = (Tfloat)*(ps2++), - Y = (Tfloat)*(ps3++), - K = cimg::min(C,M,Y); - if (K>=255) C = M = Y = 0; - else { const Tfloat K1 = 255 - K; C = 255*(C - K)/K1; M = 255*(M - K)/K1; Y = 255*(Y - K)/K1; } - *(pd1++) = (Tfloat)(C<0?0:(C>255?255:C)); - *(pd2++) = (Tfloat)(M<0?0:(M>255?255:M)); - *(pd3++) = (Tfloat)(Y<0?0:(Y>255?255:Y)); - *(pd4++) = (Tfloat)(K<0?0:(K>255?255:K)); - } - return res; - } - - //! Convert pixel values from CMYK to CMY color spaces. - CImg& CMYKtoCMY() { - return get_CMYKtoCMY().move_to(*this); - } - - //! Convert pixel values from CMYK to CMY color spaces \newinstance. - CImg get_CMYKtoCMY() const { - if (_spectrum!=4) - throw CImgInstanceException(_cimg_instance - "CMYKtoCMY(): Instance is not a CMYK image.", - cimg_instance); - - CImg res(_width,_height,_depth,3); - const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2), *ps4 = data(0,0,0,3); - Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - C = (Tfloat)*(ps1++), - M = (Tfloat)*(ps2++), - Y = (Tfloat)*(ps3++), - K = (Tfloat)*(ps4++), - K1 = 1 - K/255, - nC = C*K1 + K, - nM = M*K1 + K, - nY = Y*K1 + K; - *(pd1++) = (Tfloat)(nC<0?0:(nC>255?255:nC)); - *(pd2++) = (Tfloat)(nM<0?0:(nM>255?255:nM)); - *(pd3++) = (Tfloat)(nY<0?0:(nY>255?255:nY)); - } - return res; - } - - //! Convert pixel values from RGB to XYZ_709 color spaces. - /** - \note Uses the standard D65 white point. - **/ - CImg& RGBtoXYZ() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoXYZ(): Instance is not a RGB image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - R = (Tfloat)*p1/255, - G = (Tfloat)*p2/255, - B = (Tfloat)*p3/255; - *(p1++) = (T)(0.412453f*R + 0.357580f*G + 0.180423f*B); - *(p2++) = (T)(0.212671f*R + 0.715160f*G + 0.072169f*B); - *(p3++) = (T)(0.019334f*R + 0.119193f*G + 0.950227f*B); - } - return *this; - } - - //! Convert pixel values from RGB to XYZ_709 color spaces \newinstance. - CImg get_RGBtoXYZ() const { - return CImg(*this,false).RGBtoXYZ(); - } - - //! Convert pixel values from XYZ_709 to RGB color spaces. - CImg& XYZtoRGB() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "XYZtoRGB(): Instance is not a XYZ image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - X = (Tfloat)*p1*255, - Y = (Tfloat)*p2*255, - Z = (Tfloat)*p3*255, - R = 3.240479f*X - 1.537150f*Y - 0.498535f*Z, - G = -0.969256f*X + 1.875992f*Y + 0.041556f*Z, - B = 0.055648f*X - 0.204043f*Y + 1.057311f*Z; - *(p1++) = (T)(R<0?0:(R>255?255:R)); - *(p2++) = (T)(G<0?0:(G>255?255:G)); - *(p3++) = (T)(B<0?0:(B>255?255:B)); - } - return *this; - } - - //! Convert pixel values from XYZ_709 to RGB color spaces \newinstance. - CImg get_XYZtoRGB() const { - return CImg(*this,false).XYZtoRGB(); - } - - //! Convert pixel values from XYZ_709 to Lab color spaces. - CImg& XYZtoLab() { -#define _cimg_Labf(x) ((x)>=0.008856f?(std::pow(x,(Tfloat)1/3)):(7.787f*(x)+16.0f/116)) - - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "XYZtoLab(): Instance is not a XYZ image.", - cimg_instance); - - const Tfloat - Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), - Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), - Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - X = (Tfloat)*p1, - Y = (Tfloat)*p2, - Z = (Tfloat)*p3, - XXn = X/Xn, YYn = Y/Yn, ZZn = Z/Zn, - fX = (Tfloat)_cimg_Labf(XXn), - fY = (Tfloat)_cimg_Labf(YYn), - fZ = (Tfloat)_cimg_Labf(ZZn); - *(p1++) = (T)cimg::max(0.0f,116*fY - 16); - *(p2++) = (T)(500*(fX - fY)); - *(p3++) = (T)(200*(fY - fZ)); - } - return *this; - } - - //! Convert pixel values from XYZ_709 to Lab color spaces \newinstance. - CImg get_XYZtoLab() const { - return CImg(*this,false).XYZtoLab(); - } - - //! Convert pixel values from Lab to XYZ_709 color spaces. - CImg& LabtoXYZ() { -#define _cimg_Labfi(x) ((x)>=0.206893f?((x)*(x)*(x)):(((x)-16.0f/116)/7.787f)) - - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "LabtoXYZ(): Instance is not a Lab image.", - cimg_instance); - - const Tfloat - Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), - Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), - Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - L = (Tfloat)*p1, - a = (Tfloat)*p2, - b = (Tfloat)*p3, - cY = (L + 16)/116, - Y = (Tfloat)(Yn*_cimg_Labfi(cY)), - pY = (Tfloat)std::pow(Y/Yn,(Tfloat)1/3), - cX = a/500 + pY, - X = Xn*cX*cX*cX, - cZ = pY - b/200, - Z = Zn*cZ*cZ*cZ; - *(p1++) = (T)(X); - *(p2++) = (T)(Y); - *(p3++) = (T)(Z); - } - return *this; - } - - //! Convert pixel values from Lab to XYZ_709 color spaces \newinstance. - CImg get_LabtoXYZ() const { - return CImg(*this,false).LabtoXYZ(); - } - - //! Convert pixel values from XYZ_709 to xyY color spaces. - CImg& XYZtoxyY() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "XYZtoxyY(): Instance is not a XYZ image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - X = (Tfloat)*p1, - Y = (Tfloat)*p2, - Z = (Tfloat)*p3, - sum = (X+Y+Z), - nsum = sum>0?sum:1; - *(p1++) = (T)(X/nsum); - *(p2++) = (T)(Y/nsum); - *(p3++) = (T)Y; - } - return *this; - } - - //! Convert pixel values from XYZ_709 to xyY color spaces \newinstance. - CImg get_XYZtoxyY() const { - return CImg(*this,false).XYZtoxyY(); - } - - //! Convert pixel values from xyY pixels to XYZ_709 color spaces. - CImg& xyYtoXYZ() { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "xyYtoXYZ(): Instance is not a xyY image.", - cimg_instance); - - T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); - for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { - const Tfloat - px = (Tfloat)*p1, - py = (Tfloat)*p2, - Y = (Tfloat)*p3, - ny = py>0?py:1; - *(p1++) = (T)(px*Y/ny); - *(p2++) = (T)Y; - *(p3++) = (T)((1-px-py)*Y/ny); - } - return *this; - } - - //! Convert pixel values from xyY pixels to XYZ_709 color spaces \newinstance. - CImg get_xyYtoXYZ() const { - return CImg(*this,false).xyYtoXYZ(); - } - - //! Convert pixel values from RGB to Lab color spaces. - CImg& RGBtoLab() { - return RGBtoXYZ().XYZtoLab(); - } - - //! Convert pixel values from RGB to Lab color spaces \newinstance. - CImg get_RGBtoLab() const { - return CImg(*this,false).RGBtoLab(); - } - - //! Convert pixel values from Lab to RGB color spaces. - CImg& LabtoRGB() { - return LabtoXYZ().XYZtoRGB(); - } - - //! Convert pixel values from Lab to RGB color spaces \newinstance. - CImg get_LabtoRGB() const { - return CImg(*this,false).LabtoRGB(); - } - - //! Convert pixel values from RGB to xyY color spaces. - CImg& RGBtoxyY() { - return RGBtoXYZ().XYZtoxyY(); - } - - //! Convert pixel values from RGB to xyY color spaces \newinstance. - CImg get_RGBtoxyY() const { - return CImg(*this,false).RGBtoxyY(); - } - - //! Convert pixel values from xyY to RGB color spaces. - CImg& xyYtoRGB() { - return xyYtoXYZ().XYZtoRGB(); - } - - //! Convert pixel values from xyY to RGB color spaces \newinstance. - CImg get_xyYtoRGB() const { - return CImg(*this,false).xyYtoRGB(); - } - - //! Convert pixel values from RGB to CMYK color spaces. - CImg& RGBtoCMYK() { - return RGBtoCMY().CMYtoCMYK(); - } - - //! Convert pixel values from RGB to CMYK color spaces \newinstance. - CImg get_RGBtoCMYK() const { - return CImg(*this,false).RGBtoCMYK(); - } - - //! Convert pixel values from CMYK to RGB color spaces. - CImg& CMYKtoRGB() { - return CMYKtoCMY().CMYtoRGB(); - } - - //! Convert pixel values from CMYK to RGB color spaces \newinstance. - CImg get_CMYKtoRGB() const { - return CImg(*this,false).CMYKtoRGB(); - } - - //! Convert RGB color image to a Bayer-coded scalar image. - /** - \note First (upper-left) pixel if the red component of the pixel color. - **/ - CImg& RGBtoBayer() { - return get_RGBtoBayer().move_to(*this); - } - - //! Convert RGB color image to a Bayer-coded scalar image \newinstance. - CImg get_RGBtoBayer() const { - if (_spectrum!=3) - throw CImgInstanceException(_cimg_instance - "RGBtoBayer(): Instance is not a RGB image.", - cimg_instance); - - CImg res(_width,_height,_depth,1); - const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - T *ptrd = res._data; - cimg_forXYZ(*this,x,y,z) { - if (y%2) { - if (x%2) *(ptrd++) = *ptr_b; - else *(ptrd++) = *ptr_g; - } else { - if (x%2) *(ptrd++) = *ptr_g; - else *(ptrd++) = *ptr_r; - } - ++ptr_r; ++ptr_g; ++ptr_b; - } - return res; - } - - //! Convert Bayer-coded scalar image to a RGB color image. - CImg& BayertoRGB(const unsigned int interpolation_type=3) { - return get_BayertoRGB(interpolation_type).move_to(*this); - } - - //! Convert Bayer-coded scalar image to a RGB color image \newinstance. - CImg get_BayertoRGB(const unsigned int interpolation_type=3) const { - if (_spectrum!=1) - throw CImgInstanceException(_cimg_instance - "BayertoRGB(): Instance is not a Bayer image.", - cimg_instance); - - CImg res(_width,_height,_depth,3); - CImg_3x3(I,T); - Tuchar *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); - switch (interpolation_type) { - case 3 : { // Edge-directed - CImg_3x3(R,T); - CImg_3x3(G,T); - CImg_3x3(B,T); - cimg_forXYZ(*this,x,y,z) { - const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x=2) return 0; - const float a = (float)cimg::PI*x, b = 0.5f*a; - return (float)(x?std::sin(a)*std::sin(b)/(a*b):1); - } - - //! Resize image to new dimensions. - /** - \param size_x Number of columns (new size along the X-axis). - \param size_y Number of rows (new size along the Y-axis). - \param size_z Number of slices (new size along the Z-axis). - \param size_c Number of vector-channels (new size along the C-axis). - \param interpolation_type Method of interpolation: - - -1 = no interpolation: raw memory resizing. - - 0 = no interpolation: additional space is filled according to \p boundary_conditions. - - 1 = nearest-neighbor interpolation. - - 2 = moving average interpolation. - - 3 = linear interpolation. - - 4 = grid interpolation. - - 5 = cubic interpolation. - - 6 = lanczos interpolation. - \param boundary_conditions Border condition type. - \param centering_x Set centering type (only if \p interpolation_type=0). - \param centering_y Set centering type (only if \p interpolation_type=0). - \param centering_z Set centering type (only if \p interpolation_type=0). - \param centering_c Set centering type (only if \p interpolation_type=0). - \note If pd[x,y,z,v]<0, it corresponds to a percentage of the original size (the default value is -100). - **/ - CImg& resize(const int size_x, const int size_y=-100, - const int size_z=-100, const int size_c=-100, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) { - if (!size_x || !size_y || !size_z || !size_c) return assign(); - const unsigned int - _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), - _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), - _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), - _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), - sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; - if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return *this; - if (is_empty()) return assign(sx,sy,sz,sc,(T)0); - if (interpolation_type==-1 && sx*sy*sz*sc==size()) { - _width = sx; _height = sy; _depth = sz; _spectrum = sc; - return *this; - } - return get_resize(sx,sy,sz,sc,interpolation_type,boundary_conditions,centering_x,centering_y,centering_z,centering_c).move_to(*this); - } - - //! Resize image to new dimensions \newinstance. - CImg get_resize(const int size_x, const int size_y = -100, - const int size_z = -100, const int size_c = -100, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) const { - if (centering_x<0 || centering_x>1 || centering_y<0 || centering_y>1 || - centering_z<0 || centering_z>1 || centering_c<0 || centering_c>1) - throw CImgArgumentException(_cimg_instance - "resize(): Specified centering arguments (%g,%g,%g,%g) are outside range [0,1].", - cimg_instance, - centering_x,centering_y,centering_z,centering_c); - - if (!size_x || !size_y || !size_z || !size_c) return CImg(); - const unsigned int - _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), - _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), - _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), - _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), - sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; - if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return +*this; - if (is_empty()) return CImg(sx,sy,sz,sc,0); - - CImg res; - switch (interpolation_type) { - - // Raw resizing. - // - case -1 : - std::memcpy(res.assign(sx,sy,sz,sc,0)._data,_data,sizeof(T)*cimg::min(size(),sx*sy*sz*sc)); - break; - - // No interpolation. - // - case 0 : { - const int - xc = (int)(centering_x*((int)sx - width())), - yc = (int)(centering_y*((int)sy - height())), - zc = (int)(centering_z*((int)sz - depth())), - cc = (int)(centering_c*((int)sc - spectrum())); - - switch (boundary_conditions) { - case 2 : { // Cyclic borders. - res.assign(sx,sy,sz,sc); - const int - x0 = ((int)xc%width()) - width(), - y0 = ((int)yc%height()) - height(), - z0 = ((int)zc%depth()) - depth(), - c0 = ((int)cc%spectrum()) - spectrum(); - for (int c = c0; c<(int)sc; c+=spectrum()) - for (int z = z0; z<(int)sz; z+=depth()) - for (int y = y0; y<(int)sy; y+=height()) - for (int x = x0; x<(int)sx; x+=width()) - res.draw_image(x,y,z,c,*this); - } break; - case 1 : { // Neumann borders. - res.assign(sx,sy,sz,sc).draw_image(xc,yc,zc,cc,*this); - CImg sprite; - if (xc>0) { // X-backward - res.get_crop(xc,yc,zc,cc,xc,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int x = xc-1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); - } - if (xc+width()<(int)sx) { // X-forward - res.get_crop(xc+width()-1,yc,zc,cc,xc+width()-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int x = xc+width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); - } - if (yc>0) { // Y-backward - res.get_crop(0,yc,zc,cc,sx-1,yc,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int y = yc-1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); - } - if (yc+height()<(int)sy) { // Y-forward - res.get_crop(0,yc+height()-1,zc,cc,sx-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int y = yc+height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); - } - if (zc>0) { // Z-backward - res.get_crop(0,0,zc,cc,sx-1,sy-1,zc,cc+spectrum()-1).move_to(sprite); - for (int z = zc-1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); - } - if (zc+depth()<(int)sz) { // Z-forward - res.get_crop(0,0,zc+depth()-1,cc,sx-1,sy-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int z = zc+depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); - } - if (cc>0) { // C-backward - res.get_crop(0,0,0,cc,sx-1,sy-1,sz-1,cc).move_to(sprite); - for (int c = cc-1; c>=0; --c) res.draw_image(0,0,0,c,sprite); - } - if (cc+spectrum()<(int)sc) { // C-forward - res.get_crop(0,0,0,cc+spectrum()-1,sx-1,sy-1,sz-1,cc+spectrum()-1).move_to(sprite); - for (int c = cc+spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); - } - } break; - default : // Dirichlet borders. - res.assign(sx,sy,sz,sc,0).draw_image(xc,yc,zc,cc,*this); - } - break; - } break; - - // Nearest neighbor interpolation. - // - case 1 : { - res.assign(sx,sy,sz,sc); - CImg off_x(sx), off_y(sy+1), off_z(sz+1), off_c(sc+1); - unsigned long *poff_x, *poff_y, *poff_z, *poff_c, curr, old; - const unsigned long - wh = (unsigned long)_width*_height, - whd = (unsigned long)_width*_height*_depth, - sxy = (unsigned long)sx*sy, - sxyz = (unsigned long)sx*sy*sz; - if (sx==_width) off_x.fill(1); - else { - poff_x = off_x._data; curr = 0; - cimg_forX(res,x) { old = curr; curr = ((x+1LU)*_width/sx); *(poff_x++) = curr - old; } - } - if (sy==_height) off_y.fill(_width); - else { - poff_y = off_y._data; curr = 0; - cimg_forY(res,y) { old = curr; curr = ((y+1LU)*_height/sy); *(poff_y++) = _width*(curr - old); } *poff_y = 0; - } - if (sz==_depth) off_z.fill(wh); - else { - poff_z = off_z._data; curr = 0; - cimg_forZ(res,z) { old = curr; curr = ((z+1LU)*_depth/sz); *(poff_z++) = wh*(curr - old); } *poff_z = 0; - } - if (sc==_spectrum) off_c.fill(whd); - else { - poff_c = off_c._data; curr = 0; - cimg_forC(res,c) { old = curr; curr = ((c+1LU)*_spectrum/sc); *(poff_c++) = whd*(curr - old); } *poff_c = 0; - } - - T *ptrd = res._data; - const T* ptrv = _data; - poff_c = off_c._data; - for (unsigned int c = 0; c tmp(sx,_height,_depth,_spectrum,0); - for (unsigned int a = _width*sx, b = _width, c = sx, s = 0, t = 0; a; ) { - const unsigned int d = cimg::min(b,c); - a-=d; b-=d; c-=d; - cimg_forYZC(tmp,y,z,v) tmp(t,y,z,v)+=(Tfloat)(*this)(s,y,z,v)*d; - if (!b) { cimg_forYZC(tmp,y,z,v) tmp(t,y,z,v)/=_width; ++t; b = _width; } - if (!c) { ++s; c = sx; } - } - tmp.move_to(res); - instance_first = false; - } - if (sy!=_height) { - CImg tmp(sx,sy,_depth,_spectrum,0); - for (unsigned int a = _height*sy, b = _height, c = sy, s = 0, t = 0; a; ) { - const unsigned int d = cimg::min(b,c); - a-=d; b-=d; c-=d; - if (instance_first) cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)+=(Tfloat)(*this)(x,s,z,v)*d; - else cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)+=(Tfloat)res(x,s,z,v)*d; - if (!b) { cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)/=_height; ++t; b = _height; } - if (!c) { ++s; c = sy; } - } - tmp.move_to(res); - instance_first = false; - } - if (sz!=_depth) { - CImg tmp(sx,sy,sz,_spectrum,0); - for (unsigned int a = _depth*sz, b = _depth, c = sz, s = 0, t = 0; a; ) { - const unsigned int d = cimg::min(b,c); - a-=d; b-=d; c-=d; - if (instance_first) cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)+=(Tfloat)(*this)(x,y,s,v)*d; - else cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)+=(Tfloat)res(x,y,s,v)*d; - if (!b) { cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)/=_depth; ++t; b = _depth; } - if (!c) { ++s; c = sz; } - } - tmp.move_to(res); - instance_first = false; - } - if (sc!=_spectrum) { - CImg tmp(sx,sy,sz,sc,0); - for (unsigned int a = _spectrum*sc, b = _spectrum, c = sc, s = 0, t = 0; a; ) { - const unsigned int d = cimg::min(b,c); - a-=d; b-=d; c-=d; - if (instance_first) cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)+=(Tfloat)(*this)(x,y,z,s)*d; - else cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)+=(Tfloat)res(x,y,z,s)*d; - if (!b) { cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)/=_spectrum; ++t; b = _spectrum; } - if (!c) { ++s; c = sc; } - } - tmp.move_to(res); - instance_first = false; - } - } break; - - // Linear interpolation. - // - case 3 : { - CImg off(cimg::max(sx,sy,sz,sc)); - CImg foff(off._width); - unsigned int *poff; - float *pfoff, old, curr; - CImg resx, resy, resz, resc; - T *ptrd; - - if (sx!=_width) { - if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); - else { - if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); - else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; - resx.assign(sx,_height,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forX(resx,x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } - ptrd = resx._data; - const T *ptrs0 = _data; - cimg_forYZC(resx,y,z,c) { - poff = off._data; pfoff = foff._data; - const T *ptrs = ptrs0, *const ptrsmax = ptrs0 + (_width-1); - cimg_forX(resx,x) { - const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); - else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; - resy.assign(sx,sy,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } - cimg_forXZC(resy,x,z,c) { - ptrd = resy.data(x,0,z,c); - const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height-1)*sx; - poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { - const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); - else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; - const unsigned int sxy = sx*sy; - resz.assign(sx,sy,sz,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } - cimg_forXYC(resz,x,y,c) { - ptrd = resz.data(x,y,0,c); - const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth-1)*sxy; - poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { - const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); - else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; - const unsigned int sxyz = sx*sy*sz; - resc.assign(sx,sy,sz,sc); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } - cimg_forXYZ(resc,x,y,z) { - ptrd = resc.data(x,y,z,0); - const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum-1)*sxyz; - poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { - const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrs resx, resy, resz, resc; - if (sx!=_width) { - if (sx<_width) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); - else { - resx.assign(sx,_height,_depth,_spectrum,0); - const int dx = sx*2, dy = width()*2; - int err = (int)(dy + centering_x*(sx*dy/width() - dy)), xs = 0; - cimg_forX(resx,x) if ((err-=dy)<=0) { - cimg_forYZC(resx,y,z,c) resx(x,y,z,c) = (*this)(xs,y,z,c); - ++xs; - err+=dx; - } - } - } else resx.assign(*this,true); - - if (sy!=_height) { - if (sy<_height) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); - else { - resy.assign(sx,sy,_depth,_spectrum,0); - const int dx = sy*2, dy = height()*2; - int err = (int)(dy + centering_y*(sy*dy/height() - dy)), ys = 0; - cimg_forY(resy,y) if ((err-=dy)<=0) { - cimg_forXZC(resy,x,z,c) resy(x,y,z,c) = resx(x,ys,z,c); - ++ys; - err+=dx; - } - } - resx.assign(); - } else resy.assign(resx,true); - - if (sz!=_depth) { - if (sz<_depth) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); - else { - resz.assign(sx,sy,sz,_spectrum,0); - const int dx = sz*2, dy = depth()*2; - int err = (int)(dy + centering_z*(sz*dy/depth() - dy)), zs = 0; - cimg_forZ(resz,z) if ((err-=dy)<=0) { - cimg_forXYC(resz,x,y,c) resz(x,y,z,c) = resy(x,y,zs,c); - ++zs; - err+=dx; - } - } - resy.assign(); - } else resz.assign(resy,true); - - if (sc!=_spectrum) { - if (sc<_spectrum) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); - else { - resc.assign(sx,sy,sz,sc,0); - const int dx = sc*2, dy = spectrum()*2; - int err = (int)(dy + centering_c*(sc*dy/spectrum() - dy)), cs = 0; - cimg_forC(resc,c) if ((err-=dy)<=0) { - cimg_forXYZ(resc,x,y,z) resc(x,y,z,c) = resz(x,y,z,cs); - ++cs; - err+=dx; - } - } - resz.assign(); - } else resc.assign(resz,true); - - return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; - } break; - - // Cubic interpolation. - // - case 5 : { - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - CImg off(cimg::max(sx,sy,sz,sc)); - CImg foff(off._width); - unsigned int *poff; - float *pfoff, old, curr; - CImg resx, resy, resz, resc; - T *ptrd; - - if (sx!=_width) { - if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); - else { - if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); - else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; - resx.assign(sx,_height,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forX(resx,x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } - ptrd = resx._data; - const T *ptrs0 = _data; - cimg_forYZC(resx,y,z,c) { - poff = off._data; pfoff = foff._data; - const T *ptrs = ptrs0, *const ptrsmax = ptrs0 + (_width-2); - cimg_forX(resx,x) { - const float t = *(pfoff++); - const Tfloat - val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-1):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val1, - val3 = ptrsvmax?vmax:val); - ptrs+=*(poff++); - } - ptrs0+=_width; - } - } - } - } else resx.assign(*this,true); - - if (sy!=_height) { - if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); - else { - if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); - else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; - resy.assign(sx,sy,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } - cimg_forXZC(resy,x,z,c) { - ptrd = resy.data(x,0,z,c); - const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs0 + (_height-2)*sx; - poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { - const float t = *(pfoff++); - const Tfloat - val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sx):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val1, - val3 = ptrsvmax?vmax:val); - ptrd+=sx; - ptrs+=*(poff++); - } - } - } - } - resx.assign(); - } else resy.assign(resx,true); - - if (sz!=_depth) { - if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); - else { - if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); - else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; - const unsigned int sxy = sx*sy; - resz.assign(sx,sy,sz,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } - cimg_forXYC(resz,x,y,c) { - ptrd = resz.data(x,y,0,c); - const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs0 + (_depth-2)*sxy; - poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { - const float t = *(pfoff++); - const Tfloat - val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxy):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val1, - val3 = ptrsvmax?vmax:val); - ptrd+=sxy; - ptrs+=*(poff++); - } - } - } - } - resy.assign(); - } else resz.assign(resy,true); - - if (sc!=_spectrum) { - if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); - else { - if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); - else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; - const unsigned int sxyz = sx*sy*sz; - resc.assign(sx,sy,sz,sc); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } - cimg_forXYZ(resc,x,y,z) { - ptrd = resc.data(x,y,z,0); - const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; - poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { - const float t = *(pfoff++); - const Tfloat - val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxyz):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val1, - val3 = ptrsvmax?vmax:val); - ptrd+=sxyz; - ptrs+=*(poff++); - } - } - } - } - resz.assign(); - } else resc.assign(resz,true); - - return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; - } break; - - // Lanczos interpolation. - // - case 6 : { - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - CImg off(cimg::max(sx,sy,sz,sc)); - CImg foff(off._width); - unsigned int *poff; - float *pfoff, old, curr; - CImg resx, resy, resz, resc; - T *ptrd; - - if (sx!=_width) { - if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); - else { - if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); - else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; - resx.assign(sx,_height,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forX(resx,x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } - ptrd = resx._data; - const T *ptrs0 = _data; - cimg_forYZC(resx,y,z,c) { - poff = off._data; pfoff = foff._data; - const T *ptrs = ptrs0, *const ptrsmin = ptrs0 + 1, *const ptrsmax = ptrs0 + (_width-2); - cimg_forX(resx,x) { - const float - t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), - w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); - const Tfloat - val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-1):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val2, - val4 = ptrsvmax?vmax:val); - ptrs+=*(poff++); - } - ptrs0+=_width; - } - } - } - } else resx.assign(*this,true); - - if (sy!=_height) { - if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); - else { - if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); - else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; - resy.assign(sx,sy,_depth,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } - cimg_forXZC(resy,x,z,c) { - ptrd = resy.data(x,0,z,c); - const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sx, *const ptrsmax = ptrs0 + (_height-2)*sx; - poff = off._data; pfoff = foff._data; - cimg_forY(resy,y) { - const float - t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), - w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); - const Tfloat - val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sx):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sx):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val2, - val4 = ptrsvmax?vmax:val); - ptrd+=sx; - ptrs+=*(poff++); - } - } - } - } - resx.assign(); - } else resy.assign(resx,true); - - if (sz!=_depth) { - if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); - else { - if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); - else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; - const unsigned int sxy = sx*sy; - resz.assign(sx,sy,sz,_spectrum); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } - cimg_forXYC(resz,x,y,c) { - ptrd = resz.data(x,y,0,c); - const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxy, *const ptrsmax = ptrs0 + (_depth-2)*sxy; - poff = off._data; pfoff = foff._data; - cimg_forZ(resz,z) { - const float - t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), - w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); - const Tfloat - val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxy):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxy):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val2, - val4 = ptrsvmax?vmax:val); - ptrd+=sxy; - ptrs+=*(poff++); - } - } - } - } - resy.assign(); - } else resz.assign(resy,true); - - if (sc!=_spectrum) { - if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); - else { - if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); - else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; - const unsigned int sxyz = sx*sy*sz; - resc.assign(sx,sy,sz,sc); - curr = old = 0; poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } - cimg_forXYZ(resc,x,y,z) { - ptrd = resc.data(x,y,z,0); - const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxyz, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; - poff = off._data; pfoff = foff._data; - cimg_forC(resc,c) { - const float - t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), - w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); - const Tfloat - val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxyz):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxyz):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val2, - val4 = ptrsvmax?vmax:val); - ptrd+=sxyz; - ptrs+=*(poff++); - } - } - } - } - resz.assign(); - } else resc.assign(resz,true); - - return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; - } break; - - // Unknow interpolation. - // - default : - throw CImgArgumentException(_cimg_instance - "resize(): Invalid specified interpolation %d " - "(should be { -1=raw | 0=none | 1=nearest | 2=average | 3=linear | 4=grid | 5=cubic | 6=lanczos }).", - cimg_instance, - interpolation_type); - } - return res; - } - - //! Resize image to dimensions of another image. - /** - \param src Reference image used for dimensions. - \param interpolation_type Interpolation method. - \param boundary_conditions Boundary conditions. - \param centering_x Set centering type (only if \p interpolation_type=0). - \param centering_y Set centering type (only if \p interpolation_type=0). - \param centering_z Set centering type (only if \p interpolation_type=0). - \param centering_c Set centering type (only if \p interpolation_type=0). - **/ - template - CImg& resize(const CImg& src, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) { - return resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, - centering_x,centering_y,centering_z,centering_c); - } - - //! Resize image to dimensions of another image \newinstance. - template - CImg get_resize(const CImg& src, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) const { - return get_resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, - centering_x,centering_y,centering_z,centering_c); - } - - //! Resize image to dimensions of a display window. - /** - \param disp Reference display window used for dimensions. - \param interpolation_type Interpolation method. - \param boundary_conditions Boundary conditions. - \param centering_x Set centering type (only if \p interpolation_type=0). - \param centering_y Set centering type (only if \p interpolation_type=0). - \param centering_z Set centering type (only if \p interpolation_type=0). - \param centering_c Set centering type (only if \p interpolation_type=0). - **/ - CImg& resize(const CImgDisplay& disp, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) { - return resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, - centering_x,centering_y,centering_z,centering_c); - } - - //! Resize image to dimensions of a display window \newinstance. - CImg get_resize(const CImgDisplay& disp, - const int interpolation_type=1, const unsigned int boundary_conditions=0, - const float centering_x = 0, const float centering_y = 0, - const float centering_z = 0, const float centering_c = 0) const { - return get_resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, - centering_x,centering_y,centering_z,centering_c); - } - - //! Resize image to half-size along XY axes, using an optimized filter. - CImg& resize_halfXY() { - return get_resize_halfXY().move_to(*this); - } - - //! Resize image to half-size along XY axes, using an optimized filter \newinstance. - CImg get_resize_halfXY() const { - if (is_empty()) return *this; - const Tfloat mask[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, - 0.1231940459f, 0.1935127547f, 0.1231940459f, - 0.07842776544f, 0.1231940459f, 0.07842776544f }; - T I[9] = { 0 }; - CImg res(_width/2,_height/2,_depth,_spectrum); - T *ptrd = res._data; - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,T) - if (x%2 && y%2) *(ptrd++) = (T) - (I[0]*mask[0] + I[1]*mask[1] + I[2]*mask[2] + - I[3]*mask[3] + I[4]*mask[4] + I[5]*mask[5] + - I[6]*mask[6] + I[7]*mask[7] + I[8]*mask[8]); - return res; - } - - //! Resize image to double-size, using the Scale2X algorithm. - /** - \note Use anisotropic upscaling algorithm described here. - **/ - CImg& resize_doubleXY() { - return get_resize_doubleXY().move_to(*this); - } - - //! Resize image to double-size, using the Scale2X algorithm \newinstance. - CImg get_resize_doubleXY() const { -#define _cimg_gs2x_for3(bound,i) \ - for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ - _n1##i<(int)(bound) || i==--_n1##i; \ - _p1##i = i++, ++_n1##i, ptrd1+=(res)._width, ptrd2+=(res)._width) - -#define _cimg_gs2x_for3x3(img,x,y,z,c,I,T) \ - _cimg_gs2x_for3((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = (int)( \ - (I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[3] = I[4] = (T)(img)(0,y,z,c)), \ - (I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x; \ - I[1] = I[2], \ - I[3] = I[4], I[4] = I[5], \ - I[7] = I[8], \ - _p1##x = x++, ++_n1##x) - - if (is_empty()) return *this; - CImg res(_width<<1,_height<<1,_depth,_spectrum); - CImg_3x3(I,T); - cimg_forZC(*this,z,c) { - T - *ptrd1 = res.data(0,0,z,c), - *ptrd2 = ptrd1 + res._width; - _cimg_gs2x_for3x3(*this,x,y,z,c,I,T) { - if (Icp!=Icn && Ipc!=Inc) { - *(ptrd1++) = Ipc==Icp?Ipc:Icc; - *(ptrd1++) = Icp==Inc?Inc:Icc; - *(ptrd2++) = Ipc==Icn?Ipc:Icc; - *(ptrd2++) = Icn==Inc?Inc:Icc; - } else { *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; } - } - } - return res; - } - - //! Resize image to triple-size, using the Scale3X algorithm. - /** - \note Use anisotropic upscaling algorithm described here. - **/ - CImg& resize_tripleXY() { - return get_resize_tripleXY().move_to(*this); - } - - //! Resize image to triple-size, using the Scale3X algorithm \newinstance. - CImg get_resize_tripleXY() const { -#define _cimg_gs3x_for3(bound,i) \ - for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ - _n1##i<(int)(bound) || i==--_n1##i; \ - _p1##i = i++, ++_n1##i, ptrd1+=2*(res)._width, ptrd2+=2*(res)._width, ptrd3+=2*(res)._width) - -#define _cimg_gs3x_for3x3(img,x,y,z,c,I,T) \ - _cimg_gs3x_for3((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = (int)( \ - (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[3] = I[4] = (T)(img)(0,y,z,c)), \ - (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ - (_n1##x<(img).width() && ( \ - (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ - x==--_n1##x; \ - I[0] = I[1], I[1] = I[2], \ - I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], \ - _p1##x = x++, ++_n1##x) - - if (is_empty()) return *this; - CImg res(3*_width,3*_height,_depth,_spectrum); - CImg_3x3(I,T); - cimg_forZC(*this,z,c) { - T - *ptrd1 = res.data(0,0,z,c), - *ptrd2 = ptrd1 + res._width, - *ptrd3 = ptrd2 + res._width; - _cimg_gs3x_for3x3(*this,x,y,z,c,I,T) { - if (Icp != Icn && Ipc != Inc) { - *(ptrd1++) = Ipc==Icp?Ipc:Icc; - *(ptrd1++) = (Ipc==Icp && Icc!=Inp) || (Icp==Inc && Icc!=Ipp)?Icp:Icc; - *(ptrd1++) = Icp==Inc?Inc:Icc; - *(ptrd2++) = (Ipc==Icp && Icc!=Ipn) || (Ipc==Icn && Icc!=Ipp)?Ipc:Icc; - *(ptrd2++) = Icc; - *(ptrd2++) = (Icp==Inc && Icc!=Inn) || (Icn==Inc && Icc!=Inp)?Inc:Icc; - *(ptrd3++) = Ipc==Icn?Ipc:Icc; - *(ptrd3++) = (Ipc==Icn && Icc!=Inn) || (Icn==Inc && Icc!=Ipn)?Icn:Icc; - *(ptrd3++) = Icn==Inc?Inc:Icc; - } else { - *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd1++) = Icc; - *(ptrd2++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; - *(ptrd3++) = Icc; *(ptrd3++) = Icc; *(ptrd3++) = Icc; - } - } - } - return res; - } - - //! Mirror image content along specified axis. - /** - \param axis Mirror axis - **/ - CImg& mirror(const char axis) { - if (is_empty()) return *this; - T *pf, *pb, *buf = 0; - switch (cimg::uncase(axis)) { - case 'x' : { - pf = _data; pb = data(_width-1); - const unsigned int width2 = _width/2; - for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) { - for (unsigned int x = 0; x get_mirror(const char axis) const { - return (+*this).mirror(axis); - } - - //! Mirror image content along specified axes. - /** - \param axes Mirror axes, as a C-string. - \note \c axes may contains multiple character, e.g. \c "xyz" - **/ - CImg& mirror(const char *const axes) { - for (const char *s = axes; *s; s++) mirror(*s); - return *this; - } - - //! Mirror image content along specified axes \newinstance. - CImg get_mirror(const char *const axes) const { - return (+*this).mirror(axes); - } - - //! Shift image content. - /** - \param delta_x Amount of displacement along the X-axis. - \param delta_y Amount of displacement along the Y-axis. - \param delta_z Amount of displacement along the Z-axis. - \param delta_c Amount of displacement along the C-axis. - \param boundary_conditions Border condition. - - - \c boundary_conditions can be: - - 0: Zero border condition (Dirichlet). - - 1: Nearest neighbors (Neumann). - - 2: Repeat Pattern (Fourier style). - **/ - CImg& shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, - const int boundary_conditions=0) { - if (is_empty()) return *this; - if (delta_x) // Shift along X-axis - switch (boundary_conditions) { - case 0 : - if (cimg::abs(delta_x)>=width()) return fill(0); - if (delta_x<0) cimg_forYZC(*this,y,z,c) { - std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width+delta_x)*sizeof(T)); - std::memset(data(_width+delta_x,y,z,c),0,-delta_x*sizeof(T)); - } else cimg_forYZC(*this,y,z,c) { - std::memmove(data(delta_x,y,z,c),data(0,y,z,c),(_width-delta_x)*sizeof(T)); - std::memset(data(0,y,z,c),0,delta_x*sizeof(T)); - } - break; - case 1 : - if (delta_x<0) { - const int ndelta_x = (-delta_x>=width())?width()-1:-delta_x; - if (!ndelta_x) return *this; - cimg_forYZC(*this,y,z,c) { - std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); - T *ptrd = data(_width-1,y,z,c); - const T val = *ptrd; - for (int l = 0; l=width())?width()-1:delta_x; - if (!ndelta_x) return *this; - cimg_forYZC(*this,y,z,c) { - std::memmove(data(ndelta_x,y,z,c),data(0,y,z,c),(_width-ndelta_x)*sizeof(T)); - T *ptrd = data(0,y,z,c); - const T val = *ptrd; - for (int l = 0; l0) cimg_forYZC(*this,y,z,c) { - std::memcpy(buf,data(0,y,z,c),ndelta_x*sizeof(T)); - std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); - std::memcpy(data(_width-ndelta_x,y,z,c),buf,ndelta_x*sizeof(T)); - } else cimg_forYZC(*this,y,z,c) { - std::memcpy(buf,data(_width+ndelta_x,y,z,c),-ndelta_x*sizeof(T)); - std::memmove(data(-ndelta_x,y,z,c),data(0,y,z,c),(_width+ndelta_x)*sizeof(T)); - std::memcpy(data(0,y,z,c),buf,-ndelta_x*sizeof(T)); - } - delete[] buf; - } - } - - if (delta_y) // Shift along Y-axis - switch (boundary_conditions) { - case 0 : - if (cimg::abs(delta_y)>=height()) return fill(0); - if (delta_y<0) cimg_forZC(*this,z,c) { - std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height+delta_y)*sizeof(T)); - std::memset(data(0,_height+delta_y,z,c),0,-delta_y*_width*sizeof(T)); - } else cimg_forZC(*this,z,c) { - std::memmove(data(0,delta_y,z,c),data(0,0,z,c),_width*(_height-delta_y)*sizeof(T)); - std::memset(data(0,0,z,c),0,delta_y*_width*sizeof(T)); - } - break; - case 1 : - if (delta_y<0) { - const int ndelta_y = (-delta_y>=height())?height()-1:-delta_y; - if (!ndelta_y) return *this; - cimg_forZC(*this,z,c) { - std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); - T *ptrd = data(0,_height-ndelta_y,z,c), *ptrs = data(0,_height-1,z,c); - for (int l = 0; l=height())?height()-1:delta_y; - if (!ndelta_y) return *this; - cimg_forZC(*this,z,c) { - std::memmove(data(0,ndelta_y,z,c),data(0,0,z,c),_width*(_height-ndelta_y)*sizeof(T)); - T *ptrd = data(0,1,z,c), *ptrs = data(0,0,z,c); - for (int l = 0; l0) cimg_forZC(*this,z,c) { - std::memcpy(buf,data(0,0,z,c),_width*ndelta_y*sizeof(T)); - std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); - std::memcpy(data(0,_height-ndelta_y,z,c),buf,_width*ndelta_y*sizeof(T)); - } else cimg_forZC(*this,z,c) { - std::memcpy(buf,data(0,_height+ndelta_y,z,c),-ndelta_y*_width*sizeof(T)); - std::memmove(data(0,-ndelta_y,z,c),data(0,0,z,c),_width*(_height+ndelta_y)*sizeof(T)); - std::memcpy(data(0,0,z,c),buf,-ndelta_y*_width*sizeof(T)); - } - delete[] buf; - } - } - - if (delta_z) // Shift along Z-axis - switch (boundary_conditions) { - case 0 : - if (cimg::abs(delta_z)>=depth()) return fill(0); - if (delta_z<0) cimg_forC(*this,c) { - std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth+delta_z)*sizeof(T)); - std::memset(data(0,0,_depth+delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); - } else cimg_forC(*this,c) { - std::memmove(data(0,0,delta_z,c),data(0,0,0,c),_width*_height*(_depth-delta_z)*sizeof(T)); - std::memset(data(0,0,0,c),0,delta_z*_width*_height*sizeof(T)); - } - break; - case 1 : - if (delta_z<0) { - const int ndelta_z = (-delta_z>=depth())?depth()-1:-delta_z; - if (!ndelta_z) return *this; - cimg_forC(*this,c) { - std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); - T *ptrd = data(0,0,_depth-ndelta_z,c), *ptrs = data(0,0,_depth-1,c); - for (int l = 0; l=depth())?depth()-1:delta_z; - if (!ndelta_z) return *this; - cimg_forC(*this,c) { - std::memmove(data(0,0,ndelta_z,c),data(0,0,0,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); - T *ptrd = data(0,0,1,c), *ptrs = data(0,0,0,c); - for (int l = 0; l0) cimg_forC(*this,c) { - std::memcpy(buf,data(0,0,0,c),_width*_height*ndelta_z*sizeof(T)); - std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); - std::memcpy(data(0,0,_depth-ndelta_z,c),buf,_width*_height*ndelta_z*sizeof(T)); - } else cimg_forC(*this,c) { - std::memcpy(buf,data(0,0,_depth+ndelta_z,c),-ndelta_z*_width*_height*sizeof(T)); - std::memmove(data(0,0,-ndelta_z,c),data(0,0,0,c),_width*_height*(_depth+ndelta_z)*sizeof(T)); - std::memcpy(data(0,0,0,c),buf,-ndelta_z*_width*_height*sizeof(T)); - } - delete[] buf; - } - } - - if (delta_c) // Shift along C-axis - switch (boundary_conditions) { - case 0 : - if (cimg::abs(delta_c)>=spectrum()) return fill(0); - if (delta_c<0) { - std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum+delta_c)*sizeof(T)); - std::memset(data(0,0,0,_spectrum+delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); - } else { - std::memmove(data(0,0,0,delta_c),_data,_width*_height*_depth*(_spectrum-delta_c)*sizeof(T)); - std::memset(_data,0,delta_c*_width*_height*_depth*sizeof(T)); - } - break; - case 1 : - if (delta_c<0) { - const int ndelta_c = (-delta_c>=spectrum())?spectrum()-1:-delta_c; - if (!ndelta_c) return *this; - std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); - T *ptrd = data(0,0,0,_spectrum-ndelta_c), *ptrs = data(0,0,0,_spectrum-1); - for (int l = 0; l=spectrum())?spectrum()-1:delta_c; - if (!ndelta_c) return *this; - std::memmove(data(0,0,0,ndelta_c),_data,_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); - T *ptrd = data(0,0,0,1); - for (int l = 0; l0) { - std::memcpy(buf,_data,_width*_height*_depth*ndelta_c*sizeof(T)); - std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); - std::memcpy(data(0,0,0,_spectrum-ndelta_c),buf,_width*_height*_depth*ndelta_c*sizeof(T)); - } else { - std::memcpy(buf,data(0,0,0,_spectrum+ndelta_c),-ndelta_c*_width*_height*_depth*sizeof(T)); - std::memmove(data(0,0,0,-ndelta_c),_data,_width*_height*_depth*(_spectrum+ndelta_c)*sizeof(T)); - std::memcpy(_data,buf,-ndelta_c*_width*_height*_depth*sizeof(T)); - } - delete[] buf; - } - } - return *this; - } - - //! Shift image content \newinstance. - CImg get_shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, - const int boundary_conditions=0) const { - return (+*this).shift(delta_x,delta_y,delta_z,delta_c,boundary_conditions); - } - - //! Permute axes order. - /** - \param order Axes permutations, as a C-string of 4 characters. - This function permutes image content regarding the specified axes permutation. - **/ - CImg& permute_axes(const char *const order) { - return get_permute_axes(order).move_to(*this); - } - - //! Permute axes order \newinstance. - CImg get_permute_axes(const char *const order) const { - const T foo = (T)0; - return _get_permute_axes(order,foo); - } - - template - CImg _get_permute_axes(const char *const permut, const t&) const { - if (is_empty() || !permut) return CImg(*this,false); - CImg res; - const T* ptrs = _data; - if (!cimg::strncasecmp(permut,"xyzc",4)) return +*this; - if (!cimg::strncasecmp(permut,"xycz",4)) { - res.assign(_width,_height,_spectrum,_depth); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(x,y,c,z,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"xzyc",4)) { - res.assign(_width,_depth,_height,_spectrum); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(x,z,y,c,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"xzcy",4)) { - res.assign(_width,_depth,_spectrum,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(x,z,c,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"xcyz",4)) { - res.assign(_width,_spectrum,_height,_depth); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(x,c,y,z,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"xczy",4)) { - res.assign(_width,_spectrum,_depth,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(x,c,z,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"yxzc",4)) { - res.assign(_height,_width,_depth,_spectrum); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,x,z,c,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"yxcz",4)) { - res.assign(_height,_width,_spectrum,_depth); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,x,c,z,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"yzxc",4)) { - res.assign(_height,_depth,_width,_spectrum); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,z,x,c,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"yzcx",4)) { - res.assign(_height,_depth,_spectrum,_width); - switch (_width) { - case 1 : { - t *ptr_r = res.data(0,0,0,0); - for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { - *(ptr_r++) = (t)*(ptrs++); - } - } break; - case 2 : { - t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1); - for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { - *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); - } - } break; - case 3 : { // Optimization for the classical conversion from interleaved RGB to planar RGB - t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); - for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { - *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); - } - } break; - case 4 : { // Optimization for the classical conversion from interleaved RGBA to planar RGBA - t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2), *ptr_a = res.data(0,0,0,3); - for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { - *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); *(ptr_a++) = (t)*(ptrs++); - } - } break; - default : { - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,z,c,x,wh,whd) = *(ptrs++); - return res; - } - } - } - if (!cimg::strncasecmp(permut,"ycxz",4)) { - res.assign(_height,_spectrum,_width,_depth); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,c,x,z,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"yczx",4)) { - res.assign(_height,_spectrum,_depth,_width); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(y,c,z,x,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zxyc",4)) { - res.assign(_depth,_width,_height,_spectrum); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,x,y,c,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zxcy",4)) { - res.assign(_depth,_width,_spectrum,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,x,c,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zyxc",4)) { - res.assign(_depth,_height,_width,_spectrum); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,y,x,c,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zycx",4)) { - res.assign(_depth,_height,_spectrum,_width); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,y,c,x,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zcxy",4)) { - res.assign(_depth,_spectrum,_width,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,c,x,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"zcyx",4)) { - res.assign(_depth,_spectrum,_height,_width); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(z,c,y,x,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"cxyz",4)) { - res.assign(_spectrum,_width,_height,_depth); - switch (_spectrum) { - case 1 : { - const T *ptr_r = data(0,0,0,0); - t *ptrd = res._data; - for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) *(ptrd++) = (t)*(ptr_r++); - } break; - case 2 : { - const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1); - t *ptrd = res._data; - for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { - *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); - } - } break; - case 3 : { // Optimization for the classical conversion from planar RGB to interleaved RGB - const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - t *ptrd = res._data; - for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { - *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); - } - } break; - case 4 : { // Optimization for the classical conversion from planar RGBA to interleaved RGBA - const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); - t *ptrd = res._data; - for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { - *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); *(ptrd++) = (t)*(ptr_a++); - } - } break; - default : { - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,x,y,z,wh,whd) = (t)*(ptrs++); - } - } - } - if (!cimg::strncasecmp(permut,"cxzy",4)) { - res.assign(_spectrum,_width,_depth,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,x,z,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"cyxz",4)) { - res.assign(_spectrum,_height,_width,_depth); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,y,x,z,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"cyzx",4)) { - res.assign(_spectrum,_height,_depth,_width); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,y,z,x,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"czxy",4)) { - res.assign(_spectrum,_depth,_width,_height); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,z,x,y,wh,whd) = (t)*(ptrs++); - } - if (!cimg::strncasecmp(permut,"czyx",4)) { - res.assign(_spectrum,_depth,_height,_width); - const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; - cimg_forXYZC(*this,x,y,z,c) res(c,z,y,x,wh,whd) = (t)*(ptrs++); - } - if (!res) - throw CImgArgumentException(_cimg_instance - "permute_axes(): Invalid specified permutation '%s'.", - cimg_instance, - permut); - return res; - } - - //! Unroll pixel values along specified axis. - /** - \param axis Unroll axis (can be \c 'x', \c 'y', \c 'z' or c 'c'). - **/ - CImg& unroll(const char axis) { - const unsigned int siz = size(); - if (siz) switch (axis) { - case 'x' : _width = siz; _height = _depth = _spectrum = 1; break; - case 'y' : _height = siz; _width = _depth = _spectrum = 1; break; - case 'z' : _depth = siz; _width = _height = _spectrum = 1; break; - default : _spectrum = siz; _width = _height = _depth = 1; - } - return *this; - } - - //! Unroll pixel values along specified axis \newinstance. - CImg get_unroll(const char axis) const { - return (+*this).unroll(axis); - } - - //! Rotate image with arbitrary angle. - /** - \param angle Rotation angle, in degrees. - \param interpolation Type of interpolation. Can be { 0=nearest | 1=linear | 2=cubic }. - \param boundary Boundary conditions. Can be { 0=dirichlet | 1=neumann | 2=cyclic }. - \note Most of the time, size of the image is modified. - **/ - CImg& rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) { - return get_rotate(angle,interpolation,boundary).move_to(*this); - } - - //! Rotate image with arbitrary angle \newinstance. - CImg get_rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) const { - if (is_empty()) return *this; - CImg res; - const float nangle = cimg::mod(angle,360.0f); - if (boundary!=1 && cimg::mod(nangle,90.0f)==0) { // Optimized version for orthogonal angles. - const int wm1 = width() - 1, hm1 = height() - 1; - const int iangle = (int)nangle/90; - switch (iangle) { - case 1 : { // 90 deg. - res.assign(_height,_width,_depth,_spectrum); - T *ptrd = res._data; - cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(y,hm1-x,z,c); - } break; - case 2 : { // 180 deg. - res.assign(_width,_height,_depth,_spectrum); - T *ptrd = res._data; - cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(wm1-x,hm1-y,z,c); - } break; - case 3 : { // 270 deg. - res.assign(_height,_width,_depth,_spectrum); - T *ptrd = res._data; - cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(wm1-y,x,z,c); - } break; - default : // 0 deg. - return *this; - } - } else { // Generic angle. - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - const float - rad = (float)(nangle*cimg::PI/180.0), - ca = (float)std::cos(rad), - sa = (float)std::sin(rad), - ux = cimg::abs(_width*ca), uy = cimg::abs(_width*sa), - vx = cimg::abs(_height*sa), vy = cimg::abs(_height*ca), - w2 = 0.5f*_width, h2 = 0.5f*_height, - dw2 = 0.5f*(ux+vx), dh2 = 0.5f*(uy+vy); - res.assign((int)(ux+vx),(int)(uy+vy),_depth,_spectrum); - switch (boundary) { - case 0 : { // Dirichlet boundaries. - switch (interpolation) { - case 2 : { // Cubic interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { // Linear interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); - } break; - default : { // Nearest-neighbor interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c,0); - } - } - } break; - case 1 : { // Neumann boundaries. - switch (interpolation) { - case 2 : { // Cubic interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = _cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { // Linear interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)_linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); - } break; - default : { // Nearest-neighbor interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = _atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c); - } - } - } break; - case 2 : { // Cyclic boundaries. - switch (interpolation) { - case 2 : { // Cubic interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = _cubic_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), - cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { // Linear interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)_linear_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), - cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); - } break; - default : { // Nearest-neighbor interpolation. - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (*this)(cimg::mod((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),width()), - cimg::mod((int)(h2 - (x-dw2)*sa + (y-dh2)*ca),height()),z,c); - } - } - } break; - default : - throw CImgArgumentException(_cimg_instance - "rotate(): Invalid specified border conditions %d " - "(should be { 0=dirichlet | 1=neumann | 2=cyclic }).", - cimg_instance, - boundary); - } - } - return res; - } - - //! Rotate image with arbitrary angle, around a center point. - /** - \param angle Rotation angle, in degrees. - \param cx X-coordinate of the rotation center. - \param cy Y-coordinate of the rotation center. - \param zoom Zoom factor. - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann | 2=cyclic }. - \param interpolation_type Type of interpolation. Can be { 0=nearest | 1=linear | 2=cubic }. - **/ - CImg& rotate(const float angle, const float cx, const float cy, const float zoom, - const unsigned int interpolation=1, const unsigned int boundary=3) { - return get_rotate(angle,cx,cy,zoom,interpolation,boundary).move_to(*this); - } - - //! Rotate image with arbitrary angle, around a center point \newinstance. - CImg get_rotate(const float angle, const float cx, const float cy, const float zoom, - const unsigned int interpolation=1, const unsigned int boundary=3) const { - if (interpolation>2) - throw CImgArgumentException(_cimg_instance - "rotate(): Invalid specified interpolation type %d " - "(should be { 0=none | 1=linear | 2=cubic }).", - cimg_instance, - interpolation); - if (is_empty()) return *this; - CImg res(_width,_height,_depth,_spectrum); - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - const float - rad = (float)((angle*cimg::PI)/180.0), - ca = (float)std::cos(rad)/zoom, - sa = (float)std::sin(rad)/zoom; - switch (boundary) { - case 0 : { - switch (interpolation) { - case 2 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); - } break; - default : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c,0); - } - } - } break; - case 1 : { - switch (interpolation) { - case 2 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = _cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)_linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); - } break; - default : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = _atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c); - } - } - } break; - case 2 : { - switch (interpolation) { - case 2 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) { - const Tfloat val = _cubic_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), - cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); - res(x,y,z,c) = (T)(valvmax?vmax:val); - } - } break; - case 1 : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (T)_linear_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), - cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); - } break; - default : { - cimg_forXY(res,x,y) cimg_forZC(*this,z,c) - res(x,y,z,c) = (*this)(cimg::mod((int)(cx + (x-cx)*ca + (y-cy)*sa),width()), - cimg::mod((int)(cy - (x-cx)*sa + (y-cy)*ca),height()),z,c); - } - } - } break; - default : - throw CImgArgumentException(_cimg_instance - "rotate(): Invalid specified border conditions %d " - "(should be { 0=dirichlet | 1=neumann | 2=cyclic }).", - cimg_instance, - boundary); - } - return res; - } - - //! Warp image content by a warping field. - /** - \param warp Warping field. - \param is_relative Tells if warping field gives absolute or relative warping coordinates. - \param interpolation Can be { 0=nearest | 1=linear | 2=cubic }. - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann | 2=cyclic }. - **/ - template - CImg& warp(const CImg& warp, const bool is_relative=false, - const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { - return get_warp(warp,is_relative,interpolation,boundary_conditions).move_to(*this); - } - - //! Warp image content by a warping field \newinstance - template - CImg get_warp(const CImg& warp, const bool is_relative=false, - const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { - if (is_empty() || !warp) return *this; - if (is_relative && !is_sameXYZ(warp)) - throw CImgArgumentException(_cimg_instance - "warp(): Instance and specified relative warping field (%u,%u,%u,%u,%p) " - "have different XYZ dimensions.", - cimg_instance, - warp._width,warp._height,warp._depth,warp._spectrum,warp._data); - - CImg res(warp._width,warp._height,warp._depth,_spectrum); - T *ptrd = res._data; - - if (warp._spectrum==1) { // 1d warping. - if (is_relative) { // Relative warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atX(x - (float)*(ptrs0++),y,z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atX(x - (float)*(ptrs0++),y,z,c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atX(x - (float)*(ptrs0++),y,z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atX(x - (float)*(ptrs0++),y,z,c,0); - } - } else { // Nearest-neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width),y,z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atX(x - (int)*(ptrs0++),y,z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atX(x - (int)*(ptrs0++),y,z,c,0); - } - } - } else { // Absolute warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atX((float)*(ptrs0++),0,0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atX((float)*(ptrs0++),0,0,c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atX((float)*(ptrs0++),0,0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atX((float)*(ptrs0++),0,0,c,0); - } - } else { // Nearest-neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width),0,0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atX((int)*(ptrs0++),0,0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp._data; - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atX((int)*(ptrs0++),0,0,c,0); - } - } - } - - } else if (warp._spectrum==2) { // 2d warping. - if (is_relative) { // Relative warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), - cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), - cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); - } - } else { // Nearest-neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), - cimg::mod(y - (int)*(ptrs1++),(int)_height),z,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c,0); - } - } - } else { // Absolute warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXY(cimg::mod((float)*(ptrs0++),(float)_width), - cimg::mod((float)*(ptrs1++),(float)_height),0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXY(cimg::mod((float)*(ptrs0++),(float)_width), - cimg::mod((float)*(ptrs1++),(float)_height),0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); - } - } else { // Nearest-neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), - cimg::mod((int)*(ptrs1++),(int)_height),0,c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c,0); - } - } - } - - } else if (warp._spectrum==3) { // 3d warping. - if (is_relative) { // Relative warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), - cimg::mod(y - (float)*(ptrs1++),(float)_height), - cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), - cimg::mod(y - (float)*(ptrs1++),(float)_height), - cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); - } - } else { // Nearest neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), - cimg::mod(y - (int)*(ptrs1++),(int)_height), - cimg::mod(z - (int)*(ptrs2++),(int)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c,0); - } - } - } else { // Absolute warp. - if (interpolation==2) { // Cubic interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), - cimg::mod((float)*(ptrs1++),(float)_height), - cimg::mod((float)*(ptrs2++),(float)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); - } - } else if (interpolation==1) { // Linear interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), - cimg::mod((float)*(ptrs1++),(float)_height), - cimg::mod((float)*(ptrs2++),(float)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)_linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (T)linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); - } - } else { // Nearest-neighbor interpolation. - if (boundary_conditions==2) // Cyclic boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), - cimg::mod((int)*(ptrs1++),(int)_height), - cimg::mod((int)*(ptrs2++),(int)_depth),c); - } - else if (boundary_conditions==1) // Neumann boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = _atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c); - } - else // Dirichlet boundaries. - cimg_forC(res,c) { - const t *ptrs0 = warp.data(0,0,0,0), *ptrs1 = warp.data(0,0,0,1), *ptrs2 = warp.data(0,0,0,2); - cimg_forXYZ(res,x,y,z) - *(ptrd++) = atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c,0); - } - } - } - } - return res; - } - - //! Generate a 2d representation of a 3d image, with XY,XZ and YZ views. - /** - \param x0 X-coordinate of the projection point. - \param y0 Y-coordinate of the projection point. - \param z0 Z-coordinate of the projection point. - **/ - CImg get_projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) const { - if (is_empty() || _depth<2) return +*this; - const unsigned int - _x0 = (x0>=_width)?_width - 1:x0, - _y0 = (y0>=_height)?_height - 1:y0, - _z0 = (z0>=_depth)?_depth - 1:z0; - const CImg - img_xy = get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1), - img_zy = get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).permute_axes("xzyc").resize(_depth,_height,1,-100,-1), - img_xz = get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1); - return CImg(_width + _depth,_height + _depth,1,_spectrum,cimg::min(img_xy.min(),img_zy.min(),img_xz.min())). - draw_image(0,0,img_xy).draw_image(img_xy._width,0,img_zy). - draw_image(0,img_xy._height,img_xz); - } - - //! Construct a 2d representation of a 3d image, with XY,XZ and YZ views \inplace. - CImg& projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) { - if (_depth<2) return *this; - return get_projections2d(x0,y0,z0).move_to(*this); - } - - //! Crop image region. - /** - \param x0 = X-coordinate of the upper-left crop rectangle corner. - \param y0 = Y-coordinate of the upper-left crop rectangle corner. - \param z0 = Z-coordinate of the upper-left crop rectangle corner. - \param c0 = C-coordinate of the upper-left crop rectangle corner. - \param x1 = X-coordinate of the lower-right crop rectangle corner. - \param y1 = Y-coordinate of the lower-right crop rectangle corner. - \param z1 = Z-coordinate of the lower-right crop rectangle corner. - \param c1 = C-coordinate of the lower-right crop rectangle corner. - \param boundary_conditions = Dirichlet (false) or Neumann border conditions. - **/ - CImg& crop(const int x0, const int y0, const int z0, const int c0, - const int x1, const int y1, const int z1, const int c1, - const bool boundary_conditions=false) { - return get_crop(x0,y0,z0,c0,x1,y1,z1,c1,boundary_conditions).move_to(*this); - } - - //! Crop image region \newinstance. - CImg get_crop(const int x0, const int y0, const int z0, const int c0, - const int x1, const int y1, const int z1, const int c1, - const bool boundary_conditions=false) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "crop(): Empty instance.", - cimg_instance); - const int - nx0 = x0 res(1U + nx1 - nx0,1U + ny1 - ny0,1U + nz1 - nz0,1U + nc1 - nc0); - if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height() || nz0<0 || nz1>=depth() || nc0<0 || nc1>=spectrum()) { - if (boundary_conditions) cimg_forXYZC(res,x,y,z,c) res(x,y,z,c) = _atXYZC(nx0+x,ny0+y,nz0+z,nc0+c); - else res.fill(0).draw_image(-nx0,-ny0,-nz0,-nc0,*this); - } else res.draw_image(-nx0,-ny0,-nz0,-nc0,*this); - return res; - } - - //! Crop image region \overloading. - CImg& crop(const int x0, const int y0, const int z0, - const int x1, const int y1, const int z1, - const bool boundary_conditions=false) { - return crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); - } - - //! Crop image region \newinstance. - CImg get_crop(const int x0, const int y0, const int z0, - const int x1, const int y1, const int z1, - const bool boundary_conditions=false) const { - return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); - } - - //! Crop image region \overloading. - CImg& crop(const int x0, const int y0, - const int x1, const int y1, - const bool boundary_conditions=false) { - return crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); - } - - //! Crop image region \newinstance. - CImg get_crop(const int x0, const int y0, - const int x1, const int y1, - const bool boundary_conditions=false) const { - return get_crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); - } - - //! Crop image region \overloading. - CImg& crop(const int x0, const int x1, const bool boundary_conditions=false) { - return crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); - } - - //! Crop image region \newinstance. - CImg get_crop(const int x0, const int x1, const bool boundary_conditions=false) const { - return get_crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); - } - - //! Autocrop image region, regarding the specified background value. - CImg& autocrop(const T value, const char *const axes="czyx") { - if (is_empty()) return *this; - for (const char *s = axes; *s; ++s) { - const char axis = cimg::uncase(*s); - const CImg coords = _autocrop(value,axis); - if (coords[0]==-1 && coords[1]==-1) return assign(); // Image has only 'value' pixels. - else switch (axis) { - case 'x' : { - const int x0 = coords[0], x1 = coords[1]; - if (x0>=0 && x1>=0) crop(x0,x1); - } break; - case 'y' : { - const int y0 = coords[0], y1 = coords[1]; - if (y0>=0 && y1>=0) crop(0,y0,_width-1,y1); - } break; - case 'z' : { - const int z0 = coords[0], z1 = coords[1]; - if (z0>=0 && z1>=0) crop(0,0,z0,_width-1,_height-1,z1); - } break; - default : { - const int c0 = coords[0], c1 = coords[1]; - if (c0>=0 && c1>=0) crop(0,0,0,c0,_width-1,_height-1,_depth-1,c1); - } - } - } - return *this; - } - - //! Autocrop image region, regarding the specified background value \newinstance. - CImg get_autocrop(const T value, const char *const axes="czyx") const { - return (+*this).autocrop(value,axes); - } - - //! Autocrop image region, regarding the specified background color. - /** - \param color Color used for the crop. If \c 0, color is guessed. - \param axes Axes used for the crop. - **/ - CImg& autocrop(const T *const color=0, const char *const axes="zyx") { - if (is_empty()) return *this; - if (!color) { // Guess color. - const CImg col1 = get_vector_at(0,0,0); - const unsigned int w = _width, h = _height, d = _depth, s = _spectrum; - autocrop(col1,axes); - if (_width==w && _height==h && _depth==d && _spectrum==s) { - const CImg col2 = get_vector_at(w-1,h-1,d-1); - autocrop(col2,axes); - } - return *this; - } - for (const char *s = axes; *s; ++s) { - const char axis = cimg::uncase(*s); - switch (axis) { - case 'x' : { - int x0 = width(), x1 = -1; - cimg_forC(*this,c) { - const CImg coords = get_shared_channel(c)._autocrop(color[c],'x'); - const int nx0 = coords[0], nx1 = coords[1]; - if (nx0>=0 && nx1>=0) { x0 = cimg::min(x0,nx0); x1 = cimg::max(x1,nx1); } - } - if (x0==width() && x1==-1) return assign(); else crop(x0,x1); - } break; - case 'y' : { - int y0 = height(), y1 = -1; - cimg_forC(*this,c) { - const CImg coords = get_shared_channel(c)._autocrop(color[c],'y'); - const int ny0 = coords[0], ny1 = coords[1]; - if (ny0>=0 && ny1>=0) { y0 = cimg::min(y0,ny0); y1 = cimg::max(y1,ny1); } - } - if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width-1,y1); - } break; - default : { - int z0 = depth(), z1 = -1; - cimg_forC(*this,c) { - const CImg coords = get_shared_channel(c)._autocrop(color[c],'z'); - const int nz0 = coords[0], nz1 = coords[1]; - if (nz0>=0 && nz1>=0) { z0 = cimg::min(z0,nz0); z1 = cimg::max(z1,nz1); } - } - if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width-1,_height-1,z1); - } - } - } - return *this; - } - - //! Autocrop image region, regarding the specified background color \newinstance. - CImg get_autocrop(const T *const color=0, const char *const axes="zyx") const { - return (+*this).autocrop(color,axes); - } - - //! Autocrop image region, regarding the specified background color \overloading. - template CImg& autocrop(const CImg& color, const char *const axes="zyx") { - return get_autocrop(color,axes).move_to(*this); - } - - //! Autocrop image region, regarding the specified background color \newinstance. - template CImg get_autocrop(const CImg& color, const char *const axes="zyx") const { - return get_autocrop(color._data,axes); - } - - CImg _autocrop(const T value, const char axis) const { - CImg res; - switch (cimg::uncase(axis)) { - case 'x' : { - int x0 = -1, x1 = -1; - cimg_forX(*this,x) cimg_forYZC(*this,y,z,c) - if ((*this)(x,y,z,c)!=value) { x0 = x; x = width(); y = height(); z = depth(); c = spectrum(); } - if (x0>=0) { - for (int x = width()-1; x>=0; --x) cimg_forYZC(*this,y,z,c) - if ((*this)(x,y,z,c)!=value) { x1 = x; x = 0; y = height(); z = depth(); c = spectrum(); } - } - res = CImg::vector(x0,x1); - } break; - case 'y' : { - int y0 = -1, y1 = -1; - cimg_forY(*this,y) cimg_forXZC(*this,x,z,c) - if ((*this)(x,y,z,c)!=value) { y0 = y; x = width(); y = height(); z = depth(); c = spectrum(); } - if (y0>=0) { - for (int y = height()-1; y>=0; --y) cimg_forXZC(*this,x,z,c) - if ((*this)(x,y,z,c)!=value) { y1 = y; x = width(); y = 0; z = depth(); c = spectrum(); } - } - res = CImg::vector(y0,y1); - } break; - case 'z' : { - int z0 = -1, z1 = -1; - cimg_forZ(*this,z) cimg_forXYC(*this,x,y,c) - if ((*this)(x,y,z,c)!=value) { z0 = z; x = width(); y = height(); z = depth(); c = spectrum(); } - if (z0>=0) { - for (int z = depth()-1; z>=0; --z) cimg_forXYC(*this,x,y,c) - if ((*this)(x,y,z,c)!=value) { z1 = z; x = width(); y = height(); z = 0; c = spectrum(); } - } - res = CImg::vector(z0,z1); - } break; - default : { - int c0 = -1, c1 = -1; - cimg_forC(*this,c) cimg_forXYZ(*this,x,y,z) - if ((*this)(x,y,z,c)!=value) { c0 = c; x = width(); y = height(); z = depth(); c = spectrum(); } - if (c0>=0) { - for (int c = spectrum()-1; c>=0; --c) cimg_forXYZ(*this,x,y,z) - if ((*this)(x,y,z,c)!=value) { c1 = c; x = width(); y = height(); z = depth(); c = 0; } - } - res = CImg::vector(c0,c1); - } - } - return res; - } - - //! Return specified image column. - /** - \param x0 Image column. - **/ - CImg get_column(const int x0) const { - return get_columns(x0,x0); - } - - //! Return specified image column \inplace. - CImg& column(const int x0) { - return columns(x0,x0); - } - - //! Return specified range of image columns. - /** - \param x0 Starting image column. - \param x1 Ending image column. - **/ - CImg& columns(const int x0, const int x1) { - return get_columns(x0,x1).move_to(*this); - } - - //! Return specified range of image columns \inplace. - CImg get_columns(const int x0, const int x1) const { - return get_crop(x0,0,0,0,x1,height()-1,depth()-1,spectrum()-1); - } - - //! Return specified image row. - CImg get_row(const int y0) const { - return get_rows(y0,y0); - } - - //! Return specified image row \inplace. - /** - \param y0 Image row. - **/ - CImg& row(const int y0) { - return rows(y0,y0); - } - - //! Return specified range of image rows. - /** - \param y0 Starting image row. - \param y1 Ending image row. - **/ - CImg get_rows(const int y0, const int y1) const { - return get_crop(0,y0,0,0,width()-1,y1,depth()-1,spectrum()-1); - } - - //! Return specified range of image rows \inplace. - CImg& rows(const int y0, const int y1) { - return get_rows(y0,y1).move_to(*this); - } - - //! Return specified image slice. - /** - \param z0 Image slice. - **/ - CImg get_slice(const int z0) const { - return get_slices(z0,z0); - } - - //! Return specified image slice \inplace. - CImg& slice(const int z0) { - return slices(z0,z0); - } - - //! Return specified range of image slices. - /** - \param z0 Starting image slice. - \param z1 Ending image slice. - **/ - CImg get_slices(const int z0, const int z1) const { - return get_crop(0,0,z0,0,width()-1,height()-1,z1,spectrum()-1); - } - - //! Return specified range of image slices \inplace. - CImg& slices(const int z0, const int z1) { - return get_slices(z0,z1).move_to(*this); - } - - //! Return specified image channel. - /** - \param c0 Image channel. - **/ - CImg get_channel(const int c0) const { - return get_channels(c0,c0); - } - - //! Return specified image channel \inplace. - CImg& channel(const int c0) { - return channels(c0,c0); - } - - //! Return specified range of image channels. - /** - \param c0 Starting image channel. - \param c1 Ending image channel. - **/ - CImg get_channels(const int c0, const int c1) const { - return get_crop(0,0,0,c0,width()-1,height()-1,depth()-1,c1); - } - - //! Return specified range of image channels \inplace. - CImg& channels(const int c0, const int c1) { - return get_channels(c0,c1).move_to(*this); - } - - //! Return stream line of a 2d or 3d vector field. - CImg get_streamline(const float x, const float y, const float z, - const float L=256, const float dl=0.1f, - const unsigned int interpolation_type=2, const bool is_backward_tracking=false, - const bool is_oriented_only=false) const { - if (_spectrum!=2 && _spectrum!=3) - throw CImgInstanceException(_cimg_instance - "streamline(): Instance is not a 2d or 3d vector field.", - cimg_instance); - if (_spectrum==2) { - if (is_oriented_only) { - typename CImg::_functor4d_streamline2d_oriented func(*this); - return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,0.0f); - } else { - typename CImg::_functor4d_streamline2d_directed func(*this); - return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,0.0f); - } - } - if (is_oriented_only) { - typename CImg::_functor4d_streamline3d_oriented func(*this); - return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); - } - typename CImg::_functor4d_streamline3d_directed func(*this); - return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); - } - - //! Return stream line of a 3d vector field. - /** - \param func Vector field function. - \param x X-coordinate of the starting point of the streamline. - \param y Y-coordinate of the starting point of the streamline. - \param z Z-coordinate of the starting point of the streamline. - \param L Streamline length. - \param dl Streamline length increment. - \param interpolation_type Type of interpolation. Can be { 0=nearest int | 1=linear | 2=2nd-order RK | 3=4th-order RK. }. - \param is_backward_tracking Tells if the streamline is estimated forward or backward. - \param is_oriented_only Tells if the direction of the vectors must be ignored. - \param x0 X-coordinate of the first bounding-box vertex. - \param y0 Y-coordinate of the first bounding-box vertex. - \param z0 Z-coordinate of the first bounding-box vertex. - \param x1 X-coordinate of the second bounding-box vertex. - \param y1 Y-coordinate of the second bounding-box vertex. - \param z1 Z-coordinate of the second bounding-box vertex. - **/ - template - static CImg streamline(const tfunc& func, - const float x, const float y, const float z, - const float L=256, const float dl=0.1f, - const unsigned int interpolation_type=2, const bool is_backward_tracking=false, - const bool is_oriented_only=false, - const float x0=0, const float y0=0, const float z0=0, - const float x1=0, const float y1=0, const float z1=0) { - if (dl<=0) - throw CImgArgumentException("CImg<%s>::streamline(): Invalid specified integration length %g " - "(should be >0).", - pixel_type(), - dl); - - const bool is_bounded = (x0!=x1 || y0!=y1 || z0!=z1); - if (L<=0 || (is_bounded && (xx1 || yy1 || zz1))) return CImg(); - const unsigned int size_L = (unsigned int)cimg::round(L/dl+1); - CImg coordinates(size_L,3); - const float dl2 = dl/2; - float - *ptr_x = coordinates.data(0,0), - *ptr_y = coordinates.data(0,1), - *ptr_z = coordinates.data(0,2), - pu = (float)(dl*func(x,y,z,0)), - pv = (float)(dl*func(x,y,z,1)), - pw = (float)(dl*func(x,y,z,2)), - X = x, Y = y, Z = z; - - switch (interpolation_type) { - case 0 : { // Nearest integer interpolation. - cimg_forX(coordinates,l) { - *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; - const int - xi = (int)(X>0?X+0.5f:X-0.5f), - yi = (int)(Y>0?Y+0.5f:Y-0.5f), - zi = (int)(Z>0?Z+0.5f:Z-0.5f); - float - u = (float)(dl*func((float)xi,(float)yi,(float)zi,0)), - v = (float)(dl*func((float)xi,(float)yi,(float)zi,1)), - w = (float)(dl*func((float)xi,(float)yi,(float)zi,2)); - if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } - if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } - if (is_bounded && (Xx1 || Yy1 || Zz1)) break; - } - } break; - case 1 : { // First-order interpolation. - cimg_forX(coordinates,l) { - *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; - float - u = (float)(dl*func(X,Y,Z,0)), - v = (float)(dl*func(X,Y,Z,1)), - w = (float)(dl*func(X,Y,Z,2)); - if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } - if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } - if (is_bounded && (Xx1 || Yy1 || Zz1)) break; - } - } break; - case 2 : { // Second order interpolation. - cimg_forX(coordinates,l) { - *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; - float - u0 = (float)(dl2*func(X,Y,Z,0)), - v0 = (float)(dl2*func(X,Y,Z,1)), - w0 = (float)(dl2*func(X,Y,Z,2)); - if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } - float - u = (float)(dl*func(X+u0,Y+v0,Z+w0,0)), - v = (float)(dl*func(X+u0,Y+v0,Z+w0,1)), - w = (float)(dl*func(X+u0,Y+v0,Z+w0,2)); - if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } - if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } - if (is_bounded && (Xx1 || Yy1 || Zz1)) break; - } - } break; - default : { // Fourth order interpolation. - cimg_forX(coordinates,x) { - *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; - float - u0 = (float)(dl2*func(X,Y,Z,0)), - v0 = (float)(dl2*func(X,Y,Z,1)), - w0 = (float)(dl2*func(X,Y,Z,2)); - if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } - float - u1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,0)), - v1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,1)), - w1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,2)); - if (is_oriented_only && u1*pu + v1*pv + w1*pw<0) { u1 = -u1; v1 = -v1; w1 = -w1; } - float - u2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,0)), - v2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,1)), - w2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,2)); - if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u2 = -u2; v2 = -v2; w2 = -w2; } - float - u3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,0)), - v3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,1)), - w3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,2)); - if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u3 = -u3; v3 = -v3; w3 = -w3; } - const float - u = (u0 + u3)/3 + (u1 + u2)/1.5f, - v = (v0 + v3)/3 + (v1 + v2)/1.5f, - w = (w0 + w3)/3 + (w1 + w2)/1.5f; - if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } - if (is_bounded && (Xx1 || Yy1 || Zz1)) break; - } - } - } - if (ptr_x!=coordinates.data(0,1)) coordinates.resize((int)(ptr_x-coordinates.data()),3,1,1,0); - return coordinates; - } - - //! Return stream line of a 3d vector field \overloading. - static CImg streamline(const char *const expression, - const float x, const float y, const float z, - const float L=256, const float dl=0.1f, - const unsigned int interpolation_type=2, const bool is_backward_tracking=true, - const bool is_oriented_only=false, - const float x0=0, const float y0=0, const float z0=0, - const float x1=0, const float y1=0, const float z1=0) { - _functor4d_streamline_expr func(expression); - return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,is_oriented_only,x0,y0,z0,x1,y1,z1); - } - - struct _functor4d_streamline2d_directed { - const CImg& ref; - _functor4d_streamline2d_directed(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y, const float z, const unsigned int c) const { - return c<2?(float)ref._linear_atXY(x,y,(int)z,c):0; - } - }; - - struct _functor4d_streamline3d_directed { - const CImg& ref; - _functor4d_streamline3d_directed(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y, const float z, const unsigned int c) const { - return (float)ref._linear_atXYZ(x,y,z,c); - } - }; - - struct _functor4d_streamline2d_oriented { - const CImg& ref; - CImg *pI; - _functor4d_streamline2d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,1,2); } - ~_functor4d_streamline2d_oriented() { delete pI; } - float operator()(const float x, const float y, const float z, const unsigned int c) const { -#define _cimg_vecalign2d(i,j) if (I(i,j,0)*I(0,0,0)+I(i,j,1)*I(0,0,1)<0) { I(i,j,0) = -I(i,j,0); I(i,j,1) = -I(i,j,1); } - int - xi = (int)x - (x>=0?0:1), nxi = xi + 1, - yi = (int)y - (y>=0?0:1), nyi = yi + 1, - zi = (int)z; - const float - dx = x - xi, - dy = y - yi; - if (c==0) { - CImg& I = *pI; - if (xi<0) xi = 0; if (nxi<0) nxi = 0; - if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; - if (yi<0) yi = 0; if (nyi<0) nyi = 0; - if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; - I(0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,1) = (float)ref(xi,yi,zi,1); - I(1,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,1) = (float)ref(nxi,yi,zi,1); - I(1,1,0) = (float)ref(nxi,nyi,zi,0); I(1,1,1) = (float)ref(nxi,nyi,zi,1); - I(0,1,0) = (float)ref(xi,nyi,zi,0); I(0,1,1) = (float)ref(xi,nyi,zi,1); - _cimg_vecalign2d(1,0); _cimg_vecalign2d(1,1); _cimg_vecalign2d(0,1); - } - return c<2?(float)pI->_linear_atXY(dx,dy,0,c):0; - } - }; - - struct _functor4d_streamline3d_oriented { - const CImg& ref; - CImg *pI; - _functor4d_streamline3d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,2,3); } - ~_functor4d_streamline3d_oriented() { delete pI; } - float operator()(const float x, const float y, const float z, const unsigned int c) const { -#define _cimg_vecalign3d(i,j,k) if (I(i,j,k,0)*I(0,0,0,0)+I(i,j,k,1)*I(0,0,0,1)+I(i,j,k,2)*I(0,0,0,2)<0) { \ - I(i,j,k,0) = -I(i,j,k,0); I(i,j,k,1) = -I(i,j,k,1); I(i,j,k,2) = -I(i,j,k,2); } - int - xi = (int)x - (x>=0?0:1), nxi = xi + 1, - yi = (int)y - (y>=0?0:1), nyi = yi + 1, - zi = (int)z - (z>=0?0:1), nzi = zi + 1; - const float - dx = x - xi, - dy = y - yi, - dz = z - zi; - if (c==0) { - CImg& I = *pI; - if (xi<0) xi = 0; if (nxi<0) nxi = 0; - if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; - if (yi<0) yi = 0; if (nyi<0) nyi = 0; - if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; - if (zi<0) zi = 0; if (nzi<0) nzi = 0; - if (zi>=ref.depth()) zi = ref.depth()-1; if (nzi>=ref.depth()) nzi = ref.depth()-1; - I(0,0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,0,1) = (float)ref(xi,yi,zi,1); I(0,0,0,2) = (float)ref(xi,yi,zi,2); - I(1,0,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,0,1) = (float)ref(nxi,yi,zi,1); I(1,0,0,2) = (float)ref(nxi,yi,zi,2); - I(1,1,0,0) = (float)ref(nxi,nyi,zi,0); I(1,1,0,1) = (float)ref(nxi,nyi,zi,1); I(1,1,0,2) = (float)ref(nxi,nyi,zi,2); - I(0,1,0,0) = (float)ref(xi,nyi,zi,0); I(0,1,0,1) = (float)ref(xi,nyi,zi,1); I(0,1,0,2) = (float)ref(xi,nyi,zi,2); - I(0,0,1,0) = (float)ref(xi,yi,nzi,0); I(0,0,1,1) = (float)ref(xi,yi,nzi,1); I(0,0,1,2) = (float)ref(xi,yi,nzi,2); - I(1,0,1,0) = (float)ref(nxi,yi,nzi,0); I(1,0,1,1) = (float)ref(nxi,yi,nzi,1); I(1,0,1,2) = (float)ref(nxi,yi,nzi,2); - I(1,1,1,0) = (float)ref(nxi,nyi,nzi,0); I(1,1,1,1) = (float)ref(nxi,nyi,nzi,1); I(1,1,1,2) = (float)ref(nxi,nyi,nzi,2); - I(0,1,1,0) = (float)ref(xi,nyi,nzi,0); I(0,1,1,1) = (float)ref(xi,nyi,nzi,1); I(0,1,1,2) = (float)ref(xi,nyi,nzi,2); - _cimg_vecalign3d(1,0,0); _cimg_vecalign3d(1,1,0); _cimg_vecalign3d(0,1,0); - _cimg_vecalign3d(0,0,1); _cimg_vecalign3d(1,0,1); _cimg_vecalign3d(1,1,1); _cimg_vecalign3d(0,1,1); - } - return (float)pI->_linear_atXYZ(dx,dy,dz,c); - } - }; - - struct _functor4d_streamline_expr { - _cimg_math_parser *mp; - ~_functor4d_streamline_expr() { delete mp; } - _functor4d_streamline_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg::empty(),expr,"streamline"); } - float operator()(const float x, const float y, const float z, const unsigned int c) const { - return (float)mp->eval(x,y,z,c); - } - }; - - //! Return a shared-memory image referencing a range of pixels of the image instance. - /** - \param x0 X-coordinate of the starting pixel. - \param x1 X-coordinate of the ending pixel. - \param y0 Y-coordinate. - \param z0 Z-coordinate. - \param c0 C-coordinate. - **/ - CImg get_shared_points(const unsigned int x0, const unsigned int x1, - const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) { - const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", - cimg_instance, - x0,x1,y0,z0,c0); - - return CImg(_data+beg,x1-x0+1,1,1,1,true); - } - - //! Return a shared-memory image referencing a range of pixels of the image instance \const. - const CImg get_shared_points(const unsigned int x0, const unsigned int x1, - const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) const { - const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", - cimg_instance, - x0,x1,y0,z0,c0); - - return CImg(_data+beg,x1-x0+1,1,1,1,true); - } - - //! Return a shared-memory image referencing a range of rows of the image instance. - /** - \param y0 Y-coordinate of the starting row. - \param y1 Y-coordinate of the ending row. - \param z0 Z-coordinate. - \param c0 C-coordinate. - **/ - CImg get_shared_rows(const unsigned int y0, const unsigned int y1, - const unsigned int z0=0, const unsigned int c0=0) { - const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", - cimg_instance, - _width-1,y0,y1,z0,c0); - - return CImg(_data+beg,_width,y1-y0+1,1,1,true); - } - - //! Return a shared-memory image referencing a range of rows of the image instance \const. - const CImg get_shared_rows(const unsigned int y0, const unsigned int y1, - const unsigned int z0=0, const unsigned int c0=0) const { - const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", - cimg_instance, - _width-1,y0,y1,z0,c0); - - return CImg(_data+beg,_width,y1-y0+1,1,1,true); - } - - //! Return a shared-memory image referencing one row of the image instance. - /** - \param y0 Y-coordinate. - \param z0 Z-coordinate. - \param c0 C-coordinate. - **/ - CImg get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) { - return get_shared_rows(y0,y0,z0,c0); - } - - //! Return a shared-memory image referencing one row of the image instance \const. - const CImg get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) const { - return get_shared_rows(y0,y0,z0,c0); - } - - //! Return a shared memory image referencing a range of slices of the image instance. - /** - \param z0 Z-coordinate of the starting slice. - \param z1 Z-coordinate of the ending slice. - \param c0 C-coordinate. - **/ - CImg get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) { - const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", - cimg_instance, - _width-1,_height-1,z0,z1,c0); - - return CImg(_data+beg,_width,_height,z1-z0+1,1,true); - } - - //! Return a shared memory image referencing a range of slices of the image instance \const. - const CImg get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) const { - const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", - cimg_instance, - _width-1,_height-1,z0,z1,c0); - - return CImg(_data+beg,_width,_height,z1-z0+1,1,true); - } - - //! Return a shared-memory image referencing one slice of the image instance. - /** - \param z0 Z-coordinate. - \param c0 C-coordinate. - **/ - CImg get_shared_slice(const unsigned int z0, const unsigned int c0=0) { - return get_shared_slices(z0,z0,c0); - } - - //! Return a shared-memory image referencing one slice of the image instance \const. - const CImg get_shared_slice(const unsigned int z0, const unsigned int c0=0) const { - return get_shared_slices(z0,z0,c0); - } - - //! Return a shared-memory image referencing a range of channels of the image instance. - /** - \param c0 C-coordinate of the starting channel. - \param c1 C-coordinate of the ending channel. - **/ - CImg get_shared_channels(const unsigned int c0, const unsigned int c1) { - const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", - cimg_instance, - _width-1,_height-1,_depth-1,c0,c1); - - return CImg(_data+beg,_width,_height,_depth,c1-c0+1,true); - } - - //! Return a shared-memory image referencing a range of channels of the image instance \const. - const CImg get_shared_channels(const unsigned int c0, const unsigned int c1) const { - const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); - if (beg>end || beg>=size() || end>=size()) - throw CImgArgumentException(_cimg_instance - "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", - cimg_instance, - _width-1,_height-1,_depth-1,c0,c1); - - return CImg(_data+beg,_width,_height,_depth,c1-c0+1,true); - } - - //! Return a shared-memory image referencing one channel of the image instance. - /** - \param c0 C-coordinate. - **/ - CImg get_shared_channel(const unsigned int c0) { - return get_shared_channels(c0,c0); - } - - //! Return a shared-memory image referencing one channel of the image instance \const. - const CImg get_shared_channel(const unsigned int c0) const { - return get_shared_channels(c0,c0); - } - - //! Return a shared-memory version of the image instance. - CImg get_shared() { - return CImg(_data,_width,_height,_depth,_spectrum,true); - } - - //! Return a shared-memory version of the image instance \const. - const CImg get_shared() const { - return CImg(_data,_width,_height,_depth,_spectrum,true); - } - - //! Split image into a list along specified axis. - /** - \param axis Splitting axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \param nb Number of splitted parts. - \note - - If \c nb==0, there are as much splitted parts as the image size along the specified axis. - - If \c nb<=0, instance image is splitted into blocs of -\c nb pixel wide. - - If \c nb>0, instance image is splitted into \c nb blocs. - **/ - CImgList get_split(const char axis, const int nb=0) const { - CImgList res; - if (is_empty()) return res; - const char _axis = cimg::uncase(axis); - - if (nb<=0) { // Split by bloc size. - const unsigned int dp = (unsigned int)(nb?-nb:1); - int p = 0; - switch (_axis) { - case 'x': { - for (int pe=_width-dp; psiz) - throw CImgArgumentException(_cimg_instance - "get_split(): Instance cannot be split along %c-axis into %u blocs.", - cimg_instance, - axis,nb); - int err = (int)siz; - unsigned int _p = 0; - switch (_axis) { - case 'x' : { - cimg_forX(*this,p) if ((err-=nb)<=0) { - get_crop(_p,0,0,0,p,_height-1,_depth-1,_spectrum-1).move_to(res); - err+=(int)siz; - _p=p+1; - } - } break; - case 'y' : { - cimg_forY(*this,p) if ((err-=nb)<=0) { - get_crop(0,_p,0,0,_width-1,p,_depth-1,_spectrum-1).move_to(res); - err+=(int)siz; - _p=p+1; - } - } break; - case 'z' : { - cimg_forZ(*this,p) if ((err-=nb)<=0) { - get_crop(0,0,_p,0,_width-1,_height-1,p,_spectrum-1).move_to(res); - err+=(int)siz; - _p=p+1; - } - } break; - default : { - cimg_forC(*this,p) if ((err-=nb)<=0) { - get_crop(0,0,0,_p,_width-1,_height-1,_depth-1,p).move_to(res); - err+=(int)siz; - _p=p+1; - } - } - } - } - return res; - } - - //! Split image into a list of one-column vectors, according to a specified splitting value. - /** - \param value Splitting value. - \param keep_values Tells if the splitting value must be kept in the splitted blocs. - \param is_shared Tells if the splitted blocs have shared memory buffers. - **/ - CImgList get_split(const T value, const bool keep_values, const bool is_shared) const { - CImgList res; - if (is_empty()) return res; - for (const T *ps = _data, *_ps = ps, *const pe = end(); ps(ps,1,siz,1,1,is_shared),~0U,is_shared); - ps = _ps; - while (_ps(ps,1,siz,1,1,is_shared),~0U,is_shared); - ps = _ps; - } - return res; - } - - //! Split image into a list of one-column vectors, according to a specified splitting value sequence. - /** - \param values Splitting value sequence. - \param keep_values Tells if the splitting sequence must be kept in the splitted blocs. - \param is_shared Tells if the splitted blocs have shared memory buffers. - **/ - template - CImgList get_split(const CImg& values, const bool keep_values, const bool is_shared) const { - CImgList res; - if (is_empty()) return res; - if (!values) return CImgList(*this); - if (values.size()==1) return get_split(*values,keep_values,is_shared); - const t *pve = values.end(); - for (const T *ps = _data, *_ps = ps, *const pe = end(); ps(ps,1,siz,1,1,is_shared),~0U,is_shared); // If match found. - ps = _ps; - - // Try to find non-match from current position. - do { - pv = values._data; - while (_ps(ps,1,siz,1,1,is_shared),~0U,is_shared); - ps = _ps; - } - return res; - } - - //! Split the image into a list of one-column vectors each having same values. - CImgList get_split(const bool is_shared) const { - CImgList res; - if (is_empty()) return res; - T *p0 = _data, current = *p0; - cimg_for(*this,p,T) if (*p!=current) { res.insert(CImg(p0,1,p-p0,1,1,is_shared),~0U,is_shared); p0 = p; current = *p; } - res.insert(CImg(p0,1,end()-p0,1,1,is_shared),~0U,is_shared); - return res; - } - - //! Append two images along specified axis. - /** - \param img Image to append with instance image. - \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Append alignment in \c [0,1]. - **/ - template - CImg& append(const CImg& img, const char axis='x', const float align=0) { - if (is_empty()) return assign(img,false); - if (!img) return *this; - return CImgList(*this,true).insert(img).get_append(axis,align).move_to(*this); - } - - //! Append two images along specified axis \specialization. - CImg& append(const CImg& img, const char axis='x', const float align=0) { - if (is_empty()) return assign(img,false); - if (!img) return *this; - return CImgList(*this,img,true).get_append(axis,align).move_to(*this); - } - - //! Append two images along specified axis \const. - template - CImg<_cimg_Tt> get_append(const CImg& img, const char axis='x', const float align=0) const { - if (is_empty()) return +img; - if (!img) return +*this; - return CImgList<_cimg_Tt>(*this,true).insert(img).get_append(axis,align); - } - - //! Append two images along specified axis \specialization. - CImg get_append(const CImg& img, const char axis='x', const float align=0) const { - if (is_empty()) return +img; - if (!img) return +*this; - return CImgList(*this,img,true).get_append(axis,align); - } - - //@} - //--------------------------------------- - // - //! \name Filtering / Transforms - //@{ - //--------------------------------------- - - //! Correlate image by a mask. - /** - \param mask = the correlation kernel. - \param boundary_conditions = the border condition type (0=zero, 1=dirichlet) - \param is_normalized = enable local normalization. - \note - - The correlation of the image instance \p *this by the mask \p mask is defined to be: - res(x,y,z) = sum_{i,j,k} (*this)(x+i,y+j,z+k)*mask(i,j,k). - **/ - template - CImg& correlate(const CImg& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { - if (is_empty() || !mask) return *this; - return get_correlate(mask,boundary_conditions,is_normalized).move_to(*this); - } - - //! Correlate image by a mask \newinstance. - template - CImg<_cimg_Ttfloat> get_correlate(const CImg& mask, const unsigned int boundary_conditions=1, - const bool is_normalized=false) const { - if (is_empty() || !mask) return *this; - typedef _cimg_Ttfloat Ttfloat; - CImg res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); - if (boundary_conditions && mask._width==mask._height && ((mask._depth==1 && mask._width<=5) || (mask._depth==mask._width && mask._width<=3))) { - // A special optimization is done for 2x2, 3x3, 4x4, 5x5, 2x2x2 and 3x3x3 mask (with boundary_conditions=1) - Ttfloat *ptrd = res._data; - switch (mask._depth) { - case 3 : { - T I[27] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_for3x3x3(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + - I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + - I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + - I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + - I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + - I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + - I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + - I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + - I[24]*I[24] + I[25]*I[25] + I[26]*I[26]); - *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + - I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + - I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + - I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + - I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + - I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + - I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + - I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26])/std::sqrt(N):0); - } - } else cimg_for3x3x3(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + - I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + - I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + - I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + - I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + - I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + - I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + - I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26]); - } - } break; - case 2 : { - T I[8] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_for2x2x2(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + - I[2]*I[2] + I[3]*I[3] + - I[4]*I[4] + I[5]*I[5] + - I[6]*I[6] + I[7]*I[7]); - *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + - I[2]*_mask[2] + I[3]*_mask[3] + - I[4]*_mask[4] + I[5]*_mask[5] + - I[6]*_mask[6] + I[7]*_mask[7])/std::sqrt(N):0); - } - } else cimg_for2x2x2(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + - I[2]*_mask[2] + I[3]*_mask[3] + - I[4]*_mask[4] + I[5]*_mask[5] + - I[6]*_mask[6] + I[7]*_mask[7]); - } - } break; - default : - case 1 : - switch (mask._width) { - case 6 : { - T I[36] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_forZ(_img,z) cimg_for6x6(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + - I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + - I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + - I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + - I[24]*I[24] + I[25]*I[25] + I[26]*I[26] + I[27]*I[27] + I[28]*I[28] + I[29]*I[29] + - I[30]*I[30] + I[31]*I[31] + I[32]*I[32] + I[33]*I[33] + I[34]*I[34] + I[35]*I[35]); - *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + - I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + - I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + - I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + - I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35])/std::sqrt(N):0); - } - } else cimg_forZ(_img,z) cimg_for6x6(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + - I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + - I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + - I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + - I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35]); - } - } break; - case 5 : { - T I[25] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_forZ(_img,z) cimg_for5x5(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + - I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + - I[10]*I[10] + I[11]*I[11] + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + - I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + I[18]*I[18] + I[19]*I[19] + - I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + I[24]*I[24]); - *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + - I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + - I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + - I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + - I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24])/std::sqrt(N):0); - } - } else cimg_forZ(_img,z) cimg_for5x5(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + - I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + - I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + - I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + - I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24]); - } - } break; - case 4 : { - T I[16] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_forZ(_img,z) cimg_for4x4(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + - I[ 4]*I[ 4] + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + - I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + - I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15]); - *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + - I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + - I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15])/std::sqrt(N):0); - } - } else cimg_forZ(_img,z) cimg_for4x4(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + - I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + - I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + - I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15]); - } - } break; - case 3 : { - T I[9] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_forZ(_img,z) cimg_for3x3(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + I[2]*I[2] + - I[3]*I[3] + I[4]*I[4] + I[5]*I[5] + - I[6]*I[6] + I[7]*I[7] + I[8]*I[8]); - *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + - I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + - I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8])/std::sqrt(N):0); - } - } else cimg_forZ(_img,z) cimg_for3x3(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + - I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + - I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8]); - } - } break; - case 2 : { - T I[4] = { 0 }; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - cimg_forZ(_img,z) cimg_for2x2(_img,x,y,z,0,I,T) { - const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + - I[2]*I[2] + I[3]*I[3]); - *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + - I[2]*_mask[2] + I[3]*_mask[3])/std::sqrt(N):0); - } - } else cimg_forZ(_img,z) cimg_for2x2(_img,x,y,z,0,I,T) - *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + - I[2]*_mask[2] + I[3]*_mask[3]); - } - } break; - case 1 : - if (is_normalized) res.fill(1); - else cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - res.get_shared_channel(c).assign(_img)*=_mask[0]; - } - break; - } - } - } else { // Generic version for other masks and borders conditions. - const int - mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, - mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), - mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; - cimg_forC(res,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { // Normalized correlation. - const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; - for (int z = mz1; z=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Ttfloat val = 0, N = 0; - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const Ttfloat _val = (Ttfloat)_img._atXYZ(x+xm,y+ym,z+zm); - val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); - N+=_val*_val; - } - N*=M; - res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); - } - else - cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Ttfloat val = 0, N = 0; - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const Ttfloat _val = (Ttfloat)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); - N+=_val*_val; - } - N*=M; - res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); - } - } else { // Classical correlation. - for (int z = mz1; z=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Ttfloat val = 0; - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) - val+=_img._atXYZ(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); - res(x,y,z,c) = (Ttfloat)val; - } - else - cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Ttfloat val = 0; - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) - val+=_img.atXYZ(x+xm,y+ym,z+zm,0,0)*_mask(mx1+xm,my1+ym,mz1+zm); - res(x,y,z,c) = (Ttfloat)val; - } - } - } - } - return res; - } - - //! Convolve image by a mask. - /** - \param mask = the correlation kernel. - \param boundary_conditions = the border condition type (0=zero, 1=dirichlet) - \param is_normalized = enable local normalization. - \note - - The result \p res of the convolution of an image \p img by a mask \p mask is defined to be: - res(x,y,z) = sum_{i,j,k} img(x-i,y-j,z-k)*mask(i,j,k) - **/ - template - CImg& convolve(const CImg& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { - if (is_empty() || !mask) return *this; - return get_convolve(mask,boundary_conditions,is_normalized).move_to(*this); - } - - //! Convolve image by a mask \newinstance. - template - CImg<_cimg_Ttfloat> get_convolve(const CImg& mask, const unsigned int boundary_conditions=1, - const bool is_normalized=false) const { - if (is_empty() || !mask) return *this; - return get_correlate(CImg(mask._data,mask.size(),1,1,1,true).get_mirror('x').resize(mask,-1),boundary_conditions,is_normalized); - } - - //! Erode image by a structuring element. - /** - \param mask Structuring element. - \param boundary_conditions Boundary conditions. - \param is_normalized Tells if the erosion is locally normalized. - **/ - template - CImg& erode(const CImg& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { - if (is_empty() || !mask) return *this; - return get_erode(mask,boundary_conditions,is_normalized).move_to(*this); - } - - //! Erode image by a structuring element \newinstance. - template - CImg<_cimg_Tt> get_erode(const CImg& mask, const unsigned int boundary_conditions=1, - const bool is_normalized=false) const { - if (is_empty() || !mask) return *this; - typedef _cimg_Tt Tt; - CImg res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); - const int - mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, - mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), - mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; - cimg_forC(*this,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { // Normalized erosion. - for (int z = mz1; z::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) + mval); - if (mval && cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt min_val = cimg::type::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) + mval); - if (mval && cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt min_val = cimg::type::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) + mval); - if (mval && cval::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt min_val = cimg::type::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt min_val = cimg::type::max(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval& erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { - if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; - if (sx>1 && _width>1) { // Along X-axis. - const int L = width(), off = 1, s = (int)sx, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forYZC(*this,y,z,c) { - const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val1 && _height>1) { // Along Y-axis. - const int L = height(), off = width(), s = (int)sy, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forXZC(*this,x,z,c) { - const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val1 && _depth>1) { // Along Z-axis. - const int L = depth(), off = width()*height(), s = (int)sz, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forXYC(*this,x,y,c) { - const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val get_erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { - return (+*this).erode(sx,sy,sz); - } - - //! Erode the image by a square structuring element of specified size. - /** - \param s Size of the structuring element. - **/ - CImg& erode(const unsigned int s) { - return erode(s,s,s); - } - - //! Erode the image by a square structuring element of specified size \newinstance. - CImg get_erode(const unsigned int s) const { - return (+*this).erode(s); - } - - //! Dilate image by a structuring element. - /** - \param mask Structuring element. - \param boundary_conditions Boundary conditions. - \param is_normalized Tells if the erosion is locally normalized. - **/ - template - CImg& dilate(const CImg& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { - if (is_empty() || !mask) return *this; - return get_dilate(mask,boundary_conditions,is_normalized).move_to(*this); - } - - //! Dilate image by a structuring element \newinstance. - template - CImg<_cimg_Tt> get_dilate(const CImg& mask, const unsigned int boundary_conditions=1, - const bool is_normalized=false) const { - if (is_empty() || !mask) return *this; - typedef _cimg_Tt Tt; - CImg res(_width,_height,_depth,_spectrum); - const int - mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, - mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), - mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; - cimg_forC(*this,c) { - const CImg _img = get_shared_channel(c%_spectrum); - const CImg _mask = mask.get_shared_channel(c%mask._spectrum); - if (is_normalized) { // Normalized dilation. - for (int z = mz1; z::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) - mval); - if (mval && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - if (boundary_conditions) - cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt max_val = cimg::type::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) - mval); - if (mval && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - else - cimg_forYZ(*this,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt max_val = cimg::type::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) - mval); - if (mval && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - } else { // Classical dilation. - for (int z = mz1; z::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - if (boundary_conditions) - cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt max_val = cimg::type::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - else - cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { - Tt max_val = cimg::type::min(); - for (int zm = -mz1; zm<=mz2; ++zm) - for (int ym = -my1; ym<=my2; ++ym) - for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; - } - res(x,y,z,c) = max_val; - } - } - } - return res; - } - - //! Dilate image by a rectangular structuring element of specified size. - /** - \param sx Width of the structuring element. - \param sy Height of the structuring element. - \param sz Depth of the structuring element. - **/ - CImg& dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { - if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; - if (sx>1 && _width>1) { // Along X-axis. - const int L = width(), off = 1, s = (int)sx, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forYZC(*this,y,z,c) { - const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } - for (int p = L - s - 1; p>0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } - nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; - } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } - *(ptrd++) = cur; - } - ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; - for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; - for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } - T *pd = data(0,y,z,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } - } - } - - if (sy>1 && _height>1) { // Along Y-axis. - const int L = height(), off = width(), s = (int)sy, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forXZC(*this,x,z,c) { - const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } - for (int p = L - s - 1; p>0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } - nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; - } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } - *(ptrd++) = cur; - } - ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; - for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; - for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } - T *pd = data(x,0,z,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } - } - } - - if (sz>1 && _depth>1) { // Along Z-axis. - const int L = depth(), off = width()*height(), s = (int)sz, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; - CImg buf(L); - T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; - cimg_forXYC(*this,x,y,c) { - const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; - ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; - for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; - for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } - for (int p = L - s - 1; p>0; --p) { - const T val = *ptrs; ptrs+=off; - if (is_first) { - const T *nptrs = ptrs - off; cur = val; - for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } - nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; - } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } - *(ptrd++) = cur; - } - ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; - for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; - for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } - T *pd = data(x,y,0,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } - } - } - return *this; - } - - //! Dilate image by a rectangular structuring element of specified size \newinstance. - CImg get_dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { - return (+*this).dilate(sx,sy,sz); - } - - //! Dilate image by a square structuring element of specified size. - /** - \param s Size of the structuring element. - **/ - CImg& dilate(const unsigned int s) { - return dilate(s,s,s); - } - - //! Dilate image by a square structuring element of specified size \newinstance. - CImg get_dilate(const unsigned int s) const { - return (+*this).dilate(s); - } - - //! Compute watershed transform. - /** - \param priority Priority map. - \param fill_lines Tells if watershed lines must be filled or not. - \note Non-zero values of the instance instance are propagated to zero-valued ones according to specified the priority map. - **/ - template - CImg& watershed(const CImg& priority, const bool fill_lines=true) { - if (is_empty()) return *this; - if (!is_sameXYZ(priority)) - throw CImgArgumentException(_cimg_instance - "watershed(): image instance and specified priority (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance,priority._width,priority._height,priority._depth,priority._spectrum,priority._data); - if (_spectrum!=1) { cimg_forC(*this,c) get_shared_channel(c).watershed(priority.get_shared_channel(c%priority._spectrum),fill_lines); return *this; } - - CImg is_queued(_width,_height,_depth,1,0); - CImg::type> Q; - unsigned int sizeQ = 0; - - // Find seed points and insert them in priority queue. - const T *ptrs = _data; - cimg_forXYZ(*this,x,y,z) if (*(ptrs++)) { - if (x-1>=0 && !(*this)(x-1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - if (x+1=0 && !(*this)(x,y-1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - if (y+1=0 && !(*this)(x,y,z-1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - if (z+1=0) { - if ((*this)(x-1,y,z)) { if (!label) label = (unsigned int)(*this)(x-1,y,z); else if (label!=(*this)(x-1,y,z)) is_same_label = false; } - else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - } - if (x+1=0) { - if ((*this)(x,y-1,z)) { if (!label) label = (unsigned int)(*this)(x,y-1,z); else if (label!=(*this)(x,y-1,z)) is_same_label = false; } - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - } - if (y+1=0) { - if ((*this)(x,y,z-1)) { if (!label) label = (unsigned int)(*this)(x,y,z-1); else if (label!=(*this)(x,y,z-1)) is_same_label = false; } - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - } - if (z+1=0 && (*this)(x-1,y,z)) || (x+1=0 && (*this)(x,y-1,z)) || (y+1=0 && (*this)(x,y,z-1)) || (z+1>depth() && (*this)(x,y,z+1)))) - Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z),x,y,z); - - // Start line filling process. - while (sizeQ) { - const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); - Q._priority_queue_remove(sizeQ); - t pmax = cimg::type::min(); - int xmax = 0, ymax = 0, zmax = 0; - if (x-1>=0) { - if ((*this)(x-1,y,z)) { if (priority(x-1,y,z)>pmax) { pmax = priority(x-1,y,z); xmax = x-1; ymax = y; zmax = z; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - } - if (x+1pmax) { pmax = priority(x+1,y,z); xmax = x+1; ymax = y; zmax = z; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); - } - if (y-1>=0) { - if ((*this)(x,y-1,z)) { if (priority(x,y-1,z)>pmax) { pmax = priority(x,y-1,z); xmax = x; ymax = y-1; zmax = z; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - } - if (y+1pmax) { pmax = priority(x,y+1,z); xmax = x; ymax = y+1; zmax = z; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); - } - if (z-1>=0) { - if ((*this)(x,y,z-1)) { if (priority(x,y,z-1)>pmax) { pmax = priority(x,y,z-1); xmax = x; ymax = y; zmax = z-1; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - } - if (z+1pmax) { pmax = priority(x,y,z+1); xmax = x; ymax = y; zmax = z+1; }} - else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); - } - (*this)(x,y,z) = (*this)(xmax,ymax,zmax); - } - } - return *this; - } - - //! Compute watershed transform \newinstance. - template - CImg get_watershed(const CImg& priority, const bool fill_lines=true) const { - return (+*this).watershed(priority,fill_lines); - } - - // [internal] Insert/Remove items in priority queue, for watershed/distance transforms. - template - bool _priority_queue_insert(CImg& is_queued, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { - if (is_queued(x,y,z)) return false; - is_queued(x,y,z) = true; - if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } - (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; - for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { - cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); - cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); - } - return true; - } - - CImg& _priority_queue_remove(unsigned int& siz) { - (*this)(0,0) = (*this)(--siz,0); (*this)(0,1) = (*this)(siz,1); (*this)(0,2) = (*this)(siz,2); (*this)(0,3) = (*this)(siz,3); - const float value = (*this)(0,0); - for (unsigned int pos = 0, left = 0, right = 0; - ((right=2*(pos+1),(left=right-1))(*this)(right,0)) { - cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); - cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); - pos = left; - } else { - cimg::swap((*this)(pos,0),(*this)(right,0)); cimg::swap((*this)(pos,1),(*this)(right,1)); - cimg::swap((*this)(pos,2),(*this)(right,2)); cimg::swap((*this)(pos,3),(*this)(right,3)); - pos = right; - } - } else { - cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); - cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); - pos = left; - } - } - return *this; - } - - //! Apply recursive Deriche filter. - /** - \param sigma Standard deviation of the filter. - \param order Order of the filter. Can be { 0=smooth-filter | 1=1st-derivative | 2=2nd-derivative }. - \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. - **/ - CImg& deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) { -#define _cimg_deriche_apply \ - Tfloat *ptrY = Y._data, yb = 0, yp = 0; \ - T xp = (T)0; \ - if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } \ - for (int m = 0; m=0; --n) { \ - const T xc = *(ptrX-=off); \ - const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); \ - xa = xn; xn = xc; ya = yn; yn = yc; \ - *ptrX = (T)(*(--ptrY)+yc); \ - } - const char naxis = cimg::uncase(axis); - const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; - if (is_empty() || (nsigma<0.1f && !order)) return *this; - const float - nnsigma = nsigma<0.1f?0.1f:nsigma, - alpha = 1.695f/nnsigma, - ema = (float)std::exp(-alpha), - ema2 = (float)std::exp(-2*alpha), - b1 = -2*ema, - b2 = ema2; - float a0 = 0, a1 = 0, a2 = 0, a3 = 0, coefp = 0, coefn = 0; - switch (order) { - case 0 : { - const float k = (1-ema)*(1-ema)/(1+2*alpha*ema-ema2); - a0 = k; - a1 = k*(alpha-1)*ema; - a2 = k*(alpha+1)*ema; - a3 = -k*ema2; - } break; - case 1 : { - const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema+1)*ema); - a0 = a3 = 0; - a1 = k*ema; - a2 = -a1; - } break; - case 2 : { - const float - ea = (float)std::exp(-alpha), - k = -(ema2-1)/(2*alpha*ema), - kn = (-2*(-1+3*ea-3*ea*ea+ea*ea*ea)/(3*ea+1+3*ea*ea+ea*ea*ea)); - a0 = kn; - a1 = -kn*(1+k*alpha)*ema; - a2 = kn*(1-k*alpha)*ema; - a3 = -kn*ema2; - } break; - default : - throw CImgArgumentException(_cimg_instance - "deriche(): Invalid specified filter order %u " - "(should be { 0=smoothing | 1=1st-derivative | 2=2nd-derivative }).", - cimg_instance, - order); - } - coefp = (a0+a1)/(1+b1+b2); - coefn = (a2+a3)/(1+b1+b2); - switch (naxis) { - case 'x' : { - const int N = _width; - const unsigned long off = 1U; - CImg Y(N); - cimg_forYZC(*this,y,z,c) { T *ptrX = data(0,y,z,c); _cimg_deriche_apply; } - } break; - case 'y' : { - const int N = _height; - const unsigned long off = (unsigned long)_width; - CImg Y(N); - cimg_forXZC(*this,x,z,c) { T *ptrX = data(x,0,z,c); _cimg_deriche_apply; } - } break; - case 'z' : { - const int N = _depth; - const unsigned long off = (unsigned long)_width*_height; - CImg Y(N); - cimg_forXYC(*this,x,y,c) { T *ptrX = data(x,y,0,c); _cimg_deriche_apply; } - } break; - default : { - const int N = _spectrum; - const unsigned long off = (unsigned long)_width*_height*_depth; - CImg Y(N); - cimg_forXYZ(*this,x,y,z) { T *ptrX = data(x,y,z,0); _cimg_deriche_apply; } - } - } - return *this; - } - - //! Apply recursive Deriche filter \newinstance. - CImg get_deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) const { - return CImg(*this,false).deriche(sigma,order,axis,boundary_conditions); - } - - // [internal] Apply a recursive filter (used by CImg::vanvliet()). - /** - \param ptr the pointer of the data - \param filter the coefficient of the filter in the following order [n,n-1,n-2,n-3]. - \param N size of the data - \param off the offset between two data point - \param order the order of the filter 0 (smoothing), 1st derivtive, 2nd derivative, 3rd derivative - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. - \note dirichlet boundary conditions have a strange behavior. And - boundary condition should be corrected using Bill Triggs method (IEEE trans on Sig Proc 2005). - **/ - template - static void _cimg_recursive_apply(T *data, const Tfloat filter[], const int N, const unsigned long off, const int order, const bool boundary_conditions) { - Tfloat val[K]; // res[n,n-1,n-2,n-3,..] or res[n,n+1,n+2,n+3,..] - switch (order) { - case 0 : { - for (int pass = 0; pass<2; ++pass) { - for (int k = 1; k0; --k) val[k] = val[k-1]; - } - if (!pass) data-=off; - } - } break; - case 1 : { - Tfloat x[3]; // [front,center,back] - for (int pass = 0; pass<2; ++pass) { - for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); - for (int k = 0; k0; --k) x[k] = x[k-1]; - } else data-=off; - for (int k = K-1; k>0; --k) val[k] = val[k-1]; - } - *data = (T)0; - } - } break; - case 2: { - Tfloat x[3]; // [front,center,back] - for (int pass = 0; pass<2; ++pass) { - for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); - for (int k = 0; k0; --k) x[k] = x[k-1]; - for (int k = K-1; k>0; --k) val[k] = val[k-1]; - } - *data = (T)0; - } - } break; - case 3: { - Tfloat x[3]; // [front,center,back] - for (int pass = 0; pass<2; ++pass) { - for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); - for (int k = 0; k0; --k) x[k] = x[k-1]; - for (int k = K-1; k>0; --k) val[k] = val[k-1]; - } - *data = (T)0; - } - } break; - } - } - - //! Van Vliet recursive Gaussian filter. - /** - \param sigma standard deviation of the Gaussian filter - \param order the order of the filter 0,1,2,3 - \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. - \note dirichlet boundary condition has a strange behavior - - Ian T. Young, Lucas J. van Vliet, Recursive implementation of the - Gaussian filter, Signal Processing, Volume 44, Issue 2, June 1995, - Pages 139-151, - **/ - CImg& vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) { - if (is_empty()) return *this; - const char naxis = cimg::uncase(axis); - const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; - if (is_empty() || (nsigma<0.1f && !order)) return *this; - const Tfloat - nnsigma = nsigma<0.1f?0.1f:nsigma, - q = (Tfloat)(nnsigma<2.5?3.97156-4.14554*std::sqrt(1-0.2689*nnsigma):0.98711*nnsigma-0.96330), - b0 = 1.57825f + 2.44413f*q + 1.4281f*q*q + 0.4222205f*q*q*q, - b1 = (2.44413f*q + 2.85619f*q*q + 1.26661f*q*q*q), - b2 = -(1.4281f*q*q + 1.26661f*q*q*q), - b3 = 0.4222205f*q*q*q, - B = 1.f - (b1 + b2 + b3)/b0; - Tfloat filter[4]; - filter[0] = B; filter[1] = b1/b0; filter[2] = b2/b0; filter[3] = b3/b0; - - switch (naxis) { - case 'x' : { -#ifdef cimg_use_openmp -#pragma omp parallel for collapse(3) -#endif - cimg_forYZC(*this,y,z,c) _cimg_recursive_apply<4>(data(0,y,z,c),filter,_width,1U,order,boundary_conditions); - } break; - case 'y' : { -#ifdef cimg_use_openmp -#pragma omp parallel for collapse(3) -#endif - cimg_forXZC(*this,x,z,c) _cimg_recursive_apply<4>(data(x,0,z,c),filter,_height,(unsigned long)_width,order,boundary_conditions); - } break; - case 'z' : { -#ifdef cimg_use_openmp -#pragma omp parallel for collapse(3) -#endif - cimg_forXYC(*this,x,y,c) _cimg_recursive_apply<4>(data(x,y,0,c),filter,_depth,(unsigned long)(_width*_height),order,boundary_conditions); - } break; - default : { -#ifdef cimg_use_openmp -#pragma omp parallel for collapse(3) -#endif - cimg_forXYZ(*this,x,y,z) _cimg_recursive_apply<4>(data(x,y,z,0),filter,_spectrum,(unsigned long)(_width*_height*_depth),order,boundary_conditions); - } - } - return *this; - } - - //! Blur image using Van Vliet recursive Gaussian filter. \newinstance. - CImg get_vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) const { - return CImg(*this,false).vanvliet(sigma,order,axis,boundary_conditions); - } - - //! Blur image. - /** - \param sigma_x Standard deviation of the blur, along the X-axis. - \param sigma_y Standard deviation of the blur, along the Y-axis. - \param sigma_z Standard deviation of the blur, along the Z-axis. - \param boundary_conditions Boundary conditions. Can be { false=dirichlet | true=neumann }. - \param is_gaussian Tells if the blur uses a gaussian (\c true) or quasi-gaussian (\c false) kernel. - \note - - The blur is computed as a 0-order Deriche filter. This is not a gaussian blur. - - This is a recursive algorithm, not depending on the values of the standard deviations. - \see deriche(), vanvliet(). - **/ - CImg& blur(const float sigma_x, const float sigma_y, const float sigma_z, - const bool boundary_conditions=true, const bool is_gaussian=false) { - if (!is_empty()) { - if (is_gaussian) { - if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); - if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); - if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); - } else { - if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); - if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); - if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); - } - } - return *this; - } - - //! Blur image \newinstance. - CImg get_blur(const float sigma_x, const float sigma_y, const float sigma_z, - const bool boundary_conditions=true, const bool is_gaussian=false) const { - return CImg(*this,false).blur(sigma_x,sigma_y,sigma_z,boundary_conditions,is_gaussian); - } - - //! Blur image isotropically. - /** - \param sigma Standard deviation of the blur. - \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }.a - \see deriche(), vanvliet(). - **/ - CImg& blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) { - const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; - return blur(nsigma,nsigma,nsigma,boundary_conditions,is_gaussian); - } - - //! Blur image isotropically \newinstance. - CImg get_blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) const { - return CImg(*this,false).blur(sigma,boundary_conditions,is_gaussian); - } - - //! Blur image anisotropically, directed by a field of diffusion tensors. - /** - \param G Field of square roots of diffusion tensors/vectors used to drive the smoothing. - \param amplitude Amplitude of the smoothing. - \param dl Spatial discretization. - \param da Angular discretization. - \param gauss_prec Precision of the diffusion process. - \param interpolation_type Interpolation scheme. Can be { 0=nearest-neighbor | 1=linear | 2=Runge-Kutta }. - \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. - **/ - template - CImg& blur_anisotropic(const CImg& G, - const float amplitude=60, const float dl=0.8f, const float da=30, - const float gauss_prec=2, const unsigned int interpolation_type=0, - const bool is_fast_approx=1) { - - // Check arguments and init variables - if (!is_sameXYZ(G) || (G._spectrum!=3 && G._spectrum!=6)) - throw CImgArgumentException(_cimg_instance - "blur_anisotropic(): Invalid specified diffusion tensor field (%u,%u,%u,%u,%p).", - cimg_instance, - G._width,G._height,G._depth,G._spectrum,G._data); - - if (is_empty() || amplitude<=0 || dl<0) return *this; - const bool is_3d = (G._spectrum==6); - T val_min, val_max = max_min(val_min); - - if (da<=0) { // Iterated oriented Laplacians - CImg velocity(_width,_height,_depth,_spectrum); - for (unsigned int iteration = 0; iteration<(unsigned int)amplitude; ++iteration) { - Tfloat *ptrd = velocity._data, veloc_max = 0; - if (is_3d) { // 3d version - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ixx = Incc + Ipcc - 2*Iccc, - ixy = (Innc + Ippc - Inpc - Ipnc)/4, - ixz = (Incn + Ipcp - Incp - Ipcn)/4, - iyy = Icnc + Icpc - 2*Iccc, - iyz = (Icnn + Icpp - Icnp - Icpn)/4, - izz = Iccn + Iccp - 2*Iccc, - veloc = (Tfloat)(G(x,y,z,0)*ixx + 2*G(x,y,z,1)*ixy + 2*G(x,y,z,2)*ixz + G(x,y,z,3)*iyy + 2*G(x,y,z,4)*iyz + G(x,y,z,5)*izz); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } else { // 2d version - CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ixx = Inc + Ipc - 2*Icc, - ixy = (Inn + Ipp - Inp - Ipn)/4, - iyy = Icn + Icp - 2*Icc, - veloc = (Tfloat)(G(x,y,0,0)*ixx + 2*G(x,y,0,1)*ixy + G(x,y,0,2)*iyy); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } - if (veloc_max>0) *this+=(velocity*=dl/veloc_max); - } - } else { // LIC-based smoothing. - const unsigned long whd = (unsigned long)_width*_height*_depth; - const float sqrt2amplitude = (float)std::sqrt(2*amplitude); - const int dx1 = width() - 1, dy1 = height() - 1, dz1 = depth() - 1; - CImg res(_width,_height,_depth,_spectrum,0), W(_width,_height,_depth,is_3d?4:3), val(_spectrum); - int N = 0; - if (is_3d) { // 3d version - for (float phi = (180%(int)da)/2.0f; phi<=180; phi+=da) { - const float phir = (float)(phi*cimg::PI/180), datmp = (float)(da/std::cos(phir)), da2 = datmp<1?360.0f:datmp; - for (float theta = 0; theta<360; (theta+=da2),++N) { - const float - thetar = (float)(theta*cimg::PI/180), - vx = (float)(std::cos(thetar)*std::cos(phir)), - vy = (float)(std::sin(thetar)*std::cos(phir)), - vz = (float)std::sin(phir); - const t - *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2), - *pd = G.data(0,0,0,3), *pe = G.data(0,0,0,4), *pf = G.data(0,0,0,5); - Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2), *pd3 = W.data(0,0,0,3); - cimg_forXYZ(G,xg,yg,zg) { - const t a = *(pa++), b = *(pb++), c = *(pc++), d = *(pd++), e = *(pe++), f = *(pf++); - const float - u = (float)(a*vx + b*vy + c*vz), - v = (float)(b*vx + d*vy + e*vz), - w = (float)(c*vx + e*vy + f*vz), - n = (float)std::sqrt(1e-5+u*u+v*v+w*w), - dln = dl/n; - *(pd0++) = (Tfloat)(u*dln); - *(pd1++) = (Tfloat)(v*dln); - *(pd2++) = (Tfloat)(w*dln); - *(pd3++) = (Tfloat)n; - } - - Tfloat *ptrd = res._data; - cimg_forXYZ(*this,x,y,z) { - val.fill(0); - const float - n = (float)W(x,y,z,3), - fsigma = (float)(n*sqrt2amplitude), - fsigma2 = 2*fsigma*fsigma, - length = gauss_prec*fsigma; - float - S = 0, - X = (float)x, - Y = (float)y, - Z = (float)z; - switch (interpolation_type) { - case 0 : { // Nearest neighbor - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { - const int - cx = (int)(X+0.5f), - cy = (int)(Y+0.5f), - cz = (int)(Z+0.5f); - const float - u = (float)W(cx,cy,cz,0), - v = (float)W(cx,cy,cz,1), - w = (float)W(cx,cy,cz,2); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)(*this)(cx,cy,cz,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,cz,c)); - S+=coef; - } - X+=u; Y+=v; Z+=w; - } - } break; - case 1 : { // Linear interpolation - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { - const float - u = (float)(W._linear_atXYZ(X,Y,Z,0)), - v = (float)(W._linear_atXYZ(X,Y,Z,1)), - w = (float)(W._linear_atXYZ(X,Y,Z,2)); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); - S+=coef; - } - X+=u; Y+=v; Z+=w; - } - } break; - default : { // 2nd order Runge Kutta - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { - const float - u0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,0)), - v0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,1)), - w0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,2)), - u = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,0)), - v = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,1)), - w = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,2)); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); - S+=coef; - } - X+=u; Y+=v; Z+=w; - } - } break; - } - Tfloat *_ptrd = ptrd++; - if (S>0) cimg_forC(res,c) { *_ptrd+=val[c]/S; _ptrd+=whd; } - else cimg_forC(res,c) { *_ptrd+=(Tfloat)((*this)(x,y,z,c)); _ptrd+=whd; } - } - } - } - } else { // 2d LIC algorithm - for (float theta = (360%(int)da)/2.0f; theta<360; (theta+=da),++N) { - const float thetar = (float)(theta*cimg::PI/180), vx = (float)(std::cos(thetar)), vy = (float)(std::sin(thetar)); - const t *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2); - Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2); - cimg_forXY(G,xg,yg) { - const t a = *(pa++), b = *(pb++), c = *(pc++); - const float - u = (float)(a*vx + b*vy), - v = (float)(b*vx + c*vy), - n = (float)std::sqrt(1e-5+u*u+v*v), - dln = dl/n; - *(pd0++) = (Tfloat)(u*dln); - *(pd1++) = (Tfloat)(v*dln); - *(pd2++) = (Tfloat)n; - } - Tfloat *ptrd = res._data; - cimg_forXY(*this,x,y) { - val.fill(0); - const float - n = (float)W(x,y,0,2), - fsigma = (float)(n*sqrt2amplitude), - fsigma2 = 2*fsigma*fsigma, - length = gauss_prec*fsigma; - float - S = 0, - X = (float)x, - Y = (float)y; - switch (interpolation_type) { - case 0 : { // Nearest-neighbor - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { - const int - cx = (int)(X+0.5f), - cy = (int)(Y+0.5f); - const float - u = (float)W(cx,cy,0,0), - v = (float)W(cx,cy,0,1); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)(*this)(cx,cy,0,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,0,c)); - S+=coef; - } - X+=u; Y+=v; - } - } break; - case 1 : { // Linear interpolation - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { - const float - u = (float)(W._linear_atXY(X,Y,0,0)), - v = (float)(W._linear_atXY(X,Y,0,1)); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); - S+=coef; - } - X+=u; Y+=v; - } - } break; - default : { // 2nd-order Runge-kutta interpolation - for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { - const float - u0 = (float)(0.5f*W._linear_atXY(X,Y,0,0)), - v0 = (float)(0.5f*W._linear_atXY(X,Y,0,1)), - u = (float)(W._linear_atXY(X+u0,Y+v0,0,0)), - v = (float)(W._linear_atXY(X+u0,Y+v0,0,1)); - if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } - else { - const float coef = (float)std::exp(-l*l/fsigma2); - cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); - S+=coef; - } - X+=u; Y+=v; - } - } - } - Tfloat *_ptrd = ptrd++; - if (S>0) cimg_forC(res,c) { *_ptrd+=val[c]/S; _ptrd+=whd; } - else cimg_forC(res,c) { *_ptrd+=(Tfloat)((*this)(x,y,0,c)); _ptrd+=whd; } - } - } - } - const Tfloat *ptrs = res._data; - cimg_for(*this,ptrd,T) { const Tfloat val = *(ptrs++)/N; *ptrd = valval_max?val_max:(T)val); } - } - return *this; - } - - //! Blur image anisotropically, directed by a field of diffusion tensors \newinstance. - template - CImg get_blur_anisotropic(const CImg& G, - const float amplitude=60, const float dl=0.8f, const float da=30, - const float gauss_prec=2, const unsigned int interpolation_type=0, - const bool is_fast_approx=true) const { - return (+*this).blur_anisotropic(G,amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); - } - - //! Blur image anisotropically, in an edge-preserving way. - /** - \param amplitude Amplitude of the smoothing. - \param sharpness Sharpness. - \param anisotropy Anisotropy. - \param alpha Standard deviation of the gradient blur. - \param sigma Standard deviation of the structure tensor blur. - \param dl Spatial discretization. - \param da Angular discretization. - \param gauss_prec Precision of the diffusion process. - \param interpolation_type Interpolation scheme. Can be { 0=nearest-neighbor | 1=linear | 2=Runge-Kutta }. - \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. - **/ - CImg& blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, - const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, const float da=30, - const float gauss_prec=2, const unsigned int interpolation_type=0, - const bool is_fast_approx=true) { - return blur_anisotropic(get_diffusion_tensors(sharpness,anisotropy,alpha,sigma,interpolation_type!=3), - amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); - } - - //! Blur image anisotropically, in an edge-preserving way \newinstance. - CImg get_blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, - const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, - const float da=30, const float gauss_prec=2, const unsigned int interpolation_type=0, - const bool is_fast_approx=true) const { - return (+*this).blur_anisotropic(amplitude,sharpness,anisotropy,alpha,sigma,dl,da,gauss_prec,interpolation_type,is_fast_approx); - } - - //! Blur image, with the joint bilateral filter. - /** - \param guide Image used to model the smoothing weights. - \param sigma_x Amount of blur along the X-axis. - \param sigma_y Amount of blur along the Y-axis. - \param sigma_z Amount of blur along the Z-axis. - \param sigma_r Amount of blur along the value axis. - \param bgrid_x Size of the bilateral grid along the X-axis. - \param bgrid_y Size of the bilateral grid along the Y-axis. - \param bgrid_z Size of the bilateral grid along the Z-axis. - \param bgrid_r Size of the bilateral grid along the value axis. - \param interpolation_type Use interpolation for image slicing. - \note This algorithm uses the optimisation technique proposed by S. Paris and F. Durand, in ECCV'2006 - (extended for 3d volumetric images). - **/ - template - CImg& blur_bilateral(const CImg& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, - const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, - const bool interpolation_type=true) { - if (!is_sameXYZ(guide)) - throw CImgArgumentException(_cimg_instance - "blur_bilateral(): Invalid size for specified guide image (%u,%u,%u,%u,%p).", - cimg_instance, - guide._width,guide._height,guide._depth,guide._spectrum,guide._data); - if (is_empty()) return *this; - T m, M = guide.max_min(m); - if (m==M) return *this; - const float range = (float)(M - m); - const unsigned int - bx0 = bgrid_x>=0?bgrid_x:_width*-bgrid_x/100, - by0 = bgrid_y>=0?bgrid_y:_height*-bgrid_y/100, - bz0 = bgrid_z>=0?bgrid_z:_depth*-bgrid_z/100, - br0 = bgrid_r>=0?bgrid_r:(int)(-range*bgrid_r/100), - bx = bx0>0?bx0:1, - by = by0>0?by0:1, - bz = bz0>0?bz0:1, - br = br0>0?br0:1; - const float - _sigma_x = sigma_x>=0?sigma_x:-sigma_x*_width/100, - _sigma_y = sigma_y>=0?sigma_y:-sigma_y*_height/100, - _sigma_z = sigma_z>=0?sigma_z:-sigma_z*_depth/100, - _sigma_r = sigma_r>=0?sigma_r:-sigma_r*range/100, - nsigma_x = _sigma_x*bx/_width, - nsigma_y = _sigma_y*by/_height, - nsigma_z = _sigma_z*bz/_depth, - nsigma_r = _sigma_r*br/range; - if (nsigma_x>0 || nsigma_y>0 || nsigma_z>0 || nsigma_r>0) { - const bool is_3d = (_depth>1); - if (is_3d) { // 3d version of the algorithm - CImg bgrid(bx,by,bz,br), bgridw(bx,by,bz,br); - cimg_forC(*this,c) { - const CImg _guide = guide.get_shared_channel(c%guide._spectrum); - bgrid.fill(0); bgridw.fill(0); - cimg_forXYZ(*this,x,y,z) { - const T val = (*this)(x,y,z,c); - const float gval = (float)_guide(x,y,z); - const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); - bgrid(X,Y,Z,R) += (float)val; - bgridw(X,Y,Z,R) += 1; - } - bgrid.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); - bgridw.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); - if (interpolation_type) cimg_forXYZ(*this,x,y,z) { - const float gval = (float)_guide(x,y,z), - X = (float)x*bx/_width, Y = (float)y*by/_height, Z = (float)z*bz/_depth, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), - bval0 = bgrid._linear_atXYZC(X,Y,Z,R), bval1 = bgridw._linear_atXYZC(X,Y,Z,R); - (*this)(x,y,z,c) = (T)(bval0/bval1); - } else cimg_forXYZ(*this,x,y,z) { - const float gval = (float)_guide(x,y,z); - const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); - const float bval0 = bgrid(X,Y,Z,R), bval1 = bgridw(X,Y,Z,R); - (*this)(x,y,z,c) = (T)(bval0/bval1); - } - } - } else { // 2d version of the algorithm - CImg bgrid(bx,by,br,2); - cimg_forC(*this,c) { - const CImg _guide = guide.get_shared_channel(c%guide._spectrum); - bgrid.fill(0); - cimg_forXY(*this,x,y) { - const T val = (*this)(x,y,c); - const float gval = (float)_guide(x,y); - const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); - bgrid(X,Y,R,0) += (float)val; - bgrid(X,Y,R,1) += 1; - } - bgrid.blur(nsigma_x,nsigma_y,0,true).blur(0,0,nsigma_r,false); - if (interpolation_type) cimg_forXY(*this,x,y) { - const float gval = (float)_guide(x,y), - X = (float)x*bx/_width, Y = (float)y*by/_height, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), - bval0 = bgrid._linear_atXYZ(X,Y,R,0), bval1 = bgrid._linear_atXYZ(X,Y,R,1); - (*this)(x,y,c) = (T)(bval0/bval1); - } else cimg_forXY(*this,x,y) { - const float gval = (float)_guide(x,y); - const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); - const float bval0 = bgrid(X,Y,R,0), bval1 = bgrid(X,Y,R,1); - (*this)(x,y,c) = (T)(bval0/bval1); - } - } - } - } - return *this; - } - - //! Blur image, with the joint bilateral filter \newinstance. - template - CImg get_blur_bilateral(const CImg& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, - const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, - const bool interpolation_type=true) const { - return (+*this).blur_bilateral(guide,sigma_x,sigma_y,sigma_z,sigma_r,bgrid_x,bgrid_y,bgrid_z,bgrid_r,interpolation_type); - } - - //! Blur image using the joint bilateral filter. - /** - \param guide Image used to model the smoothing weights. - \param sigma_s Amount of blur along the XYZ-axes. - \param sigma_r Amount of blur along the value axis. - \param bgrid_s Size of the bilateral grid along the XYZ-axes. - \param bgrid_r Size of the bilateral grid along the value axis. - \param interpolation_type Use interpolation for image slicing. - **/ - template - CImg& blur_bilateral(const CImg& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, - const bool interpolation_type=true) { - const float nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100; - return blur_bilateral(guide,nsigma_s,nsigma_s,nsigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); - } - - //! Blur image using the bilateral filter \newinstance. - template - CImg get_blur_bilateral(const CImg& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, - const bool interpolation_type=true) const { - return (+*this).blur_bilateral(guide,sigma_s,sigma_s,sigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); - } - - //! Blur image using patch-based space. - /** - \param sigma_s Amount of blur along the XYZ-axes. - \param sigma_p Amount of blur along the value axis. - \param patch_size Size of the patchs. - \param lookup_size Size of the window to search similar patchs. - \param smoothness Smoothness for the patch comparison. - \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. - **/ - CImg& blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, - const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) { - if (is_empty() || !patch_size || !lookup_size) return *this; - return get_blur_patch(sigma_s,sigma_p,patch_size,lookup_size,smoothness,is_fast_approx).move_to(*this); - } - - //! Blur image using patch-based space \newinstance. - CImg get_blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, - const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) const { - -#define _cimg_blur_patch3d_fast(N) \ - cimg_for##N##XYZ(res,x,y,z) { \ - T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,x,y,z,c,pP,T); pP+=N3; } \ - const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; \ - float sum_weights = 0; \ - cimg_for_in##N##XYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (cimg::abs(img(x,y,z,0) - img(p,q,r,0))3?0.0f:1.0f; \ - sum_weights+=weight; \ - cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); \ - } \ - if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; \ - else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); \ - } - -#define _cimg_blur_patch3d(N) \ - cimg_for##N##XYZ(res,x,y,z) { \ - T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,x,y,z,c,pP,T); pP+=N3; } \ - const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; \ - float sum_weights = 0, weight_max = 0; \ - cimg_for_in##N##XYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (p!=x || q!=y || r!=z) { \ - T *pQ = Q._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,p,q,r,c,pQ,T); pQ+=N3; } \ - float distance2 = 0; \ - pQ = Q._data; cimg_for(P,pP,T) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } \ - distance2/=Pnorm; \ - const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, \ - alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); \ - if (weight>weight_max) weight_max = weight; \ - sum_weights+=weight; \ - cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); \ - } \ - sum_weights+=weight_max; cimg_forC(res,c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); \ - if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; \ - else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); \ - } - -#define _cimg_blur_patch2d_fast(N) \ - cimg_for##N##XY(res,x,y) { \ - T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N(img,x,y,0,c,pP,T); pP+=N2; } \ - const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; \ - float sum_weights = 0; \ - cimg_for_in##N##XY(res,x0,y0,x1,y1,p,q) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))3?0.0f:1.0f; \ - sum_weights+=weight; \ - cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); \ - } \ - if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; \ - else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); \ - } - -#define _cimg_blur_patch2d(N) \ - cimg_for##N##XY(res,x,y) { \ - T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N(img,x,y,0,c,pP,T); pP+=N2; } \ - const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; \ - float sum_weights = 0, weight_max = 0; \ - cimg_for_in##N##XY(res,x0,y0,x1,y1,p,q) if (p!=x || q!=y) { \ - T *pQ = Q._data; cimg_forC(res,c) { cimg_get##N##x##N(img,p,q,0,c,pQ,T); pQ+=N2; } \ - float distance2 = 0; \ - pQ = Q._data; cimg_for(P,pP,T) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } \ - distance2/=Pnorm; \ - const float dx = (float)p - x, dy = (float)q - y, \ - alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); \ - if (weight>weight_max) weight_max = weight; \ - sum_weights+=weight; \ - cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); \ - } \ - sum_weights+=weight_max; cimg_forC(res,c) res(x,y,c)+=weight_max*(*this)(x,y,c); \ - if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; \ - else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); \ - } - - if (is_empty() || !patch_size || !lookup_size) return +*this; - CImg res(_width,_height,_depth,_spectrum,0); - const CImg _img = smoothness>0?get_blur(smoothness):CImg(),&img = smoothness>0?_img:*this; - CImg P(patch_size*patch_size*_spectrum), Q(P); - const float - nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100, - sigma_s2 = nsigma_s*nsigma_s, sigma_p2 = sigma_p*sigma_p, sigma_p3 = 3*sigma_p, - Pnorm = P.size()*sigma_p2; - const int rsize2 = (int)lookup_size/2, rsize1 = (int)lookup_size - rsize2 - 1; - const unsigned int N2 = patch_size*patch_size, N3 = N2*patch_size; - if (_depth>1) switch (patch_size) { // 3d - case 2 : if (is_fast_approx) _cimg_blur_patch3d_fast(2) else _cimg_blur_patch3d(2) break; - case 3 : if (is_fast_approx) _cimg_blur_patch3d_fast(3) else _cimg_blur_patch3d(3) break; - default : { - const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; - if (is_fast_approx) cimg_forXYZ(res,x,y,z) { // Fast - P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); - const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; - float sum_weights = 0; - cimg_for_inXYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (cimg::abs(img(x,y,z,0)-img(p,q,r,0))3?0.0f:1.0f; - sum_weights+=weight; - cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); - } - if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; - else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); - } else cimg_forXYZ(res,x,y,z) { // Exact - P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); - const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; - float sum_weights = 0, weight_max = 0; - cimg_for_inXYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (p!=x || q!=y || r!=z) { - (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; - const float - dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, - distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), - weight = (float)std::exp(-distance2); - if (weight>weight_max) weight_max = weight; - sum_weights+=weight; - cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); - } - sum_weights+=weight_max; cimg_forC(res,c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); - if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; - else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); - } - } - } else switch (patch_size) { // 2d - case 2 : if (is_fast_approx) _cimg_blur_patch2d_fast(2) else _cimg_blur_patch2d(2) break; - case 3 : if (is_fast_approx) _cimg_blur_patch2d_fast(3) else _cimg_blur_patch2d(3) break; - case 4 : if (is_fast_approx) _cimg_blur_patch2d_fast(4) else _cimg_blur_patch2d(4) break; - case 5 : if (is_fast_approx) _cimg_blur_patch2d_fast(5) else _cimg_blur_patch2d(5) break; - case 6 : if (is_fast_approx) _cimg_blur_patch2d_fast(6) else _cimg_blur_patch2d(6) break; - case 7 : if (is_fast_approx) _cimg_blur_patch2d_fast(7) else _cimg_blur_patch2d(7) break; - case 8 : if (is_fast_approx) _cimg_blur_patch2d_fast(8) else _cimg_blur_patch2d(8) break; - case 9 : if (is_fast_approx) _cimg_blur_patch2d_fast(9) else _cimg_blur_patch2d(9) break; - default : { // Fast - const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; - if (is_fast_approx) cimg_forXY(res,x,y) { // 2d fast approximation. - P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); - const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; - float sum_weights = 0; - cimg_for_inXY(res,x0,y0,x1,y1,p,q) if (cimg::abs(img(x,y,0)-img(p,q,0))3?0.0f:1.0f; - sum_weights+=weight; - cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); - } - if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; - else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); - } else cimg_forXY(res,x,y) { // 2d exact algorithm. - P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); - const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; - float sum_weights = 0, weight_max = 0; - cimg_for_inXY(res,x0,y0,x1,y1,p,q) if (p!=x || q!=y) { - (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; - const float - dx = (float)x - p, dy = (float)y - q, - distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), - weight = (float)std::exp(-distance2); - if (weight>weight_max) weight_max = weight; - sum_weights+=weight; - cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); - } - sum_weights+=weight_max; cimg_forC(res,c) res(x,y,c)+=weight_max*(*this)(x,y,c); - if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; - else cimg_forC(res,c) res(x,y,0,c) = (Tfloat)((*this)(x,y,c)); - } - } - } - return res; - } - - //! Blur image with the median filter. - /** - \param n Size of the median filter. - **/ - CImg& blur_median(const unsigned int n) { - if (!n) return *this; - return get_blur_median(n).move_to(*this); - } - - //! Blur image with the median filter \newinstance. - CImg get_blur_median(const unsigned int n) const { - if (is_empty() || n<=1) return +*this; - CImg res(_width,_height,_depth,_spectrum); - T *ptrd = res._data; - const int hl = n/2, hr = hl - 1 + n%2; - if (res._depth!=1) cimg_forXYZC(*this,x,y,z,c) { // 3d - const int - x0 = x - hl, y0 = y - hl, z0 = z-hl, x1 = x + hr, y1 = y + hr, z1 = z+hr, - nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1, nz1 = z1>=depth()?depth()-1:z1; - *(ptrd++) = get_crop(nx0,ny0,nz0,c,nx1,ny1,nz1,c).median(); - } else { -#define _cimg_median_sort(a,b) if ((a)>(b)) cimg::swap(a,b) - if (res._height!=1) switch (n) { // 2d - case 3 : { - T I[9] = { 0 }; - CImg_3x3(J,T); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,T) { - std::memcpy(J,I,9*sizeof(T)); - _cimg_median_sort(Jcp, Jnp); _cimg_median_sort(Jcc, Jnc); _cimg_median_sort(Jcn, Jnn); - _cimg_median_sort(Jpp, Jcp); _cimg_median_sort(Jpc, Jcc); _cimg_median_sort(Jpn, Jcn); - _cimg_median_sort(Jcp, Jnp); _cimg_median_sort(Jcc, Jnc); _cimg_median_sort(Jcn, Jnn); - _cimg_median_sort(Jpp, Jpc); _cimg_median_sort(Jnc, Jnn); _cimg_median_sort(Jcc, Jcn); - _cimg_median_sort(Jpc, Jpn); _cimg_median_sort(Jcp, Jcc); _cimg_median_sort(Jnp, Jnc); - _cimg_median_sort(Jcc, Jcn); _cimg_median_sort(Jcc, Jnp); _cimg_median_sort(Jpn, Jcc); - _cimg_median_sort(Jcc, Jnp); - *(ptrd++) = Jcc; - } - } break; - case 5 : { - T I[25] = { 0 }; - CImg_5x5(J,T); - cimg_forC(*this,c) cimg_for5x5(*this,x,y,0,c,I,T) { - std::memcpy(J,I,25*sizeof(T)); - _cimg_median_sort(Jbb, Jpb); _cimg_median_sort(Jnb, Jab); _cimg_median_sort(Jcb, Jab); _cimg_median_sort(Jcb, Jnb); - _cimg_median_sort(Jpp, Jcp); _cimg_median_sort(Jbp, Jcp); _cimg_median_sort(Jbp, Jpp); _cimg_median_sort(Jap, Jbc); - _cimg_median_sort(Jnp, Jbc); _cimg_median_sort(Jnp, Jap); _cimg_median_sort(Jcc, Jnc); _cimg_median_sort(Jpc, Jnc); - _cimg_median_sort(Jpc, Jcc); _cimg_median_sort(Jbn, Jpn); _cimg_median_sort(Jac, Jpn); _cimg_median_sort(Jac, Jbn); - _cimg_median_sort(Jnn, Jan); _cimg_median_sort(Jcn, Jan); _cimg_median_sort(Jcn, Jnn); _cimg_median_sort(Jpa, Jca); - _cimg_median_sort(Jba, Jca); _cimg_median_sort(Jba, Jpa); _cimg_median_sort(Jna, Jaa); _cimg_median_sort(Jcb, Jbp); - _cimg_median_sort(Jnb, Jpp); _cimg_median_sort(Jbb, Jpp); _cimg_median_sort(Jbb, Jnb); _cimg_median_sort(Jab, Jcp); - _cimg_median_sort(Jpb, Jcp); _cimg_median_sort(Jpb, Jab); _cimg_median_sort(Jpc, Jac); _cimg_median_sort(Jnp, Jac); - _cimg_median_sort(Jnp, Jpc); _cimg_median_sort(Jcc, Jbn); _cimg_median_sort(Jap, Jbn); _cimg_median_sort(Jap, Jcc); - _cimg_median_sort(Jnc, Jpn); _cimg_median_sort(Jbc, Jpn); _cimg_median_sort(Jbc, Jnc); _cimg_median_sort(Jba, Jna); - _cimg_median_sort(Jcn, Jna); _cimg_median_sort(Jcn, Jba); _cimg_median_sort(Jpa, Jaa); _cimg_median_sort(Jnn, Jaa); - _cimg_median_sort(Jnn, Jpa); _cimg_median_sort(Jan, Jca); _cimg_median_sort(Jnp, Jcn); _cimg_median_sort(Jap, Jnn); - _cimg_median_sort(Jbb, Jnn); _cimg_median_sort(Jbb, Jap); _cimg_median_sort(Jbc, Jan); _cimg_median_sort(Jpb, Jan); - _cimg_median_sort(Jpb, Jbc); _cimg_median_sort(Jpc, Jba); _cimg_median_sort(Jcb, Jba); _cimg_median_sort(Jcb, Jpc); - _cimg_median_sort(Jcc, Jpa); _cimg_median_sort(Jnb, Jpa); _cimg_median_sort(Jnb, Jcc); _cimg_median_sort(Jnc, Jca); - _cimg_median_sort(Jab, Jca); _cimg_median_sort(Jab, Jnc); _cimg_median_sort(Jac, Jna); _cimg_median_sort(Jbp, Jna); - _cimg_median_sort(Jbp, Jac); _cimg_median_sort(Jbn, Jaa); _cimg_median_sort(Jpp, Jaa); _cimg_median_sort(Jpp, Jbn); - _cimg_median_sort(Jcp, Jpn); _cimg_median_sort(Jcp, Jan); _cimg_median_sort(Jnc, Jpa); _cimg_median_sort(Jbn, Jna); - _cimg_median_sort(Jcp, Jnc); _cimg_median_sort(Jcp, Jbn); _cimg_median_sort(Jpb, Jap); _cimg_median_sort(Jnb, Jpc); - _cimg_median_sort(Jbp, Jcn); _cimg_median_sort(Jpc, Jcn); _cimg_median_sort(Jap, Jcn); _cimg_median_sort(Jab, Jbc); - _cimg_median_sort(Jpp, Jcc); _cimg_median_sort(Jcp, Jac); _cimg_median_sort(Jab, Jpp); _cimg_median_sort(Jab, Jcp); - _cimg_median_sort(Jcc, Jac); _cimg_median_sort(Jbc, Jac); _cimg_median_sort(Jpp, Jcp); _cimg_median_sort(Jbc, Jcc); - _cimg_median_sort(Jpp, Jbc); _cimg_median_sort(Jpp, Jcn); _cimg_median_sort(Jcc, Jcn); _cimg_median_sort(Jcp, Jcn); - _cimg_median_sort(Jcp, Jbc); _cimg_median_sort(Jcc, Jnn); _cimg_median_sort(Jcp, Jcc); _cimg_median_sort(Jbc, Jnn); - _cimg_median_sort(Jcc, Jba); _cimg_median_sort(Jbc, Jba); _cimg_median_sort(Jbc, Jcc); - *(ptrd++) = Jcc; - } - } break; - default : { - cimg_forXYC(*this,x,y,c) { - const int - x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, - nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1; - *(ptrd++) = get_crop(nx0,ny0,0,c,nx1,ny1,0,c).median(); - } - } - } else switch (n) { // 1d - case 2 : { - T I[4] = { 0 }; - cimg_forC(*this,c) cimg_for2x2(*this,x,y,0,c,I,T) *(ptrd++) = (T)(0.5f*(I[0]+I[1])); - } break; - case 3 : { - T I[9] = { 0 }; - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,T) - *(ptrd++) = I[3]=width()?width()-1:x1; - *(ptrd++) = get_crop(nx0,0,0,c,nx1,0,0,c).median(); - } - } - } - } - return res; - } - - //! Sharpen image. - /** - \param amplitude Sharpening amplitude - \param sharpen_type Select sharpening method. Can be { false=inverse diffusion | true=shock filters }. - \param edge Edge threshold (shock filters only). - \param alpha Gradient smoothness (shock filters only). - \param sigma Tensor smoothness (shock filters only). - **/ - CImg& sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) { - if (is_empty()) return *this; - T val_min, val_max = max_min(val_min); - const float nedge = edge/2; - CImg val, vec, velocity(_width,_height,_depth,_spectrum); - Tfloat *ptrd = velocity._data, veloc_max = 0; - - if (_depth>1) { // 3d - CImg_3x3x3(I,Tfloat); - if (sharpen_type) { // Shock filters. - CImg G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); - if (sigma>0) G.blur(sigma); - Tfloat *ptrG0 = G.data(0,0,0,0), *ptrG1 = G.data(0,0,0,1), *ptrG2 = G.data(0,0,0,2), *ptrG3 = G.data(0,0,0,3); - cimg_forXYZ(G,x,y,z) { - G.get_tensor_at(x,y,z).symmetric_eigen(val,vec); - if (val[0]<0) val[0] = 0; - if (val[1]<0) val[1] = 0; - if (val[2]<0) val[2] = 0; - *(ptrG0++) = vec(0,0); - *(ptrG1++) = vec(0,1); - *(ptrG2++) = vec(0,2); - *(ptrG3++) = 1 - (Tfloat)std::pow(1+val[0]+val[1]+val[2],-(Tfloat)nedge); - } - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - u = G(x,y,z,0), - v = G(x,y,z,1), - w = G(x,y,z,2), - amp = G(x,y,z,3), - ixx = Incc + Ipcc - 2*Iccc, - ixy = (Innc + Ippc - Inpc - Ipnc)/4, - ixz = (Incn + Ipcp - Incp - Ipcn)/4, - iyy = Icnc + Icpc - 2*Iccc, - iyz = (Icnn + Icpp - Icnp - Icpn)/4, - izz = Iccn + Iccp - 2*Iccc, - ixf = Incc - Iccc, - ixb = Iccc - Ipcc, - iyf = Icnc - Iccc, - iyb = Iccc - Icpc, - izf = Iccn - Iccc, - izb = Iccc - Iccp, - itt = u*u*ixx + v*v*iyy + w*w*izz + 2*u*v*ixy + 2*u*w*ixz + 2*v*w*iyz, - it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb) + w*cimg::minmod(izf,izb), - veloc = -amp*cimg::sign(itt)*cimg::abs(it); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } else cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { // Inverse diffusion. - const Tfloat veloc = -Ipcc - Incc - Icpc - Icnc - Iccp - Iccn + 6*Iccc; - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } else { - CImg_3x3(I,Tfloat); - if (sharpen_type) { // Shock filters. - CImg G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); - if (sigma>0) G.blur(sigma); - Tfloat *ptrG0 = G.data(0,0,0,0), *ptrG1 = G.data(0,0,0,1), *ptrG2 = G.data(0,0,0,2); - cimg_forXY(G,x,y) { - G.get_tensor_at(x,y).symmetric_eigen(val,vec); - if (val[0]<0) val[0] = 0; - if (val[1]<0) val[1] = 0; - *(ptrG0++) = vec(0,0); - *(ptrG1++) = vec(0,1); - *(ptrG2++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1],-(Tfloat)nedge); - } - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - const Tfloat - u = G(x,y,0), - v = G(x,y,1), - amp = G(x,y,2), - ixx = Inc + Ipc - 2*Icc, - ixy = (Inn + Ipp - Inp - Ipn)/4, - iyy = Icn + Icp - 2*Icc, - ixf = Inc - Icc, - ixb = Icc - Ipc, - iyf = Icn - Icc, - iyb = Icc - Icp, - itt = u*u*ixx + v*v*iyy + 2*u*v*ixy, - it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb), - veloc = -amp*cimg::sign(itt)*cimg::abs(it); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } else cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) { // Inverse diffusion. - const Tfloat veloc = -Ipc - Inc - Icp - Icn + 4*Icc; - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } - } - if (veloc_max<=0) return *this; - return ((velocity*=amplitude/veloc_max)+=*this).cut(val_min,val_max).move_to(*this); - } - - //! Sharpen image \newinstance. - CImg get_sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) const { - return (+*this).sharpen(amplitude,sharpen_type,edge,alpha,sigma); - } - - //! Return image gradient. - /** - \param axes Axes considered for the gradient computation, as a C-string (e.g "xy"). - \param scheme = Numerical scheme used for the gradient computation: - - -1 = Backward finite differences - - 0 = Centered finite differences - - 1 = Forward finite differences - - 2 = Using Sobel masks - - 3 = Using rotation invariant masks - - 4 = Using Deriche recusrsive filter. - - 5 = Using Van Vliet recusrsive filter. - **/ - CImgList get_gradient(const char *const axes=0, const int scheme=3) const { - CImgList grad(2,_width,_height,_depth,_spectrum); - Tfloat *ptrd0 = grad[0]._data, *ptrd1 = grad[1]._data; - bool is_3d = false; - if (axes) { - for (unsigned int a = 0; axes[a]; ++a) { - const char axis = cimg::uncase(axes[a]); - switch (axis) { - case 'x' : case 'y' : break; - case 'z' : is_3d = true; break; - default : - throw CImgArgumentException(_cimg_instance - "get_gradient(): Invalid specified axis '%c'.", - cimg_instance, - axis); - } - } - } else is_3d = (_depth>1); - if (is_3d) { - CImg(_width,_height,_depth,_spectrum).move_to(grad); - Tfloat *ptrd2 = grad[2]._data; - switch (scheme) { // 3d. - case -1 : { // Backward finite differences. - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = Iccc - Ipcc; - *(ptrd1++) = Iccc - Icpc; - *(ptrd2++) = Iccc - Iccp; - } - } break; - case 1 : { // Forward finite differences. - CImg_2x2x2(I,Tfloat); - cimg_forC(*this,c) cimg_for2x2x2(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = Incc - Iccc; - *(ptrd1++) = Icnc - Iccc; - *(ptrd2++) = Iccn - Iccc; - } - } break; - case 4 : { // Using Deriche filter with low standard variation. - grad[0] = get_deriche(0,1,'x'); - grad[1] = get_deriche(0,1,'y'); - grad[2] = get_deriche(0,1,'z'); - } break; - case 5 : { // Using Van Vliet filter with low standard variation. - grad[0] = get_vanvliet(0,1,'x'); - grad[1] = get_vanvliet(0,1,'y'); - grad[2] = get_vanvliet(0,1,'z'); - } break; - default : { // Central finite differences. - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = (Incc - Ipcc)/2; - *(ptrd1++) = (Icnc - Icpc)/2; - *(ptrd2++) = (Iccn - Iccp)/2; - } - } - } - } else switch (scheme) { // 2d. - case -1 : { // Backward finite differences. - CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = Icc - Ipc; - *(ptrd1++) = Icc - Icp; - } - } break; - case 1 : { // Forward finite differences. - CImg_2x2(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for2x2(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = Inc - Icc; - *(ptrd1++) = Icn - Icc; - } - } break; - case 2 : { // Sobel scheme. - CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = -Ipp - 2*Ipc - Ipn + Inp + 2*Inc + Inn; - *(ptrd1++) = -Ipp - 2*Icp - Inp + Ipn + 2*Icn + Inn; - } - } break; - case 3 : { // Rotation invariant mask. - CImg_3x3(I,Tfloat); - const Tfloat a = (Tfloat)(0.25f*(2-std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f)-1)); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = -a*Ipp - b*Ipc - a*Ipn + a*Inp + b*Inc + a*Inn; - *(ptrd1++) = -a*Ipp - b*Icp - a*Inp + a*Ipn + b*Icn + a*Inn; - } - } break; - case 4 : { // using Van Vliet filter with low standard variation - grad[0] = get_deriche(0,1,'x'); - grad[1] = get_deriche(0,1,'y'); - } break; - case 5 : { // using Deriche filter with low standard variation - grad[0] = get_vanvliet(0,1,'x'); - grad[1] = get_vanvliet(0,1,'y'); - } break; - default : { // central finite differences - CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = (Inc - Ipc)/2; - *(ptrd1++) = (Icn - Icp)/2; - } - } - } - if (!axes) return grad; - CImgList res; - for (unsigned int l = 0; axes[l]; ++l) { - const char axis = cimg::uncase(axes[l]); - switch (axis) { - case 'x' : res.insert(grad[0]); break; - case 'y' : res.insert(grad[1]); break; - case 'z' : res.insert(grad[2]); break; - } - } - grad.assign(); - return res; - } - - //! Return image hessian. - /** - \param axes Axes considered for the hessian computation, as a C-string (e.g "xy"). - **/ - CImgList get_hessian(const char *const axes=0) const { - CImgList res; - const char *naxes = axes, *const def_axes2d = "xxxyyy", *const def_axes3d = "xxxyxzyyyzzz"; - if (!axes) naxes = _depth>1?def_axes3d:def_axes2d; - const unsigned int lmax = std::strlen(naxes); - if (lmax%2) - throw CImgArgumentException(_cimg_instance - "get_hessian(): Invalid specified axes '%s'.", - cimg_instance, - naxes); - - res.assign(lmax/2,_width,_height,_depth,_spectrum); - if (!cimg::strcasecmp(naxes,def_axes3d)) { // 3d - Tfloat - *ptrd0 = res[0]._data, *ptrd1 = res[1]._data, *ptrd2 = res[2]._data, - *ptrd3 = res[3]._data, *ptrd4 = res[4]._data, *ptrd5 = res[5]._data; - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - *(ptrd0++) = Ipcc + Incc - 2*Iccc; // Ixx - *(ptrd1++) = (Ippc + Innc - Ipnc - Inpc)/4; // Ixy - *(ptrd2++) = (Ipcp + Incn - Ipcn - Incp)/4; // Ixz - *(ptrd3++) = Icpc + Icnc - 2*Iccc; // Iyy - *(ptrd4++) = (Icpp + Icnn - Icpn - Icnp)/4; // Iyz - *(ptrd5++) = Iccn + Iccp - 2*Iccc; // Izz - } - } else if (!cimg::strcasecmp(naxes,def_axes2d)) { // 2d - Tfloat *ptrd0 = res[0]._data, *ptrd1 = res[1]._data, *ptrd2 = res[2]._data; - CImg_3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - *(ptrd0++) = Ipc + Inc - 2*Icc; // Ixx - *(ptrd1++) = (Ipp + Inn - Ipn - Inp)/4; // Ixy - *(ptrd2++) = Icp + Icn - 2*Icc; // Iyy - } - } else for (unsigned int l = 0; laxis2) cimg::swap(axis1,axis2); - bool valid_axis = false; - Tfloat *ptrd = res[l2]._data; - if (axis1=='x' && axis2=='x') { // Ixx - valid_axis = true; CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Ipc + Inc - 2*Icc; - } - else if (axis1=='x' && axis2=='y') { // Ixy - valid_axis = true; CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Ipp + Inn - Ipn - Inp)/4; - } - else if (axis1=='x' && axis2=='z') { // Ixz - valid_axis = true; CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Ipcp + Incn - Ipcn - Incp)/4; - } - else if (axis1=='y' && axis2=='y') { // Iyy - valid_axis = true; CImg_3x3(I,Tfloat); - cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Icp + Icn - 2*Icc; - } - else if (axis1=='y' && axis2=='z') { // Iyz - valid_axis = true; CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Icpp + Icnn - Icpn - Icnp)/4; - } - else if (axis1=='z' && axis2=='z') { // Izz - valid_axis = true; CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Iccn + Iccp - 2*Iccc; - } - else if (!valid_axis) - throw CImgArgumentException(_cimg_instance - "get_hessian(): Invalid specified axes '%s'.", - cimg_instance, - naxes); - } - return res; - } - - //! Compute image laplacian. - CImg& laplacian() { - return get_laplacian().move_to(*this); - } - - //! Compute image laplacian \newinstance. - CImg get_laplacian() const { - if (is_empty()) return CImg(); - CImg res(_width,_height,_depth,_spectrum); - Tfloat *ptrd = res._data; - if (_depth>1) { // 3d - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) - *(ptrd++) = Incc + Ipcc + Icnc + Icpc + Iccn + Iccp - 6*Iccc; - } else if (_height>1) { // 2d - CImg_3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) - *(ptrd++) = Inc + Ipc + Icn + Icp - 4*Icc; - } else { // 1d - CImg_3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) - *(ptrd++) = Inc + Ipc - 2*Icc; - } - return res; - } - - //! Compute the structure tensor field of an image. - /** - \param scheme Numerical scheme. Can be { 0=central | 1=fwd/bwd1 | 2=fwd/bwd2 } - **/ - CImg& structure_tensors(const unsigned int scheme=2) { - return get_structure_tensors(scheme).move_to(*this); - } - - //! Compute the structure tensor field of an image \newinstance. - CImg get_structure_tensors(const unsigned int scheme=2) const { - if (is_empty()) return *this; - CImg res; - if (_depth>1) { // 3d - res.assign(_width,_height,_depth,6,0); - CImg_3x3x3(I,Tfloat); - switch (scheme) { - case 0 : { // classical central finite differences - cimg_forC(*this,c) { - Tfloat - *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), - *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); - cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ix = (Incc - Ipcc)/2, - iy = (Icnc - Icpc)/2, - iz = (Iccn - Iccp)/2; - *(ptrd0++)+=ix*ix; - *(ptrd1++)+=ix*iy; - *(ptrd2++)+=ix*iz; - *(ptrd3++)+=iy*iy; - *(ptrd4++)+=iy*iz; - *(ptrd5++)+=iz*iz; - } - } - } break; - case 1 : { // Forward/backward finite differences (version 1). - cimg_forC(*this,c) { - Tfloat - *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), - *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); - cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ixf = Incc - Iccc, ixb = Iccc - Ipcc, - iyf = Icnc - Iccc, iyb = Iccc - Icpc, - izf = Iccn - Iccc, izb = Iccc - Iccp; - *(ptrd0++)+=(ixf*ixf + ixf*ixb + ixb*ixf + ixb*ixb)/4; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; - *(ptrd3++)+=(iyf*iyf + iyf*iyb + iyb*iyf + iyb*iyb)/4; - *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; - *(ptrd5++)+=(izf*izf + izf*izb + izb*izf + izb*izb)/4; - } - } - } break; - default : { // Forward/backward finite differences (version 2). - cimg_forC(*this,c) { - Tfloat - *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), - *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); - cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ixf = Incc - Iccc, ixb = Iccc - Ipcc, - iyf = Icnc - Iccc, iyb = Iccc - Icpc, - izf = Iccn - Iccc, izb = Iccc - Iccp; - *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; - *(ptrd3++)+=(iyf*iyf + iyb*iyb)/2; - *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; - *(ptrd5++)+=(izf*izf + izb*izb)/2; - } - } - } break; - } - } else { // 2d - res.assign(_width,_height,_depth,3,0); - CImg_3x3(I,Tfloat); - switch (scheme) { - case 0 : { // classical central finite differences - cimg_forC(*this,c) { - Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); - cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - const Tfloat - ix = (Inc - Ipc)/2, - iy = (Icn - Icp)/2; - *(ptrd0++)+=ix*ix; - *(ptrd1++)+=ix*iy; - *(ptrd2++)+=iy*iy; - } - } - } break; - case 1 : { // Forward/backward finite differences (version 1). - cimg_forC(*this,c) { - Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); - cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - const Tfloat - ixf = Inc - Icc, ixb = Icc - Ipc, - iyf = Icn - Icc, iyb = Icc - Icp; - *(ptrd0++)+=(ixf*ixf + ixf*ixb + ixb*iyf + ixb*ixb)/4; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(iyf*iyf + iyf*iyb + iyb*iyf + iyb*iyb)/4; - } - } - } break; - default : { // Forward/backward finite differences (version 2). - cimg_forC(*this,c) { - Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); - cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - const Tfloat - ixf = Inc - Icc, ixb = Icc - Ipc, - iyf = Icn - Icc, iyb = Icc - Icp; - *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(iyf*iyf + iyb*iyb)/2; - } - } - } break; - } - } - return res; - } - - //! Compute field of diffusion tensors for edge-preserving smoothing. - /** - \param sharpness Sharpness - \param anisotropy Anisotropy - \param alpha Standard deviation of the gradient blur. - \param sigma Standard deviation of the structure tensor blur. - \param is_sqrt Tells if the square root of the tensor field is computed instead. - **/ - CImg& diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, - const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) { - CImg res; - const float nsharpness = cimg::max(sharpness,1e-5f), power1 = (is_sqrt?0.5f:1)*nsharpness, power2 = power1/(1e-7f+1-anisotropy); - blur(alpha).normalize(0,(T)255); - - if (_depth>1) { // 3d - CImg val(3), vec(3,3); - get_structure_tensors().move_to(res).blur(sigma); - Tfloat - *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), - *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); - cimg_forXYZ(*this,x,y,z) { - res.get_tensor_at(x,y,z).symmetric_eigen(val,vec); - const float - _l1 = val[2], _l2 = val[1], _l3 = val[0], - l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, l3 = _l3>0?_l3:0, - ux = vec(0,0), uy = vec(0,1), uz = vec(0,2), - vx = vec(1,0), vy = vec(1,1), vz = vec(1,2), - wx = vec(2,0), wy = vec(2,1), wz = vec(2,2), - n1 = (float)std::pow(1+l1+l2+l3,-power1), - n2 = (float)std::pow(1+l1+l2+l3,-power2); - *(ptrd0++) = n1*(ux*ux + vx*vx) + n2*wx*wx; - *(ptrd1++) = n1*(ux*uy + vx*vy) + n2*wx*wy; - *(ptrd2++) = n1*(ux*uz + vx*vz) + n2*wx*wz; - *(ptrd3++) = n1*(uy*uy + vy*vy) + n2*wy*wy; - *(ptrd4++) = n1*(uy*uz + vy*vz) + n2*wy*wz; - *(ptrd5++) = n1*(uz*uz + vz*vz) + n2*wz*wz; - } - } else { // for 2d images - CImg val(2), vec(2,2); - get_structure_tensors().move_to(res).blur(sigma); - Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); - cimg_forXY(*this,x,y) { - res.get_tensor_at(x,y).symmetric_eigen(val,vec); - const float - _l1 = val[1], _l2 = val[0], - l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, - ux = vec(1,0), uy = vec(1,1), - vx = vec(0,0), vy = vec(0,1), - n1 = (float)std::pow(1+l1+l2,-power1), - n2 = (float)std::pow(1+l1+l2,-power2); - *(ptrd0++) = n1*ux*ux + n2*vx*vx; - *(ptrd1++) = n1*ux*uy + n2*vx*vy; - *(ptrd2++) = n1*uy*uy + n2*vy*vy; - } - } - return res.move_to(*this); - } - - //! Compute field of diffusion tensors for edge-preserving smoothing \newinstance. - CImg get_diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, - const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) const { - return CImg(*this,false).diffusion_tensors(sharpness,anisotropy,alpha,sigma,is_sqrt); - } - - //! Estimate displacement field between two images. - /** - \param source Reference image. - \param smoothness Smoothness of estimated displacement field. - \param precision Precision required for algorithm convergence. - \param nb_scales Number of scales used to estimate the displacement field. - \param iteration_max Maximum number of iterations allowed for one scale. - \param is_backward If false, match I2(X+U(X)) = I1(X), else match I2(X) = I1(X-U(X)). - **/ - CImg& displacement(const CImg& source, const float smoothness=0.1f, const float precision=5.0f, - const unsigned int nb_scales=0, const unsigned int iteration_max=10000, - const bool is_backward=false) { - return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward).move_to(*this); - } - - //! Estimate displacement field between two images \newinstance. - CImg get_displacement(const CImg& source, - const float smoothness=0.1f, const float precision=5.0f, - const unsigned int nb_scales=0, const unsigned int iteration_max=10000, - const bool is_backward=false) const { - if (is_empty() || !source) return +*this; - if (!is_sameXYZC(source)) - throw CImgArgumentException(_cimg_instance - "displacement(): Instance and source image (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - source._width,source._height,source._depth,source._spectrum,source._data); - if (precision<0) - throw CImgArgumentException(_cimg_instance - "displacement(): Invalid specified precision %g " - "(should be >=0)", - cimg_instance, - precision); - const unsigned int _nb_scales = nb_scales>0?nb_scales:(unsigned int)(2*std::log((double)(cimg::max(_width,_height)))); - const float _precision = (float)std::pow(10.0,-(double)precision); - float sm, sM = source.max_min(sm), tm, tM = max_min(tm); - const float sdelta = sm==sM?1:(sM - sm), tdelta = tm==tM?1:(tM - tm); - const bool is_3d = source._depth>1; - CImg U; - - for (int scale = _nb_scales-1; scale>=0; --scale) { - const float factor = (float)std::pow(1.5,(double)scale); - const unsigned int - _sw = (unsigned int)(_width/factor), sw = _sw?_sw:1, - _sh = (unsigned int)(_height/factor), sh = _sh?_sh:1, - _sd = (unsigned int)(_depth/factor), sd = _sd?_sd:1; - if (sw<5 && sh<5 && (!is_3d || sd<5)) continue; // skip too small scales. - const CImg - I1 = (source.get_resize(sw,sh,sd,-100,2)-=sm)/=sdelta, - I2 = (get_resize(I1,2)-=tm)/=tdelta; - if (U) (U*=1.5f).resize(I2._width,I2._height,I2._depth,-100,3); - else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); - float dt = 2, energy = cimg::type::max(); - const CImgList dI = is_backward?I1.get_gradient():I2.get_gradient(); - - for (unsigned int iteration = 0; iteration=0) cimg_for3XYZ(U,x,y,z) { // Isotropic regularization. - const float - X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), - Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), - Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); - float delta_I = 0, _energy_regul = 0; - if (is_backward) cimg_forC(I2,c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); - else cimg_forC(I2,c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); - cimg_forC(U,c) { - const float - Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), - Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), - Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), - Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), - Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), - Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c); - U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + smoothness* ( Uxx + Uyy + Uzz)))/(1+6*smoothness*dt); - _energy_regul+=Ux*Ux + Uy*Uy + Uz*Uz; - } - _energy+=delta_I*delta_I + smoothness*_energy_regul; - } else { - const float nsmoothness = -smoothness; - cimg_for3XYZ(U,x,y,z) { // Anisotropic regularization. - const float - X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), - Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), - Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); - float delta_I = 0, _energy_regul = 0; - if (is_backward) cimg_forC(I2,c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); - else cimg_forC(I2,c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); - cimg_forC(U,c) { - const float - Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), - Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), - Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), - N2 = Ux*Ux + Uy*Uy + Uz*Uz, - N = std::sqrt(N2), - N3 = 1e-5f + N2*N, - coef_a = (1 - Ux*Ux/N2)/N, - coef_b = -2*Ux*Uy/N3, - coef_c = -2*Ux*Uz/N3, - coef_d = (1 - Uy*Uy/N2)/N, - coef_e = -2*Uy*Uz/N3, - coef_f = (1 - Uz*Uz/N2)/N, - Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), - Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), - Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c), - Uxy = 0.25f*(U(_n1x,_n1y,z,c) + U(_p1x,_p1y,z,c) - U(_n1x,_p1y,z,c) - U(_n1x,_p1y,z,c)), - Uxz = 0.25f*(U(_n1x,y,_n1z,c) + U(_p1x,y,_p1z,c) - U(_n1x,y,_p1z,c) - U(_n1x,y,_p1z,c)), - Uyz = 0.25f*(U(x,_n1y,_n1z,c) + U(x,_p1y,_p1z,c) - U(x,_n1y,_p1z,c) - U(x,_n1y,_p1z,c)); - U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + - nsmoothness* ( coef_a*Uxx + coef_b*Uxy + coef_c*Uxz + coef_d*Uyy + coef_e*Uyz + coef_f*Uzz )) - )/(1+2*(coef_a+coef_d+coef_f)*nsmoothness*dt); - _energy_regul+=N; - } - _energy+=delta_I*delta_I + nsmoothness*_energy_regul; - } - } - } else { // 2d version. - if (smoothness>=0) cimg_for3XY(U,x,y) { // Isotropic regularization. - const float - X = is_backward?x - U(x,y,0):x + U(x,y,0), - Y = is_backward?y - U(x,y,1):y + U(x,y,1); - float delta_I = 0, _energy_regul = 0; - if (is_backward) cimg_forC(I2,c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); - else cimg_forC(I2,c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); - cimg_forC(U,c) { - const float - Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), - Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), - Uxx = U(_n1x,y,c) + U(_p1x,y,c), - Uyy = U(x,_n1y,c) + U(x,_p1y,c); - U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + smoothness*( Uxx + Uyy )))/(1+4*smoothness*dt); - _energy_regul+=Ux*Ux + Uy*Uy; - } - _energy+=delta_I*delta_I + smoothness*_energy_regul; - } else { - const float nsmoothness = -smoothness; - cimg_for3XY(U,x,y) { // Anisotropic regularization. - const float - X = is_backward?x - U(x,y,0):x + U(x,y,0), - Y = is_backward?y - U(x,y,1):y + U(x,y,1); - float delta_I = 0, _energy_regul = 0; - if (is_backward) cimg_forC(I2,c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); - else cimg_forC(I2,c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); - cimg_forC(U,c) { - const float - Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), - Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), - N2 = Ux*Ux + Uy*Uy, - N = std::sqrt(N2), - N3 = 1e-5f + N2*N, - coef_a = Uy*Uy/N3, - coef_b = -2*Ux*Uy/N3, - coef_c = Ux*Ux/N3, - Uxx = U(_n1x,y,c) + U(_p1x,y,c), - Uyy = U(x,_n1y,c) + U(x,_p1y,c), - Uxy = 0.25f*(U(_n1x,_n1y,c) + U(_p1x,_p1y,c) - U(_n1x,_p1y,c) - U(_n1x,_p1y,c)); - U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + nsmoothness*( coef_a*Uxx + coef_b*Uxy + coef_c*Uyy )))/(1+2*(coef_a+coef_c)*nsmoothness*dt); - _energy_regul+=N; - } - _energy+=delta_I*delta_I + nsmoothness*_energy_regul; - } - } - } - const float d_energy = (_energy - energy)/(sw*sh*sd); - if (d_energy<=0 && -d_energy<_precision) break; - if (d_energy>0) dt*=0.5f; - energy = _energy; - } - } - return U; - } - - //! Compute Euclidean distance function to a specified value. - /** - \param value Reference value. - \param metric Type of metric. Can be { 0=Chebyshev | 1=Manhattan | 2=Euclidean | 3=Squared-euclidean }. - \note - The distance transform implementation has been submitted by A. Meijster, and implements - the article 'W.H. Hesselink, A. Meijster, J.B.T.M. Roerdink, - "A general algorithm for computing distance transforms in linear time.", - In: Mathematical Morphology and its Applications to Image and Signal Processing, - J. Goutsias, L. Vincent, and D.S. Bloomberg (eds.), Kluwer, 2000, pp. 331-340.' - The submitted code has then been modified to fit CImg coding style and constraints. - **/ - CImg& distance(const T value, const unsigned int metric=2) { - if (is_empty()) return *this; - bool is_value = false; - cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,0:(T)999999999; - if (!is_value) return fill(cimg::type::max()); - switch (metric) { - case 0 : return _distance_core(_distance_sep_cdt,_distance_dist_cdt); // Chebyshev. - case 1 : return _distance_core(_distance_sep_mdt,_distance_dist_mdt); // Manhattan. - case 3 : return _distance_core(_distance_sep_edt,_distance_dist_edt); // Squared Euclidean. - default : return _distance_core(_distance_sep_edt,_distance_dist_edt).sqrt(); // Euclidean. - } - return *this; - } - - //! Compute distance to a specified value \newinstance. - CImg get_distance(const T value, const unsigned int metric=2) const { - return CImg(*this,false).distance((Tfloat)value,metric); - } - - static long _distance_sep_edt(const long i, const long u, const long *const g) { - return (u*u-i*i+g[u]-g[i])/(2*(u-i)); - } - - static long _distance_dist_edt(const long x, const long i, const long *const g) { - return (x-i)*(x-i) + g[i]; - } - - static long _distance_sep_mdt(const long i, const long u, const long *const g) { - return (u-i<=g[u]-g[i]?999999999:(g[u]-g[i]+u+i)/2); - } - - static long _distance_dist_mdt(const long x, const long i, const long *const g) { - return (x=0) && f(t[q],s[q],g)>f(t[q],u,g)) { --q; } - if (q<0) { q = 0; s[0] = u; } - else { const long w = 1 + sep(s[q], u, g); if (w<(long)len) { ++q; s[q] = u; t[q] = w; }} - } - for (int u = (int)len-1; u>=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } // Backward scan. - } - - CImg& _distance_core(long (*const sep)(const long, const long, const long *const), - long (*const f)(const long, const long, const long *const)) { - const unsigned long wh = (unsigned long)_width*_height; - cimg_forC(*this,c) { - CImg g(_width), dt(_width), s(_width), t(_width); - CImg img = get_shared_channel(c); - cimg_forYZ(*this,y,z) { // Over X-direction. - cimg_forX(*this,x) g[x] = (long)img(x,y,z,0,wh); - _distance_scan(_width,g,sep,f,s,t,dt); - cimg_forX(*this,x) img(x,y,z,0,wh) = (T)dt[x]; - } - g.assign(_height); dt.assign(_height); s.assign(_height); t.assign(_height); - cimg_forXZ(*this,x,z) { // Over Y-direction. - cimg_forY(*this,y) g[y] = (long)img(x,y,z,0,wh); - _distance_scan(_height,g,sep,f,s,t,dt); - cimg_forY(*this,y) img(x,y,z,0,wh) = (T)dt[y]; - } - if (_depth>1) { - g.assign(_depth); dt.assign(_depth); s.assign(_depth); t.assign(_depth); - cimg_forXY(*this,x,y) { // Over Z-direction. - cimg_forZ(*this,z) g[z] = (long)img(x,y,z,0,wh); - _distance_scan(_depth,g,sep,f,s,t,dt); - cimg_forZ(*this,z) img(x,y,z,0,wh) = (T)dt[z]; - } - } - } - return *this; - } - - //! Compute chamfer distance to a specified value, with a custom metric. - /** - \param value Reference value. - \param metric_mask Metric mask. - \note The algorithm code has been initially proposed by A. Meijster, and modified by D. Tschumperlé. - **/ - template - CImg& distance(const T value, const CImg& metric_mask) { - if (is_empty()) return *this; - bool is_value = false; - cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,0:(T)999999999; - if (!is_value) return fill(cimg::type::max()); - const unsigned long wh = (unsigned long)_width*_height; - cimg_forC(*this,c) { - CImg img = get_shared_channel(c); - cimg_forXYZ(metric_mask,dx,dy,dz) { - const t weight = metric_mask(dx,dy,dz); - if (weight) { - for (int z = dz, nz = 0; z=0; --z,--nz) { // Backward scan. - for (int y = height() - 1 - dy, ny = height() - 1; y>=0; --y,--ny) { - for (int x = width() - 1 - dx, nx = width() - 1; x>=0; --x,--nx) { - const T dd = img(nx,ny,nz,0,wh) + weight; - if (dd - CImg get_distance(const T value, const CImg& metric_mask) const { - return CImg(*this,false).distance(value,metric_mask); - } - - //! Compute distance to a specified value, according to a custom metric (use dijkstra algorithm). - /** - \param value Reference value. - \param metric Field of distance potentials. - \param is_high_connectivity Tells if the algorithm uses low or high connectivity. - **/ - template - CImg& distance_dijkstra(const T value, const CImg& metric, const bool is_high_connectivity, CImg& return_path) { - return get_distance_dijkstra(value,metric,is_high_connectivity,return_path).move_to(*this); - } - - //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm). \newinstance. - template - CImg::type> get_distance_dijkstra(const T value, const CImg& metric, const bool is_high_connectivity, CImg& return_path) const { - if (is_empty()) return return_path.assign(); - if (!is_sameXYZ(metric)) - throw CImgArgumentException(_cimg_instance - "distance_dijkstra(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", - cimg_instance, - metric._width,metric._height,metric._depth,metric._spectrum); - typedef typename cimg::superset::type td; // Type used for computing cumulative distances. - CImg result(_width,_height,_depth,_spectrum), Q; - CImg is_queued(_width,_height,_depth,1); - if (return_path) return_path.assign(_width,_height,_depth,_spectrum); - - cimg_forC(*this,c) { - const CImg img = get_shared_channel(c); - const CImg met = metric.get_shared_channel(c%metric._spectrum); - CImg res = result.get_shared_channel(c); - CImg path = return_path?return_path.get_shared_channel(c):CImg(); - unsigned int sizeQ = 0; - - // Detect initial seeds. - is_queued.fill(0); - cimg_forXYZ(img,x,y,z) if (img(x,y,z)==value) { - Q._priority_queue_insert(is_queued,sizeQ,0,x,y,z); - res(x,y,z) = 0; - if (path) path(x,y,z) = (to)0; - } - - // Start distance propagation. - while (sizeQ) { - - // Get and remove point with minimal potential from the queue. - const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); - const td P = (td)-Q(0,0); - Q._priority_queue_remove(sizeQ); - - // Update neighbors. - td npot = 0; - if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x-1,y,z)+P),x-1,y,z)) { - res(x-1,y,z) = npot; if (path) path(x-1,y,z) = (to)2; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y-1,z)+P),x,y-1,z)) { - res(x,y-1,z) = npot; if (path) path(x,y-1,z) = (to)8; - } - if (y+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z-1)+P),x,y,z-1)) { - res(x,y,z-1) = npot; if (path) path(x,y,z-1) = (to)32; - } - if (z+1=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y-1,z)+P)),x-1,y-1,z)) { - res(x-1,y-1,z) = npot; if (path) path(x-1,y-1,z) = (to)10; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y-1,z)+P)),x+1,y-1,z)) { - res(x+1,y-1,z) = npot; if (path) path(x+1,y-1,z) = (to)9; - } - if (x-1>=0 && y+1=0) { // Diagonal neighbors on slice z-1. - if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z-1)+P)),x-1,y,z-1)) { - res(x-1,y,z-1) = npot; if (path) path(x-1,y,z-1) = (to)34; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z-1)+P)),x,y-1,z-1)) { - res(x,y-1,z-1) = npot; if (path) path(x,y-1,z-1) = (to)40; - } - if (y+1=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z-1)+P)),x-1,y-1,z-1)) { - res(x-1,y-1,z-1) = npot; if (path) path(x-1,y-1,z-1) = (to)42; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z-1)+P)),x+1,y-1,z-1)) { - res(x+1,y-1,z-1) = npot; if (path) path(x+1,y-1,z-1) = (to)41; - } - if (x-1>=0 && y+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z+1)+P)),x-1,y,z+1)) { - res(x-1,y,z+1) = npot; if (path) path(x-1,y,z+1) = (to)18; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z+1)+P)),x,y-1,z+1)) { - res(x,y-1,z+1) = npot; if (path) path(x,y-1,z+1) = (to)24; - } - if (y+1=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z+1)+P)),x-1,y-1,z+1)) { - res(x-1,y-1,z+1) = npot; if (path) path(x-1,y-1,z+1) = (to)26; - } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z+1)+P)),x+1,y-1,z+1)) { - res(x+1,y-1,z+1) = npot; if (path) path(x+1,y-1,z+1) = (to)25; - } - if (x-1>=0 && y+1 - CImg& distance_dijkstra(const T value, const CImg& metric, const bool is_high_connectivity=false) { - return get_distance_dijkstra(value,metric,is_high_connectivity).move_to(*this); - } - - //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm). \newinstance. - template - CImg get_distance_dijkstra(const T value, const CImg& metric, const bool is_high_connectivity=false) const { - CImg return_path; - return get_distance_dijkstra(value,metric,is_high_connectivity,return_path); - } - - //! Compute distance map to one source point, according to a custom metric (use fast marching algorithm). - /** - \param value Reference value. - \param metric Field of distance potentials. - **/ - template - CImg& distance_eikonal(const T value, const CImg& metric) { - return get_distance_eikonal(value,metric).move_to(*this); - } - - //! Compute distance map to one source point, according to a custom metric (use fast marching algorithm). - template - CImg get_distance_eikonal(const T value, const CImg& metric) const { - if (is_empty()) return *this; - if (!is_sameXYZ(metric)) - throw CImgArgumentException(_cimg_instance - "distance_eikonal(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", - cimg_instance, - metric._width,metric._height,metric._depth,metric._spectrum); - CImg result(_width,_height,_depth,_spectrum,cimg::type::max()),Q; - CImg state(_width,_height,_depth); // -1=far away, 0=narrow, 1=frozen. - - cimg_forC(*this,c) { - const CImg img = get_shared_channel(c); - const CImg met = metric.get_shared_channel(c%metric._spectrum); - CImg res = result.get_shared_channel(c); - unsigned int sizeQ = 0; - state.fill(-1); - - // Detect initial seeds. - Tfloat *ptr1 = res._data; char *ptr2 = state._data; - cimg_for(img,ptr0,T) { if (*ptr0==value) { *ptr1 = 0; *ptr2 = 1; } ++ptr1; ++ptr2; } - - // Initialize seeds neighbors. - ptr2 = state._data; - cimg_forXYZ(img,x,y,z) if (*(ptr2++)==1) { - if (x-1>=0 && state(x-1,y,z)==-1) { - const Tfloat dist = res(x-1,y,z) = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); - } - if (x+1=0 && state(x,y-1,z)==-1) { - const Tfloat dist = res(x,y-1,z) = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); - } - if (y+1=0 && state(x,y,z-1)==-1) { - const Tfloat dist = res(x,y,z-1) = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); - } - if (z+1=0) { - if (x-1>=0 && state(x-1,y,z)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); - if (dist=0 && state(x,y-1,z)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); - if (dist=0 && state(x,y,z-1)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); - if (dist& res, const Tfloat P, const int x=0, const int y=0, const int z=0) const { - const T M = cimg::type::max(); - T T1 = cimg::min(x-1>=0?res(x-1,y,z):M,x+11) { // 3d. - T - T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1=0?res(x,y,z-1):M,z+1T2) cimg::swap(T1,T2); - if (T2>T3) cimg::swap(T2,T3); - if (T1>T2) cimg::swap(T1,T2); - if (P<=0) return (Tfloat)T1; - if (T31) { // 2d. - T T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1T2) cimg::swap(T1,T2); - if (P<=0) return (Tfloat)T1; - if (T2 - void _eik_priority_queue_insert(CImg& state, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { - if (state(x,y,z)>0) return; - state(x,y,z) = 0; - if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } - (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; - for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { - cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); - cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); - } - } - - //! Compute distance function to 0-valued isophotes, using the Eikonal PDE. - /** - \param nb_iterations Number of PDE iterations. - \param band_size Size of the narrow band. - \param time_step Time step of the PDE iterations. - **/ - CImg& distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) { - if (is_empty()) return *this; - CImg velocity(*this); - for (unsigned int iteration = 0; iteration1) { // 3d - CImg_3x3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) if (band_size<=0 || cimg::abs(Iccc)0?(Incc - Iccc):(Iccc - Ipcc), - iy = gy*sgn>0?(Icnc - Iccc):(Iccc - Icpc), - iz = gz*sgn>0?(Iccn - Iccc):(Iccc - Iccp), - ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy + gz*gz)), - ngx = gx/ng, - ngy = gy/ng, - ngz = gz/ng, - veloc = sgn*(ngx*ix + ngy*iy + ngz*iz - 1); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } else *(ptrd++) = 0; - } else { // 2d version - CImg_3x3(I,Tfloat); - cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) if (band_size<=0 || cimg::abs(Icc)0?(Inc - Icc):(Icc - Ipc), - iy = gy*sgn>0?(Icn - Icc):(Icc - Icp), - ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy)), - ngx = gx/ng, - ngy = gy/ng, - veloc = sgn*(ngx*ix + ngy*iy - 1); - *(ptrd++) = veloc; - if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } else *(ptrd++) = 0; - } - if (veloc_max>0) *this+=(velocity*=time_step/veloc_max); - } - return *this; - } - - //! Compute distance function to 0-valued isophotes, using the Eikonal PDE \newinstance. - CImg get_distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) const { - return CImg(*this,false).distance_eikonal(nb_iterations,band_size,time_step); - } - - //! Compute Haar multiscale wavelet transform. - /** - \param axis Axis considered for the transform. - \param invert Set inverse of direct transform. - \param nb_scales Number of scales used for the transform. - **/ - CImg& haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) { - return get_haar(axis,invert,nb_scales).move_to(*this); - } - - //! Compute Haar multiscale wavelet transform \newinstance. - CImg get_haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) const { - if (is_empty() || !nb_scales) return +*this; - CImg res; - const Tfloat sqrt2 = std::sqrt(2); - if (nb_scales==1) { - switch (cimg::uncase(axis)) { // Single scale transform - case 'x' : { - const unsigned int w = _width/2; - if (w) { - if ((w%2) && w!=1) - throw CImgInstanceException(_cimg_instance - "haar(): Sub-image width %u is not even.", - cimg_instance, - w); - - res.assign(_width,_height,_depth,_spectrum); - if (invert) cimg_forYZC(*this,y,z,c) { // Inverse transform along X - for (unsigned int x = 0, xw = w, x2 = 0; x& haar(const bool invert=false, const unsigned int nb_scales=1) { - return get_haar(invert,nb_scales).move_to(*this); - } - - //! Compute Haar multiscale wavelet transform \newinstance. - CImg get_haar(const bool invert=false, const unsigned int nb_scales=1) const { - CImg res; - if (nb_scales==1) { // Single scale transform - if (_width>1) get_haar('x',invert,1).move_to(res); - if (_height>1) { if (res) res.haar('y',invert,1); else get_haar('y',invert,1).move_to(res); } - if (_depth>1) { if (res) res.haar('z',invert,1); else get_haar('z',invert,1).move_to(res); } - if (res) return res; - } else { // Multi-scale transform - if (invert) { // Inverse transform - res.assign(*this); - if (_width>1) { - if (_height>1) { - if (_depth>1) { - unsigned int w = _width, h = _height, d = _depth; for (unsigned int s = 1; w && h && d && s1) { - unsigned int w = _width, d = _depth; for (unsigned int s = 1; w && d && s1) { - if (_depth>1) { - unsigned int h = _height, d = _depth; for (unsigned int s = 1; h && d && s1) { - unsigned int d = _depth; for (unsigned int s = 1; d && s1) { - if (_height>1) { - if (_depth>1) for (unsigned int s = 1, w = _width/2, h = _height/2, d = _depth/2; w && h && d && s1) for (unsigned int s = 1, w = _width/2, d = _depth/2; w && d && s1) { - if (_depth>1) for (unsigned int s = 1, h = _height/2, d = _depth/2; h && d && s1) for (unsigned int s = 1, d = _depth/2; d && s get_FFT(const char axis, const bool is_invert=false) const { - CImgList res(*this,CImg()); - CImg::FFT(res[0],res[1],axis,is_invert); - return res; - } - - //! Compute n-d Fast Fourier Transform. - /* - \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. - **/ - CImgList get_FFT(const bool is_invert=false) const { - CImgList res(*this,CImg()); - CImg::FFT(res[0],res[1],is_invert); - return res; - } - - //! Compute 1d Fast Fourier Transform, along a specified axis. - /** - \param[in,out] real Real part of the pixel values. - \param[in,out] imag Imaginary part of the pixel values. - \param axis Axis along which the FFT is computed. - \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. - **/ - static void FFT(CImg& real, CImg& imag, const char axis, const bool is_invert=false) { - if (!real) - throw CImgInstanceException("CImg<%s>::FFT(): Specified real part is empty.", - pixel_type()); - - if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); - if (!real.is_sameXYZC(imag)) - throw CImgInstanceException("CImg<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", - pixel_type(), - real._width,real._height,real._depth,real._spectrum,real._data, - imag._width,imag._height,imag._depth,imag._spectrum,imag._data); -#ifdef cimg_use_fftw3 - cimg::mutex(12); - fftw_complex *data_in; - fftw_plan data_plan; - - switch (cimg::uncase(axis)) { - case 'x' : { // Fourier along X, using FFTW library. - data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width); - if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the X-axis.", - pixel_type(), - cimg::strbuffersize(sizeof(fftw_complex)*real._width), - real._width,real._height,real._depth,real._spectrum); - - data_plan = fftw_plan_dft_1d(real._width,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); - cimg_forYZC(real,y,z,c) { - T *ptrr = real.data(0,y,z,c), *ptri = imag.data(0,y,z,c); - double *ptrd = (double*)data_in; - cimg_forX(real,x) { *(ptrd++) = (double)*(ptrr++); *(ptrd++) = (double)*(ptri++); } - fftw_execute(data_plan); - const unsigned int fact = real._width; - if (is_invert) cimg_forX(real,x) { *(--ptri) = (T)(*(--ptrd)/fact); *(--ptrr) = (T)(*(--ptrd)/fact); } - else cimg_forX(real,x) { *(--ptri) = (T)*(--ptrd); *(--ptrr) = (T)*(--ptrd); } - } - } break; - case 'y' : { // Fourier along Y, using FFTW library. - data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._height); - if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Y-axis.", - pixel_type(), - cimg::strbuffersize(sizeof(fftw_complex)*real._height), - real._width,real._height,real._depth,real._spectrum); - - data_plan = fftw_plan_dft_1d(real._height,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); - const unsigned int off = real._width; - cimg_forXZC(real,x,z,c) { - T *ptrr = real.data(x,0,z,c), *ptri = imag.data(x,0,z,c); - double *ptrd = (double*)data_in; - cimg_forY(real,y) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } - fftw_execute(data_plan); - const unsigned int fact = real._height; - if (is_invert) cimg_forY(real,y) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } - else cimg_forY(real,y) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } - } - } break; - case 'z' : { // Fourier along Z, using FFTW library. - data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._depth); - if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Z-axis.", - pixel_type(), - cimg::strbuffersize(sizeof(fftw_complex)*real._depth), - real._width,real._height,real._depth,real._spectrum); - - data_plan = fftw_plan_dft_1d(real._depth,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); - const unsigned long off = (unsigned long)real._width*real._height; - cimg_forXYC(real,x,y,c) { - T *ptrr = real.data(x,y,0,c), *ptri = imag.data(x,y,0,c); - double *ptrd = (double*)data_in; - cimg_forZ(real,z) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } - fftw_execute(data_plan); - const unsigned int fact = real._depth; - if (is_invert) cimg_forZ(real,z) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } - else cimg_forZ(real,z) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } - } - } break; - default : { // Fourier along C, using FFTW library. - data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._spectrum); - if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the C-axis.", - pixel_type(), - cimg::strbuffersize(sizeof(fftw_complex)*real._spectrum), - real._width,real._height,real._depth,real._spectrum); - - data_plan = fftw_plan_dft_1d(real._spectrum,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); - const unsigned long off = (unsigned long)real._width*real._height*real._depth; - cimg_forXYZ(real,x,y,z) { - T *ptrr = real.data(x,y,z,0), *ptri = imag.data(x,y,z,0); - double *ptrd = (double*)data_in; - cimg_forC(real,c) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } - fftw_execute(data_plan); - const unsigned int fact = real._spectrum; - if (is_invert) cimg_forC(real,c) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } - else cimg_forC(real,c) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } - } - } - } - fftw_destroy_plan(data_plan); - fftw_free(data_in); - cimg::mutex(12,0); -#else - switch (cimg::uncase(axis)) { - case 'x' : { // Fourier along X, using built-in functions. - const unsigned int N = real._width, N2 = (N>>1); - if (((N-1)&N) && N!=1) - throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) have non 2^N dimension along the X-axis.", - pixel_type(), - real._width,real._height,real._depth,real._spectrum); - - for (unsigned int i = 0, j = 0; ii) cimg_forYZC(real,y,z,c) { - cimg::swap(real(i,y,z,c),real(j,y,z,c)); cimg::swap(imag(i,y,z,c),imag(j,y,z,c)); - if (j=m; j-=m, m = n, n>>=1) {} - } - for (unsigned int delta = 2; delta<=N; delta<<=1) { - const unsigned int delta2 = (delta>>1); - for (unsigned int i = 0; i>1); - if (((N-1)&N) && N!=1) - throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) have non 2^N dimension along the Y-axis.", - pixel_type(), - real._width,real._height,real._depth,real._spectrum); - - for (unsigned int i = 0, j = 0; ii) cimg_forXZC(real,x,z,c) { - cimg::swap(real(x,i,z,c),real(x,j,z,c)); cimg::swap(imag(x,i,z,c),imag(x,j,z,c)); - if (j=m; j-=m, m = n, n>>=1) {} - } - for (unsigned int delta = 2; delta<=N; delta<<=1) { - const unsigned int delta2 = (delta>>1); - for (unsigned int i = 0; i>1); - if (((N-1)&N) && N!=1) - throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) have non 2^N dimension along the Z-axis.", - pixel_type(), - real._width,real._height,real._depth,real._spectrum); - - for (unsigned int i = 0, j = 0; ii) cimg_forXYC(real,x,y,c) { - cimg::swap(real(x,y,i,c),real(x,y,j,c)); cimg::swap(imag(x,y,i,c),imag(x,y,j,c)); - if (j=m; j-=m, m = n, n>>=1) {} - } - for (unsigned int delta = 2; delta<=N; delta<<=1) { - const unsigned int delta2 = (delta>>1); - for (unsigned int i = 0; i::FFT(): Invalid specified axis '%c' for real and imaginary parts (%u,%u,%u,%u) " - "(should be { x | y | z }).", - pixel_type(),axis, - real._width,real._height,real._depth,real._spectrum); - } -#endif - } - - //! Compute n-d Fast Fourier Transform. - /** - \param[in,out] real Real part of the pixel values. - \param[in,out] imag Imaginary part of the pixel values. - \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. - \param nb_threads Number of parallel threads used for the computation. Use \c 0 to set this to the number of available cpus. - **/ - static void FFT(CImg& real, CImg& imag, const bool is_invert=false, const unsigned int nb_threads=0) { - if (!real) - throw CImgInstanceException("CImgList<%s>::FFT(): Empty specified real part.", - pixel_type()); - - if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); - if (!real.is_sameXYZC(imag)) - throw CImgInstanceException("CImgList<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", - pixel_type(), - real._width,real._height,real._depth,real._spectrum,real._data, - imag._width,imag._height,imag._depth,imag._spectrum,imag._data); - -#ifdef cimg_use_fftw3 - cimg::mutex(12); -#ifndef cimg_use_fftw3_singlethread - const unsigned int _nb_threads = nb_threads?nb_threads:cimg::nb_cpus(); - static int fftw_st = fftw_init_threads(); - cimg::unused(fftw_st); - fftw_plan_with_nthreads(_nb_threads); -#else - cimg::unused(nb_threads); -#endif - fftw_complex *data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width*real._height*real._depth); - if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u).", - pixel_type(), - cimg::strbuffersize(sizeof(fftw_complex)*real._width*real._height*real._depth*real._spectrum), - real._width,real._height,real._depth,real._spectrum); - - fftw_plan data_plan; - const unsigned long w = (unsigned long)real._width, wh = w*real._height, whd = wh*real._depth; - data_plan = fftw_plan_dft_3d(real._width,real._height,real._depth,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); - cimg_forC(real,c) { - T *ptrr = real.data(0,0,0,c), *ptri = imag.data(0,0,0,c); - double *ptrd = (double*)data_in; - for (unsigned int x = 0; x1) FFT(real,imag,'z',is_invert); - if (real._height>1) FFT(real,imag,'y',is_invert); - if (real._width>1) FFT(real,imag,'x',is_invert); -#endif - } - - //@} - //------------------------------------- - // - //! \name 3d Objects Management - //@{ - //------------------------------------- - - //! Shift 3d object's vertices. - /** - \param tx X-coordinate of the 3d displacement vector. - \param ty Y-coordinate of the 3d displacement vector. - \param tz Z-coordinate of the 3d displacement vector. - **/ - CImg& shift_object3d(const float tx, const float ty=0, const float tz=0) { - if (_height!=3 || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "shift_object3d(): Instance is not a set of 3d vertices.", - cimg_instance); - - get_shared_row(0)+=tx; get_shared_row(1)+=ty; get_shared_row(2)+=tz; - return *this; - } - - //! Shift 3d object's vertices \newinstance. - CImg get_shift_object3d(const float tx, const float ty=0, const float tz=0) const { - return CImg(*this,false).shift_object3d(tx,ty,tz); - } - - //! Shift 3d object's vertices, so that it becomes centered. - /** - \note The object center is computed as its barycenter. - **/ - CImg& shift_object3d() { - if (_height!=3 || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "shift_object3d(): Instance is not a set of 3d vertices.", - cimg_instance); - - CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); - float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); - xcoords-=(xm + xM)/2; ycoords-=(ym + yM)/2; zcoords-=(zm + zM)/2; - return *this; - } - - //! Shift 3d object's vertices, so that it becomes centered \newinstance. - CImg get_shift_object3d() const { - return CImg(*this,false).shift_object3d(); - } - - //! Resize 3d object. - /** - \param sx Width of the 3d object's bounding box. - \param sy Height of the 3d object's bounding box. - \param sz Depth of the 3d object's bounding box. - **/ - CImg& resize_object3d(const float sx, const float sy=-100, const float sz=-100) { - if (_height!=3 || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "resize_object3d(): Instance is not a set of 3d vertices.", - cimg_instance); - - CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); - float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); - if (xm0) xcoords*=sx/(xM-xm); else xcoords*=-sx/100; } - if (ym0) ycoords*=sy/(yM-ym); else ycoords*=-sy/100; } - if (zm0) zcoords*=sz/(zM-zm); else zcoords*=-sz/100; } - return *this; - } - - //! Resize 3d object \newinstance. - CImg get_resize_object3d(const float sx, const float sy=-100, const float sz=-100) const { - return CImg(*this,false).resize_object3d(sx,sy,sz); - } - - //! Resize 3d object to unit size. - CImg resize_object3d() { - if (_height!=3 || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "resize_object3d(): Instance is not a set of 3d vertices.", - cimg_instance); - - CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); - float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); - const float dx = xM - xm, dy = yM - ym, dz = zM - zm, dmax = cimg::max(dx,dy,dz); - if (dmax>0) { xcoords/=dmax; ycoords/=dmax; zcoords/=dmax; } - return *this; - } - - //! Resize 3d object to unit size \newinstance. - CImg get_resize_object3d() const { - return CImg(*this,false).resize_object3d(); - } - - //! Merge two 3d objects together. - /** - \param[in,out] primitives Primitives data of the current 3d object. - \param obj_vertices Vertices data of the additional 3d object. - \param obj_primitives Primitives data of the additional 3d object. - **/ - template - CImg& append_object3d(CImgList& primitives, const CImg& obj_vertices, const CImgList& obj_primitives) { - if (!obj_vertices || !obj_primitives) return *this; - if (obj_vertices._height!=3 || obj_vertices._depth>1 || obj_vertices._spectrum>1) - throw CImgInstanceException(_cimg_instance - "append_object3d(): Specified vertice image (%u,%u,%u,%u,%p) is not a set of 3d vertices.", - cimg_instance, - obj_vertices._width,obj_vertices._height,obj_vertices._depth,obj_vertices._spectrum,obj_vertices._data); - - if (is_empty()) { primitives.assign(obj_primitives); return assign(obj_vertices); } - if (_height!=3 || _depth>1 || _spectrum>1) - throw CImgInstanceException(_cimg_instance - "append_object3d(): Instance is not a set of 3d vertices.", - cimg_instance); - - const unsigned int P = _width; - append(obj_vertices,'x'); - const unsigned int N = primitives._width; - primitives.insert(obj_primitives); - for (unsigned int i = N; i &p = primitives[i]; - switch (p.size()) { - case 1 : p[0]+=P; break; // Point. - case 5 : p[0]+=P; p[1]+=P; break; // Sphere. - case 2 : case 6 : p[0]+=P; p[1]+=P; break; // Segment. - case 3 : case 9 : p[0]+=P; p[1]+=P; p[2]+=P; break; // Triangle. - case 4 : case 12 : p[0]+=P; p[1]+=P; p[2]+=P; p[3]+=P; break; // Rectangle. - } - } - return *this; - } - - //! Texturize primitives of a 3d object. - /** - \param[in,out] primitives Primitives data of the 3d object. - \param[in,out] colors Colors data of the 3d object. - \param texture Texture image to map to 3d object. - \param coords Texture-mapping coordinates. - **/ - template - const CImg& texturize_object3d(CImgList& primitives, CImgList& colors, - const CImg& texture, const CImg& coords=CImg::empty()) const { - if (is_empty()) return *this; - if (_height!=3) - throw CImgInstanceException(_cimg_instance - "texturize_object3d(): image instance is not a set of 3d points.", - cimg_instance); - if (coords && (coords._width!=_width || coords._height!=2)) - throw CImgArgumentException(_cimg_instance - "texturize_object3d(): Invalid specified texture coordinates (%u,%u,%u,%u,%p).", - cimg_instance, - coords._width,coords._height,coords._depth,coords._spectrum,coords._data); - CImg _coords; - if (!coords) { // If no texture coordinates specified, do a default XY-projection. - _coords.assign(_width,2); - float - xmin, xmax = (float)get_shared_row(0).max_min(xmin), - ymin, ymax = (float)get_shared_row(1).max_min(ymin), - dx = xmax>xmin?xmax-xmin:1, - dy = ymax>ymin?ymax-ymin:1; - cimg_forX(*this,p) { - _coords(p,0) = (unsigned int)(((*this)(p,0)-xmin)*(texture._width-1)/dx); - _coords(p,1) = (unsigned int)(((*this)(p,1)-ymin)*(texture._height-1)/dy); - } - } else _coords = coords; - - int texture_ind = -1; - cimglist_for(primitives,l) { - CImg &p = primitives[l]; - const unsigned int siz = p.size(); - switch (siz) { - case 1 : { // Point. - const unsigned int - i0 = (unsigned int)p[0], - x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1); - texture.get_vector_at(x0,y0).move_to(colors[l]); - } break; - case 2 : case 6 : { // Line. - const unsigned int - i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], - x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), - x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1); - if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); - CImg::vector(i0,i1,x0,y0,x1,y1).move_to(p); - } break; - case 3 : case 9 : { // Triangle. - const unsigned int - i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], - x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), - x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), - x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1); - if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); - CImg::vector(i0,i1,i2,x0,y0,x1,y1,x2,y2).move_to(p); - } break; - case 4 : case 12 : { // Quadrangle. - const unsigned int - i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], i3 = (unsigned int)p[3], - x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), - x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), - x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1), - x3 = (unsigned int)_coords(i3,0), y3 = (unsigned int)_coords(i3,1); - if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); - CImg::vector(i0,i1,i2,i3,x0,y0,x1,y1,x2,y2,x3,y3).move_to(p); - } break; - } - } - return *this; - } - - //! Generate a 3d elevation of the image instance. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param[out] colors The returned list of the 3d object colors. - \param elevation The input elevation map. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - const CImg img("reference.jpg"); - CImgList faces3d; - CImgList colors3d; - const CImg points3d = img.get_elevation3d(faces3d,colors3d,img.get_norm()*0.2); - CImg().display_object3d("Elevation3d",points3d,faces3d,colors3d); - \endcode - \image html ref_elevation3d.jpg - **/ - template - CImg get_elevation3d(CImgList& primitives, CImgList& colors, const CImg& elevation) const { - if (!is_sameXY(elevation) || elevation._depth>1 || elevation._spectrum>1) - throw CImgArgumentException(_cimg_instance - "get_elevation3d(): Instance and specified elevation (%u,%u,%u,%u,%p) " - "have incompatible dimensions.", - cimg_instance, - elevation._width,elevation._height,elevation._depth,elevation._spectrum,elevation._data); - if (is_empty()) return *this; - float m, M = (float)max_min(m); - if (M==m) ++M; - colors.assign(); - const unsigned int size_x1 = _width - 1, size_y1 = _height - 1; - for (unsigned int y = 0; y1?(unsigned char)(((*this)(x,y,1) - m)*255/(M-m)):r, - b = _spectrum>2?(unsigned char)(((*this)(x,y,2) - m)*255/(M-m)):(_spectrum>1?0:r); - CImg::vector((tc)r,(tc)g,(tc)b).move_to(colors); - } - const typename CImg::_functor2d_int func(elevation); - return elevation3d(primitives,func,0,0,_width-1.0f,_height-1.0f,_width,_height); - } - - //! Generate the 3d projection planes of the image instance. - /** - \param[out] primitives Primitives data of the returned 3d object. - \param[out] colors Colors data of the returned 3d object. - \param x0 X-coordinate of the projection point. - \param y0 Y-coordinate of the projection point. - \param z0 Z-coordinate of the projection point. - \param normalize_colors Tells if the created textures have normalized colors. - **/ - template - CImg get_projections3d(CImgList& primitives, CImgList& colors, - const unsigned int x0, const unsigned int y0, const unsigned int z0, - const bool normalize_colors=false) const { - float m = 0, M = 0, delta = 1; - if (normalize_colors) { m = (float)min_max(M); delta = 255/(m==M?1:M-m); } - const unsigned int - _x0 = (x0>=_width)?_width - 1:x0, - _y0 = (y0>=_height)?_height - 1:y0, - _z0 = (z0>=_depth)?_depth - 1:z0; - CImg img_xy, img_xz, img_yz; - if (normalize_colors) { - ((get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1)-=m)*=delta).move_to(img_xy); - ((get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1)-=m)*=delta).resize(_width,_depth,1,-100,-1).move_to(img_xz); - ((get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1)-=m)*=delta).resize(_height,_depth,1,-100,-1).move_to(img_yz); - } else { - get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1).move_to(img_xy); - get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1).move_to(img_xz); - get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).resize(_height,_depth,1,-100,-1).move_to(img_yz); - } - CImg points(12,3,1,1, - 0,_width-1,_width-1,0, 0,_width-1,_width-1,0, _x0,_x0,_x0,_x0, - 0,0,_height-1,_height-1, _y0,_y0,_y0,_y0, 0,_height-1,_height-1,0, - _z0,_z0,_z0,_z0, 0,0,_depth-1,_depth-1, 0,0,_depth-1,_depth-1); - primitives.assign(); - CImg::vector(0,1,2,3,0,0,img_xy._width-1,0,img_xy._width-1,img_xy._height-1,0,img_xy._height-1).move_to(primitives); - CImg::vector(4,5,6,7,0,0,img_xz._width-1,0,img_xz._width-1,img_xz._height-1,0,img_xz._height-1).move_to(primitives); - CImg::vector(8,9,10,11,0,0,img_yz._width-1,0,img_yz._width-1,img_yz._height-1,0,img_yz._height-1).move_to(primitives); - colors.assign(); - img_xy.move_to(colors); - img_xz.move_to(colors); - img_yz.move_to(colors); - return points; - } - - //! Generate a isoline of the image instance as a 3d object. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param isovalue The returned list of the 3d object colors. - \param size_x The number of subdivisions along the X-axis. - \param size_y The number of subdisivions along the Y-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - const CImg img("reference.jpg"); - CImgList faces3d; - const CImg points3d = img.get_isoline3d(faces3d,100); - CImg().display_object3d("Isoline3d",points3d,faces3d,colors3d); - \endcode - \image html ref_isoline3d.jpg - **/ - template - CImg get_isoline3d(CImgList& primitives, const float isovalue, - const int size_x=-100, const int size_y=-100) const { - if (_spectrum>1) - throw CImgInstanceException(_cimg_instance - "get_isoline3d(): Instance is not a scalar image.", - cimg_instance); - if (_depth>1) - throw CImgInstanceException(_cimg_instance - "get_isoline3d(): Instance is not a 2d image.", - cimg_instance); - primitives.assign(); - if (is_empty()) return *this; - CImg vertices; - if ((size_x==-100 && size_y==-100) || (size_x==width() && size_y==height())) { - const _functor2d_int func(*this); - vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,width(),height()); - } else { - const _functor2d_float func(*this); - vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,size_x,size_y); - } - return vertices; - } - - //! Generate an isosurface of the image instance as a 3d object. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param isovalue The returned list of the 3d object colors. - \param size_x Number of subdivisions along the X-axis. - \param size_y Number of subdisivions along the Y-axis. - \param size_z Number of subdisivions along the Z-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - const CImg img = CImg("reference.jpg").resize(-100,-100,20); - CImgList faces3d; - const CImg points3d = img.get_isosurface3d(faces3d,100); - CImg().display_object3d("Isosurface3d",points3d,faces3d,colors3d); - \endcode - \image html ref_isosurface3d.jpg - **/ - template - CImg get_isosurface3d(CImgList& primitives, const float isovalue, - const int size_x=-100, const int size_y=-100, const int size_z=-100) const { - if (_spectrum>1) - throw CImgInstanceException(_cimg_instance - "get_isosurface3d(): Instance is not a scalar image.", - cimg_instance); - primitives.assign(); - if (is_empty()) return *this; - CImg vertices; - if ((size_x==-100 && size_y==-100 && size_z==-100) || (size_x==width() && size_y==height() && size_z==depth())) { - const _functor3d_int func(*this); - vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,width(),height(),depth()); - } else { - const _functor3d_float func(*this); - vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,size_x,size_y,size_z); - } - return vertices; - } - - //! Compute 3d elevation of a function as a 3d object. - /** - \param[out] primitives Primitives data of the resulting 3d object. - \param func Elevation function. Is of type float (*func)(const float x,const float y). - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param size_x Resolution of the function along the X-axis. - \param size_y Resolution of the function along the Y-axis. - **/ - template - static CImg elevation3d(CImgList& primitives, const tfunc& func, - const float x0, const float y0, const float x1, const float y1, - const int size_x=256, const int size_y=256) { - const float - nx0 = x0=0?size_x:(nx1-nx0)*-size_x/100), nsize_x = _nsize_x?_nsize_x:1, nsize_x1 = nsize_x - 1, - _nsize_y = (unsigned int)(size_y>=0?size_y:(ny1-ny0)*-size_y/100), nsize_y = _nsize_y?_nsize_y:1, nsize_y1 = nsize_y - 1; - if (nsize_x<2 || nsize_y<2) - throw CImgArgumentException("CImg<%s>::elevation3d(): Invalid specified size (%d,%d).", - pixel_type(), - nsize_x,nsize_y); - - CImg vertices(nsize_x*nsize_y,3); - floatT *ptr_x = vertices.data(0,0), *ptr_y = vertices.data(0,1), *ptr_z = vertices.data(0,2); - for (unsigned int y = 0; y - static CImg elevation3d(CImgList& primitives, const char *const expression, - const float x0, const float y0, const float x1, const float y1, - const int size_x=256, const int size_y=256) { - const _functor2d_expr func(expression); - return elevation3d(primitives,func,x0,y0,x1,y1,size_x,size_y); - } - - //! Compute 0-isolines of a function, as a 3d object. - /** - \param[out] primitives Primitives data of the resulting 3d object. - \param func Elevation function. Is of type float (*func)(const float x,const float y). - \param isovalue Isovalue to extract from function. - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param size_x Resolution of the function along the X-axis. - \param size_y Resolution of the function along the Y-axis. - \note Use the marching squares algorithm for extracting the isolines. - **/ - template - static CImg isoline3d(CImgList& primitives, const tfunc& func, const float isovalue, - const float x0, const float y0, const float x1, const float y1, - const int size_x=256, const int size_y=256) { - static const unsigned int edges[16] = { 0x0, 0x9, 0x3, 0xa, 0x6, 0xf, 0x5, 0xc, 0xc, 0x5, 0xf, 0x6, 0xa, 0x3, 0x9, 0x0 }; - static const int segments[16][4] = { { -1,-1,-1,-1 }, { 0,3,-1,-1 }, { 0,1,-1,-1 }, { 1,3,-1,-1 }, - { 1,2,-1,-1 }, { 0,1,2,3 }, { 0,2,-1,-1 }, { 2,3,-1,-1 }, - { 2,3,-1,-1 }, { 0,2,-1,-1}, { 0,3,1,2 }, { 1,2,-1,-1 }, - { 1,3,-1,-1 }, { 0,1,-1,-1}, { 0,3,-1,-1}, { -1,-1,-1,-1 } }; - const unsigned int - _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), - _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), - nx = _nx?_nx:1, - ny = _ny?_ny:1, - nxm1 = nx - 1, - nym1 = ny - 1; - primitives.assign(); - if (!nxm1 || !nym1) return CImg(); - const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1; - CImgList vertices; - CImg indices1(nx,1,1,2,-1), indices2(nx,1,1,2); - CImg values1(nx), values2(nx); - float X = x0, Y = y0, nX = X + dx, nY = Y + dy; - - // Fill first line with values - cimg_forX(values1,x) { values1(x) = (float)func(X,Y); X+=dx; } - - // Run the marching squares algorithm - for (unsigned int yi = 0, nyi = 1; yi::vector(Xi,Y,0).move_to(vertices); - } - if ((edge&2) && indices1(nxi,1)<0) { - const float Yi = Y + (isovalue-val1)*dy/(val2-val1); - indices1(nxi,1) = vertices._width; - CImg::vector(nX,Yi,0).move_to(vertices); - } - if ((edge&4) && indices2(xi,0)<0) { - const float Xi = X + (isovalue-val3)*dx/(val2-val3); - indices2(xi,0) = vertices._width; - CImg::vector(Xi,nY,0).move_to(vertices); - } - if ((edge&8) && indices1(xi,1)<0) { - const float Yi = Y + (isovalue-val0)*dy/(val3-val0); - indices1(xi,1) = vertices._width; - CImg::vector(X,Yi,0).move_to(vertices); - } - - // Create segments - for (const int *segment = segments[configuration]; *segment!=-1; ) { - const unsigned int p0 = *(segment++), p1 = *(segment++); - const tf - i0 = (tf)(_isoline3d_indice(p0,indices1,indices2,xi,nxi)), - i1 = (tf)(_isoline3d_indice(p1,indices1,indices2,xi,nxi)); - CImg::vector(i0,i1).move_to(primitives); - } - } - } - values1.swap(values2); - indices1.swap(indices2); - } - return vertices>'x'; - } - - //! Compute isolines of a function, as a 3d object \overloading. - template - static CImg isoline3d(CImgList& primitives, const char *const expression, const float isovalue, - const float x0, const float y0, const float x1, const float y1, - const int size_x=256, const int size_y=256) { - const _functor2d_expr func(expression); - return isoline3d(primitives,func,isovalue,x0,y0,x1,y1,size_x,size_y); - } - - template - static int _isoline3d_indice(const unsigned int edge, const CImg& indices1, const CImg& indices2, - const unsigned int x, const unsigned int nx) { - switch (edge) { - case 0 : return (int)indices1(x,0); - case 1 : return (int)indices1(nx,1); - case 2 : return (int)indices2(x,0); - case 3 : return (int)indices1(x,1); - } - return 0; - } - - //! Compute isosurface of a function, as a 3d object. - /** - \param[out] primitives Primitives data of the resulting 3d object. - \param func Implicit function. Is of type float (*func)(const float x, const float y, const float z). - \param isovalue Isovalue to extract. - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param z0 Z-coordinate of the starting point. - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param z1 Z-coordinate of the ending point. - \param size_x Resolution of the elevation function along the X-axis. - \param size_y Resolution of the elevation function along the Y-axis. - \param size_z Resolution of the elevation function along the Z-axis. - \note Use the marching cubes algorithm for extracting the isosurface. - **/ - template - static CImg isosurface3d(CImgList& primitives, const tfunc& func, const float isovalue, - const float x0, const float y0, const float z0, - const float x1, const float y1, const float z1, - const int size_x=32, const int size_y=32, const int size_z=32) { - static const unsigned int edges[256] = { - 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, - 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, - 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, - 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, - 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, - 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, - 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, - 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, - 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, - 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, - 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, - 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, - 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, - 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, - 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, - 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 }; - - static const int triangles[256][16] = { - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, - { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, - { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, - { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, - { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1 }, - { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1 }, - { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1 }, - { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1 }, - { 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1 }, - { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1 }, { 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1 }, - { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1 }, { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, - { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, - { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1 }, { 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1 }, { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1 }, - { 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1 }, { 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1 }, - { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1 }, - { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, - { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1 }, { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, - { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, - { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1 }, - { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1 }, { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1 }, - { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, - { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1 }, { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1 }, - { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1 }, - { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1 }, { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1 }, - { 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 }, - { 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, - { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1 }, - { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1 }, - { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1 }, - { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1 }, { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1 }, - { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1 }, - { 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1 }, { 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1 }, - { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1 }, - { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1 }, { 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1 }, - { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1 }, { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1 }, { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1 }, - { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1 }, - { 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1 }, - { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1 }, { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, - { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1 }, - { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1 }, - { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1 }, { 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1 }, - { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1 }, { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1 }, { 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, - { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1 }, { 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, - { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1 }, - { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1 }, - { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1 }, { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1 }, - { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1 }, - { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1 }, { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1 }, - { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1 }, { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1 }, - { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1 }, { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1 }, - { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1 }, - { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1 }, { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1 }, { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1 }, - { 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1 }, { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1 }, - { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1 }, { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1 }, { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1 }, { 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1 }, - { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1 }, - { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1 }, - { 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1 }, - { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1 }, { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1 }, - { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1 }, - { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1 }, { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1 }, - { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1 }, - { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1 }, { 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1 }, - { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1 }, { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1 }, - { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1 }, { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1 }, { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, - { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1 }, { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1 }, - { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1 }, { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1 }, - { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1 }, { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1 }, - { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1 }, { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1 }, - { 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1 }, - { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1 }, { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1 }, - { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1 }, { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1 }, - { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1 }, - { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1 }, { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, - { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } - }; - - const unsigned int - _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), - _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), - _nz = (unsigned int)(size_z>=0?size_z:cimg::round((z1-z0)*-size_z/100 + 1)), - nx = _nx?_nx:1, - ny = _ny?_ny:1, - nz = _nz?_nz:1, - nxm1 = nx - 1, - nym1 = ny - 1, - nzm1 = nz - 1; - primitives.assign(); - if (!nxm1 || !nym1 || !nzm1) return CImg(); - const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1, dz = (z1 - z0)/nzm1; - CImgList vertices; - CImg indices1(nx,ny,1,3,-1), indices2(indices1); - CImg values1(nx,ny), values2(nx,ny); - float X = 0, Y = 0, Z = 0, nX = 0, nY = 0, nZ = 0; - - // Fill the first plane with function values - Y = y0; - cimg_forY(values1,y) { - X = x0; - cimg_forX(values1,x) { values1(x,y) = (float)func(X,Y,z0); X+=dx; } - Y+=dy; - } - - // Run Marching Cubes algorithm - Z = z0; nZ = Z + dz; - for (unsigned int zi = 0; zi::vector(Xi,Y,Z).move_to(vertices); - } - if ((edge&2) && indices1(nxi,yi,1)<0) { - const float Yi = Y + (isovalue-val1)*dy/(val2-val1); - indices1(nxi,yi,1) = vertices._width; - CImg::vector(nX,Yi,Z).move_to(vertices); - } - if ((edge&4) && indices1(xi,nyi,0)<0) { - const float Xi = X + (isovalue-val3)*dx/(val2-val3); - indices1(xi,nyi,0) = vertices._width; - CImg::vector(Xi,nY,Z).move_to(vertices); - } - if ((edge&8) && indices1(xi,yi,1)<0) { - const float Yi = Y + (isovalue-val0)*dy/(val3-val0); - indices1(xi,yi,1) = vertices._width; - CImg::vector(X,Yi,Z).move_to(vertices); - } - if ((edge&16) && indices2(xi,yi,0)<0) { - const float Xi = X + (isovalue-val4)*dx/(val5-val4); - indices2(xi,yi,0) = vertices._width; - CImg::vector(Xi,Y,nZ).move_to(vertices); - } - if ((edge&32) && indices2(nxi,yi,1)<0) { - const float Yi = Y + (isovalue-val5)*dy/(val6-val5); - indices2(nxi,yi,1) = vertices._width; - CImg::vector(nX,Yi,nZ).move_to(vertices); - } - if ((edge&64) && indices2(xi,nyi,0)<0) { - const float Xi = X + (isovalue-val7)*dx/(val6-val7); - indices2(xi,nyi,0) = vertices._width; - CImg::vector(Xi,nY,nZ).move_to(vertices); - } - if ((edge&128) && indices2(xi,yi,1)<0) { - const float Yi = Y + (isovalue-val4)*dy/(val7-val4); - indices2(xi,yi,1) = vertices._width; - CImg::vector(X,Yi,nZ).move_to(vertices); - } - if ((edge&256) && indices1(xi,yi,2)<0) { - const float Zi = Z+ (isovalue-val0)*dz/(val4-val0); - indices1(xi,yi,2) = vertices._width; - CImg::vector(X,Y,Zi).move_to(vertices); - } - if ((edge&512) && indices1(nxi,yi,2)<0) { - const float Zi = Z + (isovalue-val1)*dz/(val5-val1); - indices1(nxi,yi,2) = vertices._width; - CImg::vector(nX,Y,Zi).move_to(vertices); - } - if ((edge&1024) && indices1(nxi,nyi,2)<0) { - const float Zi = Z + (isovalue-val2)*dz/(val6-val2); - indices1(nxi,nyi,2) = vertices._width; - CImg::vector(nX,nY,Zi).move_to(vertices); - } - if ((edge&2048) && indices1(xi,nyi,2)<0) { - const float Zi = Z + (isovalue-val3)*dz/(val7-val3); - indices1(xi,nyi,2) = vertices._width; - CImg::vector(X,nY,Zi).move_to(vertices); - } - - // Create triangles - for (const int *triangle = triangles[configuration]; *triangle!=-1; ) { - const unsigned int p0 = *(triangle++), p1 = *(triangle++), p2 = *(triangle++); - const tf - i0 = (tf)(_isosurface3d_indice(p0,indices1,indices2,xi,yi,nxi,nyi)), - i1 = (tf)(_isosurface3d_indice(p1,indices1,indices2,xi,yi,nxi,nyi)), - i2 = (tf)(_isosurface3d_indice(p2,indices1,indices2,xi,yi,nxi,nyi)); - CImg::vector(i0,i2,i1).move_to(primitives); - } - } - } - } - cimg::swap(values1,values2); - cimg::swap(indices1,indices2); - } - return vertices>'x'; - } - - //! Compute isosurface of a function, as a 3d object \overloading. - template - static CImg isosurface3d(CImgList& primitives, const char *const expression, const float isovalue, - const float x0, const float y0, const float z0, - const float x1, const float y1, const float z1, - const int dx=32, const int dy=32, const int dz=32) { - const _functor3d_expr func(expression); - return isosurface3d(primitives,func,isovalue,x0,y0,z0,x1,y1,z1,dx,dy,dz); - } - - template - static int _isosurface3d_indice(const unsigned int edge, const CImg& indices1, const CImg& indices2, - const unsigned int x, const unsigned int y, const unsigned int nx, const unsigned int ny) { - switch (edge) { - case 0 : return indices1(x,y,0); - case 1 : return indices1(nx,y,1); - case 2 : return indices1(x,ny,0); - case 3 : return indices1(x,y,1); - case 4 : return indices2(x,y,0); - case 5 : return indices2(nx,y,1); - case 6 : return indices2(x,ny,0); - case 7 : return indices2(x,y,1); - case 8 : return indices1(x,y,2); - case 9 : return indices1(nx,y,2); - case 10 : return indices1(nx,ny,2); - case 11 : return indices1(x,ny,2); - } - return 0; - } - - // Define functors for accessing image values (used in previous functions). - struct _functor2d_int { - const CImg& ref; - _functor2d_int(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y) const { - return (float)ref((int)x,(int)y); - } - }; - - struct _functor2d_float { - const CImg& ref; - _functor2d_float(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y) const { - return (float)ref._linear_atXY(x,y); - } - }; - - struct _functor2d_expr { - _cimg_math_parser *mp; - _functor2d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg::empty(),expr,0); } - ~_functor2d_expr() { delete mp; } - float operator()(const float x, const float y) const { - return (float)mp->eval(x,y,0,0); - } - }; - - struct _functor3d_int { - const CImg& ref; - _functor3d_int(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y, const float z) const { - return (float)ref((int)x,(int)y,(int)z); - } - }; - - struct _functor3d_float { - const CImg& ref; - _functor3d_float(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y, const float z) const { - return (float)ref._linear_atXYZ(x,y,z); - } - }; - - struct _functor3d_expr { - _cimg_math_parser *mp; - ~_functor3d_expr() { delete mp; } - _functor3d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg::empty(),expr,0); } - float operator()(const float x, const float y, const float z) const { - return (float)mp->eval(x,y,z,0); - } - }; - - struct _functor4d_int { - const CImg& ref; - _functor4d_int(const CImg& pref):ref(pref) {} - float operator()(const float x, const float y, const float z, const unsigned int c) const { - return (float)ref((int)x,(int)y,(int)z,c); - } - }; - - //! Generate a 3d box object. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param size_x The width of the box (dimension along the X-axis). - \param size_y The height of the box (dimension along the Y-axis). - \param size_z The depth of the box (dimension along the Z-axis). - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::box3d(faces3d,10,20,30); - CImg().display_object3d("Box3d",points3d,faces3d); - \endcode - \image html ref_box3d.jpg - **/ - template - static CImg box3d(CImgList& primitives, - const float size_x=200, const float size_y=100, const float size_z=100) { - primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 0,1,5,4, 3,7,6,2, 0,4,7,3, 1,2,6,5); - return CImg(8,3,1,1, - 0.,size_x,size_x, 0., 0.,size_x,size_x, 0., - 0., 0.,size_y,size_y, 0., 0.,size_y,size_y, - 0., 0., 0., 0.,size_z,size_z,size_z,size_z); - } - - //! Generate a 3d cone. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param radius The radius of the cone basis. - \param size_z The cone's height. - \param subdivisions The number of basis angular subdivisions. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::cone3d(faces3d,50); - CImg().display_object3d("Cone3d",points3d,faces3d); - \endcode - \image html ref_cone3d.jpg - **/ - template - static CImg cone3d(CImgList& primitives, - const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { - primitives.assign(); - if (!subdivisions) return CImg(); - CImgList vertices(2,1,3,1,1, - 0.,0.,size_z, - 0.,0.,0.); - for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { - const float a = (float)(angle*cimg::PI/180); - CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0).move_to(vertices); - } - const unsigned int nbr = vertices._width - 2; - for (unsigned int p = 0; p::vector(1,next,curr).move_to(primitives); - CImg::vector(0,curr,next).move_to(primitives); - } - return vertices>'x'; - } - - //! Generate a 3d cylinder. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param radius The radius of the cylinder basis. - \param size_z The cylinder's height. - \param subdivisions The number of basis angular subdivisions. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::cylinder3d(faces3d,50); - CImg().display_object3d("Cylinder3d",points3d,faces3d); - \endcode - \image html ref_cylinder3d.jpg - **/ - template - static CImg cylinder3d(CImgList& primitives, - const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { - primitives.assign(); - if (!subdivisions) return CImg(); - CImgList vertices(2,1,3,1,1, - 0.,0.,0., - 0.,0.,size_z); - for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { - const float a = (float)(angle*cimg::PI/180); - CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0.0f).move_to(vertices); - CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),size_z).move_to(vertices); - } - const unsigned int nbr = (vertices._width - 2)/2; - for (unsigned int p = 0; p::vector(0,next,curr).move_to(primitives); - CImg::vector(1,curr+1,next+1).move_to(primitives); - CImg::vector(curr,next,next+1,curr+1).move_to(primitives); - } - return vertices>'x'; - } - - //! Generate a 3d torus. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param radius1 The large radius. - \param radius2 The small radius. - \param subdivisions1 The number of angular subdivisions for the large radius. - \param subdivisions2 The number of angular subdivisions for the small radius. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::torus3d(faces3d,20,4); - CImg().display_object3d("Torus3d",points3d,faces3d); - \endcode - \image html ref_torus3d.jpg - **/ - template - static CImg torus3d(CImgList& primitives, - const float radius1=100, const float radius2=30, - const unsigned int subdivisions1=24, const unsigned int subdivisions2=12) { - primitives.assign(); - if (!subdivisions1 || !subdivisions2) return CImg(); - CImgList vertices; - for (unsigned int v = 0; v::vector(x,y,z).move_to(vertices); - } - } - for (unsigned int vv = 0; vv::vector(svv+nu,svv+uu,snv+uu,snv+nu).move_to(primitives); - } - } - return vertices>'x'; - } - - //! Generate a 3d XY-plane. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param size_x The width of the plane (dimension along the X-axis). - \param size_y The height of the plane (dimensions along the Y-axis). - \param subdivisions_x The number of planar subdivisions along the X-axis. - \param subdivisions_y The number of planar subdivisions along the Y-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::plane3d(faces3d,100,50); - CImg().display_object3d("Plane3d",points3d,faces3d); - \endcode - \image html ref_plane3d.jpg - **/ - template - static CImg plane3d(CImgList& primitives, - const float size_x=100, const float size_y=100, - const unsigned int subdivisions_x=10, const unsigned int subdivisions_y=10) { - primitives.assign(); - if (!subdivisions_x || !subdivisions_y) return CImg(); - CImgList vertices; - const unsigned int w = subdivisions_x + 1, h = subdivisions_y + 1; - const float fx = (float)size_x/w, fy = (float)size_y/h; - for (unsigned int y = 0; y::vector(fx*x,fy*y,0).move_to(vertices); - for (unsigned int y = 0; y::vector(off1,off4,off3,off2).move_to(primitives); - } - return vertices>'x'; - } - - //! Generate a 3d sphere. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param radius The radius of the sphere (dimension along the X-axis). - \param subdivisions The number of recursive subdivisions from an initial icosahedron. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg points3d = CImg::sphere3d(faces3d,100,4); - CImg().display_object3d("Sphere3d",points3d,faces3d); - \endcode - \image html ref_sphere3d.jpg - **/ - template - static CImg sphere3d(CImgList& primitives, - const float radius=50, const unsigned int subdivisions=3) { - - // Create initial icosahedron - primitives.assign(); - const double tmp = (1+std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1+tmp*tmp), b = tmp*a; - CImgList vertices(12,1,3,1,1, b,a,0.0, -b,a,0.0, -b,-a,0.0, b,-a,0.0, a,0.0,b, a,0.0,-b, - -a,0.0,-b, -a,0.0,b, 0.0,b,a, 0.0,-b,a, 0.0,-b,-a, 0.0,b,-a); - primitives.assign(20,1,3,1,1, 4,8,7, 4,7,9, 5,6,11, 5,10,6, 0,4,3, 0,3,5, 2,7,1, 2,1,6, - 8,0,11, 8,11,1, 9,10,3, 9,2,10, 8,4,0, 11,0,5, 4,9,3, - 5,3,10, 7,8,1, 6,1,11, 7,2,9, 6,10,2); - // edge - length/2 - float he = (float)a; - - // Recurse subdivisions - for (unsigned int i = 0; i::vector(nx0,ny0,nz0).move_to(vertices); i0 = vertices._width - 1; } - if (i1<0) { CImg::vector(nx1,ny1,nz1).move_to(vertices); i1 = vertices._width - 1; } - if (i2<0) { CImg::vector(nx2,ny2,nz2).move_to(vertices); i2 = vertices._width - 1; } - primitives.remove(0); - CImg::vector(p0,i0,i1).move_to(primitives); - CImg::vector((tf)i0,(tf)p1,(tf)i2).move_to(primitives); - CImg::vector((tf)i1,(tf)i2,(tf)p2).move_to(primitives); - CImg::vector((tf)i1,(tf)i0,(tf)i2).move_to(primitives); - } - } - return (vertices>'x')*=radius; - } - - //! Generate a 3d ellipsoid. - /** - \param[out] primitives The returned list of the 3d object primitives - (template type \e tf should be at least \e unsigned \e int). - \param tensor The tensor which gives the shape and size of the ellipsoid. - \param subdivisions The number of recursive subdivisions from an initial stretched icosahedron. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). - \par Example - \code - CImgList faces3d; - const CImg tensor = CImg::diagonal(10,7,3), - points3d = CImg::ellipsoid3d(faces3d,tensor,4); - CImg().display_object3d("Ellipsoid3d",points3d,faces3d); - \endcode - \image html ref_ellipsoid3d.jpg - **/ - template - static CImg ellipsoid3d(CImgList& primitives, - const CImg& tensor, const unsigned int subdivisions=3) { - primitives.assign(); - if (!subdivisions) return CImg(); - CImg S, V; - tensor.symmetric_eigen(S,V); - const float orient = - (V(0,1)*V(1,2) - V(0,2)*V(1,1))*V(2,0) + - (V(0,2)*V(1,0) - V(0,0)*V(1,2))*V(2,1) + - (V(0,0)*V(1,1) - V(0,1)*V(1,0))*V(2,2); - if (orient<0) { V(2,0) = -V(2,0); V(2,1) = -V(2,1); V(2,2) = -V(2,2); } - const float l0 = S[0], l1 = S[1], l2 = S[2]; - CImg vertices = sphere3d(primitives,1.0,subdivisions); - vertices.get_shared_row(0)*=l0; - vertices.get_shared_row(1)*=l1; - vertices.get_shared_row(2)*=l2; - return V*vertices; - } - - //! Convert 3d object into a CImg3d representation. - /** - \param primitives Primitives data of the 3d object. - \param colors Colors data of the 3d object. - \param opacities Opacities data of the 3d object. - \param full_check Tells if full checking of the 3d object must be performed. - **/ - template - CImg& object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool full_check=true) { - return get_object3dtoCImg3d(primitives,colors,opacities,full_check).move_to(*this); - } - - //! Convert 3d object into a CImg3d representation \overloading. - template - CImg& object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const bool full_check=true) { - return get_object3dtoCImg3d(primitives,colors,full_check).move_to(*this); - } - - //! Convert 3d object into a CImg3d representation \overloading. - template - CImg& object3dtoCImg3d(const CImgList& primitives, - const bool full_check=true) { - return get_object3dtoCImg3d(primitives,full_check).move_to(*this); - } - - //! Convert 3d object into a CImg3d representation \overloading. - CImg& object3dtoCImg3d(const bool full_check=true) { - return get_object3dtoCImg3d(full_check).move_to(*this); - } - - //! Convert 3d object into a CImg3d representation \newinstance. - template - CImg get_object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool full_check=true) const { - char error_message[1024] = { 0 }; - if (!is_object3d(primitives,colors,opacities,full_check,error_message)) - throw CImgInstanceException(_cimg_instance - "object3dtoCImg3d(): Invalid specified 3d object (%u,%u) (%s).", - cimg_instance,_width,primitives._width,error_message); - CImg res(1,_size_object3dtoCImg3d(primitives,colors,opacities)); - float *ptrd = res._data; - - // Put magick number. - *(ptrd++) = 'C' + 0.5f; *(ptrd++) = 'I' + 0.5f; *(ptrd++) = 'm' + 0.5f; - *(ptrd++) = 'g' + 0.5f; *(ptrd++) = '3' + 0.5f; *(ptrd++) = 'd' + 0.5f; - - // Put number of vertices and primitives. - *(ptrd++) = cimg::uint2float(_width); - *(ptrd++) = cimg::uint2float(primitives._width); - - // Put vertex data. - if (is_empty() || !primitives) return res; - const T *ptrx = data(0,0), *ptry = data(0,1), *ptrz = data(0,2); - cimg_forX(*this,p) { - *(ptrd++) = (float)*(ptrx++); - *(ptrd++) = (float)*(ptry++); - *(ptrd++) = (float)*(ptrz++); - } - - // Put primitive data. - cimglist_for(primitives,p) { - *(ptrd++) = (float)primitives[p].size(); - const tp *ptrp = primitives[p]._data; - cimg_foroff(primitives[p],i) *(ptrd++) = cimg::uint2float((unsigned int)*(ptrp++)); - } - - // Put color/texture data. - const unsigned int csiz = cimg::min(colors._width,primitives._width); - for (int c = 0; c<(int)csiz; ++c) { - const CImg& color = colors[c]; - const tc *ptrc = color._data; - if (color.size()==3) { *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*ptrc; } - else { - *(ptrd++) = -128.0f; - int shared_ind = -1; - if (color.is_shared()) for (int i = 0; i - float* _object3dtoCImg3d(const CImgList& opacities, float *ptrd) const { - cimglist_for(opacities,o) { - const CImg& opacity = opacities[o]; - const to *ptro = opacity._data; - if (opacity.size()==1) *(ptrd++) = (float)*ptro; - else { - *(ptrd++) = -128.0f; - int shared_ind = -1; - if (opacity.is_shared()) for (int i = 0; i - float* _object3dtoCImg3d(const CImg& opacities, float *ptrd) const { - const to *ptro = opacities._data; - cimg_foroff(opacities,o) *(ptrd++) = (float)*(ptro++); - return ptrd; - } - - template - unsigned int _size_object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const CImgList& opacities) const { - unsigned int siz = 8 + 3*width(); - cimglist_for(primitives,p) siz+=primitives[p].size() + 1; - for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { - if (colors[c].is_shared()) siz+=4; - else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; } - } - if (colors._width - unsigned int _size_object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const CImg& opacities) const { - unsigned int siz = 8 + 3*width(); - cimglist_for(primitives,p) siz+=primitives[p].size() + 1; - for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { - const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; - } - if (colors._width - CImg get_object3dtoCImg3d(const CImgList& primitives, - const CImgList& colors, - const bool full_check=true) const { - CImgList opacities; - return get_object3dtoCImg3d(primitives,colors,opacities,full_check); - } - - //! Convert 3d object into a CImg3d representation \overloading. - template - CImg get_object3dtoCImg3d(const CImgList& primitives, - const bool full_check=true) const { - CImgList colors, opacities; - return get_object3dtoCImg3d(primitives,colors,opacities,full_check); - } - - //! Convert 3d object into a CImg3d representation \overloading. - CImg get_object3dtoCImg3d(const bool full_check=true) const { - CImgList opacities, colors; - CImgList primitives(width(),1,1,1,1); - cimglist_for(primitives,p) primitives(p,0) = p; - return get_object3dtoCImg3d(primitives,colors,opacities,full_check); - } - - //! Convert CImg3d representation into a 3d object. - /** - \param[out] primitives Primitives data of the 3d object. - \param[out] colors Colors data of the 3d object. - \param[out] opacities Opacities data of the 3d object. - \param full_check Tells if full checking of the 3d object must be performed. - **/ - template - CImg& CImg3dtoobject3d(CImgList& primitives, - CImgList& colors, - CImgList& opacities, - const bool full_check=true) { - return get_CImg3dtoobject3d(primitives,colors,opacities,full_check).move_to(*this); - } - - //! Convert CImg3d representation into a 3d object \newinstance. - template - CImg get_CImg3dtoobject3d(CImgList& primitives, - CImgList& colors, - CImgList& opacities, - const bool full_check=true) const { - char error_message[1024] = { 0 }; - if (!is_CImg3d(full_check,error_message)) - throw CImgInstanceException(_cimg_instance - "CImg3dtoobject3d(): image instance is not a CImg3d (%s).", - cimg_instance,error_message); - const T *ptrs = _data + 6; - const unsigned int - nb_points = cimg::float2uint((float)*(ptrs++)), - nb_primitives = cimg::float2uint((float)*(ptrs++)); - const CImg points = CImg(ptrs,3,nb_points,1,1,true).get_transpose(); - ptrs+=3*nb_points; - primitives.assign(nb_primitives); - cimglist_for(primitives,p) { - const unsigned int nb_inds = (unsigned int)*(ptrs++); - primitives[p].assign(1,nb_inds); - tp *ptrp = primitives[p]._data; - for (unsigned int i = 0; i - CImg& _draw_scanline(const int x0, const int x1, const int y, - const tc *const color, const float opacity, - const float brightness, - const float nopacity, const float copacity, const unsigned long whd) { - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const int nx0 = x0>0?x0:0, nx1 = x1=0) { - const tc *col = color; - const unsigned long off = whd - dx - 1; - T *ptrd = data(nx0,y); - if (opacity>=1) { // ** Opaque drawing ** - if (brightness==1) { // Brightness==1 - if (sizeof(T)!=1) cimg_forC(*this,c) { - const T val = (T)*(col++); - for (int x = dx; x>=0; --x) *(ptrd++) = val; - ptrd+=off; - } else cimg_forC(*this,c) { - const T val = (T)*(col++); - std::memset(ptrd,(int)val,dx+1); - ptrd+=whd; - } - } else if (brightness<1) { // Brightness<1 - if (sizeof(T)!=1) cimg_forC(*this,c) { - const T val = (T)(*(col++)*brightness); - for (int x = dx; x>=0; --x) *(ptrd++) = val; - ptrd+=off; - } else cimg_forC(*this,c) { - const T val = (T)(*(col++)*brightness); - std::memset(ptrd,(int)val,dx+1); - ptrd+=whd; - } - } else { // Brightness>1 - if (sizeof(T)!=1) cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); - for (int x = dx; x>=0; --x) *(ptrd++) = val; - ptrd+=off; - } else cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); - std::memset(ptrd,(int)val,dx+1); - ptrd+=whd; - } - } - } else { // ** Transparent drawing ** - if (brightness==1) { // Brightness==1 - cimg_forC(*this,c) { - const T val = (T)*(col++); - for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } - ptrd+=off; - } - } else if (brightness<=1) { // Brightness<1 - cimg_forC(*this,c) { - const T val = (T)(*(col++)*brightness); - for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } - ptrd+=off; - } - } else { // Brightness>1 - cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); - for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } - ptrd+=off; - } - } - } - } - return *this; - } - - //! Draw a 3d point. - /** - \param x0 X-coordinate of the point. - \param y0 Y-coordinate of the point. - \param z0 Z-coordinate of the point. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \note - - To set pixel values without clipping needs, you should use the faster CImg::operator()() function. - \par Example: - \code - CImg img(100,100,1,3,0); - const unsigned char color[] = { 255,128,64 }; - img.draw_point(50,50,color); - \endcode - **/ - template - CImg& draw_point(const int x0, const int y0, const int z0, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_point(): Specified color is (null).", - cimg_instance); - if (x0>=0 && y0>=0 && z0>=0 && x0=1) cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } - else cimg_forC(*this,c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } - } - return *this; - } - - //! Draw a 2d point \simplification. - template - CImg& draw_point(const int x0, const int y0, - const tc *const color, const float opacity=1) { - return draw_point(x0,y0,0,color,opacity); - } - - // Draw a points cloud. - /** - \param points Image of vertices coordinates. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_point(const CImg& points, - const tc *const color, const float opacity=1) { - if (is_empty() || !points) return *this; - switch (points._height) { - case 0 : case 1 : - throw CImgArgumentException(_cimg_instance - "draw_point(): Invalid specified point set (%u,%u,%u,%u,%p).", - cimg_instance, - points._width,points._height,points._depth,points._spectrum,points._data); - case 2 : { - cimg_forX(points,i) draw_point((int)points(i,0),(int)points(i,1),color,opacity); - } break; - default : { - cimg_forX(points,i) draw_point((int)points(i,0),(int)points(i,1),(int)points(i,2),color,opacity); - } - } - return *this; - } - - //! Draw a 2d line. - /** - \param x0 X-coordinate of the starting line point. - \param y0 Y-coordinate of the starting line point. - \param x1 X-coordinate of the ending line point. - \param y1 Y-coordinate of the ending line point. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if a reinitialization of the hash state must be done. - \note - - Line routine uses Bresenham's algorithm. - - Set \p init_hatch = false to draw consecutive hatched segments without breaking the line pattern. - \par Example: - \code - CImg img(100,100,1,3,0); - const unsigned char color[] = { 255,128,64 }; - img.draw_line(40,40,80,70,color); - \endcode - **/ - template - CImg& draw_line(const int x0, const int y0, - const int x1, const int y1, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_line(): Specified color is (null).", - cimg_instance); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - const bool xdir = x0=width()) return *this; - if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; } - if (xright>=width()) { yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft)); xright = width() - 1; } - if (ydown<0 || yup>=height()) return *this; - if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; } - if (ydown>=height()) { xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup)); ydown = height() - 1; } - T *ptrd0 = data(nx0,ny0); - int dx = xright - xleft, dy = ydown - yup; - const bool steep = dy>dx; - if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); - const long - offx = (nx0=1) { - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - T *ptrd = ptrd0; const tc* col = color; - cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - T *ptrd = ptrd0; const tc* col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - T *ptrd = ptrd0; const tc* col = color; - cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - T *ptrd = ptrd0; const tc* col = color; cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } - return *this; - } - - //! Draw a 2d line, with z-buffering. - /** - \param zbuffer Zbuffer image. - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param z0 Z-coordinate of the starting point - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param z1 Z-coordinate of the ending point. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if a reinitialization of the hash state must be done. - **/ - template - CImg& draw_line(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_line(): Specified color is (null).", - cimg_instance); - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - const bool xdir = x0=width()) return *this; - if (xleft<0) { - const float D = (float)xright - xleft; - yleft-=(int)((float)xleft*((float)yright - yleft)/D); - zleft-=(tzfloat)xleft*(zright - zleft)/D; - xleft = 0; - } - if (xright>=width()) { - const float d = (float)xright - width(), D = (float)xright - xleft; - yright-=(int)(d*((float)yright - yleft)/D); - zright-=(tzfloat)d*(zright - zleft)/D; - xright = width() - 1; - } - if (ydown<0 || yup>=height()) return *this; - if (yup<0) { - const float D = (float)ydown - yup; - xup-=(int)((float)yup*((float)xdown - xup)/D); - zup-=(tzfloat)yup*(zdown - zup)/D; - yup = 0; - } - if (ydown>=height()) { - const float d = (float)ydown - height(), D = (float)ydown - yup; - xdown-=(int)(d*((float)xdown - xup)/D); - zdown-=(tzfloat)d*(zdown - zup)/D; - ydown = height() - 1; - } - T *ptrd0 = data(nx0,ny0); - tz *ptrz = zbuffer.data(nx0,ny0); - int dx = xright - xleft, dy = ydown - yup; - const bool steep = dy>dx; - if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); - const long - offx = (nx00?dx:1; - if (opacity>=1) { - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz && pattern&hatch) { - *ptrz = (tz)z; - T *ptrd = ptrd0; const tc *col = color; - cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - T *ptrd = ptrd0; const tc *col = color; - cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } - } - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz && pattern&hatch) { - *ptrz = (tz)z; - T *ptrd = ptrd0; const tc *col = color; - cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - T *ptrd = ptrd0; const tc *col = color; - cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } - } - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } - } - return *this; - } - - //! Draw a 3d line. - /** - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param z0 Z-coordinate of the starting point - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param z1 Z-coordinate of the ending point. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if a reinitialization of the hash state must be done. - **/ - template - CImg& draw_line(const int x0, const int y0, const int z0, - const int x1, const int y1, const int z1, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_line(): Specified color is (null).", - cimg_instance); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - int nx0 = x0, ny0 = y0, nz0 = z0, nx1 = x1, ny1 = y1, nz1 = z1; - if (nx0>nx1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); - if (nx1<0 || nx0>=width()) return *this; - if (nx0<0) { const float D = 1.0f + nx1 - nx0; ny0-=(int)((float)nx0*(1.0f + ny1 - ny0)/D); nz0-=(int)((float)nx0*(1.0f + nz1 - nz0)/D); nx0 = 0; } - if (nx1>=width()) { const float d = (float)nx1 - width(), D = 1.0f + nx1 - nx0; ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); nx1 = width() - 1; } - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); - if (ny1<0 || ny0>=height()) return *this; - if (ny0<0) { const float D = 1.0f + ny1 - ny0; nx0-=(int)((float)ny0*(1.0f + nx1 - nx0)/D); nz0-=(int)((float)ny0*(1.0f + nz1 - nz0)/D); ny0 = 0; } - if (ny1>=height()) { const float d = (float)ny1 - height(), D = 1.0f + ny1 - ny0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); ny1 = height() - 1; } - if (nz0>nz1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); - if (nz1<0 || nz0>=depth()) return *this; - if (nz0<0) { const float D = 1.0f + nz1 - nz0; nx0-=(int)((float)nz0*(1.0f + nx1 - nx0)/D); ny0-=(int)((float)nz0*(1.0f + ny1 - ny0)/D); nz0 = 0; } - if (nz1>=depth()) { const float d = (float)nz1 - depth(), D = 1.0f + nz1 - nz0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1 = depth() - 1; } - const unsigned int dmax = cimg::max(cimg::abs(nx1 - nx0),cimg::abs(ny1 - ny0),nz1 - nz0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - const float px = (nx1 - nx0)/(float)dmax, py = (ny1 - ny0)/(float)dmax, pz = (nz1 - nz0)/(float)dmax; - float x = (float)nx0, y = (float)ny0, z = (float)nz0; - if (opacity>=1) for (unsigned int t = 0; t<=dmax; ++t) { - if (!(~pattern) || (~pattern && pattern&hatch)) { - T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } - } - x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - for (unsigned int t = 0; t<=dmax; ++t) { - if (!(~pattern) || (~pattern && pattern&hatch)) { - T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } - } - x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } - } - } - return *this; - } - - //! Draw a textured 2d line. - /** - \param x0 X-coordinate of the starting line point. - \param y0 Y-coordinate of the starting line point. - \param x1 X-coordinate of the ending line point. - \param y1 Y-coordinate of the ending line point. - \param texture Texture image defining the pixel colors. - \param tx0 X-coordinate of the starting texture point. - \param ty0 Y-coordinate of the starting texture point. - \param tx1 X-coordinate of the ending texture point. - \param ty1 Y-coordinate of the ending texture point. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if the hash variable must be reinitialized. - \note - - Line routine uses the well known Bresenham's algorithm. - \par Example: - \code - CImg img(100,100,1,3,0), texture("texture256x256.ppm"); - const unsigned char color[] = { 255,128,64 }; - img.draw_line(40,40,80,70,texture,0,0,255,255); - \endcode - **/ - template - CImg& draw_line(const int x0, const int y0, - const int x1, const int y1, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty()) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_line(x0,y0,x1,y1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - const bool xdir = x0=width()) return *this; - if (xleft<0) { - const float D = (float)xright - xleft; - yleft-=(int)((float)xleft*((float)yright - yleft)/D); - txleft-=(int)((float)xleft*((float)txright - txleft)/D); - tyleft-=(int)((float)xleft*((float)tyright - tyleft)/D); - xleft = 0; - } - if (xright>=width()) { - const float d = (float)xright - width(), D = (float)xright - xleft; - yright-=(int)(d*((float)yright - yleft)/D); - txright-=(int)(d*((float)txright - txleft)/D); - tyright-=(int)(d*((float)tyright - tyleft)/D); - xright = width() - 1; - } - if (ydown<0 || yup>=height()) return *this; - if (yup<0) { - const float D = (float)ydown - yup; - xup-=(int)((float)yup*((float)xdown - xup)/D); - txup-=(int)((float)yup*((float)txdown - txup)/D); - tyup-=(int)((float)yup*((float)tydown - tyup)/D); - yup = 0; - } - if (ydown>=height()) { - const float d = (float)ydown - height(), D = (float)ydown - yup; - xdown-=(int)(d*((float)xdown - xup)/D); - txdown-=(int)(d*((float)txdown - txup)/D); - tydown-=(int)(d*((float)tydown - tyup)/D); - ydown = height() - 1; - } - T *ptrd0 = data(nx0,ny0); - int dx = xright - xleft, dy = ydown - yup; - const bool steep = dy>dx; - if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); - const long - offx = (nx00?dx:1; - const unsigned long wh = (unsigned long)_width*_height; - - if (opacity>=1) { - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - T *ptrd = ptrd0; - const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; - cimg_forC(*this,c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - T *ptrd = ptrd0; - const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; - cimg_forC(*this,c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - T *ptrd = ptrd0; - if (pattern&hatch) { - const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; - cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - T *ptrd = ptrd0; - const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; - cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } - return *this; - } - - //! Draw a textured 2d line, with perspective correction. - /** - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param z0 Z-coordinate of the starting point - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param z1 Z-coordinate of the ending point. - \param texture Texture image defining the pixel colors. - \param tx0 X-coordinate of the starting texture point. - \param ty0 Y-coordinate of the starting texture point. - \param tx1 X-coordinate of the ending texture point. - \param ty1 Y-coordinate of the ending texture point. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if the hash variable must be reinitialized. - **/ - template - CImg& draw_line(const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty() && z0<=0 && z1<=0) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_line(x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - const bool xdir = x0=width()) return *this; - if (xleft<0) { - const float D = (float)xright - xleft; - yleft-=(int)((float)xleft*((float)yright - yleft)/D); - zleft-=(float)xleft*(zright - zleft)/D; - txleft-=(float)xleft*(txright - txleft)/D; - tyleft-=(float)xleft*(tyright - tyleft)/D; - xleft = 0; - } - if (xright>=width()) { - const float d = (float)xright - width(), D = (float)xright - xleft; - yright-=(int)(d*((float)yright - yleft)/D); - zright-=d*(zright - zleft)/D; - txright-=d*(txright - txleft)/D; - tyright-=d*(tyright - tyleft)/D; - xright = width() - 1; - } - if (ydown<0 || yup>=height()) return *this; - if (yup<0) { - const float D = (float)ydown - yup; - xup-=(int)((float)yup*((float)xdown - xup)/D); - zup-=(float)yup*(zdown - zup)/D; - txup-=(float)yup*(txdown - txup)/D; - tyup-=(float)yup*(tydown - tyup)/D; - yup = 0; - } - if (ydown>=height()) { - const float d = (float)ydown - height(), D = (float)ydown - yup; - xdown-=(int)(d*((float)xdown - xup)/D); - zdown-=d*(zdown - zup)/D; - txdown-=d*(txdown - txup)/D; - tydown-=d*(tydown - tyup)/D; - ydown = height() - 1; - } - T *ptrd0 = data(nx0,ny0); - int dx = xright - xleft, dy = ydown - yup; - const bool steep = dy>dx; - if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); - const long - offx = (nx00?dx:1; - const unsigned long wh = (unsigned long)_width*_height; - - if (opacity>=1) { - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; - cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } - ptrd0+=offx; - if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } - } - } - return *this; - } - - //! Draw a textured 2d line, with perspective correction and z-buffering. - /** - \param zbuffer Z-buffer image. - \param x0 X-coordinate of the starting point. - \param y0 Y-coordinate of the starting point. - \param z0 Z-coordinate of the starting point - \param x1 X-coordinate of the ending point. - \param y1 Y-coordinate of the ending point. - \param z1 Z-coordinate of the ending point. - \param texture Texture image defining the pixel colors. - \param tx0 X-coordinate of the starting texture point. - \param ty0 Y-coordinate of the starting texture point. - \param tx1 X-coordinate of the ending texture point. - \param ty1 Y-coordinate of the ending texture point. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch Tells if the hash variable must be reinitialized. - **/ - template - CImg& draw_line(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0) return *this; - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_line(zbuffer,x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); - static unsigned int hatch = ~0U - (~0U>>1); - if (init_hatch) hatch = ~0U - (~0U>>1); - const bool xdir = x0=width()) return *this; - if (xleft<0) { - const float D = (float)xright - xleft; - yleft-=(int)((float)xleft*((float)yright - yleft)/D); - zleft-=(float)xleft*(zright - zleft)/D; - txleft-=(float)xleft*(txright - txleft)/D; - tyleft-=(float)xleft*(tyright - tyleft)/D; - xleft = 0; - } - if (xright>=width()) { - const float d = (float)xright - width(), D = (float)xright - xleft; - yright-=(int)(d*((float)yright - yleft)/D); - zright-=d*(zright - zleft)/D; - txright-=d*(txright - txleft)/D; - tyright-=d*(tyright - tyleft)/D; - xright = width()-1; - } - if (ydown<0 || yup>=height()) return *this; - if (yup<0) { - const float D = (float)ydown - yup; - xup-=(int)((float)yup*((float)xdown - xup)/D); - zup-=yup*(zdown - zup)/D; - txup-=yup*(txdown - txup)/D; - tyup-=yup*(tydown - tyup)/D; - yup = 0; - } - if (ydown>=height()) { - const float d = (float)ydown - height(), D = (float)ydown - yup; - xdown-=(int)(d*((float)xdown - xup)/D); - zdown-=d*(zdown - zup)/D; - txdown-=d*(txdown - txup)/D; - tydown-=d*(tydown - tyup)/D; - ydown = height()-1; - } - T *ptrd0 = data(nx0,ny0); - tz *ptrz = zbuffer.data(nx0,ny0); - int dx = xright - xleft, dy = ydown - yup; - const bool steep = dy>dx; - if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); - const long - offx = (nx00?dx:1; - const unsigned long wh = (unsigned long)_width*_height; - - if (opacity>=1) { - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } - } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } - } - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } - } else { - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { - if (pattern&hatch) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } - } - } - hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } else for (int error = dx>>1, x = 0; x<=dx; ++x) { - const tzfloat z = Z0 + x*dz/ndx; - if (z>=(tzfloat)*ptrz) { - *ptrz = (tz)z; - const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; - T *ptrd = ptrd0; cimg_forC(*this,c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } - } - ptrd0+=offx; ptrz+=offx; - if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } - } - } - return *this; - } - - //! Draw a set of consecutive lines. - /** - \param points Coordinates of vertices, stored as a list of vectors. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch If set to true, init hatch motif. - \note - - This function uses several call to the single CImg::draw_line() procedure, - depending on the vectors size in \p points. - **/ - template - CImg& draw_line(const CImg& points, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty() || !points || points._width<2) return *this; - bool ninit_hatch = init_hatch; - switch (points._height) { - case 0 : case 1 : - throw CImgArgumentException(_cimg_instance - "draw_line(): Invalid specified point set (%u,%u,%u,%u,%p).", - cimg_instance, - points._width,points._height,points._depth,points._spectrum,points._data); - - case 2 : { - const int x0 = (int)points(0,0), y0 = (int)points(0,1); - int ox = x0, oy = y0; - for (unsigned int i = 1; i - CImg& draw_arrow(const int x0, const int y0, - const int x1, const int y1, - const tc *const color, const float opacity=1, - const float angle=30, const float length=-10, - const unsigned int pattern=~0U) { - if (is_empty()) return *this; - const float u = (float)(x0 - x1), v = (float)(y0 - y1), sq = u*u + v*v, - deg = (float)(angle*cimg::PI/180), ang = (sq>0)?(float)std::atan2(v,u):0.0f, - l = (length>=0)?length:-length*(float)std::sqrt(sq)/100; - if (sq>0) { - const float - cl = (float)std::cos(ang - deg), sl = (float)std::sin(ang - deg), - cr = (float)std::cos(ang + deg), sr = (float)std::sin(ang + deg); - const int - xl = x1 + (int)(l*cl), yl = y1 + (int)(l*sl), - xr = x1 + (int)(l*cr), yr = y1 + (int)(l*sr), - xc = x1 + (int)((l+1)*(cl+cr))/2, yc = y1 + (int)((l+1)*(sl+sr))/2; - draw_line(x0,y0,xc,yc,color,opacity,pattern).draw_triangle(x1,y1,xl,yl,xr,yr,color,opacity); - } else draw_point(x0,y0,color,opacity); - return *this; - } - - //! Draw a 2d spline. - /** - \param x0 X-coordinate of the starting curve point - \param y0 Y-coordinate of the starting curve point - \param u0 X-coordinate of the starting velocity - \param v0 Y-coordinate of the starting velocity - \param x1 X-coordinate of the ending curve point - \param y1 Y-coordinate of the ending curve point - \param u1 X-coordinate of the ending velocity - \param v1 Y-coordinate of the ending velocity - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param precision Curve drawing precision. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch If \c true, init hatch motif. - \note - - The curve is a 2d cubic Bezier spline, from the set of specified starting/ending points - and corresponding velocity vectors. - - The spline is drawn as a serie of connected segments. The \p precision parameter sets the - average number of pixels in each drawn segment. - - A cubic Bezier curve is sometimes defined by a set of 4 points { (\p x0,\p y0), (\p xa,\p ya), (\p xb,\p yb), (\p x1,\p y1) } - where (\p x0,\p y0) is the starting point, (\p x1,\p y1) is the ending point and (\p xa,\p ya), (\p xb,\p yb) are two - \e control points. - The starting and ending velocities (\p u0,\p v0) and (\p u1,\p v1) can be deduced easily from the control points as - \p u0 = (\p xa - \p x0), \p v0 = (\p ya - \p y0), \p u1 = (\p x1 - \p xb) and \p v1 = (\p y1 - \p yb). - \par Example: - \code - CImg img(100,100,1,3,0); - const unsigned char color[] = { 255,255,255 }; - img.draw_spline(30,30,0,100,90,40,0,-100,color); - \endcode - **/ - template - CImg& draw_spline(const int x0, const int y0, const float u0, const float v0, - const int x1, const int y1, const float u1, const float v1, - const tc *const color, const float opacity=1, - const float precision=0.25, const unsigned int pattern=~0U, - const bool init_hatch=true) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_spline(): Specified color is (null).", - cimg_instance); - if (x0==x1 && y0==y1) return draw_point(x0,y0,color,opacity); - bool ninit_hatch = init_hatch; - const float - ax = u0 + u1 + 2*(x0 - x1), - bx = 3*(x1 - x0) - 2*u0 - u1, - ay = v0 + v1 + 2*(y0 - y1), - by = 3*(y1 - y0) - 2*v0 - v1, - _precision = 1/(std::sqrt(cimg::sqr((float)x0-x1)+cimg::sqr((float)y0-y1))*(precision>0?precision:1)); - int ox = x0, oy = y0; - for (float t = 0; t<1; t+=_precision) { - const float t2 = t*t, t3 = t2*t; - const int - nx = (int)(ax*t3 + bx*t2 + u0*t + x0), - ny = (int)(ay*t3 + by*t2 + v0*t + y0); - draw_line(ox,oy,nx,ny,color,opacity,pattern,ninit_hatch); - ninit_hatch = false; - ox = nx; oy = ny; - } - return draw_line(ox,oy,x1,y1,color,opacity,pattern,false); - } - - //! Draw a 3d spline \overloading. - /** - \note - - Similar to CImg::draw_spline() for a 3d spline in a volumetric image. - **/ - template - CImg& draw_spline(const int x0, const int y0, const int z0, const float u0, const float v0, const float w0, - const int x1, const int y1, const int z1, const float u1, const float v1, const float w1, - const tc *const color, const float opacity=1, - const float precision=4, const unsigned int pattern=~0U, - const bool init_hatch=true) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_spline(): Specified color is (null).", - cimg_instance); - if (x0==x1 && y0==y1 && z0==z1) return draw_point(x0,y0,z0,color,opacity); - bool ninit_hatch = init_hatch; - const float - ax = u0 + u1 + 2*(x0 - x1), - bx = 3*(x1 - x0) - 2*u0 - u1, - ay = v0 + v1 + 2*(y0 - y1), - by = 3*(y1 - y0) - 2*v0 - v1, - az = w0 + w1 + 2*(z0 - z1), - bz = 3*(z1 - z0) - 2*w0 - w1, - _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); - int ox = x0, oy = y0, oz = z0; - for (float t = 0; t<1; t+=_precision) { - const float t2 = t*t, t3 = t2*t; - const int - nx = (int)(ax*t3 + bx*t2 + u0*t + x0), - ny = (int)(ay*t3 + by*t2 + v0*t + y0), - nz = (int)(az*t3 + bz*t2 + w0*t + z0); - draw_line(ox,oy,oz,nx,ny,nz,color,opacity,pattern,ninit_hatch); - ninit_hatch = false; - ox = nx; oy = ny; oz = nz; - } - return draw_line(ox,oy,oz,x1,y1,z1,color,opacity,pattern,false); - } - - //! Draw a textured 2d spline. - /** - \param x0 X-coordinate of the starting curve point - \param y0 Y-coordinate of the starting curve point - \param u0 X-coordinate of the starting velocity - \param v0 Y-coordinate of the starting velocity - \param x1 X-coordinate of the ending curve point - \param y1 Y-coordinate of the ending curve point - \param u1 X-coordinate of the ending velocity - \param v1 Y-coordinate of the ending velocity - \param texture Texture image defining line pixel colors. - \param tx0 X-coordinate of the starting texture point. - \param ty0 Y-coordinate of the starting texture point. - \param tx1 X-coordinate of the ending texture point. - \param ty1 Y-coordinate of the ending texture point. - \param precision Curve drawing precision. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch if \c true, reinit hatch motif. - **/ - template - CImg& draw_spline(const int x0, const int y0, const float u0, const float v0, - const int x1, const int y1, const float u1, const float v1, - const CImg& texture, - const int tx0, const int ty0, const int tx1, const int ty1, - const float opacity=1, - const float precision=4, const unsigned int pattern=~0U, - const bool init_hatch=true) { - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_spline(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_empty()) return *this; - if (is_overlapped(texture)) return draw_spline(x0,y0,u0,v0,x1,y1,u1,v1,+texture,tx0,ty0,tx1,ty1,precision,opacity,pattern,init_hatch); - if (x0==x1 && y0==y1) return draw_point(x0,y0,texture.get_vector_at(x0,y0),opacity); - bool ninit_hatch = init_hatch; - const float - ax = u0 + u1 + 2*(x0 - x1), - bx = 3*(x1 - x0) - 2*u0 - u1, - ay = v0 + v1 + 2*(y0 - y1), - by = 3*(y1 - y0) - 2*v0 - v1, - _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); - int ox = x0, oy = y0, otx = tx0, oty = ty0; - for (float t1 = 0; t1<1; t1+=_precision) { - const float t2 = t1*t1, t3 = t2*t1; - const int - nx = (int)(ax*t3 + bx*t2 + u0*t1 + x0), - ny = (int)(ay*t3 + by*t2 + v0*t1 + y0), - ntx = tx0 + (int)((tx1-tx0)*t1), - nty = ty0 + (int)((ty1-ty0)*t1); - draw_line(ox,oy,nx,ny,texture,otx,oty,ntx,nty,opacity,pattern,ninit_hatch); - ninit_hatch = false; - ox = nx; oy = ny; otx = ntx; oty = nty; - } - return draw_line(ox,oy,x1,y1,texture,otx,oty,tx1,ty1,opacity,pattern,false); - } - - //! Draw a set of consecutive splines. - /** - \param points Vertices data. - \param tangents Tangents data. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param is_closed_set Tells if the drawn spline set is closed. - \param precision Precision of the drawing. - \param pattern An integer whose bits describe the line pattern. - \param init_hatch If \c true, init hatch motif. - **/ - template - CImg& draw_spline(const CImg& points, const CImg& tangents, - const tc *const color, const float opacity=1, - const bool is_closed_set=false, const float precision=4, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty() || !points || !tangents || points._width<2 || tangents._width<2) return *this; - bool ninit_hatch = init_hatch; - switch (points._height) { - case 0 : case 1 : - throw CImgArgumentException(_cimg_instance - "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", - cimg_instance, - points._width,points._height,points._depth,points._spectrum,points._data); - - case 2 : { - const int x0 = (int)points(0,0), y0 = (int)points(0,1); - const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1); - int ox = x0, oy = y0; - float ou = u0, ov = v0; - for (unsigned int i = 1; i - CImg& draw_spline(const CImg& points, - const tc *const color, const float opacity=1, - const bool is_closed_set=false, const float precision=4, - const unsigned int pattern=~0U, const bool init_hatch=true) { - if (is_empty() || !points || points._width<2) return *this; - CImg tangents; - switch (points._height) { - case 0 : case 1 : - throw CImgArgumentException(_cimg_instance - "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", - cimg_instance, - points._width,points._height,points._depth,points._spectrum,points._data); - case 2 : { - tangents.assign(points._width,points._height); - cimg_forX(points,p) { - const unsigned int - p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), - p1 = is_closed_set?(p+1)%points._width:(p+1=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - _sxn=1, \ - _sxr=1, \ - _sxl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dyn = y2-y1, \ - _dyr = y2-y0, \ - _dyl = y1-y0, \ - _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ - _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ - _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ - _errn = _dyn/2, \ - _errr = _dyr/2, \ - _errl = _dyl/2, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); \ - _counter>=0; --_counter, ++y, \ - xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ - xl+=(y!=y1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) - -#define _cimg_for_triangle2(img,xl,cl,xr,cr,y,x0,y0,c0,x1,y1,c1,x2,y2,c2) \ - for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - cr = y0>=0?c0:(c0-y0*(c2-c0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0-y0*(c1-c0)/(y1-y0))):(c1-y1*(c2-c1)/(y2-y1)), \ - _sxn=1, _scn=1, \ - _sxr=1, _scr=1, \ - _sxl=1, _scl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dcn = c2>c1?c2-c1:(_scn=-1,c1-c2), \ - _dcr = c2>c0?c2-c0:(_scr=-1,c0-c2), \ - _dcl = c1>c0?c1-c0:(_scl=-1,c0-c1), \ - _dyn = y2-y1, \ - _dyr = y2-y0, \ - _dyl = y1-y0, \ - _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ - _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ - _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - _dcn-=_dyn?_dyn*(_dcn/_dyn):0, \ - _dcr-=_dyr?_dyr*(_dcr/_dyr):0, \ - _dcl-=_dyl?_dyl*(_dcl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ - _errn = _dyn/2, _errcn = _errn, \ - _errr = _dyr/2, _errcr = _errr, \ - _errl = _dyl/2, _errcl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rcn = _dyn?(c2-c1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rcr = _dyr?(c2-c0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rcl = (y0!=y1 && y1>0)?(_dyl?(c1-c0)/_dyl:0): \ - (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); \ - _counter>=0; --_counter, ++y, \ - xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ - cr+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), \ - xl+=(y!=y1)?(cl+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), \ - _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ - (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cl=c1, \ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) - -#define _cimg_for_triangle3(img,xl,txl,tyl,xr,txr,tyr,y,x0,y0,tx0,ty0,x1,y1,tx1,ty1,x2,y2,tx2,ty2) \ - for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ - _sxn=1, _stxn=1, _styn=1, \ - _sxr=1, _stxr=1, _styr=1, \ - _sxl=1, _stxl=1, _styl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ - _dyn = y2-y1, \ - _dyr = y2-y0, \ - _dyl = y1-y0, \ - _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ - _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ - _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ - _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ - _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ - _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ - _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ - _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ - _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, \ - _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, \ - _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ - (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ - (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ - _counter>=0; --_counter, ++y, \ - xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ - txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ - tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ - xl+=(y!=y1)?(txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ - tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ - _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ - (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ - _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1,\ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) - -#define _cimg_for_triangle4(img,xl,cl,txl,tyl,xr,cr,txr,tyr,y,x0,y0,c0,tx0,ty0,x1,y1,c1,tx1,ty1,x2,y2,c2,tx2,ty2) \ - for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - cr = y0>=0?c0:(c0-y0*(c2-c0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0-y0*(c1-c0)/(y1-y0))):(c1-y1*(c2-c1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ - _sxn=1, _scn=1, _stxn=1, _styn=1, \ - _sxr=1, _scr=1, _stxr=1, _styr=1, \ - _sxl=1, _scl=1, _stxl=1, _styl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dcn = c2>c1?c2-c1:(_scn=-1,c1-c2), \ - _dcr = c2>c0?c2-c0:(_scr=-1,c0-c2), \ - _dcl = c1>c0?c1-c0:(_scl=-1,c0-c1), \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ - _dyn = y2-y1, \ - _dyr = y2-y0, \ - _dyl = y1-y0, \ - _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ - _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ - _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - _dcn-=_dyn?_dyn*(_dcn/_dyn):0, \ - _dcr-=_dyr?_dyr*(_dcr/_dyr):0, \ - _dcl-=_dyl?_dyl*(_dcl/_dyl):0, \ - _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ - _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ - _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ - _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ - _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ - _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ - _errn = _dyn/2, _errcn = _errn, _errtxn = _errn, _errtyn = _errn, \ - _errr = _dyr/2, _errcr = _errr, _errtxr = _errr, _errtyr = _errr, \ - _errl = _dyl/2, _errcl = _errl, _errtxl = _errl, _errtyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rcn = _dyn?(c2-c1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rcr = _dyr?(c2-c0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rcl = (y0!=y1 && y1>0)?(_dyl?(c1-c0)/_dyl:0): \ - (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ - (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ - (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ - _counter>=0; --_counter, ++y, \ - xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ - cr+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), \ - txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ - tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ - xl+=(y!=y1)?(cl+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), \ - txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ - tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ - _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ - (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cl=c1, \ - _errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ - _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) - -#define _cimg_for_triangle5(img,xl,txl,tyl,lxl,lyl,xr,txr,tyr,lxr,lyr,y,x0,y0,tx0,ty0,lx0,ly0,x1,y1,tx1,ty1,lx1,ly1,x2,y2,tx2,ty2,lx2,ly2) \ - for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - lxr = y0>=0?lx0:(lx0-y0*(lx2-lx0)/(y2-y0)), \ - lyr = y0>=0?ly0:(ly0-y0*(ly2-ly0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ - lxl = y1>=0?(y0>=0?(y0==y1?lx1:lx0):(lx0-y0*(lx1-lx0)/(y1-y0))):(lx1-y1*(lx2-lx1)/(y2-y1)), \ - lyl = y1>=0?(y0>=0?(y0==y1?ly1:ly0):(ly0-y0*(ly1-ly0)/(y1-y0))):(ly1-y1*(ly2-ly1)/(y2-y1)), \ - _sxn=1, _stxn=1, _styn=1, _slxn=1, _slyn=1, \ - _sxr=1, _stxr=1, _styr=1, _slxr=1, _slyr=1, \ - _sxl=1, _stxl=1, _styl=1, _slxl=1, _slyl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), _dyn = y2-y1, \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), _dyr = y2-y0, \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), _dyl = y1-y0, \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ - _dlxn = lx2>lx1?lx2-lx1:(_slxn=-1,lx1-lx2), \ - _dlxr = lx2>lx0?lx2-lx0:(_slxr=-1,lx0-lx2), \ - _dlxl = lx1>lx0?lx1-lx0:(_slxl=-1,lx0-lx1), \ - _dlyn = ly2>ly1?ly2-ly1:(_slyn=-1,ly1-ly2), \ - _dlyr = ly2>ly0?ly2-ly0:(_slyr=-1,ly0-ly2), \ - _dlyl = ly1>ly0?ly1-ly0:(_slyl=-1,ly0-ly1), \ - _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ - _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ - _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ - _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ - _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ - _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ - _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ - _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ - _dlxn-=_dyn?_dyn*(_dlxn/_dyn):0, \ - _dlxr-=_dyr?_dyr*(_dlxr/_dyr):0, \ - _dlxl-=_dyl?_dyl*(_dlxl/_dyl):0, \ - _dlyn-=_dyn?_dyn*(_dlyn/_dyn):0, \ - _dlyr-=_dyr?_dyr*(_dlyr/_dyr):0, \ - _dlyl-=_dyl?_dyl*(_dlyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ - _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errlxn = _errn, _errlyn = _errn, \ - _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errlxr = _errr, _errlyr = _errr, \ - _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _errlxl = _errl, _errlyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rlxn = _dyn?(lx2-lx1)/_dyn:0, \ - _rlyn = _dyn?(ly2-ly1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rlxr = _dyr?(lx2-lx0)/_dyr:0, \ - _rlyr = _dyr?(ly2-ly0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ - (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ - (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ - (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ), \ - _rlxl = (y0!=y1 && y1>0)?(_dyl?(lx1-lx0)/_dyl:0): \ - (_errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxn ), \ - _rlyl = (y0!=y1 && y1>0)?(_dyl?(ly1-ly0)/_dyl:0): \ - (_errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyn ); \ - _counter>=0; --_counter, ++y, \ - xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ - txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ - tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ - lxr+=_rlxr+((_errlxr-=_dlxr)<0?_errlxr+=_dyr,_slxr:0), \ - lyr+=_rlyr+((_errlyr-=_dlyr)<0?_errlyr+=_dyr,_slyr:0), \ - xl+=(y!=y1)?(txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ - tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ - lxl+=_rlxl+((_errlxl-=_dlxl)<0?(_errlxl+=_dyl,_slxl):0), \ - lyl+=_rlyl+((_errlyl-=_dlyl)<0?(_errlyl+=_dyl,_slyl):0), \ - _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ - (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ - _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ - _errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxl=_rlxn, lxl=lx1, \ - _errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyl=_rlyn, lyl=ly1, \ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) - - // [internal] Draw a filled triangle. - template - CImg& _draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc *const color, const float opacity, - const float brightness) { - cimg_init_scanline(color,opacity); - const float nbrightness = brightness<0?0:(brightness>2?2:brightness); - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2); - if (ny0=0) { - if ((nx1 - nx0)*(ny2 - ny0) - (nx2 - nx0)*(ny1 - ny0)<0) - _cimg_for_triangle1(*this,xl,xr,y,nx0,ny0,nx1,ny1,nx2,ny2) cimg_draw_scanline(xl,xr,y,color,opacity,nbrightness); - else - _cimg_for_triangle1(*this,xl,xr,y,nx0,ny0,nx1,ny1,nx2,ny2) cimg_draw_scanline(xr,xl,y,color,opacity,nbrightness); - } - return *this; - } - - //! Draw a filled 2d triangle. - /** - \param x0 X-coordinate of the first vertex. - \param y0 Y-coordinate of the first vertex. - \param x1 X-coordinate of the second vertex. - \param y1 Y-coordinate of the second vertex. - \param x2 X-coordinate of the third vertex. - \param y2 Y-coordinate of the third vertex. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - _draw_triangle(x0,y0,x1,y1,x2,y2,color,opacity,1); - return *this; - } - - //! Draw a outlined 2d triangle. - /** - \param x0 X-coordinate of the first vertex. - \param y0 Y-coordinate of the first vertex. - \param x1 X-coordinate of the second vertex. - \param y1 Y-coordinate of the second vertex. - \param x2 X-coordinate of the third vertex. - \param y2 Y-coordinate of the third vertex. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the outline pattern. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc *const color, const float opacity, - const unsigned int pattern) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - draw_line(x0,y0,x1,y1,color,opacity,pattern,true). - draw_line(x1,y1,x2,y2,color,opacity,pattern,false). - draw_line(x2,y2,x0,y0,color,opacity,pattern,false); - return *this; - } - - //! Draw a filled 2d triangle, with z-buffering. - /** - \param zbuffer Z-buffer image. - \param x0 X-coordinate of the first vertex. - \param y0 Y-coordinate of the first vertex. - \param z0 Z-coordinate of the first vertex. - \param x1 X-coordinate of the second vertex. - \param y1 Y-coordinate of the second vertex. - \param z1 Z-coordinate of the second vertex. - \param x2 X-coordinate of the third vertex. - \param y2 Y-coordinate of the third vertex. - \param z2 Z-coordinate of the third vertex. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - \param brightness Brightness factor. - **/ - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const tc *const color, const float opacity=1, - const float brightness=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float - nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), - nbrightness = brightness<0?0:(brightness>2?2:brightness); - const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { - if (y==ny1) { zl = nz1; pzl = pzn; } - int xleft = xleft0, xright = xright0; - tzfloat zleft = zl, zright = zr; - if (xright=width()-1) xright = width() - 1; - T* ptrd = data(xleft,y,0,0); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } - ptrd-=offx; - } - zleft+=pentez; - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(nbrightness*(*col++)); ptrd+=whd; } - ptrd-=offx; - } - zleft+=pentez; - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); ptrd+=whd; } - ptrd-=offx; - } - zleft+=pentez; - } - } else { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=whd; } - ptrd-=offx; - } - zleft+=pentez; - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(nopacity*nbrightness**(col++) + *ptrd*copacity); ptrd+=whd; } - ptrd-=offx; - } - zleft+=pentez; - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; - cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; - } - ptrd-=offx; - } - zleft+=pentez; - } - } - zr+=pzr; zl+=pzl; - } - return *this; - } - - //! Draw a Gouraud-shaded 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param brightness0 Brightness factor of the first vertex (in [0,2]). - \param brightness1 brightness factor of the second vertex (in [0,2]). - \param brightness2 brightness factor of the third vertex (in [0,2]). - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc *const color, - const float brightness0, - const float brightness1, - const float brightness2, - const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), - nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), - nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nc0,nc1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nc0,nc2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nc1,nc2); - if (ny0>=height() || ny2<0) return *this; - _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { - int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; - if (xrightcleft?cright - cleft:cleft - cright, - rc = dx?(cright - cleft)/dx:0, - sc = cright>cleft?1:-1, - ndc = dc-(dx?dx*(dc/dx):0); - int errc = dx>>1; - if (xleft<0 && dx) cleft-=xleft*(cright - cleft)/dx; - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width() - 1; - T* ptrd = data(xleft,y); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const tc *col = color; - cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); - ptrd+=whd; - } - ptrd-=offx; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = color; - cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; - } - ptrd-=offx; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } - } - return *this; - } - - //! Draw a Gouraud-shaded 2d triangle, with z-buffering \overloading. - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const tc *const color, - const float brightness0, - const float brightness1, - const float brightness2, - const float opacity=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), - nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), - nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1,nc0,nc1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2,nc0,nc2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2,nc1,nc2); - if (ny0>=height() || ny2<0) return *this; - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { - if (y==ny1) { zl = nz1; pzl = pzn; } - int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; - tzfloat zleft = zl, zright = zr; - if (xrightcleft?cright - cleft:cleft - cright, - rc = dx?(cright-cleft)/dx:0, - sc = cright>cleft?1:-1, - ndc = dc-(dx?dx*(dc/dx):0); - const tzfloat pentez = (zright - zleft)/dx; - int errc = dx>>1; - if (xleft<0 && dx) { - cleft-=xleft*(cright - cleft)/dx; - zleft-=xleft*(zright - zleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T *ptrd = data(xleft,y); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; - cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); - ptrd+=whd; - } - ptrd-=offx; - } - zleft+=pentez; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; - cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; - } - ptrd-=offx; - } - zleft+=pentez; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } - zr+=pzr; zl+=pzl; - } - return *this; - } - - //! Draw a color-interpolated 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param color1 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the first vertex. - \param color2 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the seconf vertex. - \param color3 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the third vertex. - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc1 *const color1, - const tc2 *const color2, - const tc3 *const color3, - const float opacity=1) { - const unsigned char one = 1; - cimg_forC(*this,c) get_shared_channel(c).draw_triangle(x0,y0,x1,y1,x2,y2,&one,color1[c],color2[c],color3[c],opacity); - return *this; - } - - //! Draw a textured 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param texture Texture image used to fill the triangle. - \param tx0 X-coordinate of the first vertex in the texture image. - \param ty0 Y-coordinate of the first vertex in the texture image. - \param tx1 X-coordinate of the second vertex in the texture image. - \param ty1 Y-coordinate of the second vertex in the texture image. - \param tx2 X-coordinate of the third vertex in the texture image. - \param ty2 Y-coordinate of the third vertex in the texture image. - \param opacity Drawing opacity. - \param brightness Brightness factor of the drawing (in [0,2]). - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float opacity=1, - const float brightness=1) { - if (is_empty()) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float - nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), - nbrightness = brightness<0?0:(brightness>2?2:brightness); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2); - if (ny0>=height() || ny2<0) return *this; - _cimg_for_triangle3(*this,xleft0,txleft0,tyleft0,xright0,txright0,tyright0,y, - nx0,ny0,ntx0,nty0,nx1,ny1,ntx1,nty1,nx2,ny2,ntx2,nty2) { - int - xleft = xleft0, xright = xright0, - txleft = txleft0, txright = txright0, - tyleft = tyleft0, tyright = tyright0; - if (xrighttxleft?txright - txleft:txleft - txright, - dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, - rtx = dx?(txright - txleft)/dx:0, - rty = dx?(tyright - tyleft)/dx:0, - stx = txright>txleft?1:-1, - sty = tyright>tyleft?1:-1, - ndtx = dtx - (dx?dx*(dtx/dx):0), - ndty = dty - (dx?dx*(dty/dx):0); - int errtx = dx>>1, errty = errtx; - if (xleft<0 && dx) { - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)*col; - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)(nbrightness**col); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } - } else { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } - } - } - return *this; - } - - //! Draw a 2d textured triangle, with perspective correction. - template - CImg& draw_triangle(const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float opacity=1, - const float brightness=1) { - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float - nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), - nbrightness = brightness<0?0:(brightness>2?2:brightness); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2, - nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int xleft = xleft0, xright = xright0; - float - zleft = zl, zright = zr, - txleft = txl, txright = txr, - tyleft = tyl, tyright = tyr; - if (xright=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)*col; - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else if (nbrightness<1) for (int x=xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nbrightness**col); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } - } else { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a textured 2d triangle, with perspective correction and z-buffering. - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float opacity=1, - const float brightness=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float - nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), - nbrightness = brightness<0?0:(brightness>2?2:brightness); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2; - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int xleft = xleft0, xright = xright0; - float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; - tzfloat zleft = zl, zright = zr; - if (xright=width()-1) xright = width()-1; - T *ptrd = data(xleft,y,0,0); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)*col; - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nbrightness**col); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } - } else { - if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - } - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a Phong-shaded 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param light Light image. - \param lx0 X-coordinate of the first vertex in the light image. - \param ly0 Y-coordinate of the first vertex in the light image. - \param lx1 X-coordinate of the second vertex in the light image. - \param ly1 Y-coordinate of the second vertex in the light image. - \param lx2 X-coordinate of the third vertex in the light image. - \param ly2 Y-coordinate of the third vertex in the light image. - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const tc *const color, - const CImg& light, - const int lx0, const int ly0, - const int lx1, const int ly1, - const int lx2, const int ly2, - const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - if (light._depth>1 || light._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", - cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); - if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,color,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; - const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2); - if (ny0>=height() || ny2<0) return *this; - _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, - nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { - int - xleft = xleft0, xright = xright0, - lxleft = lxleft0, lxright = lxright0, - lyleft = lyleft0, lyright = lyright0; - if (xrightlxleft?lxright - lxleft:lxleft - lxright, - dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, - rlx = dx?(lxright - lxleft)/dx:0, - rly = dx?(lyright - lyleft)/dx:0, - slx = lxright>lxleft?1:-1, - sly = lyright>lyleft?1:-1, - ndlx = dlx - (dx?dx*(dlx/dx):0), - ndly = dly - (dx?dx*(dly/dx):0); - int errlx = dx>>1, errly = errlx; - if (xleft<0 && dx) { - lxleft-=xleft*(lxright - lxleft)/dx; - lyleft-=xleft*(lyright - lyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const tc *col = color; - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - *ptrd = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); - ptrd+=whd; - } - ptrd-=offx; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = color; - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const T val = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; - } - ptrd-=offx; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } - } - return *this; - } - - //! Draw a Phong-shaded 2d triangle, with z-buffering. - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const tc *const color, - const CImg& light, - const int lx0, const int ly0, - const int lx1, const int ly1, - const int lx2, const int ly2, - const float opacity=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Specified color is (null).", - cimg_instance); - if (light._depth>1 || light._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", - cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color, - +light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, - nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { - if (y==ny1) { zl = nz1; pzl = pzn; } - int - xleft = xleft0, xright = xright0, - lxleft = lxleft0, lxright = lxright0, - lyleft = lyleft0, lyright = lyright0; - tzfloat zleft = zl, zright = zr; - if (xrightlxleft?lxright - lxleft:lxleft - lxright, - dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, - rlx = dx?(lxright - lxleft)/dx:0, - rly = dx?(lyright - lyleft)/dx:0, - slx = lxright>lxleft?1:-1, - sly = lyright>lyleft?1:-1, - ndlx = dlx - (dx?dx*(dlx/dx):0), - ndly = dly - (dx?dx*(dly/dx):0); - const tzfloat pentez = (zright - zleft)/dx; - int errlx = dx>>1, errly = errlx; - if (xleft<0 && dx) { - zleft-=xleft*(zright - zleft)/dx; - lxleft-=xleft*(lxright - lxleft)/dx; - lyleft-=xleft*(lyright - lyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T *ptrd = data(xleft,y,0,0); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const tc cval = *(col++); - *ptrd = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); - ptrd+=whd; - } - ptrd-=offx; - } - zleft+=pentez; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tc *col = color; - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const tc cval = *(col++); - const T val = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; - } - ptrd-=offx; - } - zleft+=pentez; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } - zr+=pzr; zl+=pzl; - } - return *this; - } - - //! Draw a textured Gouraud-shaded 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param texture Texture image used to fill the triangle. - \param tx0 X-coordinate of the first vertex in the texture image. - \param ty0 Y-coordinate of the first vertex in the texture image. - \param tx1 X-coordinate of the second vertex in the texture image. - \param ty1 Y-coordinate of the second vertex in the texture image. - \param tx2 X-coordinate of the third vertex in the texture image. - \param ty2 Y-coordinate of the third vertex in the texture image. - \param brightness0 Brightness factor of the first vertex. - \param brightness1 Brightness factor of the second vertex. - \param brightness2 Brightness factor of the third vertex. - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float brightness0, - const float brightness1, - const float brightness2, - const float opacity=1) { - if (is_empty()) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) - return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,brightness0,brightness1,brightness2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, - nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), - nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), - nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nc0,nc1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nc0,nc2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nc1,nc2); - if (ny0>=height() || ny2<0) return *this; - _cimg_for_triangle4(*this,xleft0,cleft0,txleft0,tyleft0,xright0,cright0,txright0,tyright0,y, - nx0,ny0,nc0,ntx0,nty0,nx1,ny1,nc1,ntx1,nty1,nx2,ny2,nc2,ntx2,nty2) { - int - xleft = xleft0, xright = xright0, - cleft = cleft0, cright = cright0, - txleft = txleft0, txright = txright0, - tyleft = tyleft0, tyright = tyright0; - if (xrightcleft?cright - cleft:cleft - cright, - dtx = txright>txleft?txright - txleft:txleft - txright, - dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, - rc = dx?(cright - cleft)/dx:0, - rtx = dx?(txright - txleft)/dx:0, - rty = dx?(tyright - tyleft)/dx:0, - sc = cright>cleft?1:-1, - stx = txright>txleft?1:-1, - sty = tyright>tyleft?1:-1, - ndc = dc - (dx?dx*(dc/dx):0), - ndtx = dtx - (dx?dx*(dtx/dx):0), - ndty = dty - (dx?dx*(dty/dx):0); - int errc = dx>>1, errtx = errc, errty = errc; - if (xleft<0 && dx) { - cleft-=xleft*(cright - cleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } - } - return *this; - } - - //! Draw a textured Gouraud-shaded 2d triangle, with perspective correction \overloading. - template - CImg& draw_triangle(const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float brightness0, - const float brightness1, - const float brightness2, - const float opacity=1) { - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, - brightness0,brightness1,brightness2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), - nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), - nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2, - nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int - xleft = xleft0, xright = xright0, - cleft = cleft0, cright = cright0; - float - zleft = zl, zright = zr, - txleft = txl, txright = txr, - tyleft = tyl, tyright = tyr; - if (xrightcleft?cright - cleft:cleft - cright, - rc = dx?(cright - cleft)/dx:0, - sc = cright>cleft?1:-1, - ndc = dc - (dx?dx*(dc/dx):0); - const float - pentez = (zright - zleft)/dx, - pentetx = (txright - txleft)/dx, - pentety = (tyright - tyleft)/dx; - int errc = dx>>1; - if (xleft<0 && dx) { - cleft-=xleft*(cright - cleft)/dx; - zleft-=xleft*(zright - zleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } else for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a textured Gouraud-shaded 2d triangle, with perspective correction and z-buffering \overloading. - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const float brightness0, - const float brightness1, - const float brightness2, - const float opacity=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, - brightness0,brightness1,brightness2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), - nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), - nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2; - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; - float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; - tzfloat zleft = zl, zright = zr; - if (xrightcleft?cright - cleft:cleft - cright, - rc = dx?(cright - cleft)/dx:0, - sc = cright>cleft?1:-1, - ndc = dc - (dx?dx*(dc/dx):0); - float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; - const tzfloat pentez = (zright - zleft)/dx; - int errc = dx>>1; - if (xleft<0 && dx) { - cleft-=xleft*(cright - cleft)/dx; - zleft-=xleft*(zright - zleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a textured Phong-shaded 2d triangle. - /** - \param x0 X-coordinate of the first vertex in the image instance. - \param y0 Y-coordinate of the first vertex in the image instance. - \param x1 X-coordinate of the second vertex in the image instance. - \param y1 Y-coordinate of the second vertex in the image instance. - \param x2 X-coordinate of the third vertex in the image instance. - \param y2 Y-coordinate of the third vertex in the image instance. - \param texture Texture image used to fill the triangle. - \param tx0 X-coordinate of the first vertex in the texture image. - \param ty0 Y-coordinate of the first vertex in the texture image. - \param tx1 X-coordinate of the second vertex in the texture image. - \param ty1 Y-coordinate of the second vertex in the texture image. - \param tx2 X-coordinate of the third vertex in the texture image. - \param ty2 Y-coordinate of the third vertex in the texture image. - \param light Light image. - \param lx0 X-coordinate of the first vertex in the light image. - \param ly0 Y-coordinate of the first vertex in the light image. - \param lx1 X-coordinate of the second vertex in the light image. - \param ly1 Y-coordinate of the second vertex in the light image. - \param lx2 X-coordinate of the third vertex in the light image. - \param ly2 Y-coordinate of the third vertex in the light image. - \param opacity Drawing opacity. - **/ - template - CImg& draw_triangle(const int x0, const int y0, - const int x1, const int y1, - const int x2, const int y2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const CImg& light, - const int lx0, const int ly0, - const int lx1, const int ly1, - const int lx2, const int ly2, - const float opacity=1) { - if (is_empty()) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (light._depth>1 || light._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", - cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); - if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, - nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2); - if (ny0>=height() || ny2<0) return *this; - _cimg_for_triangle5(*this,xleft0,lxleft0,lyleft0,txleft0,tyleft0,xright0,lxright0,lyright0,txright0,tyright0,y, - nx0,ny0,nlx0,nly0,ntx0,nty0,nx1,ny1,nlx1,nly1,ntx1,nty1,nx2,ny2,nlx2,nly2,ntx2,nty2) { - int - xleft = xleft0, xright = xright0, - lxleft = lxleft0, lxright = lxright0, - lyleft = lyleft0, lyright = lyright0, - txleft = txleft0, txright = txright0, - tyleft = tyleft0, tyright = tyright0; - if (xrightlxleft?lxright - lxleft:lxleft - lxright, - dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, - dtx = txright>txleft?txright - txleft:txleft - txright, - dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, - rlx = dx?(lxright - lxleft)/dx:0, - rly = dx?(lyright - lyleft)/dx:0, - rtx = dx?(txright - txleft)/dx:0, - rty = dx?(tyright - tyleft)/dx:0, - slx = lxright>lxleft?1:-1, - sly = lyright>lyleft?1:-1, - stx = txright>txleft?1:-1, - sty = tyright>tyleft?1:-1, - ndlx = dlx - (dx?dx*(dlx/dx):0), - ndly = dly - (dx?dx*(dly/dx):0), - ndtx = dtx - (dx?dx*(dtx/dx):0), - ndty = dty - (dx?dx*(dty/dx):0); - int errlx = dx>>1, errly = errlx, errtx = errlx, errty = errlx; - if (xleft<0 && dx) { - lxleft-=xleft*(lxright - lxleft)/dx; - lyleft-=xleft*(lyright - lyleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } else for (int x = xleft; x<=xright; ++x) { - const tc *col = texture.data(txleft,tyleft); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); - tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); - } - } - return *this; - } - - //! Draw a textured Phong-shaded 2d triangle, with perspective correction. - template - CImg& draw_triangle(const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const CImg& light, - const int lx0, const int ly0, - const int lx1, const int ly1, - const int lx2, const int ly2, - const float opacity=1) { - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (light._depth>1 || light._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", - cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); - if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - if (is_overlapped(light)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2, - nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, - nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int - xleft = xleft0, xright = xright0, - lxleft = lxleft0, lxright = lxright0, - lyleft = lyleft0, lyright = lyright0; - float - zleft = zl, zright = zr, - txleft = txl, txright = txr, - tyleft = tyl, tyright = tyr; - if (xrightlxleft?lxright - lxleft:lxleft - lxright, - dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, - rlx = dx?(lxright - lxleft)/dx:0, - rly = dx?(lyright - lyleft)/dx:0, - slx = lxright>lxleft?1:-1, - sly = lyright>lyleft?1:-1, - ndlx = dlx - (dx?dx*(dlx/dx):0), - ndly = dly - (dx?dx*(dly/dx):0); - const float - pentez = (zright - zleft)/dx, - pentetx = (txright - txleft)/dx, - pentety = (tyright - tyleft)/dx; - int errlx = dx>>1, errly = errlx; - if (xleft<0 && dx) { - zleft-=xleft*(zright - zleft)/dx; - lxleft-=xleft*(lxright - lxleft)/dx; - lyleft-=xleft*(lyright - lyleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y,0,0); - if (opacity>=1) for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } else for (int x = xleft; x<=xright; ++x) { - const float invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a textured Phong-shaded 2d triangle, with perspective correction and z-buffering. - template - CImg& draw_triangle(CImg& zbuffer, - const int x0, const int y0, const float z0, - const int x1, const int y1, const float z1, - const int x2, const int y2, const float z2, - const CImg& texture, - const int tx0, const int ty0, - const int tx1, const int ty1, - const int tx2, const int ty2, - const CImg& light, - const int lx0, const int ly0, - const int lx1, const int ly1, - const int lx2, const int ly2, - const float opacity=1) { - typedef typename cimg::superset::type tzfloat; - if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; - if (!is_sameXY(zbuffer)) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", - cimg_instance, - zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); - if (texture._depth>1 || texture._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", - cimg_instance, - texture._width,texture._height,texture._depth,texture._spectrum,texture._data); - if (light._depth>1 || light._spectrum<_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", - cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); - if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, - +texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, - texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; - int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, - nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; - float - ntx0 = tx0/z0, nty0 = ty0/z0, - ntx1 = tx1/z1, nty1 = ty1/z1, - ntx2 = tx2/z2, nty2 = ty2/z2; - tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; - if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); - if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); - if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); - if (ny0>=height() || ny2<0) return *this; - float - ptxl = (ntx1 - ntx0)/(ny1 - ny0), - ptxr = (ntx2 - ntx0)/(ny2 - ny0), - ptxn = (ntx2 - ntx1)/(ny2 - ny1), - ptyl = (nty1 - nty0)/(ny1 - ny0), - ptyr = (nty2 - nty0)/(ny2 - ny0), - ptyn = (nty2 - nty1)/(ny2 - ny1), - txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), - tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), - txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), - tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); - tzfloat - pzl = (nz1 - nz0)/(ny1 - ny0), - pzr = (nz2 - nz0)/(ny2 - ny0), - pzn = (nz2 - nz1)/(ny2 - ny1), - zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), - zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); - _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, - nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { - if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } - int - xleft = xleft0, xright = xright0, - lxleft = lxleft0, lxright = lxright0, - lyleft = lyleft0, lyright = lyright0; - float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; - tzfloat zleft = zl, zright = zr; - if (xrightlxleft?lxright - lxleft:lxleft - lxright, - dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, - rlx = dx?(lxright - lxleft)/dx:0, - rly = dx?(lyright - lyleft)/dx:0, - slx = lxright>lxleft?1:-1, - sly = lyright>lyleft?1:-1, - ndlx = dlx - (dx?dx*(dlx/dx):0), - ndly = dly - (dx?dx*(dly/dx):0); - float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; - const tzfloat pentez = (zright - zleft)/dx; - int errlx = dx>>1, errly = errlx; - if (xleft<0 && dx) { - zleft-=xleft*(zright - zleft)/dx; - lxleft-=xleft*(lxright - lxleft)/dx; - lyleft-=xleft*(lyright - lyleft)/dx; - txleft-=xleft*(txright - txleft)/dx; - tyleft-=xleft*(tyright - tyleft)/dx; - } - if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; - T* ptrd = data(xleft,y); - tz *ptrz = zbuffer.data(xleft,y); - if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { - if (zleft>=(tzfloat)*ptrz) { - *ptrz = (tz)zleft; - const tzfloat invz = 1/zleft; - const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); - cimg_forC(*this,c) { - const tl l = light(lxleft,lyleft,c); - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); - *ptrd = (T)(nopacity*val + *ptrd*copacity); - ptrd+=whd; col+=twhd; - } - ptrd-=offx; - } - zleft+=pentez; txleft+=pentetx; tyleft+=pentety; - lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); - lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); - } - zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; - } - return *this; - } - - //! Draw a filled 4d rectangle. - /** - \param x0 X-coordinate of the upper-left rectangle corner. - \param y0 Y-coordinate of the upper-left rectangle corner. - \param z0 Z-coordinate of the upper-left rectangle corner. - \param c0 C-coordinate of the upper-left rectangle corner. - \param x1 X-coordinate of the lower-right rectangle corner. - \param y1 Y-coordinate of the lower-right rectangle corner. - \param z1 Z-coordinate of the lower-right rectangle corner. - \param c1 C-coordinate of the lower-right rectangle corner. - \param val Scalar value used to fill the rectangle area. - \param opacity Drawing opacity. - **/ - CImg& draw_rectangle(const int x0, const int y0, const int z0, const int c0, - const int x1, const int y1, const int z1, const int c1, - const T val, const float opacity=1) { - if (is_empty()) return *this; - const bool bx = (x0=width()?width() - 1 - nx1:0) + (nx0<0?nx0:0), - lY = (1 + ny1 - ny0) + (ny1>=height()?height() - 1 - ny1:0) + (ny0<0?ny0:0), - lZ = (1 + nz1 - nz0) + (nz1>=depth()?depth() - 1 - nz1:0) + (nz0<0?nz0:0), - lC = (1 + nc1 - nc0) + (nc1>=spectrum()?spectrum() - 1 - nc1:0) + (nc0<0?nc0:0); - const unsigned long - offX = (unsigned long)_width - lX, - offY = (unsigned long)_width*(_height - lY), - offZ = (unsigned long)_width*_height*(_depth - lZ); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - T *ptrd = data(nx0<0?0:nx0,ny0<0?0:ny0,nz0<0?0:nz0,nc0<0?0:nc0); - if (lX>0 && lY>0 && lZ>0 && lC>0) - for (int v = 0; v=1) { - if (sizeof(T)!=1) { for (int x = 0; x - CImg& draw_rectangle(const int x0, const int y0, const int z0, - const int x1, const int y1, const int z1, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_rectangle(): Specified color is (null).", - cimg_instance); - cimg_forC(*this,c) draw_rectangle(x0,y0,z0,c,x1,y1,z1,c,(T)color[c],opacity); - return *this; - } - - //! Draw an outlined 3d rectangle \overloading. - template - CImg& draw_rectangle(const int x0, const int y0, const int z0, - const int x1, const int y1, const int z1, - const tc *const color, const float opacity, - const unsigned int pattern) { - return draw_line(x0,y0,z0,x1,y0,z0,color,opacity,pattern,true). - draw_line(x1,y0,z0,x1,y1,z0,color,opacity,pattern,false). - draw_line(x1,y1,z0,x0,y1,z0,color,opacity,pattern,false). - draw_line(x0,y1,z0,x0,y0,z0,color,opacity,pattern,false). - draw_line(x0,y0,z1,x1,y0,z1,color,opacity,pattern,true). - draw_line(x1,y0,z1,x1,y1,z1,color,opacity,pattern,false). - draw_line(x1,y1,z1,x0,y1,z1,color,opacity,pattern,false). - draw_line(x0,y1,z1,x0,y0,z1,color,opacity,pattern,false). - draw_line(x0,y0,z0,x0,y0,z1,color,opacity,pattern,true). - draw_line(x1,y0,z0,x1,y0,z1,color,opacity,pattern,true). - draw_line(x1,y1,z0,x1,y1,z1,color,opacity,pattern,true). - draw_line(x0,y1,z0,x0,y1,z1,color,opacity,pattern,true); - } - - //! Draw a filled 2d rectangle. - /** - \param x0 X-coordinate of the upper-left rectangle corner. - \param y0 Y-coordinate of the upper-left rectangle corner. - \param x1 X-coordinate of the lower-right rectangle corner. - \param y1 Y-coordinate of the lower-right rectangle corner. - \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_rectangle(const int x0, const int y0, - const int x1, const int y1, - const tc *const color, const float opacity=1) { - return draw_rectangle(x0,y0,0,x1,y1,_depth-1,color,opacity); - } - - //! Draw a outlined 2d rectangle \overloading. - template - CImg& draw_rectangle(const int x0, const int y0, - const int x1, const int y1, - const tc *const color, const float opacity, - const unsigned int pattern) { - if (is_empty()) return *this; - if (y0==y1) return draw_line(x0,y0,x1,y0,color,opacity,pattern,true); - if (x0==x1) return draw_line(x0,y0,x0,y1,color,opacity,pattern,true); - const bool bx = (x0 - CImg& draw_polygon(const CImg& points, - const tc *const color, const float opacity=1) { - if (is_empty() || !points) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_polygon(): Specified color is (null).", - cimg_instance); - - // Normalize 2d input coordinates (remove adjacent duplicates). - CImg npoints(points._width,2); - unsigned int nb_points = 1, p = 0; - int cx = npoints(0,0) = (int)points(0,0), cy = npoints(0,1) = (int)points(0,1); - const int cx0 = cx, cy0 = cy; - for (p = 1; p npoints_x = npoints.get_shared_row(0), npoints_y = npoints.get_shared_row(1); - int xmax = 0, xmin = (int)npoints_x.min_max(xmax), ymax = 0, ymin = (int)npoints_y.min_max(ymax); - if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; - if (ymin==ymax) return cimg_draw_scanline(xmin,xmax,ymin,color,opacity,1); - const unsigned int - nxmin = xmin<0?0:(unsigned int)xmin, nxmax = xmax>=width()?_width-1:(unsigned int)xmax, - nymin = ymin<0?0:(unsigned int)ymin, nymax = ymax>=height()?_height-1:(unsigned int)ymax, - dx = 1 + nxmax - nxmin, - dy = 1 + nymax - nymin; - npoints_x-=nxmin; npoints_y-=nymin; - unsigned char one = 1; - const CImg mask = CImg(dx,dy,1,1,0).draw_polygon(npoints,&one,1); - CImg _color(dx,dy,1,spectrum()); - cimg_forC(_color,c) _color.get_shared_channel(c).fill(color[c]); - return draw_image(nxmin,nymin,0,0,_color,mask,opacity,1); - } - - // Draw polygon segments. - int - xmax = 0, xmin = (int)npoints.get_shared_points(0,nb_points-1,0).min_max(xmax), - ymax = 0, ymin = (int)npoints.get_shared_points(0,nb_points-1,1).min_max(ymax); - if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; - if (ymin==ymax) return cimg_draw_scanline(xmin,xmax,ymin,color,1,1); - const unsigned int - nymin = ymin<0?0:(unsigned int)ymin, - nymax = ymax>=height()?_height-1:(unsigned int)ymax, - dy = 1 + nymax - nymin; - CImg X(1+2*nb_points,dy,1,1,0), tmp; - cx = (int)npoints(0,0), cy = (int)npoints(0,1); - unsigned int cp = 0; - for (unsigned int p = 0; pay && cy>ny))?1:0; - for (int x = cx, y = y0, _sx = 1, _sy = 1, - _dx = nx>cx?nx-cx:((_sx=-1),cx-nx), - _dy = y1>y0?y1-y0:((_sy=-1),y0-y1), - _counter = ((_dx-=_dy?_dy*(_dx/_dy):0),_dy), - _err = _dx>>1, - _rx = _dy?(nx-cx)/_dy:0; - _counter>=countermin; - --_counter, y+=_sy, x+=_rx + ((_err-=_dx)<0?_err+=_dy,_sx:0)) - if (y>=0 && y<(int)dy) X(++X(0,y),y) = x; - cp = np; cx = nx; cy = ny; - } else { - const int pp = (cp?cp-1:nb_points-1), py = (int)npoints(pp,1); - if (y0>=0 && y0<(int)dy) { - cimg_draw_scanline(cxpy && ay>cy) || (cy - CImg& draw_polygon(const CImg& points, - const tc *const color, const float opacity, const unsigned int pattern) { - if (is_empty() || !points || points._width<3) return *this; - bool ninit_hatch = true; - switch (points._height) { - case 0 : case 1 : - throw CImgArgumentException(_cimg_instance - "draw_polygon(): Invalid specified point set.", - cimg_instance); - case 2 : { // 2d version. - CImg npoints(points._width,2); - int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1); - unsigned int nb_points = 1; - for (unsigned int p = 1; p npoints(points._width,3); - int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1), z = npoints(0,2) = (int)points(0,2); - unsigned int nb_points = 1; - for (unsigned int p = 1; p - CImg& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, - const tc *const color, const float opacity=1) { - return _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,0U); - } - - //! Draw a filled 2d ellipse \overloading. - /** - \param x0 X-coordinate of the ellipse center. - \param y0 Y-coordinate of the ellipse center. - \param tensor Diffusion tensor describing the ellipse. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_ellipse(const int x0, const int y0, const CImg &tensor, - const tc *const color, const float opacity=1) { - CImgList eig = tensor.get_symmetric_eigen(); - const CImg &val = eig[0], &vec = eig[1]; - return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), - std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, - color,opacity); - } - - //! Draw an outlined 2d ellipse. - /** - \param x0 X-coordinate of the ellipse center. - \param y0 Y-coordinate of the ellipse center. - \param r1 First radius of the ellipse. - \param r2 Second radius of the ellipse. - \param angle Angle of the first radius. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the outline pattern. - **/ - template - CImg& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, - const tc *const color, const float opacity, const unsigned int pattern) { - if (pattern) _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,pattern); - return *this; - } - - //! Draw an outlined 2d ellipse \overloading. - /** - \param x0 X-coordinate of the ellipse center. - \param y0 Y-coordinate of the ellipse center. - \param tensor Diffusion tensor describing the ellipse. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern An integer whose bits describe the outline pattern. - **/ - template - CImg& draw_ellipse(const int x0, const int y0, const CImg &tensor, - const tc *const color, const float opacity, - const unsigned int pattern) { - CImgList eig = tensor.get_symmetric_eigen(); - const CImg &val = eig[0], &vec = eig[1]; - return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), - std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, - color,opacity,pattern); - } - - template - CImg& _draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, - const tc *const color, const float opacity, - const unsigned int pattern) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_ellipse(): Specified color is (null).", - cimg_instance); - if (r1<=0 || r2<=0) return draw_point(x0,y0,color,opacity); - cimg_init_scanline(color,opacity); - const float - nr1 = cimg::abs(r1), nr2 = cimg::abs(r2), - nangle = (float)(angle*cimg::PI/180), - u = (float)std::cos(nangle), - v = (float)std::sin(nangle), - rmax = cimg::max(nr1,nr2), - l1 = (float)std::pow(rmax/(nr1>0?nr1:1e-6),2), - l2 = (float)std::pow(rmax/(nr2>0?nr2:1e-6),2), - a = l1*u*u + l2*v*v, - b = u*v*(l1-l2), - c = l1*v*v + l2*u*u; - const int - yb = (int)std::sqrt(a*rmax*rmax/(a*c - b*b)), - tymin = y0 - yb - 1, - tymax = y0 + yb + 1, - ymin = tymin<0?0:tymin, - ymax = tymax>=height()?height()-1:tymax; - int oxmin = 0, oxmax = 0; - bool first_line = true; - for (int y = ymin; y<=ymax; ++y) { - const float - Y = y - y0 + (y0?(float)std::sqrt(delta)/a:0.0f, - bY = b*Y/a, - fxmin = x0 - 0.5f - bY - sdelta, - fxmax = x0 + 0.5f - bY + sdelta; - const int xmin = (int)fxmin, xmax = (int)fxmax; - if (!pattern) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); - else { - if (first_line) { - if (y0-yb>=0) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); - else draw_point(xmin,y,color,opacity).draw_point(xmax,y,color,opacity); - first_line = false; - } else { - if (xmin - CImg& draw_circle(const int x0, const int y0, int radius, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_circle(): Specified color is (null).", - cimg_instance); - cimg_init_scanline(color,opacity); - if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; - if (y0>=0 && y0=0) { - const int x1 = x0-x, x2 = x0+x, y1 = y0-y, y2 = y0+y; - if (y1>=0 && y1=0 && y2=0 && y1=0 && y2 - CImg& draw_circle(const int x0, const int y0, int radius, - const tc *const color, const float opacity, - const unsigned int pattern) { - cimg::unused(pattern); - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_circle(): Specified color is (null).", - cimg_instance); - if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; - if (!radius) return draw_point(x0,y0,color,opacity); - draw_point(x0-radius,y0,color,opacity).draw_point(x0+radius,y0,color,opacity). - draw_point(x0,y0-radius,color,opacity).draw_point(x0,y0+radius,color,opacity); - if (radius==1) return *this; - for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x=0) { f+=(ddFy+=2); --y; } - ++x; ++(f+=(ddFx+=2)); - if (x!=y+1) { - const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x, x3 = x0-x, x4 = x0+x, y3 = y0-y, y4 = y0+y; - draw_point(x1,y1,color,opacity).draw_point(x1,y2,color,opacity). - draw_point(x2,y1,color,opacity).draw_point(x2,y2,color,opacity); - if (x!=y) - draw_point(x3,y3,color,opacity).draw_point(x4,y4,color,opacity). - draw_point(x4,y3,color,opacity).draw_point(x3,y4,color,opacity); - } - } - return *this; - } - - //! Draw an image. - /** - \param sprite Sprite image. - \param x0 X-coordinate of the sprite position. - \param y0 Y-coordinate of the sprite position. - \param z0 Z-coordinate of the sprite position. - \param c0 C-coordinate of the sprite position. - \param opacity Drawing opacity. - **/ - template - CImg& draw_image(const int x0, const int y0, const int z0, const int c0, - const CImg& sprite, const float opacity=1) { - if (is_empty() || !sprite) return *this; - if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); - if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); - const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); - const int - lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), - lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), - lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), - lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); - const t - *ptrs = sprite._data - - (bx?x0:0) - - (by?y0*sprite.width():0) - - (bz?z0*sprite.width()*sprite.height():0) - - (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); - const unsigned long - offX = (unsigned long)_width - lX, - soffX = (unsigned long)sprite._width - lX, - offY = (unsigned long)_width*(_height - lY), - soffY = (unsigned long)sprite._width*(sprite._height - lY), - offZ = (unsigned long)_width*_height*(_depth - lZ), - soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (lX>0 && lY>0 && lZ>0 && lC>0) { - T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); - for (int v = 0; v=1) for (int x = 0; x& draw_image(const int x0, const int y0, const int z0, const int c0, - const CImg& sprite, const float opacity=1) { - if (is_empty() || !sprite) return *this; - if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); - if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); - const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); - const int - lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), - lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), - lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), - lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); - const T - *ptrs = sprite._data - - (bx?x0:0) - - (by?y0*sprite.width():0) - - (bz?z0*sprite.width()*sprite.height():0) - - (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); - const unsigned long - offX = (unsigned long)_width - lX, - soffX = (unsigned long)sprite._width - lX, - offY = (unsigned long)_width*(_height - lY), - soffY = (unsigned long)sprite._width*(sprite._height - lY), - offZ = (unsigned long)_width*_height*(_depth - lZ), - soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ), - slX = lX*sizeof(T); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - if (lX>0 && lY>0 && lZ>0 && lC>0) { - T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); - for (int v = 0; v=1) for (int y = 0; y - CImg& draw_image(const int x0, const int y0, const int z0, - const CImg& sprite, const float opacity=1) { - return draw_image(x0,y0,z0,0,sprite,opacity); - } - - //! Draw an image \overloading. - template - CImg& draw_image(const int x0, const int y0, - const CImg& sprite, const float opacity=1) { - return draw_image(x0,y0,0,sprite,opacity); - } - - //! Draw an image \overloading. - template - CImg& draw_image(const int x0, - const CImg& sprite, const float opacity=1) { - return draw_image(x0,0,sprite,opacity); - } - - //! Draw an image \overloading. - template - CImg& draw_image(const CImg& sprite, const float opacity=1) { - return draw_image(0,sprite,opacity); - } - - //! Draw a masked image. - /** - \param sprite Sprite image. - \param mask Mask image. - \param x0 X-coordinate of the sprite position in the image instance. - \param y0 Y-coordinate of the sprite position in the image instance. - \param z0 Z-coordinate of the sprite position in the image instance. - \param c0 C-coordinate of the sprite position in the image instance. - \param mask_max_value Maximum pixel value of the mask image \c mask. - \param opacity Drawing opacity. - \note - - Pixel values of \c mask set the opacity of the corresponding pixels in \c sprite. - - Dimensions along x,y and z of \p sprite and \p mask must be the same. - **/ - template - CImg& draw_image(const int x0, const int y0, const int z0, const int c0, - const CImg& sprite, const CImg& mask, const float opacity=1, - const float mask_max_value=1) { - if (is_empty() || !sprite || !mask) return *this; - if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,mask,opacity,mask_max_value); - if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); - if (mask._width!=sprite._width || mask._height!=sprite._height || mask._depth!=sprite._depth) - throw CImgArgumentException(_cimg_instance - "draw_image(): Sprite (%u,%u,%u,%u,%p) and mask (%u,%u,%u,%u,%p) have incompatible dimensions.", - cimg_instance, - sprite._width,sprite._height,sprite._depth,sprite._spectrum,sprite._data, - mask._width,mask._height,mask._depth,mask._spectrum,mask._data); - - const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); - const int - lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), - lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), - lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), - lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); - const int - coff = -(bx?x0:0)-(by?y0*mask.width():0)-(bz?z0*mask.width()*mask.height():0)-(bc?c0*mask.width()*mask.height()*mask.depth():0), - ssize = mask.width()*mask.height()*mask.depth()*mask.spectrum(); - const ti *ptrs = sprite._data + coff; - const tm *ptrm = mask._data + coff; - const unsigned long - offX = (unsigned long)_width - lX, - soffX = (unsigned long)sprite._width - lX, - offY = (unsigned long)_width*(_height - lY), - soffY = (unsigned long)sprite._width*(sprite._height - lY), - offZ = (unsigned long)_width*_height*(_depth - lZ), - soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); - if (lX>0 && lY>0 && lZ>0 && lC>0) { - T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); - for (int c = 0; c - CImg& draw_image(const int x0, const int y0, const int z0, - const CImg& sprite, const CImg& mask, const float opacity=1, - const float mask_max_value=1) { - return draw_image(x0,y0,z0,0,sprite,mask,opacity,mask_max_value); - } - - //! Draw a image \overloading. - template - CImg& draw_image(const int x0, const int y0, - const CImg& sprite, const CImg& mask, const float opacity=1, - const float mask_max_value=1) { - return draw_image(x0,y0,0,sprite,mask,opacity,mask_max_value); - } - - //! Draw a image \overloading. - template - CImg& draw_image(const int x0, - const CImg& sprite, const CImg& mask, const float opacity=1, - const float mask_max_value=1) { - return draw_image(x0,0,sprite,mask,opacity,mask_max_value); - } - - //! Draw an image. - template - CImg& draw_image(const CImg& sprite, const CImg& mask, const float opacity=1, - const float mask_max_value=1) { - return draw_image(0,sprite,mask,opacity,mask_max_value); - } - - //! Draw a text string. - /** - \param x0 X-coordinate of the text in the image instance. - \param y0 Y-coordinate of the text in the image instance. - \param text Format of the text ('printf'-style format string). - \param foreground_color Pointer to \c spectrum() consecutive values, defining the foreground drawing color. - \param background_color Pointer to \c spectrum() consecutive values, defining the background drawing color. - \param opacity Drawing opacity. - \param font Font used for drawing text. - **/ - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const tc1 *const foreground_color, const tc2 *const background_color, - const float opacity, const CImgList& font, ...) { - if (!font) return *this; - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font); - cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - return _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,false); - } - - //! Draw a text string \overloading. - /** - \note A transparent background is used for the text. - **/ - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const tc *const foreground_color, const int, - const float opacity, const CImgList& font, ...) { - if (!font) return *this; - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font); - cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - return _draw_text(x0,y0,tmp,foreground_color,(tc*)0,opacity,font,false); - } - - //! Draw a text string \overloading. - /** - \note A transparent foreground is used for the text. - **/ - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const int, const tc *const background_color, - const float opacity, const CImgList& font, ...) { - if (!font) return *this; - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font); - cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - return _draw_text(x0,y0,tmp,(tc*)0,background_color,opacity,font,false); - } - - //! Draw a text string \overloading. - /** - \param x0 X-coordinate of the text in the image instance. - \param y0 Y-coordinate of the text in the image instance. - \param text Format of the text ('printf'-style format string). - \param foreground_color Array of spectrum() values of type \c T, defining the foreground color (0 means 'transparent'). - \param background_color Array of spectrum() values of type \c T, defining the background color (0 means 'transparent'). - \param opacity Drawing opacity. - \param font_height Height of the text font (exact match for 13,23,53,103, interpolated otherwise). - **/ - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const tc1 *const foreground_color, const tc2 *const background_color, - const float opacity=1, const unsigned int font_height=13, ...) { - if (!font_height) return *this; - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - const CImgList& font = CImgList::font(font_height,true); - _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,true); - return *this; - } - - //! Draw a text string \overloading. - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const tc *const foreground_color, const int background_color=0, - const float opacity=1, const unsigned int font_height=13, ...) { - if (!font_height) return *this; - cimg::unused(background_color); - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - return draw_text(x0,y0,"%s",foreground_color,(const tc*)0,opacity,font_height,tmp); - } - - //! Draw a text string \overloading. - template - CImg& draw_text(const int x0, const int y0, - const char *const text, - const int, const tc *const background_color, - const float opacity=1, const unsigned int font_height=13, ...) { - if (!font_height) return *this; - char tmp[2048] = { 0 }; std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,sizeof(tmp),text,ap); va_end(ap); - return draw_text(x0,y0,"%s",(tc*)0,background_color,opacity,font_height,tmp); - } - - template - CImg& _draw_text(const int x0, const int y0, - const char *const text, - const tc1 *const foreground_color, const tc2 *const background_color, - const float opacity, const CImgList& font, - const bool is_native_font) { - if (!text) return *this; - if (!font) - throw CImgArgumentException(_cimg_instance - "draw_text(): Empty specified font.", - cimg_instance); - - const unsigned int text_length = (unsigned int)std::strlen(text); - const bool _is_empty = is_empty(); - if (_is_empty) { - // If needed, pre-compute necessary size of the image - int x = 0, y = 0, w = 0; - unsigned char c = 0; - for (unsigned int i = 0; iw) w = x; x = 0; break; - case '\t' : x+=4*font[' ']._width; break; - default : if (cw) w=x; - y+=font[0]._height; - } - assign(x0+w,y0+y,1,is_native_font?1:font[0]._spectrum,0); - } - - int x = x0, y = y0; - for (unsigned int i = 0; i letter = font[c]; - if (letter) { - if (is_native_font && _spectrum>letter._spectrum) letter.resize(-100,-100,1,_spectrum,0,2); - const unsigned int cmin = cimg::min(_spectrum,letter._spectrum); - if (foreground_color) for (unsigned int c = 0; c - CImg& draw_quiver(const CImg& flow, - const t2 *const color, const float opacity=1, - const unsigned int sampling=25, const float factor=-20, - const bool is_arrow=true, const unsigned int pattern=~0U) { - return draw_quiver(flow,CImg(color,_spectrum,1,1,1,true),opacity,sampling,factor,is_arrow,pattern); - } - - //! Draw a 2d vector field, using a field of colors. - /** - \param flow Image of 2d vectors used as input data. - \param color Image of spectrum()-D vectors corresponding to the color of each arrow. - \param opacity Opacity of the drawing. - \param sampling Length (in pixels) between each arrow. - \param factor Length factor of each arrow (if <0, computed as a percentage of the maximum length). - \param is_arrow Tells if arrows must be drawn, instead of oriented segments. - \param pattern Used pattern to draw lines. - \note Clipping is supported. - **/ - template - CImg& draw_quiver(const CImg& flow, - const CImg& color, const float opacity=1, - const unsigned int sampling=25, const float factor=-20, - const bool is_arrow=true, const unsigned int pattern=~0U) { - if (is_empty()) return *this; - if (!flow || flow._spectrum!=2) - throw CImgArgumentException(_cimg_instance - "draw_quiver(): Invalid dimensions of specified flow (%u,%u,%u,%u,%p).", - cimg_instance, - flow._width,flow._height,flow._depth,flow._spectrum,flow._data); - if (sampling<=0) - throw CImgArgumentException(_cimg_instance - "draw_quiver(): Invalid sampling value %g " - "(should be >0)", - cimg_instance, - sampling); - const bool colorfield = (color._width==flow._width && color._height==flow._height && color._depth==1 && color._spectrum==_spectrum); - if (is_overlapped(flow)) return draw_quiver(+flow,color,opacity,sampling,factor,is_arrow,pattern); - float vmax,fact; - if (factor<=0) { - float m, M = (float)flow.get_norm(2).max_min(m); - vmax = (float)cimg::max(cimg::abs(m),cimg::abs(M)); - if (!vmax) vmax = 1; - fact = -factor; - } else { fact = factor; vmax = 1; } - - for (unsigned int y = sampling/2; y<_height; y+=sampling) - for (unsigned int x = sampling/2; x<_width; x+=sampling) { - const unsigned int X = x*flow._width/_width, Y = y*flow._height/_height; - float u = (float)flow(X,Y,0,0)*fact/vmax, v = (float)flow(X,Y,0,1)*fact/vmax; - if (is_arrow) { - const int xx = x+(int)u, yy = y+(int)v; - if (colorfield) draw_arrow(x,y,xx,yy,color.get_vector_at(X,Y)._data,opacity,45,sampling/5.0f,pattern); - else draw_arrow(x,y,xx,yy,color._data,opacity,45,sampling/5.0f,pattern); - } else { - if (colorfield) draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color.get_vector_at(X,Y)._data,opacity,pattern); - else draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color._data,opacity,pattern); - } - } - - return *this; - } - - //! Draw a labeled horizontal axis. - /** - \param values_x Values along the horizontal axis. - \param y Y-coordinate of the horizontal axis in the image instance. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern Drawing pattern. - \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). - \param allow_zero Enable/disable the drawing of label '0' if found. - **/ - template - CImg& draw_axis(const CImg& values_x, const int y, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const unsigned int font_height=13, - const bool allow_zero=true) { - if (is_empty()) return *this; - const int yt = (y+3+font_height)<_height?(y+3):(y-2-font_height); - const int siz = (int)values_x.size()-1; - char txt[32] = { 0 }; - CImg label; - if (siz<=0) { // Degenerated case. - draw_line(0,y,_width-1,y,color,opacity,pattern); - if (!siz) { - cimg_snprintf(txt,sizeof(txt),"%g",(double)*values_x); - label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); - const int - _xt = (width() - label.width())/2, - xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; - draw_point(width()/2,y-1,color,opacity).draw_point(width()/2,y+1,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) - draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); - } - } else { // Regular case. - if (values_x[0]=width()-2?width()-3-label.width():_xt; - draw_point(xi,y-1,color,opacity).draw_point(xi,y+1,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) - draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); - } - } - return *this; - } - - //! Draw a labeled vertical axis. - /** - \param x X-coordinate of the vertical axis in the image instance. - \param values_y Values along the Y-axis. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern Drawing pattern. - \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). - \param allow_zero Enable/disable the drawing of label '0' if found. - **/ - template - CImg& draw_axis(const int x, const CImg& values_y, - const tc *const color, const float opacity=1, - const unsigned int pattern=~0U, const unsigned int font_height=13, - const bool allow_zero=true) { - if (is_empty()) return *this; - int siz = (int)values_y.size()-1; - char txt[32] = { 0 }; - CImg label; - if (siz<=0) { // Degenerated case. - draw_line(x,0,x,_height-1,color,opacity,pattern); - if (!siz) { - cimg_snprintf(txt,sizeof(txt),"%g",(double)*values_y); - label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); - const int - _yt = (height() - label.height())/2, - yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, - _xt = x - 2 - label.width(), - xt = _xt>=0?_xt:x+3; - draw_point(x-1,height()/2,color,opacity).draw_point(x+1,height()/2,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) - draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); - } - } else { // Regular case. - if (values_y[0]=height()?height()-1-label.height():_yt, - _xt = x - 2 - label.width(), - xt = _xt>=0?_xt:x+3; - draw_point(x-1,yi,color,opacity).draw_point(x+1,yi,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) - draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); - } - } - return *this; - } - - //! Draw labeled horizontal and vertical axes. - /** - \param values_x Values along the X-axis. - \param values_y Values along the Y-axis. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern_x Drawing pattern for the X-axis. - \param pattern_y Drawing pattern for the Y-axis. - \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). - \param allow_zero Enable/disable the drawing of label '0' if found. - **/ - template - CImg& draw_axes(const CImg& values_x, const CImg& values_y, - const tc *const color, const float opacity=1, - const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, - const unsigned int font_height=13, const bool allow_zero=true) { - if (is_empty()) return *this; - const CImg nvalues_x(values_x._data,values_x.size(),1,1,1,true); - const int sizx = (int)values_x.size()-1, wm1 = width()-1; - if (sizx>=0) { - float ox = (float)*nvalues_x; - for (unsigned int x = sizx?1:0; x<_width; ++x) { - const float nx = (float)nvalues_x._linear_atX((float)x*sizx/wm1); - if (nx*ox<=0) { draw_axis(nx==0?x:x-1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } - ox = nx; - } - } - const CImg nvalues_y(values_y._data,values_y.size(),1,1,1,true); - const int sizy = (int)values_y.size()-1, hm1 = height()-1; - if (sizy>0) { - float oy = (float)nvalues_y[0]; - for (unsigned int y = sizy?1:0; y<_height; ++y) { - const float ny = (float)nvalues_y._linear_atX((float)y*sizy/hm1); - if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y-1,color,opacity,pattern_x,font_height,allow_zero); break; } - oy = ny; - } - } - return *this; - } - - //! Draw labeled horizontal and vertical axes \overloading. - template - CImg& draw_axes(const float x0, const float x1, const float y0, const float y1, - const tc *const color, const float opacity=1, - const int subdivisionx=-60, const int subdivisiony=-60, - const float precisionx=0, const float precisiony=0, - const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, - const unsigned int font_height=13) { - if (is_empty()) return *this; - const bool allow_zero = (x0*x1>0) || (y0*y1>0); - const float - dx = cimg::abs(x1-x0), dy = cimg::abs(y1-y0), - px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx)-2.0):precisionx, - py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy)-2.0):precisiony; - if (x0!=x1 && y0!=y1) - draw_axes(CImg::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px), - CImg::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), - color,opacity,pattern_x,pattern_y,font_height,allow_zero); - else if (x0==x1 && y0!=y1) - draw_axis((int)x0,CImg::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), - color,opacity,pattern_y,font_height); - else if (x0!=x1 && y0==y1) - draw_axis(CImg::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px),(int)y0, - color,opacity,pattern_x,font_height); - return *this; - } - - //! Draw 2d grid. - /** - \param values_x X-coordinates of the vertical lines. - \param values_y Y-coordinates of the horizontal lines. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - \param pattern_x Drawing pattern for vertical lines. - \param pattern_y Drawing pattern for horizontal lines. - **/ - template - CImg& draw_grid(const CImg& values_x, const CImg& values_y, - const tc *const color, const float opacity=1, - const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { - if (is_empty()) return *this; - if (values_x) cimg_foroff(values_x,x) { - const int xi = (int)values_x[x]; - if (xi>=0 && xi=0 && yi - CImg& draw_grid(const float delta_x, const float delta_y, - const float offsetx, const float offsety, - const bool invertx, const bool inverty, - const tc *const color, const float opacity=1, - const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { - if (is_empty()) return *this; - CImg seqx, seqy; - if (delta_x!=0) { - const float dx = delta_x>0?delta_x:_width*-delta_x/100; - const unsigned int nx = (unsigned int)(_width/dx); - seqx = CImg::sequence(1+nx,0,(unsigned int)(dx*nx)); - if (offsetx) cimg_foroff(seqx,x) seqx(x) = (unsigned int)cimg::mod(seqx(x)+offsetx,(float)_width); - if (invertx) cimg_foroff(seqx,x) seqx(x) = _width - 1 - seqx(x); - } - if (delta_y!=0) { - const float dy = delta_y>0?delta_y:_height*-delta_y/100; - const unsigned int ny = (unsigned int)(_height/dy); - seqy = CImg::sequence(1+ny,0,(unsigned int)(dy*ny)); - if (offsety) cimg_foroff(seqy,y) seqy(y) = (unsigned int)cimg::mod(seqy(y)+offsety,(float)_height); - if (inverty) cimg_foroff(seqy,y) seqy(y) = _height - 1 - seqy(y); - } - return draw_grid(seqx,seqy,color,opacity,pattern_x,pattern_y); - } - - //! Draw 1d graph. - /** - \param data Image containing the graph values I = f(x). - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - - \param plot_type Define the type of the plot: - - 0 = No plot. - - 1 = Plot using segments. - - 2 = Plot using cubic splines. - - 3 = Plot with bars. - \param vertex_type Define the type of points: - - 0 = No points. - - 1 = Point. - - 2 = Straight cross. - - 3 = Diagonal cross. - - 4 = Filled circle. - - 5 = Outlined circle. - - 6 = Square. - - 7 = Diamond. - \param ymin Lower bound of the y-range. - \param ymax Upper bound of the y-range. - \param pattern Drawing pattern. - \note - - if \c ymin==ymax==0, the y-range is computed automatically from the input samples. - **/ - template - CImg& draw_graph(const CImg& data, - const tc *const color, const float opacity=1, - const unsigned int plot_type=1, const int vertex_type=1, - const double ymin=0, const double ymax=0, const unsigned int pattern=~0U) { - if (is_empty() || _height<=1) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_graph(): Specified color is (null).", - cimg_instance); - - // Create shaded colors for displaying bar plots. - CImg color1, color2; - if (plot_type==3) { - color1.assign(_spectrum); color2.assign(_spectrum); - cimg_forC(*this,c) { color1[c] = (tc)cimg::min((float)cimg::type::max(),color[c]*1.2f); color2[c] = (tc)(color[c]*0.4f); } - } - - // Compute min/max and normalization factors. - const unsigned long - siz = data.size(), - _siz1 = siz - (plot_type!=3?1:0), - siz1 = _siz1?_siz1:1; - const unsigned int - _width1 = _width - (plot_type!=3?1:0), - width1 = _width1?_width1:1; - double m = ymin, M = ymax; - if (ymin==ymax) m = (double)data.max_min(M); - if (m==M) { --m; ++M; } - const float ca = (float)(M-m)/(_height-1); - bool init_hatch = true; - - // Draw graph edges - switch (plot_type%4) { - case 1 : { // Segments - int oX = 0, oY = (int)((data[0]-m)/ca); - if (siz==1) { - const int Y = (int)((*data-m)/ca); - draw_line(0,Y,width()-1,Y,color,opacity,pattern); - } else for (unsigned long off = 1; off ndata(data._data,siz,1,1,1,true); - int oY = (int)((data[0]-m)/ca); - cimg_forX(*this,x) { - const int Y = (int)((ndata._cubic_atX((float)x*siz1/width1)-m)/ca); - if (x>0) draw_line(x,oY,x+1,Y,color,opacity,pattern,init_hatch); - init_hatch = false; - oY = Y; - } - } break; - case 3 : { // Bars - const int Y0 = (int)(-m/ca); - int oX = 0; - cimg_foroff(data,off) { - const int - X = (off+1)*_width/siz-1, - Y = (int)((data[off]-m)/ca); - draw_rectangle(oX,Y0,X,Y,color,opacity). - draw_line(oX,Y,oX,Y0,color2.data(),opacity). - draw_line(oX,Y0,X,Y0,Y<=Y0?color2.data():color1.data(),opacity). - draw_line(X,Y,X,Y0,color1.data(),opacity). - draw_line(oX,Y,X,Y,Y<=Y0?color1.data():color2.data(),opacity); - oX = X+1; - } - } break; - default : break; // No edges - } - - // Draw graph points - const unsigned int wb2 = plot_type==3?_width1/(2*siz):0; - switch (vertex_type%8) { - case 1 : { // Point - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_point(X,Y,color,opacity); - } - } break; - case 2 : { // Straight Cross - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_line(X-3,Y,X+3,Y,color,opacity).draw_line(X,Y-3,X,Y+3,color,opacity); - } - } break; - case 3 : { // Diagonal Cross - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_line(X-3,Y-3,X+3,Y+3,color,opacity).draw_line(X-3,Y+3,X+3,Y-3,color,opacity); - } - } break; - case 4 : { // Filled Circle - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_circle(X,Y,3,color,opacity); - } - } break; - case 5 : { // Outlined circle - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_circle(X,Y,3,color,opacity,0U); - } - } break; - case 6 : { // Square - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_rectangle(X-3,Y-3,X+3,Y+3,color,opacity,~0U); - } - } break; - case 7 : { // Diamond - cimg_foroff(data,off) { - const int - X = off*_width1/siz1 + wb2, - Y = (int)((data[off]-m)/ca); - draw_line(X,Y-4,X+4,Y,color,opacity). - draw_line(X+4,Y,X,Y+4,color,opacity). - draw_line(X,Y+4,X-4,Y,color,opacity). - draw_line(X-4,Y,X,Y-4,color,opacity); - } - } break; - default : break; // No points - } - return *this; - } - - //! Draw filled 3d region with the flood fill algorithm. - /** - \param x X-coordinate of the starting point of the region to fill. - \param y Y-coordinate of the starting point of the region to fill. - \param z Z-coordinate of the starting point of the region to fill. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param[out] region Image that will contain the mask of the filled region mask, as an output. - \param sigma Tolerance concerning neighborhood values. - \param opacity Opacity of the drawing. - \param is_high_connexity Tells if 8-connexity must be used (only for 2d images). - \return \c region is initialized with the binary mask of the filled region. - **/ - template - CImg& draw_fill(const int x, const int y, const int z, - const tc *const color, const float opacity, - CImg& region, const float sigma=0, - const bool is_high_connexity=false) { - -#define _cimg_draw_fill_test(x,y,z,res) if (region(x,y,z)) res = false; else { \ - res = true; \ - const T *reference_col = reference_color._data + _spectrum, *ptrs = data(x,y,z) + siz; \ - for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } \ - region(x,y,z) = (t)(res?1:noregion); \ -} - -#define _cimg_draw_fill_set(x,y,z) { \ - const tc *col = color; \ - T *ptrd = data(x,y,z); \ - if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } \ - else cimg_forC(*this,c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } \ -} - -#define _cimg_draw_fill_insert(x,y,z) { \ - if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); \ - unsigned int *ptrr = remaining.data(0,posr1); \ - *(ptrr++) = x; *(ptrr++) = y; *(ptrr++) = z; ++posr1; \ -} - -#define _cimg_draw_fill_test_neighbor(x,y,z,cond) if (cond) { \ - const unsigned int tx = x, ty = y, tz = z; \ - _cimg_draw_fill_test(tx,ty,tz,res); if (res) _cimg_draw_fill_insert(tx,ty,tz); \ -} - - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_fill(): Specified color is (null).", - cimg_instance); - - region.assign(_width,_height,_depth,1,(t)0); - if (x>=0 && x=0 && y=0 && z1); - const CImg reference_color = get_vector_at(x,y,z); - CImg remaining(3,512,1,1,0); - remaining(0,0) = x; remaining(1,0) = y; remaining(2,0) = z; - unsigned int posr0 = 0, posr1 = 1; - region(x,y,z) = (t)1; - const t noregion = ((t)1==(t)2)?(t)0:(t)(-1); - if (is_3d) do { // 3d version of the filling algorithm - const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++), zc = *(pcurr++); - if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } - bool cont, res; - unsigned int nxc = xc; - do { // X-backward - _cimg_draw_fill_set(nxc,yc,zc); - _cimg_draw_fill_test_neighbor(nxc,yc-1,zc,yc!=0); - _cimg_draw_fill_test_neighbor(nxc,yc+1,zc,ycposr0); - else do { // 2d version of the filling algorithm - const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++); - if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } - bool cont, res; - unsigned int nxc = xc; - do { // X-backward - _cimg_draw_fill_set(nxc,yc,0); - _cimg_draw_fill_test_neighbor(nxc,yc-1,0,yc!=0); - _cimg_draw_fill_test_neighbor(nxc,yc+1,0,ycposr0); - if (noregion) cimg_for(region,ptrd,t) if (*ptrd==noregion) *ptrd = (t)0; - } - return *this; - } - - //! Draw filled 3d region with the flood fill algorithm \simplification. - template - CImg& draw_fill(const int x, const int y, const int z, - const tc *const color, const float opacity=1, - const float sigma=0, const bool is_high_connexity=false) { - CImg tmp; - return draw_fill(x,y,z,color,opacity,tmp,sigma,is_high_connexity); - } - - //! Draw filled 2d region with the flood fill algorithm \simplification. - template - CImg& draw_fill(const int x, const int y, - const tc *const color, const float opacity=1, - const float sigma=0, const bool is_high_connexity=false) { - CImg tmp; - return draw_fill(x,y,0,color,opacity,tmp,sigma,is_high_connexity); - } - - //! Draw a random plasma texture. - /** - \param alpha Alpha-parameter. - \param beta Beta-parameter. - \param scale Scale-parameter. - \note Use the mid-point algorithm to render. - **/ - CImg& draw_plasma(const float alpha=1, const float beta=0, const unsigned int scale=8) { - if (is_empty()) return *this; - const int w = width(), h = height(); - const Tfloat m = (Tfloat)cimg::type::min(), M = (Tfloat)cimg::type::max(); - cimg_forZC(*this,z,c) { - CImg ref = get_shared_slice(z,c); - for (int delta = 1<1; delta>>=1) { - const int delta2 = delta>>1; - const float r = alpha*delta + beta; - - // Square step. - for (int y0 = 0; y0M?M:val); - } - - // Diamond steps. - for (int y = -delta2; yM?M:val); - } - for (int y0 = 0; y0M?M:val); - } - for (int y = -delta2; yM?M:val); - } - } - } - return *this; - } - - //! Draw a quadratic Mandelbrot or Julia 2d fractal. - /** - \param x0 X-coordinate of the upper-left pixel. - \param y0 Y-coordinate of the upper-left pixel. - \param x1 X-coordinate of the lower-right pixel. - \param y1 Y-coordinate of the lower-right pixel. - \param colormap Colormap. - \param opacity Drawing opacity. - \param z0r Real part of the upper-left fractal vertex. - \param z0i Imaginary part of the upper-left fractal vertex. - \param z1r Real part of the lower-right fractal vertex. - \param z1i Imaginary part of the lower-right fractal vertex. - \param iteration_max Maximum number of iterations for each estimated point. - \param is_normalized_iteration Tells if iterations are normalized. - \param is_julia_set Tells if the Mandelbrot or Julia set is rendered. - \param param_r Real part of the Julia set parameter. - \param param_i Imaginary part of the Julia set parameter. - \note Fractal rendering is done by the Escape Time Algorithm. - **/ - template - CImg& draw_mandelbrot(const int x0, const int y0, const int x1, const int y1, - const CImg& colormap, const float opacity=1, - const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, - const unsigned int iteration_max=255, - const bool is_normalized_iteration=false, - const bool is_julia_set=false, - const double param_r=0, const double param_i=0) { - if (is_empty()) return *this; - CImg palette; - if (colormap) palette.assign(colormap._data,colormap.size()/colormap._spectrum,1,1,colormap._spectrum,true); - if (palette && palette._spectrum!=_spectrum) - throw CImgArgumentException(_cimg_instance - "draw_mandelbrot(): Instance and specified colormap (%u,%u,%u,%u,%p) have incompatible dimensions.", - cimg_instance, - colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); - - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), ln2 = (float)std::log(2.0); - unsigned int iteration = 0; - cimg_for_inXY(*this,x0,y0,x1,y1,p,q) { - const double x = z0r + p*(z1r-z0r)/_width, y = z0i + q*(z1i-z0i)/_height; - double zr, zi, cr, ci; - if (is_julia_set) { zr = x; zi = y; cr = param_r; ci = param_i; } - else { zr = param_r; zi = param_i; cr = x; ci = y; } - for (iteration=1; zr*zr + zi*zi<=4 && iteration<=iteration_max; ++iteration) { - const double temp = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = temp; - } - if (iteration>iteration_max) { - if (palette) { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette(0,c); - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(palette(0,c)*nopacity + (*this)(p,q,0,c)*copacity); - } else { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)0; - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)((*this)(p,q,0,c)*copacity); - } - } else if (is_normalized_iteration) { - const float - normz = (float)cimg::abs(zr*zr+zi*zi), - niteration = (float)(iteration + 1 - std::log(std::log(normz))/ln2); - if (palette) { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette._linear_atX(niteration,c); - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(palette._linear_atX(niteration,c)*nopacity + (*this)(p,q,0,c)*copacity); - } else { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)niteration; - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(niteration*nopacity + (*this)(p,q,0,c)*copacity); - } - } else { - if (palette) { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette._atX(iteration,c); - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(palette(iteration,c)*nopacity + (*this)(p,q,0,c)*copacity); - } else { - if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)iteration; - else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(iteration*nopacity + (*this)(p,q,0,c)*copacity); - } - } - } - return *this; - } - - //! Draw a quadratic Mandelbrot or Julia 2d fractal \overloading. - template - CImg& draw_mandelbrot(const CImg& colormap, const float opacity=1, - const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, - const unsigned int iteration_max=255, - const bool is_normalized_iteration=false, - const bool is_julia_set=false, - const double param_r=0, const double param_i=0) { - return draw_mandelbrot(0,0,_width-1,_height-1,colormap,opacity, - z0r,z0i,z1r,z1i,iteration_max,is_normalized_iteration,is_julia_set,param_r,param_i); - } - - //! Draw a 1d gaussian function. - /** - \param xc X-coordinate of the gaussian center. - \param sigma Standard variation of the gaussian distribution. - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_gaussian(const float xc, const float sigma, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_gaussian(): Specified color is (null).", - cimg_instance); - const float sigma2 = 2*sigma*sigma, nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - const tc *col = color; - cimg_forX(*this,x) { - const float dx = (x - xc), val = (float)std::exp(-dx*dx/sigma2); - T *ptrd = data(x,0,0,0); - if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } - else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } - col-=_spectrum; - } - return *this; - } - - //! Draw a 2d gaussian function. - /** - \param xc X-coordinate of the gaussian center. - \param yc Y-coordinate of the gaussian center. - \param tensor Covariance matrix (must be 2x2). - \param color Pointer to \c spectrum() consecutive values, defining the drawing color. - \param opacity Drawing opacity. - **/ - template - CImg& draw_gaussian(const float xc, const float yc, const CImg& tensor, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - if (tensor._width!=2 || tensor._height!=2 || tensor._depth!=1 || tensor._spectrum!=1) - throw CImgArgumentException(_cimg_instance - "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 2x2 matrix.", - cimg_instance, - tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); - if (!color) - throw CImgArgumentException(_cimg_instance - "draw_gaussian(): Specified color is (null).", - cimg_instance); - typedef typename CImg::Tfloat tfloat; - const CImg invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); - const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = invT2(1,1); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - const tc *col = color; - float dy = -yc; - cimg_forY(*this,y) { - float dx = -xc; - cimg_forX(*this,x) { - const float val = (float)std::exp(a*dx*dx + b*dx*dy + c*dy*dy); - T *ptrd = data(x,y,0,0); - if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } - else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } - col-=_spectrum; - ++dx; - } - ++dy; - } - return *this; - } - - //! Draw a 2d gaussian function \overloading. - template - CImg& draw_gaussian(const int xc, const int yc, const float r1, const float r2, const float ru, const float rv, - const tc *const color, const float opacity=1) { - const double - a = r1*ru*ru + r2*rv*rv, - b = (r1-r2)*ru*rv, - c = r1*rv*rv + r2*ru*ru; - const CImg tensor(2,2,1,1, a,b,b,c); - return draw_gaussian(xc,yc,tensor,color,opacity); - } - - //! Draw a 2d gaussian function \overloading. - template - CImg& draw_gaussian(const float xc, const float yc, const float sigma, - const tc *const color, const float opacity=1) { - return draw_gaussian(xc,yc,CImg::diagonal(sigma,sigma),color,opacity); - } - - //! Draw a 3d gaussian function \overloading. - template - CImg& draw_gaussian(const float xc, const float yc, const float zc, const CImg& tensor, - const tc *const color, const float opacity=1) { - if (is_empty()) return *this; - typedef typename CImg::Tfloat tfloat; - if (tensor._width!=3 || tensor._height!=3 || tensor._depth!=1 || tensor._spectrum!=1) - throw CImgArgumentException(_cimg_instance - "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 3x3 matrix.", - cimg_instance, - tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); - - const CImg invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); - const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = 2*invT2(2,0), d = invT2(1,1), e = 2*invT2(2,1), f = invT2(2,2); - const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); - const unsigned long whd = (unsigned long)_width*_height*_depth; - const tc *col = color; - cimg_forXYZ(*this,x,y,z) { - const float - dx = (x - xc), dy = (y - yc), dz = (z - zc), - val = (float)std::exp(a*dx*dx + b*dx*dy + c*dx*dz + d*dy*dy + e*dy*dz + f*dz*dz); - T *ptrd = data(x,y,z,0); - if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } - else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } - col-=_spectrum; - } - return *this; - } - - //! Draw a 3d gaussian function \overloading. - template - CImg& draw_gaussian(const float xc, const float yc, const float zc, const float sigma, - const tc *const color, const float opacity=1) { - return draw_gaussian(xc,yc,zc,CImg::diagonal(sigma,sigma,sigma),color,opacity); - } - - //! Draw a 3d object. - /** - \param x0 X-coordinate of the 3d object position - \param y0 Y-coordinate of the 3d object position - \param z0 Z-coordinate of the 3d object position - \param vertices Image Nx3 describing 3d point coordinates - \param primitives List of P primitives - \param colors List of P color (or textures) - \param opacities Image or list of P opacities - \param render_type d Render type (0=Points, 1=Lines, 2=Faces (no light), 3=Faces (flat), 4=Faces(Gouraud) - \param is_double_sided Tells if object faces have two sides or are oriented. - \param focale length of the focale (0 for parallel projection) - \param lightx X-coordinate of the light - \param lighty Y-coordinate of the light - \param lightz Z-coordinate of the light - \param specular_lightness Amount of specular light. - \param specular_shininess Shininess of the object - **/ - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImg& opacities, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, - specular_lightness,specular_shininess,CImg::empty()); - } - - //! Draw a 3d object \simplification. - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImg& opacities, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); - } - -#ifdef cimg_use_board - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImg& opacities, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(board,x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, - specular_lightness,specular_shininess,CImg::empty()); - } - - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImg& opacities, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return _draw_object3d((void*)&board,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); - } -#endif - - //! Draw a 3d object \simplification. - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImgList& opacities, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, - specular_lightness,specular_shininess,CImg::empty()); - } - - //! Draw a 3d object \simplification. - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImgList& opacities, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); - } - -#ifdef cimg_use_board - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImgList& opacities, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(board,x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, - specular_lightness,specular_shininess,CImg::empty()); - } - - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, const CImgList& opacities, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return _draw_object3d((void*)&board,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); - } -#endif - - //! Draw a 3d object \simplification. - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,CImg::empty()); - } - - //! Draw a 3d object \simplification. - template - CImg& draw_object3d(const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,zbuffer); - } - -#ifdef cimg_use_board - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, - const unsigned int render_type=4, - const bool is_double_sided=false, const float focale=700, - const float lightx=0, const float lighty=0, const float lightz=-5e8, - const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,CImg::empty()); - } - - template - CImg& draw_object3d(LibBoard::Board& board, - const float x0, const float y0, const float z0, - const CImg& vertices, const CImgList& primitives, - const CImgList& colors, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - CImg& zbuffer) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), - render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,zbuffer); - } -#endif - - template - static float __draw_object3d(const CImgList& opacities, const unsigned int n_primitive, CImg& opacity) { - if (n_primitive>=opacities._width || opacities[n_primitive].is_empty()) { opacity.assign(); return 1; } - if (opacities[n_primitive].size()==1) { opacity.assign(); return opacities(n_primitive,0); } - opacity.assign(opacities[n_primitive],true); - return 1.0f; - } - - template - static float __draw_object3d(const CImg& opacities, const unsigned int n_primitive, CImg& opacity) { - opacity.assign(); - return n_primitive>=opacities._width?1.0f:(float)opacities[n_primitive]; - } - - template - CImg& _draw_object3d(void *const pboard, CImg& zbuffer, - const float X, const float Y, const float Z, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const unsigned int render_type, - const bool is_double_sided, const float focale, - const float lightx, const float lighty, const float lightz, - const float specular_lightness, const float specular_shininess, - const float sprite_scale) { - typedef typename cimg::superset2::type tpfloat; - if (is_empty() || !vertices || !primitives) return *this; - char error_message[1024] = { 0 }; - if (!vertices.is_object3d(primitives,colors,opacities,false,error_message)) - throw CImgArgumentException(_cimg_instance - "draw_object3d(): Invalid specified 3d object (%u,%u) (%s).", - cimg_instance,vertices._width,primitives._width,error_message); - if (render_type==5) cimg::mutex(10); // Static variable used in this case, breaks thread-safety. - -#ifndef cimg_use_board - if (pboard) return *this; -#endif - const float - nspec = 1 - (specular_lightness<0.0f?0.0f:(specular_lightness>1.0f?1.0f:specular_lightness)), - nspec2 = 1 + (specular_shininess<0.0f?0.0f:specular_shininess), - nsl1 = (nspec2 - 1)/cimg::sqr(nspec - 1), - nsl2 = 1 - 2*nsl1*nspec, - nsl3 = nspec2 - nsl1 - nsl2; - - // Create light texture for phong-like rendering. - CImg light_texture; - if (render_type==5) { - if (colors._width>primitives._width) { - static CImg default_light_texture; - static const tc *lptr = 0; - static tc ref_values[64] = { 0 }; - const CImg& img = colors.back(); - bool is_same_texture = (lptr==img._data); - if (is_same_texture) - for (unsigned int r = 0, j = 0; j<8; ++j) - for (unsigned int i = 0; i<8; ++i) - if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum)) { is_same_texture = false; break; } - if (!is_same_texture || default_light_texture._spectrum<_spectrum) { - (default_light_texture.assign(img,false)/=255).resize(-100,-100,1,_spectrum); - lptr = colors.back().data(); - for (unsigned int r = 0, j = 0; j<8; ++j) - for (unsigned int i = 0; i<8; ++i) - ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum); - } - light_texture.assign(default_light_texture,true); - } else { - static CImg default_light_texture; - static float olightx = 0, olighty = 0, olightz = 0, ospecular_shininess = 0; - if (!default_light_texture || - lightx!=olightx || lighty!=olighty || lightz!=olightz || - specular_shininess!=ospecular_shininess || default_light_texture._spectrum<_spectrum) { - default_light_texture.assign(512,512); - const float - dlx = lightx - X, - dly = lighty - Y, - dlz = lightz - Z, - nl = (float)std::sqrt(dlx*dlx + dly*dly + dlz*dlz), - nlx = (default_light_texture._width - 1)/2*(1 + dlx/nl), - nly = (default_light_texture._height - 1)/2*(1 + dly/nl), - white[] = { 1 }; - default_light_texture.draw_gaussian(nlx,nly,default_light_texture._width/3.0f,white); - cimg_forXY(default_light_texture,x,y) { - const float factor = default_light_texture(x,y); - if (factor>nspec) default_light_texture(x,y) = cimg::min(2,nsl1*factor*factor + nsl2*factor + nsl3); - } - default_light_texture.resize(-100,-100,1,_spectrum); - olightx = lightx; olighty = lighty; olightz = lightz; ospecular_shininess = specular_shininess; - } - light_texture.assign(default_light_texture,true); - } - } - - // Compute 3d to 2d projection. - CImg projections(vertices._width,2); - tpfloat parallzmin = cimg::type::max(); - const float absfocale = focale?cimg::abs(focale):0; - if (absfocale) cimg_forX(projections,l) { // Perspective projection - const tpfloat - x = (tpfloat)vertices(l,0), - y = (tpfloat)vertices(l,1), - z = (tpfloat)vertices(l,2); - const tpfloat projectedz = z + Z + absfocale; - projections(l,1) = Y + absfocale*y/projectedz; - projections(l,0) = X + absfocale*x/projectedz; - } else cimg_forX(projections,l) { // Parallel projection - const tpfloat - x = (tpfloat)vertices(l,0), - y = (tpfloat)vertices(l,1), - z = (tpfloat)vertices(l,2); - if (z visibles(primitives._width); - CImg zrange(primitives._width); - unsigned int nb_visibles = 0; - const tpfloat zmin = absfocale?(tpfloat)(1.5f - absfocale):cimg::type::min(); - cimglist_for(primitives,l) { - const CImg& primitive = primitives[l]; - switch (primitive.size()) { - case 1 : { // Point - const unsigned int i0 = (unsigned int)primitive(0); - const tpfloat z0 = Z + vertices(i0,2); - if (z0>zmin) { - visibles(nb_visibles) = (unsigned int)l; - zrange(nb_visibles++) = z0; - } - } break; - case 5 : { // Sphere - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1); - const tpfloat - Xc = 0.5f*((float)vertices(i0,0) + (float)vertices(i1,0)), - Yc = 0.5f*((float)vertices(i0,1) + (float)vertices(i1,1)), - Zc = 0.5f*((float)vertices(i0,2) + (float)vertices(i1,2)), - _zc = Z + Zc, - zc = _zc + _focale, - xc = X + Xc*(absfocale?absfocale/zc:1), - yc = Y + Yc*(absfocale?absfocale/zc:1), - radius = 0.5f*std::sqrt(cimg::sqr(vertices(i1,0) - vertices(i0,0)) + - cimg::sqr(vertices(i1,1) - vertices(i0,1)) + - cimg::sqr(vertices(i1,2) - vertices(i0,2)))*(absfocale?absfocale/zc:1), - xm = xc - radius, - ym = yc - radius, - xM = xc + radius, - yM = yc + radius; - if (xM>=0 && xm<_width && yM>=0 && ym<_height && _zc>zmin) { - visibles(nb_visibles) = (unsigned int)l; - zrange(nb_visibles++) = _zc; - } - } break; - case 2 : // Segment - case 6 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1); - const tpfloat - x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), - x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2); - tpfloat xm, xM, ym, yM; - if (x0=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin) { - visibles(nb_visibles) = (unsigned int)l; - zrange(nb_visibles++) = (z0 + z1)/2; - } - } break; - case 3 : // Triangle - case 9 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2); - const tpfloat - x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), - x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), - x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2); - tpfloat xm, xM, ym, yM; - if (x0xM) xM = x2; - if (y0yM) yM = y2; - if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { - const tpfloat d = (x1-x0)*(y2-y0) - (x2-x0)*(y1-y0); - if (is_double_sided || d<0) { - visibles(nb_visibles) = (unsigned int)l; - zrange(nb_visibles++) = (z0 + z1 + z2)/3; - } - } - } break; - case 4 : // Rectangle - case 12 : { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2), - i3 = (unsigned int)primitive(3); - const tpfloat - x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), - x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), - x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2), - x3 = projections(i3,0), y3 = projections(i3,1), z3 = Z + vertices(i3,2); - tpfloat xm, xM, ym, yM; - if (x0xM) xM = x2; - if (x3xM) xM = x3; - if (y0yM) yM = y2; - if (y3yM) yM = y3; - if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { - const float d = (x1 - x0)*(y2 - y0) - (x2 - x0)*(y1 - y0); - if (is_double_sided || d<0) { - visibles(nb_visibles) = (unsigned int)l; - zrange(nb_visibles++) = (z0 + z1 + z2 + z3)/4; - } - } - } break; - default : - throw CImgArgumentException(_cimg_instance - "draw_object3d(): Invalid primitive[%u] with size %u " - "(should have size 1,2,3,4,5,6,9 or 12).", - cimg_instance, - l,primitive.size()); - } - } - - if (nb_visibles<=0) return *this; - CImg permutations; - CImg(zrange._data,nb_visibles,1,1,1,true).sort(permutations,false); - - // Compute light properties - CImg lightprops; - switch (render_type) { - case 3 : { // Flat Shading - lightprops.assign(nb_visibles); - cimg_forX(lightprops,l) { - const CImg& primitive = primitives(visibles(permutations(l))); - const unsigned int psize = primitive.size(); - if (psize==3 || psize==4 || psize==9 || psize==12) { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2); - const tpfloat - x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), - x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), - x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), - dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, - dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, - nx = dy1*dz2 - dz1*dy2, - ny = dz1*dx2 - dx1*dz2, - nz = dx1*dy2 - dy1*dx2, - norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), - lx = X + (x0 + x1 + x2)/3 - lightx, - ly = Y + (y0 + y1 + y2)/3 - lighty, - lz = Z + (z0 + z1 + z2)/3 - lightz, - nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), - factor = cimg::max(cimg::abs(-lx*nx-ly*ny-lz*nz)/(norm*nl),0); - lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); - } else lightprops[l] = 1; - } - } break; - - case 4 : // Gouraud Shading - case 5 : { // Phong-Shading - CImg vertices_normals(vertices._width,3,1,1,0); - for (unsigned int l = 0; l& primitive = primitives[visibles(l)]; - const unsigned int psize = primitive.size(); - const bool - triangle_flag = (psize==3) || (psize==9), - rectangle_flag = (psize==4) || (psize==12); - if (triangle_flag || rectangle_flag) { - const unsigned int - i0 = (unsigned int)primitive(0), - i1 = (unsigned int)primitive(1), - i2 = (unsigned int)primitive(2), - i3 = rectangle_flag?(unsigned int)primitive(3):0; - const tpfloat - x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), - x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), - x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), - dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, - dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, - nnx = dy1*dz2 - dz1*dy2, - nny = dz1*dx2 - dx1*dz2, - nnz = dx1*dy2 - dy1*dx2, - norm = (tpfloat)(1e-5f + std::sqrt(nnx*nnx + nny*nny + nnz*nnz)), - nx = nnx/norm, - ny = nny/norm, - nz = nnz/norm; - vertices_normals(i0,0)+=nx; vertices_normals(i0,1)+=ny; vertices_normals(i0,2)+=nz; - vertices_normals(i1,0)+=nx; vertices_normals(i1,1)+=ny; vertices_normals(i1,2)+=nz; - vertices_normals(i2,0)+=nx; vertices_normals(i2,1)+=ny; vertices_normals(i2,2)+=nz; - if (rectangle_flag) { vertices_normals(i3,0)+=nx; vertices_normals(i3,1)+=ny; vertices_normals(i3,2)+=nz; } - } - } - - if (is_double_sided) cimg_forX(vertices_normals,p) if (vertices_normals(p,2)>0) { - vertices_normals(p,0) = -vertices_normals(p,0); - vertices_normals(p,1) = -vertices_normals(p,1); - vertices_normals(p,2) = -vertices_normals(p,2); - } - - if (render_type==4) { - lightprops.assign(vertices._width); - cimg_forX(lightprops,l) { - const tpfloat - nx = vertices_normals(l,0), - ny = vertices_normals(l,1), - nz = vertices_normals(l,2), - norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), - lx = X + vertices(l,0) - lightx, - ly = Y + vertices(l,1) - lighty, - lz = Z + vertices(l,2) - lightz, - nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), - factor = cimg::max((-lx*nx-ly*ny-lz*nz)/(norm*nl),0); - lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); - } - } else { - const unsigned int - lw2 = light_texture._width/2 - 1, - lh2 = light_texture._height/2 - 1; - lightprops.assign(vertices._width,2); - cimg_forX(lightprops,l) { - const tpfloat - nx = vertices_normals(l,0), - ny = vertices_normals(l,1), - nz = vertices_normals(l,2), - norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), - nnx = nx/norm, - nny = ny/norm; - lightprops(l,0) = lw2*(1 + nnx); - lightprops(l,1) = lh2*(1 + nny); - } - } - } break; - } - - // Draw visible primitives - const CImg default_color(1,_spectrum,1,1,(tc)200); - typedef typename to::value_type _to; - CImg<_to> _opacity; - - for (unsigned int l = 0; l& primitive = primitives[n_primitive]; - const CImg - &__color = n_primitive(), - _color = (__color && __color.size()!=_spectrum && __color._spectrum<_spectrum)?__color.get_resize(-100,-100,-100,_spectrum,0):CImg(), - &color = _color?_color:(__color?__color:default_color); - const tc *const pcolor = color._data; - const float opacity = __draw_object3d(opacities,n_primitive,_opacity); - -#ifdef cimg_use_board - LibBoard::Board &board = *(LibBoard::Board*)pboard; -#endif - - switch (primitive.size()) { - case 1 : { // Colored point or sprite - const unsigned int n0 = (unsigned int)primitive[0]; - const int x0 = (int)projections(n0,0), y0 = (int)projections(n0,1); - - if (_opacity.is_empty()) { // Scalar opacity. - - if (color.size()==_spectrum) { // Colored point. - draw_point(x0,y0,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillCircle((float)x0,height()-(float)y0,0); - } -#endif - } else { // Sprite. - const tpfloat z = Z + vertices(n0,2); - const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); - const unsigned int - _sw = (unsigned int)(color._width*factor), - _sh = (unsigned int)(color._height*factor), - sw = _sw?_sw:1, sh = _sh?_sh:1; - const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; - if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2=0 || ny0-(int)sh/2 - _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), - &sprite = _sprite?_sprite:color; - draw_image(nx0,ny0,sprite,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128); - board.setFillColor(LibBoard::Color::None); - board.drawRectangle((float)nx0,height()-(float)ny0,sw,sh); - } -#endif - } - } - } else { // Opacity mask. - const tpfloat z = Z + vertices(n0,2); - const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); - const unsigned int - _sw = (unsigned int)(cimg::max(color._width,_opacity._width)*factor), - _sh = (unsigned int)(cimg::max(color._height,_opacity._height)*factor), - sw = _sw?_sw:1, sh = _sh?_sh:1; - const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; - if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2=0 || ny0-(int)sh/2 - _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), - &sprite = _sprite?_sprite:color; - const CImg<_to> - _nopacity = (sw!=_opacity._width || sh!=_opacity._height)?_opacity.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<_to>(), - &nopacity = _nopacity?_nopacity:_opacity; - draw_image(nx0,ny0,sprite,nopacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128); - board.setFillColor(LibBoard::Color::None); - board.drawRectangle((float)nx0,height()-(float)ny0,sw,sh); - } -#endif - } - } - } break; - case 2 : { // Colored line - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale; - if (render_type) { - if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity); - else draw_line(x0,y0,x1,y1,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,x1,height()-(float)y1); - } -#endif - } else { - draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - } -#endif - } - } break; - case 5 : { // Colored sphere - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1]; - const float - Xc = 0.5f*((float)vertices(n0,0) + (float)vertices(n1,0)), - Yc = 0.5f*((float)vertices(n0,1) + (float)vertices(n1,1)), - Zc = 0.5f*((float)vertices(n0,2) + (float)vertices(n1,2)), - zc = Z + Zc + _focale, - xc = X + Xc*(absfocale?absfocale/zc:1), - yc = Y + Yc*(absfocale?absfocale/zc:1), - radius = 0.5f*std::sqrt(cimg::sqr(vertices(n1,0) - vertices(n0,0)) + - cimg::sqr(vertices(n1,1) - vertices(n0,1)) + - cimg::sqr(vertices(n1,2) - vertices(n0,2)))*(absfocale?absfocale/zc:1); - switch (render_type) { - case 0 : - draw_point((int)xc,(int)yc,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillCircle(xc,height()-yc,0); - } -#endif - break; - case 1 : - draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.setFillColor(LibBoard::Color::None); - board.drawCircle(xc,height()-yc,radius); - } -#endif - break; - default : - draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillCircle(xc,height()-yc,radius); - } -#endif - break; - } - } break; - case 6 : { // Textured line - if (!__color) - throw CImgArgumentException(_cimg_instance - "draw_object3d(): Undefined texture for line primitive [%u].", - cimg_instance,n_primitive); - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1], - tx0 = (unsigned int)primitive[2], - ty0 = (unsigned int)primitive[3], - tx1 = (unsigned int)primitive[4], - ty1 = (unsigned int)primitive[5]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale; - if (render_type) { - if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity); - else draw_line(x0,y0,x1,y1,color,tx0,ty0,tx1,ty1,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - } -#endif - } else { - draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - } -#endif - } - } break; - case 3 : { // Colored triangle - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1], - n2 = (unsigned int)primitive[2]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), - x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale, - z2 = vertices(n2,2) + Z + _focale; - switch (render_type) { - case 0 : - draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity).draw_point(x2,y2,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - } -#endif - break; - case 1 : - if (zbuffer) - draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x0,y0,z0,x2,y2,z2,pcolor,opacity). - draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity); - else - draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x0,y0,x2,y2,pcolor,opacity). - draw_line(x1,y1,x2,y2,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x0,height()-(float)y0,(float)x2,height()-(float)y2); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 2 : - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity); - else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 3 : - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)); - else _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)); -#ifdef cimg_use_board - if (pboard) { - const float lp = cimg::min(lightprops(l),1); - board.setPenColorRGBi((unsigned char)(color[0]*lp), - (unsigned char)(color[1]*lp), - (unsigned char)(color[2]*lp), - (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 4 : - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); - else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi((unsigned char)(color[0]), - (unsigned char)(color[1]), - (unsigned char)(color[2]), - (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprops(n0), - (float)x1,height()-(float)y1,lightprops(n1), - (float)x2,height()-(float)y2,lightprops(n2)); - } -#endif - break; - case 5 : { - const unsigned int - lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), - lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), - lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1); - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); - else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); -#ifdef cimg_use_board - if (pboard) { - const float - l0 = light_texture((int)(light_texture.width()/2*(1+lightprops(n0,0))), (int)(light_texture.height()/2*(1+lightprops(n0,1)))), - l1 = light_texture((int)(light_texture.width()/2*(1+lightprops(n1,0))), (int)(light_texture.height()/2*(1+lightprops(n1,1)))), - l2 = light_texture((int)(light_texture.width()/2*(1+lightprops(n2,0))), (int)(light_texture.height()/2*(1+lightprops(n2,1)))); - board.setPenColorRGBi((unsigned char)(color[0]), - (unsigned char)(color[1]), - (unsigned char)(color[2]), - (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); - } -#endif - } break; - } - } break; - case 4 : { // Colored rectangle - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1], - n2 = (unsigned int)primitive[2], - n3 = (unsigned int)primitive[3]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), - x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), - x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale, - z2 = vertices(n2,2) + Z + _focale, - z3 = vertices(n3,2) + Z + _focale; - - switch (render_type) { - case 0 : - draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity). - draw_point(x2,y2,pcolor,opacity).draw_point(x3,y3,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - board.drawCircle((float)x3,height()-(float)y3,0); - } -#endif - break; - case 1 : - if (zbuffer) - draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity). - draw_line(zbuffer,x2,y2,z2,x3,y3,z3,pcolor,opacity).draw_line(zbuffer,x3,y3,z3,x0,y0,z0,pcolor,opacity); - else - draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x1,y1,x2,y2,pcolor,opacity). - draw_line(x2,y2,x3,y3,pcolor,opacity).draw_line(x3,y3,x0,y0,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.drawLine((float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - board.drawLine((float)x3,height()-(float)y3,(float)x0,height()-(float)y0); - } -#endif - break; - case 2 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity).draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity); - else - draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity).draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0,(float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - } -#endif - break; - case 3 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity,lightprops(l)); - else - _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)). - _draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity,lightprops(l)); -#ifdef cimg_use_board - if (pboard) { - const float lp = cimg::min(lightprops(l),1); - board.setPenColorRGBi((unsigned char)(color[0]*lp), - (unsigned char)(color[1]*lp), - (unsigned char)(color[2]*lp),(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0,(float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - } -#endif - break; - case 4 : { - const float - lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), - lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprop0,lightprop1,lightprop2,opacity). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,lightprop0,lightprop2,lightprop3,opacity); - else - draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprop0,lightprop1,lightprop2,opacity). - draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,lightprop0,lightprop2,lightprop3,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi((unsigned char)(color[0]), - (unsigned char)(color[1]), - (unsigned char)(color[2]), - (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x1,height()-(float)y1,lightprop1, - (float)x2,height()-(float)y2,lightprop2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x2,height()-(float)y2,lightprop2, - (float)x3,height()-(float)y3,lightprop3); - } -#endif - } break; - case 5 : { - const unsigned int - lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), - lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), - lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), - lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); - else - draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). - draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); -#ifdef cimg_use_board - if (pboard) { - const float - l0 = light_texture((int)(light_texture.width()/2*(1+lx0)), (int)(light_texture.height()/2*(1+ly0))), - l1 = light_texture((int)(light_texture.width()/2*(1+lx1)), (int)(light_texture.height()/2*(1+ly1))), - l2 = light_texture((int)(light_texture.width()/2*(1+lx2)), (int)(light_texture.height()/2*(1+ly2))), - l3 = light_texture((int)(light_texture.width()/2*(1+lx3)), (int)(light_texture.height()/2*(1+ly3))); - board.setPenColorRGBi((unsigned char)(color[0]), - (unsigned char)(color[1]), - (unsigned char)(color[2]), - (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x2,height()-(float)y2,l2, - (float)x3,height()-(float)y3,l3); - } -#endif - } break; - } - } break; - case 9 : { // Textured triangle - if (!__color) - throw CImgArgumentException(_cimg_instance - "draw_object3d(): Undefined texture for triangle primitive [%u].", - cimg_instance,n_primitive); - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1], - n2 = (unsigned int)primitive[2], - tx0 = (unsigned int)primitive[3], - ty0 = (unsigned int)primitive[4], - tx1 = (unsigned int)primitive[5], - ty1 = (unsigned int)primitive[6], - tx2 = (unsigned int)primitive[7], - ty2 = (unsigned int)primitive[8]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), - x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale, - z2 = vertices(n2,2) + Z + _focale; - switch (render_type) { - case 0 : - draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). - draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - } -#endif - break; - case 1 : - if (zbuffer) - draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). - draw_line(zbuffer,x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). - draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); - else - draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). - draw_line(x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). - draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x0,height()-(float)y0,(float)x2,height()-(float)y2); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 2 : - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); - else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 3 : - if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); - else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); -#ifdef cimg_use_board - if (pboard) { - const float lp = cimg::min(lightprops(l),1); - board.setPenColorRGBi((unsigned char)(128*lp), - (unsigned char)(128*lp), - (unsigned char)(128*lp), - (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - } -#endif - break; - case 4 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprops(n0), - (float)x1,height()-(float)y1,lightprops(n1), - (float)x2,height()-(float)y2,lightprops(n2)); - } -#endif - break; - case 5 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, - (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), - (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), - (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), - opacity); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, - (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), - (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), - (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), - opacity); -#ifdef cimg_use_board - if (pboard) { - const float - l0 = light_texture((int)(light_texture.width()/2*(1+lightprops(n0,0))), (int)(light_texture.height()/2*(1+lightprops(n0,1)))), - l1 = light_texture((int)(light_texture.width()/2*(1+lightprops(n1,0))), (int)(light_texture.height()/2*(1+lightprops(n1,1)))), - l2 = light_texture((int)(light_texture.width()/2*(1+lightprops(n2,0))), (int)(light_texture.height()/2*(1+lightprops(n2,1)))); - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0,(float)x1,height()-(float)y1,l1,(float)x2,height()-(float)y2,l2); - } -#endif - break; - } - } break; - case 12 : { // Textured quadrangle - if (!__color) - throw CImgArgumentException(_cimg_instance - "draw_object3d(): Undefined texture for quadrangle primitive [%u].", - cimg_instance,n_primitive); - const unsigned int - n0 = (unsigned int)primitive[0], - n1 = (unsigned int)primitive[1], - n2 = (unsigned int)primitive[2], - n3 = (unsigned int)primitive[3], - tx0 = (unsigned int)primitive[4], - ty0 = (unsigned int)primitive[5], - tx1 = (unsigned int)primitive[6], - ty1 = (unsigned int)primitive[7], - tx2 = (unsigned int)primitive[8], - ty2 = (unsigned int)primitive[9], - tx3 = (unsigned int)primitive[10], - ty3 = (unsigned int)primitive[11]; - const int - x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), - x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), - x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), - x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); - const float - z0 = vertices(n0,2) + Z + _focale, - z1 = vertices(n1,2) + Z + _focale, - z2 = vertices(n2,2) + Z + _focale, - z3 = vertices(n3,2) + Z + _focale; - - switch (render_type) { - case 0 : - draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). - draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity). - draw_point(x3,y3,color.get_vector_at(tx3,ty3)._data,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - board.drawCircle((float)x3,height()-(float)y3,0); - } -#endif - break; - case 1 : - if (zbuffer) - draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). - draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). - draw_line(zbuffer,x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). - draw_line(zbuffer,x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); - else - draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). - draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). - draw_line(x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). - draw_line(x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.drawLine((float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - board.drawLine((float)x3,height()-(float)y3,(float)x0,height()-(float)y0); - } -#endif - break; - case 2 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). - draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0,(float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - } -#endif - break; - case 3 : - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). - draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); -#ifdef cimg_use_board - if (pboard) { - const float lp = cimg::min(lightprops(l),1); - board.setPenColorRGBi((unsigned char)(128*lp), - (unsigned char)(128*lp), - (unsigned char)(128*lp), - (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0,(float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0,(float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - } -#endif - break; - case 4 : { - const float - lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), - lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). - draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); -#ifdef cimg_use_board - if (pboard) { - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x1,height()-(float)y1,lightprop1, - (float)x2,height()-(float)y2,lightprop2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x2,height()-(float)y2,lightprop2, - (float)x3,height()-(float)y3,lightprop3); - } -#endif - } break; - case 5 : { - const unsigned int - lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), - lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), - lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), - lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); - if (zbuffer) - draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). - draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); - else - draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). - draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); -#ifdef cimg_use_board - if (pboard) { - const float - l0 = light_texture((int)(light_texture.width()/2*(1+lx0)), (int)(light_texture.height()/2*(1+ly0))), - l1 = light_texture((int)(light_texture.width()/2*(1+lx1)), (int)(light_texture.height()/2*(1+ly1))), - l2 = light_texture((int)(light_texture.width()/2*(1+lx2)), (int)(light_texture.height()/2*(1+ly2))), - l3 = light_texture((int)(light_texture.width()/2*(1+lx3)), (int)(light_texture.height()/2*(1+ly3))); - board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x2,height()-(float)y2,l2, - (float)x3,height()-(float)y3,l3); - } -#endif - } break; - } - } break; - } - } - - if (render_type==5) cimg::mutex(10,0); - return *this; - } - - //@} - //--------------------------- - // - //! \name Data Input - //@{ - //--------------------------- - - //! Launch simple interface to select a shape from an image. - /** - \param disp Display window to use. - \param feature_type Type of feature to select. Can be { 0=point | 1=line | 2=rectangle | 3=ellipse }. - \param XYZ Pointer to 3 values X,Y,Z which tells about the projection point coordinates, for volumetric images. - **/ - CImg& select(CImgDisplay &disp, - const unsigned int feature_type=2, unsigned int *const XYZ=0) { - return get_select(disp,feature_type,XYZ).move_to(*this); - } - - //! Simple interface to select a shape from an image \overloading. - CImg& select(const char *const title, - const unsigned int feature_type=2, unsigned int *const XYZ=0) { - return get_select(title,feature_type,XYZ).move_to(*this); - } - - //! Simple interface to select a shape from an image \newinstance. - CImg get_select(CImgDisplay &disp, - const unsigned int feature_type=2, unsigned int *const XYZ=0) const { - return _get_select(disp,0,feature_type,XYZ,0,0,0,true,false); - } - - //! Simple interface to select a shape from an image \newinstance. - CImg get_select(const char *const title, - const unsigned int feature_type=2, unsigned int *const XYZ=0) const { - CImgDisplay disp; - return _get_select(disp,title,feature_type,XYZ,0,0,0,true,false); - } - - CImg _get_select(CImgDisplay &disp, const char *const title, - const unsigned int feature_type, unsigned int *const XYZ, - const int origX, const int origY, const int origZ, - const bool reset_view3d, - const bool force_display_z_coord) const { - if (is_empty()) return CImg(1,feature_type==0?3:6,1,1,-1); - if (!disp) { - disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,1); - if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); - } else if (title) disp.set_title("%s",title); - - const unsigned int old_normalization = disp.normalization(); - bool old_is_resized = disp.is_resized(); - disp._normalization = 0; - disp.show().set_key(0).set_wheel().show_mouse(); - - unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; - - int area = 0, starting_area = 0, clicked_area = 0, phase = 0, - X0 = (int)((XYZ?XYZ[0]:(_width-1)/2)%_width), - Y0 = (int)((XYZ?XYZ[1]:(_height-1)/2)%_height), - Z0 = (int)((XYZ?XYZ[2]:(_depth-1)/2)%_depth), - X1 =-1, Y1 = -1, Z1 = -1, - X3d = -1, Y3d = -1, - oX3d = X3d, oY3d = -1, - omx = -1, omy = -1; - float X = -1, Y = -1, Z = -1; - unsigned int old_button = 0, key = 0; - - bool shape_selected = false, text_down = false, visible_cursor = true; - static CImg pose3d; - static bool is_view3d = false, is_axes = true; - if (reset_view3d) { pose3d.assign(); is_view3d = false; } - CImg points3d, opacities3d, sel_opacities3d; - CImgList primitives3d, sel_primitives3d; - CImgList colors3d, sel_colors3d; - CImg visu, visu0, view3d; - char text[1024] = { 0 }; - - while (!key && !disp.is_closed() && !shape_selected) { - - // Handle mouse motion and selection - int - mx = disp.mouse_x(), - my = disp.mouse_y(); - - const float - mX = mx<0?-1.0f:(float)mx*(width()+(depth()>1?depth():0))/disp.width(), - mY = my<0?-1.0f:(float)my*(height()+(depth()>1?depth():0))/disp.height(); - - area = 0; - if (mX>=0 && mY>=0 && mX=0 && mX=height()) { area = 2; X = mX; Z = mY - _height; Y = (float)(phase?Y1:Y0); } - if (mY>=0 && mX>=width() && mY=width() && mY>=height()) area = 4; - if (disp.button()) { if (!clicked_area) clicked_area = area; } else clicked_area = 0; - - switch (key = disp.key()) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : -#endif - case 0 : case cimg::keyCTRLLEFT : key = 0; break; - case cimg::keyPAGEUP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(1); key = 0; } break; - case cimg::keyPAGEDOWN : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(-1); key = 0; } break; - case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - is_axes = !is_axes; disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), - CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). - _is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(_width,_height,_depth),false)._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - is_view3d = !is_view3d; disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - if (visu0) { - (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); - visu0.save(filename); - (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); - } - disp.set_key(key,false); key = 0; - } break; - case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { -#ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); -#else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); -#endif - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); - save(filename); - (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; - } - - switch (area) { - - case 0 : // When mouse is out of image range. - mx = my = -1; X = Y = Z = -1; - break; - - case 1 : case 2 : case 3 : // When mouse is over the XY,XZ or YZ projections. - if (disp.button()&1 && phase<2 && clicked_area==area) { // When selection has been started (1st step). - if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); - X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; - } - if (!(disp.button()&1) && phase>=2 && clicked_area!=area) { // When selection is at 2nd step (for volumes). - switch (starting_area) { - case 1 : if (Z1!=(int)Z) visu0.assign(); Z1 = (int)Z; break; - case 2 : if (Y1!=(int)Y) visu0.assign(); Y1 = (int)Y; break; - case 3 : if (X1!=(int)X) visu0.assign(); X1 = (int)X; break; - } - } - if (disp.button()&2 && clicked_area==area) { // When moving through the image/volume. - if (phase) { - if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); - X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; - } else { - if (_depth>1 && (X0!=(int)X || Y0!=(int)Y || Z0!=(int)Z)) visu0.assign(); - X0 = (int)X; Y0 = (int)Y; Z0 = (int)Z; - } - } - if (disp.button()&4) { // Reset positions. - X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = area = clicked_area = starting_area = 0; visu0.assign(); - } - if (disp.wheel()) { // When moving through the slices of the volume (with mouse wheel). - if (_depth>1 && !disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT() && !disp.is_keySHIFTLEFT() && !disp.is_keySHIFTRIGHT() && - !disp.is_keyALT() && !disp.is_keyALTGR()) { - switch (area) { - case 1 : - if (phase) Z = (float)(Z1+=disp.wheel()); else Z = (float)(Z0+=disp.wheel()); - visu0.assign(); break; - case 2 : - if (phase) Y = (float)(Y1+=disp.wheel()); else Y = (float)(Y0+=disp.wheel()); - visu0.assign(); break; - case 3 : - if (phase) X = (float)(X1+=disp.wheel()); else X = (float)(X0+=disp.wheel()); - visu0.assign(); break; - } - disp.set_wheel(); - } else key = ~0U; - } - if ((disp.button()&1)!=old_button) { // When left button has just been pressed or released. - switch (phase) { - case 0 : - if (area==clicked_area) { - X0 = X1 = (int)X; Y0 = Y1 = (int)Y; Z0 = Z1 = (int)Z; starting_area = area; ++phase; - } break; - case 1 : - if (area==starting_area) { - X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; ++phase; - } else if (!(disp.button()&1)) { X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = 0; visu0.assign(); } - break; - case 2 : ++phase; break; - } - old_button = disp.button()&1; - } - break; - - case 4 : // When mouse is over the 3d view. - if (is_view3d && points3d) { - X3d = mx - _width*disp.width()/(_width+(_depth>1?_depth:0)); - Y3d = my - _height*disp.height()/(_height+(_depth>1?_depth:0)); - if (oX3d<0) { oX3d = X3d; oY3d = Y3d; } - if ((disp.button()&3)==3) { pose3d.assign(); view3d.assign(); oX3d = oY3d = X3d = Y3d = -1; } // Left + right buttons: reset. - else if (disp.button()&1 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { // Left button: rotate. - const float - R = 0.45f*cimg::min(view3d._width,view3d._height), - R2 = R*R, - u0 = (float)(oX3d-view3d.width()/2), - v0 = (float)(oY3d-view3d.height()/2), - u1 = (float)(X3d-view3d.width()/2), - v1 = (float)(Y3d-view3d.height()/2), - n0 = (float)std::sqrt(u0*u0+v0*v0), - n1 = (float)std::sqrt(u1*u1+v1*v1), - nu0 = n0>R?(u0*R/n0):u0, - nv0 = n0>R?(v0*R/n0):v0, - nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), - nu1 = n1>R?(u1*R/n1):u1, - nv1 = n1>R?(v1*R/n1):v1, - nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), - u = nv0*nw1 - nw0*nv1, - v = nw0*nu1 - nu0*nw1, - w = nv0*nu1 - nu0*nv1, - n = (float)std::sqrt(u*u+v*v+w*w), - alpha = (float)std::asin(n/R2); - pose3d.draw_image(CImg::rotation_matrix(u,v,w,alpha)*pose3d.get_crop(0,0,2,2)); - view3d.assign(); - } else if (disp.button()&2 && pose3d && oY3d!=Y3d) { // Right button: zoom. - pose3d(3,2)-=(oY3d - Y3d)*1.5f; view3d.assign(); - } - if (disp.wheel()) { // Wheel: zoom - pose3d(3,2)-=disp.wheel()*15; view3d.assign(); disp.set_wheel(); - } - if (disp.button()&4 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { // Middle button: shift. - pose3d(3,0)-=oX3d - X3d; pose3d(3,1)-=oY3d - Y3d; view3d.assign(); - } - oX3d = X3d; oY3d = Y3d; - } - mx = my = -1; X = Y = Z = -1; - break; - } - - if (phase) { - if (!feature_type) shape_selected = phase?true:false; - else { - if (_depth>1) shape_selected = (phase==3)?true:false; - else shape_selected = (phase==2)?true:false; - } - } - - if (X0<0) X0 = 0; if (X0>=width()) X0 = width() - 1; - if (Y0<0) Y0 = 0; if (Y0>=height()) Y0 = height() - 1; - if (Z0<0) Z0 = 0; if (Z0>=depth()) Z0 = depth() - 1; - if (X1<1) X1 = 0; if (X1>=width()) X1 = width() - 1; - if (Y1<0) Y1 = 0; if (Y1>=height()) Y1 = height() - 1; - if (Z1<0) Z1 = 0; if (Z1>=depth()) Z1 = depth() - 1; - - // Draw visualization image on the display - if (mx!=omx || my!=omy || !visu0 || (_depth>1 && !view3d)) { - - if (!visu0) { // Create image of projected planes. - __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0).resize(disp); - view3d.assign(); - points3d.assign(); - } - - if (is_view3d && _depth>1 && !view3d) { // Create 3d view for volumetric images. - const unsigned int - _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width+_depth),1,1), - _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height+_depth),1,1), - x3d = _x3d>=visu0._width?visu0._width-1:_x3d, - y3d = _y3d>=visu0._height?visu0._height-1:_y3d; - CImg(1,2,1,1,64,128).resize(visu0._width-x3d,visu0._height-y3d,1,visu0._spectrum,3).move_to(view3d); - if (!points3d) { - get_projections3d(primitives3d,colors3d,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0,true).move_to(points3d); - points3d.append(CImg(8,3,1,1, - 0,_width-1,_width-1,0,0,_width-1,_width-1,0, - 0,0,_height-1,_height-1,0,0,_height-1,_height-1, - 0,0,0,0,_depth-1,_depth-1,_depth-1,_depth-1),'x'); - CImg::vector(12,13).move_to(primitives3d); CImg::vector(13,14).move_to(primitives3d); - CImg::vector(14,15).move_to(primitives3d); CImg::vector(15,12).move_to(primitives3d); - CImg::vector(16,17).move_to(primitives3d); CImg::vector(17,18).move_to(primitives3d); - CImg::vector(18,19).move_to(primitives3d); CImg::vector(19,16).move_to(primitives3d); - CImg::vector(12,16).move_to(primitives3d); CImg::vector(13,17).move_to(primitives3d); - CImg::vector(14,18).move_to(primitives3d); CImg::vector(15,19).move_to(primitives3d); - colors3d.insert(12,CImg::vector(255,255,255)); - opacities3d.assign(primitives3d.width(),1,1,1,0.5f); - if (!phase) { - opacities3d[0] = opacities3d[1] = opacities3d[2] = 0.8f; - sel_primitives3d.assign(); - sel_colors3d.assign(); - sel_opacities3d.assign(); - } else { - if (feature_type==2) { - points3d.append(CImg(8,3,1,1, - X0,X1,X1,X0,X0,X1,X1,X0, - Y0,Y0,Y1,Y1,Y0,Y0,Y1,Y1, - Z0,Z0,Z0,Z0,Z1,Z1,Z1,Z1),'x'); - sel_primitives3d.assign(); - CImg::vector(20,21).move_to(sel_primitives3d); CImg::vector(21,22).move_to(sel_primitives3d); - CImg::vector(22,23).move_to(sel_primitives3d); CImg::vector(23,20).move_to(sel_primitives3d); - CImg::vector(24,25).move_to(sel_primitives3d); CImg::vector(25,26).move_to(sel_primitives3d); - CImg::vector(26,27).move_to(sel_primitives3d); CImg::vector(27,24).move_to(sel_primitives3d); - CImg::vector(20,24).move_to(sel_primitives3d); CImg::vector(21,25).move_to(sel_primitives3d); - CImg::vector(22,26).move_to(sel_primitives3d); CImg::vector(23,27).move_to(sel_primitives3d); - } else { - points3d.append(CImg(2,3,1,1, - X0,X1, - Y0,Y1, - Z0,Z1),'x'); - sel_primitives3d.assign(CImg::vector(20,21)); - } - sel_colors3d.assign(sel_primitives3d._width,CImg::vector(255,255,255)); - sel_opacities3d.assign(sel_primitives3d._width,1,1,1,0.8f); - } - points3d.shift_object3d(-0.5f*(_width-1),-0.5f*(_height-1),-0.5f*(_depth-1)).resize_object3d(); - points3d*=0.75f*cimg::min(view3d._width,view3d._height); - } - - if (!pose3d) CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose3d); - CImg zbuffer3d(view3d._width,view3d._height,1,1,0); - const CImg rotated_points3d = pose3d.get_crop(0,0,2,2)*points3d; - if (sel_primitives3d) - view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, - pose3d(3,1) + 0.5f*view3d._height, - pose3d(3,2), - rotated_points3d,sel_primitives3d,sel_colors3d,sel_opacities3d, - 2,true,500,0,0,0,0,0,zbuffer3d); - view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, - pose3d(3,1) + 0.5f*view3d._height, - pose3d(3,2), - rotated_points3d,primitives3d,colors3d,opacities3d, - 2,true,500,0,0,0,0,0,zbuffer3d); - visu0.draw_image(x3d,y3d,view3d); - } - visu = visu0; - - if (X<0 || Y<0 || Z<0) { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} - else { - if (is_axes) { if (visible_cursor) { disp.hide_mouse(); visible_cursor = false; }} - else { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} - const int d = (_depth>1)?_depth:0; - int - w = disp.width(), W = width() + d, - h = disp.height(), H = height() + d, - _xp = (int)X*w/W, xp = _xp + (_xp*W/w!=(int)X?1:0), - _yp = (int)Y*h/H, yp = _yp + (_yp*H/h!=(int)Y?1:0), - _xn = (int)(X+1)*w/W-1, xn = _xn + ((_xn+1)*W/w!=(int)X+1?1:0), - _yn = (int)(Y+1)*h/H-1, yn = _yn + ((_yn+1)*H/h!=(int)Y+1?1:0), - _zxp = ((int)Z+width())*w/W, zxp = _zxp + (_zxp*W/w!=(int)Z+width()?1:0), - _zyp = ((int)Z+height())*h/H, zyp = _zyp + (_zyp*H/h!=(int)Z+height()?1:0), - _zxn = ((int)Z+width()+1)*w/W-1, zxn = _zxn + ((_zxn+1)*W/w!=(int)Z+width()+1?1:0), - _zyn = ((int)Z+height()+1)*h/H-1, zyn = _zyn + ((_zyn+1)*H/h!=(int)Z+height()+1?1:0), - _xM = width()*w/W-1, xM = _xM + ((_xM+1)*W/w!=width()?1:0), - _yM = height()*h/H-1, yM = _yM + ((_yM+1)*H/h!=height()?1:0), - xc = (xp + xn)/2, - yc = (yp + yn)/2, - zxc = (zxp + zxn)/2, - zyc = (zyp + zyn)/2, - xf = (int)(X*w/W), - yf = (int)(Y*h/H), - zxf = (int)((Z+width())*w/W), - zyf = (int)((Z+height())*h/H); - - if (is_axes) { // Draw axes. - visu.draw_line(0,yf,visu.width()-1,yf,foreground_color,0.7f,0xFF00FF00). - draw_line(0,yf,visu.width()-1,yf,background_color,0.7f,0x00FF00FF). - draw_line(xf,0,xf,visu.height()-1,foreground_color,0.7f,0xFF00FF00). - draw_line(xf,0,xf,visu.height()-1,background_color,0.7f,0x00FF00FF); - if (_depth>1) - visu.draw_line(zxf,0,zxf,yM,foreground_color,0.7f,0xFF00FF00). - draw_line(zxf,0,zxf,yM,background_color,0.7f,0x00FF00FF). - draw_line(0,zyf,xM,zyf,foreground_color,0.7f,0xFF00FF00). - draw_line(0,zyf,xM,zyf,background_color,0.7f,0x00FF00FF); - } - - // Draw box cursor. - if (xn-xp>=4 && yn-yp>=4) visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). - draw_rectangle(xp,yp,xn,yn,foreground_color,1,0xAAAAAAAA). - draw_rectangle(xp,yp,xn,yn,background_color,1,0x55555555); - if (_depth>1) { - if (yn-yp>=4 && zxn-zxp>=4) visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). - draw_rectangle(zxp,yp,zxn,yn,foreground_color,1,0xAAAAAAAA). - draw_rectangle(zxp,yp,zxn,yn,background_color,1,0x55555555); - if (xn-xp>=4 && zyn-zyp>=4) visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). - draw_rectangle(xp,zyp,xn,zyn,foreground_color,1,0xAAAAAAAA). - draw_rectangle(xp,zyp,xn,zyn,background_color,1,0x55555555); - } - - // Draw selection. - if (phase) { - const int - _xp0 = X0*w/W, xp0 = _xp0 + (_xp0*W/w!=X0?1:0), - _yp0 = Y0*h/H, yp0 = _yp0 + (_yp0*H/h!=Y0?1:0), - _xn0 = (X0+1)*w/W-1, xn0 = _xn0 + ((_xn0+1)*W/w!=X0+1?1:0), - _yn0 = (Y0+1)*h/H-1, yn0 = _yn0 + ((_yn0+1)*H/h!=Y0+1?1:0), - _zxp0 = (Z0+width())*w/W, zxp0 = _zxp0 + (_zxp0*W/w!=Z0+width()?1:0), - _zyp0 = (Z0+height())*h/H, zyp0 = _zyp0 + (_zyp0*H/h!=Z0+height()?1:0), - _zxn0 = (Z0+width()+1)*w/W-1, zxn0 = _zxn0 + ((_zxn0+1)*W/w!=Z0+width()+1?1:0), - _zyn0 = (Z0+height()+1)*h/H-1, zyn0 = _zyn0 + ((_zyn0+1)*H/h!=Z0+height()+1?1:0), - xc0 = (xp0 + xn0)/2, - yc0 = (yp0 + yn0)/2, - zxc0 = (zxp0 + zxn0)/2, - zyc0 = (zyp0 + zyn0)/2; - - switch (feature_type) { - case 1 : { - visu.draw_arrow(xc0,yc0,xc,yc,background_color,0.9f,30,5,0x55555555). - draw_arrow(xc0,yc0,xc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA); - if (d) { - visu.draw_arrow(zxc0,yc0,zxc,yc,background_color,0.9f,30,5,0x55555555). - draw_arrow(zxc0,yc0,zxc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA). - draw_arrow(xc0,zyc0,xc,zyc,background_color,0.9f,30,5,0x55555555). - draw_arrow(xc0,zyc0,xc,zyc,foreground_color,0.9f,30,5,0xAAAAAAAA); - } - } break; - case 2 : { - visu.draw_rectangle(X0=0 && my<13) text_down = true; else if (my>=visu.height()-13) text_down = false; - if (!feature_type || !phase) { - if (X>=0 && Y>=0 && Z>=0 && X1 || force_display_z_coord) cimg_snprintf(text,sizeof(text)," Point (%d,%d,%d) = [ ",origX+(int)X,origY+(int)Y,origZ+(int)Z); - else cimg_snprintf(text,sizeof(text)," Point (%d,%d) = [ ",origX+(int)X,origY+(int)Y); - char *ctext = text + std::strlen(text), *const ltext = text + 512; - for (unsigned int c = 0; c<_spectrum && ctext::format(),cimg::type::format((*this)((int)X,(int)Y,(int)Z,c))); - ctext = text + std::strlen(text); - *(ctext++) = ' '; *ctext = 0; - } - std::strcpy(text + std::strlen(text),"] "); - } - } else switch (feature_type) { - case 1 : { - const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), norm = std::sqrt(dX*dX+dY*dY+dZ*dZ); - if (_depth>1 || force_display_z_coord) cimg_snprintf(text,sizeof(text)," Vect (%d,%d,%d)-(%d,%d,%d), Norm = %g ", - origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1,norm); - else cimg_snprintf(text,sizeof(text)," Vect (%d,%d)-(%d,%d), Norm = %g ", - origX+X0,origY+Y0,origX+X1,origY+Y1,norm); - } break; - case 2 : - if (_depth>1 || force_display_z_coord) cimg_snprintf(text,sizeof(text)," Box (%d,%d,%d)-(%d,%d,%d), Size = (%d,%d,%d) ", - origX+(X01 || force_display_z_coord) cimg_snprintf(text,sizeof(text)," Ellipse (%d,%d,%d)-(%d,%d,%d), Radii = (%d,%d,%d) ", - origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1, - 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); - else cimg_snprintf(text,sizeof(text)," Ellipse (%d,%d)-(%d,%d), Radii = (%d,%d) ", - origX+X0,origY+Y0,origX+X1,origY+Y1,1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); - } - if (phase || (mx>=0 && my>=0)) visu.draw_text(0,text_down?visu.height()-13:0,text,foreground_color,background_color,0.7f,13); - } - - disp.display(visu).wait(); - } else if (!shape_selected) disp.wait(); - if (disp.is_resized()) { disp.resize(false)._is_resized = false; old_is_resized = true; visu0.assign(); } - omx = mx; omy = my; - } - - // Return result. - CImg res(1,feature_type==0?3:6,1,1,-1); - if (XYZ) { XYZ[0] = (unsigned int)X0; XYZ[1] = (unsigned int)Y0; XYZ[2] = (unsigned int)Z0; } - if (shape_selected) { - if (feature_type==2) { - if (X0>X1) cimg::swap(X0,X1); - if (Y0>Y1) cimg::swap(Y0,Y1); - if (Z0>Z1) cimg::swap(Z0,Z1); - } - if (X1<0 || Y1<0 || Z1<0) X0 = Y0 = Z0 = X1 = Y1 = Z1 = -1; - switch (feature_type) { - case 1 : case 2 : res[0] = X0; res[1] = Y0; res[2] = Z0; res[3] = X1; res[4] = Y1; res[5] = Z1; break; - case 3 : res[3] = cimg::abs(X1-X0); res[4] = cimg::abs(Y1-Y0); res[5] = cimg::abs(Z1-Z0); // keep no break here! - default : res[0] = X0; res[1] = Y0; res[2] = Z0; - } - } - disp.set_button(); - if (!visible_cursor) disp.show_mouse(); - disp._normalization = old_normalization; - disp._is_resized = old_is_resized; - if (key!=~0U) disp.set_key(key); - return res; - } - - // Return a visualizable uchar8 image for display routines. - CImg __get_select(const CImgDisplay& disp, const int normalization, const int x, const int y, const int z) const { - if (is_empty()) return CImg(1,1,1,1,0); - const CImg crop = get_shared_channels(0,cimg::min(2,spectrum()-1)); - CImg img2d; - if (_depth>1) crop.get_projections2d(x,y,z).move_to(img2d); - else CImg(crop,false).move_to(img2d); - - if (cimg::type::is_float()) { // Check for inf and nan values. - bool is_inf = false, is_nan = false; - cimg_for(img2d,ptr,Tuchar) - if (cimg::type::is_inf(*ptr)) { is_inf = true; break; } - else if (cimg::type::is_nan(*ptr)) { is_nan = true; break; } - if (is_inf || is_nan) { - T m0 = cimg::type::max(), M0 = cimg::type::min(); - if (!normalization) { m0 = 0; M0 = 255; } - else if (normalization==2) { m0 = (T)disp._min; M0 = (T)disp._max; } - else cimg_for(img2d,ptr,Tuchar) if (!cimg::type::is_inf(*ptr) && !cimg::type::is_nan(*ptr)) { if (*ptrM0) M0 = *ptr; } - const T - val_minf = (normalization==1 || normalization==3)?m0-(M0-m0)*20-1:m0, - val_pinf = (normalization==1 || normalization==3)?M0+(M0-m0)*20+1:M0; - if (is_nan) cimg_for(img2d,ptr,Tuchar) if (cimg::type::is_nan(*ptr)) *ptr = val_minf; // Replace nan values. - if (is_inf) cimg_for(img2d,ptr,Tuchar) if (cimg::type::is_inf(*ptr)) *ptr = (float)*ptr<0?val_minf:val_pinf; // Replace +-inf values. - } - } - - switch (normalization) { - case 1 : img2d.normalize(0,255); break; - case 2 : { - const float m = disp._min, M = disp._max; - (img2d-=m)*=255.0f/(M-m>0?M-m:1); - } break; - case 3 : - if (cimg::type::is_float()) img2d.normalize(0,255); - else { - const float m = (float)cimg::type::min(), M = (float)cimg::type::max(); - (img2d-=m)*=255.0f/(M-m>0?M-m:1); - } break; - } - - if (img2d.spectrum()==2) img2d.channels(0,2); - return img2d; - } - - //! Select sub-graph in a graph. - CImg get_select_graph(CImgDisplay &disp, - const unsigned int plot_type=1, const unsigned int vertex_type=1, - const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "select_graph(): Empty instance.", - cimg_instance); - if (!disp) disp.assign(cimg_fitscreen(640,480,1),0,0).set_title("CImg<%s>",pixel_type()); - const unsigned long siz = (unsigned long)_width*_height*_depth; - const unsigned int old_normalization = disp.normalization(); - disp.show().set_button().set_wheel()._normalization = 0; - - double nymin = ymin, nymax = ymax, nxmin = xmin, nxmax = xmax; - if (nymin==nymax) { nymin = (Tfloat)min_max(nymax); const double dy = nymax - nymin; nymin-=dy/20; nymax+=dy/20; } - if (nymin==nymax) { --nymin; ++nymax; } - if (nxmin==nxmax && nxmin==0) { nxmin = 0; nxmax = siz - 1.0; } - - const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; - const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; - static unsigned int odimv = 0; - static CImg colormap; - if (odimv!=_spectrum) { - odimv = _spectrum; - colormap = CImg(3,_spectrum,1,1,120).noise(70,1); - if (_spectrum==1) { colormap[0] = colormap[1] = 120; colormap[2] = 200; } - else { - colormap(0,0) = 220; colormap(1,0) = 10; colormap(2,0) = 10; - if (_spectrum>1) { colormap(0,1) = 10; colormap(1,1) = 220; colormap(2,1) = 10; } - if (_spectrum>2) { colormap(0,2) = 10; colormap(1,2) = 10; colormap(2,2) = 220; } - } - } - - CImg visu0, visu, graph, text, axes; - int x0 = -1, x1 = -1, y0 = -1, y1 = -1, omouse_x = -2, omouse_y = -2; - const unsigned int one = plot_type==3?0:1; - unsigned int okey = 0, obutton = 0; - char message[1024] = { 0 }; - CImg_3x3(I,unsigned char); - - for (bool selected = false; !selected && !disp.is_closed() && !okey && !disp.wheel(); ) { - const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); - const unsigned int key = disp.key(), button = disp.button(); - - // Generate graph representation. - if (!visu0) { - visu0.assign(disp.width(),disp.height(),1,3,220); - const int gdimx = disp.width() - 32, gdimy = disp.height() - 32; - if (gdimx>0 && gdimy>0) { - graph.assign(gdimx,gdimy,1,3,255); - if (siz<32) { if (siz>1) graph.draw_grid(gdimx/(float)(siz - one),gdimy/(float)(siz - one),0,0,false,true,black,0.2f,0x33333333,0x33333333); } - else graph.draw_grid(-10,-10,0,0,false,true,black,0.2f,0x33333333,0x33333333); - cimg_forC(*this,c) graph.draw_graph(get_shared_channel(c),&colormap(0,c),(plot_type!=3 || _spectrum==1)?1:0.6f, - plot_type,vertex_type,nymax,nymin); - - axes.assign(gdimx,gdimy,1,1,0); - const float - dx = (float)cimg::abs(nxmax-nxmin), dy = (float)cimg::abs(nymax-nymin), - px = (float)std::pow(10.0,(int)std::log10(dx?dx:1)-2.0), - py = (float)std::pow(10.0,(int)std::log10(dy?dy:1)-2.0); - const CImg - seqx = dx<=0?CImg::vector(nxmin):CImg::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin+(nxmax-nxmin)*(siz+1)/siz).round(px), - seqy = CImg::sequence(1 + gdimy/60,nymax,nymin).round(py); - - const bool allow_zero = (nxmin*nxmax>0) || (nymin*nymax>0); - axes.draw_axes(seqx,seqy,white,1,~0U,~0U,13,allow_zero); - if (nymin>0) axes.draw_axis(seqx,gdimy-1,gray,1,~0U,13,allow_zero); - if (nymax<0) axes.draw_axis(seqx,0,gray,1,~0U,13,allow_zero); - if (nxmin>0) axes.draw_axis(0,seqy,gray,1,~0U,13,allow_zero); - if (nxmax<0) axes.draw_axis(gdimx-1,seqy,gray,1,~0U,13,allow_zero); - - cimg_for3x3(axes,x,y,0,0,I,unsigned char) - if (Icc) { - if (Icc==255) cimg_forC(graph,c) graph(x,y,c) = 0; - else cimg_forC(graph,c) graph(x,y,c) = (unsigned char)(2*graph(x,y,c)/3); - } - else if (Ipc || Inc || Icp || Icn || Ipp || Inn || Ipn || Inp) cimg_forC(graph,c) graph(x,y,c) = (graph(x,y,c)+511)/3; - - visu0.draw_image(16,16,graph); - visu0.draw_line(15,15,16+gdimx,15,gray2).draw_line(16+gdimx,15,16+gdimx,16+gdimy,gray2). - draw_line(16+gdimx,16+gdimy,15,16+gdimy,white).draw_line(15,16+gdimy,15,15,white); - } else graph.assign(); - text.assign().draw_text(0,0,labelx?labelx:"X-axis",white,ngray,1,13).resize(-100,-100,1,3); - visu0.draw_image((visu0.width()-text.width())/2,visu0.height()-14,~text); - text.assign().draw_text(0,0,labely?labely:"Y-axis",white,ngray,1,13).rotate(-90).resize(-100,-100,1,3); - visu0.draw_image(1,(visu0.height()-text.height())/2,~text); - visu.assign(); - } - - // Generate and display current view. - if (!visu) { - visu.assign(visu0); - if (graph && x0>=0 && x1>=0) { - const int - nx0 = x0<=x1?x0:x1, - nx1 = x0<=x1?x1:x0, - ny0 = y0<=y1?y0:y1, - ny1 = y0<=y1?y1:y0, - sx0 = 16 + nx0*(visu.width()-32)/cimg::max(1U,siz-one), - sx1 = 15 + (nx1+1)*(visu.width()-32)/cimg::max(1U,siz-one), - sy0 = 16 + ny0, - sy1 = 16 + ny1; - if (y0>=0 && y1>=0) - visu.draw_rectangle(sx0,sy0,sx1,sy1,gray,0.5f).draw_rectangle(sx0,sy0,sx1,sy1,black,0.5f,0xCCCCCCCCU); - else visu.draw_rectangle(sx0,0,sx1,visu.height()-17,gray,0.5f). - draw_line(sx0,16,sx0,visu.height()-17,black,0.5f,0xCCCCCCCCU). - draw_line(sx1,16,sx1,visu.height()-17,black,0.5f,0xCCCCCCCCU); - } - if (mouse_x>=16 && mouse_y>=16 && mouse_x=7) - cimg_snprintf(message,sizeof(message),"Value[%u:%g] = ( %g %g %g ... %g %g %g )",x,cx, - (double)(*this)(x,0,0,0),(double)(*this)(x,0,0,1),(double)(*this)(x,0,0,2), - (double)(*this)(x,0,0,_spectrum-4),(double)(*this)(x,0,0,_spectrum-3),(double)(*this)(x,0,0,_spectrum-1)); - else { - cimg_snprintf(message,sizeof(message),"Value[%u:%g] = ( ",x,cx); - cimg_forC(*this,c) std::sprintf(message + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); - std::sprintf(message + std::strlen(message),")"); - } - if (x0>=0 && x1>=0) { - const unsigned int - nx0 = x0<=x1?x0:x1, - nx1 = x0<=x1?x1:x0, - ny0 = y0<=y1?y0:y1, - ny1 = y0<=y1?y1:y0; - const double - cx0 = nxmin + nx0*(nxmax-nxmin)/cimg::max(1U,siz-1), - cx1 = nxmin + (nx1+one)*(nxmax-nxmin)/cimg::max(1U,siz-1), - cy0 = nymax - ny0*(nymax-nymin)/(visu._height-32), - cy1 = nymax - ny1*(nymax-nymin)/(visu._height-32); - if (y0>=0 && y1>=0) - std::sprintf(message + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )",x0,cx0,cy0,x1+one,cx1,cy1); - else - std::sprintf(message + std::strlen(message)," - Range [ %u:%g - %u:%g ]",x0,cx0,x1+one,cx1); - } - text.assign().draw_text(0,0,message,white,ngray,1,13).resize(-100,-100,1,3); - visu.draw_image((visu.width()-text.width())/2,1,~text); - } - visu.display(disp); - } - - // Test keys. - switch (okey = key) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : -#endif - case cimg::keyCTRLLEFT : case cimg::keySHIFTLEFT : okey = 0; break; - case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), - CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). - _is_resized = true; - disp.set_key(key,false); okey = 0; - } break; - case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; - disp.set_key(key,false); okey = 0; - } break; - case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(640,480,1),false)._is_resized = true; - disp.set_key(key,false); okey = 0; - } break; - case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; - disp.set_key(key,false); okey = 0; - } break; - case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - if (visu || visu0) { - CImg &screen = visu?visu:visu0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+screen).draw_text(0,0," Saving snapshot... ",black,gray,1,13).display(disp); - screen.save(filename); - (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename).display(disp); - } - disp.set_key(key,false); okey = 0; - } break; - case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - if (visu || visu0) { - CImg &screen = visu?visu:visu0; - char filename[32] = { 0 }; - std::FILE *file; - do { -#ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); -#else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); -#endif - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+screen).draw_text(0,0," Saving instance... ",black,gray,1,13).display(disp); - save(filename); - (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename).display(disp); - } - disp.set_key(key,false); okey = 0; - } break; - } - - // Handle mouse motion and mouse buttons - if (obutton!=button || omouse_x!=mouse_x || omouse_y!=mouse_y) { - visu.assign(); - if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { - const int - mx = (mouse_x -16)*(int)(siz-one)/(disp.width()-32), - cx = mx<0?0:(mx>=(int)(siz-one)?(int)(siz-1-one):mx), - my = mouse_y - 16, - cy = my<=0?0:(my>=(disp.height()-32)?(disp.height()-32):my); - if (button&1) { - if (!obutton) { x0 = cx; y0 = -1; } else { x1 = cx; y1 = -1; } - } - else if (button&2) { - if (!obutton) { x0 = cx; y0 = cy; } else { x1 = cx; y1 = cy; } - } - else if (obutton) { x1 = x1>=0?cx:-1; y1 = y1>=0?cy:-1; selected = true; } - } else if (!button && obutton) selected = true; - obutton = button; omouse_x = mouse_x; omouse_y = mouse_y; - } - if (disp.is_resized()) { disp.resize(false); visu0.assign(); } - if (visu && visu0) disp.wait(); - } - - disp._normalization = old_normalization; - if (x1>=0 && x1(4,1,1,1,x0,y0,x1>=0?x1+(int)one:-1,y1); - } - - //! Load image from a file. - /** - \param filename Filename, as a C-string. - \note The extension of \c filename defines the file format. If no filename - extension is provided, CImg::get_load() will try to load the file as a .cimg or .cimgz file. - **/ - CImg& load(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load(): Specified filename is (null).", - cimg_instance); - - if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { - char filename_local[1024] = { 0 }; - load(cimg::load_network_external(filename,filename_local)); - std::remove(filename_local); - return *this; - } - - const char *const ext = cimg::split_filename(filename); - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { -#ifdef cimg_load_plugin - cimg_load_plugin(filename); -#endif -#ifdef cimg_load_plugin1 - cimg_load_plugin1(filename); -#endif -#ifdef cimg_load_plugin2 - cimg_load_plugin2(filename); -#endif -#ifdef cimg_load_plugin3 - cimg_load_plugin3(filename); -#endif -#ifdef cimg_load_plugin4 - cimg_load_plugin4(filename); -#endif -#ifdef cimg_load_plugin5 - cimg_load_plugin5(filename); -#endif -#ifdef cimg_load_plugin6 - cimg_load_plugin6(filename); -#endif -#ifdef cimg_load_plugin7 - cimg_load_plugin7(filename); -#endif -#ifdef cimg_load_plugin8 - cimg_load_plugin8(filename); -#endif - // Ascii formats - if (!cimg::strcasecmp(ext,"asc")) load_ascii(filename); - else if (!cimg::strcasecmp(ext,"dlm") || - !cimg::strcasecmp(ext,"txt")) load_dlm(filename); - - // 2d binary formats - else if (!cimg::strcasecmp(ext,"bmp")) load_bmp(filename); - else if (!cimg::strcasecmp(ext,"jpg") || - !cimg::strcasecmp(ext,"jpeg") || - !cimg::strcasecmp(ext,"jpe") || - !cimg::strcasecmp(ext,"jfif") || - !cimg::strcasecmp(ext,"jif")) load_jpeg(filename); - else if (!cimg::strcasecmp(ext,"png")) load_png(filename); - else if (!cimg::strcasecmp(ext,"ppm") || - !cimg::strcasecmp(ext,"pgm") || - !cimg::strcasecmp(ext,"pnm") || - !cimg::strcasecmp(ext,"pbm") || - !cimg::strcasecmp(ext,"pnk")) load_pnm(filename); - else if (!cimg::strcasecmp(ext,"pfm")) load_pfm(filename); - else if (!cimg::strcasecmp(ext,"tif") || - !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); - else if (!cimg::strcasecmp(ext,"exr")) load_exr(filename); - else if (!cimg::strcasecmp(ext,"cr2") || - !cimg::strcasecmp(ext,"crw") || - !cimg::strcasecmp(ext,"dcr") || - !cimg::strcasecmp(ext,"mrw") || - !cimg::strcasecmp(ext,"nef") || - !cimg::strcasecmp(ext,"orf") || - !cimg::strcasecmp(ext,"pix") || - !cimg::strcasecmp(ext,"ptx") || - !cimg::strcasecmp(ext,"raf") || - !cimg::strcasecmp(ext,"srf")) load_dcraw_external(filename); - else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); - - // 3d binary formats - else if (!cimg::strcasecmp(ext,"dcm") || - !cimg::strcasecmp(ext,"dicom")) load_medcon_external(filename); - else if (!cimg::strcasecmp(ext,"hdr") || - !cimg::strcasecmp(ext,"nii")) load_analyze(filename); - else if (!cimg::strcasecmp(ext,"par") || - !cimg::strcasecmp(ext,"rec")) load_parrec(filename); - else if (!cimg::strcasecmp(ext,"mnc")) load_minc2(filename); - else if (!cimg::strcasecmp(ext,"inr")) load_inr(filename); - else if (!cimg::strcasecmp(ext,"pan")) load_pandore(filename); - else if (!cimg::strcasecmp(ext,"cimg") || - !cimg::strcasecmp(ext,"cimgz") || - !*ext) return load_cimg(filename); - - // Archive files - else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); - - // Image sequences - else if (!cimg::strcasecmp(ext,"avi") || - !cimg::strcasecmp(ext,"mov") || - !cimg::strcasecmp(ext,"asf") || - !cimg::strcasecmp(ext,"divx") || - !cimg::strcasecmp(ext,"flv") || - !cimg::strcasecmp(ext,"mpg") || - !cimg::strcasecmp(ext,"m1v") || - !cimg::strcasecmp(ext,"m2v") || - !cimg::strcasecmp(ext,"m4v") || - !cimg::strcasecmp(ext,"mjp") || - !cimg::strcasecmp(ext,"mkv") || - !cimg::strcasecmp(ext,"mpe") || - !cimg::strcasecmp(ext,"movie") || - !cimg::strcasecmp(ext,"ogm") || - !cimg::strcasecmp(ext,"ogg") || - !cimg::strcasecmp(ext,"qt") || - !cimg::strcasecmp(ext,"rm") || - !cimg::strcasecmp(ext,"vob") || - !cimg::strcasecmp(ext,"wmv") || - !cimg::strcasecmp(ext,"xvid") || - !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); - else throw CImgIOException("CImg<%s>::load()", - pixel_type()); - } catch (CImgIOException&) { - std::FILE *file = 0; - try { - file = cimg::fopen(filename,"rb"); - } catch (CImgIOException&) { - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load(): Failed to open file '%s'.", - cimg_instance, - filename); - } - - try { - const char *const f_type = cimg::file_type(file,filename); - std::fclose(file); - if (!cimg::strcasecmp(f_type,"pnm")) load_pnm(filename); - else if (!cimg::strcasecmp(f_type,"pfm")) load_pfm(filename); - else if (!cimg::strcasecmp(f_type,"bmp")) load_bmp(filename); - else if (!cimg::strcasecmp(f_type,"jpg")) load_jpeg(filename); - else if (!cimg::strcasecmp(f_type,"pan")) load_pandore(filename); - else if (!cimg::strcasecmp(f_type,"png")) load_png(filename); - else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); - else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); - else if (!cimg::strcasecmp(f_type,"dcm")) load_medcon_external(filename); - else throw CImgIOException("CImg<%s>::load()", - pixel_type()); - } catch (CImgIOException&) { - try { - load_other(filename); - } catch (CImgIOException&) { - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load(): Failed to recognize format of file '%s'.", - cimg_instance, - filename); - } - } - } - cimg::exception_mode() = omode; - return *this; - } - - //! Load image from a file \newinstance. - static CImg get_load(const char *const filename) { - return CImg().load(filename); - } - - //! Load image from an ascii file. - /** - \param filename Filename, as a C -string. - **/ - CImg& load_ascii(const char *const filename) { - return _load_ascii(0,filename); - } - - //! Load image from an ascii file \inplace. - static CImg get_load_ascii(const char *const filename) { - return CImg().load_ascii(filename); - } - - //! Load image from an ascii file \overloading. - CImg& load_ascii(std::FILE *const file) { - return _load_ascii(file,0); - } - - //! Loadimage from an ascii file \newinstance. - static CImg get_load_ascii(std::FILE *const file) { - return CImg().load_ascii(file); - } - - CImg& _load_ascii(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_ascii(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - char line[256] = { 0 }; - int err = std::fscanf(nfile,"%255[^\n]",line); - unsigned int dx = 0, dy = 1, dz = 1, dc = 1; - std::sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); - err = std::fscanf(nfile,"%*[^0-9.eE+-]"); - if (!dx || !dy || !dz || !dc) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_ascii(): Invalid ascii header in file '%s', image dimensions are set to (%u,%u,%u,%u).", - cimg_instance, - filename?filename:"(FILE*)",dx,dy,dz,dc); - } - assign(dx,dy,dz,dc); - const unsigned long siz = size(); - unsigned long off = 0; - double val; - T *ptr = _data; - for (err = 1, off = 0; off& load_dlm(const char *const filename) { - return _load_dlm(0,filename); - } - - //! Load image from a DLM file \newinstance. - static CImg get_load_dlm(const char *const filename) { - return CImg().load_dlm(filename); - } - - //! Load image from a DLM file \overloading. - CImg& load_dlm(std::FILE *const file) { - return _load_dlm(file,0); - } - - //! Load image from a DLM file \newinstance. - static CImg get_load_dlm(std::FILE *const file) { - return CImg().load_dlm(file); - } - - CImg& _load_dlm(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_dlm(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); - char delimiter[256] = { 0 }, tmp[256] = { 0 }; - unsigned int cdx = 0, dx = 0, dy = 0; - int err = 0; - double val; - assign(256,256); - while ((err = std::fscanf(nfile,"%lf%255[^0-9.+-]",&val,delimiter))>0) { - if (err>0) (*this)(cdx++,dy) = (T)val; - if (cdx>=_width) resize(3*_width/2,_height,1,1,0); - char c = 0; - if (!std::sscanf(delimiter,"%255[^\n]%c",tmp,&c) || c=='\n') { - dx = cimg::max(cdx,dx); - if (++dy>=_height) resize(_width,3*_height/2,1,1,0); - cdx = 0; - } - } - if (cdx && err==1) { dx = cdx; ++dy; } - if (!dx || !dy) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_dlm(): Invalid DLM file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - resize(dx,dy,1,1,0); - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a BMP file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_bmp(const char *const filename) { - return _load_bmp(0,filename); - } - - //! Load image from a BMP file \newinstance. - static CImg get_load_bmp(const char *const filename) { - return CImg().load_bmp(filename); - } - - //! Load image from a BMP file \overloading. - CImg& load_bmp(std::FILE *const file) { - return _load_bmp(file,0); - } - - //! Load image from a BMP file \newinstance. - static CImg get_load_bmp(std::FILE *const file) { - return CImg().load_bmp(file); - } - - CImg& _load_bmp(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_bmp(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - unsigned char header[64] = { 0 }; - cimg::fread(header,54,nfile); - if (*header!='B' || header[1]!='M') { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_bmp(): Invalid BMP file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - - // Read header and pixel buffer - int - file_size = header[0x02] + (header[0x03]<<8) + (header[0x04]<<16) + (header[0x05]<<24), - offset = header[0x0A] + (header[0x0B]<<8) + (header[0x0C]<<16) + (header[0x0D]<<24), - header_size = header[0x0E] + (header[0x0F]<<8) + (header[0x10]<<16) + (header[0x11]<<24), - dx = header[0x12] + (header[0x13]<<8) + (header[0x14]<<16) + (header[0x15]<<24), - dy = header[0x16] + (header[0x17]<<8) + (header[0x18]<<16) + (header[0x19]<<24), - compression = header[0x1E] + (header[0x1F]<<8) + (header[0x20]<<16) + (header[0x21]<<24), - nb_colors = header[0x2E] + (header[0x2F]<<8) + (header[0x30]<<16) + (header[0x31]<<24), - bpp = header[0x1C] + (header[0x1D]<<8); - - if (!file_size || file_size==offset) { - std::fseek(nfile,0,SEEK_END); - file_size = (int)std::ftell(nfile); - std::fseek(nfile,54,SEEK_SET); - } - if (header_size>40) std::fseek(nfile, header_size - 40, SEEK_CUR); - - const int - cimg_iobuffer = 12*1024*1024, - dx_bytes = (bpp==1)?(dx/8+(dx%8?1:0)):((bpp==4)?(dx/2+(dx%2?1:0)):(dx*bpp/8)), - align_bytes = (4-dx_bytes%4)%4, - buf_size = cimg::min(cimg::abs(dy)*(dx_bytes + align_bytes),file_size - offset); - - CImg colormap; - if (bpp<16) { if (!nb_colors) nb_colors = 1<0) std::fseek(nfile,xoffset,SEEK_CUR); - - CImg buffer; - if (buf_size=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - unsigned char mask = 0x80, val = 0; - cimg_forX(*this,x) { - if (mask==0x80) val = *(ptrs++); - const unsigned char *col = (unsigned char*)(colormap._data + (val&mask?1:0)); - (*this)(x,y,2) = (T)*(col++); - (*this)(x,y,1) = (T)*(col++); - (*this)(x,y,0) = (T)*(col++); - mask = cimg::ror(mask); - } - ptrs+=align_bytes; - } - } break; - case 4 : { // 16 colors - for (int y = height()-1; y>=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - unsigned char mask = 0xF0, val = 0; - cimg_forX(*this,x) { - if (mask==0xF0) val = *(ptrs++); - const unsigned char color = (unsigned char)((mask<16)?(val&mask):((val&mask)>>4)); - const unsigned char *col = (unsigned char*)(colormap._data + color); - (*this)(x,y,2) = (T)*(col++); - (*this)(x,y,1) = (T)*(col++); - (*this)(x,y,0) = (T)*(col++); - mask = cimg::ror(mask,4); - } - ptrs+=align_bytes; - } - } break; - case 8 : { // 256 colors - for (int y = height()-1; y>=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - cimg_forX(*this,x) { - const unsigned char *col = (unsigned char*)(colormap._data + *(ptrs++)); - (*this)(x,y,2) = (T)*(col++); - (*this)(x,y,1) = (T)*(col++); - (*this)(x,y,0) = (T)*(col++); - } - ptrs+=align_bytes; - } - } break; - case 16 : { // 16 bits colors - for (int y = height()-1; y>=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - cimg_forX(*this,x) { - const unsigned char c1 = *(ptrs++), c2 = *(ptrs++); - const unsigned short col = (unsigned short)(c1|(c2<<8)); - (*this)(x,y,2) = (T)(col&0x1F); - (*this)(x,y,1) = (T)((col>>5)&0x1F); - (*this)(x,y,0) = (T)((col>>10)&0x1F); - } - ptrs+=align_bytes; - } - } break; - case 24 : { // 24 bits colors - for (int y = height()-1; y>=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - cimg_forX(*this,x) { - (*this)(x,y,2) = (T)*(ptrs++); - (*this)(x,y,1) = (T)*(ptrs++); - (*this)(x,y,0) = (T)*(ptrs++); - } - ptrs+=align_bytes; - } - } break; - case 32 : { // 32 bits colors - for (int y = height()-1; y>=0; --y) { - if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); } - cimg_forX(*this,x) { - (*this)(x,y,2) = (T)*(ptrs++); - (*this)(x,y,1) = (T)*(ptrs++); - (*this)(x,y,0) = (T)*(ptrs++); - ++ptrs; - } - ptrs+=align_bytes; - } - } break; - } - if (dy<0) mirror('y'); - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a JPEG file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_jpeg(const char *const filename) { - return _load_jpeg(0,filename); - } - - //! Load image from a JPEG file \newinstance. - static CImg get_load_jpeg(const char *const filename) { - return CImg().load_jpeg(filename); - } - - //! Load image from a JPEG file \overloading. - CImg& load_jpeg(std::FILE *const file) { - return _load_jpeg(file,0); - } - - //! Load image from a JPEG file \newinstance. - static CImg get_load_jpeg(std::FILE *const file) { - return CImg().load_jpeg(file); - } - - // Custom error handler for libjpeg. -#ifdef cimg_use_jpeg - struct _cimg_error_mgr { - struct jpeg_error_mgr original; - jmp_buf setjmp_buffer; - char message[JMSG_LENGTH_MAX]; - }; - - typedef struct _cimg_error_mgr *_cimg_error_ptr; - - METHODDEF(void) _cimg_jpeg_error_exit(j_common_ptr cinfo) { - _cimg_error_ptr c_err = (_cimg_error_ptr) cinfo->err; // Return control to the setjmp point - (*cinfo->err->format_message)(cinfo,c_err->message); - jpeg_destroy(cinfo); // Clean memory and temp files. - longjmp(c_err->setjmp_buffer,1); - } -#endif - - CImg& _load_jpeg(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_jpeg(): Specified filename is (null).", - cimg_instance); - -#ifndef cimg_use_jpeg - if (file) - throw CImgIOException(_cimg_instance - "load_jpeg(): Unable to load data from '(FILE*)' unless libjpeg is enabled.", - cimg_instance); - else return load_other(filename); -#else - - struct jpeg_decompress_struct cinfo; - struct _cimg_error_mgr jerr; - cinfo.err = jpeg_std_error(&jerr.original); - jerr.original.error_exit = _cimg_jpeg_error_exit; - - if (setjmp(jerr.setjmp_buffer)) { // JPEG error - throw CImgIOException(_cimg_instance - "load_jpeg(): Error message returned by libjpeg: %s.", - cimg_instance,jerr.message); - } - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - jpeg_create_decompress(&cinfo); - jpeg_stdio_src(&cinfo,nfile); - jpeg_read_header(&cinfo,TRUE); - jpeg_start_decompress(&cinfo); - - if (cinfo.output_components!=1 && cinfo.output_components!=3 && cinfo.output_components!=4) { - if (!file) { - cimg::fclose(nfile); - return load_other(filename); - } else - throw CImgIOException(_cimg_instance - "load_jpeg(): Failed to load JPEG data from file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - } - CImg buffer(cinfo.output_width*cinfo.output_components); - JSAMPROW row_pointer[1]; - assign(cinfo.output_width,cinfo.output_height,1,cinfo.output_components); - T *ptr_r = _data, *ptr_g = _data + 1UL*_width*_height, *ptr_b = _data + 2UL*_width*_height, *ptr_a = _data + 3UL*_width*_height; - while (cinfo.output_scanline - // This is experimental code, not much tested, use with care. - CImg& load_magick(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_magick(): Specified filename is (null).", - cimg_instance); - -#ifdef cimg_use_magick - Magick::Image image(filename); - const unsigned int W = image.size().width(), H = image.size().height(); - switch (image.type()) { - case Magick::PaletteMatteType : - case Magick::TrueColorMatteType : - case Magick::ColorSeparationType : { - assign(W,H,1,4); - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); - Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); - for (unsigned long off = (unsigned long)W*H; off; --off) { - *(ptr_r++) = (T)(pixels->red); - *(ptr_g++) = (T)(pixels->green); - *(ptr_b++) = (T)(pixels->blue); - *(ptr_a++) = (T)(pixels->opacity); - ++pixels; - } - } break; - case Magick::PaletteType : - case Magick::TrueColorType : { - assign(W,H,1,3); - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); - for (unsigned long off = (unsigned long)W*H; off; --off) { - *(ptr_r++) = (T)(pixels->red); - *(ptr_g++) = (T)(pixels->green); - *(ptr_b++) = (T)(pixels->blue); - ++pixels; - } - } break; - case Magick::GrayscaleMatteType : { - assign(W,H,1,2); - T *ptr_r = data(0,0,0,0), *ptr_a = data(0,0,0,1); - Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); - for (unsigned long off = (unsigned long)W*H; off; --off) { - *(ptr_r++) = (T)(pixels->red); - *(ptr_a++) = (T)(pixels->opacity); - ++pixels; - } - } break; - default : { - assign(W,H,1,1); - T *ptr_r = data(0,0,0,0); - Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); - for (unsigned long off = (unsigned long)W*H; off; --off) { - *(ptr_r++) = (T)(pixels->red); - ++pixels; - } - } - } -#else - throw CImgIOException(_cimg_instance - "load_magick(): Unable to load file '%s' unless libMagick++ is enabled.", - cimg_instance, - filename); -#endif - return *this; - } - - //! Load image from a file, using Magick++ library \newinstance. - static CImg get_load_magick(const char *const filename) { - return CImg().load_magick(filename); - } - - //! Load image from a PNG file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_png(const char *const filename) { - return _load_png(0,filename); - } - - //! Load image from a PNG file \newinstance. - static CImg get_load_png(const char *const filename) { - return CImg().load_png(filename); - } - - //! Load image from a PNG file \overloading. - CImg& load_png(std::FILE *const file) { - return _load_png(file,0); - } - - //! Load image from a PNG file \newinstance. - static CImg get_load_png(std::FILE *const file) { - return CImg().load_png(file); - } - - // (Note: Most of this function has been written by Eric Fausett) - CImg& _load_png(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_png(): Specified filename is (null).", - cimg_instance); - -#ifndef cimg_use_png - if (file) - throw CImgIOException(_cimg_instance - "load_png(): Unable to load data from '(FILE*)' unless libpng is enabled.", - cimg_instance); - - else return load_other(filename); -#else - // Open file and check for PNG validity - const char *volatile nfilename = filename; // two 'volatile' here to remove a g++ warning due to 'setjmp'. - std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"rb"); - - unsigned char pngCheck[8] = { 0 }; - cimg::fread(pngCheck,8,(std::FILE*)nfile); - if (png_sig_cmp(pngCheck,0,8)) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_png(): Invalid PNG file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - - // Setup PNG structures for read - png_voidp user_error_ptr = 0; - png_error_ptr user_error_fn = 0, user_warning_fn = 0; - png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,user_error_ptr,user_error_fn,user_warning_fn); - if (!png_ptr) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_png(): Failed to initialize 'png_ptr' structure for file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - if (!file) cimg::fclose(nfile); - png_destroy_read_struct(&png_ptr,(png_infopp)0,(png_infopp)0); - throw CImgIOException(_cimg_instance - "load_png(): Failed to initialize 'info_ptr' structure for file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_infop end_info = png_create_info_struct(png_ptr); - if (!end_info) { - if (!file) cimg::fclose(nfile); - png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)0); - throw CImgIOException(_cimg_instance - "load_png(): Failed to initialize 'end_info' structure for file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - - // Error handling callback for png file reading - if (setjmp(png_jmpbuf(png_ptr))) { - if (!file) cimg::fclose((std::FILE*)nfile); - png_destroy_read_struct(&png_ptr, &end_info, (png_infopp)0); - throw CImgIOException(_cimg_instance - "load_png(): Encountered unknown fatal error in libpng for file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_init_io(png_ptr, nfile); - png_set_sig_bytes(png_ptr, 8); - - // Get PNG Header Info up to data block - png_read_info(png_ptr,info_ptr); - png_uint_32 W, H; - int bit_depth, color_type, interlace_type; - bool is_gray = false; - png_get_IHDR(png_ptr,info_ptr,&W,&H,&bit_depth,&color_type,&interlace_type,(int*)0,(int*)0); - - // Transforms to unify image data - if (color_type==PNG_COLOR_TYPE_PALETTE) { - png_set_palette_to_rgb(png_ptr); - color_type = PNG_COLOR_TYPE_RGB; - bit_depth = 8; - } - if (color_type==PNG_COLOR_TYPE_GRAY && bit_depth<8) { - png_set_expand_gray_1_2_4_to_8(png_ptr); - is_gray = true; - bit_depth = 8; - } - if (png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)) { - png_set_tRNS_to_alpha(png_ptr); - color_type |= PNG_COLOR_MASK_ALPHA; - } - if (color_type==PNG_COLOR_TYPE_GRAY || color_type==PNG_COLOR_TYPE_GRAY_ALPHA) { - png_set_gray_to_rgb(png_ptr); - color_type |= PNG_COLOR_MASK_COLOR; - is_gray = true; - } - if (color_type==PNG_COLOR_TYPE_RGB) - png_set_filler(png_ptr,0xffffU,PNG_FILLER_AFTER); - - png_read_update_info(png_ptr,info_ptr); - if (bit_depth!=8 && bit_depth!=16) { - if (!file) cimg::fclose(nfile); - png_destroy_read_struct(&png_ptr,&end_info,(png_infopp)0); - throw CImgIOException(_cimg_instance - "load_png(): Invalid bit depth %u in file '%s'.", - cimg_instance, - bit_depth,nfilename?nfilename:"(FILE*)"); - } - const int byte_depth = bit_depth>>3; - - // Allocate Memory for Image Read - png_bytep *const imgData = new png_bytep[H]; - for (unsigned int row = 0; row& load_pnm(const char *const filename) { - return _load_pnm(0,filename); - } - - //! Load image from a PNM file \newinstance. - static CImg get_load_pnm(const char *const filename) { - return CImg().load_pnm(filename); - } - - //! Load image from a PNM file \overloading. - CImg& load_pnm(std::FILE *const file) { - return _load_pnm(file,0); - } - - //! Load image from a PNM file \newinstance. - static CImg get_load_pnm(std::FILE *const file) { - return CImg().load_pnm(file); - } - - CImg& _load_pnm(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_pnm(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - unsigned int ppm_type, W, H, D = 1, colormax = 255; - CImg item(16384,1,1,1,0); - int err, rval, gval, bval; - const long cimg_iobuffer = 12*1024*1024; - while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item," P%u",&ppm_type)!=1) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pnm(): PNM header not found in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if ((err=std::sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pnm(): WIDTH and HEIGHT fields undefined in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - if (ppm_type!=1 && ppm_type!=4) { - if (err==2 || (err==3 && (ppm_type==5 || ppm_type==7 || ppm_type==8 || ppm_type==9))) { - while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item,"%u",&colormax)!=1) - cimg::warn(_cimg_instance - "load_pnm(): COLORMAX field is undefined in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } else { colormax = D; D = 1; } - } - std::fgetc(nfile); - - switch (ppm_type) { - case 1 : { // 2d b&w ascii. - assign(W,H,1,1); - T* ptrd = _data; - cimg_foroff(*this,off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)(rval?0:255); else break; } - } break; - case 2 : { // 2d grey ascii. - assign(W,H,1,1); - T* ptrd = _data; - cimg_foroff(*this,off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)rval; else break; } - } break; - case 3 : { // 2d color ascii. - assign(W,H,1,3); - T *ptrd = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - cimg_forXY(*this,x,y) { - if (std::fscanf(nfile,"%d %d %d",&rval,&gval,&bval)==3) { *(ptrd++) = (T)rval; *(ptr_g++) = (T)gval; *(ptr_b++) = (T)bval; } - else break; - } - } break; - case 4 : { // 2d b&w binary (support 3D PINK extension). - CImg raw; - assign(W,H,D,1); - T *ptrd = data(0,0,0,0); - unsigned int w = 0, h = 0, d = 0; - for (long to_read = (long)((W/8 + (W%8?1:0))*H*D); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const unsigned char *ptrs = raw._data; - unsigned char mask = 0, val = 0; - for (unsigned long off = (unsigned long)raw._width; off || mask; mask>>=1) { - if (!mask) { if (off--) val = *(ptrs++); mask = 128; } - *(ptrd++) = (T)((val&mask)?0:255); - if (++w==W) { w = 0; mask = 0; if (++h==H) { h = 0; if (++d==D) break; }} - } - } - } break; - case 5 : case 7 : { // 2d/3d grey binary (support 3D PINK extension). - if (colormax<256) { // 8 bits. - CImg raw; - assign(W,H,D,1); - T *ptrd = data(0,0,0,0); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const unsigned char *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); - } - } else { // 16 bits. - CImg raw; - assign(W,H,D,1); - T *ptrd = data(0,0,0,0); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer/2)); - cimg::fread(raw._data,raw._width,nfile); - if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); - to_read-=raw._width; - const unsigned short *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); - } - } - } break; - case 6 : { // 2d color binary. - if (colormax<256) { // 8 bits. - CImg raw; - assign(W,H,1,3); - T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,2); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const unsigned char *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width/3; off; --off) { - *(ptr_r++) = (T)*(ptrs++); - *(ptr_g++) = (T)*(ptrs++); - *(ptr_b++) = (T)*(ptrs++); - } - } - } else { // 16 bits. - CImg raw; - assign(W,H,1,3); - T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,2); - for (long to_read = (int)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer/2)); - cimg::fread(raw._data,raw._width,nfile); - if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); - to_read-=raw._width; - const unsigned short *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width/3; off; --off) { - *(ptr_r++) = (T)*(ptrs++); - *(ptr_g++) = (T)*(ptrs++); - *(ptr_b++) = (T)*(ptrs++); - } - } - } - } break; - case 8 : { // 2d/3d grey binary with int32 integers (PINK extension). - CImg raw; - assign(W,H,D,1); - T *ptrd = data(0,0,0,0); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const int *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); - } - } break; - case 9 : { // 2d/3d grey binary with float values (PINK extension). - CImg raw; - assign(W,H,D,1); - T *ptrd = data(0,0,0,0); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const float *ptrs = raw._data; - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); - } - } break; - default : - assign(); - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pnm(): PNM type 'P%d' found, but type is not supported.", - cimg_instance, - filename?filename:"(FILE*)",ppm_type); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a PFM file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_pfm(const char *const filename) { - return _load_pfm(0,filename); - } - - //! Load image from a PFM file \newinstance. - static CImg get_load_pfm(const char *const filename) { - return CImg().load_pfm(filename); - } - - //! Load image from a PFM file \overloading. - CImg& load_pfm(std::FILE *const file) { - return _load_pfm(file,0); - } - - //! Load image from a PFM file \newinstance. - static CImg get_load_pfm(std::FILE *const file) { - return CImg().load_pfm(file); - } - - CImg& _load_pfm(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_pfm(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - char pfm_type; - CImg item(16384,1,1,1,0); - int W = 0, H = 0, err = 0; - double scale = 0; - while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item," P%c",&pfm_type)!=1) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pfm(): PFM header not found in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if ((err=std::sscanf(item," %d %d",&W,&H))<2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pfm(): WIDTH and HEIGHT fields are undefined in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - if (err==2) { - while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item,"%lf",&scale)!=1) - cimg::warn(_cimg_instance - "load_pfm(): SCALE field is undefined in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - std::fgetc(nfile); - const bool is_color = (pfm_type=='F'), is_inverted = (scale>0)!=cimg::endianness(); - if (is_color) { - assign(W,H,1,3,0); - CImg buf(3*W); - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - cimg_forY(*this,y) { - cimg::fread(buf._data,3*W,nfile); - if (is_inverted) cimg::invert_endianness(buf._data,3*W); - const float *ptrs = buf._data; - cimg_forX(*this,x) { - *(ptr_r++) = (T)*(ptrs++); - *(ptr_g++) = (T)*(ptrs++); - *(ptr_b++) = (T)*(ptrs++); - } - } - } else { - assign(W,H,1,1,0); - CImg buf(W); - T *ptrd = data(0,0,0,0); - cimg_forY(*this,y) { - cimg::fread(buf._data,W,nfile); - if (is_inverted) cimg::invert_endianness(buf._data,W); - const float *ptrs = buf._data; - cimg_forX(*this,x) *(ptrd++) = (T)*(ptrs++); - } - } - if (!file) cimg::fclose(nfile); - return mirror('y'); // Most of the .pfm files are flipped along the y-axis. - } - - //! Load image from a RGB file. - /** - \param filename Filename, as a C-string. - \param dimw Width of the image buffer. - \param dimh Height of the image buffer. - **/ - CImg& load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { - return _load_rgb(0,filename,dimw,dimh); - } - - //! Load image from a RGB file \newinstance. - static CImg get_load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { - return CImg().load_rgb(filename,dimw,dimh); - } - - //! Load image from a RGB file \overloading. - CImg& load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { - return _load_rgb(file,0,dimw,dimh); - } - - //! Load image from a RGB file \newinstance. - static CImg get_load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { - return CImg().load_rgb(file,dimw,dimh); - } - - CImg& _load_rgb(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_rgb(): Specified filename is (null).", - cimg_instance); - - if (!dimw || !dimh) return assign(); - const long cimg_iobuffer = 12*1024*1024; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - CImg raw; - assign(dimw,dimh,1,3); - T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,2); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const unsigned char *ptrs = raw._data; - for (unsigned long off = raw._width/3UL; off; --off) { - *(ptr_r++) = (T)*(ptrs++); - *(ptr_g++) = (T)*(ptrs++); - *(ptr_b++) = (T)*(ptrs++); - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a RGBA file. - /** - \param filename Filename, as a C-string. - \param dimw Width of the image buffer. - \param dimh Height of the image buffer. - **/ - CImg& load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { - return _load_rgba(0,filename,dimw,dimh); - } - - //! Load image from a RGBA file \newinstance. - static CImg get_load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { - return CImg().load_rgba(filename,dimw,dimh); - } - - //! Load image from a RGBA file \overloading. - CImg& load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { - return _load_rgba(file,0,dimw,dimh); - } - - //! Load image from a RGBA file \newinstance. - static CImg get_load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { - return CImg().load_rgba(file,dimw,dimh); - } - - CImg& _load_rgba(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_rgba(): Specified filename is (null).", - cimg_instance); - - if (!dimw || !dimh) return assign(); - const long cimg_iobuffer = 12*1024*1024; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - CImg raw; - assign(dimw,dimh,1,4); - T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,2), - *ptr_a = data(0,0,0,3); - for (long to_read = (long)size(); to_read>0; ) { - raw.assign(cimg::min(to_read,cimg_iobuffer)); - cimg::fread(raw._data,raw._width,nfile); - to_read-=raw._width; - const unsigned char *ptrs = raw._data; - for (unsigned long off = raw._width/4UL; off; --off) { - *(ptr_r++) = (T)*(ptrs++); - *(ptr_g++) = (T)*(ptrs++); - *(ptr_b++) = (T)*(ptrs++); - *(ptr_a++) = (T)*(ptrs++); - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a TIFF file. - /** - \param filename Filename, as a C-string. - \param first_frame First frame to read (for multi-pages tiff). - \param last_frame Last frame to read (for multi-pages tiff). - \param step_frame Step value of frame reading. - \note - - libtiff support is enabled by defining the precompilation - directive \c cimg_use_tif. - - When libtiff is enabled, 2D and 3D (multipage) several - channel per pixel are supported for - char,uchar,short,ushort,float and \c double pixel types. - - If \c cimg_use_tif is not defined at compilation time the - function uses CImg& load_other(const char*). - **/ - CImg& load_tiff(const char *const filename, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_tiff(): Specified filename is (null).", - cimg_instance); - - const unsigned int - nfirst_frame = first_frame1) - throw CImgArgumentException(_cimg_instance - "load_tiff(): Unable to read sub-images from file '%s' unless libtiff is enabled.", - cimg_instance, - filename); - return load_other(filename); -#else - TIFF *tif = TIFFOpen(filename,"r"); - if (tif) { - unsigned int nb_images = 0; - do ++nb_images; while (TIFFReadDirectory(tif)); - if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) - cimg::warn(_cimg_instance - "load_tiff(): File '%s' contains %u image(s) while specified frame range is [%u,%u] (step %u).", - cimg_instance, - filename,nb_images,nfirst_frame,nlast_frame,nstep_frame); - - if (nfirst_frame>=nb_images) return assign(); - if (nlast_frame>=nb_images) nlast_frame = nb_images-1; - TIFFSetDirectory(tif,0); - CImg frame; - for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { - frame._load_tiff(tif,l); - if (l==nfirst_frame) assign(frame._width,frame._height,1+(nlast_frame-nfirst_frame)/nstep_frame,frame._spectrum); - if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) - resize(cimg::max(frame._width,_width),cimg::max(frame._height,_height),-100,cimg::max(frame._spectrum,_spectrum),0); - draw_image(0,0,(l-nfirst_frame)/nstep_frame,frame); - } - TIFFClose(tif); - } else throw CImgIOException(_cimg_instance - "load_tiff(): Failed to open file '%s'.", - cimg_instance, - filename); - return *this; -#endif - } - - //! Load image from a TIFF file \newinstance. - static CImg get_load_tiff(const char *const filename, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) { - return CImg().load_tiff(filename,first_frame,last_frame,step_frame); - } - - // (Original contribution by Jerome Boulanger). -#ifdef cimg_use_tiff - template - void _load_tiff_tiled_contig(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { - t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); - if (buf) { - for (unsigned int row = 0; row - void _load_tiff_tiled_separate(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { - t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); - if (buf) { - for (unsigned int vv = 0; vv - void _load_tiff_contig(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { - t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); - if (buf) { - uint32 row, rowsperstrip = (uint32)-1; - TIFFGetField(tif,TIFFTAG_ROWSPERSTRIP,&rowsperstrip); - for (row = 0; rowny?ny-row:rowsperstrip); - tstrip_t strip = TIFFComputeStrip(tif, row, 0); - if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { - _TIFFfree(buf); TIFFClose(tif); - throw CImgIOException(_cimg_instance - "load_tiff(): Invalid strip in file '%s'.", - cimg_instance, - TIFFFileName(tif)); - } - const t *ptr = buf; - for (unsigned int rr = 0; rr - void _load_tiff_separate(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { - t *buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); - if (buf) { - uint32 row, rowsperstrip = (uint32)-1; - TIFFGetField(tif,TIFFTAG_ROWSPERSTRIP,&rowsperstrip); - for (unsigned int vv = 0; vvny?ny-row:rowsperstrip); - tstrip_t strip = TIFFComputeStrip(tif, row, vv); - if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { - _TIFFfree(buf); TIFFClose(tif); - throw CImgIOException(_cimg_instance - "load_tiff(): Invalid strip in file '%s'.", - cimg_instance, - TIFFFileName(tif)); - } - const t *ptr = buf; - for (unsigned int rr = 0;rr& _load_tiff(TIFF *const tif, const unsigned int directory) { - if (!TIFFSetDirectory(tif,directory)) return assign(); - uint16 samplesperpixel = 1, bitspersample, photo; - uint16 sampleformat = SAMPLEFORMAT_UINT; - uint32 nx,ny; - const char *const filename = TIFFFileName(tif); - TIFFGetField(tif,TIFFTAG_IMAGEWIDTH,&nx); - TIFFGetField(tif,TIFFTAG_IMAGELENGTH,&ny); - TIFFGetField(tif,TIFFTAG_SAMPLESPERPIXEL,&samplesperpixel); - TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sampleformat); - TIFFGetFieldDefaulted(tif,TIFFTAG_BITSPERSAMPLE,&bitspersample); - TIFFGetField(tif,TIFFTAG_PHOTOMETRIC,&photo); - int spectrum = samplesperpixel; - if (photo == 3) spectrum = 3; - assign(nx,ny,1,spectrum); - if ((photo < 3) && ( bitspersample!=8 || !(samplesperpixel==3 || samplesperpixel==4))) { - uint16 config; - TIFFGetField(tif,TIFFTAG_PLANARCONFIG,&config); - if (TIFFIsTiled(tif)) { - uint32 tw, th; - TIFFGetField(tif,TIFFTAG_TILEWIDTH,&tw); - TIFFGetField(tif,TIFFTAG_TILELENGTH,&th); - if (config==PLANARCONFIG_CONTIG) switch (bitspersample) { - case 8 : { - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - } break; - case 16 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - break; - case 32 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); - break; - } else switch (bitspersample) { - case 8 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - break; - case 16 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - break; - case 32 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); - break; - } - } else { - if (config==PLANARCONFIG_CONTIG) switch (bitspersample) { - case 8 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); - else _load_tiff_contig(tif,samplesperpixel,nx,ny); - break; - case 16 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); - else _load_tiff_contig(tif,samplesperpixel,nx,ny); - break; - case 32 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); - else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_contig(tif,samplesperpixel,nx,ny); - else _load_tiff_contig(tif,samplesperpixel,nx,ny); - break; - } else switch (bitspersample){ - case 8 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); - else _load_tiff_separate(tif,samplesperpixel,nx,ny); - break; - case 16 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); - else _load_tiff_separate(tif,samplesperpixel,nx,ny); - break; - case 32 : - if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); - else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_separate(tif,samplesperpixel,nx,ny); - else _load_tiff_separate(tif,samplesperpixel,nx,ny); - break; - } - } - } else { - uint32 *const raster = (uint32*)_TIFFmalloc(nx*ny*sizeof(uint32)); - if (!raster) { - _TIFFfree(raster); TIFFClose(tif); - throw CImgException(_cimg_instance - "load_tiff(): Failed to allocate memory (%s) for file '%s'.", - cimg_instance, - cimg::strbuffersize(nx*ny*sizeof(uint32)),filename); - } - TIFFReadRGBAImage(tif,nx,ny,raster,0); - switch (spectrum) { - case 1 : { - cimg_forXY(*this,x,y) (*this)(x,y) = (T)(float)((raster[nx*(ny-1-y)+x] + 128)/257); - } break; - case 3 : { - cimg_forXY(*this,x,y) { - (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny-1-y)+x]); - (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny-1-y)+x]); - (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny-1-y)+x]); - } - } break; - case 4 : { - cimg_forXY(*this,x,y) { - (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny-1-y)+x]); - (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny-1-y)+x]); - (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny-1-y)+x]); - (*this)(x,y,3) = (T)(float)TIFFGetA(raster[nx*(ny-1-y)+x]); - } - } break; - } - _TIFFfree(raster); - } - return *this; - } -#endif - - //! Load image from a MINC2 file. - /** - \param filename Filename, as a C-string. - **/ - // (Original code by Haz-Edine Assemlal). - CImg& load_minc2(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_minc2(): Specified filename is (null).", - cimg_instance); -#ifndef cimg_use_minc2 - return load_other(filename); -#else - minc::minc_1_reader rdr; - rdr.open(filename); - assign(rdr.ndim(1)?rdr.ndim(1):1, - rdr.ndim(2)?rdr.ndim(2):1, - rdr.ndim(3)?rdr.ndim(3):1, - rdr.ndim(4)?rdr.ndim(4):1); - if(typeid(T)==typeid(unsigned char)) - rdr.setup_read_byte(); - else if(typeid(T)==typeid(int)) - rdr.setup_read_int(); - else if(typeid(T)==typeid(double)) - rdr.setup_read_double(); - else - rdr.setup_read_float(); - minc::load_standard_volume(rdr, this->_data); - return *this; -#endif - } - - //! Load image from a MINC2 file \newinstance. - static CImg get_load_minc2(const char *const filename) { - return CImg().load_analyze(filename); - } - - //! Load image from an ANALYZE7.5/NIFTI file. - /** - \param filename Filename, as a C-string. - \param[out] voxel_size Pointer to the three voxel sizes read from the file. - **/ - CImg& load_analyze(const char *const filename, float *const voxel_size=0) { - return _load_analyze(0,filename,voxel_size); - } - - //! Load image from an ANALYZE7.5/NIFTI file \newinstance. - static CImg get_load_analyze(const char *const filename, float *const voxel_size=0) { - return CImg().load_analyze(filename,voxel_size); - } - - //! Load image from an ANALYZE7.5/NIFTI file \overloading. - CImg& load_analyze(std::FILE *const file, float *const voxel_size=0) { - return _load_analyze(file,0,voxel_size); - } - - //! Load image from an ANALYZE7.5/NIFTI file \newinstance. - static CImg get_load_analyze(std::FILE *const file, float *const voxel_size=0) { - return CImg().load_analyze(file,voxel_size); - } - - CImg& _load_analyze(std::FILE *const file, const char *const filename, float *const voxel_size=0) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_analyze(): Specified filename is (null).", - cimg_instance); - - std::FILE *nfile_header = 0, *nfile = 0; - if (!file) { - char body[1024] = { 0 }; - const char *const ext = cimg::split_filename(filename,body); - if (!cimg::strcasecmp(ext,"hdr")) { // File is an Analyze header file. - nfile_header = cimg::fopen(filename,"rb"); - std::sprintf(body + std::strlen(body),".img"); - nfile = cimg::fopen(body,"rb"); - } else if (!cimg::strcasecmp(ext,"img")) { // File is an Analyze data file. - nfile = cimg::fopen(filename,"rb"); - std::sprintf(body + std::strlen(body),".hdr"); - nfile_header = cimg::fopen(body,"rb"); - } else nfile_header = nfile = cimg::fopen(filename,"rb"); // File is a Niftii file. - } else nfile_header = nfile = file; // File is a Niftii file. - if (!nfile || !nfile_header) - throw CImgIOException(_cimg_instance - "load_analyze(): Invalid Analyze7.5 or NIFTI header in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - // Read header. - bool endian = false; - unsigned int header_size; - cimg::fread(&header_size,1,nfile_header); - if (!header_size) - throw CImgIOException(_cimg_instance - "load_analyze(): Invalid zero-sized header in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - if (header_size>=4096) { endian = true; cimg::invert_endianness(header_size); } - unsigned char *const header = new unsigned char[header_size]; - cimg::fread(header+4,header_size-4,nfile_header); - if (!file && nfile_header!=nfile) cimg::fclose(nfile_header); - if (endian) { - cimg::invert_endianness((short*)(header+40),5); - cimg::invert_endianness((short*)(header+70),1); - cimg::invert_endianness((short*)(header+72),1); - cimg::invert_endianness((float*)(header+76),4); - cimg::invert_endianness((float*)(header+112),1); - } - unsigned short *dim = (unsigned short*)(header+40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; - if (!dim[0]) - cimg::warn(_cimg_instance - "load_analyze(): File '%s' defines an image with zero dimensions.", - cimg_instance, - filename?filename:"(FILE*)"); - - if (dim[0]>4) - cimg::warn(_cimg_instance - "load_analyze(): File '%s' defines an image with %u dimensions, reading only the 4 first.", - cimg_instance, - filename?filename:"(FILE*)",dim[0]); - - if (dim[0]>=1) dimx = dim[1]; - if (dim[0]>=2) dimy = dim[2]; - if (dim[0]>=3) dimz = dim[3]; - if (dim[0]>=4) dimv = dim[4]; - float scalefactor = *(float*)(header+112); if (scalefactor==0) scalefactor=1; - const unsigned short datatype = *(short*)(header+70); - if (voxel_size) { - const float *vsize = (float*)(header+76); - voxel_size[0] = vsize[1]; voxel_size[1] = vsize[2]; voxel_size[2] = vsize[3]; - } - delete[] header; - - // Read pixel data. - assign(dimx,dimy,dimz,dimv); - switch (datatype) { - case 2 : { - unsigned char *const buffer = new unsigned char[dimx*dimy*dimz*dimv]; - cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); - cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); - delete[] buffer; - } break; - case 4 : { - short *const buffer = new short[dimx*dimy*dimz*dimv]; - cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); - if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); - cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); - delete[] buffer; - } break; - case 8 : { - int *const buffer = new int[dimx*dimy*dimz*dimv]; - cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); - if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); - cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); - delete[] buffer; - } break; - case 16 : { - float *const buffer = new float[dimx*dimy*dimz*dimv]; - cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); - if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); - cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); - delete[] buffer; - } break; - case 64 : { - double *const buffer = new double[dimx*dimy*dimz*dimv]; - cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); - if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); - cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); - delete[] buffer; - } break; - default : - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_analyze(): Unable to load datatype %d in file '%s'", - cimg_instance, - datatype,filename?filename:"(FILE*)"); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a .cimg[z] file. - /** - \param filename Filename, as a C-string. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_cimg(const char *const filename, const char axis='z', const float align=0) { - CImgList list; - list.load_cimg(filename); - if (list._width==1) return list[0].move_to(*this); - return assign(list.get_append(axis,align)); - } - - //! Load image from a .cimg[z] file \newinstance - static CImg get_load_cimg(const char *const filename, const char axis='z', const float align=0) { - return CImg().load_cimg(filename,axis,align); - } - - //! Load image from a .cimg[z] file \overloading. - CImg& load_cimg(std::FILE *const file, const char axis='z', const float align=0) { - CImgList list; - list.load_cimg(file); - if (list._width==1) return list[0].move_to(*this); - return assign(list.get_append(axis,align)); - } - - //! Load image from a .cimg[z] file \newinstance - static CImg get_load_cimg(std::FILE *const file, const char axis='z', const float align=0) { - return CImg().load_cimg(file,axis,align); - } - - //! Load sub-images of a .cimg file. - /** - \param filename Filename, as a C-string. - \param n0 Starting frame. - \param n1 Ending frame (~0U for max). - \param x0 X-coordinate of the starting sub-image vertex. - \param y0 Y-coordinate of the starting sub-image vertex. - \param z0 Z-coordinate of the starting sub-image vertex. - \param c0 C-coordinate of the starting sub-image vertex. - \param x1 X-coordinate of the ending sub-image vertex (~0U for max). - \param y1 Y-coordinate of the ending sub-image vertex (~0U for max). - \param z1 Z-coordinate of the ending sub-image vertex (~0U for max). - \param c1 C-coordinate of the ending sub-image vertex (~0U for max). - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_cimg(const char *const filename, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, - const char axis='z', const float align=0) { - CImgList list; - list.load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - if (list._width==1) return list[0].move_to(*this); - return assign(list.get_append(axis,align)); - } - - //! Load sub-images of a .cimg file \newinstance. - static CImg get_load_cimg(const char *const filename, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, - const char axis='z', const float align=0) { - return CImg().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); - } - - //! Load sub-images of a .cimg file \overloading. - CImg& load_cimg(std::FILE *const file, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, - const char axis='z', const float align=0) { - CImgList list; - list.load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - if (list._width==1) return list[0].move_to(*this); - return assign(list.get_append(axis,align)); - } - - //! Load sub-images of a .cimg file \newinstance. - static CImg get_load_cimg(std::FILE *const file, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, - const char axis='z', const float align=0) { - return CImg().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); - } - - //! Load image from an INRIMAGE-4 file. - /** - \param filename Filename, as a C-string. - \param[out] voxel_size Pointer to the three voxel sizes read from the file. - **/ - CImg& load_inr(const char *const filename, float *const voxel_size=0) { - return _load_inr(0,filename,voxel_size); - } - - //! Load image from an INRIMAGE-4 file \newinstance. - static CImg get_load_inr(const char *const filename, float *const voxel_size=0) { - return CImg().load_inr(filename,voxel_size); - } - - //! Load image from an INRIMAGE-4 file \overloading. - CImg& load_inr(std::FILE *const file, float *const voxel_size=0) { - return _load_inr(file,0,voxel_size); - } - - //! Load image from an INRIMAGE-4 file \newinstance. - static CImg get_load_inr(std::FILE *const file, float *voxel_size=0) { - return CImg().load_inr(file,voxel_size); - } - - static void _load_inr_header(std::FILE *file, int out[8], float *const voxel_size) { - char item[1024] = { 0 }, tmp1[64] = { 0 }, tmp2[64] = { 0 }; - out[0] = std::fscanf(file,"%63s",item); - out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; - if(cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) - throw CImgIOException("CImg<%s>::load_inr(): INRIMAGE-4 header not found.", - pixel_type()); - - while (std::fscanf(file," %63[^\n]%*c",item)!=EOF && std::strncmp(item,"##}",3)) { - std::sscanf(item," XDIM%*[^0-9]%d",out); - std::sscanf(item," YDIM%*[^0-9]%d",out+1); - std::sscanf(item," ZDIM%*[^0-9]%d",out+2); - std::sscanf(item," VDIM%*[^0-9]%d",out+3); - std::sscanf(item," PIXSIZE%*[^0-9]%d",out+6); - if (voxel_size) { - std::sscanf(item," VX%*[^0-9.+-]%f",voxel_size); - std::sscanf(item," VY%*[^0-9.+-]%f",voxel_size+1); - std::sscanf(item," VZ%*[^0-9.+-]%f",voxel_size+2); - } - if (std::sscanf(item," CPU%*[ =]%s",tmp1)) out[7]=cimg::strncasecmp(tmp1,"sun",3)?0:1; - switch (std::sscanf(item," TYPE%*[ =]%s %s",tmp1,tmp2)) { - case 0 : break; - case 2 : out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; std::strncpy(tmp1,tmp2,sizeof(tmp1)-1); - case 1 : - if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; - if (!cimg::strncasecmp(tmp1,"float",5) || !cimg::strncasecmp(tmp1,"double",6)) out[4] = 1; - if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; - if (out[4]>=0) break; - default : - throw CImgIOException("CImg<%s>::load_inr(): Invalid pixel type '%s' defined in header.", - pixel_type(), - tmp2); - } - } - if(out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) - throw CImgIOException("CImg<%s>::load_inr(): Invalid dimensions (%d,%d,%d,%d) defined in header.", - pixel_type(), - out[0],out[1],out[2],out[3]); - if(out[4]<0 || out[5]<0) - throw CImgIOException("CImg<%s>::load_inr(): Incomplete pixel type defined in header.", - pixel_type()); - if(out[6]<0) - throw CImgIOException("CImg<%s>::load_inr(): Incomplete PIXSIZE field defined in header.", - pixel_type()); - if(out[7]<0) - throw CImgIOException("CImg<%s>::load_inr(): Big/Little Endian coding type undefined in header.", - pixel_type()); - } - - CImg& _load_inr(std::FILE *const file, const char *const filename, float *const voxel_size) { -#define _cimg_load_inr_case(Tf,sign,pixsize,Ts) \ - if (!loaded && fopt[6]==pixsize && fopt[4]==Tf && fopt[5]==sign) { \ - Ts *xval, *const val = new Ts[fopt[0]*fopt[3]]; \ - cimg_forYZ(*this,y,z) { \ - cimg::fread(val,fopt[0]*fopt[3],nfile); \ - if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); \ - xval = val; cimg_forX(*this,x) cimg_forC(*this,c) (*this)(x,y,z,c) = (T)*(xval++); \ - } \ - delete[] val; \ - loaded = true; \ - } - - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_inr(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - int fopt[8], endian=cimg::endianness()?1:0; - bool loaded = false; - if (voxel_size) voxel_size[0] = voxel_size[1] = voxel_size[2] = 1; - _load_inr_header(nfile,fopt,voxel_size); - assign(fopt[0],fopt[1],fopt[2],fopt[3]); - _cimg_load_inr_case(0,0,8,unsigned char); - _cimg_load_inr_case(0,1,8,char); - _cimg_load_inr_case(0,0,16,unsigned short); - _cimg_load_inr_case(0,1,16,short); - _cimg_load_inr_case(0,0,32,unsigned int); - _cimg_load_inr_case(0,1,32,int); - _cimg_load_inr_case(1,0,32,float); - _cimg_load_inr_case(1,1,32,float); - _cimg_load_inr_case(1,0,64,double); - _cimg_load_inr_case(1,1,64,double); - if (!loaded) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_inr(): Unknown pixel type defined in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a EXR file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_exr(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_exr(): Specified filename is (null).", - cimg_instance); - -#ifndef cimg_use_openexr - return load_other(filename); -#else - Imf::RgbaInputFile file(filename); - Imath::Box2i dw = file.dataWindow(); - const int - inwidth = dw.max.x - dw.min.x + 1, - inheight = dw.max.y - dw.min.y + 1; - Imf::Array2D pixels; - pixels.resizeErase(inheight,inwidth); - file.setFrameBuffer(&pixels[0][0] - dw.min.x - dw.min.y*inwidth, 1, inwidth); - file.readPixels(dw.min.y, dw.max.y); - assign(inwidth,inheight,1,4); - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); - cimg_forXY(*this,x,y) { - *(ptr_r++) = (T)pixels[y][x].r; - *(ptr_g++) = (T)pixels[y][x].g; - *(ptr_b++) = (T)pixels[y][x].b; - *(ptr_a++) = (T)pixels[y][x].a; - } - return *this; -#endif - } - - //! Load image from a EXR file \newinstance. - static CImg get_load_exr(const char *const filename) { - return CImg().load_exr(filename); - } - - //! Load image from a PANDORE-5 file. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_pandore(const char *const filename) { - return _load_pandore(0,filename); - } - - //! Load image from a PANDORE-5 file \newinstance. - static CImg get_load_pandore(const char *const filename) { - return CImg().load_pandore(filename); - } - - //! Load image from a PANDORE-5 file \overloading. - CImg& load_pandore(std::FILE *const file) { - return _load_pandore(file,0); - } - - //! Load image from a PANDORE-5 file \newinstance. - static CImg get_load_pandore(std::FILE *const file) { - return CImg().load_pandore(file); - } - - CImg& _load_pandore(std::FILE *const file, const char *const filename) { -#define __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,ndim,stype) \ - cimg::fread(dims,nbdim,nfile); \ - if (endian) cimg::invert_endianness(dims,nbdim); \ - assign(nwidth,nheight,ndepth,ndim); \ - const unsigned int siz = size(); \ - stype *buffer = new stype[siz]; \ - cimg::fread(buffer,siz,nfile); \ - if (endian) cimg::invert_endianness(buffer,siz); \ - T *ptrd = _data; \ - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); \ - buffer-=siz; \ - delete[] buffer - -#define _cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype1,stype2,stype3,ltype) { \ - if (sizeof(stype1)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype1); } \ - else if (sizeof(stype2)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype2); } \ - else if (sizeof(stype3)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype3); } \ - else throw CImgIOException(_cimg_instance \ - "load_pandore(): Unknown pixel datatype in file '%s'.", \ - cimg_instance, \ - filename?filename:"(FILE*)"); } - - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_pandore(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - char header[32] = { 0 }; - cimg::fread(header,12,nfile); - if (cimg::strncasecmp("PANDORE",header,7)) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pandore(): PANDORE header not found in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - unsigned int imageid, dims[8] = { 0 }; - cimg::fread(&imageid,1,nfile); - const bool endian = (imageid>255); - if (endian) cimg::invert_endianness(imageid); - cimg::fread(header,20,nfile); - - switch (imageid) { - case 2: _cimg_load_pandore_case(2,dims[1],1,1,1,unsigned char,unsigned char,unsigned char,1); break; - case 3: _cimg_load_pandore_case(2,dims[1],1,1,1,long,int,short,4); break; - case 4: _cimg_load_pandore_case(2,dims[1],1,1,1,double,float,float,4); break; - case 5: _cimg_load_pandore_case(3,dims[2],dims[1],1,1,unsigned char,unsigned char,unsigned char,1); break; - case 6: _cimg_load_pandore_case(3,dims[2],dims[1],1,1,long,int,short,4); break; - case 7: _cimg_load_pandore_case(3,dims[2],dims[1],1,1,double,float,float,4); break; - case 8: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,unsigned char,unsigned char,unsigned char,1); break; - case 9: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,long,int,short,4); break; - case 10: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,double,float,float,4); break; - case 11 : { // Region 1d - cimg::fread(dims,3,nfile); - if (endian) cimg::invert_endianness(dims,3); - assign(dims[1],1,1,1); - const unsigned siz = size(); - if (dims[2]<256) { - unsigned char *buffer = new unsigned char[siz]; - cimg::fread(buffer,siz,nfile); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - if (dims[2]<65536) { - unsigned short *buffer = new unsigned short[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - unsigned int *buffer = new unsigned int[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } - } - } - break; - case 12 : { // Region 2d - cimg::fread(dims,4,nfile); - if (endian) cimg::invert_endianness(dims,4); - assign(dims[2],dims[1],1,1); - const unsigned int siz = size(); - if (dims[3]<256) { - unsigned char *buffer = new unsigned char[siz]; - cimg::fread(buffer,siz,nfile); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - if (dims[3]<65536) { - unsigned short *buffer = new unsigned short[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - unsigned long *buffer = new unsigned long[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } - } - } - break; - case 13 : { // Region 3d - cimg::fread(dims,5,nfile); - if (endian) cimg::invert_endianness(dims,5); - assign(dims[3],dims[2],dims[1],1); - const unsigned int siz = size(); - if (dims[4]<256) { - unsigned char *buffer = new unsigned char[siz]; - cimg::fread(buffer,siz,nfile); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - if (dims[4]<65536) { - unsigned short *buffer = new unsigned short[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } else { - unsigned int *buffer = new unsigned int[siz]; - cimg::fread(buffer,siz,nfile); - if (endian) cimg::invert_endianness(buffer,siz); - T *ptrd = _data; - cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); - buffer-=siz; - delete[] buffer; - } - } - } - break; - case 16: _cimg_load_pandore_case(4,dims[2],dims[1],1,3,unsigned char,unsigned char,unsigned char,1); break; - case 17: _cimg_load_pandore_case(4,dims[2],dims[1],1,3,long,int,short,4); break; - case 18: _cimg_load_pandore_case(4,dims[2],dims[1],1,3,double,float,float,4); break; - case 19: _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,unsigned char,unsigned char,unsigned char,1); break; - case 20: _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,long,int,short,4); break; - case 21: _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,double,float,float,4); break; - case 22: _cimg_load_pandore_case(2,dims[1],1,1,dims[0],unsigned char,unsigned char,unsigned char,1); break; - case 23: _cimg_load_pandore_case(2,dims[1],1,1,dims[0],long,int,short,4); - case 24: _cimg_load_pandore_case(2,dims[1],1,1,dims[0],unsigned long,unsigned int,unsigned short,4); break; - case 25: _cimg_load_pandore_case(2,dims[1],1,1,dims[0],double,float,float,4); break; - case 26: _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],unsigned char,unsigned char,unsigned char,1); break; - case 27: _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],long,int,short,4); break; - case 28: _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],unsigned long,unsigned int,unsigned short,4); break; - case 29: _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],double,float,float,4); break; - case 30: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],unsigned char,unsigned char,unsigned char,1); break; - case 31: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],long,int,short,4); break; - case 32: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],unsigned long,unsigned int,unsigned short,4); break; - case 33: _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],double,float,float,4); break; - case 34 : { // Points 1d - int ptbuf[4] = { 0 }; - cimg::fread(ptbuf,1,nfile); - if (endian) cimg::invert_endianness(ptbuf,1); - assign(1); (*this)(0) = (T)ptbuf[0]; - } break; - case 35 : { // Points 2d - int ptbuf[4] = { 0 }; - cimg::fread(ptbuf,2,nfile); - if (endian) cimg::invert_endianness(ptbuf,2); - assign(2); (*this)(0) = (T)ptbuf[1]; (*this)(1) = (T)ptbuf[0]; - } break; - case 36 : { // Points 3d - int ptbuf[4] = { 0 }; - cimg::fread(ptbuf,3,nfile); - if (endian) cimg::invert_endianness(ptbuf,3); - assign(3); (*this)(0) = (T)ptbuf[2]; (*this)(1) = (T)ptbuf[1]; (*this)(2) = (T)ptbuf[0]; - } break; - default : - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_pandore(): Unable to load data with ID_type %u in file '%s'.", - cimg_instance, - imageid,filename?filename:"(FILE*)"); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image from a PAR-REC (Philips) file. - /** - \param filename Filename, as a C-string. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_parrec(const char *const filename, const char axis='c', const float align=0) { - CImgList list; - list.load_parrec(filename); - if (list._width==1) return list[0].move_to(*this); - return assign(list.get_append(axis,align)); - } - - //! Load image from a PAR-REC (Philips) file \newinstance. - static CImg get_load_parrec(const char *const filename, const char axis='c', const float align=0) { - return CImg().load_parrec(filename,axis,align); - } - - //! Load image from a raw binary file. - /** - \param filename Filename, as a C-string. - \param size_x Width of the image buffer. - \param size_y Height of the image buffer. - \param size_z Depth of the image buffer. - \param size_c Spectrum of the image buffer. - \param is_multiplexed Tells if the image values are multiplexed along the C-axis. - \param invert_endianness Tells if the endianness of the image buffer must be inverted. - \param offset Starting offset of the read in the specified file. - **/ - CImg& load_raw(const char *const filename, - const unsigned int size_x=0, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, - const bool is_multiplexed=false, const bool invert_endianness=false, - const unsigned long offset=0) { - return _load_raw(0,filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); - } - - //! Load image from a raw binary file \newinstance. - static CImg get_load_raw(const char *const filename, - const unsigned int size_x=0, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, - const bool is_multiplexed=false, const bool invert_endianness=false, - const unsigned long offset=0) { - return CImg().load_raw(filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); - } - - //! Load image from a raw binary file \overloading. - CImg& load_raw(std::FILE *const file, - const unsigned int size_x=0, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, - const bool is_multiplexed=false, const bool invert_endianness=false, - const unsigned long offset=0) { - return _load_raw(file,0,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); - } - - //! Load image from a raw binary file \newinstance. - static CImg get_load_raw(std::FILE *const file, - const unsigned int size_x=0, const unsigned int size_y=1, - const unsigned int size_z=1, const unsigned int size_c=1, - const bool is_multiplexed=false, const bool invert_endianness=false, - const unsigned long offset=0) { - return CImg().load_raw(file,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); - } - - CImg& _load_raw(std::FILE *const file, const char *const filename, - const unsigned int size_x, const unsigned int size_y, - const unsigned int size_z, const unsigned int size_c, - const bool is_multiplexed, const bool invert_endianness, - const unsigned long offset) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_raw(): Specified filename is (null).", - cimg_instance); - unsigned int siz = size_x*size_y*size_z*size_c, _size_x = size_x, _size_y = size_y, _size_z = size_z, _size_c = size_c; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - if (!siz) { // Retrieve file size. - const long fpos = std::ftell(nfile); - if (fpos<0) throw CImgArgumentException(_cimg_instance - "load_raw(): Cannot determine size of input file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - std::fseek(nfile,0,SEEK_END); - siz = _size_y = (unsigned int)std::ftell(nfile)/sizeof(T); - _size_x = _size_z = _size_c = 1; - std::fseek(nfile,fpos,SEEK_SET); - } - std::fseek(nfile,(long)offset,SEEK_SET); - assign(_size_x,_size_y,_size_z,_size_c,0); - if (!is_multiplexed || size_c==1) { - cimg::fread(_data,siz,nfile); - if (invert_endianness) cimg::invert_endianness(_data,siz); - } else { - CImg buf(1,1,1,_size_c); - cimg_forXYZ(*this,x,y,z) { - cimg::fread(buf._data,_size_c,nfile); - if (invert_endianness) cimg::invert_endianness(buf._data,_size_c); - set_vector_at(buf,x,y,z); - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load image sequence using FFMPEG av's libraries. - /** - \param filename Filename, as a C-string. - \param first_frame Index of the first frame to read. - \param last_frame Index of the last frame to read. - \param step_frame Step value for frame reading. - \param pixel_format To be documented. - \param resume To be documented. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, - const char axis='z', const float align=0) { - return get_load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume,axis,align).move_to(*this); - } - - //! Load image sequence using FFMPEG av's libraries \newinstance. - static CImg get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, - const char axis='z', const float align=0) { - return CImgList().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume).get_append(axis,align); - } - - //! Load image sequence from a YUV file. - /** - \param filename Filename, as a C-string. - \param size_x Width of the frames. - \param size_y Height of the frames. - \param first_frame Index of the first frame to read. - \param last_frame Index of the last frame to read. - \param step_frame Step value for frame reading. - \param yuv2rgb Tells if the YUV to RGB transform must be applied. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - **/ - CImg& load_yuv(const char *const filename, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { - return get_load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); - } - - //! Load image sequence from a YUV file \newinstance. - static CImg get_load_yuv(const char *const filename, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { - return CImgList().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); - } - - //! Load image sequence from a YUV file \overloading. - CImg& load_yuv(std::FILE *const file, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { - return get_load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); - } - - //! Load image sequence from a YUV file \newinstance. - static CImg get_load_yuv(std::FILE *const file, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { - return CImgList().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); - } - - //! Load 3d object from a .OFF file. - /** - \param[out] primitives Primitives data of the 3d object. - \param[out] colors Colors data of the 3d object. - \param filename Filename, as a C-string. - **/ - template - CImg& load_off(CImgList& primitives, CImgList& colors, const char *const filename) { - return _load_off(primitives,colors,0,filename); - } - - //! Load 3d object from a .OFF file \newinstance. - template - static CImg get_load_off(CImgList& primitives, CImgList& colors, const char *const filename) { - return CImg().load_off(primitives,colors,filename); - } - - //! Load 3d object from a .OFF file \overloading. - template - CImg& load_off(CImgList& primitives, CImgList& colors, std::FILE *const file) { - return _load_off(primitives,colors,file,0); - } - - //! Load 3d object from a .OFF file \newinstance. - template - static CImg get_load_off(CImgList& primitives, CImgList& colors, std::FILE *const file) { - return CImg().load_off(primitives,colors,file); - } - - template - CImg& _load_off(CImgList& primitives, CImgList& colors, - std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_off(): Specified filename is (null).", - cimg_instance); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); - unsigned int nb_points = 0, nb_primitives = 0, nb_read = 0; - char line[256] = { 0 }; - int err; - - // Skip comments, and read magic string OFF - do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); - if (cimg::strncasecmp(line,"OFF",3) && cimg::strncasecmp(line,"COFF",4)) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_off(): OFF header not found in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); - if ((err = std::sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_off(): Invalid number of vertices or primitives specified in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - } - - // Read points data - assign(nb_points,3); - float X = 0, Y = 0, Z = 0; - cimg_forX(*this,l) { - do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); - if ((err = std::sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_off(): Failed to read vertex %u/%u in file '%s'.", - cimg_instance, - l+1,nb_points,filename?filename:"(FILE*)"); - } - (*this)(l,0) = (T)X; (*this)(l,1) = (T)Y; (*this)(l,2) = (T)Z; - } - - // Read primitive data - primitives.assign(); - colors.assign(); - bool stop_flag = false; - while (!stop_flag) { - float c0 = 0.7f, c1 = 0.7f, c2 = 0.7f; - unsigned int prim = 0, i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0; - *line = 0; - if ((err = std::fscanf(nfile,"%u",&prim))!=1) stop_flag = true; - else { - ++nb_read; - switch (prim) { - case 1 : { - if ((err = std::fscanf(nfile,"%u%255[^\n] ",&i0,line))<2) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0).move_to(primitives); - CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); - } - } break; - case 2 : { - if ((err = std::fscanf(nfile,"%u%u%255[^\n] ",&i0,&i1,line))<2) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i1).move_to(primitives); - CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); - } - } break; - case 3 : { - if ((err = std::fscanf(nfile,"%u%u%u%255[^\n] ",&i0,&i1,&i2,line))<3) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i2,i1).move_to(primitives); - CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); - } - } break; - case 4 : { - if ((err = std::fscanf(nfile,"%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,line))<4) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i3,i2,i1).move_to(primitives); - CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); - } - } break; - case 5 : { - if ((err = std::fscanf(nfile,"%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,line))<5) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i3,i2,i1).move_to(primitives); - CImg::vector(i0,i4,i3).move_to(primitives); - colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); - ++nb_primitives; - } - } break; - case 6 : { - if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,line))<6) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i3,i2,i1).move_to(primitives); - CImg::vector(i0,i5,i4,i3).move_to(primitives); - colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); - ++nb_primitives; - } - } break; - case 7 : { - if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,line))<7) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i4,i3,i1).move_to(primitives); - CImg::vector(i0,i6,i5,i4).move_to(primitives); - CImg::vector(i3,i2,i1).move_to(primitives); - colors.insert(3,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); - ++(++nb_primitives); - } - } break; - case 8 : { - if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,&i7,line))<7) { - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u from file '%s'.", - cimg_instance, - nb_read,nb_primitives,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); - CImg::vector(i0,i3,i2,i1).move_to(primitives); - CImg::vector(i0,i5,i4,i3).move_to(primitives); - CImg::vector(i0,i7,i6,i5).move_to(primitives); - colors.insert(3,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); - ++(++nb_primitives); - } - } break; - default : - cimg::warn(_cimg_instance - "load_off(): Failed to read primitive %u/%u (%u vertices) from file '%s'.", - cimg_instance, - nb_read,nb_primitives,prim,filename?filename:"(FILE*)"); - - err = std::fscanf(nfile,"%*[^\n] "); - } - } - } - if (!file) cimg::fclose(nfile); - if (primitives._width!=nb_primitives) - cimg::warn(_cimg_instance - "load_off(): Only %u/%u primitives read from file '%s'.", - cimg_instance, - primitives._width,nb_primitives,filename?filename:"(FILE*)"); - return *this; - } - - //! Load image sequence using FFMPEG's external tool 'ffmpeg'. - /** - \param filename Filename, as a C-string. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { - return get_load_ffmpeg_external(filename,axis,align).move_to(*this); - } - - //! Load image sequence using FFMPEG's external tool 'ffmpeg' \newinstance. - static CImg get_load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { - return CImgList().load_ffmpeg_external(filename).get_append(axis,align); - } - - //! Load gif file, using Imagemagick or GraphicsMagicks's external tools. - /** - \param filename Filename, as a C-string. - \param use_graphicsmagick Tells if GraphicsMagick's tool 'gm' is used instead of ImageMagick's tool 'convert'. - \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg& load_gif_external(const char *const filename, - const char axis='z', const float align=0) { - return get_load_gif_external(filename,axis,align).move_to(*this); - } - - //! Load gif file, using ImageMagick or GraphicsMagick's external tool 'convert' \newinstance. - static CImg get_load_gif_external(const char *const filename, - const char axis='z', const float align=0) { - return CImgList().load_gif_external(filename).get_append(axis,align); - } - - //! Load image using GraphicsMagick's external tool 'gm'. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_graphicsmagick_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_graphicsmagick_external(): Specified filename is (null).", - cimg_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file = 0; - const CImg s_filename = CImg::string(filename)._system_strescape(); -#if cimg_OS==1 - cimg_snprintf(command,sizeof(command),"%s convert \"%s\" pnm:-", - cimg::graphicsmagick_path(),s_filename.data()); - file = popen(command,"r"); - if (file) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { load_pnm(file); } catch (...) { - pclose(file); - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", - cimg_instance, - filename); - } - pclose(file); - return *this; - } -#endif - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s convert \"%s\" \"%s\"", - cimg::graphicsmagick_path(),s_filename.data(),CImg::string(filetmp)._system_strescape().data()); - cimg::system(command,cimg::graphicsmagick_path()); - if (!(file = std::fopen(filetmp,"rb"))) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimg_instance - "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", - cimg_instance, - filename); - - } else cimg::fclose(file); - load_pnm(filetmp); - std::remove(filetmp); - return *this; - } - - //! Load image using GraphicsMagick's external tool 'gm' \newinstance. - static CImg get_load_graphicsmagick_external(const char *const filename) { - return CImg().load_graphicsmagick_external(filename); - } - - //! Load gzipped image file, using external tool 'gunzip'. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_gzip_external(const char *const filename) { - if (!filename) - throw CImgIOException(_cimg_instance - "load_gzip_external(): Specified filename is (null).", - cimg_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - const char - *const ext = cimg::split_filename(filename,body), - *const ext2 = cimg::split_filename(body,0); - - std::FILE *file = 0; - do { - if (!cimg::strcasecmp(ext,"gz")) { - if (*ext2) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } else { - if (*ext) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", - cimg::gunzip_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); - cimg::system(command); - if (!(file = std::fopen(filetmp,"rb"))) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimg_instance - "load_gzip_external(): Failed to load file '%s' with external command 'gunzip'.", - cimg_instance, - filename); - - } else cimg::fclose(file); - load(filetmp); - std::remove(filetmp); - return *this; - } - - //! Load gzipped image file, using external tool 'gunzip' \newinstance. - static CImg get_load_gzip_external(const char *const filename) { - return CImg().load_gzip_external(filename); - } - - //! Load image using ImageMagick's external tool 'convert'. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_imagemagick_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_imagemagick_external(): Specified filename is (null).", - cimg_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file = 0; - const CImg s_filename = CImg::string(filename)._system_strescape(); -#if cimg_OS==1 - cimg_snprintf(command,sizeof(command),"%s%s \"%s\" pnm:-", - cimg::imagemagick_path(), - !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", - s_filename.data()); - file = popen(command,"r"); - if (file) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { load_pnm(file); } catch (...) { - pclose(file); - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", - cimg_instance, - filename); - } - pclose(file); - return *this; - } -#endif - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s%s \"%s\" \"%s\"", - cimg::imagemagick_path(), - !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", - s_filename.data(),CImg::string(filetmp)._system_strescape().data()); - cimg::system(command,cimg::imagemagick_path()); - if (!(file = std::fopen(filetmp,"rb"))) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimg_instance - "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", - cimg_instance, - filename); - - } else cimg::fclose(file); - load_pnm(filetmp); - std::remove(filetmp); - return *this; - } - - //! Load image using ImageMagick's external tool 'convert' \newinstance. - static CImg get_load_imagemagick_external(const char *const filename) { - return CImg().load_imagemagick_external(filename); - } - - //! Load image from a DICOM file, using XMedcon's external tool 'medcon'. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_medcon_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_medcon_external(): Specified filename is (null).", - cimg_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - cimg::fclose(cimg::fopen(filename,"r")); - std::FILE *file = 0; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s -w -c anlz -o \"%s\" -f \"%s\"", - cimg::medcon_path(), - CImg::string(filetmp)._system_strescape().data(), - CImg::string(filename)._system_strescape().data()); - cimg::system(command); - cimg::split_filename(filetmp,body); - - cimg_snprintf(command,sizeof(command),"%s.hdr",body); - file = std::fopen(command,"rb"); - if (!file) { - cimg_snprintf(command,sizeof(command),"m000-%s.hdr",body); - file = std::fopen(command,"rb"); - if (!file) { - throw CImgIOException(_cimg_instance - "load_medcon_external(): Failed to load file '%s' with external command 'medcon'.", - cimg_instance, - filename); - } - } - cimg::fclose(file); - load_analyze(command); - std::remove(command); - cimg::split_filename(command,body); - cimg_snprintf(command,sizeof(command),"%s.img",body); - std::remove(command); - return *this; - } - - //! Load image from a DICOM file, using XMedcon's external tool 'medcon' \newinstance. - static CImg get_load_medcon_external(const char *const filename) { - return CImg().load_medcon_external(filename); - } - - //! Load image from a RAW Color Camera file, using external tool 'dcraw'. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_dcraw_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_dcraw_external(): Specified filename is (null).", - cimg_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file = 0; - const CImg s_filename = CImg::string(filename)._system_strescape(); -#if cimg_OS==1 - cimg_snprintf(command,sizeof(command),"%s -w -4 -c \"%s\"", - cimg::dcraw_path(),s_filename.data()); - file = popen(command,"r"); - if (file) { - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { load_pnm(file); } catch (...) { - pclose(file); - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", - cimg_instance, - filename); - } - pclose(file); - return *this; - } -#endif - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.ppm",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s -w -4 -c \"%s\" > \"%s\"", - cimg::dcraw_path(),s_filename.data(),CImg::string(filetmp)._system_strescape().data()); - cimg::system(command,cimg::dcraw_path()); - if (!(file = std::fopen(filetmp,"rb"))) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimg_instance - "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", - cimg_instance, - filename); - - } else cimg::fclose(file); - load_pnm(filetmp); - std::remove(filetmp); - return *this; - } - - //! Load image from a RAW Color Camera file, using external tool 'dcraw' \newinstance. - static CImg get_load_dcraw_external(const char *const filename) { - return CImg().load_dcraw_external(filename); - } - - //! Load image from a camera stream, using OpenCV. - /** - \param camera_index Index of the camera to capture images from. - \param skip_frames Number of frames to skip before the capture. - \param release_camera Tells if the camera ressource must be released at the end of the method. - **/ - CImg& load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=false, - const unsigned int capture_width=0, const unsigned int capture_height=0) { -#ifdef cimg_use_opencv - if (camera_index>255) - throw CImgArgumentException(_cimg_instance - "load_camera(): Invalid request for camera #%u (no more than 256 cameras can be managed).", - cimg_instance, - camera_index); - static CvCapture *capture[256] = { 0 }; - if (release_camera) { - if (capture[camera_index]) cvReleaseCapture(&(capture[camera_index])); - capture[camera_index] = 0; - return *this; - } - if (!capture[camera_index]) { - capture[camera_index] = cvCreateCameraCapture(camera_index); - if (!capture[camera_index]) { - throw CImgIOException(_cimg_instance - "load_camera(): Failed to initialize camera #%u.", - cimg_instance, - camera_index); - } - } - if (capture_width) cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_WIDTH,capture_width); - if (capture_height) cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_HEIGHT,capture_height); - const IplImage *img = 0; - for (unsigned int i = 0; iwidthStep - 3*img->width); - assign(img->width,img->height,1,3); - const unsigned char* ptrs = (unsigned char*)img->imageData; - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - if (step>0) cimg_forY(*this,y) { - cimg_forX(*this,x) { *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); } - ptrs+=step; - } else for (unsigned long siz = (unsigned long)img->width*img->height; siz; --siz) { - *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); - } - } -#else - cimg::unused(camera_index,skip_frames,release_camera,capture_width,capture_height); - throw CImgIOException(_cimg_instance - "load_camera(): This function requires the OpenCV library to run " - "(macro 'cimg_use_opencv' must be defined).", - cimg_instance); -#endif - return *this; - } - - //! Load image from a camera stream, using OpenCV \newinstance. - static CImg get_load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=false, - const unsigned int capture_width=0, const unsigned int capture_height=0) { - return CImg().load_camera(camera_index,skip_frames,release_camera,capture_width,capture_height); - } - - //! Load image using various non-native ways. - /** - \param filename Filename, as a C-string. - **/ - CImg& load_other(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimg_instance - "load_other(): Specified filename is (null).", - cimg_instance); - - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { load_magick(filename); } - catch (CImgException&) { - try { load_imagemagick_external(filename); } - catch (CImgException&) { - try { load_graphicsmagick_external(filename); } - catch (CImgException&) { - try { load_cimg(filename); } - catch (CImgException&) { - try { - std::fclose(cimg::fopen(filename,"rb")); - } catch (CImgException&) { - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load_other(): Failed to open file '%s'.", - cimg_instance, - filename); - } - cimg::exception_mode() = omode; - throw CImgIOException(_cimg_instance - "load_other(): Failed to recognize format of file '%s'.", - cimg_instance, - filename); - } - } - } - } - cimg::exception_mode() = omode; - return *this; - } - - //! Load image using various non-native ways \newinstance. - static CImg get_load_other(const char *const filename) { - return CImg().load_other(filename); - } - - //@} - //--------------------------- - // - //! \name Data Output - //@{ - //--------------------------- - - //! Display informations about the image data. - /** - \param title Name for the considered image. - \param display_stats Tells to compute and display image statistics. - **/ - const CImg& print(const char *const title=0, const bool display_stats=true) const { - int xm = 0, ym = 0, zm = 0, vm = 0, xM = 0, yM = 0, zM = 0, vM = 0; - CImg st; - if (!is_empty() && display_stats) { - st = get_stats(); - xm = (int)st[4]; ym = (int)st[5], zm = (int)st[6], vm = (int)st[7]; - xM = (int)st[8]; yM = (int)st[9], zM = (int)st[10], vM = (int)st[11]; - } - const unsigned long siz = size(), msiz = siz*sizeof(T), siz1 = siz-1, mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2), width1 = _width-1; - - char _title[64] = { 0 }; - if (!title) cimg_snprintf(_title,sizeof(_title),"CImg<%s>",pixel_type()); - - std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = (%u,%u,%u,%u) [%lu %s], %sdata%s = (%s*)%p", - cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, - cimg::t_bold,cimg::t_normal,(void*)this, - cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, - mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), - mdisp==0?"b":(mdisp==1?"Kio":"Mio"), - cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); - if (_data) std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end()-1),_is_shared?"shared":"non-shared"); - else std::fprintf(cimg::output()," (%s) = [ ",_is_shared?"shared":"non-shared"); - - if (!is_empty()) cimg_foroff(*this,off) { - std::fprintf(cimg::output(),cimg::type::format(),cimg::type::format(_data[off])); - if (off!=siz1) std::fprintf(cimg::output(),"%s",off%_width==width1?" ; ":" "); - if (off==7 && siz>16) { off = siz1-8; std::fprintf(cimg::output(),"... "); } - } - if (!is_empty() && display_stats) - std::fprintf(cimg::output()," ], %smin%s = %g, %smax%s = %g, %smean%s = %g, %sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), %scoords_max%s = (%u,%u,%u,%u).\n", - cimg::t_bold,cimg::t_normal,st[0], - cimg::t_bold,cimg::t_normal,st[1], - cimg::t_bold,cimg::t_normal,st[2], - cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), - cimg::t_bold,cimg::t_normal,xm,ym,zm,vm, - cimg::t_bold,cimg::t_normal,xM,yM,zM,vM); - else std::fprintf(cimg::output(),"%s].\n",is_empty()?"":" "); - std::fflush(cimg::output()); - return *this; - } - - //! Display image into a CImgDisplay window. - /** - \param disp Display window. - **/ - const CImg& display(CImgDisplay& disp) const { - disp.display(*this); - return *this; - } - - //! Display image into a CImgDisplay window, in an interactive way. - /** - \param disp Display window. - \param display_info Tells if image informations are displayed on the standard output. - **/ - const CImg& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0) const { - return _display(disp,0,display_info,XYZ,false); - } - - //! Display image into an interactive window. - /** - \param title Window title - \param display_info Tells if image informations are displayed on the standard output. - **/ - const CImg& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0) const { - CImgDisplay disp; - return _display(disp,title,display_info,XYZ,false); - } - - const CImg& _display(CImgDisplay &disp, const char *const title, - const bool display_info, unsigned int *const XYZ, - const bool exit_on_simpleclick) const { - unsigned int oldw = 0, oldh = 0, _XYZ[3], key = 0; - int x0 = 0, y0 = 0, z0 = 0, x1 = width()-1, y1 = height()-1, z1 = depth()-1; - - if (!disp) { - disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,1); - if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); - else disp.set_title("%s",title); - } else if (title) disp.set_title("%s",title); - disp.show().flush(); - - const CImg dtitle = CImg::string(disp.title()); - if (display_info) print(dtitle); - - CImg zoom; - for (bool reset_view = true, resize_disp = false, is_first_select = true; !key && !disp.is_closed(); ) { - if (reset_view) { - if (XYZ) { _XYZ[0] = XYZ[0]; _XYZ[1] = XYZ[1]; _XYZ[2] = XYZ[2]; } - else { _XYZ[0] = (x0 + x1)/2; _XYZ[1] = (y0 + y1)/2; _XYZ[2] = (z0 + z1)/2; } - x0 = 0; y0 = 0; z0 = 0; x1 = width()-1; y1 = height()-1; z1 = depth()-1; - oldw = disp.width(); oldh = disp.height(); - reset_view = false; - } - if (!x0 && !y0 && !z0 && x1==width()-1 && y1==height()-1 && z1==depth()-1) { if (is_empty()) zoom.assign(1,1,1,1,0); else zoom.assign(); } - else zoom = get_crop(x0,y0,z0,x1,y1,z1); - - const unsigned int - dx = 1 + x1 - x0, dy = 1 + y1 - y0, dz = 1 + z1 - z0, - tw = dx + (dz>1?dz:0), th = dy + (dz>1?dz:0); - if (!is_empty() && !disp.is_fullscreen() && resize_disp) { - const unsigned int - ttw = tw*disp.width()/oldw, tth = th*disp.height()/oldh, - dM = cimg::max(ttw,tth), diM = (unsigned int)cimg::max(disp.width(),disp.height()), - imgw = cimg::max(16U,ttw*diM/dM), imgh = cimg::max(16U,tth*diM/dM); - disp.set_fullscreen(false).resize(cimg_fitscreen(imgw,imgh,1),false); - resize_disp = false; - } - oldw = tw; oldh = th; - - bool - go_up = false, go_down = false, go_left = false, go_right = false, - go_inc = false, go_dec = false, go_in = false, go_out = false, - go_in_center = false; - const CImg& visu = zoom?zoom:*this; - - disp.set_title("%s",dtitle._data); - if (_width>1 && visu._width==1) disp.set_title("%s | x=%u",disp._title,x0); - if (_height>1 && visu._height==1) disp.set_title("%s | y=%u",disp._title,y0); - if (_depth>1 && visu._depth==1) disp.set_title("%s | z=%u",disp._title,z0); - - if (!is_first_select) { _XYZ[0] = (x1-x0)/2; _XYZ[1] = (y1-y0)/2; _XYZ[2] = (z1-z0)/2; } - const CImg selection = visu._get_select(disp,0,2,_XYZ,x0,y0,z0,is_first_select,_depth>1); - is_first_select = false; - - if (disp.wheel()) { - if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { go_out = !(go_in = disp.wheel()>0); go_in_center = false; } - else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { go_right = !(go_left = disp.wheel()>0); } - else if (disp.is_keyALT() || disp.is_keyALTGR() || _depth==1) { go_down = !(go_up = disp.wheel()>0); } - disp.set_wheel(); - } - - const int - sx0 = selection(0), sy0 = selection(1), sz0 = selection(2), - sx1 = selection(3), sy1 = selection(4), sz1 = selection(5); - if (sx0>=0 && sy0>=0 && sz0>=0 && sx1>=0 && sy1>=0 && sz1>=0) { - x1 = x0 + sx1; y1 = y0 + sy1; z1 = z0 + sz1; - x0+=sx0; y0+=sy0; z0+=sz0; - if (sx0==sx1 && sy0==sy1 && sz0==sz1) { - if (exit_on_simpleclick && (!zoom || is_empty())) break; else reset_view = true; - } - resize_disp = true; - } else switch (key = disp.key()) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : -#endif - case 0 : case cimg::keyCTRLLEFT : case cimg::keyPAD5 : case cimg::keySHIFTLEFT : -#if cimg_OS!=2 - case cimg::keyALTGR : -#endif - case cimg::keyALT : key = 0; break; - case cimg::keyP : if (visu._depth>1 && (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT())) { // Special mode: play stack of frames - const unsigned int - w1 = visu._width*disp.width()/(visu._width+(visu._depth>1?visu._depth:0)), - h1 = visu._height*disp.height()/(visu._height+(visu._depth>1?visu._depth:0)); - float frame_timing = 5; - bool is_stopped = false; - disp.set_key(key,false).set_wheel().resize(cimg_fitscreen(w1,h1,1),false); key = 0; - for (unsigned int timer = 0; !key && !disp.is_closed() && !disp.button(); ) { - if (disp.is_resized()) disp.resize(false); - if (!timer) { - visu.get_slice((int)_XYZ[2]).display(disp.set_title("%s | z=%d",dtitle.data(),_XYZ[2])); - (++_XYZ[2])%=visu._depth; - } - if (!is_stopped) { if (++timer>(unsigned int)frame_timing) timer = 0; } else timer = ~0U; - if (disp.wheel()) { frame_timing-=disp.wheel()/3.0f; disp.set_wheel(); } - switch (key = disp.key()) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : -#endif - case cimg::keyCTRLLEFT : key = 0; break; - case cimg::keyPAGEUP : frame_timing-=0.3f; key = 0; break; - case cimg::keyPAGEDOWN : frame_timing+=0.3f; key = 0; break; - case cimg::keySPACE : is_stopped = !is_stopped; disp.set_key(key,false); key = 0; break; - case cimg::keyARROWLEFT : case cimg::keyARROWUP : is_stopped = true; timer = 0; key = 0; break; - case cimg::keyARROWRIGHT : case cimg::keyARROWDOWN : is_stopped = true; (_XYZ[2]+=visu._depth-2)%=visu._depth; timer = 0; key = 0; break; - case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), - CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false); - disp.set_key(key,false); key = 0; - } break; - case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false).set_key(key,false); key = 0; - } break; - case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(_width,_height,_depth),false).set_key(key,false); key = 0; - } break; - case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen().set_key(key,false); key = 0; - } break; - } - frame_timing = frame_timing<1?1:(frame_timing>39?39:frame_timing); - disp.wait(20); - } - const unsigned int - w2 = (visu._width + (visu._depth>1?visu._depth:0))*disp.width()/visu._width, - h2 = (visu._height + (visu._depth>1?visu._depth:0))*disp.height()/visu._height; - disp.resize(cimg_fitscreen(w2,h2,1),false).set_title(dtitle.data()).set_key().set_button().set_wheel(); - key = 0; - } break; - case cimg::keyHOME : reset_view = resize_disp = true; key = 0; break; - case cimg::keyPADADD : go_in = true; go_in_center = true; key = 0; break; - case cimg::keyPADSUB : go_out = true; key = 0; break; - case cimg::keyARROWLEFT : case cimg::keyPAD4: go_left = true; key = 0; break; - case cimg::keyARROWRIGHT : case cimg::keyPAD6: go_right = true; key = 0; break; - case cimg::keyARROWUP : case cimg::keyPAD8: go_up = true; key = 0; break; - case cimg::keyARROWDOWN : case cimg::keyPAD2: go_down = true; key = 0; break; - case cimg::keyPAD7 : go_up = go_left = true; key = 0; break; - case cimg::keyPAD9 : go_up = go_right = true; key = 0; break; - case cimg::keyPAD1 : go_down = go_left = true; key = 0; break; - case cimg::keyPAD3 : go_down = go_right = true; key = 0; break; - case cimg::keyPAGEUP : go_inc = true; key = 0; break; - case cimg::keyPAGEDOWN : go_dec = true; key = 0; break; - } - if (go_in) { - const int - mx = go_in_center?disp.width()/2:disp.mouse_x(), - my = go_in_center?disp.height()/2:disp.mouse_y(), - mX = mx*(_width+(_depth>1?_depth:0))/disp.width(), - mY = my*(_height+(_depth>1?_depth:0))/disp.height(); - int X = _XYZ[0], Y = _XYZ[1], Z = _XYZ[2]; - if (mX=height()) { X = x0 + mX*(1+x1-x0)/_width; Z = z0 + (mY-_height)*(1+z1-z0)/_depth; Y = _XYZ[1]; } - if (mX>=width() && mY4) { x0 = X - 7*(X-x0)/8; x1 = X + 7*(x1-X)/8; } - if (y1-y0>4) { y0 = Y - 7*(Y-y0)/8; y1 = Y + 7*(y1-Y)/8; } - if (z1-z0>4) { z0 = Z - 7*(Z-z0)/8; z1 = Z + 7*(z1-Z)/8; } - } - if (go_out) { - const int - delta_x = (x1-x0)/8, delta_y = (y1-y0)/8, delta_z = (z1-z0)/8, - ndelta_x = delta_x?delta_x:(_width>1?1:0), - ndelta_y = delta_y?delta_y:(_height>1?1:0), - ndelta_z = delta_z?delta_z:(_depth>1?1:0); - x0-=ndelta_x; y0-=ndelta_y; z0-=ndelta_z; - x1+=ndelta_x; y1+=ndelta_y; z1+=ndelta_z; - if (x0<0) { x1-=x0; x0 = 0; if (x1>=width()) x1 = width() - 1; } - if (y0<0) { y1-=y0; y0 = 0; if (y1>=height()) y1 = height() - 1; } - if (z0<0) { z1-=z0; z0 = 0; if (z1>=depth()) z1 = depth() - 1; } - if (x1>=width()) { x0-=(x1-width()+1); x1 = width()-1; if (x0<0) x0 = 0; } - if (y1>=height()) { y0-=(y1-height()+1); y1 = height()-1; if (y0<0) y0 = 0; } - if (z1>=depth()) { z0-=(z1-depth()+1); z1 = depth()-1; if (z0<0) z0 = 0; } - } - if (go_left) { - const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); - if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } - else { x1-=x0; x0 = 0; } - } - if (go_right) { - const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); - if (x1+ndelta1?1:0); - if (y0-ndelta>=0) { y0-=ndelta; y1-=ndelta; } - else { y1-=y0; y0 = 0; } - } - if (go_down) { - const int delta = (y1-y0)/5, ndelta = delta?delta:(_height>1?1:0); - if (y1+ndelta1?1:0); - if (z0-ndelta>=0) { z0-=ndelta; z1-=ndelta; } - else { z1-=z0; z0 = 0; } - } - if (go_dec) { - const int delta = (z1-z0)/5, ndelta = delta?delta:(_depth>1?1:0); - if (z1+ndelta - const CImg& display_object3d(CImgDisplay& disp, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return _display_object3d(disp,0,vertices,primitives,colors,opacities,centering,render_static, - render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(const char *const title, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - CImgDisplay disp; - return _display_object3d(disp,title,vertices,primitives,colors,opacities,centering,render_static, - render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(CImgDisplay &disp, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(disp,vertices,primitives,colors,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(const char *const title, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(title,vertices,primitives,colors,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(CImgDisplay &disp, - const CImg& vertices, - const CImgList& primitives, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(disp,vertices,primitives,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(const char *const title, - const CImg& vertices, - const CImgList& primitives, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(title,vertices,primitives,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(CImgDisplay &disp, - const CImg& vertices, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(disp,vertices,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - //! Display object 3d in an interactive window \simplification. - template - const CImg& display_object3d(const char *const title, - const CImg& vertices, - const bool centering=true, - const int render_static=4, const int render_motion=1, - const bool is_double_sided=true, const float focale=700, - const float light_x=0, const float light_y=0, const float light_z=-5e8f, - const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { - return display_object3d(title,vertices,CImgList(),centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - - template - const CImg& _display_object3d(CImgDisplay& disp, const char *const title, - const CImg& vertices, - const CImgList& primitives, - const CImgList& colors, - const to& opacities, - const bool centering, - const int render_static, const int render_motion, - const bool is_double_sided, const float focale, - const float light_x, const float light_y, const float light_z, - const float specular_lightness, const float specular_shininess, - const bool display_axes, float *const pose_matrix) const { - typedef typename cimg::superset::type tpfloat; - - // Check input arguments - if (is_empty()) { - if (disp) return CImg(disp.width(),disp.height(),1,(colors && colors[0].size()==1)?1:3,0). - _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - else return CImg(1,2,1,1,64,128).resize(cimg_fitscreen(640,480,1),1,(colors && colors[0].size()==1)?1:3,3). - _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } else { if (disp) disp.resize(*this,false); } - char error_message[1024] = { 0 }; - if (!vertices.is_object3d(primitives,colors,opacities,true,error_message)) - throw CImgArgumentException(_cimg_instance - "display_object3d(): Invalid specified 3d object (%u,%u) (%s).", - cimg_instance,vertices._width,primitives._width,error_message); - if (vertices._width && !primitives) { - CImgList nprimitives(vertices._width,1,1,1,1); - cimglist_for(nprimitives,l) nprimitives(l,0) = l; - return _display_object3d(disp,title,vertices,nprimitives,colors,opacities,centering, - render_static,render_motion,is_double_sided,focale, - light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); - } - if (!disp) { - disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,3); - if (!title) disp.set_title("CImg<%s> (%u vertices, %u primitives)",pixel_type(),vertices._width,primitives._width); - } else if (title) disp.set_title("%s",title); - - // Init 3d objects and compute object statistics - CImg - pose, - rotated_vertices(vertices._width,3), - bbox_vertices, rotated_bbox_vertices, - axes_vertices, rotated_axes_vertices, - bbox_opacities, axes_opacities; - CImgList bbox_primitives, axes_primitives; - CImgList reverse_primitives; - CImgList bbox_colors, bbox_colors2, axes_colors; - unsigned int ns_width = 0, ns_height = 0; - int _is_double_sided = (int)is_double_sided; - bool ndisplay_axes = display_axes; - const CImg - background_color(1,1,1,_spectrum,0), - foreground_color(1,1,1,_spectrum,255); - float - Xoff = 0, Yoff = 0, Zoff = 0, sprite_scale = 1, - xm = 0, xM = vertices?vertices.get_shared_row(0).max_min(xm):0, - ym = 0, yM = vertices?vertices.get_shared_row(1).max_min(ym):0, - zm = 0, zM = vertices?vertices.get_shared_row(2).max_min(zm):0; - const float delta = cimg::max(xM-xm,yM-ym,zM-zm); - - rotated_bbox_vertices = bbox_vertices.assign(8,3,1,1, - xm,xM,xM,xm,xm,xM,xM,xm, - ym,ym,yM,yM,ym,ym,yM,yM, - zm,zm,zm,zm,zM,zM,zM,zM); - bbox_primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 1,2,6,5, 0,4,7,3, 0,1,5,4, 2,3,7,6); - bbox_colors.assign(6,_spectrum,1,1,1,background_color[0]); - bbox_colors2.assign(6,_spectrum,1,1,1,foreground_color[0]); - bbox_opacities.assign(bbox_colors._width,1,1,1,0.3f); - - rotated_axes_vertices = axes_vertices.assign(7,3,1,1, - 0,20,0,0,22,-6,-6, - 0,0,20,0,-6,22,-6, - 0,0,0,20,0,0,22); - axes_opacities.assign(3,1,1,1,1); - axes_colors.assign(3,_spectrum,1,1,1,foreground_color[0]); - axes_primitives.assign(3,1,2,1,1, 0,1, 0,2, 0,3); - - // Begin user interaction loop - CImg visu0(*this), visu; - CImg zbuffer(visu0.width(),visu0.height(),1,1,0); - bool init_pose = true, clicked = false, redraw = true; - unsigned int key = 0; - int - x0 = 0, y0 = 0, x1 = 0, y1 = 0, - nrender_static = render_static, - nrender_motion = render_motion; - disp.show().flush(); - - while (!disp.is_closed() && !key) { - - // Init object pose - if (init_pose) { - const float - ratio = delta>0?(2.0f*cimg::min(disp.width(),disp.height())/(3.0f*delta)):1, - dx = (xM + xm)/2, dy = (yM + ym)/2, dz = (zM + zm)/2; - if (centering) - CImg(4,3,1,1, ratio,0.,0.,-ratio*dx, 0.,ratio,0.,-ratio*dy, 0.,0.,ratio,-ratio*dz).move_to(pose); - else CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose); - if (pose_matrix) { - CImg pose0(pose_matrix,4,3,1,1,false); - pose0.resize(4,4,1,1,0); pose.resize(4,4,1,1,0); - pose0(3,3) = pose(3,3) = 1; - (pose0*pose).get_crop(0,0,3,2).move_to(pose); - Xoff = pose_matrix[12]; Yoff = pose_matrix[13]; Zoff = pose_matrix[14]; sprite_scale = pose_matrix[15]; - } else { Xoff = Yoff = Zoff = 0; sprite_scale = 1; } - init_pose = false; - redraw = true; - } - - // Rotate and draw 3d object - if (redraw) { - const float - r00 = pose(0,0), r10 = pose(1,0), r20 = pose(2,0), r30 = pose(3,0), - r01 = pose(0,1), r11 = pose(1,1), r21 = pose(2,1), r31 = pose(3,1), - r02 = pose(0,2), r12 = pose(1,2), r22 = pose(2,2), r32 = pose(3,2); - if ((clicked && nrender_motion>=0) || (!clicked && nrender_static>=0)) - cimg_forX(vertices,l) { - const float x = (float)vertices(l,0), y = (float)vertices(l,1), z = (float)vertices(l,2); - rotated_vertices(l,0) = r00*x + r10*y + r20*z + r30; - rotated_vertices(l,1) = r01*x + r11*y + r21*z + r31; - rotated_vertices(l,2) = r02*x + r12*y + r22*z + r32; - } - else cimg_forX(bbox_vertices,l) { - const float x = bbox_vertices(l,0), y = bbox_vertices(l,1), z = bbox_vertices(l,2); - rotated_bbox_vertices(l,0) = r00*x + r10*y + r20*z + r30; - rotated_bbox_vertices(l,1) = r01*x + r11*y + r21*z + r31; - rotated_bbox_vertices(l,2) = r02*x + r12*y + r22*z + r32; - } - - // Draw objects - visu = visu0; - if ((clicked && nrender_motion<0) || (!clicked && nrender_static<0)) - visu.draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, - rotated_bbox_vertices,bbox_primitives,bbox_colors,bbox_opacities,2,false,focale). - draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, - rotated_bbox_vertices,bbox_primitives,bbox_colors2,1,false,focale); - else visu._draw_object3d((void*)0,(!clicked && nrender_static>0)?zbuffer.fill(0):CImg::empty(), - Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, - rotated_vertices,reverse_primitives?reverse_primitives:primitives, - colors,opacities,clicked?nrender_motion:nrender_static,_is_double_sided==1,focale, - width()/2.0f+light_x,height()/2.0f+light_y,light_z+Zoff,specular_lightness,specular_shininess, - sprite_scale); - // Draw axes - if (ndisplay_axes) { - const float - n = (float)std::sqrt(1e-8 + r00*r00 + r01*r01 + r02*r02), - _r00 = r00/n, _r10 = r10/n, _r20 = r20/n, - _r01 = r01/n, _r11 = r11/n, _r21 = r21/n, - _r02 = r01/n, _r12 = r12/n, _r22 = r22/n, - Xaxes = 25, Yaxes = visu._height - 38.0f; - cimg_forX(axes_vertices,l) { - const float - x = axes_vertices(l,0), - y = axes_vertices(l,1), - z = axes_vertices(l,2); - rotated_axes_vertices(l,0) = _r00*x + _r10*y + _r20*z; - rotated_axes_vertices(l,1) = _r01*x + _r11*y + _r21*z; - rotated_axes_vertices(l,2) = _r02*x + _r12*y + _r22*z; - } - axes_opacities(0,0) = (rotated_axes_vertices(1,2)>0)?0.5f:1.0f; - axes_opacities(1,0) = (rotated_axes_vertices(2,2)>0)?0.5f:1.0f; - axes_opacities(2,0) = (rotated_axes_vertices(3,2)>0)?0.5f:1.0f; - visu.draw_object3d(Xaxes,Yaxes,0,rotated_axes_vertices,axes_primitives,axes_colors,axes_opacities,1,false,focale). - draw_text((int)(Xaxes+rotated_axes_vertices(4,0)), - (int)(Yaxes+rotated_axes_vertices(4,1)), - "X",axes_colors[0]._data,0,axes_opacities(0,0),13). - draw_text((int)(Xaxes+rotated_axes_vertices(5,0)), - (int)(Yaxes+rotated_axes_vertices(5,1)), - "Y",axes_colors[1]._data,0,axes_opacities(1,0),13). - draw_text((int)(Xaxes+rotated_axes_vertices(6,0)), - (int)(Yaxes+rotated_axes_vertices(6,1)), - "Z",axes_colors[2]._data,0,axes_opacities(2,0),13); - } - visu.display(disp); - if (!clicked || nrender_motion==nrender_static) redraw = false; - } - - // Handle user interaction - disp.wait(); - if ((disp.button() || disp.wheel()) && disp.mouse_x()>=0 && disp.mouse_y()>=0) { - redraw = true; - if (!clicked) { x0 = x1 = disp.mouse_x(); y0 = y1 = disp.mouse_y(); if (!disp.wheel()) clicked = true; } - else { x1 = disp.mouse_x(); y1 = disp.mouse_y(); } - if (disp.button()&1) { - const float - R = 0.45f*cimg::min(disp.width(),disp.height()), - R2 = R*R, - u0 = (float)(x0-disp.width()/2), - v0 = (float)(y0-disp.height()/2), - u1 = (float)(x1-disp.width()/2), - v1 = (float)(y1-disp.height()/2), - n0 = (float)std::sqrt(u0*u0+v0*v0), - n1 = (float)std::sqrt(u1*u1+v1*v1), - nu0 = n0>R?(u0*R/n0):u0, - nv0 = n0>R?(v0*R/n0):v0, - nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), - nu1 = n1>R?(u1*R/n1):u1, - nv1 = n1>R?(v1*R/n1):v1, - nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), - u = nv0*nw1-nw0*nv1, - v = nw0*nu1-nu0*nw1, - w = nv0*nu1-nu0*nv1, - n = (float)std::sqrt(u*u+v*v+w*w), - alpha = (float)std::asin(n/R2); - (CImg::rotation_matrix(u,v,w,alpha)*pose).move_to(pose); - x0 = x1; y0 = y1; - } - if (disp.button()&2) { - if (focale>0) Zoff-=(y0-y1)*focale/400; - else { const float s = std::exp((y0-y1)/400.0f); pose*=s; sprite_scale*=s; } - x0 = x1; y0 = y1; - } - if (disp.wheel()) { - if (focale>0) Zoff-=disp.wheel()*focale/20; - else { const float s = std::exp(disp.wheel()/20.0f); pose*=s; sprite_scale*=s; } - disp.set_wheel(); - } - if (disp.button()&4) { Xoff+=(x1-x0); Yoff+=(y1-y0); x0 = x1; y0 = y1; } - if ((disp.button()&1) && (disp.button()&2)) { - init_pose = true; disp.set_button(); x0 = x1; y0 = y1; - pose = CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0); - } - } else if (clicked) { x0 = x1; y0 = y1; clicked = false; redraw = true; } - - switch (key = disp.key()) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : -#endif - case 0 : case cimg::keyCTRLLEFT : key = 0; break; - case cimg::keyD: if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), - CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). - _is_resized = true; - disp.set_key(key,false); key = 0; - } break; - case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; - disp.set_key(key,false); key = 0; - } break; - case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(_width,_height,_depth),false)._is_resized = true; - disp.set_key(key,false); key = 0; - } break; - case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - if (!ns_width || !ns_height || - ns_width>(unsigned int)disp.screen_width() || ns_height>(unsigned int)disp.screen_height()) { - ns_width = disp.screen_width()*3U/4; - ns_height = disp.screen_height()*3U/4; - } - if (disp.is_fullscreen()) disp.resize(ns_width,ns_height,false); - else { - ns_width = (unsigned int)disp.width(); ns_height = disp.height(); - disp.resize(disp.screen_width(),disp.screen_height(),false); - } - disp.toggle_fullscreen()._is_resized = true; - disp.set_key(key,false); key = 0; - } break; - case cimg::keyT : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Switch single/double-sided primitives. - if (--_is_double_sided==-2) _is_double_sided = 1; - if (_is_double_sided>=0) reverse_primitives.assign(); - else primitives.get_reverse_object3d().move_to(reverse_primitives); - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyZ : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Enable/disable Z-buffer - if (zbuffer) zbuffer.assign(); - else zbuffer.assign(visu0.width(),visu0.height(),1,1,0); - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Show/hide 3d axes. - ndisplay_axes = !ndisplay_axes; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF1 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to points. - nrender_motion = (nrender_static==0 && nrender_motion!=0)?0:-1; nrender_static = 0; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF2 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to lines. - nrender_motion = (nrender_static==1 && nrender_motion!=1)?1:-1; nrender_static = 1; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF3 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to flat. - nrender_motion = (nrender_static==2 && nrender_motion!=2)?2:-1; nrender_static = 2; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF4 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to flat-shaded. - nrender_motion = (nrender_static==3 && nrender_motion!=3)?3:-1; nrender_static = 3; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF5 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to gouraud-shaded. - nrender_motion = (nrender_static==4 && nrender_motion!=4)?4:-1; nrender_static = 4; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyF6 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to phong-shaded. - nrender_motion = (nrender_static==5 && nrender_motion!=5)?5:-1; nrender_static = 5; - disp.set_key(key,false); key = 0; redraw = true; - } break; - case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save snapshot - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu).draw_text(0,0," Saving snapshot... ",foreground_color._data,background_color._data,0.7f,13).display(disp); - visu.save(filename); - (+visu).draw_text(0,0," Snapshot '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; - case cimg::keyG : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .off file - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.off",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); - vertices.save_off(reverse_primitives?reverse_primitives:primitives,colors,filename); - (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; - case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .cimg file - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { -#ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); -#else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); -#endif - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); - vertices.get_object3dtoCImg3d(reverse_primitives?reverse_primitives:primitives,colors,opacities).save(filename); - (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; -#ifdef cimg_use_board - case cimg::keyP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .EPS file - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.eps",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu).draw_text(0,0," Saving EPS snapshot... ",foreground_color._data,background_color._data,0.7f,13).display(disp); - LibBoard::Board board; - (+visu)._draw_object3d(&board,zbuffer.fill(0), - Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, - rotated_vertices,reverse_primitives?reverse_primitives:primitives, - colors,opacities,clicked?nrender_motion:nrender_static, - _is_double_sided==1,focale, - visu.width()/2.0f+light_x,visu.height()/2.0f+light_y,light_z+Zoff,specular_lightness,specular_shininess, - sprite_scale); - board.saveEPS(filename); - (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; - case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .SVG file - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.svg",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu).draw_text(0,0," Saving SVG snapshot... ",foreground_color._data,background_color._data,0.7f,13).display(disp); - LibBoard::Board board; - (+visu)._draw_object3d(&board,zbuffer.fill(0), - Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, - rotated_vertices,reverse_primitives?reverse_primitives:primitives, - colors,opacities,clicked?nrender_motion:nrender_static, - _is_double_sided==1,focale, - visu.width()/2.0f+light_x,visu.height()/2.0f+light_y,light_z+Zoff,specular_lightness,specular_shininess, - sprite_scale); - board.saveSVG(filename); - (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); - disp.set_key(key,false); key = 0; - } break; -#endif - } - if (disp.is_resized()) { - disp.resize(false); visu0 = get_resize(disp,1); - if (zbuffer) zbuffer.assign(disp.width(),disp.height()); - redraw = true; - } - } - if (pose_matrix) { - std::memcpy(pose_matrix,pose._data,12*sizeof(float)); - pose_matrix[12] = Xoff; pose_matrix[13] = Yoff; pose_matrix[14] = Zoff; pose_matrix[15] = sprite_scale; - } - disp.set_button().set_key(key); - return *this; - } - - //! Display 1d graph in an interactive window. - /** - \param disp Display window. - \param plot_type Plot type. Can be { 0=points | 1=segments | 2=splines | 3=bars }. - \param vertex_type Vertex type. - \param labelx Title for the horizontal axis, as a C-string. - \param xmin Minimum value along the X-axis. - \param xmax Maximum value along the X-axis. - \param labely Title for the vertical axis, as a C-string. - \param ymin Minimum value along the X-axis. - \param ymax Maximum value along the X-axis. - **/ - const CImg& display_graph(CImgDisplay &disp, - const unsigned int plot_type=1, const unsigned int vertex_type=1, - const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { - return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); - } - - //! Display 1d graph in an interactive window \overloading. - const CImg& display_graph(const char *const title=0, - const unsigned int plot_type=1, const unsigned int vertex_type=1, - const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { - CImgDisplay disp; - return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); - } - - const CImg& _display_graph(CImgDisplay &disp, const char *const title=0, - const unsigned int plot_type=1, const unsigned int vertex_type=1, - const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "display_graph(): Empty instance.", - cimg_instance); - if (!disp) disp.assign(cimg_fitscreen(640,480,1),0,0).set_title(title?"%s":"CImg<%s>",title?title:pixel_type()); - const unsigned long siz = (unsigned long)_width*_height*_depth, siz1 = cimg::max(1U,siz-1); - const unsigned int old_normalization = disp.normalization(); - disp.show().flush()._normalization = 0; - - double y0 = ymin, y1 = ymax, nxmin = xmin, nxmax = xmax; - if (nxmin==nxmax) { nxmin = 0; nxmax = siz1; } - int x0 = 0, x1 = width()*height()*depth() - 1, key = 0; - - for (bool reset_view = true, resize_disp = false; !key && !disp.is_closed(); ) { - if (reset_view) { x0 = 0; x1 = width()*height()*depth()-1; y0 = ymin; y1 = ymax; reset_view = false; } - CImg zoom(x1-x0+1,1,1,spectrum()); - cimg_forC(*this,c) zoom.get_shared_channel(c) = CImg(data(x0,0,0,c),x1-x0+1,1,1,1,true); - - if (y0==y1) { y0 = zoom.min_max(y1); const double dy = y1 - y0; y0-=dy/20; y1+=dy/20; } - if (y0==y1) { --y0; ++y1; } - const CImg selection = zoom.get_select_graph(disp,plot_type,vertex_type, - labelx, - nxmin + x0*(nxmax-nxmin)/siz1, - nxmin + x1*(nxmax-nxmin)/siz1, - labely,y0,y1); - const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); - if (selection[0]>=0) { - if (selection[2]<0) reset_view = true; - else { - x1 = x0 + selection[2]; x0+=selection[0]; - if (selection[1]>=0 && selection[3]>=0) { - y0 = y1 - selection[3]*(y1-y0)/(disp.height()-32); - y1-=selection[1]*(y1-y0)/(disp.height()-32); - } - } - } else { - bool go_in = false, go_out = false, go_left = false, go_right = false, go_up = false, go_down = false; - switch (key = disp.key()) { - case cimg::keyHOME : reset_view = resize_disp = true; key = 0; disp.set_key(); break; - case cimg::keyPADADD : go_in = true; go_out = false; key = 0; disp.set_key(); break; - case cimg::keyPADSUB : go_out = true; go_in = false; key = 0; disp.set_key(); break; - case cimg::keyARROWLEFT : case cimg::keyPAD4 : go_left = true; go_right = false; key = 0; disp.set_key(); break; - case cimg::keyARROWRIGHT : case cimg::keyPAD6 : go_right = true; go_left = false; key = 0; disp.set_key(); break; - case cimg::keyARROWUP : case cimg::keyPAD8 : go_up = true; go_down = false; key = 0; disp.set_key(); break; - case cimg::keyARROWDOWN : case cimg::keyPAD2 : go_down = true; go_up = false; key = 0; disp.set_key(); break; - case cimg::keyPAD7 : go_left = true; go_up = true; key = 0; disp.set_key(); break; - case cimg::keyPAD9 : go_right = true; go_up = true; key = 0; disp.set_key(); break; - case cimg::keyPAD1 : go_left = true; go_down = true; key = 0; disp.set_key(); break; - case cimg::keyPAD3 : go_right = true; go_down = true; key = 0; disp.set_key(); break; - } - if (disp.wheel()) { - if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_out = !(go_in = disp.wheel()>0); - else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) go_left = !(go_right = disp.wheel()>0); - else go_up = !(go_down = disp.wheel()<0); - key = 0; - } - - if (go_in) { - const int - xsiz = x1 - x0, - mx = (mouse_x-16)*xsiz/(disp.width()-32), - cx = x0 + (mx<0?0:(mx>=xsiz?xsiz:mx)); - if (x1-x0>4) { - x0 = cx - 7*(cx-x0)/8; x1 = cx + 7*(x1-cx)/8; - if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - const double - ysiz = y1 - y0, - my = (mouse_y-16)*ysiz/(disp.height()-32), - cy = y1 - (my<0?0:(my>=ysiz?ysiz:my)); - y0 = cy - 7*(cy-y0)/8; y1 = cy + 7*(y1-cy)/8; - } else y0 = y1 = 0; - } - } - if (go_out) { - if (x0>0 || x1<(int)siz1) { - const int delta_x = (x1-x0)/8, ndelta_x = delta_x?delta_x:(siz>1?1:0); - const double ndelta_y = (y1-y0)/8; - x0-=ndelta_x; x1+=ndelta_x; - y0-=ndelta_y; y1+=ndelta_y; - if (x0<0) { x1-=x0; x0 = 0; if (x1>=(int)siz) x1 = (int)siz1; } - if (x1>=(int)siz) { x0-=(x1-siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } - } - } - if (go_left) { - const int delta = (x1-x0)/5, ndelta = delta?delta:1; - if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } - else { x1-=x0; x0 = 0; } - go_left = false; - } - if (go_right) { - const int delta = (x1-x0)/5, ndelta = delta?delta:1; - if (x1+ndelta<(int)siz) { x0+=ndelta; x1+=ndelta; } - else { x0+=(siz1-x1); x1 = siz1; } - go_right = false; - } - if (go_up) { - const double delta = (y1-y0)/10, ndelta = delta?delta:1; - y0+=ndelta; y1+=ndelta; - go_up = false; - } - if (go_down) { - const double delta = (y1-y0)/10, ndelta = delta?delta:1; - y0-=ndelta; y1-=ndelta; - go_down = false; - } - } - } - disp._normalization = old_normalization; - return *this; - } - - //! Save image as a file. - /** - \param filename Filename, as a C-string. - \param number When positive, represents an index added to the filename. Otherwise, no number is added. - \param digits Number of digits used for adding the number to the filename. - \note - - The used file format is defined by the file extension in the filename \p filename. - - Parameter \p number can be used to add a 6-digit number to the filename before saving. - - **/ - const CImg& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save(): Specified filename is (null).", - cimg_instance); - // Do not test for empty instances, since .cimg format is able to manage empty instances. - const char *const ext = cimg::split_filename(filename); - char nfilename[1024] = { 0 }; - const char *const fn = (number>=0)?cimg::number_filename(filename,number,digits,nfilename):filename; - -#ifdef cimg_save_plugin - cimg_save_plugin(fn); -#endif -#ifdef cimg_save_plugin1 - cimg_save_plugin1(fn); -#endif -#ifdef cimg_save_plugin2 - cimg_save_plugin2(fn); -#endif -#ifdef cimg_save_plugin3 - cimg_save_plugin3(fn); -#endif -#ifdef cimg_save_plugin4 - cimg_save_plugin4(fn); -#endif -#ifdef cimg_save_plugin5 - cimg_save_plugin5(fn); -#endif -#ifdef cimg_save_plugin6 - cimg_save_plugin6(fn); -#endif -#ifdef cimg_save_plugin7 - cimg_save_plugin7(fn); -#endif -#ifdef cimg_save_plugin8 - cimg_save_plugin8(fn); -#endif - // Ascii formats - if (!cimg::strcasecmp(ext,"asc")) return save_ascii(fn); - else if (!cimg::strcasecmp(ext,"dlm") || - !cimg::strcasecmp(ext,"txt")) return save_dlm(fn); - else if (!cimg::strcasecmp(ext,"cpp") || - !cimg::strcasecmp(ext,"hpp") || - !cimg::strcasecmp(ext,"h") || - !cimg::strcasecmp(ext,"c")) return save_cpp(fn); - - // 2d binary formats - else if (!cimg::strcasecmp(ext,"bmp")) return save_bmp(fn); - else if (!cimg::strcasecmp(ext,"jpg") || - !cimg::strcasecmp(ext,"jpeg") || - !cimg::strcasecmp(ext,"jpe") || - !cimg::strcasecmp(ext,"jfif") || - !cimg::strcasecmp(ext,"jif")) return save_jpeg(fn); - else if (!cimg::strcasecmp(ext,"rgb")) return save_rgb(fn); - else if (!cimg::strcasecmp(ext,"rgba")) return save_rgba(fn); - else if (!cimg::strcasecmp(ext,"png")) return save_png(fn); - else if (!cimg::strcasecmp(ext,"pgm") || - !cimg::strcasecmp(ext,"ppm") || - !cimg::strcasecmp(ext,"pnm")) return save_pnm(fn); - else if (!cimg::strcasecmp(ext,"pnk")) return save_pnk(fn); - else if (!cimg::strcasecmp(ext,"pfm")) return save_pfm(fn); - else if (!cimg::strcasecmp(ext,"exr")) return save_exr(fn); - else if (!cimg::strcasecmp(ext,"tif") || - !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); - - // 3d binary formats - else if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); - else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); - else if (!cimg::strcasecmp(ext,"dcm")) return save_medcon_external(fn); - else if (!cimg::strcasecmp(ext,"hdr") || - !cimg::strcasecmp(ext,"nii")) return save_analyze(fn); - else if (!cimg::strcasecmp(ext,"inr")) return save_inr(fn); - else if (!cimg::strcasecmp(ext,"mnc")) return save_minc2(fn); - else if (!cimg::strcasecmp(ext,"pan")) return save_pandore(fn); - else if (!cimg::strcasecmp(ext,"raw")) return save_raw(fn); - - // Archive files - else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); - - // Image sequences - else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); - else if (!cimg::strcasecmp(ext,"avi") || - !cimg::strcasecmp(ext,"mov") || - !cimg::strcasecmp(ext,"asf") || - !cimg::strcasecmp(ext,"divx") || - !cimg::strcasecmp(ext,"flv") || - !cimg::strcasecmp(ext,"mpg") || - !cimg::strcasecmp(ext,"m1v") || - !cimg::strcasecmp(ext,"m2v") || - !cimg::strcasecmp(ext,"m4v") || - !cimg::strcasecmp(ext,"mjp") || - !cimg::strcasecmp(ext,"mkv") || - !cimg::strcasecmp(ext,"mpe") || - !cimg::strcasecmp(ext,"movie") || - !cimg::strcasecmp(ext,"ogm") || - !cimg::strcasecmp(ext,"ogg") || - !cimg::strcasecmp(ext,"qt") || - !cimg::strcasecmp(ext,"rm") || - !cimg::strcasecmp(ext,"vob") || - !cimg::strcasecmp(ext,"wmv") || - !cimg::strcasecmp(ext,"xvid") || - !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); - return save_other(fn); - } - - //! Save image as an ascii file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_ascii(const char *const filename) const { - return _save_ascii(0,filename); - } - - //! Save image as an ascii file \overloading. - const CImg& save_ascii(std::FILE *const file) const { - return _save_ascii(file,0); - } - - const CImg& _save_ascii(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_ascii(): Specified filename is (null).", - cimg_instance); - std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); - std::fprintf(nfile,"%u %u %u %u\n",_width,_height,_depth,_spectrum); - const T* ptrs = _data; - cimg_forYZC(*this,y,z,c) { - cimg_forX(*this,x) std::fprintf(nfile,"%.16g ",(double)*(ptrs++)); - std::fputc('\n',nfile); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a .cpp source file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_cpp(const char *const filename) const { - return _save_cpp(0,filename); - } - - //! Save image as a .cpp source file \overloading. - const CImg& save_cpp(std::FILE *const file) const { - return _save_cpp(file,0); - } - - const CImg& _save_cpp(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_cpp(): Specified filename is (null).", - cimg_instance); - std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); - char varname[1024] = { 0 }; - if (filename) std::sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname); - if (!*varname) cimg_snprintf(varname,sizeof(varname),"unnamed"); - std::fprintf(nfile, - "/* Define image '%s' of size %ux%ux%ux%u and type '%s' */\n" - "%s data_%s[] = { %s\n ", - varname,_width,_height,_depth,_spectrum,pixel_type(),pixel_type(),varname, - is_empty()?"};":""); - if (!is_empty()) for (unsigned long off = 0, siz = size()-1; off<=siz; ++off) { - std::fprintf(nfile,cimg::type::format(),cimg::type::format((*this)[off])); - if (off==siz) std::fprintf(nfile," };\n"); - else if (!((off+1)%16)) std::fprintf(nfile,",\n "); - else std::fprintf(nfile,", "); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a DLM file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_dlm(const char *const filename) const { - return _save_dlm(0,filename); - } - - //! Save image as a DLM file \overloading. - const CImg& save_dlm(std::FILE *const file) const { - return _save_dlm(file,0); - } - - const CImg& _save_dlm(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_dlm(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_depth>1) - cimg::warn(_cimg_instance - "save_dlm(): Instance is volumetric, values along Z will be unrolled in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - if (_spectrum>1) - cimg::warn(_cimg_instance - "save_dlm(): Instance is multispectral, values along C will be unrolled in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); - const T* ptrs = _data; - cimg_forYZC(*this,y,z,c) { - cimg_forX(*this,x) std::fprintf(nfile,"%.16g%s",(double)*(ptrs++),(x==width()-1)?"":","); - std::fputc('\n',nfile); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a BMP file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_bmp(const char *const filename) const { - return _save_bmp(0,filename); - } - - //! Save image as a BMP file \overloading. - const CImg& save_bmp(std::FILE *const file) const { - return _save_bmp(file,0); - } - - const CImg& _save_bmp(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_bmp(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_depth>1) - cimg::warn(_cimg_instance - "save_bmp(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - if (_spectrum>3) - cimg::warn(_cimg_instance - "save_bmp(): Instance is multispectral, only the three first channels will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - unsigned char header[54] = { 0 }, align_buf[4] = { 0 }; - const unsigned int - align = (4 - (3*_width)%4)%4, - buf_size = (3*_width + align)*height(), - file_size = 54 + buf_size; - header[0] = 'B'; header[1] = 'M'; - header[0x02] = file_size&0xFF; - header[0x03] = (file_size>>8)&0xFF; - header[0x04] = (file_size>>16)&0xFF; - header[0x05] = (file_size>>24)&0xFF; - header[0x0A] = 0x36; - header[0x0E] = 0x28; - header[0x12] = _width&0xFF; - header[0x13] = (_width>>8)&0xFF; - header[0x14] = (_width>>16)&0xFF; - header[0x15] = (_width>>24)&0xFF; - header[0x16] = _height&0xFF; - header[0x17] = (_height>>8)&0xFF; - header[0x18] = (_height>>16)&0xFF; - header[0x19] = (_height>>24)&0xFF; - header[0x1A] = 1; - header[0x1B] = 0; - header[0x1C] = 24; - header[0x1D] = 0; - header[0x22] = buf_size&0xFF; - header[0x23] = (buf_size>>8)&0xFF; - header[0x24] = (buf_size>>16)&0xFF; - header[0x25] = (buf_size>>24)&0xFF; - header[0x27] = 0x1; - header[0x2B] = 0x1; - cimg::fwrite(header,54,nfile); - - const T - *ptr_r = data(0,_height-1,0,0), - *ptr_g = (_spectrum>=2)?data(0,_height-1,0,1):0, - *ptr_b = (_spectrum>=3)?data(0,_height-1,0,2):0; - - switch (_spectrum) { - case 1 : { - cimg_forY(*this,y) { - cimg_forX(*this,x) { - const unsigned char val = (unsigned char)*(ptr_r++); - std::fputc(val,nfile); std::fputc(val,nfile); std::fputc(val,nfile); - } - cimg::fwrite(align_buf,align,nfile); - ptr_r-=2*_width; - } - } break; - case 2 : { - cimg_forY(*this,y) { - cimg_forX(*this,x) { - std::fputc(0,nfile); - std::fputc((unsigned char)(*(ptr_g++)),nfile); - std::fputc((unsigned char)(*(ptr_r++)),nfile); - } - cimg::fwrite(align_buf,align,nfile); - ptr_r-=2*_width; ptr_g-=2*_width; - } - } break; - default : { - cimg_forY(*this,y) { - cimg_forX(*this,x) { - std::fputc((unsigned char)(*(ptr_b++)),nfile); - std::fputc((unsigned char)(*(ptr_g++)),nfile); - std::fputc((unsigned char)(*(ptr_r++)),nfile); - } - cimg::fwrite(align_buf,align,nfile); - ptr_r-=2*_width; ptr_g-=2*_width; ptr_b-=2*_width; - } - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a JPEG file. - /** - \param filename Filename, as a C-string. - \param quality Image quality (in %) - **/ - const CImg& save_jpeg(const char *const filename, const unsigned int quality=100) const { - return _save_jpeg(0,filename,quality); - } - - //! Save image as a JPEG file \overloading. - const CImg& save_jpeg(std::FILE *const file, const unsigned int quality=100) const { - return _save_jpeg(file,0,quality); - } - - const CImg& _save_jpeg(std::FILE *const file, const char *const filename, const unsigned int quality) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_jpeg(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_depth>1) - cimg::warn(_cimg_instance - "save_jpeg(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - -#ifndef cimg_use_jpeg - if (!file) return save_other(filename,quality); - else throw CImgIOException(_cimg_instance - "save_jpeg(): Unable to save data in '(*FILE)' unless libjpeg is enabled.", - cimg_instance); -#else - unsigned int dimbuf = 0; - J_COLOR_SPACE colortype = JCS_RGB; - - switch(_spectrum) { - case 1 : dimbuf = 1; colortype = JCS_GRAYSCALE; break; - case 2 : dimbuf = 3; colortype = JCS_RGB; break; - case 3 : dimbuf = 3; colortype = JCS_RGB; break; - default : dimbuf = 4; colortype = JCS_CMYK; break; - } - - // Call libjpeg functions - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - jpeg_stdio_dest(&cinfo,nfile); - cinfo.image_width = _width; - cinfo.image_height = _height; - cinfo.input_components = dimbuf; - cinfo.in_color_space = colortype; - jpeg_set_defaults(&cinfo); - jpeg_set_quality(&cinfo,quality<100?quality:100,TRUE); - jpeg_start_compress(&cinfo,TRUE); - - JSAMPROW row_pointer[1]; - CImg buffer((unsigned long)_width*dimbuf); - - while (cinfo.next_scanline& save_magick(const char *const filename, const unsigned int bytes_per_pixel=0) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_magick(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifdef cimg_use_magick - double stmin, stmax = (double)max_min(stmin); - if (_depth>1) - cimg::warn(_cimg_instance - "save_magick(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename); - - if (_spectrum>3) - cimg::warn(_cimg_instance - "save_magick(): Instance is multispectral, only the three first channels will be saved in file '%s'.", - cimg_instance, - filename); - - if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) - cimg::warn(_cimg_instance - "save_magick(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", - cimg_instance, - filename,stmin,stmax); - - Magick::Image image(Magick::Geometry(_width,_height),"black"); - image.type(Magick::TrueColorType); - image.depth(bytes_per_pixel?(8*bytes_per_pixel):(stmax>=256?16:8)); - const T - *ptr_r = data(0,0,0,0), - *ptr_g = _spectrum>1?data(0,0,0,1):0, - *ptr_b = _spectrum>2?data(0,0,0,2):0; - Magick::PixelPacket *pixels = image.getPixels(0,0,_width,_height); - switch (_spectrum) { - case 1 : // Scalar images - for (unsigned long off = (unsigned long)_width*_height; off; --off) { - pixels->red = pixels->green = pixels->blue = (Magick::Quantum)*(ptr_r++); - ++pixels; - } - break; - case 2 : // RG images - for (unsigned long off = (unsigned long)_width*_height; off; --off) { - pixels->red = (Magick::Quantum)*(ptr_r++); - pixels->green = (Magick::Quantum)*(ptr_g++); - pixels->blue = 0; ++pixels; - } - break; - default : // RGB images - for (unsigned long off = (unsigned long)_width*_height; off; --off) { - pixels->red = (Magick::Quantum)*(ptr_r++); - pixels->green = (Magick::Quantum)*(ptr_g++); - pixels->blue = (Magick::Quantum)*(ptr_b++); - ++pixels; - } - } - image.syncPixels(); - image.write(filename); -#else - cimg::unused(bytes_per_pixel); - throw CImgIOException(_cimg_instance - "save_magick(): Unable to save file '%s' unless libMagick++ is enabled.", - cimg_instance, - filename); -#endif - return *this; - } - - //! Save image as a PNG file. - /** - \param filename Filename, as a C-string. - \param bytes_per_pixel Force the number of bytes per pixels for the saving, when possible. - **/ - const CImg& save_png(const char *const filename, const unsigned int bytes_per_pixel=0) const { - return _save_png(0,filename,bytes_per_pixel); - } - - //! Save image as a PNG file \overloading. - const CImg& save_png(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { - return _save_png(file,0,bytes_per_pixel); - } - - const CImg& _save_png(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_png(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - -#ifndef cimg_use_png - cimg::unused(bytes_per_pixel); - if (!file) return save_other(filename); - else throw CImgIOException(_cimg_instance - "save_png(): Unable to save data in '(*FILE)' unless libpng is enabled.", - cimg_instance); -#else - const char *volatile nfilename = filename; // two 'volatile' here to remove a g++ warning due to 'setjmp'. - std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"wb"); - - double stmin, stmax = (double)max_min(stmin); - if (_depth>1) - cimg::warn(_cimg_instance - "save_png(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename); - - if (_spectrum>4) - cimg::warn(_cimg_instance - "save_png(): Instance is multispectral, only the three first channels will be saved in file '%s'.", - cimg_instance, - filename); - - if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) - cimg::warn(_cimg_instance - "save_png(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", - cimg_instance, - filename,stmin,stmax); - - // Setup PNG structures for write - png_voidp user_error_ptr = 0; - png_error_ptr user_error_fn = 0, user_warning_fn = 0; - png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,user_error_ptr, user_error_fn, user_warning_fn); - if(!png_ptr){ - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "save_png(): Failed to initialize 'png_ptr' structure when saving file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - png_destroy_write_struct(&png_ptr,(png_infopp)0); - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "save_png(): Failed to initialize 'info_ptr' structure when saving file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_write_struct(&png_ptr, &info_ptr); - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_init_io(png_ptr, nfile); - const int bit_depth = bytes_per_pixel?(bytes_per_pixel*8):(stmax>=256?16:8); - int color_type; - switch (spectrum()) { - case 1 : color_type = PNG_COLOR_TYPE_GRAY; break; - case 2 : color_type = PNG_COLOR_TYPE_GRAY_ALPHA; break; - case 3 : color_type = PNG_COLOR_TYPE_RGB; break; - default : color_type = PNG_COLOR_TYPE_RGB_ALPHA; - } - const int interlace_type = PNG_INTERLACE_NONE; - const int compression_type = PNG_COMPRESSION_TYPE_DEFAULT; - const int filter_method = PNG_FILTER_TYPE_DEFAULT; - png_set_IHDR(png_ptr,info_ptr,_width,_height,bit_depth,color_type,interlace_type,compression_type,filter_method); - png_write_info(png_ptr,info_ptr); - const int byte_depth = bit_depth>>3; - const int numChan = spectrum()>4?4:spectrum(); - const int pixel_bit_depth_flag = numChan * (bit_depth-1); - - // Allocate Memory for Image Save and Fill pixel data - png_bytep *const imgData = new png_byte*[_height]; - for (unsigned int row = 0; row<_height; ++row) imgData[row] = new png_byte[byte_depth*numChan*_width]; - const T *pC0 = data(0,0,0,0); - switch (pixel_bit_depth_flag) { - case 7 : { // Gray 8-bit - cimg_forY(*this,y) { - unsigned char *ptrd = imgData[y]; - cimg_forX(*this,x) *(ptrd++) = (unsigned char)*(pC0++); - } - } break; - case 14 : { // Gray w/ Alpha 8-bit - const T *pC1 = data(0,0,0,1); - cimg_forY(*this,y) { - unsigned char *ptrd = imgData[y]; - cimg_forX(*this,x) { - *(ptrd++) = (unsigned char)*(pC0++); - *(ptrd++) = (unsigned char)*(pC1++); - } - } - } break; - case 21 : { // RGB 8-bit - const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); - cimg_forY(*this,y) { - unsigned char *ptrd = imgData[y]; - cimg_forX(*this,x) { - *(ptrd++) = (unsigned char)*(pC0++); - *(ptrd++) = (unsigned char)*(pC1++); - *(ptrd++) = (unsigned char)*(pC2++); - } - } - } break; - case 28 : { // RGB x/ Alpha 8-bit - const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); - cimg_forY(*this,y){ - unsigned char *ptrd = imgData[y]; - cimg_forX(*this,x){ - *(ptrd++) = (unsigned char)*(pC0++); - *(ptrd++) = (unsigned char)*(pC1++); - *(ptrd++) = (unsigned char)*(pC2++); - *(ptrd++) = (unsigned char)*(pC3++); - } - } - } break; - case 15 : { // Gray 16-bit - cimg_forY(*this,y){ - unsigned short *ptrd = (unsigned short*)(imgData[y]); - cimg_forX(*this,x) *(ptrd++) = (unsigned short)*(pC0++); - if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],_width); - } - } break; - case 30 : { // Gray w/ Alpha 16-bit - const T *pC1 = data(0,0,0,1); - cimg_forY(*this,y){ - unsigned short *ptrd = (unsigned short*)(imgData[y]); - cimg_forX(*this,x) { - *(ptrd++) = (unsigned short)*(pC0++); - *(ptrd++) = (unsigned short)*(pC1++); - } - if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],2*_width); - } - } break; - case 45 : { // RGB 16-bit - const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); - cimg_forY(*this,y) { - unsigned short *ptrd = (unsigned short*)(imgData[y]); - cimg_forX(*this,x) { - *(ptrd++) = (unsigned short)*(pC0++); - *(ptrd++) = (unsigned short)*(pC1++); - *(ptrd++) = (unsigned short)*(pC2++); - } - if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],3*_width); - } - } break; - case 60 : { // RGB w/ Alpha 16-bit - const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); - cimg_forY(*this,y) { - unsigned short *ptrd = (unsigned short*)(imgData[y]); - cimg_forX(*this,x) { - *(ptrd++) = (unsigned short)*(pC0++); - *(ptrd++) = (unsigned short)*(pC1++); - *(ptrd++) = (unsigned short)*(pC2++); - *(ptrd++) = (unsigned short)*(pC3++); - } - if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],4*_width); - } - } break; - default : - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", - cimg_instance, - nfilename?nfilename:"(FILE*)"); - } - png_write_image(png_ptr,imgData); - png_write_end(png_ptr,info_ptr); - png_destroy_write_struct(&png_ptr, &info_ptr); - - // Deallocate Image Write Memory - cimg_forY(*this,n) delete[] imgData[n]; - delete[] imgData; - if (!file) cimg::fclose(nfile); - return *this; -#endif - } - - //! Save image as a PNM file. - /** - \param filename Filename, as a C-string. - \param bytes_per_pixel Force the number of bytes per pixels for the saving. - **/ - const CImg& save_pnm(const char *const filename, const unsigned int bytes_per_pixel=0) const { - return _save_pnm(0,filename,bytes_per_pixel); - } - - //! Save image as a PNM file \overloading. - const CImg& save_pnm(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { - return _save_pnm(file,0,bytes_per_pixel); - } - - const CImg& _save_pnm(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_pnm(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - - double stmin, stmax = (double)max_min(stmin); - if (_depth>1) - cimg::warn(_cimg_instance - "save_pnm(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - if (_spectrum>3) - cimg::warn(_cimg_instance - "save_pnm(): Instance is multispectral, only the three first channels will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) - cimg::warn(_cimg_instance - "save_pnm(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", - cimg_instance, - stmin,stmax,filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const T - *ptr_r = data(0,0,0,0), - *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, - *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; - const unsigned long buf_size = cimg::min(1024*1024UL,_width*_height*(_spectrum==1?1UL:3UL)); - - std::fprintf(nfile,"P%c\n%u %u\n%u\n", - (_spectrum==1?'5':'6'),_width,_height,stmax<256?255:(stmax<4096?4095:65535)); - - switch (_spectrum) { - case 1 : { // Scalar image - if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PGM 8 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - unsigned char *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr_r++); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } else { // Binary PGM 16 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - unsigned short *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned short)*(ptr_r++); - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } - } break; - case 2 : { // RG image - if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PPM 8 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); - unsigned char *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (unsigned char)*(ptr_r++); - *(ptrd++) = (unsigned char)*(ptr_g++); - *(ptrd++) = 0; - } - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } else { // Binary PPM 16 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); - unsigned short *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (unsigned short)*(ptr_r++); - *(ptrd++) = (unsigned short)*(ptr_g++); - *(ptrd++) = 0; - } - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } - } break; - default : { // RGB image - if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PPM 8 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); - unsigned char *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (unsigned char)*(ptr_r++); - *(ptrd++) = (unsigned char)*(ptr_g++); - *(ptrd++) = (unsigned char)*(ptr_b++); - } - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } else { // Binary PPM 16 bits - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); - unsigned short *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (unsigned short)*(ptr_r++); - *(ptrd++) = (unsigned short)*(ptr_g++); - *(ptrd++) = (unsigned short)*(ptr_b++); - } - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a PNK file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_pnk(const char *const filename) const { - return _save_pnk(0,filename); - } - - //! Save image as a PNK file \overloading. - const CImg& save_pnk(std::FILE *const file) const { - return _save_pnk(file,0); - } - - const CImg& _save_pnk(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_pnk(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_spectrum>1) - cimg::warn(_cimg_instance - "save_pnk(): Instance is multispectral, only the first channel will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - const unsigned long buf_size = cimg::min(1024*1024LU,_width*_height*_depth); - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const T *ptr = data(0,0,0,0); - - if (!cimg::type::is_float() && sizeof(T)==1 && _depth<2) _save_pnm(file,filename,0); // Can be saved as regular PNM file. - else if (!cimg::type::is_float() && sizeof(T)==1) { // Save as extended P5 file: Binary byte-valued 3d. - std::fprintf(nfile,"P5\n%u %u %u\n255\n",_width,_height,_depth); - CImg buf(buf_size); - for (long to_write = (long)_width*_height*_depth; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - unsigned char *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr++); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } else if (!cimg::type::is_float()) { // Save as P8: Binary int32-valued 3d. - if (_depth>1) std::fprintf(nfile,"P8\n%u %u %u\n%d\n",_width,_height,_depth,(int)max()); - else std::fprintf(nfile,"P8\n%u %u\n%d\n",_width,_height,(int)max()); - CImg buf(buf_size); - for (long to_write = (long)_width*_height*_depth; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - int *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (int)*(ptr++); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } else { // Save as P9: Binary float-valued 3d. - if (_depth>1) std::fprintf(nfile,"P9\n%u %u %u\n%g\n",_width,_height,_depth,(double)max()); - else std::fprintf(nfile,"P9\n%u %u\n%g\n",_width,_height,(double)max()); - CImg buf(buf_size); - for (long to_write = (long)_width*_height*_depth; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - float *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr++); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } - - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a PFM file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_pfm(const char *const filename) const { - return get_mirror('y')._save_pfm(0,filename); - } - - //! Save image as a PFM file \overloading. - const CImg& save_pfm(std::FILE *const file) const { - return get_mirror('y')._save_pfm(file,0); - } - - const CImg& _save_pfm(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_pfm(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_depth>1) - cimg::warn(_cimg_instance - "save_pfm(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - if (_spectrum>3) - cimg::warn(_cimg_instance - "save_pfm(): image instance is multispectral, only the three first channels will be saved in file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const T - *ptr_r = data(0,0,0,0), - *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, - *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; - const unsigned int buf_size = cimg::min(1024*1024U,_width*_height*(_spectrum==1?1:3)); - - std::fprintf(nfile,"P%c\n%u %u\n1.0\n", - (_spectrum==1?'f':'F'),_width,_height); - - switch (_spectrum) { - case 1 : { // Scalar image - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned long N = cimg::min((unsigned long)to_write,buf_size); - float *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr_r++); - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,N,nfile); - to_write-=N; - } - } break; - case 2 : { // RG image - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); - float *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (float)*(ptr_r++); - *(ptrd++) = (float)*(ptr_g++); - *(ptrd++) = 0; - } - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } break; - default : { // RGB image - CImg buf(buf_size); - for (long to_write = (long)_width*_height; to_write>0; ) { - const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); - float *ptrd = buf._data; - for (unsigned long i = N; i>0; --i) { - *(ptrd++) = (float)*(ptr_r++); - *(ptrd++) = (float)*(ptr_g++); - *(ptrd++) = (float)*(ptr_b++); - } - if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); - cimg::fwrite(buf._data,3*N,nfile); - to_write-=N; - } - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a RGB file. - /** - \param filename Filename, as a C-string. - **/ - const CImg& save_rgb(const char *const filename) const { - return _save_rgb(0,filename); - } - - //! Save image as a RGB file \overloading. - const CImg& save_rgb(std::FILE *const file) const { - return _save_rgb(file,0); - } - - const CImg& _save_rgb(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_rgb(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_spectrum!=3) - cimg::warn(_cimg_instance - "save_rgb(): image instance has not exactly 3 channels, for file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const unsigned long wh = (unsigned long)_width*_height; - unsigned char *const buffer = new unsigned char[3*wh], *nbuffer = buffer; - const T - *ptr1 = data(0,0,0,0), - *ptr2 = _spectrum>1?data(0,0,0,1):0, - *ptr3 = _spectrum>2?data(0,0,0,2):0; - switch (_spectrum) { - case 1 : { // Scalar image - for (unsigned long k = 0; k& save_rgba(const char *const filename) const { - return _save_rgba(0,filename); - } - - //! Save image as a RGBA file \overloading. - const CImg& save_rgba(std::FILE *const file) const { - return _save_rgba(file,0); - } - - const CImg& _save_rgba(std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_rgba(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if (_spectrum!=4) - cimg::warn(_cimg_instance - "save_rgba(): image instance has not exactly 4 channels, for file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const unsigned long wh = (unsigned long)_width*_height; - unsigned char *const buffer = new unsigned char[4*wh], *nbuffer = buffer; - const T - *ptr1 = data(0,0,0,0), - *ptr2 = _spectrum>1?data(0,0,0,1):0, - *ptr3 = _spectrum>2?data(0,0,0,2):0, - *ptr4 = _spectrum>3?data(0,0,0,3):0; - switch (_spectrum) { - case 1 : { // Scalar images - for (unsigned long k = 0; k{ 1=None | 2=CCITTRLE | 3=CCITTFAX3 | 4=CCITTFAX4 | 5=LZW | 6=JPEG }. - \note - - libtiff support is enabled by defining the precompilation - directive \c cimg_use_tif. - - When libtiff is enabled, 2D and 3D (multipage) several - channel per pixel are supported for - char,uchar,short,ushort,float and \c double pixel types. - - If \c cimg_use_tif is not defined at compilation time the - function uses CImg&save_other(const char*). - **/ - const CImg& save_tiff(const char *const filename, const unsigned int compression_type=0) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_tiff(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifdef cimg_use_tiff - TIFF *tif = TIFFOpen(filename,"w"); - if (tif) { - cimg_forZ(*this,z) get_slice(z)._save_tiff(tif,z,compression_type); - TIFFClose(tif); - } else throw CImgIOException(_cimg_instance - "save_tiff(): Failed to open file '%s' for writing.", - cimg_instance, - filename); -#else - cimg::unused(compression_type); - return save_other(filename); -#endif - return *this; - } - -#ifdef cimg_use_tiff - -#define _cimg_save_tiff(types,typed,compression_type) \ - if (!std::strcmp(types,pixel_type())) { const typed foo = (typed)0; return _save_tiff(tif,directory,foo,compression_type); } - - // [internal] Save a plane into a tiff file - template - const CImg& _save_tiff(TIFF *tif, const unsigned int directory, const t& pixel_t, const unsigned int compression_type) const { - if (is_empty() || !tif || pixel_t) return *this; - const char *const filename = TIFFFileName(tif); - uint32 rowsperstrip = (uint32)-1; - uint16 spp = _spectrum, bpp = sizeof(t)*8, photometric; - if (spp==3 || spp==4) photometric = PHOTOMETRIC_RGB; - else photometric = PHOTOMETRIC_MINISBLACK; - TIFFSetDirectory(tif,directory); - TIFFSetField(tif,TIFFTAG_IMAGEWIDTH,_width); - TIFFSetField(tif,TIFFTAG_IMAGELENGTH,_height); - TIFFSetField(tif,TIFFTAG_ORIENTATION,ORIENTATION_TOPLEFT); - TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,spp); - if (cimg::type::is_float()) TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,3); - else if (cimg::type::min()==0) TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,1); - else TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,2); - TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE,bpp); - TIFFSetField(tif,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG); - TIFFSetField(tif,TIFFTAG_PHOTOMETRIC,photometric); - TIFFSetField(tif,TIFFTAG_COMPRESSION,compression_type?(compression_type-1):COMPRESSION_NONE); - rowsperstrip = TIFFDefaultStripSize(tif,rowsperstrip); - TIFFSetField(tif,TIFFTAG_ROWSPERSTRIP,rowsperstrip); - TIFFSetField(tif,TIFFTAG_FILLORDER,FILLORDER_MSB2LSB); - TIFFSetField(tif,TIFFTAG_SOFTWARE,"CImg"); - t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); - if (buf) { - for (unsigned int row = 0; row<_height; row+=rowsperstrip) { - uint32 nrow = (row + rowsperstrip>_height?_height-row:rowsperstrip); - tstrip_t strip = TIFFComputeStrip(tif,row,0); - tsize_t i = 0; - for (unsigned int rr = 0; rr& _save_tiff(TIFF *tif, const unsigned int directory, const unsigned int compression_type) const { - _cimg_save_tiff("bool",unsigned char,compression_type); - _cimg_save_tiff("char",char,compression_type); - _cimg_save_tiff("unsigned char",unsigned char,compression_type); - _cimg_save_tiff("short",short,compression_type); - _cimg_save_tiff("unsigned short",unsigned short,compression_type); - _cimg_save_tiff("int",int,compression_type); - _cimg_save_tiff("unsigned int",unsigned int,compression_type); - _cimg_save_tiff("long",int,compression_type); - _cimg_save_tiff("unsigned long",unsigned int,compression_type); - _cimg_save_tiff("float",float,compression_type); - _cimg_save_tiff("double",float,compression_type); - const char *const filename = TIFFFileName(tif); - throw CImgInstanceException(_cimg_instance - "save_tiff(): Unsupported pixel type '%s' for file '%s'.", - cimg_instance, - pixel_type(),filename?filename:"(FILE*)"); - return *this; - } -#endif - - //! Save image as a MINC2 file. - /** - \param filename Filename, as a C-string. - \param imitate_file If non-zero, reference filename, as a C-string, to borrow header from. - **/ - const CImg& save_minc2(const char *const filename, - const char *const imitate_file=0) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_minc2(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifndef cimg_use_minc2 - cimg::unused(imitate_file); - return save_other(filename); -#else - minc::minc_1_writer wtr; - if (imitate_file) - wtr.open(filename, imitate_file); - else { - minc::minc_info di; - if(width()) di.push_back(minc::dim_info(width(), width()*0.5, -1, minc::dim_info::DIM_X)); - if(height()) di.push_back(minc::dim_info(height(), height()*0.5, -1, minc::dim_info::DIM_Y)); - if(depth()) di.push_back(minc::dim_info(depth(), depth()*0.5, -1, minc::dim_info::DIM_Z)); - if(spectrum()) di.push_back(minc::dim_info(spectrum(), spectrum()*0.5, -1, minc::dim_info::DIM_TIME)); - wtr.open(filename, di, 1, NC_FLOAT, 0); - } - if(typeid(T)==typeid(unsigned char)) - wtr.setup_write_byte(); - else if(typeid(T)==typeid(int)) - wtr.setup_write_int(); - else if(typeid(T)==typeid(double)) - wtr.setup_write_double(); - else - wtr.setup_write_float(); - minc::save_standard_volume(wtr, this->_data); - return *this; -#endif - } - - //! Save image as an ANALYZE7.5 or NIFTI file. - /** - \param filename Filename, as a C-string. - \param voxel_size Pointer to 3 consecutive values that tell about the voxel sizes along the X,Y and Z dimensions. - **/ - const CImg& save_analyze(const char *const filename, const float *const voxel_size=0) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_analyze(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - std::FILE *file; - char header[348] = { 0 }, hname[1024] = { 0 }, iname[1024] = { 0 }; - const char *const ext = cimg::split_filename(filename); - short datatype=-1; - std::memset(header,0,348); - if (!*ext) { cimg_snprintf(hname,sizeof(hname),"%s.hdr",filename); cimg_snprintf(iname,sizeof(iname),"%s.img",filename); } - if (!cimg::strncasecmp(ext,"hdr",3)) { - std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(iname + std::strlen(iname)-3,"img"); - } - if (!cimg::strncasecmp(ext,"img",3)) { - std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(hname + std::strlen(iname)-3,"hdr"); - } - if (!cimg::strncasecmp(ext,"nii",3)) { - std::strncpy(hname,filename,sizeof(hname)-1); *iname = 0; - } - int *const iheader = (int*)header; - *iheader = 348; - std::strcpy(header + 4,"CImg"); - std::strcpy(header + 14," "); - ((short*)(header + 36))[0] = 4096; - ((char*)(header + 38))[0] = 114; - ((short*)(header + 40))[0] = 4; - ((short*)(header + 40))[1] = _width; - ((short*)(header + 40))[2] = _height; - ((short*)(header + 40))[3] = _depth; - ((short*)(header + 40))[4] = _spectrum; - if (!cimg::strcasecmp(pixel_type(),"bool")) datatype = 2; - if (!cimg::strcasecmp(pixel_type(),"unsigned char")) datatype = 2; - if (!cimg::strcasecmp(pixel_type(),"char")) datatype = 2; - if (!cimg::strcasecmp(pixel_type(),"unsigned short")) datatype = 4; - if (!cimg::strcasecmp(pixel_type(),"short")) datatype = 4; - if (!cimg::strcasecmp(pixel_type(),"unsigned int")) datatype = 8; - if (!cimg::strcasecmp(pixel_type(),"int")) datatype = 8; - if (!cimg::strcasecmp(pixel_type(),"unsigned long")) datatype = 8; - if (!cimg::strcasecmp(pixel_type(),"long")) datatype = 8; - if (!cimg::strcasecmp(pixel_type(),"float")) datatype = 16; - if (!cimg::strcasecmp(pixel_type(),"double")) datatype = 64; - if (datatype<0) - throw CImgIOException(_cimg_instance - "save_analyze(): Unsupported pixel type '%s' for file '%s'.", - cimg_instance, - pixel_type(),filename); - - ((short*)(header+70))[0] = datatype; - ((short*)(header+72))[0] = sizeof(T); - ((float*)(header+112))[0] = 1; - ((float*)(header+76))[0] = 0; - if (voxel_size) { - ((float*)(header+76))[1] = voxel_size[0]; - ((float*)(header+76))[2] = voxel_size[1]; - ((float*)(header+76))[3] = voxel_size[2]; - } else ((float*)(header+76))[1] = ((float*)(header+76))[2] = ((float*)(header+76))[3] = 1; - file = cimg::fopen(hname,"wb"); - cimg::fwrite(header,348,file); - if (*iname) { cimg::fclose(file); file = cimg::fopen(iname,"wb"); } - cimg::fwrite(_data,size(),file); - cimg::fclose(file); - return *this; - } - - //! Save image as a .cimg file. - /** - \param filename Filename, as a C-string. - \param is_compressed Tells if the file contains compressed image data. - **/ - const CImg& save_cimg(const char *const filename, const bool is_compressed=false) const { - CImgList(*this,true).save_cimg(filename,is_compressed); - return *this; - } - - //! Save image as a .cimg file \overloading. - const CImg& save_cimg(std::FILE *const file, const bool is_compressed=false) const { - CImgList(*this,true).save_cimg(file,is_compressed); - return *this; - } - - //! Save image as a sub-image into an existing .cimg file. - /** - \param filename Filename, as a C-string. - \param n0 Index of the image inside the file. - \param x0 X-coordinate of the sub-image location. - \param y0 Y-coordinate of the sub-image location. - \param z0 Z-coordinate of the sub-image location. - \param c0 C-coordinate of the sub-image location. - **/ - const CImg& save_cimg(const char *const filename, - const unsigned int n0, - const unsigned int x0, const unsigned int y0, - const unsigned int z0, const unsigned int c0) const { - CImgList(*this,true).save_cimg(filename,n0,x0,y0,z0,c0); - return *this; - } - - //! Save image as a sub-image into an existing .cimg file \overloading. - const CImg& save_cimg(std::FILE *const file, - const unsigned int n0, - const unsigned int x0, const unsigned int y0, - const unsigned int z0, const unsigned int c0) const { - CImgList(*this,true).save_cimg(file,n0,x0,y0,z0,c0); - return *this; - } - - //! Save blank image as a .cimg file. - /** - \param filename Filename, as a C-string. - \param dx Width of the image. - \param dy Height of the image. - \param dz Depth of the image. - \param dc Number of channels of the image. - \note - - All pixel values of the saved image are set to \c 0. - - Use this method to save large images without having to instanciate and allocate them. - **/ - static void save_empty_cimg(const char *const filename, - const unsigned int dx, const unsigned int dy=1, - const unsigned int dz=1, const unsigned int dc=1) { - return CImgList::save_empty_cimg(filename,1,dx,dy,dz,dc); - } - - //! Save blank image as a .cimg file \overloading. - /** - Same as save_empty_cimg(const char *,unsigned int,unsigned int,unsigned int,unsigned int) - with a file stream argument instead of a filename string. - **/ - static void save_empty_cimg(std::FILE *const file, - const unsigned int dx, const unsigned int dy=1, - const unsigned int dz=1, const unsigned int dc=1) { - return CImgList::save_empty_cimg(file,1,dx,dy,dz,dc); - } - - //! Save image as an INRIMAGE-4 file. - /** - \param filename Filename, as a C-string. - \param voxel_size Pointer to 3 values specifying the voxel sizes along the X,Y and Z dimensions. - **/ - const CImg& save_inr(const char *const filename, const float *const voxel_size=0) const { - return _save_inr(0,filename,voxel_size); - } - - //! Save image as an INRIMAGE-4 file \overloading. - const CImg& save_inr(std::FILE *const file, const float *const voxel_size=0) const { - return _save_inr(file,0,voxel_size); - } - - const CImg& _save_inr(std::FILE *const file, const char *const filename, const float *const voxel_size) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_inr(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - - int inrpixsize=-1; - const char *inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; - if (!cimg::strcasecmp(pixel_type(),"unsigned char")) { inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } - if (!cimg::strcasecmp(pixel_type(),"char")) { inrtype = "fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } - if (!cimg::strcasecmp(pixel_type(),"unsigned short")) { inrtype = "unsigned fixed\nPIXSIZE=16 bits\nSCALE=2**0";inrpixsize = 2; } - if (!cimg::strcasecmp(pixel_type(),"short")) { inrtype = "fixed\nPIXSIZE=16 bits\nSCALE=2**0"; inrpixsize = 2; } - if (!cimg::strcasecmp(pixel_type(),"unsigned int")) { inrtype = "unsigned fixed\nPIXSIZE=32 bits\nSCALE=2**0";inrpixsize = 4; } - if (!cimg::strcasecmp(pixel_type(),"int")) { inrtype = "fixed\nPIXSIZE=32 bits\nSCALE=2**0"; inrpixsize = 4; } - if (!cimg::strcasecmp(pixel_type(),"float")) { inrtype = "float\nPIXSIZE=32 bits"; inrpixsize = 4; } - if (!cimg::strcasecmp(pixel_type(),"double")) { inrtype = "float\nPIXSIZE=64 bits"; inrpixsize = 8; } - if (inrpixsize<=0) - throw CImgIOException(_cimg_instance - "save_inr(): Unsupported pixel type '%s' for file '%s'", - cimg_instance, - pixel_type(),filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - char header[257] = { 0 }; - int err = cimg_snprintf(header,sizeof(header),"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n",_width,_height,_depth,_spectrum); - if (voxel_size) err+=std::sprintf(header + err,"VX=%g\nVY=%g\nVZ=%g\n",voxel_size[0],voxel_size[1],voxel_size[2]); - err+=std::sprintf(header + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); - std::memset(header + err,'\n',252 - err); - std::memcpy(header + 252,"##}\n",4); - cimg::fwrite(header,256,nfile); - cimg_forXYZ(*this,x,y,z) cimg_forC(*this,c) cimg::fwrite(&((*this)(x,y,z,c)),1,nfile); - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as an OpenEXR file. - /** - \param filename Filename, as a C-string. - \note The OpenEXR file format is described here. - **/ - const CImg& save_exr(const char *const filename) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_exr(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - if (_depth>1) - cimg::warn(_cimg_instance - "save_exr(): Instance is volumetric, only the first slice will be saved in file '%s'.", - cimg_instance, - filename); - -#ifndef cimg_use_openexr - return save_other(filename); -#else - Imf::Rgba *const ptrd0 = new Imf::Rgba[(unsigned long)_width*_height], *ptrd = ptrd0, rgba; - switch (_spectrum) { - case 1 : { // Grayscale image. - for (const T *ptr_r = data(), *const ptr_e = ptr_r + (unsigned long)_width*_height; ptr_rPandore file specifications for more informations). - **/ - const CImg& save_pandore(const char *const filename, const unsigned int colorspace=0) const { - return _save_pandore(0,filename,colorspace); - } - - //! Save image as a Pandore-5 file \overloading. - /** - Same as save_pandore(const char *,unsigned int) const - with a file stream argument instead of a filename string. - **/ - const CImg& save_pandore(std::FILE *const file, const unsigned int colorspace=0) const { - return _save_pandore(file,0,colorspace); - } - - unsigned int _save_pandore_header_length(unsigned int id, unsigned int *dims, const unsigned int colorspace) const { - unsigned int nbdims = 0; - if (id==2 || id==3 || id==4) { dims[0] = 1; dims[1] = _width; nbdims = 2; } - if (id==5 || id==6 || id==7) { dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; } - if (id==8 || id==9 || id==10) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } - if (id==16 || id==17 || id==18) { dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; } - if (id==19 || id==20 || id==21) { dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; } - if (id==22 || id==23 || id==25) { dims[0] = _spectrum; dims[1] = _width; nbdims = 2; } - if (id==26 || id==27 || id==29) { dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; } - if (id==30 || id==31 || id==33) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } - return nbdims; - } - - const CImg& _save_pandore(std::FILE *const file, const char *const filename, const unsigned int colorspace) const { - -#define __cimg_save_pandore_case(dtype) \ - dtype *buffer = new dtype[size()]; \ - const T *ptrs = _data; \ - cimg_foroff(*this,off) *(buffer++) = (dtype)(*(ptrs++)); \ - buffer-=size(); \ - cimg::fwrite(buffer,size(),nfile); \ - delete[] buffer - -#define _cimg_save_pandore_case(sy,sz,sv,stype,id) \ - if (!saved && (sy?(sy==_height):true) && (sz?(sz==_depth):true) && (sv?(sv==_spectrum):true) && !std::strcmp(stype,pixel_type())) { \ - unsigned int *iheader = (unsigned int*)(header+12); \ - nbdims = _save_pandore_header_length((*iheader=id),dims,colorspace); \ - cimg::fwrite(header,36,nfile); \ - if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } \ - else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } \ - else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } \ - else throw CImgIOException(_cimg_instance \ - "save_pandore(): Unsupported datatype for file '%s'.",\ - cimg_instance, \ - filename?filename:"(FILE*)"); \ - if (id==2 || id==5 || id==8 || id==16 || id==19 || id==22 || id==26 || id==30) { \ - __cimg_save_pandore_case(unsigned char); \ - } else if (id==3 || id==6 || id==9 || id==17 || id==20 || id==23 || id==27 || id==31) { \ - if (sizeof(unsigned long)==4) { __cimg_save_pandore_case(unsigned long); } \ - else if (sizeof(unsigned int)==4) { __cimg_save_pandore_case(unsigned int); } \ - else if (sizeof(unsigned short)==4) { __cimg_save_pandore_case(unsigned short); } \ - else throw CImgIOException(_cimg_instance \ - "save_pandore(): Unsupported datatype for file '%s'.",\ - cimg_instance, \ - filename?filename:"(FILE*)"); \ - } else if (id==4 || id==7 || id==10 || id==18 || id==21 || id==25 || id==29 || id==33) { \ - if (sizeof(double)==4) { __cimg_save_pandore_case(double); } \ - else if (sizeof(float)==4) { __cimg_save_pandore_case(float); } \ - else throw CImgIOException(_cimg_instance \ - "save_pandore(): Unsupported datatype for file '%s'.",\ - cimg_instance, \ - filename?filename:"(FILE*)"); \ - } \ - saved = true; \ - } - - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_pandore(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, - 0,0,0,0,'C','I','m','g',0,0,0,0,0,'N','o',' ','d','a','t','e',0,0,0,0 }; - unsigned int nbdims, dims[5] = { 0 }; - bool saved = false; - _cimg_save_pandore_case(1,1,1,"unsigned char",2); - _cimg_save_pandore_case(1,1,1,"char",3); - _cimg_save_pandore_case(1,1,1,"short",3); - _cimg_save_pandore_case(1,1,1,"unsigned short",3); - _cimg_save_pandore_case(1,1,1,"unsigned int",3); - _cimg_save_pandore_case(1,1,1,"int",3); - _cimg_save_pandore_case(1,1,1,"unsigned long",4); - _cimg_save_pandore_case(1,1,1,"long",3); - _cimg_save_pandore_case(1,1,1,"float",4); - _cimg_save_pandore_case(1,1,1,"double",4); - - _cimg_save_pandore_case(0,1,1,"unsigned char",5); - _cimg_save_pandore_case(0,1,1,"char",6); - _cimg_save_pandore_case(0,1,1,"short",6); - _cimg_save_pandore_case(0,1,1,"unsigned short",6); - _cimg_save_pandore_case(0,1,1,"unsigned int",6); - _cimg_save_pandore_case(0,1,1,"int",6); - _cimg_save_pandore_case(0,1,1,"unsigned long",7); - _cimg_save_pandore_case(0,1,1,"long",6); - _cimg_save_pandore_case(0,1,1,"float",7); - _cimg_save_pandore_case(0,1,1,"double",7); - - _cimg_save_pandore_case(0,0,1,"unsigned char",8); - _cimg_save_pandore_case(0,0,1,"char",9); - _cimg_save_pandore_case(0,0,1,"short",9); - _cimg_save_pandore_case(0,0,1,"unsigned short",9); - _cimg_save_pandore_case(0,0,1,"unsigned int",9); - _cimg_save_pandore_case(0,0,1,"int",9); - _cimg_save_pandore_case(0,0,1,"unsigned long",10); - _cimg_save_pandore_case(0,0,1,"long",9); - _cimg_save_pandore_case(0,0,1,"float",10); - _cimg_save_pandore_case(0,0,1,"double",10); - - _cimg_save_pandore_case(0,1,3,"unsigned char",16); - _cimg_save_pandore_case(0,1,3,"char",17); - _cimg_save_pandore_case(0,1,3,"short",17); - _cimg_save_pandore_case(0,1,3,"unsigned short",17); - _cimg_save_pandore_case(0,1,3,"unsigned int",17); - _cimg_save_pandore_case(0,1,3,"int",17); - _cimg_save_pandore_case(0,1,3,"unsigned long",18); - _cimg_save_pandore_case(0,1,3,"long",17); - _cimg_save_pandore_case(0,1,3,"float",18); - _cimg_save_pandore_case(0,1,3,"double",18); - - _cimg_save_pandore_case(0,0,3,"unsigned char",19); - _cimg_save_pandore_case(0,0,3,"char",20); - _cimg_save_pandore_case(0,0,3,"short",20); - _cimg_save_pandore_case(0,0,3,"unsigned short",20); - _cimg_save_pandore_case(0,0,3,"unsigned int",20); - _cimg_save_pandore_case(0,0,3,"int",20); - _cimg_save_pandore_case(0,0,3,"unsigned long",21); - _cimg_save_pandore_case(0,0,3,"long",20); - _cimg_save_pandore_case(0,0,3,"float",21); - _cimg_save_pandore_case(0,0,3,"double",21); - - _cimg_save_pandore_case(1,1,0,"unsigned char",22); - _cimg_save_pandore_case(1,1,0,"char",23); - _cimg_save_pandore_case(1,1,0,"short",23); - _cimg_save_pandore_case(1,1,0,"unsigned short",23); - _cimg_save_pandore_case(1,1,0,"unsigned int",23); - _cimg_save_pandore_case(1,1,0,"int",23); - _cimg_save_pandore_case(1,1,0,"unsigned long",25); - _cimg_save_pandore_case(1,1,0,"long",23); - _cimg_save_pandore_case(1,1,0,"float",25); - _cimg_save_pandore_case(1,1,0,"double",25); - - _cimg_save_pandore_case(0,1,0,"unsigned char",26); - _cimg_save_pandore_case(0,1,0,"char",27); - _cimg_save_pandore_case(0,1,0,"short",27); - _cimg_save_pandore_case(0,1,0,"unsigned short",27); - _cimg_save_pandore_case(0,1,0,"unsigned int",27); - _cimg_save_pandore_case(0,1,0,"int",27); - _cimg_save_pandore_case(0,1,0,"unsigned long",29); - _cimg_save_pandore_case(0,1,0,"long",27); - _cimg_save_pandore_case(0,1,0,"float",29); - _cimg_save_pandore_case(0,1,0,"double",29); - - _cimg_save_pandore_case(0,0,0,"unsigned char",30); - _cimg_save_pandore_case(0,0,0,"char",31); - _cimg_save_pandore_case(0,0,0,"short",31); - _cimg_save_pandore_case(0,0,0,"unsigned short",31); - _cimg_save_pandore_case(0,0,0,"unsigned int",31); - _cimg_save_pandore_case(0,0,0,"int",31); - _cimg_save_pandore_case(0,0,0,"unsigned long",33); - _cimg_save_pandore_case(0,0,0,"long",31); - _cimg_save_pandore_case(0,0,0,"float",33); - _cimg_save_pandore_case(0,0,0,"double",33); - - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a raw data file. - /** - \param filename Filename, as a C-string. - \param is_multiplexed Tells if the image channels are stored in a multiplexed way (\c true) or not (\c false). - \note The .raw format does not store the image dimensions in the output file, so you have to keep track of them somewhere - to be able to read the file correctly afterwards. - **/ - const CImg& save_raw(const char *const filename, const bool is_multiplexed=false) const { - return _save_raw(0,filename,is_multiplexed); - } - - //! Save image as a raw data file \overloading. - /** - Same as save_raw(const char *,bool) const - with a file stream argument instead of a filename string. - **/ - const CImg& save_raw(std::FILE *const file, const bool is_multiplexed=false) const { - return _save_raw(file,0,is_multiplexed); - } - - const CImg& _save_raw(std::FILE *const file, const char *const filename, const bool is_multiplexed) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_raw(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - if (!is_multiplexed) cimg::fwrite(_data,size(),nfile); - else { - CImg buf(_spectrum); - cimg_forXYZ(*this,x,y,z) { - cimg_forC(*this,c) buf[c] = (*this)(x,y,z,c); - cimg::fwrite(buf._data,_spectrum,nfile); - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save image as a video file, using the FFmpeg library. - /** - \param filename Filename, as a C-string. - \param fps Video framerate. - \param bitrate Video bitrate. - \note - - Each slice of the instance image is considered to be a single frame of the output video file. - - This method uses functions provided by the FFmpeg library. - Configuration macro \c cimg_use_ffmpeg must be set for the method to succeed natively. - Otherwise, the method calls save_ffmpeg_external(const char*,unsigned int,unsigned int,const char*,unsigned int,unsigned int) const. - **/ - const CImg& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_ffmpeg(): Specified filename is (null).", - cimg_instance); - if (!fps) - throw CImgArgumentException(_cimg_instance - "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", - cimg_instance, - filename); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifndef cimg_use_ffmpeg - return save_ffmpeg_external(filename,0,fps,bitrate); -#else - CImgList list; - get_split('z').move_to(list); - list.save_ffmpeg(filename,fps,bitrate); -#endif - return *this; - } - - //! Save image as a .yuv video file. - /** - \param filename Filename, as a C-string. - \param is_rgb Tells if pixel values of the instance image are RGB-coded (\c true) or YUV-coded (\c false). - \note Each slice of the instance image is considered to be a single frame of the output video file. - **/ - const CImg& save_yuv(const char *const filename, const bool is_rgb=true) const { - get_split('z').save_yuv(filename,is_rgb); - return *this; - } - - //! Save image as a .yuv video file \overloading. - /** - Same as save_yuv(const char*,bool) const - with a file stream argument instead of a filename string. - **/ - const CImg& save_yuv(std::FILE *const file, const bool is_rgb=true) const { - get_split('z').save_yuv(file,is_rgb); - return *this; - } - - //! Save 3d object as an Object File Format (.off) file. - /** - \param filename Filename, as a C-string. - \param primitives List of 3d object primitives. - \param colors List of 3d object colors. - \note - - Instance image contains the vertices data of the 3d object. - - Textured, transparent or sphere-shaped primitives cannot be managed by the .off file format. - Such primitives will be lost or simplified during file saving. - - The .off file format is described here. - **/ - template - const CImg& save_off(const CImgList& primitives, const CImgList& colors, - const char *const filename) const { - return _save_off(primitives,colors,0,filename); - } - - //! Save 3d object as an Object File Format (.off) file \overloading. - /** - Same as save_off(const CImgList&,const CImgList&,const char*) const - with a file stream argument instead of a filename string. - **/ - template - const CImg& save_off(const CImgList& primitives, const CImgList& colors, - std::FILE *const file) const { - return _save_off(primitives,colors,file,0); - } - - template - const CImg& _save_off(const CImgList& primitives, const CImgList& colors, - std::FILE *const file, const char *const filename) const { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_off(): Specified filename is (null).", - cimg_instance); - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "save_off(): Empty instance, for file '%s'.", - cimg_instance, - filename?filename:"(FILE*)"); - - CImgList opacities; - char error_message[1024] = { 0 }; - if (!is_object3d(primitives,colors,opacities,true,error_message)) - throw CImgInstanceException(_cimg_instance - "save_off(): Invalid specified 3d object, for file '%s' (%s).", - cimg_instance, - filename?filename:"(FILE*)",error_message); - - const CImg default_color(1,3,1,1,200); - std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); - unsigned int supported_primitives = 0; - cimglist_for(primitives,l) if (primitives[l].size()!=5) ++supported_primitives; - std::fprintf(nfile,"OFF\n%u %u %u\n",_width,supported_primitives,3*primitives._width); - cimg_forX(*this,i) std::fprintf(nfile,"%f %f %f\n",(float)((*this)(i,0)),(float)((*this)(i,1)),(float)((*this)(i,2))); - cimglist_for(primitives,l) { - const CImg& color = l1?color[1]:r)/255.0f, b = (csiz>2?color[2]:g)/255.0f; - switch (psiz) { - case 1 : std::fprintf(nfile,"1 %u %f %f %f\n",(unsigned int)primitives(l,0),r,g,b); break; - case 2 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; - case 3 : std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), - (unsigned int)primitives(l,1),r,g,b); break; - case 4 : std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), - (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),r,g,b); break; - case 5 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; - case 6 : { - const unsigned int xt = (unsigned int)primitives(l,2), yt = (unsigned int)primitives(l,3); - const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),rt,gt,bt); - } break; - case 9 : { - const unsigned int xt = (unsigned int)primitives(l,3), yt = (unsigned int)primitives(l,4); - const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), - (unsigned int)primitives(l,1),rt,gt,bt); - } break; - case 12 : { - const unsigned int xt = (unsigned int)primitives(l,4), yt = (unsigned int)primitives(l,5); - const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), - (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),rt,gt,bt); - } break; - } - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save volumetric image as a video, using ffmpeg external binary. - /** - \param filename Filename, as a C-string. - \param codec Video codec, as a C-string. - \param fps Video framerate. - \param bitrate Video bitrate. - \note - - Each slice of the instance image is considered to be a single frame of the output video file. - - This method uses \c ffmpeg, an external executable binary provided by FFmpeg. - It must be installed for the method to succeed. - **/ - const CImg& save_ffmpeg_external(const char *const filename, const char *const codec=0, - const unsigned int fps=25, const unsigned int bitrate=2048) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_ffmpeg_external(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - CImgList list; - get_split('z').move_to(list); - list.save_ffmpeg_external(filename,codec,fps,bitrate); - return *this; - } - - //! Save image using gzip external binary. - /** - \param filename Filename, as a C-string. - \note This method uses \c gzip, an external executable binary provided by gzip. - It must be installed for the method to succeed. - **/ - const CImg& save_gzip_external(const char *const filename) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_gzip_external(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - const char - *ext = cimg::split_filename(filename,body), - *ext2 = cimg::split_filename(body,0); - std::FILE *file; - do { - if (!cimg::strcasecmp(ext,"gz")) { - if (*ext2) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } else { - if (*ext) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - save(filetmp); - cimg_snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", - cimg::gzip_path(), - CImg::string(filetmp)._system_strescape().data(), - CImg::string(filename)._system_strescape().data()); - cimg::system(command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimg_instance - "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", - cimg_instance, - filename); - - else cimg::fclose(file); - std::remove(filetmp); - return *this; - } - - //! Save image using GraphicsMagick's external binary. - /** - \param filename Filename, as a C-string. - \param quality Image quality (expressed in percent), when the file format supports it. - \note This method uses \c gm, an external executable binary provided by GraphicsMagick. - It must be installed for the method to succeed. - **/ - const CImg& save_graphicsmagick_external(const char *const filename, const unsigned int quality=100) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_graphicsmagick_external(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifdef cimg_use_png -#define _cimg_sge_ext1 "png" -#define _cimg_sge_ext2 "png" -#else -#define _cimg_sge_ext1 "pgm" -#define _cimg_sge_ext2 "ppm" -#endif - char command[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),_spectrum==1?_cimg_sge_ext1:_cimg_sge_ext2); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); -#ifdef cimg_use_png - save_png(filetmp); -#else - save_pnm(filetmp); -#endif - cimg_snprintf(command,sizeof(command),"%s convert -quality %u \"%s\" \"%s\"", - cimg::graphicsmagick_path(),quality, - CImg::string(filetmp)._system_strescape().data(), - CImg::string(filename)._system_strescape().data()); - cimg::system(command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimg_instance - "save_graphicsmagick_external(): Failed to save file '%s' with external command 'gm'.", - cimg_instance, - filename); - - if (file) cimg::fclose(file); - std::remove(filetmp); - return *this; - } - - //! Save image using ImageMagick's external binary. - /** - \param filename Filename, as a C-string. - \param quality Image quality (expressed in percent), when the file format supports it. - \note This method uses \c convert, an external executable binary provided by ImageMagick. - It must be installed for the method to succeed. - **/ - const CImg& save_imagemagick_external(const char *const filename, const unsigned int quality=100) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_imagemagick_external(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifdef cimg_use_png -#define _cimg_sie_ext1 "png" -#define _cimg_sie_ext2 "png" -#else -#define _cimg_sie_ext1 "pgm" -#define _cimg_sie_ext2 "ppm" -#endif - char command[1024] = { 0 }, filetmp[512] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),_spectrum==1?_cimg_sie_ext1:_cimg_sie_ext2); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); -#ifdef cimg_use_png - save_png(filetmp); -#else - save_pnm(filetmp); -#endif - cimg_snprintf(command,sizeof(command),"%s -quality %u \"%s\" \"%s\"", - cimg::imagemagick_path(),quality, - CImg::string(filetmp)._system_strescape().data(), - CImg::string(filename)._system_strescape().data()); - cimg::system(command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimg_instance - "save_imagemagick_external(): Failed to save file '%s' with external command 'convert'.", - cimg_instance, - filename); - - if (file) cimg::fclose(file); - std::remove(filetmp); - return *this; - } - - //! Save image as a Dicom file. - /** - \param filename Filename, as a C-string. - \note This method uses \c medcon, an external executable binary provided by (X)Medcon. - It must be installed for the method to succeed. - **/ - const CImg& save_medcon_external(const char *const filename) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_medcon_external(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - save_analyze(filetmp); - cimg_snprintf(command,sizeof(command),"%s -w -c dicom -o \"%s\" -f \"%s\"", - cimg::medcon_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); - cimg::system(command); - std::remove(filetmp); - cimg::split_filename(filetmp,body); - cimg_snprintf(filetmp,sizeof(filetmp),"%s.img",body); - std::remove(filetmp); - - file = std::fopen(filename,"rb"); - if (!file) { - cimg_snprintf(command,sizeof(command),"m000-%s",filename); - file = std::fopen(command,"rb"); - if (!file) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimg_instance - "save_medcon_external(): Failed to save file '%s' with external command 'medcon'.", - cimg_instance, - filename); - } - } - cimg::fclose(file); - std::rename(command,filename); - return *this; - } - - // Save image for non natively supported formats. - /** - \param filename Filename, as a C-string. - \param quality Image quality (expressed in percent), when the file format supports it. - \note - - The filename extension tells about the desired file format. - - This method tries to save the instance image as a file, using external tools from - ImageMagick or - GraphicsMagick. At least one of these tool must be installed for the method to succeed. - - It is recommended to use the generic method save(const char*, int) const instead, as it can handle some file formats natively. - **/ - const CImg& save_other(const char *const filename, const unsigned int quality=100) const { - if (!filename) - throw CImgArgumentException(_cimg_instance - "save_other(): Specified filename is (null).", - cimg_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - const unsigned int omode = cimg::exception_mode(); - bool is_saved = true; - cimg::exception_mode() = 0; - try { save_magick(filename); } - catch (CImgException&) { - try { save_imagemagick_external(filename,quality); } - catch (CImgException&) { - try { save_graphicsmagick_external(filename,quality); } - catch (CImgException&) { - is_saved = false; - } - } - } - cimg::exception_mode() = omode; - if (!is_saved) - throw CImgIOException(_cimg_instance - "save_other(): Failed to save file '%s'. Format is not natively supported, and no external commands succeeded.", - cimg_instance, - filename); - return *this; - } - - // [internal] Return a 40x38 color logo of a 'danger' item. - static CImg _logo40x38() { - CImg res(40,38,1,3); - const unsigned char *ptrs = cimg::logo40x38; - T *ptr1 = res.data(0,0,0,0), *ptr2 = res.data(0,0,0,1), *ptr3 = res.data(0,0,0,2); - for (unsigned long off = 0; off<(unsigned long)res._width*res._height;) { - const unsigned char n = *(ptrs++), r = *(ptrs++), g = *(ptrs++), b = *(ptrs++); - for (unsigned int l = 0; l structure - # - # - # - #------------------------------------------ - */ - //! Represent a list of images CImg. - template - struct CImgList { - unsigned int _width, _allocated_width; - CImg *_data; - - //! Simple iterator type, to loop through each image of a list. - /** - \note - - The \c CImgList::iterator type is defined as a CImg*. - - You may use it like this: - \code - CImgList<> list; // Assuming this image list is not empty. - for (CImgList<>::iterator it = list.begin(); it* iterator; - - //! Simple const iterator type, to loop through each image of a \c const list instance. - /** - \note - - The \c CImgList::const_iterator type is defined to be a const CImg*. - - Similar to CImgList::iterator, but for constant list instances. - **/ - typedef const CImg* const_iterator; - - //! Pixel value type. - /** - Refer to the pixels value type of the images in the list. - \note - - The \c CImgList::value_type type of a \c CImgList is defined to be a \c T. It is then similar to CImg::value_type. - - \c CImgList::value_type is actually not used in %CImg methods. It has been mainly defined for - compatibility with STL naming conventions. - **/ - typedef T value_type; - - // Define common T-dependant types. - typedef typename cimg::superset::type Tbool; - typedef typename cimg::superset::type Tuchar; - typedef typename cimg::superset::type Tchar; - typedef typename cimg::superset::type Tushort; - typedef typename cimg::superset::type Tshort; - typedef typename cimg::superset::type Tuint; - typedef typename cimg::superset::type Tint; - typedef typename cimg::superset::type Tulong; - typedef typename cimg::superset::type Tlong; - typedef typename cimg::superset::type Tfloat; - typedef typename cimg::superset::type Tdouble; - typedef typename cimg::last::type boolT; - typedef typename cimg::last::type ucharT; - typedef typename cimg::last::type charT; - typedef typename cimg::last::type ushortT; - typedef typename cimg::last::type shortT; - typedef typename cimg::last::type uintT; - typedef typename cimg::last::type intT; - typedef typename cimg::last::type ulongT; - typedef typename cimg::last::type longT; - typedef typename cimg::last::type floatT; - typedef typename cimg::last::type doubleT; - - //@} - //--------------------------- - // - //! \name Plugins - //@{ - //--------------------------- -#ifdef cimglist_plugin -#include cimglist_plugin -#endif -#ifdef cimglist_plugin1 -#include cimglist_plugin1 -#endif -#ifdef cimglist_plugin2 -#include cimglist_plugin2 -#endif -#ifdef cimglist_plugin3 -#include cimglist_plugin3 -#endif -#ifdef cimglist_plugin4 -#include cimglist_plugin4 -#endif -#ifdef cimglist_plugin5 -#include cimglist_plugin5 -#endif -#ifdef cimglist_plugin6 -#include cimglist_plugin6 -#endif -#ifdef cimglist_plugin7 -#include cimglist_plugin7 -#endif -#ifdef cimglist_plugin8 -#include cimglist_plugin8 -#endif - - //@} - //-------------------------------------------------------- - // - //! \name Constructors / Destructor / Instance Management - //@{ - //-------------------------------------------------------- - - //! Destructor. - /** - Destroy current list instance. - \note - - Any allocated buffer is deallocated. - - Destroying an empty list does nothing actually. - **/ - ~CImgList() { - delete[] _data; - } - - //! Default constructor. - /** - Construct a new empty list instance. - \note - - An empty list has no pixel data and its dimension width() is set to \c 0, as well as its image buffer pointer data(). - - An empty list may be reassigned afterwards, with the family of the assign() methods. In all cases, the type of pixels stays \c T. - **/ - CImgList(): - _width(0),_allocated_width(0),_data(0) {} - - //! Construct list containing empty images. - /** - \param n Number of empty images. - \note Useful when you know by advance the number of images you want to manage, as - it will allocate the right amount of memory for the list, without needs for reallocation - (that may occur when starting from an empty list and inserting several images in it). - **/ - explicit CImgList(const unsigned int n):_width(n) { - if (n) _data = new CImg[_allocated_width = cimg::max(16UL,cimg::nearest_pow2(n))]; - else { _allocated_width = 0; _data = 0; } - } - - //! Construct list containing images of specified size. - /** - \param n Number of images. - \param width Width of images. - \param height Height of images. - \param depth Depth of images. - \param spectrum Number of channels of images. - \note Pixel values are not initialized and may probably contain garbage. - **/ - CImgList(const unsigned int n, const unsigned int width, const unsigned int height=1, - const unsigned int depth=1, const unsigned int spectrum=1): - _width(0),_allocated_width(0),_data(0) { - assign(n); - cimglist_apply(*this,assign)(width,height,depth,spectrum); - } - - //! Construct list containing images of specified size, and initialize pixel values. - /** - \param n Number of images. - \param width Width of images. - \param height Height of images. - \param depth Depth of images. - \param spectrum Number of channels of images. - \param val Initialization value for images pixels. - **/ - CImgList(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const T val): - _width(0),_allocated_width(0),_data(0) { - assign(n); - cimglist_apply(*this,assign)(width,height,depth,spectrum,val); - } - - //! Construct list containing images of specified size, and initialize pixel values from a sequence of integers. - /** - \param n Number of images. - \param width Width of images. - \param height Height of images. - \param depth Depth of images. - \param spectrum Number of channels of images. - \param val0 First value of the initializing integers sequence. - \param val1 Second value of the initializing integers sequence. - \warning You must specify at least width*height*depth*spectrum values in your argument list, or you will probably segfault. - **/ - CImgList(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...): - _width(0),_allocated_width(0),_data(0) { -#define _CImgList_stdarg(t) { \ - assign(n,width,height,depth,spectrum); \ - const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; \ - T *ptrd = _data->_data; \ - va_list ap; \ - va_start(ap,val1); \ - for (unsigned long l = 0, s = 0, i = 0; iwidth*height*depth*spectrum values in your argument list, or you will probably segfault. - **/ - CImgList(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...): - _width(0),_allocated_width(0),_data(0) { - _CImgList_stdarg(double); - } - - //! Construct list containing copies of an input image. - /** - \param n Number of images. - \param img Input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of \c img. - **/ - template - CImgList(const unsigned int n, const CImg& img, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(n); - cimglist_apply(*this,assign)(img,is_shared); - } - - //! Construct list from one image. - /** - \param img Input image to copy in the constructed list. - \param is_shared Tells if the element of the list is a shared or non-shared copy of \c img. - **/ - template - explicit CImgList(const CImg& img, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(1); - _data[0].assign(img,is_shared); - } - - //! Construct list from two images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(2); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); - } - - //! Construct list from three images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(3); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); - } - - //! Construct list from four images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param img4 Fourth input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(4); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - } - - //! Construct list from five images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param img4 Fourth input image to copy in the constructed list. - \param img5 Fifth input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(5); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); - } - - //! Construct list from six images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param img4 Fourth input image to copy in the constructed list. - \param img5 Fifth input image to copy in the constructed list. - \param img6 Sixth input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(6); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); - } - - //! Construct list from seven images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param img4 Fourth input image to copy in the constructed list. - \param img5 Fifth input image to copy in the constructed list. - \param img6 Sixth input image to copy in the constructed list. - \param img7 Seventh input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const CImg& img7, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(7); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); - } - - //! Construct list from eight images. - /** - \param img1 First input image to copy in the constructed list. - \param img2 Second input image to copy in the constructed list. - \param img3 Third input image to copy in the constructed list. - \param img4 Fourth input image to copy in the constructed list. - \param img5 Fifth input image to copy in the constructed list. - \param img6 Sixth input image to copy in the constructed list. - \param img7 Seventh input image to copy in the constructed list. - \param img8 Eighth input image to copy in the constructed list. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const CImg& img7, const CImg& img8, const bool is_shared=false): - _width(0),_allocated_width(0),_data(0) { - assign(8); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); - } - - //! Construct list copy. - /** - \param list Input list to copy. - \note The shared state of each element of the constructed list is kept the same as in \c list. - **/ - template - CImgList(const CImgList& list):_width(0),_allocated_width(0),_data(0) { - assign(list._width); - cimglist_for(*this,l) _data[l].assign(list[l],false); - } - - //! Construct list copy \specialization. - CImgList(const CImgList& list):_width(0),_allocated_width(0),_data(0) { - assign(list._width); - cimglist_for(*this,l) _data[l].assign(list[l],list[l]._is_shared); - } - - //! Construct list copy, and force the shared state of the list elements. - /** - \param list Input list to copy. - \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. - **/ - template - CImgList(const CImgList& list, const bool is_shared):_width(0),_allocated_width(0),_data(0) { - assign(list._width); - cimglist_for(*this,l) _data[l].assign(list[l],is_shared); - } - - //! Construct list by reading the content of a file. - /** - \param filename Filename, as a C-string. - **/ - explicit CImgList(const char *const filename):_width(0),_allocated_width(0),_data(0) { - assign(filename); - } - - //! Construct list from the content of a display window. - /** - \param disp Display window to get content from. - \note Constructed list contains a single image only. - **/ - explicit CImgList(const CImgDisplay& disp):_width(0),_allocated_width(0),_data(0) { - assign(disp); - } - - //! Return a list with elements being shared copies of images in the list instance. - /** - \note list2 = list1.get_shared() is equivalent to list2.assign(list1,true). - **/ - CImgList get_shared() { - CImgList res(_width); - cimglist_for(*this,l) res[l].assign(_data[l],true); - return res; - } - - //! Return a list with elements being shared copies of images in the list instance \const. - const CImgList get_shared() const { - CImgList res(_width); - cimglist_for(*this,l) res[l].assign(_data[l],true); - return res; - } - - //! Destructor \inplace. - /** - \see CImgList(). - **/ - CImgList& assign() { - delete[] _data; - _width = _allocated_width = 0; - _data = 0; - return *this; - } - - //! Destructor \inplace. - /** - Equivalent to assign(). - \note Only here for compatibility with STL naming conventions. - **/ - CImgList& clear() { - return assign(); - } - - //! Construct list containing empty images \inplace. - /** - \see CImgList(unsigned int). - **/ - CImgList& assign(const unsigned int n) { - if (!n) return assign(); - if (_allocated_width(n<<2)) { - delete[] _data; - _data = new CImg[_allocated_width=cimg::max(16UL,cimg::nearest_pow2(n))]; - } - _width = n; - return *this; - } - - //! Construct list containing images of specified size \inplace. - /** - \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int). - **/ - CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height=1, - const unsigned int depth=1, const unsigned int spectrum=1) { - assign(n); - cimglist_apply(*this,assign)(width,height,depth,spectrum); - return *this; - } - - //! Construct list containing images of specified size, and initialize pixel values \inplace. - /** - \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, const T). - **/ - CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const T val) { - assign(n); - cimglist_apply(*this,assign)(width,height,depth,spectrum,val); - return *this; - } - - //! Construct list containing images of specified size, and initialize pixel values from a sequence of integers \inplace. - /** - \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, const int, const int, ...). - **/ - CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...) { - _CImgList_stdarg(int); - return *this; - } - - //! Construct list containing images of specified size, and initialize pixel values from a sequence of doubles \inplace. - /** - \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, const double, const double, ...). - **/ - CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, - const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...) { - _CImgList_stdarg(double); - return *this; - } - - //! Construct list containing copies of an input image \inplace. - /** - \see CImgList(unsigned int, const CImg&, bool). - **/ - template - CImgList& assign(const unsigned int n, const CImg& img, const bool is_shared=false) { - assign(n); - cimglist_apply(*this,assign)(img,is_shared); - return *this; - } - - //! Construct list from one image \inplace. - /** - \see CImgList(const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img, const bool is_shared=false) { - assign(1); - _data[0].assign(img,is_shared); - return *this; - } - - //! Construct list from two images \inplace. - /** - \see CImgList(const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const bool is_shared=false) { - assign(2); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); - return *this; - } - - //! Construct list from three images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const bool is_shared=false) { - assign(3); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); - return *this; - } - - //! Construct list from four images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const bool is_shared=false) { - assign(4); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - return *this; - } - - //! Construct list from five images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const bool is_shared=false) { - assign(5); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); - return *this; - } - - //! Construct list from six images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const bool is_shared=false) { - assign(6); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); - return *this; - } - - //! Construct list from seven images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const CImg& img7, const bool is_shared=false) { - assign(7); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); - return *this; - } - - //! Construct list from eight images \inplace. - /** - \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, bool). - **/ - template - CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, - const CImg& img5, const CImg& img6, const CImg& img7, const CImg& img8, - const bool is_shared=false) { - assign(8); - _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); - _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); - return *this; - } - - //! Construct list as a copy of an existing list and force the shared state of the list elements \inplace. - /** - \see CImgList(const CImgList&, bool is_shared). - **/ - template - CImgList& assign(const CImgList& list, const bool is_shared=false) { - cimg::unused(is_shared); - assign(list._width); - cimglist_for(*this,l) _data[l].assign(list[l],false); - return *this; - } - - //! Construct list as a copy of an existing list and force the shared state of the list elements \inplace \specialization. - CImgList& assign(const CImgList& list, const bool is_shared=false) { - if (this==&list) return *this; - CImgList res(list._width); - cimglist_for(res,l) res[l].assign(list[l],is_shared); - return res.move_to(*this); - } - - //! Construct list by reading the content of a file \inplace. - /** - \see CImgList(const char *const). - **/ - CImgList& assign(const char *const filename) { - return load(filename); - } - - //! Construct list from the content of a display window \inplace. - /** - \see CImgList(const CImgDisplay&). - **/ - CImgList& assign(const CImgDisplay &disp) { - return assign(CImg(disp)); - } - - //! Transfer the content of the list instance to another list. - /** - \param list Destination list. - \note When returning, the current list instance is empty and the initial content of \c list is destroyed. - **/ - template - CImgList& move_to(CImgList& list) { - list.assign(_width); - bool is_one_shared_element = false; - cimglist_for(*this,l) is_one_shared_element|=_data[l]._is_shared; - if (is_one_shared_element) cimglist_for(*this,l) list[l].assign(_data[l]); - else cimglist_for(*this,l) _data[l].move_to(list[l]); - assign(); - return list; - } - - //! Transfer the content of the list instance at a specified position in another list. - /** - \param list Destination list. - \param pos Index of the insertion in the list. - \note When returning, the list instance is empty and the initial content of \c list is preserved - (only images indexes may be modified). - **/ - template - CImgList& move_to(CImgList& list, const unsigned int pos) { - if (is_empty()) return list; - const unsigned int npos = pos>list._width?list._width:pos; - list.insert(_width,npos); - bool is_one_shared_element = false; - cimglist_for(*this,l) is_one_shared_element|=_data[l]._is_shared; - if (is_one_shared_element) cimglist_for(*this,l) list[npos+l].assign(_data[l]); - else cimglist_for(*this,l) _data[l].move_to(list[npos+l]); - assign(); - return list; - } - - //! Swap all fields between two list instances. - /** - \param list List to swap fields with. - \note Can be used to exchange the content of two lists in a fast way. - **/ - CImgList& swap(CImgList& list) { - cimg::swap(_width,list._width); - cimg::swap(_allocated_width,list._allocated_width); - cimg::swap(_data,list._data); - return list; - } - - //! Return a reference to an empty list. - /** - \note Can be used to define default values in a function taking a CImgList as an argument. - \code - void f(const CImgList& list=CImgList::empty()); - \endcode - **/ - static CImgList& empty() { - static CImgList _empty; - return _empty.assign(); - } - - //@} - //------------------------------------------ - // - //! \name Overloaded Operators - //@{ - //------------------------------------------ - - //! Return a reference to one image element of the list. - /** - \param pos Indice of the image element. - **/ - CImg& operator()(const unsigned int pos) { -#if cimg_verbosity>=3 - if (pos>=_width) { - cimg::warn(_cimglist_instance - "operator(): Invalid image request, at position [%u].", - cimglist_instance, - pos); - return *_data; - } -#endif - return _data[pos]; - } - - //! Return a reference to one image of the list. - /** - \param pos Indice of the image element. - **/ - const CImg& operator()(const unsigned int pos) const { - return const_cast*>(this)->operator()(pos); - } - - //! Return a reference to one pixel value of one image of the list. - /** - \param pos Indice of the image element. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list(n,x,y,z,c) is equivalent to list[n](x,y,z,c). - **/ - T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, - const unsigned int z=0, const unsigned int c=0) { - return (*this)[pos](x,y,z,c); - } - - //! Return a reference to one pixel value of one image of the list \const. - const T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, - const unsigned int z=0, const unsigned int c=0) const { - return (*this)[pos](x,y,z,c); - } - - //! Return pointer to the first image of the list. - /** - \note Images in a list are stored as a buffer of \c CImg. - **/ - operator CImg*() { - return _data; - } - - //! Return pointer to the first image of the list \const. - operator const CImg*() const { - return _data; - } - - //! Construct list from one image \inplace. - /** - \param img Input image to copy in the constructed list. - \note list = img; is equivalent to list.assign(img);. - **/ - template - CImgList& operator=(const CImg& img) { - return assign(img); - } - - //! Construct list from another list. - /** - \param list Input list to copy. - \note list1 = list2 is equivalent to list1.assign(list2);. - **/ - template - CImgList& operator=(const CImgList& list) { - return assign(list); - } - - //! Construct list from another list \specialization. - CImgList& operator=(const CImgList& list) { - return assign(list); - } - - //! Construct list by reading the content of a file \inplace. - /** - \see CImgList(const char *const). - **/ - CImgList& operator=(const char *const filename) { - return assign(filename); - } - - //! Construct list from the content of a display window \inplace. - /** - \see CImgList(const CImgDisplay&). - **/ - CImgList& operator=(const CImgDisplay& disp) { - return assign(disp); - } - - //! Return a non-shared copy of a list. - /** - \note +list is equivalent to CImgList(list,false). It forces the copy to have non-shared elements. - **/ - CImgList operator+() const { - return CImgList(*this,false); - } - - //! Return a copy of the list instance, where image \c img has been inserted at the end. - /** - \param img Image inserted at the end of the instance copy. - \note Define a convenient way to create temporary lists of images, as in the following code: - \code - (img1,img2,img3,img4).display("My four images"); - \endcode - **/ - template - CImgList& operator,(const CImg& img) { - return insert(img); - } - - //! Return a copy of the list instance, where image \c img has been inserted at the end \const. - template - CImgList operator,(const CImg& img) const { - return (+*this).insert(img); - } - - //! Return a copy of the list instance, where all elements of input list \c list have been inserted at the end. - /** - \param list List inserted at the end of the instance copy. - **/ - template - CImgList& operator,(const CImgList& list) { - return insert(list); - } - - //! Return a copy of the list instance, where all elements of input list \c list have been inserted at the end \const. - template - CImgList& operator,(const CImgList& list) const { - return (+*this).insert(list); - } - - //! Return image corresponding to the appending of all images of the instance list along specified axis. - /** - \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \note list>'x' is equivalent to list.get_append('x'). - **/ - CImg operator>(const char axis) const { - return get_append(axis,0); - } - - //! Return list corresponding to the splitting of all images of the instance list along specified axis. - /** - \param axis Axis used for image splitting. - \note list<'x' is equivalent to list.get_split('x'). - **/ - CImgList operator<(const char axis) const { - return get_split(axis); - } - - //@} - //------------------------------------- - // - //! \name Instance Characteristics - //@{ - //------------------------------------- - - //! Return the type of image pixel values as a C string. - /** - Return a \c char* string containing the usual type name of the image pixel values - (i.e. a stringified version of the template parameter \c T). - \note - - The returned string may contain spaces (as in \c "unsigned char"). - - If the pixel type \c T does not correspond to a registered type, the string "unknown" is returned. - **/ - static const char* pixel_type() { - return cimg::type::string(); - } - - //! Return the size of the list, i.e. the number of images contained in it. - /** - \note Similar to size() but returns result as a (signed) integer. - **/ - int width() const { - return (int)_width; - } - - //! Return the size of the list, i.e. the number of images contained in it. - /** - \note Similar to width() but returns result as an unsigned integer. - **/ - unsigned int size() const { - return _width; - } - - //! Return pointer to the first image of the list. - /** - \note Images in a list are stored as a buffer of \c CImg. - **/ - CImg *data() { - return _data; - } - - //! Return pointer to the first image of the list \const. - const CImg *data() const { - return _data; - } - - //! Return pointer to the pos-th image of the list. - /** - \param pos Indice of the image element to access. - \note list.data(n); is equivalent to list.data + n;. - **/ -#if cimg_verbosity>=3 - CImg *data(const unsigned int pos) { - if (pos>=size()) - cimg::warn(_cimglist_instance - "data(): Invalid pointer request, at position [%u].", - cimglist_instance, - pos); - return _data + pos; - } - - const CImg *data(const unsigned int l) const { - return const_cast*>(this)->data(l); - } -#else - CImg *data(const unsigned int l) { - return _data + l; - } - - //! Return pointer to the pos-th image of the list \const. - const CImg *data(const unsigned int l) const { - return _data + l; - } -#endif - - //! Return iterator to the first image of the list. - /** - **/ - iterator begin() { - return _data; - } - - //! Return iterator to the first image of the list \const. - const_iterator begin() const { - return _data; - } - - //! Return iterator to one position after the last image of the list. - /** - **/ - iterator end() { - return _data + _width; - } - - //! Return iterator to one position after the last image of the list \const. - const_iterator end() const { - return _data + _width; - } - - //! Return reference to the first image of the list. - /** - **/ - CImg& front() { - return *_data; - } - - //! Return reference to the first image of the list \const. - const CImg& front() const { - return *_data; - } - - //! Return a reference to the last image of the list. - /** - **/ - const CImg& back() const { - return *(_data + _width - 1); - } - - //! Return a reference to the last image of the list \const. - CImg& back() { - return *(_data + _width - 1); - } - - //! Return pos-th image of the list. - /** - \param pos Indice of the image element to access. - **/ - CImg& at(const int pos) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "at(): Empty instance.", - cimglist_instance); - - return _data[pos<0?0:pos>=(int)_width?(int)_width-1:pos]; - } - - //! Access to pixel value with Dirichlet boundary conditions. - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note list.atNXYZC(p,x,y,z,c); is equivalent to list[p].atXYZC(x,y,z,c);. - **/ - T& atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) { - return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZC(x,y,z,c,out_value); - } - - //! Access to pixel value with Dirichlet boundary conditions \const. - T atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { - return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZC(x,y,z,c,out_value); - } - - //! Access to pixel value with Neumann boundary conditions. - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list.atNXYZC(p,x,y,z,c); is equivalent to list[p].atXYZC(x,y,z,c);. - **/ - T& atNXYZC(const int pos, const int x, const int y, const int z, const int c) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXYZC(): Empty instance.", - cimglist_instance); - - return _atNXYZC(pos,x,y,z,c); - } - - //! Access to pixel value with Neumann boundary conditions \const. - T atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXYZC(): Empty instance.", - cimglist_instance); - - return _atNXYZC(pos,x,y,z,c); - } - - T& _atNXYZC(const int pos, const int x, const int y, const int z, const int c) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); - } - - T _atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); - } - - //! Access to pixel value with Dirichlet boundary conditions for the three first coordinates (\c pos, \c x,\c y,\c z). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) { - return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZ(x,y,z,c,out_value); - } - - //! Access to pixel value with Dirichlet boundary conditions for the three first coordinates (\c pos, \c x,\c y,\c z) \const. - T atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { - return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZ(x,y,z,c,out_value); - } - - //! Access to pixel value with Neumann boundary conditions for the four first coordinates (\c pos, \c x,\c y,\c z). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXYZ(): Empty instance.", - cimglist_instance); - - return _atNXYZ(pos,x,y,z,c); - } - - //! Access to pixel value with Neumann boundary conditions for the four first coordinates (\c pos, \c x,\c y,\c z) \const. - T atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXYZ(): Empty instance.", - cimglist_instance); - - return _atNXYZ(pos,x,y,z,c); - } - - T& _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); - } - - T _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); - } - - //! Access to pixel value with Dirichlet boundary conditions for the three first coordinates (\c pos, \c x,\c y). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) { - return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXY(x,y,z,c,out_value); - } - - //! Access to pixel value with Dirichlet boundary conditions for the three first coordinates (\c pos, \c x,\c y) \const. - T atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { - return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXY(x,y,z,c,out_value); - } - - //! Access to pixel value with Neumann boundary conditions for the three first coordinates (\c pos, \c x,\c y). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXY(): Empty instance.", - cimglist_instance); - - return _atNXY(pos,x,y,z,c); - } - - //! Access to pixel value with Neumann boundary conditions for the three first coordinates (\c pos, \c x,\c y) \const. - T atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNXY(): Empty instance.", - cimglist_instance); - - return _atNXY(pos,x,y,z,c); - } - - T& _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); - } - - T _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); - } - - //! Access to pixel value with Dirichlet boundary conditions for the two first coordinates (\c pos,\c x). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) { - return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atX(x,y,z,c,out_value); - } - - //! Access to pixel value with Dirichlet boundary conditions for the two first coordinates (\c pos,\c x) \const. - T atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { - return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atX(x,y,z,c,out_value); - } - - //! Access to pixel value with Neumann boundary conditions for the two first coordinates (\c pos, \c x). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNX(): Empty instance.", - cimglist_instance); - - return _atNX(pos,x,y,z,c); - } - - //! Access to pixel value with Neumann boundary conditions for the two first coordinates (\c pos, \c x) \const. - T atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atNX(): Empty instance.", - cimglist_instance); - - return _atNX(pos,x,y,z,c); - } - - T& _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); - } - - T _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); - } - - //! Access to pixel value with Dirichlet boundary conditions for the first coordinates (\c pos). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \param out_value Default value returned if \c offset is outside image bounds. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) { - return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):(*this)(pos,x,y,z,c); - } - - //! Access to pixel value with Dirichlet boundary conditions for the first coordinates (\c pos) \const. - T atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { - return (pos<0 || pos>=(int)_width)?out_value:(*this)(pos,x,y,z,c); - } - - //! Return pixel value with Neumann boundary conditions for the first coordinates (\c pos). - /** - \param pos Indice of the image element to access. - \param x X-coordinate of the pixel value. - \param y Y-coordinate of the pixel value. - \param z Z-coordinate of the pixel value. - \param c C-coordinate of the pixel value. - \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. - **/ - T& atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atN(): Empty instance.", - cimglist_instance); - return _atN(pos,x,y,z,c); - } - - //! Return pixel value with Neumann boundary conditions for the first coordinates (\c pos) \const. - T atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "atN(): Empty instance.", - cimglist_instance); - return _atN(pos,x,y,z,c); - } - - T& _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); - } - - T _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); - } - - //! Return a C-string containing the values of all images in the instance list. - /** - \param separator Character separator set between consecutive pixel values. - \param max_size Maximum size of the returned string. - \note The result is returne as a CImg image whose pixel buffer contains the desired C-string. - **/ - CImg value_string(const char separator=',', const unsigned int max_size=0) const { - if (is_empty()) return CImg(1,1,1,1,0); - CImgList items; - for (unsigned int l = 0; l<_width-1; ++l) { - CImg item = _data[l].value_string(separator,0); - item.back() = separator; - item.move_to(items); - } - _data[_width-1].value_string(separator,0).move_to(items); - CImg res; (items>'x').move_to(res); - if (max_size) { res.crop(0,max_size); res(max_size) = 0; } - return res; - } - - //@} - //------------------------------------- - // - //! \name Instance Checking - //@{ - //------------------------------------- - - //! Return \c true if list is empty. - /** - **/ - bool is_empty() const { - return (!_data || !_width); - } - - //! Test if number of image elements is equal to specified value. - /** - \param size_n Number of image elements to test. - **/ - bool is_sameN(const unsigned int size_n) const { - return _width==size_n; - } - - //! Test if number of image elements is equal between two images lists. - /** - \param list Input list to compare with. - **/ - template - bool is_sameN(const CImgList& list) const { - return is_sameN(list._width); - } - - // Define useful functions to check list dimensions. - // (cannot be documented because macro-generated). -#define _cimglist_def_is_same1(axis) \ - bool is_same##axis(const unsigned int val) const { \ - bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis(val); return res; \ - } \ - bool is_sameN##axis(const unsigned int n, const unsigned int val) const { \ - return is_sameN(n) && is_same##axis(val); \ - } \ - -#define _cimglist_def_is_same2(axis1,axis2) \ - bool is_same##axis1##axis2(const unsigned int val1, const unsigned int val2) const { \ - bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis1##axis2(val1,val2); return res; \ - } \ - bool is_sameN##axis1##axis2(const unsigned int n, const unsigned int val1, const unsigned int val2) const { \ - return is_sameN(n) && is_same##axis1##axis2(val1,val2); \ - } \ - -#define _cimglist_def_is_same3(axis1,axis2,axis3) \ - bool is_same##axis1##axis2##axis3(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { \ - bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis1##axis2##axis3(val1,val2,val3); return res; \ - } \ - bool is_sameN##axis1##axis2##axis3(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { \ - return is_sameN(n) && is_same##axis1##axis2##axis3(val1,val2,val3); \ - } \ - -#define _cimglist_def_is_same(axis) \ - template bool is_same##axis(const CImg& img) const { \ - bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis(img); return res; \ - } \ - template bool is_same##axis(const CImgList& list) const { \ - const unsigned int lmin = cimg::min(_width,list._width); \ - bool res = true; for (unsigned int l = 0; l bool is_sameN##axis(const unsigned int n, const CImg& img) const { \ - return (is_sameN(n) && is_same##axis(img)); \ - } \ - template bool is_sameN##axis(const CImgList& list) const { \ - return (is_sameN(list) && is_same##axis(list)); \ - } - - _cimglist_def_is_same(XY) - _cimglist_def_is_same(XZ) - _cimglist_def_is_same(XC) - _cimglist_def_is_same(YZ) - _cimglist_def_is_same(YC) - _cimglist_def_is_same(XYZ) - _cimglist_def_is_same(XYC) - _cimglist_def_is_same(YZC) - _cimglist_def_is_same(XYZC) - _cimglist_def_is_same1(X) - _cimglist_def_is_same1(Y) - _cimglist_def_is_same1(Z) - _cimglist_def_is_same1(C) - _cimglist_def_is_same2(X,Y) - _cimglist_def_is_same2(X,Z) - _cimglist_def_is_same2(X,C) - _cimglist_def_is_same2(Y,Z) - _cimglist_def_is_same2(Y,C) - _cimglist_def_is_same2(Z,C) - _cimglist_def_is_same3(X,Y,Z) - _cimglist_def_is_same3(X,Y,C) - _cimglist_def_is_same3(X,Z,C) - _cimglist_def_is_same3(Y,Z,C) - - //! Test if dimensions of each image of the list match specified arguments. - /** - \param dx Checked image width. - \param dy Checked image height. - \param dz Checked image depth. - \param dc Checked image spectrum. - **/ - bool is_sameXYZC(const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { - bool res = true; - for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(dx,dy,dz,dc); - return res; - } - - //! Test if list dimensions match specified arguments. - /** - \param n Number of images in the list. - \param dx Checked image width. - \param dy Checked image height. - \param dz Checked image depth. - \param dc Checked image spectrum. - **/ - bool is_sameNXYZC(const unsigned int n, const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { - return is_sameN(n) && is_sameXYZC(dx,dy,dz,dc); - } - - //! Test if list contains one particular pixel location. - /** - \param n Index of the image whom checked pixel value belong to. - \param x X-coordinate of the checked pixel value. - \param y Y-coordinate of the checked pixel value. - \param z Z-coordinate of the checked pixel value. - \param c C-coordinate of the checked pixel value. - **/ - bool containsNXYZC(const int n, const int x=0, const int y=0, const int z=0, const int c=0) const { - if (is_empty()) return false; - return n>=0 && n<(int)_width && x>=0 && x<_data[n].width() && y>=0 && y<_data[n].height() && - z>=0 && z<_data[n].depth() && c>=0 && c<_data[n].spectrum(); - } - - //! Test if list contains image with specified indice. - /** - \param n Index of the checked image. - **/ - bool containsN(const int n) const { - if (is_empty()) return false; - return n>=0 && n<(int)_width; - } - - //! Test if one image of the list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - \param[out] n Index of image containing the pixel value, if test succeeds. - \param[out] x X-coordinate of the pixel value, if test succeeds. - \param[out] y Y-coordinate of the pixel value, if test succeeds. - \param[out] z Z-coordinate of the pixel value, if test succeeds. - \param[out] c C-coordinate of the pixel value, if test succeeds. - \note If true, set coordinates (n,x,y,z,c). - **/ - template - bool contains(const T& pixel, t& n, t& x, t&y, t& z, t& c) const { - if (is_empty()) return false; - cimglist_for(*this,l) if (_data[l].contains(pixel,x,y,z,c)) { n = (t)l; return true; } - return false; - } - - //! Test if one of the image list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - \param[out] n Index of image containing the pixel value, if test succeeds. - \param[out] x X-coordinate of the pixel value, if test succeeds. - \param[out] y Y-coordinate of the pixel value, if test succeeds. - \param[out] z Z-coordinate of the pixel value, if test succeeds. - \note If true, set coordinates (n,x,y,z). - **/ - template - bool contains(const T& pixel, t& n, t& x, t&y, t& z) const { - t c; - return contains(pixel,n,x,y,z,c); - } - - //! Test if one of the image list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - \param[out] n Index of image containing the pixel value, if test succeeds. - \param[out] x X-coordinate of the pixel value, if test succeeds. - \param[out] y Y-coordinate of the pixel value, if test succeeds. - \note If true, set coordinates (n,x,y). - **/ - template - bool contains(const T& pixel, t& n, t& x, t&y) const { - t z, c; - return contains(pixel,n,x,y,z,c); - } - - //! Test if one of the image list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - \param[out] n Index of image containing the pixel value, if test succeeds. - \param[out] x X-coordinate of the pixel value, if test succeeds. - \note If true, set coordinates (n,x). - **/ - template - bool contains(const T& pixel, t& n, t& x) const { - t y, z, c; - return contains(pixel,n,x,y,z,c); - } - - //! Test if one of the image list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - \param[out] n Index of image containing the pixel value, if test succeeds. - \note If true, set coordinates (n). - **/ - template - bool contains(const T& pixel, t& n) const { - t x, y, z, c; - return contains(pixel,n,x,y,z,c); - } - - //! Test if one of the image list contains the specified referenced value. - /** - \param pixel Reference to pixel value to test. - **/ - bool contains(const T& pixel) const { - unsigned int n, x, y, z, c; - return contains(pixel,n,x,y,z,c); - } - - //! Test if the list contains the image 'img'. - /** - \param img Reference to image to test. - \param[out] n Index of image in the list, if test succeeds. - \note If true, returns the position (n) of the image in the list. - **/ - template - bool contains(const CImg& img, t& n) const { - if (is_empty()) return false; - const CImg *const ptr = &img; - cimglist_for(*this,i) if (_data+i==ptr) { n = (t)i; return true; } - return false; - } - - //! Test if the list contains the image img. - /** - \param img Reference to image to test. - **/ - bool contains(const CImg& img) const { - unsigned int n; - return contains(img,n); - } - - //@} - //------------------------------------- - // - //! \name Mathematical Functions - //@{ - //------------------------------------- - - //! Return a reference to the minimum pixel value of the instance list. - /** - **/ - T& min() { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "min(): Empty instance.", - cimglist_instance); - T *ptr_min = _data->_data; - T min_value = *ptr_min; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) if (*ptrs_data; - T min_value = *ptr_min; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) if (*ptrs_data; - T max_value = *ptr_max; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); - } - return *ptr_max; - } - - //! Return a reference to the maximum pixel value of the instance list \const. - const T& max() const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "max(): Empty instance.", - cimglist_instance); - const T *ptr_max = _data->_data; - T max_value = *ptr_max; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); - } - return *ptr_max; - } - - //! Return a reference to the minimum pixel value of the instance list and return the maximum vvalue as well. - /** - \param[out] max_val Value of the maximum value found. - **/ - template - T& min_max(t& max_val) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "min_max(): Empty instance.", - cimglist_instance); - T *ptr_min = _data->_data; - T min_value = *ptr_min, max_value = min_value; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) { - const T val = *ptrs; - if (valmax_value) max_value = val; - } - } - max_val = (t)max_value; - return *ptr_min; - } - - //! Return a reference to the minimum pixel value of the instance list and return the maximum vvalue as well \const. - /** - \param[out] max_val Value of the maximum value found. - **/ - template - const T& min_max(t& max_val) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "min_max(): Empty instance.", - cimglist_instance); - const T *ptr_min = _data->_data; - T min_value = *ptr_min, max_value = min_value; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) { - const T val = *ptrs; - if (valmax_value) max_value = val; - } - } - max_val = (t)max_value; - return *ptr_min; - } - - //! Return a reference to the minimum pixel value of the instance list and return the minimum value as well. - /** - \param[out] min_val Value of the minimum value found. - **/ - template - T& max_min(t& min_val) { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "max_min(): Empty instance.", - cimglist_instance); - T *ptr_max = _data->_data; - T min_value = *ptr_max, max_value = min_value; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) { - const T val = *ptrs; - if (val>max_value) { max_value = val; ptr_max = ptrs; } - if (val - const T& max_min(t& min_val) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "max_min(): Empty instance.", - cimglist_instance); - const T *ptr_max = _data->_data; - T min_value = *ptr_max, max_value = min_value; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - cimg_for(img,ptrs,T) { - const T val = *ptrs; - if (val>max_value) { max_value = val; ptr_max = ptrs; } - if (val - CImgList& insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) { - const unsigned int npos = pos==~0U?_width:pos; - if (npos>_width) - throw CImgArgumentException(_cimglist_instance - "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", - cimglist_instance, - img._width,img._height,img._depth,img._spectrum,img._data,npos); - if (is_shared) - throw CImgArgumentException(_cimglist_instance - "insert(): Invalid insertion request of specified shared image CImg<%s>(%u,%u,%u,%u,%p) at position %u " - "(pixel types are different).", - cimglist_instance, - img.pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data,npos); - - CImg *const new_data = (++_width>_allocated_width)?new CImg[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; - if (!_data) { // Insert new element into empty list. - _data = new_data; - *_data = img; - } else { - if (new_data) { // Insert with re-allocation. - if (npos) std::memcpy(new_data,_data,sizeof(CImg)*npos); - if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); - std::memset(_data,0,sizeof(CImg)*(_width-1)); - delete[] _data; - _data = new_data; - } else if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); // Insert without re-allocation. - _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; - _data[npos] = img; - } - return *this; - } - - //! Insert a copy of the image \c img into the current image list, at position \c pos \specialization. - CImgList& insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) { - const unsigned int npos = pos==~0U?_width:pos; - if (npos>_width) - throw CImgArgumentException(_cimglist_instance - "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", - cimglist_instance, - img._width,img._height,img._depth,img._spectrum,img._data,npos); - CImg *const new_data = (++_width>_allocated_width)?new CImg[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; - if (!_data) { // Insert new element into empty list. - _data = new_data; - if (is_shared && img) { - _data->_width = img._width; _data->_height = img._height; _data->_depth = img._depth; _data->_spectrum = img._spectrum; - _data->_is_shared = true; _data->_data = img._data; - } else *_data = img; - } - else { - if (new_data) { // Insert with re-allocation. - if (npos) std::memcpy(new_data,_data,sizeof(CImg)*npos); - if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); - if (is_shared && img) { - new_data[npos]._width = img._width; new_data[npos]._height = img._height; new_data[npos]._depth = img._depth; - new_data[npos]._spectrum = img._spectrum; new_data[npos]._is_shared = true; new_data[npos]._data = img._data; - } else { - new_data[npos]._width = new_data[npos]._height = new_data[npos]._depth = new_data[npos]._spectrum = 0; new_data[npos]._data = 0; - new_data[npos] = img; - } - std::memset(_data,0,sizeof(CImg)*(_width-1)); - delete[] _data; - _data = new_data; - } else { // Insert without re-allocation. - if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); - if (is_shared && img) { - _data[npos]._width = img._width; _data[npos]._height = img._height; _data[npos]._depth = img._depth; _data[npos]._spectrum = img._spectrum; - _data[npos]._is_shared = true; _data[npos]._data = img._data; - } else { - _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; - _data[npos] = img; - } - } - } - return *this; - } - - //! Insert a copy of the image \c img into the current image list, at position \c pos \newinstance. - template - CImgList get_insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) const { - return (+*this).insert(img,pos,is_shared); - } - - //! Insert n empty images img into the current image list, at position \p pos. - /** - \param n Number of empty images to insert. - \param pos Index of the insertion. - **/ - CImgList& insert(const unsigned int n, const unsigned int pos=~0U) { - CImg empty; - if (!n) return *this; - const unsigned int npos = pos==~0U?_width:pos; - for (unsigned int i = 0; i get_insert(const unsigned int n, const unsigned int pos=~0U) const { - return (+*this).insert(n,pos); - } - - //! Insert \c n copies of the image \c img into the current image list, at position \c pos. - /** - \param n Number of image copies to insert. - \param img Image to insert by copy. - \param pos Index of the insertion. - \param is_shared Tells if inserted images are shared copies of \c img or not. - **/ - template - CImgList& insert(const unsigned int n, const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) { - if (!n) return *this; - const unsigned int npos = pos==~0U?_width:pos; - insert(img,npos,is_shared); - for (unsigned int i = 1; i - CImgList get_insert(const unsigned int n, const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) const { - return (+*this).insert(n,img,pos,is_shared); - } - - //! Insert a copy of the image list \c list into the current image list, starting from position \c pos. - /** - \param list Image list to insert. - \param pos Index of the insertion. - \param is_shared Tells if inserted images are shared copies of images of \c list or not. - **/ - template - CImgList& insert(const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) { - const unsigned int npos = pos==~0U?_width:pos; - if ((void*)this!=(void*)&list) cimglist_for(list,l) insert(list[l],npos+l,is_shared); - else insert(CImgList(list),npos,is_shared); - return *this; - } - - //! Insert a copy of the image list \c list into the current image list, starting from position \c pos \newinstance. - template - CImgList get_insert(const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) const { - return (+*this).insert(list,pos,is_shared); - } - - //! Insert n copies of the list \c list at position \c pos of the current list. - /** - \param n Number of list copies to insert. - \param list Image list to insert. - \param pos Index of the insertion. - \param is_shared Tells if inserted images are shared copies of images of \c list or not. - **/ - template - CImgList& insert(const unsigned int n, const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) { - if (!n) return *this; - const unsigned int npos = pos==~0U?_width:pos; - for (unsigned int i = 0; i - CImgList get_insert(const unsigned int n, const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) const { - return (+*this).insert(n,list,pos,is_shared); - } - - //! Remove all images between from indexes. - /** - \param pos1 Starting index of the removal. - \param pos2 Ending index of the removal. - **/ - CImgList& remove(const unsigned int pos1, const unsigned int pos2) { - const unsigned int - npos1 = pos1=_width) - throw CImgArgumentException(_cimglist_instance - "remove(): Invalid remove request at positions %u->%u.", - cimglist_instance, - npos1,tpos2); - else { - if (tpos2>=_width) - throw CImgArgumentException(_cimglist_instance - "remove(): Invalid remove request at positions %u->%u.", - cimglist_instance, - npos1,tpos2); - - for (unsigned int k = npos1; k<=npos2; ++k) _data[k].assign(); - const unsigned int nb = 1 + npos2 - npos1; - if (!(_width-=nb)) return assign(); - if (_width>(_allocated_width>>2) || _allocated_width<=16) { // Removing items without reallocation. - if (npos1!=_width) std::memmove(_data+npos1,_data+npos2+1,sizeof(CImg)*(_width - npos1)); - std::memset(_data + _width,0,sizeof(CImg)*nb); - } else { // Removing items with reallocation. - _allocated_width>>=2; - while (_allocated_width>16 && _width<(_allocated_width>>1)) _allocated_width>>=1; - CImg *const new_data = new CImg[_allocated_width]; - if (npos1) std::memcpy(new_data,_data,sizeof(CImg)*npos1); - if (npos1!=_width) std::memcpy(new_data+npos1,_data+npos2+1,sizeof(CImg)*(_width-npos1)); - if (_width!=_allocated_width) std::memset(new_data+_width,0,sizeof(_allocated_width - _width)); - std::memset(_data,0,sizeof(CImg)*(_width+nb)); - delete[] _data; - _data = new_data; - } - } - return *this; - } - - //! Remove all images between from indexes \newinstance. - CImgList get_remove(const unsigned int pos1, const unsigned int pos2) const { - return (+*this).remove(pos1,pos2); - } - - //! Remove image at index \c pos from the image list. - /** - \param pos Index of the image to remove. - **/ - CImgList& remove(const unsigned int pos) { - return remove(pos,pos); - } - - //! Remove image at index \c pos from the image list \newinstance. - CImgList get_remove(const unsigned int pos) const { - return (+*this).remove(pos); - } - - //! Remove last image. - /** - **/ - CImgList& remove() { - return remove(_width-1); - } - - //! Remove last image \newinstance. - CImgList get_remove() const { - return (+*this).remove(); - } - - //! Reverse list order. - CImgList& reverse() { - for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width-1-l]); - return *this; - } - - //! Reverse list order \newinstance. - CImgList get_reverse() const { - return (+*this).reverse(); - } - - //! Return a sublist. - /** - \param pos0 Starting index of the sublist. - \param pos1 Ending index of the sublist. - **/ - CImgList& images(const unsigned int pos0, const unsigned int pos1) { - return get_images(pos0,pos1).move_to(*this); - } - - //! Return a sublist \newinstance. - CImgList get_images(const unsigned int pos0, const unsigned int pos1) const { - if (pos0>pos1 || pos1>=_width) - throw CImgArgumentException(_cimglist_instance - "images(): Specified sub-list indices (%u->%u) are out of bounds.", - cimglist_instance, - pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l]); - return res; - } - - //! Return a shared sublist. - /** - \param pos0 Starting index of the sublist. - \param pos1 Ending index of the sublist. - **/ - CImgList get_shared_images(const unsigned int pos0, const unsigned int pos1) { - if (pos0>pos1 || pos1>=_width) - throw CImgArgumentException(_cimglist_instance - "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", - cimglist_instance, - pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); - return res; - } - - //! Return a shared sublist \newinstance. - const CImgList get_shared_images(const unsigned int pos0, const unsigned int pos1) const { - if (pos0>pos1 || pos1>=_width) - throw CImgArgumentException(_cimglist_instance - "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", - cimglist_instance, - pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); - return res; - } - - //! Return a single image which is the appending of all images of the current CImgList instance. - /** - \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - CImg get_append(const char axis, const float align=0) const { - if (is_empty()) return CImg(); - if (_width==1) return +((*this)[0]); - unsigned int dx = 0, dy = 0, dz = 0, dc = 0, pos = 0; - CImg res; - switch (cimg::uncase(axis)) { - case 'x' : { // Along the X-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) { dx+=img._width; dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } - } - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) res.draw_image(pos, - (int)(align*(dy-img._height)), - (int)(align*(dz-img._depth)), - (int)(align*(dc-img._spectrum)), - img); - pos+=img._width; - } - } break; - case 'y' : { // Along the Y-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) { dx = cimg::max(dx,img._width); dy+=img._height; dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } - } - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), - pos, - (int)(align*(dz-img._depth)), - (int)(align*(dc-img._spectrum)), - img); - pos+=img._height; - } - } break; - case 'z' : { // Along the Z-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz+=img._depth; dc = cimg::max(dc,img._spectrum); } - } - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), - (int)(align*(dy-img._height)), - pos, - (int)(align*(dc-img._spectrum)), - img); - pos+=img._depth; - } - } break; - default : { // Along the C-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc+=img._spectrum; } - } - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), - (int)(align*(dy-img._height)), - (int)(align*(dz-img._depth)), - pos, - img); - pos+=img._spectrum; - } - } - } - return res; - } - - //! Return a list where each image has been split along the specified axis. - /** - \param axis Axis to split images along. - \param nb Number of spliting parts for each image. - **/ - CImgList& split(const char axis, const int nb=0) { - return get_split(axis,nb).move_to(*this); - } - - //! Return a list where each image has been split along the specified axis \newinstance. - CImgList get_split(const char axis, const int nb=0) const { - CImgList res; - cimglist_for(*this,l) _data[l].get_split(axis,nb).move_to(res,~0U); - return res; - } - - //! Insert image at the end of the list. - /** - \param img Image to insert. - **/ - template - CImgList& push_back(const CImg& img) { - return insert(img); - } - - //! Insert image at the front of the list. - /** - \param img Image to insert. - **/ - template - CImgList& push_front(const CImg& img) { - return insert(img,0); - } - - //! Insert list at the end of the current list. - /** - \param list List to insert. - **/ - template - CImgList& push_back(const CImgList& list) { - return insert(list); - } - - //! Insert list at the front of the current list. - /** - \param list List to insert. - **/ - template - CImgList& push_front(const CImgList& list) { - return insert(list,0); - } - - //! Remove last image. - /** - **/ - CImgList& pop_back() { - return remove(_width-1); - } - - //! Remove first image. - /** - **/ - CImgList& pop_front() { - return remove(0); - } - - //! Remove image pointed by iterator. - /** - \param iter Iterator pointing to the image to remove. - **/ - CImgList& erase(const iterator iter) { - return remove(iter-_data); - } - - //@} - //---------------------------------- - // - //! \name Data Input - //@{ - //---------------------------------- - - //! Display a simple interactive interface to select images or sublists. - /** - \param disp Window instance to display selection and user interface. - \param feature_type Can be \c false to select a single image, or \c true to select a sublist. - \param axis Axis along whom images are appended for visualization. - \param align Alignment setting when images have not all the same size. - \return A one-column vector containing the selected image indexes. - **/ - CImg get_select(CImgDisplay &disp, const bool feature_type=true, - const char axis='x', const float align=0) const { - return _get_select(disp,0,feature_type,axis,align,0,false,false,false); - } - - //! Display a simple interactive interface to select images or sublists. - /** - \param title Title of a new window used to display selection and user interface. - \param feature_type Can be \c false to select a single image, or \c true to select a sublist. - \param axis Axis along whom images are appended for visualization. - \param align Alignment setting when images have not all the same size. - \return A one-column vector containing the selected image indexes. - **/ - CImg get_select(const char *const title, const bool feature_type=true, - const char axis='x', const float align=0) const { - CImgDisplay disp; - return _get_select(disp,title,feature_type,axis,align,0,false,false,false); - } - - CImg _get_select(CImgDisplay &disp, const char *const title, const bool feature_type, - const char axis, const float align, - const unsigned int orig, const bool resize_disp, - const bool exit_on_rightbutton, const bool exit_on_wheel) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "select(): Empty instance.", - cimglist_instance); - - // Create image correspondence table and get list dimensions for visualization. - CImgList _indices; - unsigned int max_width = 0, max_height = 0, sum_width = 0, sum_height = 0; - cimglist_for(*this,l) { - const CImg& img = _data[l]; - const unsigned int - w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), - h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); - if (w>max_width) max_width = w; - if (h>max_height) max_height = h; - sum_width+=w; sum_height+=h; - if (axis=='x') CImg(w,1,1,1,(unsigned int)l).move_to(_indices); - else CImg(h,1,1,1,(unsigned int)l).move_to(_indices); - } - const CImg indices0 = _indices>'x'; - - // Create display window. - if (!disp) { - if (axis=='x') disp.assign(cimg_fitscreen(sum_width,max_height,1),title?title:0,1); - else disp.assign(cimg_fitscreen(max_width,sum_height,1),title?title:0,1); - if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); - } else if (title) disp.set_title("%s",title); - if (resize_disp) { - if (axis=='x') disp.resize(cimg_fitscreen(sum_width,max_height,1),false); - else disp.resize(cimg_fitscreen(max_width,sum_height,1),false); - } - - const unsigned int old_normalization = disp.normalization(); - bool old_is_resized = disp.is_resized(); - disp._normalization = 0; - disp.show().set_key(0); - const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; - - // Enter event loop. - CImg visu0, visu; - CImg indices; - CImg positions(_width,4,1,1,-1); - int oindice0 = -1, oindice1 = -1, indice0 = -1, indice1 = -1; - bool is_clicked = false, is_selected = false, text_down = false, update_display = true; - unsigned int key = 0; - while (!is_selected && !disp.is_closed() && !key) { - - // Create background image. - if (!visu0) { - visu0.assign(disp._width,disp._height,1,3,0); visu.assign(); - (indices0.get_resize(axis=='x'?visu0._width:visu0._height,1)).move_to(indices); - unsigned int ind = 0; - if (axis=='x') for (unsigned int x = 0; x - onexone(1,1,1,1,0), - &src = _data[ind]?_data[ind]:onexone; - CImg res; - src.__get_select(disp,old_normalization,(src._width-1)/2,(src._height-1)/2,(src._depth-1)/2).move_to(res); - const unsigned int h = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,true); - res.resize(x - x0,cimg::max(32U,h*disp._height/max_height),1,res._spectrum==1?3:-100); - positions(ind,0) = positions(ind,2) = (int)x0; - positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height()-res.height())); - positions(ind,2)+=res._width; - positions(ind,3)+=res._height - 1; - visu0.draw_image(positions(ind,0),positions(ind,1),res); - } else for (unsigned int y = 0; y - &src = _data[ind], - _img2d = src._depth>1?src.get_projections2d((src._width-1)/2,(src._height-1)/2,(src._depth-1)/2):CImg(), - &img2d = _img2d?_img2d:src; - CImg res = old_normalization==1 || (old_normalization==3 && cimg::type::string()!=cimg::type::string())? - CImg(img2d.get_normalize(0,255)): - CImg(img2d); - if (res._spectrum>3) res.channels(0,2); - const unsigned int w = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,false); - res.resize(cimg::max(32U,w*disp._width/max_width),y - y0,1,res._spectrum==1?3:-100); - positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width()-res.width())); - positions(ind,1) = positions(ind,3) = (int)y0; - positions(ind,2)+=res._width - 1; - positions(ind,3)+=res._height; - visu0.draw_image(positions(ind,0),positions(ind,1),res); - } - if (axis=='x') --positions(ind,2); else --positions(ind,3); - update_display = true; - } - - if (!visu || oindice0!=indice0 || oindice1!=indice1) { - if (indice0>=0 && indice1>=0) { - visu.assign(visu0,false); - const int indm = cimg::min(indice0,indice1), indM = cimg::max(indice0,indice1); - for (int ind = indm; ind<=indM; ++ind) if (positions(ind,0)>=0) { - visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),background_color,0.2f); - if ((axis=='x' && positions(ind,2) - positions(ind,0)>=8) || - (axis!='x' && positions(ind,3) - positions(ind,1)>=8)) - visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),foreground_color,0.9f,0xAAAAAAAA); - } - const int yt = (int)text_down?visu.height()-13:0; - if (is_clicked) visu.draw_text(0,yt," Images #%u - #%u, Size = %u",foreground_color,background_color,0.7f,13, - orig + indm,orig + indM,indM - indm + 1); - else visu.draw_text(0,yt," Image #%u (%u,%u,%u,%u)",foreground_color,background_color,0.7f,13, - orig + indice0, - _data[orig+indice0]._width, - _data[orig+indice0]._height, - _data[orig+indice0]._depth, - _data[orig+indice0]._spectrum); - update_display = true; - } else visu.assign(); - } - if (!visu) { visu.assign(visu0,true); update_display = true; } - if (update_display) { visu.display(disp); update_display = false; } - disp.wait(); - - // Manage user events. - const int xm = disp.mouse_x(), ym = disp.mouse_y(); - int indice = -1; - - if (xm>=0) { - indice = (int)indices(axis=='x'?xm:ym); - if (disp.button()&1) { - if (!is_clicked) { is_clicked = true; oindice0 = indice0; indice0 = indice; } - oindice1 = indice1; indice1 = indice; - if (!feature_type) is_selected = true; - } else { - if (!is_clicked) { oindice0 = oindice1 = indice0; indice0 = indice1 = indice; } - else is_selected = true; - } - } else { - if (is_clicked) { - if (!(disp.button()&1)) { is_clicked = is_selected = false; indice0 = indice1 = -1; } - else indice1 = -1; - } else indice0 = indice1 = -1; - } - - if (disp.button()&4) { is_clicked = is_selected = false; indice0 = indice1 = -1; } - if (disp.button()&2 && exit_on_rightbutton) { is_selected = true; indice1 = indice0 = -1; } - if (disp.wheel() && exit_on_wheel) is_selected = true; - - switch (key = disp.key()) { -#if cimg_OS!=2 - case cimg::keyCTRLRIGHT : -#endif - case 0 : case cimg::keyCTRLLEFT : key = 0; break; - case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), - CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). - _is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.set_fullscreen(false).resize(cimg_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1),false)._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; - disp.set_key(key,false); key = 0; visu0.assign(); - } break; - case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - if (visu0) { - (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); - visu0.save(filename); - (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); - } - disp.set_key(key,false).wait(); key = 0; - } break; - case cimg::keyO : - if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { - static unsigned int snap_number = 0; - char filename[32] = { 0 }; - std::FILE *file; - do { -#ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); -#else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); -#endif - if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); - } while (file); - (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); - save(filename); - (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); - disp.set_key(key,false).wait(); key = 0; - } break; - } - if (disp.is_resized()) { disp.resize(false); visu0.assign(); } - if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} - else if (ym>=visu.height()-13) { if(text_down) { visu.assign(); text_down = false; }} - } - CImg res(1,2,1,1,-1); - if (is_selected) { if (feature_type) res.fill(cimg::min(indice0,indice1),cimg::max(indice0,indice1)); else res.fill(indice0); } - if (!(disp.button()&2)) disp.set_button(); - disp._normalization = old_normalization; - disp._is_resized = old_is_resized; - disp.set_key(key); - return res; - } - - //! Load a list from a file. - /** - \param filename Filename to read data from. - **/ - CImgList& load(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "load(): Specified filename is (null).", - cimglist_instance); - - if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { - char filename_local[1024] = { 0 }; - load(cimg::load_network_external(filename,filename_local)); - std::remove(filename_local); - return *this; - } - - const char *const ext = cimg::split_filename(filename); - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - try { -#ifdef cimglist_load_plugin - cimglist_load_plugin(filename); -#endif -#ifdef cimglist_load_plugin1 - cimglist_load_plugin1(filename); -#endif -#ifdef cimglist_load_plugin2 - cimglist_load_plugin2(filename); -#endif -#ifdef cimglist_load_plugin3 - cimglist_load_plugin3(filename); -#endif -#ifdef cimglist_load_plugin4 - cimglist_load_plugin4(filename); -#endif -#ifdef cimglist_load_plugin5 - cimglist_load_plugin5(filename); -#endif -#ifdef cimglist_load_plugin6 - cimglist_load_plugin6(filename); -#endif -#ifdef cimglist_load_plugin7 - cimglist_load_plugin7(filename); -#endif -#ifdef cimglist_load_plugin8 - cimglist_load_plugin8(filename); -#endif - if (!cimg::strcasecmp(ext,"tif") || - !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); - else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); - else if (!cimg::strcasecmp(ext,"cimg") || - !cimg::strcasecmp(ext,"cimgz") || - !*ext) load_cimg(filename); - else if (!cimg::strcasecmp(ext,"rec") || - !cimg::strcasecmp(ext,"par")) load_parrec(filename); - else if (!cimg::strcasecmp(ext,"avi") || - !cimg::strcasecmp(ext,"mov") || - !cimg::strcasecmp(ext,"asf") || - !cimg::strcasecmp(ext,"divx") || - !cimg::strcasecmp(ext,"flv") || - !cimg::strcasecmp(ext,"mpg") || - !cimg::strcasecmp(ext,"m1v") || - !cimg::strcasecmp(ext,"m2v") || - !cimg::strcasecmp(ext,"m4v") || - !cimg::strcasecmp(ext,"mjp") || - !cimg::strcasecmp(ext,"mkv") || - !cimg::strcasecmp(ext,"mpe") || - !cimg::strcasecmp(ext,"movie") || - !cimg::strcasecmp(ext,"ogm") || - !cimg::strcasecmp(ext,"ogg") || - !cimg::strcasecmp(ext,"qt") || - !cimg::strcasecmp(ext,"rm") || - !cimg::strcasecmp(ext,"vob") || - !cimg::strcasecmp(ext,"wmv") || - !cimg::strcasecmp(ext,"xvid") || - !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); - else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); - else throw CImgIOException("CImgList<%s>::load()", - pixel_type()); - } catch (CImgIOException&) { - try { - cimg::fclose(cimg::fopen(filename,"rb")); - } catch (CImgIOException&) { - cimg::exception_mode() = omode; - throw CImgIOException(_cimglist_instance - "load(): Failed to open file '%s'.", - cimglist_instance, - filename); - } - assign(1); - try { - _data->load(filename); - } catch (CImgIOException&) { - cimg::exception_mode() = omode; - throw CImgIOException(_cimglist_instance - "load(): Failed to recognize format of file '%s'.", - cimglist_instance, - filename); - } - } - cimg::exception_mode() = omode; - return *this; - } - - //! Load a list from a file \newinstance. - static CImgList get_load(const char *const filename) { - return CImgList().load(filename); - } - - //! Load a list from a .cimg file. - /** - \param filename Filename to read data from. - **/ - CImgList& load_cimg(const char *const filename) { - return _load_cimg(0,filename); - } - - //! Load a list from a .cimg file \newinstance. - static CImgList get_load_cimg(const char *const filename) { - return CImgList().load_cimg(filename); - } - - //! Load a list from a .cimg file. - /** - \param file File to read data from. - **/ - CImgList& load_cimg(std::FILE *const file) { - return _load_cimg(file,0); - } - - //! Load a list from a .cimg file \newinstance. - static CImgList get_load_cimg(std::FILE *const file) { - return CImgList().load_cimg(file); - } - - CImgList& _load_cimg(std::FILE *const file, const char *const filename) { -#ifdef cimg_use_zlib -#define _cimgz_load_cimg_case(Tss) { \ - Bytef *const cbuf = new Bytef[csiz]; \ - cimg::fread(cbuf,csiz,nfile); \ - raw.assign(W,H,D,C); \ - unsigned long destlen = (unsigned long)raw.size()*sizeof(Tss); \ - uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); \ - delete[] cbuf; \ - const Tss *ptrs = raw._data; \ - for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); \ -} -#else -#define _cimgz_load_cimg_case(Tss) \ - throw CImgIOException(_cimglist_instance \ - "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", \ - cimglist_instance, \ - filename?filename:"(FILE*)"); -#endif - -#define _cimg_load_cimg_case(Ts,Tss) \ - if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ - for (unsigned int l = 0; l=0) tmp[j++] = (char)i; tmp[j] = 0; \ - W = H = D = C = 0; csiz = 0; \ - if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) \ - throw CImgIOException(_cimglist_instance \ - "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", \ - cimglist_instance, \ - W,H,D,C,l,filename?filename:("(FILE*)")); \ - if (W*H*D*C>0) { \ - CImg raw; \ - CImg &img = _data[l]; \ - img.assign(W,H,D,C); \ - T *ptrd = img._data; \ - if (err==5) _cimgz_load_cimg_case(Tss) \ - else for (long to_read = (long)img.size(); to_read>0; ) { \ - raw.assign(cimg::min(to_read,cimg_iobuffer)); \ - cimg::fread(raw._data,raw._width,nfile); \ - if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); \ - to_read-=raw._width; \ - const Tss *ptrs = raw._data; \ - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ - } \ - } \ - } \ - loaded = true; \ - } - - if (!filename && !file) - throw CImgArgumentException(_cimglist_instance - "load_cimg(): Specified filename is (null).", - cimglist_instance); - - const int cimg_iobuffer = 12*1024*1024; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - bool loaded = false, endian = cimg::endianness(); - char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; - unsigned int j, err, N = 0, W, H, D, C, csiz; - int i; - do { - j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - } while (*tmp=='#' && i!=EOF); - err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); - if (err<2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "load_cimg(): CImg header not found in file '%s'.", - cimglist_instance, - filename?filename:"(FILE*)"); - } - if (!cimg::strncasecmp("little",str_endian,6)) endian = false; - else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; - assign(N); - _cimg_load_cimg_case("bool",bool); - _cimg_load_cimg_case("unsigned_char",unsigned char); - _cimg_load_cimg_case("uchar",unsigned char); - _cimg_load_cimg_case("char",char); - _cimg_load_cimg_case("unsigned_short",unsigned short); - _cimg_load_cimg_case("ushort",unsigned short); - _cimg_load_cimg_case("short",short); - _cimg_load_cimg_case("unsigned_int",unsigned int); - _cimg_load_cimg_case("uint",unsigned int); - _cimg_load_cimg_case("int",int); - _cimg_load_cimg_case("unsigned_long",unsigned long); - _cimg_load_cimg_case("ulong",unsigned long); - _cimg_load_cimg_case("long",long); - _cimg_load_cimg_case("float",float); - _cimg_load_cimg_case("double",double); - if (!loaded) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "load_cimg(): Unsupported pixel type '%s' for file '%s'.", - cimglist_instance, - str_pixeltype,filename?filename:"(FILE*)"); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load a sublist list from a (non compressed) .cimg file. - /** - \param filename Filename to read data from. - \param n0 Starting index of images to read (~0U for max). - \param n1 Ending index of images to read (~0U for max). - \param x0 Starting X-coordinates of image regions to read. - \param y0 Starting Y-coordinates of image regions to read. - \param z0 Starting Z-coordinates of image regions to read. - \param c0 Starting C-coordinates of image regions to read. - \param x1 Ending X-coordinates of image regions to read (~0U for max). - \param y1 Ending Y-coordinates of image regions to read (~0U for max). - \param z1 Ending Z-coordinates of image regions to read (~0U for max). - \param c1 Ending C-coordinates of image regions to read (~0U for max). - **/ - CImgList& load_cimg(const char *const filename, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { - return _load_cimg(0,filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - } - - //! Load a sublist list from a (non compressed) .cimg file \newinstance. - static CImgList get_load_cimg(const char *const filename, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { - return CImgList().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - } - - //! Load a sub-image list from a (non compressed) .cimg file \overloading. - CImgList& load_cimg(std::FILE *const file, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { - return _load_cimg(file,0,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - } - - //! Load a sub-image list from a (non compressed) .cimg file \newinstance. - static CImgList get_load_cimg(std::FILE *const file, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { - return CImgList().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); - } - - CImgList& _load_cimg(std::FILE *const file, const char *const filename, - const unsigned int n0, const unsigned int n1, - const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, - const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { -#define _cimg_load_cimg_case2(Ts,Tss) \ - if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ - for (unsigned int l = 0; l<=nn1; ++l) { \ - j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; \ - W = H = D = C = 0; \ - if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) \ - throw CImgIOException(_cimglist_instance \ - "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", \ - cimglist_instance, \ - W,H,D,C,l,filename?filename:"(FILE*)"); \ - if (W*H*D*C>0) { \ - if (l=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(Tss),SEEK_CUR); \ - else { \ - const unsigned int \ - _nx1 = nx1==~0U?W-1:nx1, \ - _ny1 = ny1==~0U?H-1:ny1, \ - _nz1 = nz1==~0U?D-1:nz1, \ - _nc1 = nc1==~0U?C-1:nc1; \ - if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) \ - throw CImgArgumentException(_cimglist_instance \ - "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " \ - "because image [%u] in file '%s' has size (%u,%u,%u,%u).", \ - cimglist_instance, \ - n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); \ - CImg raw(1 + _nx1 - nx0); \ - CImg &img = _data[l - nn0]; \ - img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); \ - T *ptrd = img._data; \ - const unsigned int skipvb = nc0*W*H*D*sizeof(Tss); \ - if (skipvb) std::fseek(nfile,skipvb,SEEK_CUR); \ - for (unsigned int c = 1 + _nc1 - nc0; c; --c) { \ - const unsigned int skipzb = nz0*W*H*sizeof(Tss); \ - if (skipzb) std::fseek(nfile,skipzb,SEEK_CUR); \ - for (unsigned int z = 1 + _nz1 - nz0; z; --z) { \ - const unsigned int skipyb = ny0*W*sizeof(Tss); \ - if (skipyb) std::fseek(nfile,skipyb,SEEK_CUR); \ - for (unsigned int y = 1 + _ny1 - ny0; y; --y) { \ - const unsigned int skipxb = nx0*sizeof(Tss); \ - if (skipxb) std::fseek(nfile,skipxb,SEEK_CUR); \ - cimg::fread(raw._data,raw._width,nfile); \ - if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); \ - const Tss *ptrs = raw._data; \ - for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ - const unsigned int skipxe = (W-1-_nx1)*sizeof(Tss); \ - if (skipxe) std::fseek(nfile,skipxe,SEEK_CUR); \ - } \ - const unsigned int skipye = (H-1-_ny1)*W*sizeof(Tss); \ - if (skipye) std::fseek(nfile,skipye,SEEK_CUR); \ - } \ - const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(Tss); \ - if (skipze) std::fseek(nfile,skipze,SEEK_CUR); \ - } \ - const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(Tss); \ - if (skipve) std::fseek(nfile,skipve,SEEK_CUR); \ - } \ - } \ - } \ - loaded = true; \ - } - - if (!filename && !file) - throw CImgArgumentException(_cimglist_instance - "load_cimg(): Specified filename is (null).", - cimglist_instance); - unsigned int - nn0 = cimg::min(n0,n1), nn1 = cimg::max(n0,n1), - nx0 = cimg::min(x0,x1), nx1 = cimg::max(x0,x1), - ny0 = cimg::min(y0,y1), ny1 = cimg::max(y0,y1), - nz0 = cimg::min(z0,z1), nz1 = cimg::max(z0,z1), - nc0 = cimg::min(c0,c1), nc1 = cimg::max(c0,c1); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - bool loaded = false, endian = cimg::endianness(); - char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; - unsigned int j, err, N, W, H, D, C; - int i; - j = 0; while((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); - if (err<2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "load_cimg(): CImg header not found in file '%s'.", - cimglist_instance, - filename?filename:"(FILE*)"); - } - if (!cimg::strncasecmp("little",str_endian,6)) endian = false; - else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; - nn1 = n1==~0U?N-1:n1; - if (nn1>=N) - throw CImgArgumentException(_cimglist_instance - "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " - "because file '%s' contains only %u images.", - cimglist_instance, - n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,filename?filename:"(FILE*)",N); - assign(1+nn1-n0); - _cimg_load_cimg_case2("bool",bool); - _cimg_load_cimg_case2("unsigned_char",unsigned char); - _cimg_load_cimg_case2("uchar",unsigned char); - _cimg_load_cimg_case2("char",char); - _cimg_load_cimg_case2("unsigned_short",unsigned short); - _cimg_load_cimg_case2("ushort",unsigned short); - _cimg_load_cimg_case2("short",short); - _cimg_load_cimg_case2("unsigned_int",unsigned int); - _cimg_load_cimg_case2("uint",unsigned int); - _cimg_load_cimg_case2("int",int); - _cimg_load_cimg_case2("unsigned_long",unsigned long); - _cimg_load_cimg_case2("ulong",unsigned long); - _cimg_load_cimg_case2("long",long); - _cimg_load_cimg_case2("float",float); - _cimg_load_cimg_case2("double",double); - if (!loaded) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "load_cimg(): Unsupported pixel type '%s' for file '%s'.", - cimglist_instance, - str_pixeltype,filename?filename:"(FILE*)"); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load a list from a PAR/REC (Philips) file. - /** - \param filename Filename to read data from. - **/ - CImgList& load_parrec(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "load_parrec(): Specified filename is (null).", - cimglist_instance); - - char body[1024] = { 0 }, filenamepar[1024] = { 0 }, filenamerec[1024] = { 0 }; - const char *const ext = cimg::split_filename(filename,body); - if (!std::strcmp(ext,"par")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); cimg_snprintf(filenamerec,sizeof(filenamerec),"%s.rec",body); } - if (!std::strcmp(ext,"PAR")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); cimg_snprintf(filenamerec,sizeof(filenamerec),"%s.REC",body); } - if (!std::strcmp(ext,"rec")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); cimg_snprintf(filenamepar,sizeof(filenamepar),"%s.par",body); } - if (!std::strcmp(ext,"REC")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); cimg_snprintf(filenamepar,sizeof(filenamepar),"%s.PAR",body); } - std::FILE *file = cimg::fopen(filenamepar,"r"); - - // Parse header file - CImgList st_slices; - CImgList st_global; - int err; - char line[256] = { 0 }; - do { err=std::fscanf(file,"%255[^\n]%*c",line); } while (err!=EOF && (*line=='#' || *line=='.')); - do { - unsigned int sn,size_x,size_y,pixsize; - float rs,ri,ss; - err = std::fscanf(file,"%u%*u%*u%*u%*u%*u%*u%u%*u%u%u%g%g%g%*[^\n]",&sn,&pixsize,&size_x,&size_y,&ri,&rs,&ss); - if (err==7) { - CImg::vector((float)sn,(float)pixsize,(float)size_x,(float)size_y,ri,rs,ss,0).move_to(st_slices); - unsigned int i; for (i = 0; i::vector(size_x,size_y,sn).move_to(st_global); - else { - CImg &vec = st_global[i]; - if (size_x>vec[0]) vec[0] = size_x; - if (size_y>vec[1]) vec[1] = size_y; - vec[2] = sn; - } - st_slices[st_slices._width-1][7] = (float)i; - } - } while (err==7); - - // Read data - std::FILE *file2 = cimg::fopen(filenamerec,"rb"); - cimglist_for(st_global,l) { - const CImg& vec = st_global[l]; - CImg(vec[0],vec[1],vec[2]).move_to(*this); - } - - cimglist_for(st_slices,l) { - const CImg& vec = st_slices[l]; - const unsigned int - sn = (unsigned int)vec[0] - 1, - pixsize = (unsigned int)vec[1], - size_x = (unsigned int)vec[2], - size_y = (unsigned int)vec[3], - imn = (unsigned int)vec[7]; - const float ri = vec[4], rs = vec[5], ss = vec[6]; - switch (pixsize) { - case 8 : { - CImg buf(size_x,size_y); - cimg::fread(buf._data,size_x*size_y,file2); - if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); - CImg& img = (*this)[imn]; - cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); - } break; - case 16 : { - CImg buf(size_x,size_y); - cimg::fread(buf._data,size_x*size_y,file2); - if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); - CImg& img = (*this)[imn]; - cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); - } break; - case 32 : { - CImg buf(size_x,size_y); - cimg::fread(buf._data,size_x*size_y,file2); - if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); - CImg& img = (*this)[imn]; - cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); - } break; - default : - cimg::fclose(file); - cimg::fclose(file2); - throw CImgIOException(_cimglist_instance - "load_parrec(): Unsupported %d-bits pixel type for file '%s'.", - cimglist_instance, - pixsize,filename); - } - } - cimg::fclose(file); - cimg::fclose(file2); - if (!_width) - throw CImgIOException(_cimglist_instance - "load_parrec(): Failed to recognize valid PAR-REC data in file '%s'.", - cimglist_instance, - filename); - return *this; - } - - //! Load a list from a PAR/REC (Philips) file \newinstance. - static CImgList get_load_parrec(const char *const filename) { - return CImgList().load_parrec(filename); - } - - //! Load a list from a YUV image sequence file. - /** - \param filename Filename to read data from. - \param size_x Width of the images. - \param size_y Height of the images. - \param first_frame Index of first image frame to read. - \param last_frame Index of last image frame to read. - \param step_frame Step applied between each frame. - \param yuv2rgb Apply YUV to RGB transformation during reading. - **/ - CImgList& load_yuv(const char *const filename, - const unsigned int size_x, const unsigned int size_y, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true) { - return _load_yuv(0,filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); - } - - //! Load a list from a YUV image sequence file \newinstance. - static CImgList get_load_yuv(const char *const filename, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true) { - return CImgList().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); - } - - //! Load a list from an image sequence YUV file \overloading. - CImgList& load_yuv(std::FILE *const file, - const unsigned int size_x, const unsigned int size_y, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true) { - return _load_yuv(file,0,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); - } - - //! Load a list from an image sequence YUV file \newinstance. - static CImgList get_load_yuv(std::FILE *const file, - const unsigned int size_x, const unsigned int size_y=1, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool yuv2rgb=true) { - return CImgList().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); - } - - CImgList& _load_yuv(std::FILE *const file, const char *const filename, - const unsigned int size_x, const unsigned int size_y, - const unsigned int first_frame, const unsigned int last_frame, - const unsigned int step_frame, const bool yuv2rgb) { - if (!filename && !file) - throw CImgArgumentException(_cimglist_instance - "load_yuv(): Specified filename is (null).", - cimglist_instance); - if (size_x%2 || size_y%2) - throw CImgArgumentException(_cimglist_instance - "load_yuv(): Invalid odd XY dimensions %ux%u in file '%s'.", - cimglist_instance, - size_x,size_y,filename?filename:"(FILE*)"); - if (!size_x || !size_y) - throw CImgArgumentException(_cimglist_instance - "load_yuv(): Invalid sequence size (%u,%u) in file '%s'.", - cimglist_instance, - size_x,size_y,filename?filename:"(FILE*)"); - - const unsigned int - nfirst_frame = first_frame tmp(size_x,size_y,1,3), UV(size_x/2,size_y/2,1,2); - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - bool stop_flag = false; - int err; - if (nfirst_frame) { - err = std::fseek(nfile,nfirst_frame*(size_x*size_y + size_x*size_y/2),SEEK_CUR); - if (err) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "load_yuv(): File '%s' doesn't contain frame number %u.", - cimglist_instance, - filename?filename:"(FILE*)",nfirst_frame); - } - } - unsigned int frame; - for (frame = nfirst_frame; !stop_flag && frame<=nlast_frame; frame+=nstep_frame) { - tmp.fill(0); - // *TRY* to read the luminance part, do not replace by cimg::fread! - err = (int)std::fread((void*)(tmp._data),1,(unsigned long)tmp._width*tmp._height,nfile); - if (err!=(int)(tmp._width*tmp._height)) { - stop_flag = true; - if (err>0) - cimg::warn(_cimglist_instance - "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", - cimglist_instance, - filename?filename:"(FILE*)",size_x,size_y); - } else { - UV.fill(0); - // *TRY* to read the luminance part, do not replace by cimg::fread! - err = (int)std::fread((void*)(UV._data),1,(size_t)(UV.size()),nfile); - if (err!=(int)(UV.size())) { - stop_flag = true; - if (err>0) - cimg::warn(_cimglist_instance - "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", - cimglist_instance, - filename?filename:"(FILE*)",size_x,size_y); - } else { - cimg_forXY(UV,x,y) { - const int x2 = x*2, y2 = y*2; - tmp(x2,y2,1) = tmp(x2+1,y2,1) = tmp(x2,y2+1,1) = tmp(x2+1,y2+1,1) = UV(x,y,0); - tmp(x2,y2,2) = tmp(x2+1,y2,2) = tmp(x2,y2+1,2) = tmp(x2+1,y2+1,2) = UV(x,y,1); - } - if (yuv2rgb) tmp.YCbCrtoRGB(); - insert(tmp); - if (nstep_frame>1) std::fseek(nfile,(nstep_frame-1)*(size_x*size_y + size_x*size_y/2),SEEK_CUR); - } - } - } - if (stop_flag && nlast_frame!=~0U && frame!=nlast_frame) - cimg::warn(_cimglist_instance - "load_yuv(): Frame %d not reached since only %u frames were found in file '%s'.", - cimglist_instance, - nlast_frame,frame-1,filename?filename:"(FILE*)"); - - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Load an image from a video file, using ffmpeg libraries. - /** - \param filename Filename, as a C-string. - \param first_frame Index of the first frame to read. - \param last_frame Index of the last frame to read. - \param step_frame Step value for frame reading. - \param pixel_format To be documented. - \param resume To be documented. - **/ - // This piece of code has been firstly created by David Starweather (starkdg(at)users(dot)sourceforge(dot)net) - // I modified it afterwards for direct inclusion in the library core. - CImgList& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false) { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "load_ffmpeg(): Specified filename is (null).", - cimglist_instance); - - const unsigned int - nfirst_frame = first_frame1) || (resume && (pixel_format || !pixel_format))) - throw CImgArgumentException(_cimglist_instance - "load_ffmpeg(): Unable to load sub-frames from file '%s' unless libffmpeg is enabled.", - cimglist_instance, - filename); - - return load_ffmpeg_external(filename); -#else - const PixelFormat ffmpeg_pixfmt = pixel_format?PIX_FMT_RGB24:PIX_FMT_GRAY8; - avcodec_register_all(); - av_register_all(); - static AVFormatContext *format_ctx = 0; - static AVCodecContext *codec_ctx = 0; - static AVCodec *codec = 0; - static AVFrame *avframe = avcodec_alloc_frame(), *converted_frame = avcodec_alloc_frame(); - static int vstream = 0; - - if (resume) { - if (!format_ctx || !codec_ctx || !codec || !avframe || !converted_frame) - throw CImgArgumentException(_cimglist_instance - "load_ffmpeg(): Failed to resume loading of file '%s', due to unallocated FFMPEG structures.", - cimglist_instance, - filename); - } else { - // Open video file, find main video stream and codec. - if (format_ctx) avformat_close_input(&format_ctx); - if (avformat_open_input(&format_ctx,filename,0,0)!=0) - throw CImgIOException(_cimglist_instance - "load_ffmpeg(): Failed to open file '%s'.", - cimglist_instance, - filename); - - if (!avframe || !converted_frame || avformat_find_stream_info(format_ctx,NULL)<0) { - avformat_close_input(&format_ctx); format_ctx = 0; - return load_ffmpeg_external(filename); - } -#if cimg_verbosity>=3 - dump_format(format_ctx,0,0,0); -#endif - - // Special command: Return informations on main video stream. - // as a vector 1x4 containing: (nb_frames,width,height,fps). - if (!first_frame && !last_frame && !step_frame) { - for (vstream = 0; vstream<(int)(format_ctx->nb_streams); ++vstream) - if (format_ctx->streams[vstream]->codec->codec_type==AVMEDIA_TYPE_VIDEO) break; - if (vstream==(int)format_ctx->nb_streams) assign(); - else { - CImgList timestamps; - int nb_frames; - AVPacket packet; - // Count frames and store timestamps. - for (nb_frames = 0; av_read_frame(format_ctx,&packet)>=0; av_free_packet(&packet)) - if (packet.stream_index==vstream) { - CImg::vector((double)packet.pts).move_to(timestamps); - ++nb_frames; - } - // Get frame with, height and fps. - const int - framew = format_ctx->streams[vstream]->codec->width, - frameh = format_ctx->streams[vstream]->codec->height; - const float - num = (float)(format_ctx->streams[vstream]->r_frame_rate).num, - den = (float)(format_ctx->streams[vstream]->r_frame_rate).den, - fps = num/den; - // Return infos as a list. - assign(2); - (*this)[0].assign(1,4).fill((T)nb_frames,(T)framew,(T)frameh,(T)fps); - (*this)[1] = (timestamps>'y'); - } - avformat_close_input(&format_ctx); format_ctx = 0; - return *this; - } - - for (vstream = 0; vstream<(int)(format_ctx->nb_streams) && - format_ctx->streams[vstream]->codec->codec_type!=AVMEDIA_TYPE_VIDEO; ) ++vstream; - if (vstream==(int)format_ctx->nb_streams) { - avformat_close_input(&format_ctx); format_ctx = 0; - return load_ffmpeg_external(filename); - } - codec_ctx = format_ctx->streams[vstream]->codec; - codec = avcodec_find_decoder(codec_ctx->codec_id); - if (!codec) { - return load_ffmpeg_external(filename); - } - if (avcodec_open2(codec_ctx,codec,NULL)<0) { // Open codec - return load_ffmpeg_external(filename); - } - } - - // Read video frames - const unsigned int numBytes = avpicture_get_size(ffmpeg_pixfmt,codec_ctx->width,codec_ctx->height); - uint8_t *const buffer = new uint8_t[numBytes]; - avpicture_fill((AVPicture *)converted_frame,buffer,ffmpeg_pixfmt,codec_ctx->width,codec_ctx->height); - const T foo = (T)0; - AVPacket packet; - for (unsigned int frame = 0, next_frame = nfirst_frame; frame<=nlast_frame && av_read_frame(format_ctx,&packet)>=0; ) { - if (packet.stream_index==(int)vstream) { - int decoded = 0; -#if defined(AV_VERSION_INT) -#if LIBAVCODEC_VERSION_INTwidth,codec_ctx->height,codec_ctx->pix_fmt,codec_ctx->width, - codec_ctx->height,ffmpeg_pixfmt,1,0,0,0); - sws_scale(c,avframe->data,avframe->linesize,0,codec_ctx->height,converted_frame->data,converted_frame->linesize); - if (ffmpeg_pixfmt==PIX_FMT_RGB24) { - CImg next_image(*converted_frame->data,3,codec_ctx->width,codec_ctx->height,1,true); - next_image._get_permute_axes("yzcx",foo).move_to(*this); - } else { - CImg next_image(*converted_frame->data,1,codec_ctx->width,codec_ctx->height,1,true); - next_image._get_permute_axes("yzcx",foo).move_to(*this); - } - next_frame+=nstep_frame; - } - ++frame; - } - av_free_packet(&packet); - if (next_frame>nlast_frame) break; - } - } - delete[] buffer; -#endif - return *this; - } - - //! Load an image from a video file, using ffmpeg libraries \newinstance. - static CImgList get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1, const bool pixel_format=true) { - return CImgList().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format); - } - - //! Load an image from a video file using the external tool 'ffmpeg'. - /** - \param filename Filename to read data from. - **/ - CImgList& load_ffmpeg_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "load_ffmpeg_external(): Specified filename is (null).", - cimglist_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; - std::FILE *file = 0; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); - if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_%%6d.ppm",filetmp); -#if cimg_OS!=2 - cimg_snprintf(command,sizeof(command),"%s -i \"%s\" \"%s\" >/dev/null 2>&1", - cimg::ffmpeg_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp2)._system_strescape().data()); -#else - cimg_snprintf(command,sizeof(command),"\"%s -i \"%s\" \"%s\"\" >NUL 2>&1", - cimg::ffmpeg_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp2)._system_strescape().data()); -#endif - cimg::system(command,0); - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - assign(); - unsigned int i = 1; - for (bool stop_flag = false; !stop_flag; ++i) { - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,i); - CImg img; - try { img.load_pnm(filetmp2); } - catch (CImgException&) { stop_flag = true; } - if (img) { img.move_to(*this); std::remove(filetmp2); } - } - cimg::exception_mode() = omode; - if (is_empty()) - throw CImgIOException(_cimglist_instance - "load_ffmpeg_external(): Failed to open file '%s' with external command 'ffmpeg'.", - cimglist_instance, - filename); - return *this; - } - - //! Load an image from a video file using the external tool 'ffmpeg' \newinstance. - static CImgList get_load_ffmpeg_external(const char *const filename) { - return CImgList().load_ffmpeg_external(filename); - } - - //! Load gif file, using ImageMagick or GraphicsMagick's external tools. - /** - \param filename Filename to read data from. - \param use_graphicsmagick Tells if GraphicsMagick's tool 'gm' is used instead of ImageMagick's tool 'convert'. - **/ - CImgList& load_gif_external(const char *const filename) { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "load_gif_external(): Specified filename is (null).", - cimglist_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - if (!_load_gif_external(filename,false)) - if (!_load_gif_external(filename,true)) - try { assign(CImg().load_other(filename)); } catch (CImgException&) { assign(); } - if (is_empty()) - throw CImgIOException(_cimglist_instance - "load_gif_external(): Failed to open file '%s'.", - cimglist_instance,filename); - return *this; - } - - CImgList& _load_gif_external(const char *const filename, const bool use_graphicsmagick=false) { - char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; - std::FILE *file = 0; - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - if (use_graphicsmagick) cimg_snprintf(filetmp2,sizeof(filetmp2),"%s.png.0",filetmp); - else cimg_snprintf(filetmp2,sizeof(filetmp2),"%s-0.png",filetmp); - if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); - } while (file); -#if cimg_OS!=2 - if (use_graphicsmagick) cimg_snprintf(command,sizeof(command),"%s convert \"%s\" \"%s.png\" >/dev/null 2>&1", - cimg::graphicsmagick_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); - else cimg_snprintf(command,sizeof(command),"%s \"%s\" \"%s.png\" >/dev/null 2>&1", - cimg::imagemagick_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); -#else - if (use_graphicsmagick) cimg_snprintf(command,sizeof(command),"\"%s convert \"%s\" \"%s.png\"\" >NUL 2>&1", - cimg::graphicsmagick_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); - else cimg_snprintf(command,sizeof(command),"\"%s \"%s\" \"%s.png\"\" >NUL 2>&1", - cimg::imagemagick_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); -#endif - cimg::system(command,0); - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode() = 0; - assign(); - - // Try to read a single frame gif. - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s.png",filetmp); - CImg img; - try { img.load_png(filetmp2); } - catch (CImgException&) { } - if (img) { img.move_to(*this); std::remove(filetmp2); } - else { // Try to read animated gif. - unsigned int i = 0; - for (bool stop_flag = false; !stop_flag; ++i) { - if (use_graphicsmagick) cimg_snprintf(filetmp2,sizeof(filetmp2),"%s.png.%u",filetmp,i); - else cimg_snprintf(filetmp2,sizeof(filetmp2),"%s-%u.png",filetmp,i); - CImg img; - try { img.load_png(filetmp2); } - catch (CImgException&) { stop_flag = true; } - if (img) { img.move_to(*this); std::remove(filetmp2); } - } - } - cimg::exception_mode() = omode; - return *this; - } - - //! Load gif file, using ImageMagick or GraphicsMagick's external tools \newinstance. - static CImgList get_load_gif_external(const char *const filename) { - return CImgList().load_gif_external(filename); - } - - //! Load a gzipped list, using external tool 'gunzip'. - /** - \param filename Filename to read data from. - **/ - CImgList& load_gzip_external(const char *const filename) { - if (!filename) - throw CImgIOException(_cimglist_instance - "load_gzip_external(): Specified filename is (null).", - cimglist_instance); - std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - const char - *ext = cimg::split_filename(filename,body), - *ext2 = cimg::split_filename(body,0); - std::FILE *file = 0; - do { - if (!cimg::strcasecmp(ext,"gz")) { - if (*ext2) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } else { - if (*ext) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - cimg_snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", - cimg::gunzip_path(), - CImg::string(filename)._system_strescape().data(), - CImg::string(filetmp)._system_strescape().data()); - cimg::system(command); - if (!(file = std::fopen(filetmp,"rb"))) { - cimg::fclose(cimg::fopen(filename,"r")); - throw CImgIOException(_cimglist_instance - "load_gzip_external(): Failed to open file '%s'.", - cimglist_instance, - filename); - - } else cimg::fclose(file); - load(filetmp); - std::remove(filetmp); - return *this; - } - - //! Load a gzipped list, using external tool 'gunzip' \newinstance. - static CImgList get_load_gzip_external(const char *const filename) { - return CImgList().load_gzip_external(filename); - } - - //! Load a 3d object from a .OFF file. - /** - \param filename Filename to read data from. - \param[out] primitives At return, contains the list of 3d object primitives. - \param[out] colors At return, contains the list of 3d object colors. - \return List of 3d object vertices. - **/ - template - CImgList& load_off(const char *const filename, - CImgList& primitives, CImgList& colors) { - return get_load_off(filename,primitives,colors).move_to(*this); - } - - //! Load a 3d object from a .OFF file \newinstance. - template - static CImgList get_load_off(const char *const filename, - CImgList& primitives, CImgList& colors) { - return CImg().load_off(filename,primitives,colors)<'x'; - } - - //! Load images from a TIFF file. - /** - \param filename Filename to read data from. - \param first_frame Index of first image frame to read. - \param last_frame Index of last image frame to read. - \param step_frame Step applied between each frame. - **/ - CImgList& load_tiff(const char *const filename, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) { - const unsigned int - nfirst_frame = first_frame::get_load_tiff(filename)); -#else - TIFF *tif = TIFFOpen(filename,"r"); - if (tif) { - unsigned int nb_images = 0; - do ++nb_images; while (TIFFReadDirectory(tif)); - if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) - cimg::warn(_cimglist_instance - "load_tiff(): Invalid specified frame range is [%u,%u] (step %u) since file '%s' contains %u image(s).", - cimglist_instance, - nfirst_frame,nlast_frame,nstep_frame,filename,nb_images); - - if (nfirst_frame>=nb_images) return assign(); - if (nlast_frame>=nb_images) nlast_frame = nb_images-1; - assign(1+(nlast_frame-nfirst_frame)/nstep_frame); - TIFFSetDirectory(tif,0); -#if cimg_verbosity>=3 - TIFFSetWarningHandler(0); - TIFFSetErrorHandler(0); -#endif - cimglist_for(*this,l) _data[l]._load_tiff(tif,nfirst_frame + l*nstep_frame); - TIFFClose(tif); - } else throw CImgIOException(_cimglist_instance - "load_tiff(): Failed to open file '%s'.", - cimglist_instance, - filename); - return *this; -#endif - } - - //! Load a multi-page TIFF file \newinstance. - static CImgList get_load_tiff(const char *const filename, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) { - return CImgList().load_tiff(filename,first_frame,last_frame,step_frame); - } - - //@} - //---------------------------------- - // - //! \name Data Output - //@{ - //---------------------------------- - - //! Print informations about the list on the standard output. - /** - \param title Label set to the informations displayed. - \param display_stats Tells if image statistics must be computed and displayed. - **/ - const CImgList& print(const char *const title=0, const bool display_stats=true) const { - unsigned int msiz = 0; - cimglist_for(*this,l) msiz+=_data[l].size(); - msiz*=sizeof(T); - const unsigned int mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2); - char _title[64] = { 0 }; - if (!title) cimg_snprintf(_title,sizeof(_title),"CImgList<%s>",pixel_type()); - std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = %u/%u [%u %s], %sdata%s = (CImg<%s>*)%p", - cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, - cimg::t_bold,cimg::t_normal,(void*)this, - cimg::t_bold,cimg::t_normal,_width,_allocated_width, - mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), - mdisp==0?"b":(mdisp==1?"Kio":"Mio"), - cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); - if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end()-1)); - else std::fprintf(cimg::output(),".\n"); - - char tmp[16] = { 0 }; - cimglist_for(*this,ll) { - cimg_snprintf(tmp,sizeof(tmp),"[%d]",ll); - std::fprintf(cimg::output()," "); - _data[ll].print(tmp,display_stats); - if (ll==3 && _width>8) { ll = _width-5; std::fprintf(cimg::output()," ...\n"); } - } - std::fflush(cimg::output()); - return *this; - } - - //! Display the current CImgList instance in an existing CImgDisplay window (by reference). - /** - \param disp Reference to an existing CImgDisplay instance, where the current image list will be displayed. - \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignmenet. - \note This function displays the list images of the current CImgList instance into an existing CImgDisplay window. - Images of the list are appended in a single temporarly image for visualization purposes. - The function returns immediately. - **/ - const CImgList& display(CImgDisplay &disp, const char axis='x', const float align=0) const { - get_append(axis,align).display(disp); - return *this; - } - - //! Display the current CImgList instance in a new display window. - /** - \param disp Display window. - \param display_info Tells if image informations are displayed on the standard output. - \param axis Alignment axis for images viewing. - \param align Apending alignment. - \note This function opens a new window with a specific title and displays the list images of the current CImgList instance into it. - Images of the list are appended in a single temporarly image for visualization purposes. - The function returns when a key is pressed or the display window is closed by the user. - **/ - const CImgList& display(CImgDisplay &disp, const bool display_info, - const char axis='x', const float align=0, - unsigned int *const XYZ=0) const { - bool is_exit = false; - return _display(disp,0,display_info,axis,align,XYZ,0,true,is_exit); - } - - //! Display the current CImgList instance in a new display window. - /** - \param title Title of the opening display window. - \param display_info Tells if list informations must be written on standard output. - \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. - \param align Appending alignment. - **/ - const CImgList& display(const char *const title=0, const bool display_info=true, - const char axis='x', const float align=0, - unsigned int *const XYZ=0) const { - CImgDisplay disp; - bool is_exit = false; - return _display(disp,title,display_info,axis,align,XYZ,0,true,is_exit); - } - - const CImgList& _display(CImgDisplay &disp, const char *const title, const bool display_info, - const char axis, const float align, unsigned int *const XYZ, - const unsigned int orig, const bool is_first_call, bool &is_exit) const { - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "display(): Empty instance.", - cimglist_instance); - if (!disp) { - if (axis=='x') { - unsigned int sum_width = 0, max_height = 0; - cimglist_for(*this,l) { - const CImg &img = _data[l]; - const unsigned int - w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), - h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); - sum_width+=w; - if (h>max_height) max_height = h; - } - disp.assign(cimg_fitscreen(sum_width,max_height,1),title?title:0,1); - } else { - unsigned int max_width = 0, sum_height = 0; - cimglist_for(*this,l) { - const CImg &img = _data[l]; - const unsigned int - w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), - h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); - if (w>max_width) max_width = w; - sum_height+=h; - } - disp.assign(cimg_fitscreen(max_width,sum_height,1),title?title:0,1); - } - if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); - } else if (title) disp.set_title("%s",title); - const CImg dtitle = CImg::string(disp.title()); - if (display_info) print(disp.title()); - disp.show().flush(); - - if (_width==1) { - const unsigned int dw = disp._width, dh = disp._height; - if (!is_first_call) - disp.resize(cimg_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth),false). - set_title("%s (%ux%ux%ux%u)",dtitle.data(),_data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum); - _data[0]._display(disp,0,false,XYZ,!is_first_call); - if (disp.key()) is_exit = true; - disp.resize(cimg_fitscreen(dw,dh,1),false).set_title("%s",dtitle.data()); - } else { - bool disp_resize = !is_first_call; - while (!disp.is_closed() && !is_exit) { - const CImg s = _get_select(disp,0,true,axis,align,orig,disp_resize,!is_first_call,true); - disp_resize = true; - if (s[0]<0) { // No selections done. - if (disp.button()&2) { disp.flush(); break; } - is_exit = true; - } else if (disp.wheel()) { // Zoom in/out. - const int wheel = disp.wheel(); - disp.set_wheel(); - if (!is_first_call && wheel<0) break; - if (wheel>0 && _width>=4) { - const unsigned int - delta = cimg::max(1U,(unsigned int)cimg::round(0.3*_width)), - ind0 = (unsigned int)cimg::max(0,s[0] - (int)delta), - ind1 = (unsigned int)cimg::min(width() - 1,s[0] + (int)delta); - if ((ind0!=0 || ind1!=_width-1) && ind1 - ind0>=3) get_shared_images(ind0,ind1)._display(disp,0,false,axis,align,XYZ,orig + ind0,false,is_exit); - } - } else if (s[0]!=0 || s[1]!=width()-1) get_shared_images(s[0],s[1])._display(disp,0,false,axis,align,XYZ,orig+s[0],false,is_exit); - } - } - return *this; - } - - //! Save list into a file. - /** - \param filename Filename to write data to. - \param number When positive, represents an index added to the filename. Otherwise, no number is added. - \param digits Number of digits used for adding the number to the filename. - **/ - const CImgList& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "save(): Specified filename is (null).", - cimglist_instance); - // Do not test for empty instances, since .cimg format is able to manage empty instances. - const char *const ext = cimg::split_filename(filename); - char nfilename[1024] = { 0 }; - const char *const fn = (number>=0)?cimg::number_filename(filename,number,digits,nfilename):filename; - -#ifdef cimglist_save_plugin - cimglist_save_plugin(fn); -#endif -#ifdef cimglist_save_plugin1 - cimglist_save_plugin1(fn); -#endif -#ifdef cimglist_save_plugin2 - cimglist_save_plugin2(fn); -#endif -#ifdef cimglist_save_plugin3 - cimglist_save_plugin3(fn); -#endif -#ifdef cimglist_save_plugin4 - cimglist_save_plugin4(fn); -#endif -#ifdef cimglist_save_plugin5 - cimglist_save_plugin5(fn); -#endif -#ifdef cimglist_save_plugin6 - cimglist_save_plugin6(fn); -#endif -#ifdef cimglist_save_plugin7 - cimglist_save_plugin7(fn); -#endif -#ifdef cimglist_save_plugin8 - cimglist_save_plugin8(fn); -#endif - if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); - else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); - else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); - else if (!cimg::strcasecmp(ext,"avi") || - !cimg::strcasecmp(ext,"mov") || - !cimg::strcasecmp(ext,"asf") || - !cimg::strcasecmp(ext,"divx") || - !cimg::strcasecmp(ext,"flv") || - !cimg::strcasecmp(ext,"mpg") || - !cimg::strcasecmp(ext,"m1v") || - !cimg::strcasecmp(ext,"m2v") || - !cimg::strcasecmp(ext,"m4v") || - !cimg::strcasecmp(ext,"mjp") || - !cimg::strcasecmp(ext,"mkv") || - !cimg::strcasecmp(ext,"mpe") || - !cimg::strcasecmp(ext,"movie") || - !cimg::strcasecmp(ext,"ogm") || - !cimg::strcasecmp(ext,"ogg") || - !cimg::strcasecmp(ext,"qt") || - !cimg::strcasecmp(ext,"rm") || - !cimg::strcasecmp(ext,"vob") || - !cimg::strcasecmp(ext,"wmv") || - !cimg::strcasecmp(ext,"xvid") || - !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); -#ifdef cimg_use_tiff - else if (!cimg::strcasecmp(ext,"tif") || - !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); -#endif - else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); - else { if (_width==1) _data[0].save(fn,-1); else cimglist_for(*this,l) _data[l].save(fn,l); } - return *this; - } - - //! Tell if an image list can be saved as one single file. - /** - \param filename Filename, as a C-string. - \return \c true if the file format supports multiple images, \c false otherwise. - **/ - static bool is_saveable(const char *const filename) { - const char *const ext = cimg::split_filename(filename); - if (!cimg::strcasecmp(ext,"cimgz") || -#ifdef cimg_use_tiff - !cimg::strcasecmp(ext,"tif") || - !cimg::strcasecmp(ext,"tiff") || -#endif - !cimg::strcasecmp(ext,"yuv") || - !cimg::strcasecmp(ext,"avi") || - !cimg::strcasecmp(ext,"mov") || - !cimg::strcasecmp(ext,"asf") || - !cimg::strcasecmp(ext,"divx") || - !cimg::strcasecmp(ext,"flv") || - !cimg::strcasecmp(ext,"mpg") || - !cimg::strcasecmp(ext,"m1v") || - !cimg::strcasecmp(ext,"m2v") || - !cimg::strcasecmp(ext,"m4v") || - !cimg::strcasecmp(ext,"mjp") || - !cimg::strcasecmp(ext,"mkv") || - !cimg::strcasecmp(ext,"mpe") || - !cimg::strcasecmp(ext,"movie") || - !cimg::strcasecmp(ext,"ogm") || - !cimg::strcasecmp(ext,"ogg") || - !cimg::strcasecmp(ext,"qt") || - !cimg::strcasecmp(ext,"rm") || - !cimg::strcasecmp(ext,"vob") || - !cimg::strcasecmp(ext,"wmv") || - !cimg::strcasecmp(ext,"xvid") || - !cimg::strcasecmp(ext,"mpeg")) return true; - return false; - } - - //! Save image sequence as a GIF animated file. - /** - \param filename Filename to write data to. - \param fps Number of desired frames per second. - \param nb_loops Number of loops (\c 0 for infinite looping). - **/ - const CImgList& save_gif_external(const char *const filename, const unsigned int fps=25, const unsigned int nb_loops=0) { - char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; - CImgList filenames; - std::FILE *file = 0; - -#ifdef cimg_use_png -#define _cimg_save_gif_ext "png" -#else -#define _cimg_save_gif_ext "ppm" -#endif - - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_000001." _cimg_save_gif_ext,filetmp); - if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); - } while (file); - cimglist_for(*this,l) { - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u." _cimg_save_gif_ext,filetmp,l+1); - CImg::string(filetmp2).move_to(filenames); - if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save(filetmp2); - else _data[l].save(filetmp2); - } - -#if cimg_OS!=2 - cimg_snprintf(command,sizeof(command),"%s -delay 1x%u -loop %u", - cimg::imagemagick_path(),fps,nb_loops); - CImg::string(command).move_to(filenames,0); - cimg_snprintf(command,sizeof(command),"\"%s\" >/dev/null 2>&1", - CImg::string(filename)._system_strescape().data()); - CImg::string(command).move_to(filenames); -#else - cimg_snprintf(command,sizeof(command),"\"%s -delay 1x%u -loop %u", - cimg::imagemagick_path(),fps,nb_loops); - CImg::string(command).move_to(filenames,0); - cimg_snprintf(command,sizeof(command),"\"%s\"\" >NUL 2>&1", - CImg::string(filename)._system_strescape().data()); - CImg::string(command).move_to(filenames); -#endif - CImg _command = filenames>'x'; - cimg_for(_command,p,char) if (!*p) *p = ' '; - _command.back() = 0; - - cimg::system(_command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimglist_instance - "save_gif_external(): Failed to save file '%s' with external command 'convert'.", - cimglist_instance, - filename); - else cimg::fclose(file); - cimglist_for_in(*this,1,filenames._width-1,l) std::remove(filenames[l]); - return *this; - } - - //! Save image sequence, using FFMPEG library. - /** - \param filename Filename to write data to. - \param fps Desired framerate (in frames per seconds) if chosen format supports it. - \param bitrate Desired bitrate (in bits per seconds) if chosen format supports it. - **/ - // This piece of code has been originally written by David. G. Starkweather. - const CImgList& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "save_ffmpeg(): Specified filename is (null).", - cimglist_instance); - if (!fps) - throw CImgArgumentException(_cimglist_instance - "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", - cimglist_instance, - filename); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - cimglist_for(*this,l) if (!_data[l].is_sameXYZ(_data[0])) - throw CImgInstanceException(_cimglist_instance - "save_ffmpeg(): Invalid instance dimensions, for file '%s'.", - cimglist_instance, - filename); - -#ifndef cimg_use_ffmpeg - return save_ffmpeg_external(filename,0,fps,bitrate); -#else - avcodec_register_all(); - av_register_all(); - const int - frame_dimx = _data[0].width(), - frame_dimy = _data[0].height(), - frame_dimv = _data[0].spectrum(); - if (frame_dimv!=1 && frame_dimv!=3) - throw CImgInstanceException(_cimglist_instance - "save_ffmpeg(): Image[0] (%u,%u,%u,%u,%p) has not 1 or 3 channels, for file '%s'.", - cimglist_instance, - _data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum,_data,filename); - - PixelFormat dest_pxl_fmt = PIX_FMT_YUV420P; - PixelFormat src_pxl_fmt = (frame_dimv==3)?PIX_FMT_RGB24:PIX_FMT_GRAY8; - - int sws_flags = SWS_FAST_BILINEAR; // Interpolation method (keeping same size images for now). - AVOutputFormat *fmt = 0; -#if defined(AV_VERSION_INT) -#if LIBAVFORMAT_VERSION_INToformat = fmt; - std::sprintf(oc->filename,"%s",filename); - - // Add video stream. - AVStream *video_str = 0; - if (fmt->video_codec!=CODEC_ID_NONE) { - video_str = avformat_new_stream(oc,NULL); - if (!video_str) { // Failed to allocate stream. - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate FFMPEG structure for video stream, for file '%s'.", - cimglist_instance, - filename); - } - } else { // No codec identified. - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to identify proper codec, for file '%s'.", - cimglist_instance, - filename); - } - - AVCodecContext *c = video_str->codec; - c->codec_id = fmt->video_codec; - c->codec_type = AVMEDIA_TYPE_VIDEO; - c->bit_rate = 1024*bitrate; - c->width = frame_dimx; - c->height = frame_dimy; - c->time_base.num = 1; - c->time_base.den = fps; - c->gop_size = 12; - c->pix_fmt = dest_pxl_fmt; - if (c->codec_id==CODEC_ID_MPEG2VIDEO) c->max_b_frames = 2; - if (c->codec_id==CODEC_ID_MPEG1VIDEO) c->mb_decision = 2; - - // Open codecs and alloc buffers. - codec = avcodec_find_encoder(c->codec_id); - if (!codec) { // Failed to find codec. - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): No valid codec found for file '%s'.", - cimglist_instance, - filename); - } - if (avcodec_open2(c,codec,NULL)<0) // Failed to open codec. - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to open codec for file '%s'.", - cimglist_instance, - filename); - - tmp_pict = avcodec_alloc_frame(); - if (!tmp_pict) { // Failed to allocate memory for tmp_pict frame. - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate memory for file '%s'.", - cimglist_instance, - filename); - } - tmp_pict->linesize[0] = (src_pxl_fmt==PIX_FMT_RGB24)?3*frame_dimx:frame_dimx; - // tmp_pict->type = FF_BUFFER_TYPE_USER; - int tmp_size = avpicture_get_size(src_pxl_fmt,frame_dimx,frame_dimy); - uint8_t *tmp_buffer = (uint8_t*)av_malloc(tmp_size); - if (!tmp_buffer) { // Failed to allocate memory for tmp buffer. - av_free(tmp_pict); - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate memory for file '%s'.", - cimglist_instance, - filename); - } - - // Associate buffer with tmp_pict. - avpicture_fill((AVPicture*)tmp_pict,tmp_buffer,src_pxl_fmt,frame_dimx,frame_dimy); - picture = avcodec_alloc_frame(); - if (!picture) { // Failed to allocate picture frame. - av_free(tmp_pict->data[0]); - av_free(tmp_pict); - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate memory for file '%s'.", - cimglist_instance, - filename); - } - - int size = avpicture_get_size(c->pix_fmt,frame_dimx,frame_dimy); - uint8_t *buffer = (uint8_t*)av_malloc(size); - if (!buffer) { // Failed to allocate picture frame buffer. - av_free(picture); - av_free(tmp_pict->data[0]); - av_free(tmp_pict); - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate memory for file '%s'.", - cimglist_instance, - filename); - } - - // Associate the buffer with picture. - avpicture_fill((AVPicture*)picture,buffer,c->pix_fmt,frame_dimx,frame_dimy); - - // Open file. - if (!(fmt->flags&AVFMT_NOFILE)) { - if (avio_open(&oc->pb,filename,AVIO_FLAG_WRITE)<0) - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to open file '%s'.", - cimglist_instance, - filename); - } - - if (avformat_write_header(oc,NULL)<0) - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to write header in file '%s'.", - cimglist_instance, - filename); - - SwsContext *img_convert_context = 0; - img_convert_context = sws_getContext(frame_dimx,frame_dimy,src_pxl_fmt, - c->width,c->height,c->pix_fmt,sws_flags,0,0,0); - if (!img_convert_context) { // Failed to get swscale context. - // if (!(fmt->flags & AVFMT_NOFILE)) url_fclose(&oc->pb); - av_free(picture->data); - av_free(picture); - av_free(tmp_pict->data[0]); - av_free(tmp_pict); - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to get conversion context for file '%s'.", - cimglist_instance, - filename); - } - int ret = 0, out_size; - uint8_t *video_outbuf = 0; - int video_outbuf_size = 1000000; - video_outbuf = (uint8_t*)av_malloc(video_outbuf_size); - if (!video_outbuf) { - // if (!(fmt->flags & AVFMT_NOFILE)) url_fclose(&oc->pb); - av_free(picture->data); - av_free(picture); - av_free(tmp_pict->data[0]); - av_free(tmp_pict); - avcodec_close(video_str->codec); - av_free(oc); - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to allocate memory, for file '%s'.", - cimglist_instance, - filename); - } - - // Loop through each desired image in list. - cimglist_for(*this,i) { - CImg currentIm = _data[i], red, green, blue, gray; - if (src_pxl_fmt==PIX_FMT_RGB24) { - red = currentIm.get_shared_channel(0); - green = currentIm.get_shared_channel(1); - blue = currentIm.get_shared_channel(2); - cimg_forXY(currentIm,X,Y) { // Assign pizel values to data buffer in interlaced RGBRGB ... format. - tmp_pict->data[0][Y*tmp_pict->linesize[0] + 3*X] = red(X,Y); - tmp_pict->data[0][Y*tmp_pict->linesize[0] + 3*X + 1] = green(X,Y); - tmp_pict->data[0][Y*tmp_pict->linesize[0] + 3*X + 2] = blue(X,Y); - } - } else { - gray = currentIm.get_shared_channel(0); - cimg_forXY(currentIm,X,Y) tmp_pict->data[0][Y*tmp_pict->linesize[0] + X] = gray(X,Y); - } - if (!video_str) break; - if (sws_scale(img_convert_context,tmp_pict->data,tmp_pict->linesize,0,c->height,picture->data,picture->linesize)<0) break; - - AVPacket pkt; - int got_packet; - av_init_packet(&pkt); - out_size = avcodec_encode_video2(c,&pkt,picture,&got_packet); - if (got_packet) { - pkt.pts = av_rescale_q(c->coded_frame->pts,c->time_base,video_str->time_base); - if (c->coded_frame->key_frame) pkt.flags|=AV_PKT_FLAG_KEY; - pkt.stream_index = video_str->index; - pkt.data = video_outbuf; - pkt.size = out_size; - ret = av_write_frame(oc,&pkt); - } else if (out_size<0) break; - if (ret) break; // Error occured in writing frame. - } - - // Close codec. - if (video_str) { - avcodec_close(video_str->codec); - av_free(picture->data[0]); - av_free(picture); - av_free(tmp_pict->data[0]); - av_free(tmp_pict); - } - if (av_write_trailer(oc)<0) - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): Failed to write trailer for file '%s'.", - cimglist_instance, - filename); - - av_freep(&oc->streams[0]->codec); - av_freep(&oc->streams[0]); - if (!(fmt->flags&AVFMT_NOFILE)) { - /*if (url_fclose(oc->pb)<0) - throw CImgIOException(_cimglist_instance - "save_ffmpeg(): File '%s', failed to close file.", - cimglist_instance, - filename); - */ - } - av_free(oc); - av_free(video_outbuf); -#endif - return *this; - } - - const CImgList& _save_yuv(std::FILE *const file, const char *const filename, const bool is_rgb) const { - if (!file && !filename) - throw CImgArgumentException(_cimglist_instance - "save_yuv(): Specified filename is (null).", - cimglist_instance); - if (is_empty()) { cimg::fempty(file,filename); return *this; } - if ((*this)[0].width()%2 || (*this)[0].height()%2) - throw CImgInstanceException(_cimglist_instance - "save_yuv(): Invalid odd instance dimensions (%u,%u) for file '%s'.", - cimglist_instance, - (*this)[0].width(),(*this)[0].height(), - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - cimglist_for(*this,l) { - CImg YCbCr((*this)[l]); - if (is_rgb) YCbCr.RGBtoYCbCr(); - cimg::fwrite(YCbCr._data,(unsigned long)YCbCr._width*YCbCr._height,nfile); - cimg::fwrite(YCbCr.get_resize(YCbCr._width/2, YCbCr._height/2,1,3,3).data(0,0,0,1), - (unsigned long)YCbCr._width*YCbCr._height/2,nfile); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save list as a YUV image sequence file. - /** - \param filename Filename to write data to. - \param is_rgb Tells if the RGB to YUV conversion must be done for saving. - **/ - const CImgList& save_yuv(const char *const filename=0, const bool is_rgb=true) const { - return _save_yuv(0,filename,is_rgb); - } - - //! Save image sequence into a YUV file. - /** - \param file File to write data to. - \param is_rgb Tells if the RGB to YUV conversion must be done for saving. - **/ - const CImgList& save_yuv(std::FILE *const file, const bool is_rgb=true) const { - return _save_yuv(file,0,is_rgb); - } - - const CImgList& _save_cimg(std::FILE *const file, const char *const filename, const bool is_compressed) const { - if (!file && !filename) - throw CImgArgumentException(_cimglist_instance - "save_cimg(): Specified filename is (null).", - cimglist_instance); -#ifndef cimg_use_zlib - if (is_compressed) - cimg::warn(_cimglist_instance - "save_cimg(): Unable to save compressed data in file '%s' unless zlib is enabled, saving them uncompressed.", - cimglist_instance, - filename?filename:"(FILE*)"); -#endif - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; - if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype+9,etype); - else std::fprintf(nfile,"%u %s %s_endian\n",_width,ptype,etype); - cimglist_for(*this,l) { - const CImg& img = _data[l]; - std::fprintf(nfile,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); - if (img._data) { - CImg tmp; - if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } - const CImg& ref = cimg::endianness()?tmp:img; - bool failed_to_compress = true; - if (is_compressed) { -#ifdef cimg_use_zlib - const unsigned long siz = sizeof(T)*ref.size(); - unsigned long csiz = siz + siz/100 + 16; - Bytef *const cbuf = new Bytef[csiz]; - if (compress(cbuf,&csiz,(Bytef*)ref._data,siz)) - cimg::warn(_cimglist_instance - "save_cimg(): Failed to save compressed data for file '%s', saving them uncompressed.", - cimglist_instance, - filename?filename:"(FILE*)"); - else { - std::fprintf(nfile," #%lu\n",csiz); - cimg::fwrite(cbuf,csiz,nfile); - delete[] cbuf; - failed_to_compress = false; - } -#endif - } - if (failed_to_compress) { // Write in a non-compressed way. - std::fputc('\n',nfile); - cimg::fwrite(ref._data,ref.size(),nfile); - } - } else std::fputc('\n',nfile); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Save list into a .cimg file. - /** - \param filename Filename to write data to. - \param is_compressed Tells if data compression must be enabled. - **/ - const CImgList& save_cimg(const char *const filename, const bool is_compressed=false) const { - return _save_cimg(0,filename,is_compressed); - } - - //! Save list into a .cimg file. - /** - \param file File to write data to. - \param is_compressed Tells if data compression must be enabled. - **/ - const CImgList& save_cimg(std::FILE *file, const bool is_compressed=false) const { - return _save_cimg(file,0,is_compressed); - } - - const CImgList& _save_cimg(std::FILE *const file, const char *const filename, - const unsigned int n0, - const unsigned int x0, const unsigned int y0, - const unsigned int z0, const unsigned int c0) const { -#define _cimg_save_cimg_case(Ts,Tss) \ - if (!saved && !cimg::strcasecmp(Ts,str_pixeltype)) { \ - for (unsigned int l = 0; l0) { \ - if (l=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(Tss),SEEK_CUR); \ - else { \ - const CImg& img = (*this)[l - n0]; \ - const T *ptrs = img._data; \ - const unsigned int \ - x1 = x0 + img._width - 1, \ - y1 = y0 + img._height - 1, \ - z1 = z0 + img._depth - 1, \ - c1 = c0 + img._spectrum - 1, \ - nx1 = x1>=W?W-1:x1, \ - ny1 = y1>=H?H-1:y1, \ - nz1 = z1>=D?D-1:z1, \ - nc1 = c1>=C?C-1:c1; \ - CImg raw(1+nx1-x0); \ - const unsigned int skipvb = c0*W*H*D*sizeof(Tss); \ - if (skipvb) std::fseek(nfile,skipvb,SEEK_CUR); \ - for (unsigned int v = 1 + nc1 - c0; v; --v) { \ - const unsigned int skipzb = z0*W*H*sizeof(Tss); \ - if (skipzb) std::fseek(nfile,skipzb,SEEK_CUR); \ - for (unsigned int z = 1 + nz1 - z0; z; --z) { \ - const unsigned int skipyb = y0*W*sizeof(Tss); \ - if (skipyb) std::fseek(nfile,skipyb,SEEK_CUR); \ - for (unsigned int y = 1 + ny1 - y0; y; --y) { \ - const unsigned int skipxb = x0*sizeof(Tss); \ - if (skipxb) std::fseek(nfile,skipxb,SEEK_CUR); \ - raw.assign(ptrs, raw._width); \ - ptrs+=img._width; \ - if (endian) cimg::invert_endianness(raw._data,raw._width); \ - cimg::fwrite(raw._data,raw._width,nfile); \ - const unsigned int skipxe = (W - 1 - nx1)*sizeof(Tss); \ - if (skipxe) std::fseek(nfile,skipxe,SEEK_CUR); \ - } \ - const unsigned int skipye = (H - 1 - ny1)*W*sizeof(Tss); \ - if (skipye) std::fseek(nfile,skipye,SEEK_CUR); \ - } \ - const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(Tss); \ - if (skipze) std::fseek(nfile,skipze,SEEK_CUR); \ - } \ - const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(Tss); \ - if (skipve) std::fseek(nfile,skipve,SEEK_CUR); \ - } \ - } \ - } \ - saved = true; \ - } - - if (!file && !filename) - throw CImgArgumentException(_cimglist_instance - "save_cimg(): Specified filename is (null).", - cimglist_instance); - if (is_empty()) - throw CImgInstanceException(_cimglist_instance - "save_cimg(): Empty instance, for file '%s'.", - cimglist_instance, - filename?filename:"(FILE*)"); - - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb+"); - bool saved = false, endian = cimg::endianness(); - char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; - unsigned int j, err, N, W, H, D, C; - int i; - j = 0; while((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); - if (err<2) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "save_cimg(): CImg header not found in file '%s'.", - cimglist_instance, - filename?filename:"(FILE*)"); - } - if (!cimg::strncasecmp("little",str_endian,6)) endian = false; - else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; - const unsigned int lmax = cimg::min(N,n0+_width); - _cimg_save_cimg_case("bool",bool); - _cimg_save_cimg_case("unsigned_char",unsigned char); - _cimg_save_cimg_case("uchar",unsigned char); - _cimg_save_cimg_case("char",char); - _cimg_save_cimg_case("unsigned_short",unsigned short); - _cimg_save_cimg_case("ushort",unsigned short); - _cimg_save_cimg_case("short",short); - _cimg_save_cimg_case("unsigned_int",unsigned int); - _cimg_save_cimg_case("uint",unsigned int); - _cimg_save_cimg_case("int",int); - _cimg_save_cimg_case("unsigned_long",unsigned long); - _cimg_save_cimg_case("ulong",unsigned long); - _cimg_save_cimg_case("long",long); - _cimg_save_cimg_case("float",float); - _cimg_save_cimg_case("double",double); - if (!saved) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimglist_instance - "save_cimg(): Unsupported data type '%s' for file '%s'.", - cimglist_instance, - filename?filename:"(FILE*)",str_pixeltype); - } - if (!file) cimg::fclose(nfile); - return *this; - } - - //! Insert the image instance into into an existing .cimg file, at specified coordinates. - /** - \param filename Filename to write data to. - \param n0 Starting index of images to write. - \param x0 Starting X-coordinates of image regions to write. - \param y0 Starting Y-coordinates of image regions to write. - \param z0 Starting Z-coordinates of image regions to write. - \param c0 Starting C-coordinates of image regions to write. - **/ - const CImgList& save_cimg(const char *const filename, - const unsigned int n0, - const unsigned int x0, const unsigned int y0, - const unsigned int z0, const unsigned int c0) const { - return _save_cimg(0,filename,n0,x0,y0,z0,c0); - } - - //! Insert the image instance into into an existing .cimg file, at specified coordinates. - /** - \param file File to write data to. - \param n0 Starting index of images to write. - \param x0 Starting X-coordinates of image regions to write. - \param y0 Starting Y-coordinates of image regions to write. - \param z0 Starting Z-coordinates of image regions to write. - \param c0 Starting C-coordinates of image regions to write. - **/ - const CImgList& save_cimg(std::FILE *const file, - const unsigned int n0, - const unsigned int x0, const unsigned int y0, - const unsigned int z0, const unsigned int c0) const { - return _save_cimg(file,0,n0,x0,y0,z0,c0); - } - - static void _save_empty_cimg(std::FILE *const file, const char *const filename, - const unsigned int nb, - const unsigned int dx, const unsigned int dy, - const unsigned int dz, const unsigned int dc) { - std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - const unsigned long siz = (unsigned long)dx*dy*dz*dc*sizeof(T); - std::fprintf(nfile,"%u %s\n",nb,pixel_type()); - for (unsigned int i=nb; i; --i) { - std::fprintf(nfile,"%u %u %u %u\n",dx,dy,dz,dc); - for (unsigned long off=siz; off; --off) std::fputc(0,nfile); - } - if (!file) cimg::fclose(nfile); - } - - //! Save empty (non-compressed) .cimg file with specified dimensions. - /** - \param filename Filename to write data to. - \param nb Number of images to write. - \param dx Width of images in the written file. - \param dy Height of images in the written file. - \param dz Depth of images in the written file. - \param dc Spectrum of images in the written file. - **/ - static void save_empty_cimg(const char *const filename, - const unsigned int nb, - const unsigned int dx, const unsigned int dy=1, - const unsigned int dz=1, const unsigned int dc=1) { - return _save_empty_cimg(0,filename,nb,dx,dy,dz,dc); - } - - //! Save empty .cimg file with specified dimensions. - /** - \param file File to write data to. - \param nb Number of images to write. - \param dx Width of images in the written file. - \param dy Height of images in the written file. - \param dz Depth of images in the written file. - \param dc Spectrum of images in the written file. - **/ - static void save_empty_cimg(std::FILE *const file, - const unsigned int nb, - const unsigned int dx, const unsigned int dy=1, - const unsigned int dz=1, const unsigned int dc=1) { - return _save_empty_cimg(file,0,nb,dx,dy,dz,dc); - } - - //! Save list as a TIFF file. - /** - \param filename Filename to write data to. - \param compression_type Compression mode used to write data. - **/ - const CImgList& save_tiff(const char *const filename, const unsigned int compression_type=0) const { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "save_tiff(): Specified filename is (null).", - cimglist_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - -#ifndef cimg_use_tiff - if (_width==1) _data[0].save_tiff(filename,compression_type); - else cimglist_for(*this,l) { - char nfilename[1024] = { 0 }; - cimg::number_filename(filename,l,6,nfilename); - _data[l].save_tiff(nfilename,compression_type); - } -#else - TIFF *tif = TIFFOpen(filename,"w"); - if (tif) { - for (unsigned int dir = 0, l = 0; l<_width; ++l) { - const CImg& img = (*this)[l]; - if (img) { - if (img._depth==1) img._save_tiff(tif,dir++,compression_type); - else cimg_forZ(img,z) img.get_slice(z)._save_tiff(tif,dir++,compression_type); - } - } - TIFFClose(tif); - } else - throw CImgIOException(_cimglist_instance - "save_tiff(): Failed to open stream for file '%s'.", - cimglist_instance, - filename); -#endif - return *this; - } - - - //! Save list as a gzipped file, using external tool 'gzip'. - /** - \param filename Filename to write data to. - **/ - const CImgList& save_gzip_external(const char *const filename) const { - if (!filename) - throw CImgIOException(_cimglist_instance - "save_gzip_external(): Specified filename is (null).", - cimglist_instance); - - char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; - const char - *ext = cimg::split_filename(filename,body), - *ext2 = cimg::split_filename(body,0); - std::FILE *file; - do { - if (!cimg::strcasecmp(ext,"gz")) { - if (*ext2) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } else { - if (*ext) cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); - else cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - } - if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); - } while (file); - - if (is_saveable(body)) { - save(filetmp); - cimg_snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", - cimg::gzip_path(), - CImg::string(filetmp)._system_strescape().data(), - CImg::string(filename)._system_strescape().data()); - cimg::system(command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimglist_instance - "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", - cimglist_instance, - filename); - else cimg::fclose(file); - std::remove(filetmp); - } else { - char nfilename[1024] = { 0 }; - cimglist_for(*this,l) { - cimg::number_filename(body,l,6,nfilename); - if (*ext) std::sprintf(nfilename + std::strlen(nfilename),".%s",ext); - _data[l].save_gzip_external(nfilename); - } - } - return *this; - } - - //! Save image sequence, using the external tool 'ffmpeg'. - /** - \param filename Filename to write data to. - \param codec Type of compression. - \param fps Number of frames per second. - \param bitrate Output bitrate - **/ - const CImgList& save_ffmpeg_external(const char *const filename, const char *const codec=0, - const unsigned int fps=25, const unsigned int bitrate=2048) const { - if (!filename) - throw CImgArgumentException(_cimglist_instance - "save_ffmpeg_external(): Specified filename is (null).", - cimglist_instance); - if (is_empty()) { cimg::fempty(0,filename); return *this; } - - const char - *const ext = cimg::split_filename(filename), - *const _codec = codec?codec:!cimg::strcasecmp(ext,"flv")?"flv":"mpeg2video"; - - char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; - CImgList filenames; - std::FILE *file = 0; - cimglist_for(*this,l) if (!_data[l].is_sameXYZ(_data[0])) - throw CImgInstanceException(_cimglist_instance - "save_ffmpeg_external(): Invalid instance dimensions for file '%s'.", - cimglist_instance, - filename); - do { - cimg_snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); - if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); - } while (file); - cimglist_for(*this,l) { - cimg_snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,l+1); - CImg::string(filetmp2).move_to(filenames); - if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save_pnm(filetmp2); - else _data[l].save_pnm(filetmp2); - } -#if cimg_OS!=2 - cimg_snprintf(command,sizeof(command),"%s -i \"%s_%%6d.ppm\" -vcodec %s -b %uk -r %u -y \"%s\" >/dev/null 2>&1", - cimg::ffmpeg_path(), - CImg::string(filetmp)._system_strescape().data(), - _codec,bitrate,fps, - CImg::string(filename)._system_strescape().data()); -#else - cimg_snprintf(command,sizeof(command),"\"%s -i \"%s_%%6d.ppm\" -vcodec %s -b %uk -r %u -y \"%s\"\" >NUL 2>&1", - cimg::ffmpeg_path(), - CImg::string(filetmp)._system_strescape().data(), - _codec,bitrate,fps, - CImg::string(filename)._system_strescape().data()); -#endif - cimg::system(command); - file = std::fopen(filename,"rb"); - if (!file) - throw CImgIOException(_cimglist_instance - "save_ffmpeg_external(): Failed to save file '%s' with external command 'ffmpeg'.", - cimglist_instance, - filename); - else cimg::fclose(file); - cimglist_for(*this,l) std::remove(filenames[l]); - return *this; - } - - //@} - //---------------------------------- - // - //! \name Others - //@{ - //---------------------------------- - - //! Crop font along the X-axis. - /** - **/ - CImgList& crop_font() { - return get_crop_font().move_to(*this); - } - - //! Crop font along the X-axis \newinstance. - /** - **/ - CImgList get_crop_font() const { - CImgList res; - cimglist_for(*this,l) { - const CImg& letter = (*this)[l]; - int xmin = letter._width, xmax = 0; - cimg_forXY(letter,x,y) if (letter(x,y)) { if (xxmax) xmax = x; } - if (xmin>xmax) CImg(letter._width,letter._height,1,letter._spectrum,0).move_to(res); - else letter.get_crop(xmin,0,xmax,letter._height-1).move_to(res); - } - res[' '].resize(res['f']._width,-100,-100,-100,0); - if (' '+256& font(const unsigned int font_height, const bool is_variable_width=true) { - if (!font_height) return CImgList::empty(); - cimg::mutex(11); - - // Decompress nearest base font data if needed. - const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; - const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, data_Ms[] = { 86,79,57,47 }; - const unsigned int data_ind = font_height<=13?0:font_height<=23?1:font_height<=53?2:3; - static CImg base_fonts[4]; - CImg &base_font = base_fonts[data_ind]; - if (!base_font) { - const unsigned int w = data_widths[data_ind], h = data_heights[data_ind], M = data_Ms[data_ind]; - base_font.assign(256*w,h); - const char *data_font = data_fonts[data_ind]; - unsigned char *ptrd = base_font; - const unsigned char *const ptrde = base_font.end(); - - // Special case needed for 90x103 to avoid MS compiler limit with big strings. - CImg data90x103; - if (!data_font) { - ((CImg(cimg::_data_font90x103[0],(unsigned int)std::strlen(cimg::_data_font90x103[0]),1,1,1,true), - CImg(cimg::_data_font90x103[1],(unsigned int)std::strlen(cimg::_data_font90x103[1])+1,1,1,1,true))>'x').move_to(data90x103); - data_font = data90x103.data(); - } - - // Uncompress font data (decode RLE). - for (const char *ptrs = data_font; *ptrs; ++ptrs) { - const int c = *ptrs-M-32, v = c>=0?255:0, n = c>=0?c:-c; - if (ptrd+n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } - else { std::memset(ptrd,v,ptrde-ptrd); break; } - } - } - - // Find optimal font cache location to return. - static CImgList fonts[16]; - static bool is_variable_widths[16] = { 0 }; - unsigned int ind = ~0U; - for (int i = 0; i<16; ++i) - if (!fonts[i] || (is_variable_widths[i]==is_variable_width && font_height==fonts[i][0]._height)) { ind = i; break; } // Found empty slot or cached font. - if (ind==~0U) { // No empty slots nor existing font in cache. - std::memmove(fonts,fonts+1,15*sizeof(CImgList)); - std::memmove(is_variable_widths,is_variable_widths+1,15*sizeof(bool)); - std::memset(fonts+(ind=15),0,sizeof(CImgList)); // Free a slot in cache for new font. - } - CImgList &font = fonts[ind]; - - // Render requested font. - if (!font) { - const unsigned int padding_x = font_height<33?1:font_height<53?2:font_height<103?3:4; - is_variable_widths[ind] = is_variable_width; - font = base_font.get_split('x',256); - if (font_height!=font[0]._height) - cimglist_for(font,l) - font[l].resize(cimg::max(1U,font[l]._width*font_height/font[l]._height),font_height,-100,-100, - font[0]._height>font_height?2:5); - if (is_variable_width) font.crop_font(); - cimglist_for(font,l) font[l].resize(font[l]._width + padding_x,-100,1,1,0,0,0.5); - font.insert(256,0); - cimglist_for_in(font,0,255,l) font[l].assign(font[l+256]._width,font[l+256]._height,1,3,1); - } - cimg::mutex(11,0); - return font; - } - - //! Compute a 1d Fast Fourier Transform, along specified axis. - /** - \param axis Axis along which the Fourier transform is computed. - \param invert Tells if the direct (\c false) or inverse transform (\c true) is computed. - **/ - CImgList& FFT(const char axis, const bool invert=false) { - if (is_empty()) return *this; - if (_width==1) insert(1); - if (_width>2) - cimg::warn(_cimglist_instance - "FFT(): Instance has more than 2 images", - cimglist_instance); - - CImg::FFT(_data[0],_data[1],axis,invert); - return *this; - } - - //! Compute a 1-D Fast Fourier Transform, along specified axis \newinstance. - CImgList get_FFT(const char axis, const bool invert=false) const { - return CImgList(*this,false).FFT(axis,invert); - } - - //! Compute a n-d Fast Fourier Transform. - /** - \param invert Tells if the direct (\c false) or inverse transform (\c true) is computed. - **/ - CImgList& FFT(const bool invert=false) { - if (is_empty()) return *this; - if (_width==1) insert(1); - if (_width>2) - cimg::warn(_cimglist_instance - "FFT(): Instance has more than 2 images", - cimglist_instance); - - CImg::FFT(_data[0],_data[1],invert); - return *this; - } - - //! Compute a n-d Fast Fourier Transform \newinstance. - CImgList get_FFT(const bool invert=false) const { - return CImgList(*this,false).FFT(invert); - } - - //! Reverse primitives orientations of a 3d object. - /** - **/ - CImgList& reverse_object3d() { - cimglist_for(*this,l) { - CImg& p = _data[l]; - switch (p.size()) { - case 2: case 3: cimg::swap(p[0],p[1]); break; - case 6: cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; - case 9: cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; - case 4: cimg::swap(p[0],p[1],p[2],p[3]); break; - case 12: cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; - } - } - return *this; - } - - //! Reverse primitives orientations of a 3d object \newinstance. - CImgList get_reverse_object3d() const { - return (+*this).reverse_object3d(); - } - - //@} - }; // struct CImgList { ... - - /* - #--------------------------------------------- - # - # Completion of previously declared functions - # - #---------------------------------------------- - */ - -namespace cimg { - - // Implement a tic/toc mechanism to display elapsed time of algorithms. - inline unsigned long tictoc(const bool is_tic) { - cimg::mutex(2); - static CImg times(64); - static unsigned int pos = 0; - const unsigned long t1 = cimg::time(); - if (is_tic) { // Tic. - times[pos++] = t1; - if (pos>=times._width) - throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); - cimg::mutex(2,0); - return t1; - } - // Toc. - if (!pos) - throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); - const unsigned long - t0 = times[--pos], - dt = t1>=t0?(t1-t0):cimg::type::max(); - const unsigned int - edays = (unsigned int)(dt/86400000.0), - ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), - emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), - esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), - ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); - if (!edays && !ehours && !emin && !esec) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n",cimg::t_red,1+2*pos,"",ems,cimg::t_normal); - else { - if (!edays && !ehours && !emin) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",esec,ems,cimg::t_normal); - else { - if (!edays && !ehours) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",emin,esec,ems,cimg::t_normal); - else{ - if (!edays) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",ehours,emin,esec,ems,cimg::t_normal); - else{ - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); - } - } - } - } - cimg::mutex(2,0); - return dt; - } - - //! Display a simple dialog box, and wait for the user's response. - /** - \param title Title of the dialog window. - \param msg Main message displayed inside the dialog window. - \param button1_label Label of the 1st button. - \param button2_label Label of the 2nd button (\c 0 to hide button). - \param button3_label Label of the 3rd button (\c 0 to hide button). - \param button4_label Label of the 4th button (\c 0 to hide button). - \param button5_label Label of the 5th button (\c 0 to hide button). - \param button6_label Label of the 6th button (\c 0 to hide button). - \param logo Image logo displayed at the left of the main message. - \param is_centered Tells if the dialog window must be centered on the screen. - \return Indice of clicked button (from \c 0 to \c 5), or \c -1 if the dialog window has been closed by the user. - \note - - Up to 6 buttons can be defined in the dialog window. - - The function returns when a user clicked one of the button or closed the dialog window. - - If a button text is set to 0, the corresponding button (and the followings) will not appear in the dialog box. At least one button must be specified. - **/ - template - inline int dialog(const char *const title, const char *const msg, - const char *const button1_label, const char *const button2_label, - const char *const button3_label, const char *const button4_label, - const char *const button5_label, const char *const button6_label, - const CImg& logo, const bool is_centered = false) { -#if cimg_display==0 - cimg::unused(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label,logo._data,is_centered); - throw CImgIOException("cimg::dialog(): No display available."); -#else - const unsigned char - black[] = { 0,0,0 }, white[] = { 255,255,255 }, gray[] = { 200,200,200 }, gray2[] = { 150,150,150 }; - - // Create buttons and canvas graphics - CImgList buttons, cbuttons, sbuttons; - if (button1_label) { CImg().draw_text(0,0,button1_label,black,gray,1,13).move_to(buttons); - if (button2_label) { CImg().draw_text(0,0,button2_label,black,gray,1,13).move_to(buttons); - if (button3_label) { CImg().draw_text(0,0,button3_label,black,gray,1,13).move_to(buttons); - if (button4_label) { CImg().draw_text(0,0,button4_label,black,gray,1,13).move_to(buttons); - if (button5_label) { CImg().draw_text(0,0,button5_label,black,gray,1,13).move_to(buttons); - if (button6_label) { CImg().draw_text(0,0,button6_label,black,gray,1,13).move_to(buttons); - }}}}}} - if (!buttons._width) - throw CImgArgumentException("cimg::dialog(): No buttons have been defined."); - cimglist_for(buttons,l) buttons[l].resize(-100,-100,1,3); - - unsigned int bw = 0, bh = 0; - cimglist_for(buttons,l) { bw = cimg::max(bw,buttons[l]._width); bh = cimg::max(bh,buttons[l]._height); } - bw+=8; bh+=8; - if (bw<64) bw = 64; - if (bw>128) bw = 128; - if (bh<24) bh = 24; - if (bh>48) bh = 48; - - CImg button(bw,bh,1,3); - button.draw_rectangle(0,0,bw-1,bh-1,gray); - button.draw_line(0,0,bw-1,0,white).draw_line(0,bh-1,0,0,white); - button.draw_line(bw-1,0,bw-1,bh-1,black).draw_line(bw-1,bh-1,0,bh-1,black); - button.draw_line(1,bh-2,bw-2,bh-2,gray2).draw_line(bw-2,bh-2,bw-2,1,gray2); - CImg sbutton(bw,bh,1,3); - sbutton.draw_rectangle(0,0,bw-1,bh-1,gray); - sbutton.draw_line(0,0,bw-1,0,black).draw_line(bw-1,0,bw-1,bh-1,black); - sbutton.draw_line(bw-1,bh-1,0,bh-1,black).draw_line(0,bh-1,0,0,black); - sbutton.draw_line(1,1,bw-2,1,white).draw_line(1,bh-2,1,1,white); - sbutton.draw_line(bw-2,1,bw-2,bh-2,black).draw_line(bw-2,bh-2,1,bh-2,black); - sbutton.draw_line(2,bh-3,bw-3,bh-3,gray2).draw_line(bw-3,bh-3,bw-3,2,gray2); - sbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); - sbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); - CImg cbutton(bw,bh,1,3); - cbutton.draw_rectangle(0,0,bw-1,bh-1,black).draw_rectangle(1,1,bw-2,bh-2,gray2).draw_rectangle(2,2,bw-3,bh-3,gray); - cbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); - cbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); - - cimglist_for(buttons,ll) { - CImg(cbutton).draw_image(1+(bw-buttons[ll].width())/2,1+(bh-buttons[ll].height())/2,buttons[ll]). - move_to(cbuttons); - CImg(sbutton).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). - move_to(sbuttons); - CImg(button).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). - move_to(buttons[ll]); - } - - CImg canvas; - if (msg) ((CImg().draw_text(0,0,"%s",gray,0,1,13,msg)*=-1)+=200).resize(-100,-100,1,3).move_to(canvas); - - const unsigned int - bwall = (buttons._width-1)*(12+bw) + bw, - w = cimg::max(196U,36+logo._width+canvas._width,24+bwall), - h = cimg::max(96U,36+canvas._height+bh,36+logo._height+bh), - lx = 12 + (canvas._data?0:((w-24-logo._width)/2)), - ly = (h-12-bh-logo._height)/2, - tx = lx+logo._width+12, - ty = (h-12-bh-canvas._height)/2, - bx = (w-bwall)/2, - by = h-12-bh; - - if (canvas._data) - canvas = CImg(w,h,1,3). - draw_rectangle(0,0,w-1,h-1,gray). - draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). - draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black). - draw_image(tx,ty,canvas); - else - canvas = CImg(w,h,1,3). - draw_rectangle(0,0,w-1,h-1,gray). - draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). - draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black); - if (logo._data) canvas.draw_image(lx,ly,logo); - - unsigned int xbuttons[6] = { 0 }; - cimglist_for(buttons,lll) { xbuttons[lll] = bx+(bw+12)*lll; canvas.draw_image(xbuttons[lll],by,buttons[lll]); } - - // Open window and enter events loop - CImgDisplay disp(canvas,title?title:" ",0,false,is_centered?true:false); - if (is_centered) disp.move((CImgDisplay::screen_width() - disp.width())/2, - (CImgDisplay::screen_height() - disp.height())/2); - bool stop_flag = false, refresh = false; - int oselected = -1, oclicked = -1, selected = -1, clicked = -1; - while (!disp.is_closed() && !stop_flag) { - if (refresh) { - if (clicked>=0) CImg(canvas).draw_image(xbuttons[clicked],by,cbuttons[clicked]).display(disp); - else { - if (selected>=0) CImg(canvas).draw_image(xbuttons[selected],by,sbuttons[selected]).display(disp); - else canvas.display(disp); - } - refresh = false; - } - disp.wait(15); - if (disp.is_resized()) disp.resize(disp,false); - - if (disp.button()&1) { - oclicked = clicked; - clicked = -1; - cimglist_for(buttons,l) - if (disp.mouse_y()>=(int)by && disp.mouse_y()<(int)(by+bh) && - disp.mouse_x()>=(int)xbuttons[l] && disp.mouse_x()<(int)(xbuttons[l]+bw)) { - clicked = selected = l; - refresh = true; - } - if (clicked!=oclicked) refresh = true; - } else if (clicked>=0) stop_flag = true; - - if (disp.key()) { - oselected = selected; - switch (disp.key()) { - case cimg::keyESC : selected=-1; stop_flag = true; break; - case cimg::keyENTER : if (selected<0) selected = 0; stop_flag = true; break; - case cimg::keyTAB : - case cimg::keyARROWRIGHT : - case cimg::keyARROWDOWN : selected = (selected+1)%buttons._width; break; - case cimg::keyARROWLEFT : - case cimg::keyARROWUP : selected = (selected+buttons._width-1)%buttons._width; break; - } - disp.set_key(); - if (selected!=oselected) refresh = true; - } - } - if (!disp) selected = -1; - return selected; -#endif - } - - //! Display a simple dialog box, and wait for the user's response \specialization. - inline int dialog(const char *const title, const char *const msg, - const char *const button1_label, const char *const button2_label, const char *const button3_label, - const char *const button4_label, const char *const button5_label, const char *const button6_label, - const bool is_centered) { - return dialog(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label, - CImg::_logo40x38(),is_centered); - } - - //! Evaluate math expression. - /** - \param expression C-string describing the formula to evaluate. - \param x Value of the pre-defined variable \c x. - \param y Value of the pre-defined variable \c y. - \param z Value of the pre-defined variable \c z. - \param c Value of the pre-defined variable \c c. - \return Result of the formula evaluation. - \note Set \c expression to \c 0 to keep evaluating the last specified \c expression. - \par Example - \code - const double - res1 = cimg::eval("cos(x)^2+sin(y)^2",2,2), // will return '1'. - res2 = cimg::eval(0,1,1); // will return '1' too. - \endcode - **/ - inline double eval(const char *const expression, const double x, const double y, const double z, const double c) { - static const CImg empty; - return empty.eval(expression,x,y,z,c); - } - - template - inline CImg::type> eval(const char *const expression, const CImg& xyzc) { - static const CImg empty; - return empty.eval(expression,xyzc); - } - - // End of cimg:: namespace -} - - // End of cimg_library:: namespace -} - -//! Short alias name. -namespace cil = cimg_library_suffixed; - -#ifdef _cimg_redefine_False -#define False 0 -#endif -#ifdef _cimg_redefine_True -#define True 1 -#endif -#ifdef _cimg_redefine_None -#define None 0 -#endif -#ifdef _cimg_redefine_min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif -#ifdef _cimg_redefine_max -#define max(a,b) (((a)>(b))?(a):(b)) -#endif -#ifdef _cimg_redefine_PI -#define PI 3.141592653589793238462643383 -#endif - -#endif -// Local Variables: -// mode: c++ -// End: diff --git a/deps/CImg/Licence_CeCILL-C_V1-en.txt b/deps/CImg/Licence_CeCILL-C_V1-en.txt deleted file mode 100644 index 2e9ffba..0000000 --- a/deps/CImg/Licence_CeCILL-C_V1-en.txt +++ /dev/null @@ -1,508 +0,0 @@ - - CeCILL-C FREE SOFTWARE LICENSE AGREEMENT - - - Notice - -This Agreement is a Free Software license agreement that is the result -of discussions between its authors in order to ensure compliance with -the two main principles guiding its drafting: - - * firstly, compliance with the principles governing the distribution - of Free Software: access to source code, broad rights granted to - users, - * secondly, the election of a governing law, French law, with which - it is conformant, both as regards the law of torts and - intellectual property law, and the protection that it offers to - both authors and holders of the economic rights over software. - -The authors of the CeCILL-C (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) -license are: - -Commissariat à l'Energie Atomique - CEA, a public scientific, technical -and industrial research establishment, having its principal place of -business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. - -Centre National de la Recherche Scientifique - CNRS, a public scientific -and technological establishment, having its principal place of business -at 3 rue Michel-Ange, 75794 Paris cedex 16, France. - -Institut National de Recherche en Informatique et en Automatique - -INRIA, a public scientific and technological establishment, having its -principal place of business at Domaine de Voluceau, Rocquencourt, BP -105, 78153 Le Chesnay cedex, France. - - - Preamble - -The purpose of this Free Software license agreement is to grant users the -right to modify and re-use the software governed by this license. - -The exercising of this right is conditional on the obligation to make -available to the community the modifications made to the source code of the -software so as to contribute to its evolution. - -In consideration of access to the source code and the rights to copy, -modify and redistribute granted by the license, users are provided only -with a limited warranty and the software's author, the holder of the -economic rights, and the successive licensors only have limited liability. - -In this respect, the risks associated with loading, using, modifying -and/or developing or reproducing the software by the user are brought to -the user's attention, given its Free Software status, which may make it -complicated to use, with the result that its use is reserved for -developers and experienced professionals having in-depth computer -knowledge. Users are therefore encouraged to load and test the suitability -of the software as regards their requirements in conditions enabling the -security of their systems and/or data to be ensured and, more generally, to -use and operate it in the same conditions of security. This Agreement may be -freely reproduced and published, provided it is not altered, and that no -provisions are either added or removed herefrom. - -This Agreement may apply to any or all software for which the holder of -the economic rights decides to submit the use thereof to its provisions. - - - Article 1 - DEFINITIONS - -For the purpose of this Agreement, when the following expressions -commence with a capital letter, they shall have the following meaning: - -Agreement: means this license agreement, and its possible subsequent -versions and annexes. - -Software: means the software in its Object Code and/or Source Code form -and, where applicable, its documentation, "as is" when the Licensee -accepts the Agreement. - -Initial Software: means the Software in its Source Code and possibly its -Object Code form and, where applicable, its documentation, "as is" when -it is first distributed under the terms and conditions of the Agreement. - -Modified Software: means the Software modified by at least one Integrated -Contribution. - -Source Code: means all the Software's instructions and program lines to -which access is required so as to modify the Software. - -Object Code: means the binary files originating from the compilation of -the Source Code. - -Holder: means the holder(s) of the economic rights over the Initial -Software. - -Licensee: means the Software user(s) having accepted the Agreement. - -Contributor: means a Licensee having made at least one Integrated -Contribution. - -Licensor: means the Holder, or any other individual or legal entity, who -distributes the Software under the Agreement. - -Integrated Contribution: means any or all modifications, corrections, -translations, adaptations and/or new functions integrated into the Source -Code by any or all Contributors. - -Related Module: means a set of sources files including their documentation -that, without modification to the Source Code, enables supplementary -functions or services in addition to those offered by the Software. - -Derivative Software: means any combination of the Software, modified or not, -and of a Related Module. - -Parties: mean both the Licensee and the Licensor. - -These expressions may be used both in singular and plural form. - - - Article 2 - PURPOSE - -The purpose of the Agreement is the grant by the Licensor to the -Licensee of a non-exclusive, transferable and worldwide license for the -Software as set forth in Article 5 hereinafter for the whole term of the -protection granted by the rights over said Software. - - - Article 3 - ACCEPTANCE - -3.1 The Licensee shall be deemed as having accepted the terms and -conditions of this Agreement upon the occurrence of the first of the -following events: - - * (i) loading the Software by any or all means, notably, by - downloading from a remote server, or by loading from a physical - medium; - * (ii) the first time the Licensee exercises any of the rights - granted hereunder. - -3.2 One copy of the Agreement, containing a notice relating to the -characteristics of the Software, to the limited warranty, and to the -fact that its use is restricted to experienced users has been provided -to the Licensee prior to its acceptance as set forth in Article 3.1 -hereinabove, and the Licensee hereby acknowledges that it has read and -understood it. - - - Article 4 - EFFECTIVE DATE AND TERM - - - 4.1 EFFECTIVE DATE - -The Agreement shall become effective on the date when it is accepted by -the Licensee as set forth in Article 3.1. - - - 4.2 TERM - -The Agreement shall remain in force for the entire legal term of -protection of the economic rights over the Software. - - - Article 5 - SCOPE OF RIGHTS GRANTED - -The Licensor hereby grants to the Licensee, who accepts, the following -rights over the Software for any or all use, and for the term of the -Agreement, on the basis of the terms and conditions set forth hereinafter. - -Besides, if the Licensor owns or comes to own one or more patents -protecting all or part of the functions of the Software or of its -components, the Licensor undertakes not to enforce the rights granted by -these patents against successive Licensees using, exploiting or -modifying the Software. If these patents are transferred, the Licensor -undertakes to have the transferees subscribe to the obligations set -forth in this paragraph. - - - 5.1 RIGHT OF USE - -The Licensee is authorized to use the Software, without any limitation -as to its fields of application, with it being hereinafter specified -that this comprises: - - 1. permanent or temporary reproduction of all or part of the Software - by any or all means and in any or all form. - 2. loading, displaying, running, or storing the Software on any or - all medium. - 3. entitlement to observe, study or test its operation so as to - determine the ideas and principles behind any or all constituent - elements of said Software. This shall apply when the Licensee - carries out any or all loading, displaying, running, transmission - or storage operation as regards the Software, that it is entitled - to carry out hereunder. - - - 5.2 RIGHT OF MODIFICATION - -The right of modification includes the right to translate, adapt, arrange, -or make any or all modifications to the Software, and the right to -reproduce the resulting Software. It includes, in particular, the right -to create a Derivative Software. - -The Licensee is authorized to make any or all modification to the -Software provided that it includes an explicit notice that it is the -author of said modification and indicates the date of the creation thereof. - - - 5.3 RIGHT OF DISTRIBUTION - -In particular, the right of distribution includes the right to publish, -transmit and communicate the Software to the general public on any or -all medium, and by any or all means, and the right to market, either in -consideration of a fee, or free of charge, one or more copies of the -Software by any means. - -The Licensee is further authorized to distribute copies of the modified -or unmodified Software to third parties according to the terms and -conditions set forth hereinafter. - - - 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION - -The Licensee is authorized to distribute true copies of the Software in -Source Code or Object Code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Software is -redistributed, the Licensee allows effective access to the full Source Code -of the Software at a minimum during the entire period of its distribution -of the Software, it being understood that the additional cost of acquiring -the Source Code shall not exceed the cost of transferring the data. - - - 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE - -When the Licensee makes an Integrated Contribution to the Software, the terms -and conditions for the distribution of the resulting Modified Software become -subject to all the provisions of this Agreement. - -The Licensee is authorized to distribute the Modified Software, in source -code or object code form, provided that said distribution complies with all -the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - 2. a notice relating to the limitation of both the Licensor's warranty and - liability as set forth in Articles 8 and 9, - -and that, in the event that only the object code of the Modified Software is -redistributed, the Licensee allows effective access to the full source code -of the Modified Software at a minimum during the entire period of its -distribution of the Modified Software, it being understood that the -additional cost of acquiring the source code shall not exceed the cost of -transferring the data. - - 5.3.3 DISTRIBUTION OF DERIVATIVE SOFTWARE - -When the Licensee creates Derivative Software, this Derivative Software may -be distributed under a license agreement other than this Agreement, subject -to compliance with the requirement to include a notice concerning the rights -over the Software as defined in Article 6.4. In the event the creation of the -Derivative Software required modification of the Source Code, the Licensee -undertakes that: - - 1. the resulting Modified Software will be governed by this Agreement, - 2. the Integrated Contributions in the resulting Modified Software will be - clearly identified and documented, - 3. the Licensee will allow effective access to the source code of the - Modified Software, at a minimum during the entire period of - distribution of the Derivative Software, such that such modifications - may be carried over in a subsequent version of the Software; it being - understood that the additional cost of purchasing the source code of - the Modified Software shall not exceed the cost of transferring the - data. - - - 5.3.4 COMPATIBILITY WITH THE CeCILL LICENSE - -When a Modified Software contains an Integrated Contribution subject to the -CeCill license agreement, or when a Derivative Software contains a Related -Module subject to the CeCill license agreement, the provisions set forth in -the third item of Article 6.4 are optional. - - - Article 6 - INTELLECTUAL PROPERTY - - - 6.1 OVER THE INITIAL SOFTWARE - -The Holder owns the economic rights over the Initial Software. Any or -all use of the Initial Software is subject to compliance with the terms -and conditions under which the Holder has elected to distribute its work -and no one shall be entitled to modify the terms and conditions for the -distribution of said Initial Software. - -The Holder undertakes that the Initial Software will remain ruled at -least by the current license, for the duration set forth in Article 4.2. - - - 6.2 OVER THE INTEGRATED CONTRIBUTIONS - -A Licensee who develops an Integrated Contribution is the owner of the -intellectual property rights over this Contribution as defined by -applicable law. - - - 6.3 OVER THE RELATED MODULES - -A Licensee who develops an Related Module is the owner of the -intellectual property rights over this Related Module as defined by -applicable law and is free to choose the type of agreement that shall -govern its distribution under the conditions defined in Article 5.3.3. - - - 6.4 NOTICE OF RIGHTS - -The Licensee expressly undertakes: - - 1. not to remove, or modify, in any manner, the intellectual property - notices attached to the Software; - 2. to reproduce said notices, in an identical manner, in the copies - of the Software modified or not; - 3. to ensure that use of the Software, its intellectual property - notices and the fact that it is governed by the Agreement is - indicated in a text that is easily accessible, specifically from - the interface of any Derivative Software. - -The Licensee undertakes not to directly or indirectly infringe the -intellectual property rights of the Holder and/or Contributors on the -Software and to take, where applicable, vis-à-vis its staff, any and all -measures required to ensure respect of said intellectual property rights -of the Holder and/or Contributors. - - - Article 7 - RELATED SERVICES - -7.1 Under no circumstances shall the Agreement oblige the Licensor to -provide technical assistance or maintenance services for the Software. - -However, the Licensor is entitled to offer this type of services. The -terms and conditions of such technical assistance, and/or such -maintenance, shall be set forth in a separate instrument. Only the -Licensor offering said maintenance and/or technical assistance services -shall incur liability therefor. - -7.2 Similarly, any Licensor is entitled to offer to its licensees, under -its sole responsibility, a warranty, that shall only be binding upon -itself, for the redistribution of the Software and/or the Modified -Software, under terms and conditions that it is free to decide. Said -warranty, and the financial terms and conditions of its application, -shall be subject of a separate instrument executed between the Licensor -and the Licensee. - - - Article 8 - LIABILITY - -8.1 Subject to the provisions of Article 8.2, the Licensee shall be -entitled to claim compensation for any direct loss it may have suffered -from the Software as a result of a fault on the part of the relevant -Licensor, subject to providing evidence thereof. - -8.2 The Licensor's liability is limited to the commitments made under -this Agreement and shall not be incurred as a result of in particular: -(i) loss due the Licensee's total or partial failure to fulfill its -obligations, (ii) direct or consequential loss that is suffered by the -Licensee due to the use or performance of the Software, and (iii) more -generally, any consequential loss. In particular the Parties expressly -agree that any or all pecuniary or business loss (i.e. loss of data, -loss of profits, operating loss, loss of customers or orders, -opportunity cost, any disturbance to business activities) or any or all -legal proceedings instituted against the Licensee by a third party, -shall constitute consequential loss and shall not provide entitlement to -any or all compensation from the Licensor. - - - Article 9 - WARRANTY - -9.1 The Licensee acknowledges that the scientific and technical -state-of-the-art when the Software was distributed did not enable all -possible uses to be tested and verified, nor for the presence of -possible defects to be detected. In this respect, the Licensee's -attention has been drawn to the risks associated with loading, using, -modifying and/or developing and reproducing the Software which are -reserved for experienced users. - -The Licensee shall be responsible for verifying, by any or all means, -the suitability of the product for its requirements, its good working order, -and for ensuring that it shall not cause damage to either persons or -properties. - -9.2 The Licensor hereby represents, in good faith, that it is entitled -to grant all the rights over the Software (including in particular the -rights set forth in Article 5). - -9.3 The Licensee acknowledges that the Software is supplied "as is" by -the Licensor without any other express or tacit warranty, other than -that provided for in Article 9.2 and, in particular, without any warranty -as to its commercial value, its secured, safe, innovative or relevant -nature. - -Specifically, the Licensor does not warrant that the Software is free -from any error, that it will operate without interruption, that it will -be compatible with the Licensee's own equipment and software -configuration, nor that it will meet the Licensee's requirements. - -9.4 The Licensor does not either expressly or tacitly warrant that the -Software does not infringe any third party intellectual property right -relating to a patent, software or any other property right. Therefore, -the Licensor disclaims any and all liability towards the Licensee -arising out of any or all proceedings for infringement that may be -instituted in respect of the use, modification and redistribution of the -Software. Nevertheless, should such proceedings be instituted against -the Licensee, the Licensor shall provide it with technical and legal -assistance for its defense. Such technical and legal assistance shall be -decided on a case-by-case basis between the relevant Licensor and the -Licensee pursuant to a memorandum of understanding. The Licensor -disclaims any and all liability as regards the Licensee's use of the -name of the Software. No warranty is given as regards the existence of -prior rights over the name of the Software or as regards the existence -of a trademark. - - - Article 10 - TERMINATION - -10.1 In the event of a breach by the Licensee of its obligations -hereunder, the Licensor may automatically terminate this Agreement -thirty (30) days after notice has been sent to the Licensee and has -remained ineffective. - -10.2 A Licensee whose Agreement is terminated shall no longer be -authorized to use, modify or distribute the Software. However, any -licenses that it may have granted prior to termination of the Agreement -shall remain valid subject to their having been granted in compliance -with the terms and conditions hereof. - - - Article 11 - MISCELLANEOUS - - - 11.1 EXCUSABLE EVENTS - -Neither Party shall be liable for any or all delay, or failure to -perform the Agreement, that may be attributable to an event of force -majeure, an act of God or an outside cause, such as defective -functioning or interruptions of the electricity or telecommunications -networks, network paralysis following a virus attack, intervention by -government authorities, natural disasters, water damage, earthquakes, -fire, explosions, strikes and labor unrest, war, etc. - -11.2 Any failure by either Party, on one or more occasions, to invoke -one or more of the provisions hereof, shall under no circumstances be -interpreted as being a waiver by the interested Party of its right to -invoke said provision(s) subsequently. - -11.3 The Agreement cancels and replaces any or all previous agreements, -whether written or oral, between the Parties and having the same -purpose, and constitutes the entirety of the agreement between said -Parties concerning said purpose. No supplement or modification to the -terms and conditions hereof shall be effective as between the Parties -unless it is made in writing and signed by their duly authorized -representatives. - -11.4 In the event that one or more of the provisions hereof were to -conflict with a current or future applicable act or legislative text, -said act or legislative text shall prevail, and the Parties shall make -the necessary amendments so as to comply with said act or legislative -text. All other provisions shall remain effective. Similarly, invalidity -of a provision of the Agreement, for any reason whatsoever, shall not -cause the Agreement as a whole to be invalid. - - - 11.5 LANGUAGE - -The Agreement is drafted in both French and English and both versions -are deemed authentic. - - - Article 12 - NEW VERSIONS OF THE AGREEMENT - -12.1 Any person is authorized to duplicate and distribute copies of this -Agreement. - -12.2 So as to ensure coherence, the wording of this Agreement is -protected and may only be modified by the authors of the License, who -reserve the right to periodically publish updates or new versions of the -Agreement, each with a separate number. These subsequent versions may -address new issues encountered by Free Software. - -12.3 Any Software distributed under a given version of the Agreement -may only be subsequently distributed under the same version of the -Agreement or a subsequent version. - - - Article 13 - GOVERNING LAW AND JURISDICTION - -13.1 The Agreement is governed by French law. The Parties agree to -endeavor to seek an amicable solution to any disagreements or disputes -that may arise during the performance of the Agreement. - -13.2 Failing an amicable solution within two (2) months as from their -occurrence, and unless emergency proceedings are necessary, the -disagreements or disputes shall be referred to the Paris Courts having -jurisdiction, by the more diligent Party. - - -Version 1.0 dated 2006-07-12. diff --git a/deps/CImg/Licence_CeCILL_V2-en.txt b/deps/CImg/Licence_CeCILL_V2-en.txt deleted file mode 100644 index 8720df6..0000000 --- a/deps/CImg/Licence_CeCILL_V2-en.txt +++ /dev/null @@ -1,504 +0,0 @@ - - CeCILL FREE SOFTWARE LICENSE AGREEMENT - - - Notice - -This Agreement is a Free Software license agreement that is the result -of discussions between its authors in order to ensure compliance with -the two main principles guiding its drafting: - - * firstly, compliance with the principles governing the distribution - of Free Software: access to source code, broad rights granted to - users, - * secondly, the election of a governing law, French law, with which - it is conformant, both as regards the law of torts and - intellectual property law, and the protection that it offers to - both authors and holders of the economic rights over software. - -The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) -license are: - -Commissariat à l'Energie Atomique - CEA, a public scientific, technical -and industrial research establishment, having its principal place of -business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. - -Centre National de la Recherche Scientifique - CNRS, a public scientific -and technological research establishment, having its principal place of -business at 3 rue Michel-Ange, 75794 Paris cedex 16, France. - -Institut National de Recherche en Informatique et en Automatique - -INRIA, a public scientific and technological establishment, having its -principal place of business at Domaine de Voluceau, Rocquencourt, BP -105, 78153 Le Chesnay cedex, France. - - - Preamble - -The purpose of this Free Software license agreement is to grant users -the right to modify and redistribute the software governed by this -license within the framework of an open source distribution model. - -The exercising of these rights is conditional upon certain obligations -for users so as to preserve this status for all subsequent redistributions. - -In consideration of access to the source code and the rights to copy, -modify and redistribute granted by the license, users are provided only -with a limited warranty and the software's author, the holder of the -economic rights, and the successive licensors only have limited liability. - -In this respect, the risks associated with loading, using, modifying -and/or developing or reproducing the software by the user are brought to -the user's attention, given its Free Software status, which may make it -complicated to use, with the result that its use is reserved for -developers and experienced professionals having in-depth computer -knowledge. Users are therefore encouraged to load and test the suitability -of the software as regards their requirements in conditions enabling -the security of their systems and/or data to be ensured and, more -generally, to use and operate it in the same conditions of security. -This Agreement may be freely reproduced and published, provided it is not -altered, and that no provisions are either added or removed herefrom. - -This Agreement may apply to any or all software for which the holder of -the economic rights decides to submit the use thereof to its provisions. - - - Article 1 - DEFINITIONS - -For the purpose of this Agreement, when the following expressions -commence with a capital letter, they shall have the following meaning: - -Agreement: means this license agreement, and its possible subsequent -versions and annexes. - -Software: means the software in its Object Code and/or Source Code form -and, where applicable, its documentation, "as is" when the Licensee -accepts the Agreement. - -Initial Software: means the Software in its Source Code and possibly its -Object Code form and, where applicable, its documentation, "as is" when -it is first distributed under the terms and conditions of the Agreement. - -Modified Software: means the Software modified by at least one -Contribution. - -Source Code: means all the Software's instructions and program lines to -which access is required so as to modify the Software. - -Object Code: means the binary files originating from the compilation of -the Source Code. - -Holder: means the holder(s) of the economic rights over the Initial -Software. - -Licensee: means the Software user(s) having accepted the Agreement. - -Contributor: means a Licensee having made at least one Contribution. - -Licensor: means the Holder, or any other individual or legal entity, who -distributes the Software under the Agreement. - -Contribution: means any or all modifications, corrections, translations, -adaptations and/or new functions integrated into the Software by any or -all Contributors, as well as any or all Internal Modules. - -Module: means a set of sources files including their documentation that -enables supplementary functions or services in addition to those offered -by the Software. - -External Module: means any or all Modules, not derived from the -Software, so that this Module and the Software run in separate address -spaces, with one calling the other when they are run. - -Internal Module: means any or all Module, connected to the Software so -that they both execute in the same address space. - -GNU GPL: means the GNU General Public License version 2 or any -subsequent version, as published by the Free Software Foundation Inc. - -Parties: mean both the Licensee and the Licensor. - -These expressions may be used both in singular and plural form. - - - Article 2 - PURPOSE - -The purpose of the Agreement is the grant by the Licensor to the -Licensee of a non-exclusive, transferable and worldwide license for the -Software as set forth in Article 5 hereinafter for the whole term of the -protection granted by the rights over said Software. - - - Article 3 - ACCEPTANCE - -3.1 The Licensee shall be deemed as having accepted the terms and -conditions of this Agreement upon the occurrence of the first of the -following events: - - * (i) loading the Software by any or all means, notably, by - downloading from a remote server, or by loading from a physical - medium; - * (ii) the first time the Licensee exercises any of the rights - granted hereunder. - -3.2 One copy of the Agreement, containing a notice relating to the -characteristics of the Software, to the limited warranty, and to the -fact that its use is restricted to experienced users has been provided -to the Licensee prior to its acceptance as set forth in Article 3.1 -hereinabove, and the Licensee hereby acknowledges that it has read and -understood it. - - - Article 4 - EFFECTIVE DATE AND TERM - - - 4.1 EFFECTIVE DATE - -The Agreement shall become effective on the date when it is accepted by -the Licensee as set forth in Article 3.1. - - - 4.2 TERM - -The Agreement shall remain in force for the entire legal term of -protection of the economic rights over the Software. - - - Article 5 - SCOPE OF RIGHTS GRANTED - -The Licensor hereby grants to the Licensee, who accepts, the following -rights over the Software for any or all use, and for the term of the -Agreement, on the basis of the terms and conditions set forth hereinafter. - -Besides, if the Licensor owns or comes to own one or more patents -protecting all or part of the functions of the Software or of its -components, the Licensor undertakes not to enforce the rights granted by -these patents against successive Licensees using, exploiting or -modifying the Software. If these patents are transferred, the Licensor -undertakes to have the transferees subscribe to the obligations set -forth in this paragraph. - - - 5.1 RIGHT OF USE - -The Licensee is authorized to use the Software, without any limitation -as to its fields of application, with it being hereinafter specified -that this comprises: - - 1. permanent or temporary reproduction of all or part of the Software - by any or all means and in any or all form. - - 2. loading, displaying, running, or storing the Software on any or - all medium. - - 3. entitlement to observe, study or test its operation so as to - determine the ideas and principles behind any or all constituent - elements of said Software. This shall apply when the Licensee - carries out any or all loading, displaying, running, transmission - or storage operation as regards the Software, that it is entitled - to carry out hereunder. - - - 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS - -The right to make Contributions includes the right to translate, adapt, -arrange, or make any or all modifications to the Software, and the right -to reproduce the resulting software. - -The Licensee is authorized to make any or all Contributions to the -Software provided that it includes an explicit notice that it is the -author of said Contribution and indicates the date of the creation thereof. - - - 5.3 RIGHT OF DISTRIBUTION - -In particular, the right of distribution includes the right to publish, -transmit and communicate the Software to the general public on any or -all medium, and by any or all means, and the right to market, either in -consideration of a fee, or free of charge, one or more copies of the -Software by any means. - -The Licensee is further authorized to distribute copies of the modified -or unmodified Software to third parties according to the terms and -conditions set forth hereinafter. - - - 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION - -The Licensee is authorized to distribute true copies of the Software in -Source Code or Object Code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Software is -redistributed, the Licensee allows future Licensees unhindered access to -the full Source Code of the Software by indicating how to access it, it -being understood that the additional cost of acquiring the Source Code -shall not exceed the cost of transferring the data. - - - 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE - -When the Licensee makes a Contribution to the Software, the terms and -conditions for the distribution of the resulting Modified Software -become subject to all the provisions of this Agreement. - -The Licensee is authorized to distribute the Modified Software, in -source code or object code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Modified -Software is redistributed, the Licensee allows future Licensees -unhindered access to the full source code of the Modified Software by -indicating how to access it, it being understood that the additional -cost of acquiring the source code shall not exceed the cost of -transferring the data. - - - 5.3.3 DISTRIBUTION OF EXTERNAL MODULES - -When the Licensee has developed an External Module, the terms and -conditions of this Agreement do not apply to said External Module, that -may be distributed under a separate license agreement. - - - 5.3.4 COMPATIBILITY WITH THE GNU GPL - -The Licensee can include a code that is subject to the provisions of one -of the versions of the GNU GPL in the Modified or unmodified Software, -and distribute that entire code under the terms of the same version of -the GNU GPL. - -The Licensee can include the Modified or unmodified Software in a code -that is subject to the provisions of one of the versions of the GNU GPL, -and distribute that entire code under the terms of the same version of -the GNU GPL. - - - Article 6 - INTELLECTUAL PROPERTY - - - 6.1 OVER THE INITIAL SOFTWARE - -The Holder owns the economic rights over the Initial Software. Any or -all use of the Initial Software is subject to compliance with the terms -and conditions under which the Holder has elected to distribute its work -and no one shall be entitled to modify the terms and conditions for the -distribution of said Initial Software. - -The Holder undertakes that the Initial Software will remain ruled at -least by the current license, for the duration set forth in Article 4.2. - - - 6.2 OVER THE CONTRIBUTIONS - -A Licensee who develops a Contribution is the owner of the intellectual -property rights over this Contribution as defined by applicable law. - - - 6.3 OVER THE EXTERNAL MODULES - -A Licensee who develops an External Module is the owner of the -intellectual property rights over this External Module as defined by -applicable law and is free to choose the type of agreement that shall -govern its distribution. - - - 6.4 JOINT PROVISIONS - -The Licensee expressly undertakes: - - 1. not to remove, or modify, in any manner, the intellectual property - notices attached to the Software; - - 2. to reproduce said notices, in an identical manner, in the copies - of the Software modified or not. - -The Licensee undertakes not to directly or indirectly infringe the -intellectual property rights of the Holder and/or Contributors on the -Software and to take, where applicable, vis-à-vis its staff, any and all -measures required to ensure respect of said intellectual property rights -of the Holder and/or Contributors. - - - Article 7 - RELATED SERVICES - -7.1 Under no circumstances shall the Agreement oblige the Licensor to -provide technical assistance or maintenance services for the Software. - -However, the Licensor is entitled to offer this type of services. The -terms and conditions of such technical assistance, and/or such -maintenance, shall be set forth in a separate instrument. Only the -Licensor offering said maintenance and/or technical assistance services -shall incur liability therefor. - -7.2 Similarly, any Licensor is entitled to offer to its licensees, under -its sole responsibility, a warranty, that shall only be binding upon -itself, for the redistribution of the Software and/or the Modified -Software, under terms and conditions that it is free to decide. Said -warranty, and the financial terms and conditions of its application, -shall be subject of a separate instrument executed between the Licensor -and the Licensee. - - - Article 8 - LIABILITY - -8.1 Subject to the provisions of Article 8.2, the Licensee shall be -entitled to claim compensation for any direct loss it may have suffered -from the Software as a result of a fault on the part of the relevant -Licensor, subject to providing evidence thereof. - -8.2 The Licensor's liability is limited to the commitments made under -this Agreement and shall not be incurred as a result of in particular: -(i) loss due the Licensee's total or partial failure to fulfill its -obligations, (ii) direct or consequential loss that is suffered by the -Licensee due to the use or performance of the Software, and (iii) more -generally, any consequential loss. In particular the Parties expressly -agree that any or all pecuniary or business loss (i.e. loss of data, -loss of profits, operating loss, loss of customers or orders, -opportunity cost, any disturbance to business activities) or any or all -legal proceedings instituted against the Licensee by a third party, -shall constitute consequential loss and shall not provide entitlement to -any or all compensation from the Licensor. - - - Article 9 - WARRANTY - -9.1 The Licensee acknowledges that the scientific and technical -state-of-the-art when the Software was distributed did not enable all -possible uses to be tested and verified, nor for the presence of -possible defects to be detected. In this respect, the Licensee's -attention has been drawn to the risks associated with loading, using, -modifying and/or developing and reproducing the Software which are -reserved for experienced users. - -The Licensee shall be responsible for verifying, by any or all means, -the suitability of the product for its requirements, its good working order, -and for ensuring that it shall not cause damage to either persons or -properties. - -9.2 The Licensor hereby represents, in good faith, that it is entitled -to grant all the rights over the Software (including in particular the -rights set forth in Article 5). - -9.3 The Licensee acknowledges that the Software is supplied "as is" by -the Licensor without any other express or tacit warranty, other than -that provided for in Article 9.2 and, in particular, without any warranty -as to its commercial value, its secured, safe, innovative or relevant -nature. - -Specifically, the Licensor does not warrant that the Software is free -from any error, that it will operate without interruption, that it will -be compatible with the Licensee's own equipment and software -configuration, nor that it will meet the Licensee's requirements. - -9.4 The Licensor does not either expressly or tacitly warrant that the -Software does not infringe any third party intellectual property right -relating to a patent, software or any other property right. Therefore, -the Licensor disclaims any and all liability towards the Licensee -arising out of any or all proceedings for infringement that may be -instituted in respect of the use, modification and redistribution of the -Software. Nevertheless, should such proceedings be instituted against -the Licensee, the Licensor shall provide it with technical and legal -assistance for its defense. Such technical and legal assistance shall be -decided on a case-by-case basis between the relevant Licensor and the -Licensee pursuant to a memorandum of understanding. The Licensor -disclaims any and all liability as regards the Licensee's use of the -name of the Software. No warranty is given as regards the existence of -prior rights over the name of the Software or as regards the existence -of a trademark. - - - Article 10 - TERMINATION - -10.1 In the event of a breach by the Licensee of its obligations -hereunder, the Licensor may automatically terminate this Agreement -thirty (30) days after notice has been sent to the Licensee and has -remained ineffective. - -10.2 A Licensee whose Agreement is terminated shall no longer be -authorized to use, modify or distribute the Software. However, any -licenses that it may have granted prior to termination of the Agreement -shall remain valid subject to their having been granted in compliance -with the terms and conditions hereof. - - - Article 11 - MISCELLANEOUS - - - 11.1 EXCUSABLE EVENTS - -Neither Party shall be liable for any or all delay, or failure to -perform the Agreement, that may be attributable to an event of force -majeure, an act of God or an outside cause, such as defective -functioning or interruptions of the electricity or telecommunications -networks, network paralysis following a virus attack, intervention by -government authorities, natural disasters, water damage, earthquakes, -fire, explosions, strikes and labor unrest, war, etc. - -11.2 Any failure by either Party, on one or more occasions, to invoke -one or more of the provisions hereof, shall under no circumstances be -interpreted as being a waiver by the interested Party of its right to -invoke said provision(s) subsequently. - -11.3 The Agreement cancels and replaces any or all previous agreements, -whether written or oral, between the Parties and having the same -purpose, and constitutes the entirety of the agreement between said -Parties concerning said purpose. No supplement or modification to the -terms and conditions hereof shall be effective as between the Parties -unless it is made in writing and signed by their duly authorized -representatives. - -11.4 In the event that one or more of the provisions hereof were to -conflict with a current or future applicable act or legislative text, -said act or legislative text shall prevail, and the Parties shall make -the necessary amendments so as to comply with said act or legislative -text. All other provisions shall remain effective. Similarly, invalidity -of a provision of the Agreement, for any reason whatsoever, shall not -cause the Agreement as a whole to be invalid. - - - 11.5 LANGUAGE - -The Agreement is drafted in both French and English and both versions -are deemed authentic. - - - Article 12 - NEW VERSIONS OF THE AGREEMENT - -12.1 Any person is authorized to duplicate and distribute copies of this -Agreement. - -12.2 So as to ensure coherence, the wording of this Agreement is -protected and may only be modified by the authors of the License, who -reserve the right to periodically publish updates or new versions of the -Agreement, each with a separate number. These subsequent versions may -address new issues encountered by Free Software. - -12.3 Any Software distributed under a given version of the Agreement may -only be subsequently distributed under the same version of the Agreement -or a subsequent version, subject to the provisions of Article 5.3.4. - - - Article 13 - GOVERNING LAW AND JURISDICTION - -13.1 The Agreement is governed by French law. The Parties agree to -endeavor to seek an amicable solution to any disagreements or disputes -that may arise during the performance of the Agreement. - -13.2 Failing an amicable solution within two (2) months as from their -occurrence, and unless emergency proceedings are necessary, the -disagreements or disputes shall be referred to the Paris Courts having -jurisdiction, by the more diligent Party. - - -Version 2.0 dated 2006-07-12. diff --git a/deps/CImg/README.txt b/deps/CImg/README.txt deleted file mode 100644 index e2cd347..0000000 --- a/deps/CImg/README.txt +++ /dev/null @@ -1,173 +0,0 @@ --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- - ____ _ _ ____ - (_ _)( )_( )( ___) - )( ) _ ( )__) - (__) (_) (_)(____) - ___ ____ __ __ ___ __ ____ ____ ____ __ ____ _ _ - / __)(_ _)( \/ )/ __) ( ) (_ _)( _ \( _ \ /__\ ( _ \( \/ ) - ( (__ _)(_ ) (( (_-. )(__ _)(_ ) _ < ) / /(__)\ ) / \ / - \___)(____)(_/\/\_)\___/ (____)(____)(____/(_)\_)(__)(__)(_)\_) (__) - - - C++ Template Image Processing Toolkit - - ( http://cimg.sourceforge.net ) - - _cimg_version - --------------------------------------------------------------------------------- - -# Summary -#--------- - - The CImg Library is an open-source C++ toolkit for image processing. - It consists in a single header file 'CImg.h' providing a minimal set of C++ - classes and methods that can be used in your own sources, to load/save, - process and display images. Very portable (Unix/X11,Windows, MacOS X, FreeBSD, .. ), - efficient, easy to use, it's a pleasant library for developping image processing - algorithms in C++. - -# Authors and contributors : -#---------------------------- - - - David Tschumperle (project leader) ( http://tschumperle.users.greyc.fr/ ) - - - Maksim Aizenshtein - - Antonio Albiol - - Haz-Edine Assemlal - - Vincent Barra - - Wolf Blecher - - Romain Blei - - Yohan Bentolila - - Jerome Boulanger - - Pierre Buyssens - - Sebastien Coudert - - Frederic Devernay - - Francois-Xavier Dupe - - Gerd von Egidy - - Eric Fausett - - Jean-Marie Favreau - - Sebastien Fourey - - Alexandre Fournier - - Hon-Kwok Fung - - Vincent Garcia - - David Grimbichler - - Jinwei Gu - - Jean-Daniel Guyot - - Matt Hanson - - Sebastien Hanel - - Michael Holroyd - - Christoph Hormann - - Werner Jainek - - Daniel Kondermann - - Pierre Kornprobst - - Orges Leka - - Francois Lauze - - Xie Long - - Thomas Martin - - Cesar Martinez - - Jean Martinot - - Arnold Meijster (Center for High Performance Computing and Visualization, University of Groningen/The Netherlands) - - Nikita Melnichenko - - Julien Morat - - Baptiste Mougel - - Jovana Milutinovich - - Guillaume Nee - - Adam Newgas - - Francisco Oliveira - - Andrea Onofri - - Renaud Peteri - - Martin Petricek - - Paolo Prete - - Adrien Reboisson - - Klaus Schneider - - Jakob Schluttig - - Veronique Souchaud - - Konstantin Spirin - - David G. Starkweather - - Rainer Steffens - - Grzegorz Szwoch - - Thierry Thomas - - Yu-En-Yun - - Vo Duc Khanh - - Phillip Wood - - Bug Zhao - - Haibo Zheng - -# Institution -#------------- - - GREYC Image / CNRS UMR 6072 / FRANCE - - The CImg Library project started in 2000, at the INRIA-Sophia - Antipolis/France ( http://www-sop.inria.fr/ ), in the ROBOTVIS / ODYSSEE Team. - Since October 2004, it is maintained and developed in the Image team of - the GREYC Lab (CNRS, UMR 6072), in Caen/France. - Team web page : http://www.greyc.ensicaen.fr/EquipeImage/ - -# Licenses -#---------- - - The source code of the CImg Library is distributed under - two distinct licenses : - - - The main library file 'CImg.h' is *dual-licensed* : - It can be either distributed under the CeCILL-C or CeCILL license. - (see files 'Licence_CeCILL-C_V1-en.txt' and 'Licence_CeCILL_V2-en.txt'). - Both are Free-Software licenses : - - * CeCILL-C is adapted to the distribution of - library components, and is close in its terms to the well known GNU LGPL license - (the 'CImg.h' file can thus be used in closed-source products under certain - conditions, please read carefully the license file). - - * CeCILL is close to (and even compatible with) the GNU GPL license. - - - Most of the other files are distributed under the CeCiLL license - (file 'Licence_CeCILL_V2-en.txt'). See each file header to see what license applies. - - These two CeCiLL licenses ( http://www.cecill.info/index.en.html ) have been - created under the supervision of the three biggest research institutions on - computer sciences in France : - - - CNRS ( http://www.cnrs.fr/ ) - - CEA ( http://www.cea.fr/ ) - - INRIA ( http://www.inria.fr/ ) - - You have to RESPECT these licenses. More particularly, please carefully read - the license terms before using the CImg library in commercial products. - -# Package structure : -#-------------------- - - The main package directory CImg/ is organized as follows : - - - README.txt : This file. - - Licence_CeCILL-C_V1-en.txt : A copy of the CeCiLL-C license file. - - Licence_CeCILL_V2-en.txt : A copy of the CeCiLL license. - - CImg.h : The single header file that constitutes the library itself. - - examples/ : A directory containing a lot of example programs performing - various things, using the CImg library. - - html/ : A directory containing a copy of the CImg web page in html - format. The reference documentation is generated - automatically with the tool 'doxygen' (http://www.doxygen.org). - - resources/ : A directory containing some resources files for compiling - CImg examples or packages with various C++ compilers and OS. - - plugins/ : A directory containing CImg plug-ins files that can be used to - add specific extra functionalities to the CImg library. - -# Getting started -#----------------- - - If you are new to CImg, you should first try to compile the different examples - provided in the 'examples/' directory, to see what CImg is capable of - (as CImg is a template-based library, no prior compilation of the library is mandatory). - Look at the 'resources/' directory to ease this compilation on different plateforms. - - Then, you can look at the documentation 'html/reference/' to learn more about CImg - functions and classes. Finally, you can participate to the 'Forum' section - of the CImg web page and ask for help if needed. - -# End of file -#------------ diff --git a/deps/CImg/examples/CImg_demo b/deps/CImg/examples/CImg_demo deleted file mode 100755 index 6aba8ce..0000000 Binary files a/deps/CImg/examples/CImg_demo and /dev/null differ diff --git a/deps/CImg/examples/CImg_demo.cpp b/deps/CImg/examples/CImg_demo.cpp deleted file mode 100644 index 81f258a..0000000 --- a/deps/CImg/examples/CImg_demo.cpp +++ /dev/null @@ -1,1609 +0,0 @@ -/* - # - # File : CImg_demo.cpp - # ( C++ source file ) - # - # Description : A multi-part demo demonstrating some of the CImg capabilities. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Include static image data, so that the exe does not depend on external image files. -#include "img/CImg_demo.h" - -// Include CImg library header. -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Item : Blurring Gradient -//---------------------------- -void* item_blurring_gradient() { - const CImg src(data_milla,211,242,1,3); - CImgList grad = src.get_gradient(); - CImgList visu = (src,sqrt(grad[0].pow(2) + grad[1].pow(2)).normalize(0,255),src); - CImgDisplay disp(visu,"[#1] - Color Image, Gradient Norm and Blurring Gradient",0); - - for (double sigma = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); sigma+=0.05) { - visu[2] = visu[1].get_blur((float)cimg::abs(30*std::cos(sigma))).normalize(0,255); - disp.resize(false).display(visu).wait(20); - } - return 0; -} - -// Item : Rotozoom -//----------------- -void* item_rotozoom() { - CImg src = CImg(data_milla,211,242,1,3,false).resize(400,300,1,3,3), img(src); - CImgDisplay disp(img.width(),img.height(),"[#2] - Rotozoom",0); - float alpha = 0, t = 0, angle = 0, zoom0 = -0.9f; - const unsigned char color[] = { 16,32,64 }; - - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - cimg_forYC(src,y,k) { - const int xc = 4*src.width() + (int)(60*std::sin((float)y*3/src.height() + 10*t)); - cimg_forX(src,x) { - const float val = (float)(src((xc+x)%src.width(),y,0,k)* - (1.3f + 0.20*std::sin(alpha + k*k*((float)src.width()/2 - x)* - ((float)src.height()/2 - y)*std::cos(t)/300.0))); - img(x,y,0,k) = (unsigned char)(val>255.0f?255:val); - } - } - const float zoom = (float)(zoom0 + 0.3f*(1 + std::cos(3*t))); - img.get_rotate(angle,0.5f*img.width(),0.5f*img.height(),1 + zoom,0,2). - draw_text(3,3,"Mouse buttons\nto zoom in/out",color,0,0.8f,24).display(disp.resize(false).wait(20)); - alpha+=0.7f; t+=0.01f; angle+=0.8f; - zoom0+=disp.button()&1?0.1f:disp.button()&2?-0.1f:0; - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(400,400,false).toggle_fullscreen(false); - } - return 0; -} - -// Item : Anisotropic Smoothing (Total variation PDE, explicit scheme) -//-------------------------------------------------------------------- -void* item_anisotropic_smoothing() { - const CImg src = CImg<>(data_milla,211,242,1,3).noise(-30,1); - CImgList images(src,src); - CImgDisplay disp(images,"[#3] - Anisotropic smoothing"); - const float white[] = { 255, 255, 255 }, black[] = { 0, 0, 0 }; - - for (unsigned int iter = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ++iter) { - - // Compute PDE velocity field. - CImg_3x3(I,float); - CImg veloc(src); - float *ptrd = veloc.data(), betamax = 0; - cimg_forC(src,k) cimg_for3x3(images[1],x,y,0,k,I,float) { - const float - ix = (Inc - Ipc)/2, - iy = (Icn - Icp)/2, - ng = (float)std::sqrt(1e-10f + ix*ix + iy*iy), - ixx = Inc + Ipc - 2*Icc, - iyy = Icn + Icp - 2*Icc, - ixy = 0.25f*(Inn + Ipp - Ipn - Inp), - iee = (ix*ix*iyy + iy*iy*ixx - 2*ix*iy*ixy)/(ng*ng), - beta = iee/(0.1f + ng); - if (beta>betamax) betamax = beta; else if (-beta>betamax) betamax = -beta; - *(ptrd++) = beta; - } - veloc*=40.0f/betamax; - images[1]+=veloc; - images[0].draw_text(4,4,"Iteration : %u ",white,black,1,13,iter); - disp.resize(false).display(images); - } - return 0; -} - -// Item : Fractal Animation -//-------------------------- -void* item_fractal_animation() { - CImg img(400,400,1,3,0), noise(3,2,1,3); - CImgDisplay disp(img,"[#4] - Fractal Animation"); - float zoom = 0; - - for (unsigned int iter = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ++iter, zoom+=0.2f) { - img.draw_image((img.width() - noise.width())/2, - (img.height() - noise.height())/2, - noise.fill(0).noise(255,1)). - rotate((float)(10*std::sin(iter/25.0)),0.5f*img.width(),0.5f*img.height(),(float)(1.04f + 0.02f*std::sin(zoom/10)),0,0). - resize(disp.resize(false)).display(disp.wait(25)); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(400,400,false).toggle_fullscreen(false); - } - return 0; -} - -// Item : Gamma Correction and Histogram Visualization -//----------------------------------------------------- -void* item_gamma_correction() { - CImg img = CImg<>(data_milla,211,242,1,3).normalize(0,1); - CImgList visu(img*255.0,CImg(512,300,1,3,0)); - CImgDisplay disp(visu,"[#5] - Gamma Corrected Image and Histogram (Click to set Gamma)"); - const unsigned char - yellow[] = { 255, 255, 0 }, blue[] = { 0, 155, 255 }, blue2[] = { 0, 0, 255 }, - blue3[] = { 0, 0, 155 }, white[] = { 255, 255, 255 }, green[] = { 50, 128, 50 }; - - for (double gamma = 1; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ) { - cimg_forXYZC(visu[0],x,y,z,k) visu[0](x,y,z,k) = (unsigned char)(std::pow((double)img(x,y,z,k),1.0/gamma)*256); - const CImg hist = visu[0].get_histogram(50,0,255); - visu[1].fill(0).draw_text(50,5,"Gamma = %.3g",white,0,1,24,gamma). - draw_graph(hist,green,1,3,0,20000,0).draw_graph(hist,yellow,1,2,0,20000,0). - draw_axes(0,256,20000,0,white,0.7f); - const int xb = (int)(50 + gamma*150); - visu[1].draw_grid(20,20,0,0,false,false,white,0.3f,0xCCCCCCCC,0xCCCCCCCC). - draw_rectangle(51,31,xb-1,39,blue2).draw_rectangle(50,30,xb,30,blue).draw_rectangle(xb,30,xb,40,blue). - draw_rectangle(xb,40,50,39,blue3).draw_rectangle(50,30,51,40,blue3); - if (disp.button() && disp.mouse_x()>=img.width() + 50 && disp.mouse_x()<=img.width() + 450) - gamma = (disp.mouse_x() - img.width() - 50)/150.0; - disp.resize(disp,false).display(visu).wait(); - } - return 0; -} - -// Item : Filled Triangles -//------------------------- -void* item_filled_triangles() { - - // Create a colored 640x480 background image which consists of different color shades. - CImg background(640,480,1,3); - cimg_forXY(background,x,y) background.fillC(x,y,0, - x*std::cos(6.0*y/background.height()) + y*std::sin(9.0*x/background.width()), - x*std::sin(8.0*y/background.height()) - y*std::cos(11.0*x/background.width()), - x*std::cos(13.0*y/background.height()) - y*std::sin(8.0*x/background.width())); - background.normalize(0,180); - - // Init images and create display window. - CImg img0(background), img; - unsigned char white[] = { 255, 255, 255 }, color[100][3]; - CImgDisplay disp(img0,"[#6] - Filled Triangles (Click to shrink)"); - - // Define random properties (pos, size, colors, ..) for all triangles that will be displayed. - float posx[100], posy[100], rayon[100], angle[100], veloc[100], opacity[100]; - int num = 1; - std::srand((unsigned int)time(0)); - for (int k = 0; k<100; ++k) { - posx[k] = (float)(cimg::rand()*img0.width()); - posy[k] = (float)(cimg::rand()*img0.height()); - rayon[k] = (float)(10 + cimg::rand()*50); - angle[k] = (float)(cimg::rand()*360); - veloc[k] = (float)(cimg::rand()*20 - 10); - color[k][0] = (unsigned char)(cimg::rand()*255); - color[k][1] = (unsigned char)(cimg::rand()*255); - color[k][2] = (unsigned char)(cimg::rand()*255); - opacity[k] = (float)(0.3 + 1.5*cimg::rand()); - } - - // Start animation loop. - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - img = img0; - - // Draw each triangle on the background image. - for (int k = 0; k0 && disp.mouse_y()>0) { - float u = disp.mouse_x() - posx[k], v = disp.mouse_y() - posy[k]; - if (disp.button()) { u = -u; v = -v; } - posx[k]-=0.03f*u, posy[k]-=0.03f*v; - if (posx[k]<0 || posx[k]>=img.width()) posx[k] = (float)(cimg::rand()*img.width()); - if (posy[k]<0 || posy[k]>=img.height()) posy[k] = (float)(cimg::rand()*img.height()); - } - } - - // Display current animation framerate, and refresh display window. - img.draw_text(5,5,"%u frames/s",white,0,0.5f,13,(unsigned int)disp.frames_per_second()); - img0.resize(disp.display(img).resize(false).wait(20)); - if (++num>100) num = 100; - - // Allow the user to toggle fullscreen mode, by pressing CTRL+F. - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(640,480,false).toggle_fullscreen(false); - } - return 0; -} - -// Item : Mandelbrot/Julia Explorer -//---------------------------------- -void* item_mandelbrot_explorer() { - - // Define image canvas and corresponding display window. - CImg img(800,600,1,3,0); - CImgDisplay disp(img); - - // Start main explorer loop. - double julia_r = 0, julia_i = 0; - for (bool endflag = false, fractal_type = false, smooth = false, show_help = true; !endflag;) { - bool stopflag = false; - double xmin, xmax, ymin, ymax; - - // Init default upper-left/lower-right coordinates of the fractal set. - if (fractal_type) { xmin = -1.5; xmax = 1.5; ymin = -1.5; ymax = 1.5; julia_r = 0.317; julia_i = 0.029; } - else { xmin = -2.25; xmax = 1.0; ymin = -1.5; ymax = 1.5; julia_r = julia_i = 0; } - - // Create random palette for displaying the fractal set. - const CImg palette = - CImg(256,1,1,3,16+120).noise(119,1).resize(1024,1,1,3,3).fillC(0,0,0,0,0,0); - - // Enter event loop for the current fractal set. - for (unsigned int maxiter = 64; !stopflag; ) { - - // Draw Mandelbrot or Julia fractal set on the image. - img.resize(disp.resize().set_title("[#7] - %s Set : (%g,%g)-(%g,%g), %s = (%g,%g) (%u iter.)", - fractal_type?"Julia":"Mandelbrot",xmin,ymin,xmax,ymax, - fractal_type?"c":"z0",julia_r,julia_i,maxiter)). - fill(0).draw_mandelbrot(palette,1,xmin,ymin,xmax,ymax,maxiter,smooth,fractal_type,julia_r,julia_i); - - // Display help if necessary. - if (show_help) { - const unsigned char white[] = { 255, 255, 255 }; - static CImg - help = CImg().draw_text(0,0,"\n" - " Use mouse to zoom on desired region. \n" - " H Show/Hide help \n" - " PAD 1...9 Fractal navigation \n" - " PAD +/- Zoom/Unzoom \n" - " SPACE Set/Disable color smoothing \n" - " ENTER Switch Mandelbrot/Julia sets \n" - " Arrows Change set parameterization \n" - " Page UP/DOWN Add/Reduce iteration numbers \n\n", - white).resize(-100,-100,1,3); - help.draw_rectangle(2,2,help.width() - 3,help.height() - 3,white,1,~0U); - img.draw_image(img.width() - help.width(),help,0.7f); - } - - // Get rectangular shape from the user to define the zoomed region. - const CImg selection = img.get_select(disp,2,0); - const int xs0 = selection[0], ys0 = selection[1], xs1 = selection[3], ys1 = selection[4]; - - // If the user has selected a region with the mouse, then zoom-in ! - if (xs0>=0 && ys0>=0 && xs1>=0 && ys1>=0) { - const double dx =(xmax - xmin)/img.width(), dy =(ymax - ymin)/img.height(); - const int dsmax = (ys1 - ys0)/2, xs = (xs0 + xs1)/2, ys = (ys0 + ys1)/2; - - // If the region is too small (point) then reset the fractal set position and zoom. - if (dsmax<5) stopflag = true; - xmin+=(xs - dsmax*dy/dx)*dx; - ymin+=(ys - dsmax)*dy; - xmax-=(img.width() - xs - dsmax*dy/dx)*dx; - ymax-=(img.height() - ys - dsmax)*dy; - } - - // Also, test if a key has been pressed. - // (moving in the fractal set can be done, using keyboard). - switch (disp.key()) { - - // Show/hide help. - case cimg::keyH: show_help = !show_help; break; - - // Switch between Julia/Mandelbrot sets. - case cimg::keyENTER: fractal_type = !fractal_type; stopflag = true; break; - - // Enable/disable smoothed colors. - case cimg::keySPACE: smooth = !smooth; break; - - // Change fractal set parameters. - case cimg::keyARROWLEFT: julia_r-=fractal_type?0.001f:0.05f; break; - case cimg::keyARROWRIGHT: julia_r+=fractal_type?0.001f:0.05f; break; - case cimg::keyARROWUP: julia_i+=fractal_type?0.001f:0.05f; break; - case cimg::keyARROWDOWN: julia_i-=fractal_type?0.001f:0.05f; break; - - // Add/remove iterations. - case cimg::keyPAGEDOWN: maxiter-=32; break; - case cimg::keyPAGEUP: maxiter+=16; break; - - // Move left, right, up and down in the fractal set. - case cimg::keyPAD4: { const double delta = (xmax - xmin)/10; xmin-=delta; xmax-=delta; } break; - case cimg::keyPAD6: { const double delta = (xmax - xmin)/10; xmin+=delta; xmax+=delta; } break; - case cimg::keyPAD8: { const double delta = (ymax - ymin)/10; ymin-=delta; ymax-=delta; } break; - case cimg::keyPAD2: { const double delta = (ymax - ymin)/10; ymin+=delta; ymax+=delta; } break; - - // Allow to zoom in/out in the fractal set. - case cimg::keyPADADD: { - const double xc = 0.5*(xmin + xmax), yc = 0.5*(ymin + ymax), dx = (xmax - xmin)*0.85/2, dy = (ymax - ymin)*0.85/2; - xmin = xc - dx; ymin = yc - dy; xmax = xc + dx; ymax = yc + dy; - } break; - case cimg::keyPADSUB: - const double xc = 0.5*(xmin + xmax), yc = 0.5*(ymin + ymax), dx = (xmax - xmin)*1.15/2, dy = (ymax - ymin)*1.15/2; - xmin = xc - dx; ymin = yc - dy; xmax = xc + dx; ymax = yc + dy; - break; - } - - // Do a simple test to check if more/less iterations are necessary for the next step. - const float value = (float)img.get_norm().get_histogram(256,0,255)(0)*3; - if (value>img.size()/6.0f) maxiter+=16; - if (maxiter>1024) maxiter = 1024; - if (value img(256,256+64,1,3,0); - unsigned char color[] = { 255, 255, 255 }; - cimg_for_inY(img,256,img.height()-1,yy) cimg_forX(img,xx) img.fillC(xx,yy,0,xx,(yy - 256)*4,(3*xx)%256); - CImgDisplay disp(img.draw_text(5,5," ",color,color),"[#8] - Mini-Paint"); - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - const unsigned int but = disp.button(); - redraw = false; - xo = x; yo = y; x = disp.mouse_x(); y = disp.mouse_y(); - if (xo>=0 && yo>=0 && x>=0 && y>=0) { - if (but&1 || but&4) { - if (y<253) { - const float tmax = (float)cimg::max(cimg::abs(xo - x),cimg::abs(yo - y)) + 0.1f; - const int radius = (but&1?3:0) + (but&4?6:0); - for (float t = 0; t<=tmax; ++t) img.draw_circle((int)(x + t*(xo - x)/tmax),(int)(y + t*(yo - y)/tmax),radius,color); - } - if (y>=256) { - color[0] = img(x,y,0); color[1] = img(x,y,1); color[2] = img(x,y,2); - img.draw_text(5,5," ",color,color); - } - redraw = true; - } - if (y>=253) y = 252; - if (disp.button()&2) { img.draw_fill(x,y,color); redraw = true; } - } - if (redraw) disp.display(img); - disp.resize(disp).wait(); - if (disp.key()) cimg_forC(img,k) { img.get_shared_rows(0,255,0,k).fill(0); img.display(disp); } - } - return 0; -} - -// Item : Soccer Bobs -//------------------- -void* item_soccer_bobs() { - CImg foot(data_foot,200,200,1,3,false), canvas0(640,480,1,3,0); - const unsigned char color[] = { 255, 255, 0 }; - float zoom = 0.2f; - cimg_forXY(canvas0,x,y) canvas0(x,y,1) = (unsigned char)(20 + (y*215/canvas0.height()) + 19*cimg::crand()); - canvas0.draw_text(5,5,"Left/Right Mouse Button = Zoom In/Out\nMiddle Button = Reset Screen",color); - CImgList canvas(16,canvas0); - CImg mask(foot.width(),foot.height()); - cimg_forXY(mask,x,y) mask(x,y) = (foot(x,y,0)==255 && !foot(x,y,1) && !foot(x,y,2))?0:0.8f; - CImgDisplay disp(canvas0,"[#9] - Unlimited Soccer Bobs"); - for (unsigned int curr_canvas = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); (++curr_canvas) %= 16) { - if (disp.mouse_x()>=0 && disp.mouse_y()>=0) - canvas[curr_canvas].draw_image((int)(disp.mouse_x() - zoom*foot.width()/2), - (int)(disp.mouse_y() - zoom*foot.height()/2), - foot.get_resize((int)(foot.width()*zoom),(int)(foot.height()*zoom)), - mask.get_resize((int)(foot.width()*zoom),(int)(foot.height()*zoom))); - zoom+=disp.button()&1?0.03f:disp.button()&2?-0.03f:0; - zoom = zoom<0.1f?0.1f:zoom>1?1.0f:zoom; - if (disp.button()&4) cimglist_for(canvas,l) canvas[l] = canvas0; - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.toggle_fullscreen(false); - disp.display(canvas[curr_canvas]).resize(disp,false).wait(20); - } - return 0; -} - -// Item : Bump Effect -//-------------------- -void* item_bump() { - CImg logo = CImg<>(56,32,1,1,0).draw_text(12,3,"I Love\nCImg !",CImg<>::vector(255).data()). - resize(-800,-800,1,1,3).blur(6).normalize(0,255); - logo+=CImg<>(logo.width(),logo.height(),1,1,0).noise(80,1).deriche(2,0,'y',false).deriche(10,0,'x',false); - CImgList grad = logo.get_gradient(); - cimglist_apply(grad,normalize)(-140,140); - logo.normalize(0,255); - CImg light = CImg<>(300 + 2*logo.width(),300 + 2*logo.height()); - light.draw_gaussian(0.5f*light.width(),0.5f*light.height(),80,CImg<>::vector(255).data()); - CImg img(logo.width(),logo.height(),1,3,0); - CImgDisplay disp(img,"[#10] - Bump Effect (Move lightsource with mouse)"); - for (float t = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); t+=0.03f) { - const int - mouse_x = (disp.mouse_x()>=0 && disp.button())?disp.mouse_x()*img.width()/disp.width():(int)(img.width()/2 + img.width()*std::cos(1*t)/2), - mouse_y = (disp.mouse_y()>=0 && disp.button())?disp.mouse_y()*img.height()/disp.height():(int)(img.height()/2 + img.height()*std::sin(3*t)/2); - cimg_forXY(img,x,y) { - const int gx = (int)grad[0](x,y), gy = (int)grad[1](x,y); - const float val = 40 + (gx + gy)/2 + light(light.width()/2 + mouse_x - x + gx,light.height()/2 + mouse_y - y + gy); - img(x,y,0) = img(x,y,1) = img(x,y,2) = (unsigned char)(val>255?255:val<0?0:val); - } - disp.resize(false).display(img.draw_image(0,0,0,1,logo,0.1f)).wait(25); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(640,480,false).toggle_fullscreen(false); - } - return 0; -} - -// Item : Bouncing Bubble -//------------------------ -void* item_bouncing_bubble() { - CImg back(420,256,1,3,0), img; - cimg_forXY(back,x,y) back(x,y,2) = (unsigned char)((y<2*back.height()/3)?30:(255-2*(y+back.height()/2))); - CImgDisplay disp(back,"[#11] - Bouncing bubble"); - const unsigned char col1[] = { 40, 100, 10 }, col2[] = { 20, 70, 0 }, col3[] = { 40, 150, 10 }, - col4[] = { 200, 255, 100 }, white[] = { 255, 255, 255 }; - float u = (float)std::sqrt(2.0f), cx = back.width()/2.0f, t = 0, vt = 0.05f, vx = 2; - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - img = back; - int xm = (int)cx, ym = (int)(img.height()/2 - 70 + (img.height()/2 + 10)*(1 - cimg::abs(std::cos((t+=vt))))); - float r1 = 50, r2 = 50; - vt = 0.05f; - if (xm + r1>=img.width()) { const float delta = (xm + r1) - img.width(); r1-=delta; r2+=delta; } - if (xm - r1<0) { const float delta = -(xm - r1); r1-=delta; r2+=delta; } - if (ym + r2>=img.height()-40) { const float delta = (ym + r2) - img.height() + 40; r2-=delta; r1+=delta; vt = 0.05f - 0.0015f*(50 - r2); } - if (ym - r2<0) { const float delta = -(ym - r2); r2-=delta; r1+=delta; } - img.draw_ellipse(xm,ym,r1,r2,0,col1). - draw_ellipse((int)(xm + 0.03*r1*u),(int)(ym - 0.03*r2*u),0.85f*r1,0.85f*r2,0,col2). - draw_ellipse((int)(xm + 0.1*r1*u),(int)(ym - 0.1*r2*u),0.8f*r1,0.8f*r2,0,col1). - draw_ellipse((int)(xm + 0.2*r1*u),(int)(ym - 0.2*r2*u),r1/2,r2/2,0,col3). - draw_ellipse((int)(xm + 0.3*r1*u),(int)(ym - 0.3*r2*u),r1/4,r2/4,0,col4). - draw_image(0,img.height() - 40,img.get_crop(0,img.height() - 80,img.width() - 1,img.height() - 40).mirror('y'),0.45f). - draw_text(xm - 70,(int)(ym - r2 - 30),"Bubble (%d,%d)",white,0,0.7f,24,xm,ym); - if ((cx+=20*vt*vx)>=img.width()-30 || cx<30) vx = -vx; - disp.display(img).wait(20); - if (disp.is_resized()) { - back.resize(disp.resize(disp.window_width()>200?disp.window_width():200,disp.height(),false)); - cx = back.width()/2.0f; - } - } - return 0; -} - -// Item : Virtual Landscape -//-------------------------- -void* item_virtual_landscape() { - CImg background(400,300,1,3,0), visu(background); - cimg_forXY(background,x,y) { - if (y>background.height()/2) { background(x,y,2) = 255; background(x,y,0) = (y - background.height()/2)*512/background.height(); } - else background(x,y,2) = y*512/background.height(); - } - const int white[] = { 255, 255, 255 }; - CImgDisplay disp(visu.draw_text(10,10,"Please wait, generating landscape...",white). - normalize(0,255),"[#12] - Virtual Landscape",0); - CImg - map = 5.0*(CImg<>(700,700,1,1,300).noise(300).draw_plasma(0.2f,300).normalize(-140,150).blur(5).cut(0,150)), - cmap(map.width(),map.height()); - CImg_3x3(I,float); Ipp = Inp = Icc = Ipn = Inn = 0; - cimg_for3x3(map,x,y,0,0,I,float) { - const float nox = 0.5f*(Inc - Ipc), noy = 0.5f*(Icn - Icp); - cmap(x,y) = cimg::max(0.0f,0.5f*nox + noy); - } - cmap.normalize(0,255); - - for (float t = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); t+=0.0025f) { - visu = background; - const int - xm = (int)(map.width()/2 + (map.width()/3)*std::cos(4.2f*t)), - ym = (int)(map.height()/2 + (map.height()/3)*std::sin(5.6f*t)); - const CImg - smap = map.get_crop(xm,ym,xm + 100,ym + 90), - scmap = cmap.get_crop(xm,ym,xm + 100,ym + 90); - CImg ymin(visu.width(),1,1,1,visu.height()), ymax(ymin.width(),1,1,1,0); - cimg_forY(smap,z) { - const int y0 = (int)(visu.height() - 1 - 10*std::pow((double)z,0.63) + 80); - cimg_forX(visu,x) { - const int nz = smap.height() - z; - float mx = x*(smap.width() - 2.0f*nz*0.2f)/visu.width() + 0.2f*nz; - const int y = (int)(y0 - smap.linear_atX(mx,z)/(1 + 0.02*z)); - const float cc = (float)scmap.linear_atX(mx,z); - if (y0.25?1:4*cz; - if (y!=y0) for (int l = y>0?y:0; l0?y:0; l plasma, camp(3), cfreq(3), namp(3), nfreq(3); - CImgList font = CImgList::font(53); - CImg visu(400,300,1,3,0), letter, scroll(visu.width() + 2*font['W'].width(),font['W'].height(),1,1,0); - const char *text = " * The CImg Library : C++ Template Image Processing Toolkit *"; - CImgDisplay disp(visu,"[#13] - Plasma Effect"); - const unsigned char white[] = { 255, 255, 255 }; - unsigned int cplasma = 0, pos = 0, tpos = 0, lwidth = 0; - float tx = 0, ts = 0, alpha = 2, beta = 0; - namp.fill(0).noise(visu.height()/4,0); - nfreq.fill(0).noise(0.1); - - visu.draw_text(10,10,"Please wait, generating plasma...",white).display(disp); - const unsigned int nb_plasmas = 5; - plasma.assign(5*visu.width()/3,visu.height()+1,1,nb_plasmas,0).noise(100).draw_plasma(); - cimg_forC(plasma,k) plasma.get_shared_channel(k).blur((float)(cimg::rand()*6)).normalize(0,255); - - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - if (alpha>1) { - alpha-=1; - cplasma = (cplasma + 1)%plasma.spectrum(); - camp = namp; - cfreq = nfreq; - namp.fill(0).noise(100).normalize(0,visu.height()/4.0f); - nfreq.fill(0).noise(0.2); - } - const unsigned int - v0 = cplasma, v1 = (cplasma + 1)%plasma.spectrum(), - v2 = (cplasma + 2)%plasma.spectrum(), v3 = (cplasma + 3)%plasma.spectrum(); - const float umalpha = 1 - alpha; - - unsigned char *ptr_r = visu.data(0,0,0,0), *ptr_g = visu.data(0,0,0,1), *ptr_b = visu.data(0,0,0,2); - cimg_forY(visu,y) { - const float - *ptr_r1 = plasma.data((unsigned int)cimg::max(0.0f,camp(0)*(1.1 + std::sin(tx+cfreq(0)*y))),y,v0), - *ptr_g1 = plasma.data((unsigned int)cimg::max(0.0f,camp(1)*(1.1 + std::sin(tx+cfreq(1)*y))),y,v1), - *ptr_b1 = plasma.data((unsigned int)cimg::max(0.0f,camp(2)*(2 + std::sin(tx+cfreq(2)*y))),y,v2), - *ptr_r2 = plasma.data((unsigned int)cimg::max(0.0f,namp(0)*(1.1 + std::sin(tx+nfreq(0)*y))),y,v1), - *ptr_g2 = plasma.data((unsigned int)cimg::max(0.0f,namp(1)*(1.1 + std::sin(tx+nfreq(1)*y))),y,v2), - *ptr_b2 = plasma.data((unsigned int)cimg::max(0.0f,namp(2)*(2 + std::sin(tx+nfreq(2)*y))),y,v3); - cimg_forX(visu,x) { - *(ptr_r++) = (unsigned char)(umalpha*(*(ptr_r1++)) + alpha*(*(ptr_r2++))); - *(ptr_g++) = (unsigned char)(umalpha*(*(ptr_g1++)) + alpha*(*(ptr_g2++))); - *(ptr_b++) = (unsigned char)(umalpha*(*(ptr_b1++)) + alpha*(*(ptr_b2++))); - } - } - if (!pos) { - const CImg& letter = font(text[tpos]+256); - lwidth = (unsigned int)letter.width(); - scroll.draw_image(visu.width(),letter); - (++tpos) %= std::strlen(text); - } - scroll.shift(-2); - if ((pos+=2)>lwidth+2) pos = 0; - cimg_forX(visu,x) { - const int y0 = (int)(visu.height()/2 + visu.height()/4*std::sin(ts + x/(70 + 30*std::cos(beta)))); - cimg_forY(scroll,y) { - if (scroll(x,y)) { - const unsigned int y1 = y0 + y + 2; visu(x,y1,0)/=2; visu(x,y1,1)/=2; visu(x,y1,2)/=2; - const unsigned int y2 = y1 - 6; visu(x,y2,0) = visu(x,y2,1) = visu(x,y2,2) = 255; - } - } - } - alpha+=0.007f; beta+=0.04f; tx+=0.09f; ts+=0.04f; - disp.resize(false).display(visu).wait(20); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(640,480,false).toggle_fullscreen(false); - } - return 0; -} - -// Item : Oriented Convolutions -//------------------------------ -void* item_oriented_convolutions() { - const CImg img = CImg(data_lena,256,256,1,1,false).noise(50,2); - CImgList visu = (img,img,img); - CImg mask(16,16); - const float value = 255; - CImgDisplay disp(visu,"[#14] - Original image, Oriented kernel and Convolved image"); - for (float angle = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); angle+=0.1f) { - const float ca = (float)std::cos(angle), sa = (float)std::sin(angle); - const CImg - u = CImg<>::vector(ca,sa), - v = CImg<>::vector(-sa,ca), - tensor = 30.0*u*u.get_transpose() + 2.0*v*v.get_transpose(); - mask.draw_gaussian(0.5f*mask.width(),0.5f*mask.height(),tensor,&value); - mask/=mask.sum(); - visu[1] = mask.get_resize(img).normalize(0,255). - draw_text(2,2,"Angle = %d deg",&value,0,1,13,cimg::mod((int)(angle*180/cimg::PI),360)); - visu[2] = img.get_convolve(mask); - disp.resize(disp.window_width(),(int)(disp.height()*disp.window_width()/disp.width()),false). - display(visu).wait(25); - } - return 0; -} - -// Item : Shade Bobs -//------------------- -void* item_shade_bobs() { - float t = 100, rx = 0, ry = 0, rz = 0, rt = 0, rcx = 0; - CImg img(512,512,1,1,0), palette; - CImgDisplay disp(img,"[#15] - Shade Bobs"); - const unsigned char one = 1; - int nbbobs = 0, rybobs = 0; - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - if ((t+=0.015f)>4*cimg::PI) { - img.fill(0); - rx = (float)(cimg::crand()); - ry = (float)(cimg::crand()); - rz = (float)(cimg::crand()); - rt = (float)(cimg::crand()); - rcx = 0.6f*(float)(cimg::crand()); - t = 0; - palette = CImg(3,4 + (int)(12*cimg::rand()),1,1,0).noise(255,2).resize(3,256,1,1,3); - palette(0) = palette(1) = palette(2) = 0; - nbbobs = 20 + (int)(cimg::rand()*80); - rybobs = (10 + (int)(cimg::rand()*50))*cimg::min(img.width(),img.height())/300; - } - for (int i = 0; i tmp(img); - cimg_for3x3(tmp,x,y,0,0,I,unsigned char) img(x,y) = (Inc + Ipc + Icn + Icp + (Icc<<2))>>3; - CImg visu(img.width(),img.height(),1,3); - cimg_forXY(visu,xx,yy) { - const unsigned char *col = palette.data(0,img(xx,yy)); - visu(xx,yy,0) = *(col++); - visu(xx,yy,1) = *(col++); - visu(xx,yy,2) = *(col++); - } - disp.display(visu).wait(25); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(640,480,false).toggle_fullscreen(false); - if (disp.is_resized()) img.resize(disp.resize(false),3); - if ((disp.key() && !disp.is_keyCTRLLEFT()) || disp.button()) { - t = 70; if (!(disp.is_keyQ() || disp.is_keyESC())) disp.set_key(); - disp.set_button(); - } - } - return 0; -} - -// Item : Fourier Filtering -//------------------------- -void* item_fourier_filtering() { - const CImg img = CImg(data_lena,256,256,1,1,false).resize(256,256); - CImgList F = img.get_FFT(); - cimglist_apply(F,shift)(img.width()/2,img.height()/2,0,0,2); - const CImg mag = ((F[0].get_pow(2) + F[1].get_pow(2)).sqrt() + 1).log().normalize(0,255); - CImgList visu(img,mag); - CImgDisplay disp(visu,"[#16] - Fourier Filtering (Click to set filter)"); - CImg mask(img.width(),img.height(),1,1,1); - const unsigned char one[] = { 1 }, zero[] = { 0 }, white[] = { 255 }; - int rmin = 0, rmax = 256; - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - disp.wait(); - const int - xm = disp.mouse_x()*2*img.width()/disp.width() - img.width(), - ym = disp.mouse_y()*img.height()/disp.height(), - x = xm - img.width()/2, - y = ym - img.height()/2; - if (disp.button() && xm>=0 && ym>=0) { - const int r = (int)cimg::max(0.0f,(float)std::sqrt((float)x*x + y*y) - 3); - if (disp.button()&1) rmax = r; - if (disp.button()&2) rmin = r; - if (rmin>=rmax) rmin = cimg::max(rmax - 1,0); - mask.fill(0).draw_circle(mag.width()/2,mag.height()/2,rmax,one). - draw_circle(mag.width()/2,mag.height()/2,rmin,zero); - CImgList nF(F); - cimglist_for(F,l) nF[l].mul(mask).shift(-img.width()/2,-img.height()/2,0,0,2); - visu[0] = nF.FFT(true)[0].normalize(0,255); - } - if (disp.is_resized()) disp.resize(disp.window_width(),disp.window_width()/2).display(visu); - visu[1] = mag.get_mul(mask).draw_text(5,5,"Freq Min/Max = %d / %d",white,zero,0.6f,13,(int)rmin,(int)rmax); - visu.display(disp); - } - return 0; -} - -// Item : Image Zoomer -//--------------------- -void* item_image_zoomer() { - const CImg img = CImg(data_logo,555,103,1,3,false); - CImgDisplay disp(img,"[#17] - Original Image"), dispz(500,500,"[#17] - Zoomed Image",0); - disp.move((CImgDisplay::screen_width() - dispz.width())/2,(CImgDisplay::screen_height() - dispz.height() - disp.height())/2); - dispz.move(disp.window_x(),disp.window_y() + disp.window_height() + 40); - int factor = 20, x = 0, y = 0; - bool grid = false, redraw = false; - while (!disp.is_closed() && !dispz.is_closed() && - !disp.is_keyQ() && !dispz.is_keyQ() && !disp.is_keyESC() && !dispz.is_keyESC()) { - if (disp.mouse_x()>=0) { x = disp.mouse_x(); y = disp.mouse_y(); redraw = true; } - if (redraw) { - const int - x0 = x - factor, y0 = y - factor, - x1 = x + factor, y1 = y + factor; - const unsigned char red[] = { 255, 0, 0 }, black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }; - (+img).draw_rectangle(x0,y0,x1,y1,red,1.0f,~0U).display(disp); - CImg visu = img.get_crop(x0,y0,x1,y1).draw_point(x - x0,y - y0,red,0.2f).resize(dispz); - if (grid) { - const int bfac = 2*factor + 1; - for (int i = 0; i100) factor = 100; disp.set_button(); redraw = true; } - if (disp.button()&4 || dispz.button()) { grid = !grid; disp.set_button(); dispz.set_button(); redraw = true; } - if (disp.is_resized()) disp.resize(disp); - if (dispz.is_resized()) { dispz.resize(); redraw = true; } - CImgDisplay::wait(disp,dispz); - } - return 0; -} - -// Item : Blobs Editor -//-------------------- -void* item_blobs_editor() { - CImg img(300,300,1,3); - CImgList colors; - CImgList blobs; - CImgDisplay disp(img,"[#18] - Blobs Editor",0); - const unsigned int white[] = { 255, 255, 255 }; - bool moving = false; - - for (float alpha = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); alpha+=0.1f) { - const int xm = disp.mouse_x()*img.width()/disp.width(), ym = disp.mouse_y()*img.height()/disp.height(); - int selected = -1; - img.fill(0); - - if (blobs) { - float dist = 0, dist_min = (float)img.width()*img.width() + img.height()*img.height(); - cimglist_for(blobs,l) { - const CImg& blob = blobs[l]; - const float - xb = blob[0], yb = blob[1], rb = blob[2], - sigma = (float)(rb*(1 + 0.05f*std::cos(blob[3]*alpha))), - sigma2 = 2*sigma*sigma, precision = 4.5f*sigma2; - const int tx0 = (int)(xb - 3*sigma), ty0 = (int)(yb - 3*sigma), tx1 = (int)(xb + 3*sigma), ty1 = (int)(yb + 3*sigma); - const unsigned int - col1 = colors[l](0), col2 = colors[l](1), col3 = colors[l](2), wh = img.width()*img.height(), - x0 = tx0<0?0:tx0, y0 = ty0<0?0:ty0, - x1 = tx1>=img.width()?img.width()-1:tx1, y1 = ty1>=img.height()?img.height()-1:ty1; - float dy = y0 - yb; - unsigned int *ptr = img.data(x0,y0); - for (unsigned int y = y0; y<=y1; ++y) { - float dx = x0 - xb; - for (unsigned int x = x0; x<=x1; ++x) { - float dist = dx*dx + dy*dy; - if (distimg.data(); ++off) { - unsigned int val1 = *(--ptr1), val2 = *(--ptr2), val3 = *(--ptr3); - const unsigned int pot = val1*val1 + val2*val2 + val3*val3; - if (pot<128*128) { *ptr1 = *ptr3 = 255*off/wh; *ptr2 = 180*off/wh; } - else { - if (pot<140*140) { *ptr1 >>= 1; *ptr2 >>= 1; *ptr3 >>= 1; } - else { - *ptr1 = val1<255?val1:255; - *ptr2 = val2<255?val2:255; - *ptr3 = val3<255?val3:255; - } - } - } - cimglist_for(blobs,ll) { - const CImg& blob = blobs[ll]; - const int - rb = (int)(blob[2]*(1 + 0.05f*std::cos(blob[3]*alpha))), - xb = (int)(blob[0] + rb/2.5f), - yb = (int)(blob[1] - rb/2.5f); - img.draw_circle(xb,yb,rb>>1,white,0.2f).draw_circle(xb,yb,rb/3,white,0.2f). - draw_circle(xb,yb,rb/5,white,0.2f); - } - } else { - CImg text; - text.draw_text(0,0, - "CImg Blobs Editor\n" - "-----------------------\n\n" - "* Left mouse button :\n Create and Move Blob.\n\n" - "* Right mouse button :\n Remove nearest Blob.\n\n" - "* Colors and size of Appearing Blobs\n" - " are randomly chosen.\n\n\n" - " >> Press mouse button to start ! <<", - white).resize(-100,-100,1,3); - img.fill(100).draw_image((img.width() - text.width())/2, - (img.height() - text.height())/2, - text,text,1,255U); - } - - if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { - if (disp.button()&1) { - float dist_selected = 0; - if (selected>=0) { - const float a = xm - blobs[selected](0), b = ym - blobs[selected](1), c = blobs[selected](2); - dist_selected = a*a + b*b - c*c; - } - if (moving || dist_selected<0) { blobs[selected](0) = (float)xm; blobs[selected](1) = (float)ym; } - else { - blobs.insert(CImg<>::vector((float)xm,(float)ym,(float)(10 + 30*cimg::rand()),(float)(3*cimg::rand()))); - colors.insert(CImg<>(3).fill(0).noise(255,1).normalize(0,255)); - } - moving = true; - } else moving = false; - if (selected>=0 && disp.button()&2) { blobs.remove(selected); colors.remove(selected); disp.set_button(); } - } - - img.display(disp.wait(25)); - if (disp.is_resized()) { - img.resize(disp.resize(false)); - cimglist_for(blobs,l) if (blobs[l](0)>=img.width() || blobs[l](1)>=img.height()) { blobs.remove(l); colors.remove(l--); } - } - } - return 0; -} - -// Item : Double Torus -//--------------------- -void* item_double_torus() { - CImg visu(300,256,1,3,0); - CImgDisplay disp(visu,"[#19] - Double 3D Torus"); - CImgList primitives; - CImg points = CImg<>::torus3d(primitives,60,20), points2 = CImg<>::rotation_matrix(1,0,0,(float)cimg::PI/2.0f)*points; - CImgList colors(2*primitives.size(),CImg::vector(255,255,0)); - cimglist_for(primitives,ll) colors[ll++].fill(100,255,100); - cimglist_for(primitives,l) if (l%2) colors[primitives.size()+l].fill(255,200,255); else colors[primitives.size()+l].fill(200,150,255); - const CImg opacities = CImg<>(primitives.size(),1,1,1,1.0f).append(CImg<>(primitives.size(),1,1,1,0.4f)); - points.shift_object3d(-30,0,0).append_object3d(primitives,points2.shift_object3d(30,0,0),primitives); - float alpha = 0, beta = 0, gamma = 0, theta = 0; - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - visu.get_shared_channels(1,2).fill(0); - visu.get_shared_row(visu.height()-1,0,0).noise(200,1); - CImg_3x3(I,unsigned char); Ipp = Icp = Inp = Ipc = Inc = 0; - cimg_for3x3(visu,x,y,0,0,I,unsigned char) visu(x,y,0) = (Icc+Ipn+Icn+Inn)>>2; - for (unsigned int y = 0; y<100; ++y) std::memset(visu.data(0,y,0,2),255-y*255/100,visu.width()); - const CImg - rpoints = CImg<>::rotation_matrix(1,1,0,(alpha+=0.01f))*CImg<>::rotation_matrix(1,0,1,(beta-=0.02f))* - CImg<>::rotation_matrix(0,1,1,(gamma+=0.03f))*points; - if (disp.is_resized()) disp.resize(false); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(300,256,false).toggle_fullscreen(false); - visu.draw_object3d(visu.width()/2.0f,visu.height()/2.0f,0, - rpoints,primitives,colors,opacities,4, - false,500.0f,(float)(std::cos(theta+=0.01f)+1)*visu.width()/2.0f, - (float)visu.height(),-100.0f,0.1f,1.5f). - display(disp.wait(25)); - } - return 0; -} - -// Item : 3D Metaballs -//--------------------- -struct metaballs3d { - float cx1, cy1, cz1, cx2, cy2, cz2, cx3, cy3, cz3; - inline float operator()(const float x, const float y, const float z) const { - const float - x1 = x - cx1, y1 = y - cy1, z1 = z - cz1, - x2 = x - cx2, y2 = y - cy2, z2 = z - cz2, - x3 = x - cx3, y3 = y - cy3, z3 = z - cz3, - r1 = 0.3f*(x1*x1 + y1*y1 + z1*z1), - r2 = 0.4f*(x2*x2 + y2*y2 + z2*z2), - r3 = 0.5f*(x3*x3 + y3*y3 + z3*z3); - float potential = 0; - if (r1<1.3f) potential+= 1.0f - r1*(r1*(4*r1+17)-22)/9; - if (r2<1.3f) potential+= 1.0f - r2*(r2*(4*r2+17)-22)/9; - if (r3<1.3f) potential+= 1.0f - r3*(r3*(4*r3+17)-22)/9; - return potential; - } -}; - -void* item_3d_metaballs() { - CImg img = CImg(100,100,1,3,0).noise(100,2).draw_plasma(1,0,10).resize(512,320,1,3).blur(4); - img.get_shared_channel(2)/=4; img.get_shared_channel(1)/=2; - metaballs3d met; - CImgList primitives; - CImgList colors; - const unsigned char white[] = { 255,255,255 }; - float alpha = 0, beta = 0, delta = 0, theta = 0, gamma = 0; - CImgDisplay disp(img,"[#20] - 3D Metaballs"); - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - met.cx2 = 1.5f*(float)std::cos(theta); met.cy2 = 2.5f*(float)std::sin(3*(theta+=0.017f)); met.cz2 = 0; - met.cx1 = 0; met.cy1 = 2.0f*(float)std::sin(4*gamma); met.cz1 = 1.2f*(float)std::cos(2*(gamma-=0.0083f)); - met.cx3 = 2.5f*(float)std::cos(2.5*delta); met.cy3 = 0; met.cz3 = 1.5f*(float)std::sin(2*(delta+=0.0125f)); - const CImg - points = CImg<>::isosurface3d(primitives,met,0.8f,-4.5f,-4.5f,-3.5f,4.5f,4.5f,3.5f,24,24,24), - rot = 50.0*CImg<>::rotation_matrix(0,0,1,(alpha+=0.02f))*CImg<>::rotation_matrix(1,1,0,(beta+=0.076f)), - rpoints = rot*points; - primitives.reverse_object3d(); - if (colors.size() img(640,480,1,3,0); - CImgDisplay disp(img,"[#21] - Fireworks (Click to add/explode rockets)"); - CImgList colors; - const unsigned char white[] = { 255,255,255 }, red[] = { 128,0,0 }; - CImgList particles; - float time = 0, speed = 100.0f; - - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - - if (disp.button()&1 || !particles.size() || (--time)<0) { - particles.insert(CImg<>::vector((float)cimg::rand()*img.width(),(float)img.height(), - (float)cimg::crand()*4,-6-(float)cimg::rand()*3, - 30+60*(float)cimg::rand(),3)); - colors.insert(CImg::vector(255,255,255)); - time = (float)(cimg::rand()*speed); - } - img*=0.92f; - - cimglist_for(particles,l) { - bool remove_particle = false; - float &x = particles(l,0), &y = particles(l,1), &vx = particles(l,2), &vy = particles(l,3), - &t = particles(l,4), &r = particles(l,5); - const float r2 = (t>0 || t<-42)?r/3:r*(1-2*(-(t+2)/40.0f)/3); - img.draw_ellipse((int)x,(int)y,r,r2,(float)(std::atan2(vy,vx)*180/cimg::PI),colors[l].data(),0.6f); - x+=vx; y+=vy; vy+=0.09f; t--; - if (y>img.height()+10 || x<0 || x>=img.width()+10) remove_particle = true; - - if (t<0 && t>=-1) { - if ((speed*=0.9f)<10) speed=10.0f; - const unsigned char - r = cimg::min(50+3*(unsigned char)(100*cimg::rand()), 255), - g = cimg::min(50+3*(unsigned char)(100*cimg::rand()), 255), - b = cimg::min(50+3*(unsigned char)(100*cimg::rand()), 255); - const float di = 10+(float)cimg::rand()*60, nr = (float)cimg::rand()*30; - for (float i=0; i<360; i+=di) { - const float rad = i*(float)cimg::PI/180, c = (float)std::cos(rad), s = (float)std::sin(rad); - particles.insert(CImg<>::vector(x,y,2*c+vx/1.5f,2*s+vy/1.5f,-2.0f,nr)); - colors.insert(CImg::vector(r,g,b)); - } - remove_particle = true; - } else if (t<-1) { r*=0.95f; if (r<0.5f) remove_particle=true; } - if (remove_particle) { particles.remove(l); colors.remove(l); l--; } - } - if (disp.button()&2) cimglist_for(particles,l) if (particles(l,4)>0) particles(l,4)=0.5f; - img.draw_text(5,5," %u frames/s ",white,red,0.5f,13,(unsigned int)disp.frames_per_second()); - disp.display(img).wait(25); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(640,480,false).toggle_fullscreen(false); - if (disp.is_resized()) disp.resize(disp,false); - } - return 0; -} - -// Item : Rubber Logo -//-------------------- -void* item_rubber_logo() { - const unsigned char white[] = { 255,255,255 }; - CImg background = CImg(300,300).noise(100,2); - background(0,0) = background(299,0) = background(299,299) = background(0,299) = 0; - background.draw_plasma().blur(1.0f,14.0f,0.0f,0).resize(-100,-100,1,3); - CImgDisplay disp(CImg(background). - draw_text(10,10,"Please wait, generating rubber object...",white),"[#22] - 3D Rubber Logo"); - - CImg vol = CImg().draw_text(30,30,"CImg",white,0,1,57).resize(-100,-100,15,1); - for (unsigned int k = 0; k<5; ++k) { vol.get_shared_slice(k).fill(0); vol.get_shared_slice(vol.depth()-1-k).fill(0); } - vol.resize(vol.width()+30,vol.height()+30,-100,1,0).blur(2).resize(-50,-50); - CImgList faces; - CImg points = vol.get_isosurface3d(faces,45); - CImgList colors(faces.size(),CImg::vector(100,100,255)); - cimglist_for(colors,l) { - const float x = (points(faces(l,0),0) + points(faces(l,1),0) + points(faces(l,2),0))/3; - if (x<30) colors[l] = CImg::vector(255,100,100); - else { if (x<34) colors[l] = CImg::vector(200,155,100); - else { if (x<55) colors[l] = CImg::vector(100,255,155); - }}} - faces.reverse_object3d(); - points.shift_object3d()*=5.5f; - - CImgList frames(100,background); - bool ok_visu = false; - unsigned int nb_frame = 0; - float alpha = 0, beta = 0, gamma = 0; - - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - CImg& frame = frames[nb_frame++]; - if (nb_frame>=frames.size()) { ok_visu = true; nb_frame = 0; } - const CImg - rot = CImg<>::rotation_matrix(0,1,0.2f,alpha+=0.011f)* - CImg<>::rotation_matrix(1,0.4f,1,beta+=0.015f)* - (1+0.1f*std::cos((double)(gamma+=0.1f))); - (frame=background).draw_object3d(frame.width()/2.0f,frame.height()/2.0f,frame.depth()/2.0f,rot*points,faces,colors,5, - false,500,0,0,-5000,0.1f,1.0f); - if (ok_visu) { - CImg visu(frame); - cimglist_for(frames,l) { - const unsigned int - y0 = l*visu.height()/frames.size(), - y1 = (l+1)*visu.height()/frames.size()-1; - cimg_forC(visu,k) visu.get_shared_rows(y0,y1,0,k) = frames[(nb_frame+l)%frames.size()].get_shared_rows(y0,y1,0,k); - } - visu.get_resize(disp,1).draw_text(5,5," %u frames/s ",white,0,0.5f,13,(unsigned int)disp.frames_per_second()).display(disp.wait(20)); - } - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(300,300,false).toggle_fullscreen(false); - if (disp.is_resized()) disp.resize(); - } - return 0; -} - -// Item : Image Waves -//-------------------- -void* item_image_waves() { - const CImg img = CImg(data_milla,211,242,1,3,false).get_resize(128,128,1,3); - CImgList faces0; - CImgList colors0; - const CImgList - points0 = (img.get_elevation3d(faces0,colors0,img.get_channel(0).fill(0)).shift_object3d()*=3)<'x', - opacities0(faces0.size(),1,1,1,1,1.0f); - CImg - back = CImg(400,300,1,3).sequence(0,130), - ball = CImg(12,12,1,3,0).draw_circle(6,6,5,CImg::vector(0,128,64).data()); - const CImg mball = CImg<>(12,12,1,1,0).draw_circle(6,6,5,CImg<>::vector(1.0f).data()); - ball.draw_circle(7,5,4,CImg::vector(16,96,52).data()). - draw_circle(8,4,2,CImg::vector(0,128,64).data()). - draw_circle(8,4,1,CImg::vector(64,196,128).data()); - CImg uc(img.width()/2,img.height()/2,1,1,0), up(uc), upp(uc); - CImgList particles; - CImgDisplay disp(back,"[#23] - Image Waves (Try mouse buttons!)"); - for (float alpha = 0.0f, count = 10.0f; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ) { - if ((disp.button()&1 && disp.mouse_x()>=0) || --count<0) { - CImg<>::vector((float)(cimg::rand()*(img.width()-1)),(float)(cimg::rand()*(img.height()-1)),-200,0).move_to(particles); - count = (float)(cimg::rand()*15); - } - alpha = (disp.mouse_x()>=0 && disp.button()&2)?(float)(disp.mouse_x()*2*cimg::PI/disp.width()):(alpha+0.02f); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(400,300,false).toggle_fullscreen(false); - cimglist_for(particles,l) { - float& z = up((int)particles(l,0)>>1,(int)particles(l,1)>>1); - if ((particles(l,2)+=(particles(l,3)+=0.5f))>z-10) { z = 250.0f; particles.remove(l--); } - } - CImg_3x3(U,float); Upp = Unp = Ucc = Upn = Unn = 0; - cimg_for3x3(up,x,y,0,0,U,float) uc(x,y) = (Unc+Upc+Ucn+Ucp)/2 - upp(x,y); - (uc-=(float)(uc.blur(0.7f).mean())).swap(upp).swap(up); - CImgList points(points0); - CImgList faces(faces0); - CImgList colors(colors0); - CImgList opacities(opacities0); - cimglist_for(points,p) points(p,2) = cimg::min(30 + uc.linear_atXY((p%img.width())/2.0f,(p/img.width())/2.0f),70.0f); - cimglist_for(particles,l) { - points.insert(CImg<>::vector(3*(particles(l,0)-img.width()/2.0f),3*(particles(l,1)-img.height()/2.0f),30.0f+particles(l,2))); - faces.insert(CImg::vector(points.size()-1)); - colors.insert(ball,~0U,true); - opacities.insert(mball,~0U,true); - } - const CImg - rot = CImg<>::rotation_matrix(1.0f,0,0,(float)(cimg::PI/3.0f))*CImg<>::rotation_matrix(0,0,1.0f,alpha), - rpoints = rot*(points>'x'); - (+back).draw_object3d(back.width()/2.0f,back.height()/2.0f,0,rpoints,faces,colors,opacities,4,false,500.0f,0,0,0,1,1). - display(disp.resize(false).wait(30)); - } - return 0; -} - -// Item : Breakout -//----------------- -void* item_breakout() { - - // Init graphics - CImg - board(8,10,1,1,0), - background = CImg(board.width()*32,board.height()*16+200,1,3,0).noise(20,1).draw_plasma().blur(1,8,0,true), - visu0(background/2.0), visu(visu0), brick(16,16,1,1,200), racket(64,8,1,3,0), ball(8,8,1,3,0); - const unsigned char white[] = { 255,255,255 }, green1[] = { 60,150,30 }, green2[] = { 130,255,130 }; - cimg_for_borderXY(brick,x,y,1) brick(x,y) = x>y?255:128; - cimg_for_insideXY(brick,x,y,1) brick(x,y) = cimg::min(255,64+8*(x+y)); - brick.resize(31,15,1,1,1).resize(32,16,1,1,0); - ball.draw_circle(4,4,2,white); ball-=ball.get_erode(3)/1.5; - racket.draw_circle(4,3,4,green1).draw_circle(3,2,2,green2); - cimg_forY(racket,y) racket.draw_rectangle(4,y,racket.width()-7,y,CImg::vector(y*4,255-y*32,255-y*25).data()); - racket.draw_image(racket.width()/2,racket.get_crop(0,0,racket.width()/2-1,racket.height()-1).mirror('x')); - const int - w = visu.width(), h = visu.height(), w2 = w/2, h2 = h/2, - bw = ball.width(), bh = ball.height(), bw2 = bw/2, bh2 = bh/2, - rw = racket.width(), rh = racket.height(), rw2 = rw/2; - float xr = (float)(w-rw2), oxr = (float)xr, xb = 0, yb = 0, oxb = 0, oyb = 0, vxb = 0, vyb = 0; - const CImg racket_mask = racket.get_threshold(1).channel(1), ball_mask = ball.get_threshold(1).channel(1); - - // Begin game loop - CImgDisplay disp(visu,"[#24] - Breakout"); - disp.move((CImgDisplay::screen_width() - w)/2,(CImgDisplay::screen_height() - h)/2); - for (unsigned int N = 0, N0 = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ) { - if (N0) { - int X = (int)xr; - if (disp.mouse_x()>=0) X = (int)(w2+((disp.mouse_x()<0?w2:disp.mouse_x())-w2)*2); - else disp.set_mouse(xr>w2?w-81:80,h2); - if (X=w-rw2) { X = w-rw2-1; disp.set_mouse(w-81,h2); } - oxr = xr; xr = (float)X; oxb = xb; oyb = yb; xb+=vxb; yb+=vyb; - if ((xb>=w-bw2) || (xb=h-rh-8-bh2 && yb=xb) { - xb = oxb; yb = h-rh-8.0f-bh2; vyb=-vyb; vxb+=(xr-oxr)/4; - if (cimg::abs(vxb)>8) vxb*=8/cimg::abs(vxb); - } - if (yb=((X+1)<<5)) vxb=-vxb; - else if (oyb<(Y<<4) || oyb>=((Y+1)<<4)) vyb=-vyb; - } - } - disp.set_title("[#24] - Breakout : %u/%u",N,N0); - } - if (yb>h || N==N0) { - disp.show_mouse(); - while (!disp.is_closed() && !disp.key() && !disp.button()) { - ((visu=visu0)/=2).draw_text(50,visu.height()/2-10,N0?" Game Over !":"Get Ready ?",white,0,1,24). - display(disp); - disp.wait(); - if (disp.is_resized()) disp.resize(disp); - } - board.fill(0); visu0 = background; - cimg_forXY(board,x,y) if (0.2f+cimg::crand()>=0) { - CImg cbrick = CImg::vector(100+cimg::rand()*155,100+cimg::rand()*155,100+cimg::rand()*155). - unroll('v').resize(brick.width(),brick.height()); - cimg_forC(cbrick,k) (cbrick.get_shared_channel(k).mul(brick))/=255; - visu0.draw_image(x*32,y*16,cbrick); - board(x,y) = 1; - } - N0 = (int)board.sum(); N = 0; - oxb = xb = (float)w2; oyb = yb = board.height()*16.0f+bh; vxb = 2.0f; vyb = 3.0f; - disp.hide_mouse(); - } else disp.display((visu=visu0).draw_image((int)(xr-rw2),h-rh-8,racket,racket_mask). - draw_image((int)(xb-bw2),(int)(yb-bh2),ball,ball_mask)); - if (disp.is_resized()) disp.resize(disp); - disp.wait(20); - } - return 0; -} - -// Item : 3D Reflection -//---------------------- -void* item_3d_reflection() { - - // Init images and display - CImgDisplay disp(512,512,"[#25] - 3D Reflection",0); - CImg back = CImg(200,400,1,3,0).rand(0,255).draw_plasma(); - ((back,back.get_mirror('x'),back)>'x').blur(15,1,0,true).columns(100,499).normalize(0,120).move_to(back); - CImg light0 = back.get_resize(-50,-50,1,1).normalize(1,255), visu(back), reflect(back.width(),back.height(),1,1), light(light0); - back.get_shared_channel(0)/=3; - back.get_shared_channel(2)/=2; - - // Create 3D objects. - CImgList back_faces, main_faces; - CImgList main_colors, back_colors, light_colors, light_colors2; - CImgList back_pts0, main_pts = CImg<>::torus3d(main_faces,30,12,24,12)<'x'; - cimglist_for(main_faces,l) - if (l%2) CImg::vector(255,120,16).move_to(main_colors); - else CImg::vector(255,100,16).move_to(main_colors); - - const unsigned int res1 = 32, res2 = 32; - for (unsigned int v = 1; v::vector(x,y,z)); - } - const unsigned int N = back_pts0.size(); - back_pts0.insert(CImg<>::vector(0,0,-140)).insert(CImg<>::vector(0,0,140)); - CImg back_pts = back_pts0>'x'; - for (unsigned int vv = 0; vv::vector(res1*vv+nu,res1*nv+uu,res1*vv+uu)); - back_faces.insert(CImg::vector(res1*vv+nu,res1*nv+nu,res1*nv+uu)); - back_colors.insert(CImg::vector(128,255,255)); - back_colors.insert(CImg::vector(64,240,196)); - } - for (unsigned int uu = 0; uu::vector(nu,uu,N)); - back_faces.insert(CImg::vector(res1*(res2-2)+nu, N+1,res1*(res2-2)+uu)); - if (uu%2) back_colors.insert(2,CImg::vector(128,255,255)); - else back_colors.insert(2,CImg::vector(64,240,196)); - } - light_colors.assign(main_faces.size(),CImg::vector(255)); - light_colors2.assign(back_faces.size(),CImg::vector(255)).insert(light,~0U,true); - - // Start 3D animation. - for (float main_x = -1.5f*visu.width(), - back_alpha = 0, back_beta = 0, back_theta = -3.0f, - main_alpha = 0, main_beta = 0, main_theta = 0; - !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); - main_alpha+=0.041f, main_beta+=0.063f, main_theta+=0.02f, - back_alpha+=0.0031f, back_beta+=0.0043f, back_theta+=0.01f) { - const int - main_X = (int)(visu.width()/2 + main_x + 100*std::cos(2.1*main_theta)), - main_Y = (int)(visu.height()/2 + 120*std::sin(1.8*main_theta)); - CImg - rmain_pts = (CImg<>::rotation_matrix(-1,1,0,main_alpha)*CImg<>::rotation_matrix(1,0,1,main_beta))*(main_pts>'x'), - rback_pts = (CImg<>::rotation_matrix(1,1,0,back_alpha)*CImg<>::rotation_matrix(0.5,0,1,back_beta))*back_pts; - - (light=light0).draw_object3d(main_X/2.0f,main_Y/2.0f,0,rmain_pts,main_faces,light_colors,3,false,500,0,0,-5000,0.2f,0.1f); - reflect.fill(0).draw_object3d(2*visu.width()/3.0f,visu.height()/2.0f,0,rback_pts,back_faces,light_colors2,5,false,500,0,0,-5000,0.2f,0.1f); - rmain_pts*=2; - (visu=back).draw_object3d(2*visu.width()/3.0f,visu.height()/2.0f,0,rback_pts,back_faces,back_colors,3,false,500,0,0,-5000,0.2f,0.1f); - - unsigned char *ptrs = reflect.data(), *ptrr = visu.data(0,0,0,0), *ptrg = visu.data(0,0,0,1), *ptrb = visu.data(0,0,0,2); - cimg_foroff(reflect,xy) { - const unsigned char v = *(ptrs++); - if (v) { *ptrr = (*ptrr+v)>>1; *ptrg = (*ptrr+v)>>1; *ptrb = (*ptrb+v)>>1; } - ++ptrr; ++ptrg; ++ptrb; - } - - visu.draw_object3d((float)main_X,(float)main_Y,0,rmain_pts,main_faces,main_colors,4, - false,500,0,0,-5000,0.1f,1.4f); - - if (disp.is_resized()) { - const int s = cimg::min(disp.window_width(),disp.window_height()); - disp.resize(s,s,false); - } - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.resize(512,512,false).toggle_fullscreen(false); - disp.display(visu).wait(20); - back.shift(4,0,0,0,2); - light0.shift(-2,0,0,0,2); - if (main_x<0) main_x +=2; - const float H = back_theta<0?0.0f:(float)(0.3f-0.3f*std::cos(back_theta)); - for (unsigned int p = 0, v = 1; v img0 = CImg(data_logo,555,103,1,3,true).get_resize(-144,-144,1,3,6); - CImgDisplay disp(img0,"[#26] - Fish-Eye Magnification"); - int rm = 80, xc = 0, yc = 0, rc = 0; - CImg img, res; - for (float alpha = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); alpha+=0.02f) { - if (!img) img = img0.get_resize(disp,3); - if (disp.mouse_x()>=0) { xc = disp.mouse_x(); yc = disp.mouse_y(); rc = rm; } - else { - xc = (int)(img.width()*(1 + 0.9f*std::cos(1.2f*alpha))/2); - yc = (int)(img.height()*(1 + 0.8f*std::sin(3.4f*alpha))/2); - rc = (int)(90 + 60*std::sin(alpha)); - } - const int x0 = xc - rc, y0 = yc - rc, x1 = xc + rc, y1 = yc + rc; - res = img; - cimg_for_inXY(res,x0,y0,x1,y1,x,y) { - const float X = (float)x - xc, Y = (float)y - yc, r2 = X*X + Y*Y, rrc = (float)std::sqrt(r2)/rc; - if (rrc<1) { - const int xi = (int)(xc + rrc*X), yi = (int)(yc + rrc*Y); - res(x,y,0) = img(xi,yi,0); res(x,y,1) = img(xi,yi,1); res(x,y,2) = img(xi,yi,2); - } - } - const int xf = xc+3*rc/8, yf = yc-3*rc/8; - res.draw_circle(xc,yc,rc,purple,0.2f).draw_circle(xf,yf,rc/3,white,0.2f).draw_circle(xf,yf,rc/5,white,0.2f). - draw_circle(xf,yf,rc/10,white,0.2f).draw_circle(xc,yc,rc,black,0.7f,~0U); - disp.display(res).wait(20); - rm+=(disp.button()&1?8:(disp.button()&2?-8:0)); - rm = rm<30?30:(rm>200?200:rm); - if (disp.is_resized()) { disp.resize(false); img.assign(); } - } - return 0; -} - -// Item : Word Puzzle -//-------------------- -void* item_word_puzzle() { - - // Create B&W and color letters - CImg model(60,60,1,3,0), color(3), background, canvas, elaps; - CImgList letters('Z'-'A'+1), cletters(letters); - const unsigned char white[] = { 255, 255, 255 }, gray[] = { 128, 128, 128 }, black[] = { 0, 0, 0 }; - char tmptxt[] = { 'A',0 }; - model.fill(255).draw_rectangle(5,5,54,54,gray).blur(3,0).threshold(140).normalize(0,255); - cimglist_for(letters,l) - (letters[l].draw_text(5,2,&(tmptxt[0]='A'+l),white,0,1,57).resize(60,60,1,1,0,0,0.5,0.5). - resize(-100,-100,1,3)|=model).blur(0.5); - { cimglist_for(cletters,l) { - CImg tmp = letters[l]; - color.rand(100,255); - cimg_forC(tmp,k) (tmp.get_shared_channel(k)*=color[k])/=255; - cletters[l] = tmp; - }} - - CImgDisplay disp(500,400,"[#27] - Word Puzzle",0); - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - - // Create background, word data and display. - background.assign(40,40,1,2,0).noise(30,2).distance(255).normalize(0,255).resize(500,400,1,3,3); - CImg current(14,6,1,1,0), solution(14,4,1,1,0); - current.get_shared_row(0).fill('T','H','E','C','I','M','G','L','I','B','R','A','R','Y'); - current.get_shared_row(1).rand(-30,background.width()-30); - current.get_shared_row(2).rand(-30,background.height()-30); - solution.get_shared_row(0) = current.get_shared_row(0); - solution.get_shared_row(1).fill(20,80,140,100,180,260,340,40,100,160,220,280,340,400); - solution.get_shared_row(2).fill(20,20,20,120,150,180,210,310,310,310,310,310,310,310); - cimg_forX(solution,l) background.draw_image(solution(l,1),solution(l,2),letters(solution(l)-'A'),0.3f); - const int last = current.width()-1; - - // Start user interaction - int timer = 0, completed = 0; - for (bool selected = false, refresh_canvas = true, stopflag = false; - !stopflag && !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); disp.resize(disp).wait(20)) { - if (refresh_canvas) { - canvas = background; - cimg_forX(current,l) if (!current(l,5)) { - int &x = current(l,1), &y = current(l,2); - if (x<-30) x = -30; else if (x>canvas.width()-30) x = canvas.width()-30; - if (y<-30) y = -30; else if (y>canvas.height()-30) y = canvas.height()-30; - canvas.draw_rectangle(x+8,y+8,x+67,y+67,black,0.3f).draw_image(x,y,cletters(current(l)-'A')); - } - refresh_canvas = false; - } - (+canvas).draw_text(280,3,"Elapsed Time : %d",white,0,0.7f,24,timer++).display(disp); - - if (disp.button()&1) { - const int mx = disp.mouse_x(), my = disp.mouse_y(); - if (mx>=0 && my>=0) { - if (!selected) { - int ind = -1; - cimg_forX(current,l) if (!current(l,5)) { - const int x = current(l,1), y = current(l,2), dx = mx - x, dy = my - y; - if (dx>=0 && dx<60 && dy>=0 && dy<60) { selected = true; ind = l; current(l,3) = dx; current(l,4) = dy; } - } - if (ind>=0 && ind vec = current.get_column(ind); - current.draw_image(ind,current.get_crop(ind+1,last)).draw_image(last,vec); - } - } else { current(last,1) = mx - current(last,3); current(last,2) = my - current(last,4); refresh_canvas = true; } - } - } else { - bool win = true; - cimg_forX(solution,j) if (!solution(j,3)) { - win = false; - const int x = solution(j,1), y = solution(j,2); - cimg_forX(current,i) if (!current(i,5) && solution(j)==current(i)) { - const int xc = current(i,1), yc = current(i,2), dx = cimg::abs(x-xc), dy = cimg::abs(y-yc); - if (dx<=12 && dy<=12) { - cimg_forC(background,k) cimg_forY(letters[0],y) - background.get_shared_row(solution(j,2)+y,0,k). - draw_image(solution(j,1),0, - (CImg<>(cletters(solution(j)-'A').get_shared_row(y,0,k))*=2.0*std::cos((y-30.0f)/18)). - cut(0,255),0.8f); - current(i,5) = solution(j,3) = 1; refresh_canvas = true; - } - } - } - selected = false; - if (win) { stopflag = true; completed = 1; } - } - } - - // Display final score - const char - *const mention0 = "Need more training !", *const mention1 = "Still amateur, hu ?", - *const mention2 = "Not so bad !", *const mention3 = " Good !", *const mention4 = "Very good !", - *const mention5 = " Expert !", - *mention = completed?(timer<700?mention5:timer<800?mention4:timer<900?mention3:timer<1000?mention2:timer<1200?mention1:mention0):mention0; - canvas.assign().draw_text(0,0,"Final time : %d\n\n%s",white,0,1,32,timer,mention).resize(-100,-100,1,3); - ((background/=2)&CImg(2,2).fill(0,255,255,0).resize(background,0,2)). - draw_image((background.width()-canvas.width())/2,(background.height()-canvas.height())/2, - canvas,canvas.get_dilate(3).dilate(3).dilate(3),1,255).display(disp.flush()); - while (!disp.is_closed() && !disp.key() && !disp.button()) disp.resize(disp).wait(); - } - return 0; -} - -// Run a selected effect -//----------------------- -void start_item(const unsigned int demo_number) { - switch (demo_number) { - case 1: item_blurring_gradient(); break; - case 2: item_rotozoom(); break; - case 3: item_anisotropic_smoothing(); break; - case 4: item_fractal_animation(); break; - case 5: item_gamma_correction(); break; - case 6: item_filled_triangles(); break; - case 7: item_mandelbrot_explorer(); break; - case 8: item_mini_paint(); break; - case 9: item_soccer_bobs(); break; - case 10: item_bump(); break; - case 11: item_bouncing_bubble(); break; - case 12: item_virtual_landscape(); break; - case 13: item_plasma(); break; - case 14: item_oriented_convolutions(); break; - case 15: item_shade_bobs(); break; - case 16: item_fourier_filtering(); break; - case 17: item_image_zoomer(); break; - case 18: item_blobs_editor(); break; - case 19: item_double_torus(); break; - case 20: item_3d_metaballs(); break; - case 21: item_fireworks(); break; - case 22: item_rubber_logo(); break; - case 23: item_image_waves(); break; - case 24: item_breakout(); break; - case 25: item_3d_reflection(); break; - case 26: item_fisheye_magnification(); break; - case 27: item_word_puzzle(); break; - default: break; - } -} - -/*--------------------------- - - Main procedure - - --------------------------*/ -int main(int argc, char **argv) { - - // Display info about the CImg Library configuration - //-------------------------------------------------- - unsigned int demo_number = cimg_option("-run",0,0); - if (demo_number) start_item(demo_number); - else { - cimg::info(); - - // Demo selection menu - //--------------------- - const unsigned char - white[] = { 255, 255, 255 }, black[] = { 0, 0, 0 }, red[] = { 120, 50, 80 }, - yellow[] = { 200, 155, 0 }, green[] = { 30, 200, 70 }, purple[] = { 175, 32, 186 }, - blue[] = { 55, 140, 185 }, grey[] = { 127, 127, 127 }; - float - rx = 0, ry = 0, t = 0, gamma = 0, vgamma = 0, T = 0.9f, - nrx = (float)(2*cimg::crand()), - nry = (float)(2*cimg::crand()); - int y0 = 2*13; - CImg back(1,2,1,3,10), fore, text, img; - back.fillC(0,1,0,10,10,235).resize(320,420,1,3,3).get_shared_channel(2).noise(10,1).draw_plasma(); - back.draw_rectangle(0,y0-7,back.width()-1,y0+20,red); - fore.assign(back.width(),50,1,1,0).draw_text(20,y0-3,"** CImg %u.%u.%u Samples **",grey,0,1,23, - cimg_version/100,(cimg_version/10)%10,cimg_version%10); - (fore+=fore.get_dilate(3).dilate(3)).resize(-100,-100,1,3); - cimg_forXY(fore,x,y) - if (fore(x,y)==127) fore(x,y,0) = fore(x,y,1) = fore(x,y,2) = 1; - else if (fore(x,y)) { - const float val = cimg::min(255.0f,7.0f*(y-3)); - fore(x,y,0) = (unsigned char)(val/1.5f); - fore(x,y,1) = (unsigned char)val; - fore(x,y,2) = (unsigned char)(val/1.1f); - } - text.draw_text(1,1, - "1- Blurring Gradient\n" - "2- Rotozoom\n" - "3- Anisotropic Smoothing\n" - "4- Fractal Animation\n" - "5- Gamma Correction\n" - "6- Filled Triangles\n" - "7- Mandelbrot explorer\n" - "8- Mini-Paint\n" - "9- Soccer Bobs\n" - "10- Bump Effect\n" - "11- Bouncing Bubble\n" - "12- Virtual Landscape\n" - "13- Plasma & Sinus Scroll\n" - "14- Oriented Convolutions\n" - "15- Shade Bobs\n" - "16- Fourier Filtering\n" - "17- Image Zoomer\n" - "18- Blobs Editor\n" - "19- Double Torus\n" - "20- 3D Metaballs\n" - "21- Fireworks\n" - "22- Rubber Logo\n" - "23- Image Waves\n" - "24- Breakout\n" - "25- 3D Reflection\n" - "26- Fish-Eye Magnification\n" - "27- Word Puzzle\n", - white,0,1,13).resize(-100,-100,1,3); - fore.resize(back,0).draw_image(20,y0+2*13,text|=text.get_dilate(3)>>4); - - CImgDisplay disp(back,"CImg Library Samples",0,false,true); - disp.move((disp.screen_width()-disp.window_width())/2,(disp.screen_height()-disp.window_height())/2); - img = back; back*=0.15f; - for (y0+=2*13; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); demo_number = 0) { - while (!demo_number && !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - img*=0.85f; img+=back; - for (int i = 0; i<60; ++i) { - const float - mx = (float)(img.width()/2+(img.width()/2-30)*((1-gamma)*std::cos(3*t+rx*i*18.0f*cimg::PI/180) + - gamma*std::cos(3*t+nrx*i*18.0f*cimg::PI/180))), - my = (float)(img.height()/2+(img.height()/2-30)*((1-gamma)*std::sin(4*t+ry*i*18.0f*cimg::PI/180) + - gamma*std::sin(4*t+nry*i*18.0f*cimg::PI/180))), - mz = (float)(1.3f + 1.2f*((1-gamma)*std::sin(2*t+(rx+ry)*i*20*cimg::PI/180) + - gamma*std::sin(2*t+(nrx+nry)*i*20*cimg::PI/180))); - const int j = i%5; - img.draw_circle((int)mx,(int)my,(int)(10*mz),j!=0?(j!=1?(j!=2?(j!=3?green:red):yellow):purple):blue,0.2f). - draw_circle((int)(mx+4*mz),(int)(my-4),(int)(3*mz),white,0.1f). - draw_circle((int)mx,(int)my,(int)(10*mz),black,0.2f,~0U); - } - const unsigned char *ptrs = fore.data(); - cimg_for(img,ptrd,unsigned char) { const unsigned char val = *(ptrs++); if (val) *ptrd = val; } - int y = disp.mouse_y(); - if (y>=y0 && y1) { gamma = vgamma = 0; rx = nrx; ry = nry; nrx=(float)(2*cimg::crand()); nry=(float)(2*cimg::crand()); } - t+=0.006f; T+=0.005f; if (T>1) { T-=(float)(1+cimg::crand()); vgamma = 0.03f; } - if (disp.button()) { demo_number = 1+(disp.mouse_y()-y0)/13; disp.set_button(); } - disp.resize(disp,false).display(img).wait(25); - } - start_item(demo_number); - } - } - - // Exit demo - //----------- - std::exit(0); - return 0; -} diff --git a/deps/CImg/examples/Makefile b/deps/CImg/examples/Makefile deleted file mode 100644 index 4bca073..0000000 --- a/deps/CImg/examples/Makefile +++ /dev/null @@ -1,596 +0,0 @@ -# -# File : Makefile -# ( Makefile for GNU 'make' utility ) -# -# Description : Makefile for compiling CImg-based code on Unix. -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Copyright : David Tschumperle -# ( http://tschumperle.users.greyc.fr/ ) -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# - -#------------------------------------------------------- -# Define the list of files to be compiled -# (name of the source files without the .cpp extension) -#------------------------------------------------------- - -# Files which do not necessarily require external libraries to run. -CIMG_FILES = CImg_demo \ - captcha \ - curve_editor2d \ - dtmri_view3d \ - edge_explorer2d \ - fade_images \ - gaussian_fit1d \ - generate_loop_macros \ - hough_transform2d \ - image_registration2d \ - image2ascii \ - image_surface3d \ - jawbreaker \ - mcf_levelsets2d \ - mcf_levelsets3d \ - odykill \ - pde_heatflow2d \ - pde_TschumperleDeriche2d \ - plotter1d \ - radon_transform2d \ - scene3d \ - spherical_function3d \ - tetris \ - tron \ - tutorial \ - wavelet_atrous \ - use_chlpca \ - use_draw_gradient \ - use_nlmeans \ - use_skeleton \ - use_RGBclass \ - -# Files which requires external libraries to run. -CIMG_EXTRA_FILES = use_tiff_stream use_jpeg_buffer - -#--------------------------------- -# Set correct variables and paths -#--------------------------------- -CIMG_VERSION = _cimg_version -X11PATH = /usr/X11R6 -CC = g++ -EXEPFX = -CCVER = $(CC) -ifeq ($(CC),g++) -CCVER = `$(CC) -v 2>&1 | tail -n 1` -endif -ifeq ($(CC),clang++) -CCVER = `$(CC) -v 2>&1 | head -n 1` -endif -ifeq ($(CC),icc) -CCVER = "icc \( `$(CC) -v 2>&1`\)" -CFLAGS = -I.. -LDFLAGS = -else -CFLAGS = -I.. -Wall -W -LDFLAGS = -lm -endif - -#-------------------------------------------------- -# Set compilation flags allowing to customize CImg -#-------------------------------------------------- - -# Flags to enable strict code standards -ifeq ($(CC),icc) -CIMG_ANSI_CFLAGS = -ansi -else -CIMG_ANSI_CFLAGS = -ansi -pedantic -endif - -# Flags to enable code debugging. -CIMG_DEBUG_CFLAGS = -Dcimg_verbosity=3 -Dcimg_strict_warnings -g - -# Flags to enable color output messages. -# (requires a VT100 compatible terminal) -CIMG_VT100_CFLAGS = -Dcimg_use_vt100 - -# Flags to enable code optimization by the compiler. -ifeq ($(CC),icc) -CIMG_OPT_CFLAGS = -O3 -ipo -no-prec-div -else -CIMG_OPT_CFLAGS = -O3 -fno-tree-pre -endif - -# Flags to enable OpenMP support. -ifeq ($(CC),icc) -CIMG_OPENMP_CFLAGS = -Dcimg_use_openmp -openmp -i-static -else -CIMG_OPENMP_CFLAGS = -Dcimg_use_openmp -fopenmp -endif - -# Flags to enable OpenCV support. -CIMG_OPENCV_CFLAGS = -Dcimg_use_opencv -I/usr/include/opencv -CIMG_OPENCV_LDFLAGS = -lopencv_core -lopencv_highgui -#CIMG_OPENCV_LDFLAGS = -lcv -lhighgui #-> Use this for OpenCV < 2.2.0 - -# Flags used to disable display capablities of CImg -CIMG_NODISPLAY_CFLAGS = -Dcimg_display=0 - -# Flags to enable the use of the X11 library. -# (X11 is used by CImg to handle display windows) -# !!! For 64bits systems : replace -L$(X11PATH)/lib by -L$(X11PATH)/lib64 !!! -CIMG_X11_CFLAGS = -I$(X11PATH)/include -CIMG_X11_LDFLAGS = -L$(X11PATH)/lib -lpthread -lX11 - -# Flags to enable fast image display, using the XSHM library (when using X11). -# !!! Seems to randomly crash when used on MacOSX and 64bits systems, so use it only when necessary !!! -CIMG_XSHM_CFLAGS = # -Dcimg_use_xshm -CIMG_XSHM_LDFLAGS = # -lXext - -# Flags to enable GDI32 display (Windows native). -CIMG_GDI32_CFLAGS = -mwindows -CIMG_GDI32_LDFLAGS = -lgdi32 - -# Flags to enable screen mode switching, using the XRandr library (when using X11). -# ( http://www.x.org/wiki/Projects/XRandR ) -# !!! Not supported by the X11 server on MacOSX, so do not use it on MacOSX !!! -CIMG_XRANDR_CFLAGS = -Dcimg_use_xrandr -CIMG_XRANDR_LDFLAGS = -lXrandr - -# Flags to enable native support for PNG image files, using the PNG library. -# ( http://www.libpng.org/ ) -CIMG_PNG_CFLAGS = -Dcimg_use_png -CIMG_PNG_LDFLAGS = -lpng -lz - -# Flags to enable native support for JPEG image files, using the JPEG library. -# ( http://www.ijg.org/ ) -CIMG_JPEG_CFLAGS = -Dcimg_use_jpeg -CIMG_JPEG_LDFLAGS = -ljpeg - -# Flags to enable native support for TIFF image files, using the TIFF library. -# ( http://www.libtiff.org/ ) -CIMG_TIFF_CFLAGS = -Dcimg_use_tiff -CIMG_TIFF_LDFLAGS = -ltiff - -# Flags to enable native support for MINC2 image files, using the MINC2 library. -# ( http://en.wikibooks.org/wiki/MINC/Reference/MINC2.0_Users_Guide ) -CIMG_MINC2_CFLAGS = -Dcimg_use_minc2 -I${HOME}/local/include -CIMG_MINC2_LDFLAGS = -lminc_io -lvolume_io2 -lminc2 -lnetcdf -lhdf5 -lz -L${HOME}/local/lib - -# Flags to enable native support for EXR image files, using the OpenEXR library. -# ( http://www.openexr.com/ ) -CIMG_EXR_CFLAGS = -Dcimg_use_openexr -I/usr/include/OpenEXR -CIMG_EXR_LDFLAGS = -lIlmImf -lHalf - -# Flags to enable native support for various video files, using the FFMPEG library. -# ( http://www.ffmpeg.org/ ) -CIMG_FFMPEG_CFLAGS = -Dcimg_use_ffmpeg -D__STDC_CONSTANT_MACROS -I/usr/include/libavcodec -I/usr/include/libavformat -I/usr/include/libswscale -I/usr/include/ffmpeg -CIMG_FFMPEG_LDFLAGS = -lavcodec -lavformat -lswscale - -# Flags to enable native support for compressed .cimgz files, using the Zlib library. -# ( http://www.zlib.net/ ) -CIMG_ZLIB_CFLAGS = -Dcimg_use_zlib -CIMG_ZLIB_LDFLAGS = -lz - -# Flags to enable native support of most classical image file formats, using the Magick++ library. -# ( http://www.imagemagick.org/Magick++/ ) -CIMG_MAGICK_CFLAGS = -Dcimg_use_magick `Magick++-config --cppflags` `Magick++-config --cxxflags` -CIMG_MAGICK_LDFLAGS = `Magick++-config --ldflags` `Magick++-config --libs` - -# Flags to enable faster Discrete Fourier Transform computation, using the FFTW3 library -# ( http://www.fftw.org/ ) -CIMG_FFTW3_CFLAGS = -Dcimg_use_fftw3 -ifeq ($(OSTYPE),msys) -CIMG_FFTW3_LDFLAGS = -lfftw3-3 -else -CIMG_FFTW3_LDFLAGS = -lfftw3 -lfftw3_threads -endif - -# Flags to enable the use of LAPACK routines for matrix computation -# ( http://www.netlib.org/lapack/ ) -CIMG_LAPACK_CFLAGS = -Dcimg_use_lapack -CIMG_LAPACK_LDFLAGS = -lblas -lg2c -llapack - -# Flags to enable the use of the Board library -# ( http://libboard.sourceforge.net/ ) -CIMG_BOARD_CFLAGS = -Dcimg_use_board -I/usr/include/board -CIMG_BOARD_LDFLAGS = -lboard - -# Flags to compile on Sun Solaris -CIMG_SOLARIS_LDFLAGS = -R$(X11PATH)/lib -lrt -lnsl -lsocket - -# Flags to compile GIMP plug-ins. -ifeq ($(MSYSTEM),MINGW32) -CIMG_GIMP_CFLAGS = -mwindows -endif - -#------------------------- -# Define Makefile entries -#------------------------- -.cpp: - @echo - @echo "** Compiling '$* ($(CIMG_VERSION))' with '$(CCVER)'" - @echo - $(CC) -o $(EXEPFX)$* $< $(CFLAGS) $(CONF_CFLAGS) $(LDFLAGS) $(CONF_LDFLAGS) -ifeq ($(STRIP_EXE),true) -ifeq ($(MSYSTEM),MINGW32) - strip $(EXEPFX)$*.exe -else - strip $(EXEPFX)$* -endif -endif -menu: - @echo - @echo "CImg Library $(CIMG_VERSION) : Examples" - @echo "-----------------------------" - @echo " > linux : Linux/BSD target, X11 display, optimizations disabled." - @echo " > dlinux : Linux/BSD target, X11 display, debug mode." - @echo " > olinux : Linux/BSD target, X11 display, optimizations enabled." - @echo " > mlinux : Linus/BSD target, no display, minimal features, optimizations enabled." - @echo " > Mlinux : Linux/BSD target, X11 display, maximal features, optimizations enabled." - @echo - @echo " > solaris : Sun Solaris target, X11 display, optimizations disabled." - @echo " > dsolaris : Sun Solaris target, X11 display, debug mode." - @echo " > osolaris : Sun Solaris target, X11 display, optimizations enabled." - @echo " > msolaris : Sun Solaris target, no display, minimal features, optimizations enabled." - @echo " > Msolaris : Sun Solaris target, X11 display, maximal features, optimizations enabled." - @echo - @echo " > macosx : MacOSX target, X11 display, optimizations disabled." - @echo " > dmacosx : MacOSX target, X11 display, debug mode." - @echo " > omacosx : MacOSX target, X11 display, optimizations enabled." - @echo " > mmacosx : MacOSX target, no display, minimal features, optimizations enabled." - @echo " > Mmacosx : MacOSX target, X11 display, maximal features, optimizations enabled." - @echo - @echo " > windows : Windows target, GDI32 display, optimizations disabled." - @echo " > dwindows : Windows target, GDI32 display, debug mode." - @echo " > owindows : Windows target, GDI32 display, optimizations enabled." - @echo " > mwindows : Windows target, no display, minimal features, optimizations enabled." - @echo " > Mwindows : Windows target, GDI32 display, maximal features, optimizations enabled." - @echo - @echo " > clean : Clean generated files." - @echo - @echo "Choose your option :" - @read CHOICE; echo; $(MAKE) $$CHOICE; echo; echo "> Next time, you can bypass the menu by typing directly 'make $$CHOICE'"; echo; - -all: $(CIMG_FILES) - -clean: - rm -rf *.exe *.o *~ \#* $(CIMG_FILES) $(CIMG_EXTRA_FILES) -ifneq ($(EXEPFX),) - rm -f $(EXEPFX)* -endif - -# Custom user-defined target -custom: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_TIFF_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_TIFF_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -all $(CIMG_EXTRA_FILES) - -# Linux/BSD/Mac OSX targets, with X11 display. -linux: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -all - -dlinux: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_DEBUG_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -all - -olinux: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -"STRIP_EXE=true" \ -all - -mlinux: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_NODISPLAY_CFLAGS) \ -$(CIMG_OPT_CFLAGS)" \ -"STRIP_EXE=true" \ -all - -Mlinux: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS) \ -$(CIMG_XRANDR_CFLAGS) \ -$(CIMG_TIFF_CFLAGS) \ -$(CIMG_EXR_CFLAGS) \ -$(CIMG_PNG_CFLAGS) \ -$(CIMG_JPEG_CFLAGS) \ -$(CIMG_ZLIB_CFLAGS) \ -$(CIMG_OPENCV_CFLAGS) \ -$(CIMG_MAGICK_CFLAGS) \ -$(CIMG_FFTW3_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS) \ -$(CIMG_XRANDR_LDFLAGS) \ -$(CIMG_TIFF_LDFLAGS) -ltiffxx \ -$(CIMG_EXR_LDFLAGS) \ -$(CIMG_PNG_LDFLAGS) \ -$(CIMG_JPEG_LDFLAGS) \ -$(CIMG_ZLIB_LDFLAGS) \ -$(CIMG_OPENCV_LDFLAGS) \ -$(CIMG_MAGICK_LDFLAGS) \ -$(CIMG_FFTW3_LDFLAGS)" \ -"STRIP_EXE=true" \ -all $(CIMG_EXTRA_FILES) - -# Sun Solaris targets, with X11 display. -solaris: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_SOLARIS_LDFLAGS) \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -all - -dsolaris: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_DEBUG_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_SOLARIS_LDFLAGS) \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -all - -osolaris: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_SOLARIS_LDFLAGS) \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS)" \ -"STRIP_EXE=true" \ -all - -msolaris: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_NODISPLAY_CFLAGS) \ -$(CIMG_OPT_CFLAGS)" \ -"STRIP_EXE=true" \ -all - -Msolaris: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_XSHM_CFLAGS) \ -$(CIMG_XRANDR_CFLAGS) \ -$(CIMG_TIFF_CFLAGS) \ -$(CIMG_MINC2_CFLAGS) \ -$(CIMG_EXR_CFLAGS) \ -$(CIMG_PNG_CFLAGS) \ -$(CIMG_JPEG_CFLAGS) \ -$(CIMG_ZLIB_CFLAGS) \ -$(CIMG_OPENCV_CFLAGS) \ -$(CIMG_MAGICK_CFLAGS) \ -$(CIMG_FFTW3_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_SOLARIS_LDFLAGS) \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_XSHM_LDFLAGS) \ -$(CIMG_XRANDR_LDFLAGS) \ -$(CIMG_TIFF_LDFLAGS) \ -$(CIMG_MINC2_LDFLAGS) \ -$(CIMG_EXR_LDFLAGS) \ -$(CIMG_PNG_LDFLAGS) \ -$(CIMG_JPEG_LDFLAGS) \ -$(CIMG_ZLIB_LDFLAGS) \ -$(CIMG_OPENCV_LDFLAGS) \ -$(CIMG_MAGICK_LDFLAGS) \ -$(CIMG_FFTW3_LDFLAGS)" \ -"STRIP_EXE=true" \ -all $(CIMG_EXTRA_FILES) - -# MacOsX targets, with X11 display. -macosx: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS)" \ -all - -dmacosx: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_DEBUG_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS)" \ -all - -omacosx: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS)" \ -all - -mmacosx: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_ANSI_CFLAGS) \ -$(CIMG_NODISPLAY_CFLAGS) \ -$(CIMG_OPT_CFLAGS)" \ -all - -Mmacosx: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_VT100_CFLAGS) \ -$(CIMG_X11_CFLAGS) \ -$(CIMG_TIFF_CFLAGS) \ -$(CIMG_MINC2_CFLAGS) \ -$(CIMG_EXR_CFLAGS) \ -$(CIMG_PNG_CFLAGS) \ -$(CIMG_JPEG_CFLAGS) \ -$(CIMG_ZLIB_CFLAGS) \ -$(CIMG_OPENCV_CFLAGS) \ -$(CIMG_MAGICK_CFLAGS) \ -$(CIMG_FFTW3_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_X11_LDFLAGS) \ -$(CIMG_TIFF_LDFLAGS) \ -$(CIMG_MINC2_LDFLAGS) \ -$(CIMG_EXR_LDFLAGS) \ -$(CIMG_PNG_LDFLAGS) \ -$(CIMG_JPEG_LDFLAGS) \ -$(CIMG_ZLIB_LDFLAGS) \ -$(CIMG_OPENCV_LDFLAGS) \ -$(CIMG_MAGICK_LDFLAGS) \ -$(CIMG_FFTW3_LDFLAGS)" \ -all $(CIMG_EXTRA_FILES) - -# Windows targets, with GDI32 display. -windows: - @$(MAKE) \ -"CONF_CFLAGS = " \ -"CONF_LDFLAGS = \ -$(CIMG_GDI32_LDFLAGS)" \ -all - -dwindows: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_DEBUG_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_GDI32_LDFLAGS)" \ -all - -owindows: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_OPT_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_GDI32_LDFLAGS)" \ -"STRIP_EXE=true" \ -all - -mwindows: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_NODISPLAY_CFLAGS) \ -$(CIMG_OPT_CFLAGS)" \ -"STRIP_EXE=true" \ -all - -Mwindows: - @$(MAKE) \ -"CONF_CFLAGS = \ -$(CIMG_OPT_CFLAGS) \ -$(CIMG_TIFF_CFLAGS) \ -$(CIMG_PNG_CFLAGS) \ -$(CIMG_JPEG_CFLAGS) \ -$(CIMG_ZLIB_CFLAGS) \ -$(CIMG_OPENCV_CFLAGS) \ -$(CIMG_FFTW3_CFLAGS)" \ -"CONF_LDFLAGS = \ -$(CIMG_GDI32_LDFLAGS) \ -$(CIMG_TIFF_LDFLAGS) \ -$(CIMG_PNG_LDFLAGS) \ -$(CIMG_JPEG_LDFLAGS) \ -$(CIMG_ZLIB_LDFLAGS) \ -$(CIMG_OPENCV_LDFLAGS) \ -$(CIMG_FFTW3_LDFLAGS)" \ -"STRIP_EXE=true" \ -all $(CIMG_EXTRA_FILES) - -#----------------- -# End of makefile -#----------------- diff --git a/deps/CImg/examples/captcha b/deps/CImg/examples/captcha deleted file mode 100755 index 9102fe1..0000000 Binary files a/deps/CImg/examples/captcha and /dev/null differ diff --git a/deps/CImg/examples/captcha.cpp b/deps/CImg/examples/captcha.cpp deleted file mode 100644 index 1b9388a..0000000 --- a/deps/CImg/examples/captcha.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - # - # File : captcha.cpp - # ( C++ source file ) - # - # Description : Captcha images generator. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_debug -#define cimg_debug 1 -#endif -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line parameters - //------------------------------ - cimg_usage("Simple captcha generator."); - const char *file_o = cimg_option("-o",(const char*)0,"Output image file"); - const bool add_border = cimg_option("-b",true,"Add border to captcha image"); - const bool visu = cimg_option("-visu",true,"Enable visualization if no output file"); - - // Generate captcha text (6 char max). - //------------------------------------ - const char *predef_words[] = { - "aarrgh", "abacas", "abacus", "abakas", "abamps", "abased", "abaser", "abases", "abasia", "abated", "abater", "abates", "abatis", "abator", - "baobab", "barbal", "barbed", "barbel", "barber", "barbes", "barbet", "barbie", "barbut", "barcas", "barded", "bardes", "bardic", "barege", - "cavies", "cavils", "caving", "cavity", "cavort", "cawing", "cayman", "cayuse", "ceased", "ceases", "cebids", "ceboid", "cecity", "cedarn", - "dicast", "dicers", "dicier", "dicing", "dicker", "dickey", "dickie", "dicots", "dictum", "didact", "diddle", "diddly", "didies", "didoes", - "emails", "embalm", "embank", "embark", "embars", "embays", "embeds", "embers", "emblem", "embody", "emboli", "emboly", "embosk", "emboss", - "fluffy", "fluids", "fluish", "fluked", "flukes", "flukey", "flumed", "flumes", "flumps", "flunks", "flunky", "fluors", "flurry", "fluted", - "genome", "genoms", "genres", "genros", "gentes", "gentil", "gentle", "gently", "gentry", "geodes", "geodic", "geoids", "gerahs", "gerbil", - "hotter", "hottie", "houdah", "hounds", "houris", "hourly", "housed", "housel", "houser", "houses", "hovels", "hovers", "howdah", "howdie", - "inland", "inlays", "inlets", "inlier", "inmate", "inmesh", "inmost", "innage", "innate", "inners", "inning", "inpour", "inputs", "inroad", - "joypop", "jubbah", "jubhah", "jubile", "judder", "judged", "judger", "judges", "judoka", "jugate", "jugful", "jugged", "juggle", "jugula", - "knifer", "knifes", "knight", "knives", "knobby", "knocks", "knolls", "knolly", "knosps", "knotty", "knouts", "knower", "knowns", "knubby", - "legate", "legato", "legend", "legers", "legged", "leggin", "legion", "legist", "legits", "legman", "legmen", "legong", "legume", "lehuas", - "mammal", "mammas", "mammee", "mammer", "mammet", "mammey", "mammie", "mammon", "mamzer", "manage", "manana", "manats", "manche", "manege", - "nihils", "nilgai", "nilgau", "nilled", "nimble", "nimbly", "nimbus", "nimmed", "nimrod", "ninety", "ninjas", "ninons", "ninths", "niobic", - "offish", "offkey", "offset", "oftest", "ogdoad", "oghams", "ogival", "ogives", "oglers", "ogling", "ogress", "ogrish", "ogrism", "ohmage", - "papaws", "papaya", "papers", "papery", "pappus", "papula", "papule", "papyri", "parade", "paramo", "parang", "paraph", "parcel", "pardah", - "quasar", "quatre", "quaver", "qubits", "qubyte", "queans", "queasy", "queazy", "queens", "queers", "quelea", "quells", "quench", "querns", - "raised", "raiser", "raises", "raisin", "raitas", "rajahs", "rakees", "rakers", "raking", "rakish", "rallye", "ralphs", "ramada", "ramate", - "savory", "savour", "savoys", "sawers", "sawfly", "sawing", "sawlog", "sawney", "sawyer", "saxony", "sayeds", "sayers", "sayest", "sayids", - "tondos", "toneme", "toners", "tongas", "tonged", "tonger", "tongue", "tonics", "tonier", "toning", "tonish", "tonlet", "tonner", "tonnes", - "uredia", "uredos", "ureide", "uremia", "uremic", "ureter", "uretic", "urgent", "urgers", "urging", "urials", "urinal", "urines", "uropod", - "villus", "vimina", "vinals", "vincas", "vineal", "vinery", "vinier", "vinify", "vining", "vinous", "vinyls", "violas", "violet", "violin", - "webfed", "weblog", "wechts", "wedded", "wedder", "wedeln", "wedels", "wedged", "wedges", "wedgie", "weeded", "weeder", "weekly", "weened", - "xystoi", "xystos", "xystus", "yabber", "yabbie", "yachts", "yacked", "yaffed", "yagers", "yahoos", "yairds", "yakked", "yakker", "yakuza", - "zigged", "zigzag", "zillah", "zinced", "zincic", "zincky", "zinebs", "zinged", "zinger", "zinnia", "zipped", "zipper", "zirams", "zircon" }; - cimg::srand(); - const char *const captcha_text = predef_words[std::rand()%(sizeof(predef_words)/sizeof(char*))]; - - // Create captcha image - //---------------------- - - // Write colored and distorted text - CImg captcha(256,64,1,3,0), color(3); - char letter[2] = { 0 }; - for (unsigned int k = 0; k<6; ++k) { - CImg tmp; - *letter = captcha_text[k]; - if (*letter) { - cimg_forX(color,i) color[i] = (unsigned char)(128+(std::rand()%127)); - tmp.draw_text((int)(2+8*cimg::rand()), - (int)(12*cimg::rand()), - letter,color.data(),0,1,std::rand()%2?38:57).resize(-100,-100,1,3); - const unsigned int dir = std::rand()%4, wph = tmp.width()+tmp.height(); - cimg_forXYC(tmp,x,y,v) { - const int val = dir==0?x+y:(dir==1?x+tmp.height()-y:(dir==2?y+tmp.width()-x:tmp.width()-x+tmp.height()-y)); - tmp(x,y,v) = (unsigned char)cimg::max(0.0f,cimg::min(255.0f,1.5f*tmp(x,y,v)*val/wph)); - } - if (std::rand()%2) tmp = (tmp.get_dilate(3)-=tmp); - tmp.blur((float)cimg::rand()*0.8f).normalize(0,255); - const float sin_offset = (float)cimg::crand()*3, sin_freq = (float)cimg::crand()/7; - cimg_forYC(captcha,y,v) captcha.get_shared_row(y,0,v).shift((int)(4*std::cos(y*sin_freq+sin_offset))); - captcha.draw_image(6+40*k,tmp); - } - } - - // Add geometric and random noise - CImg copy = (+captcha).fill(0); - for (unsigned int l = 0; l<3; ++l) { - if (l) copy.blur(0.5f).normalize(0,148); - for (unsigned int k = 0; k<10; ++k) { - cimg_forX(color,i) color[i] = (unsigned char)(128 + cimg::rand()*127); - if (cimg::rand()<0.5f) copy.draw_circle((int)(cimg::rand()*captcha.width()), - (int)(cimg::rand()*captcha.height()), - (int)(cimg::rand()*30), - color.data(),0.6f,~0U); - else copy.draw_line((int)(cimg::rand()*captcha.width()), - (int)(cimg::rand()*captcha.height()), - (int)(cimg::rand()*captcha.width()), - (int)(cimg::rand()*captcha.height()), - color.data(),0.6f); - } - } - captcha|=copy; - captcha.noise(10,2); - - if (add_border) captcha.draw_rectangle(0,0,captcha.width()-1,captcha.height()-1,CImg::vector(255,255,255).data(),1.0f,~0U); - captcha = (+captcha).fill(255) - captcha; - - // Write output image and captcha text - //------------------------------------- - std::printf("%s\n",captcha_text); - if (file_o) captcha.save(file_o); - else if (visu) { - CImgDisplay disp(CImg(512,128,1,3,180).draw_image(128,32,captcha),captcha_text,0); - while (!disp.is_closed() && !disp.key()) { disp.wait(); if (disp.is_resized()) disp.resize(disp).wait(100); } - } - return 0; -} - diff --git a/deps/CImg/examples/curve_editor2d b/deps/CImg/examples/curve_editor2d deleted file mode 100755 index f67a824..0000000 Binary files a/deps/CImg/examples/curve_editor2d and /dev/null differ diff --git a/deps/CImg/examples/curve_editor2d.cpp b/deps/CImg/examples/curve_editor2d.cpp deleted file mode 100644 index 653b84a..0000000 --- a/deps/CImg/examples/curve_editor2d.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* - # - # File : curve_editor2d.cpp - # ( C++ source file ) - # - # Description : A simple user interface to construct 2D spline curves. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # Antonio Albiol Colomer - # ( http://personales.upv.es/~aalbiol/index-english.html ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Compute distance from a point to a segment. -//--------------------------------------------- -float dist_segment(const float x, const float y, const float x1, const float y1, const float x2, const float y2) { - const float - dx = x2 - x1, - dy = y2 - y1, - long_segment = (float)std::sqrt(dx*dx + dy*dy); - if (long_segment==0) { const float ddx = x - x1, ddy = y - y1; return (float)std::sqrt(ddx*ddx + ddy*ddy); } - const float - unitx = dx/long_segment, - unity = dy/long_segment, - vx = x - x1, - vy = y - y1, - long_proy = vx*unitx + vy*unity, - proyx = x1 + long_proy*unitx, - proyy = y1 + long_proy*unity; - if (long_proy>long_segment) { const float ddx = x - x2, ddy = y - y2; return std::sqrt(ddx*ddx+ddy*ddy); } - else if (long_proy<0) { const float ddx = x - x1, ddy = y - y1; return std::sqrt(ddx*ddx+ddy*ddy); } - const float ddx = x - proyx, ddy = y - proyy; - return std::sqrt(ddx*ddx+ddy*ddy); -} - -// Main procedure -//--------------- -int main(int argc, char **argv) { - - // Read command line parameters - //----------------------------- - cimg_usage("2D Spline Curve Editor"); - const char *file_i = cimg_option("-i",(char*)0,"Input image"); - const float contrast = cimg_option("-contrast",0.6f,"Image contrast"); - const char *file_ip = cimg_option("-ip",(char*)0,"Input control points"); - const char *file_oc = cimg_option("-oc",(char*)0,"Output curve points"); - const char *file_op = cimg_option("-op",(char*)0,"Output control points"); - const char *file_od = cimg_option("-od",(char*)0,"Output distance function"); - bool interp = cimg_option("-poly",true,"Use polynomial interpolation"); - bool closed = cimg_option("-closed",true,"Closed curve"); - bool show_tangents = cimg_option("-tangents",false,"Show tangents"); - bool show_points = cimg_option("-points",true,"Show control points"); - bool show_outline = cimg_option("-outline",true,"Show polygon outline"); - bool show_indices = cimg_option("-indices",true,"Show points indices"); - bool show_coordinates = cimg_option("-coords",false,"Show points coordinates"); - const float precision = cimg_option("-prec",0.05f,"Precision of curve discretization"); - - // Init image data - //----------------- - const unsigned char yellow[] = { 255,255,0 }, white[] = { 255,255,255 }, green[] = { 0,255,0 }, - blue[] = { 120,200,255 }, purple[] = { 255,100,255 }, black[] = { 0,0,0 }; - CImg img0, img, help_img; - if (file_i) { - std::fprintf(stderr,"\n - Load input image '%s' : ",cimg::basename(file_i)); - img0 = CImg<>(file_i).normalize(0,255.0f*contrast); - std::fprintf(stderr,"Size = %dx%dx%dx%d \n",img0.width(),img0.height(),img0.depth(),img0.spectrum()); - img0.resize(-100,-100,1,3); - } - else { - std::fprintf(stderr,"\n - No input image specified, use default 512x512 image.\n"); - img0.assign(512,512,1,3,0).draw_grid(32,32,0,0,false,false,green,0.4f,0xCCCCCCCC,0xCCCCCCCC); - } - - help_img.assign(220,210,1,3,0). - draw_text(5,5, - "------------------------------------------\n" - "2D Curve Editor\n" - "------------------------------------------\n" - "Left button : Create or move control point\n" - "Right button : Delete control point\n" - "Spacebar : Switch interpolation\n" - "Key 'C' : Switch open/closed mode\n" - "Key 'T' : Show/hide tangents\n" - "Key 'P' : Show/hide control points\n" - "Key 'O' : Show/hide polygon outline\n" - "Key 'N' : Show/hide points indices\n" - "Key 'X' : Show/hide points coordinates\n" - "Key 'H' : Show/hide this help\n" - "Key 'S' : Save control points\n" - "Key 'R' : Reset curve\n", - green); - CImgDisplay disp(img0,"2D Curve Editor",0); - CImgList points, curve; - bool moving = false, help = !file_i; - - if (file_ip) { - std::fprintf(stderr," - Load input control points '%s' : ",cimg::basename(file_ip)); - points = CImg<>(file_ip).transpose()<'x'; - std::fprintf(stderr," %u points\n",points.size()); - } - - // Enter interactive loop - //------------------------ - while (!disp.is_closed() && !disp.is_keyESC() && !disp.is_keyQ()) { - - // Handle mouse manipulation - //--------------------------- - const unsigned int button = disp.button(); - const float - x = disp.mouse_x()*(float)img0.width()/disp.width(), - y = disp.mouse_y()*(float)img0.height()/disp.height(); - - if (points && button && x>=0 && y>=0) { - - // Find nearest point and nearest segment - float dmin_pt = cimg::type::max(), dmin_seg = dmin_pt; - unsigned int p_pt = 0, p_seg = 0; - cimglist_for(points,p) { - const unsigned int - pnext = closed?(p+1)%points.size():(p+1<(int)points.size()?p+1:p); - const float - xp = points(p,0), - yp = points(p,1); - const float - d_pt = (xp-x)*(xp-x) + (yp-y)*(yp-y), - d_seg = dist_segment(x,y,xp,yp,points(pnext,0),points(pnext,1)); - if (d_pt::vector(x,y),p_seg+1); - moving = true; - } - if (button&2 && dmin_pt<100) { - if (points.size()>3) points.remove(p_pt); - disp.set_button(); - } - } - if (!button) moving = false; - - if (disp.key()) { - switch (disp.key()) { - case cimg::keySPACE : interp = !interp; break; - case cimg::keyC : closed = !closed; break; - case cimg::keyT : show_tangents = !show_tangents; break; - case cimg::keyP : show_points = !show_points; break; - case cimg::keyO : show_outline = !show_outline; break; - case cimg::keyN : show_indices = !show_indices; break; - case cimg::keyX : show_coordinates = !show_coordinates; break; - case cimg::keyR : points.assign(); break; - case cimg::keyH : help = !help; break; - case cimg::keyS : { - const char *filename = file_op?file_op:"curve_points.dlm"; - std::fprintf(stderr," - Save control points in '%s'\n",filename); - (points>'x').transpose().save(filename); - } break; - } - disp.set_key(); - } - - // Init list of points if empty - //------------------------------ - if (!points) { - const float - x0 = img0.width()/4.0f, - y0 = img0.height()/4.0f, - x1 = img0.width() - x0, - y1 = img0.height() - y0; - points.insert(CImg<>::vector(x0,y0)). - insert(CImg<>::vector(x1,y0)). - insert(CImg<>::vector(x1,y1)). - insert(CImg<>::vector(x0,y1)); - } - - // Estimate curve tangents - //------------------------- - CImg<> tangents(points.size(),2); - cimglist_for(points,p) { - const unsigned int - p0 = closed?(p+points.size()-1)%points.size():(p?p-1:0), - p1 = closed?(p+1)%points.size():(p+1<(int)points.size()?p+1:p); - const float - x = points(p,0), - y = points(p,1), - x0 = points(p0,0), - y0 = points(p0,1), - x1 = points(p1,0), - y1 = points(p1,1), - u0 = x-x0, - v0 = y-y0, - n0 = 1e-8f + (float)std::sqrt(u0*u0 + v0*v0), - u1 = x1-x, - v1 = y1-y, - n1 = 1e-8f + (float)std::sqrt(u1*u1 + v1*v1), - u = u0/n0 + u1/n1, - v = v0/n0 + v1/n1, - n = 1e-8f + (float)std::sqrt(u*u + v*v), - fact = 0.5f*(n0 + n1); - tangents(p,0) = fact*u/n; - tangents(p,1) = fact*v/n; - } - - // Estimate 3th-order polynomial interpolation - //--------------------------------------------- - curve.assign(); - const unsigned int pmax = points.size()-(closed?0:1); - for (unsigned int p0 = 0; p0::vector(xt,yt)); - } - } - - // Draw curve and display image - //------------------------------- - const float - factx = (float)disp.width()/img0.width(), - facty = (float)disp.height()/img0.height(); - img = img0.get_resize(disp.width(),disp.height()); - if (help) img.draw_image(help_img,0.6f); - if (interp && show_outline) { - CImg<> npoints = points>'x'; - npoints.get_shared_row(0)*=factx; - npoints.get_shared_row(1)*=facty; - img.draw_polygon(npoints,blue,0.4f); - if (closed) img.draw_polygon(npoints,yellow,0.8f,0x11111111); - else img.draw_line(npoints,yellow,0.8f,0x11111111); - } - CImg<> ncurve = curve>'x'; - ncurve.get_shared_row(0)*=factx; - ncurve.get_shared_row(1)*=facty; - if (closed) img.draw_polygon(ncurve,white,1.0f,~0U); - else img.draw_line(ncurve,white); - - if (show_points) cimglist_for(points,p) { - const float - x = points(p,0)*factx, - y = points(p,1)*facty; - if (show_tangents) { - const float - u = tangents(p,0), - v = tangents(p,1), - n = 1e-8f + (float)std::sqrt(u*u + v*v), - nu = u/n, - nv = v/n; - img.draw_arrow((int)(x - 15*nu),(int)(y - 15*nv),(int)(x + 15*nu),(int)(y + 15*nv),green); - } - if (show_indices) img.draw_text((int)x,(int)(y-16),"%d",purple,black,1,13,p); - if (show_coordinates) img.draw_text((int)(x-24),(int)(y+8),"(%d,%d)",yellow,black,0.5f,13,(int)points(p,0),(int)points(p,1)); - img.draw_circle((int)x,(int)y,3,blue,0.7f); - } - - img.display(disp); - disp.wait(); - - if (disp.is_resized()) disp.resize(false); - } - - // Save output result and exit - //----------------------------- - if (file_op) { - std::fprintf(stderr," - Save control points in '%s'\n",cimg::basename(file_op)); - (points>'x').transpose().save(file_op); - } - if (file_oc) { - std::fprintf(stderr," - Save curve points in '%s'\n",cimg::basename(file_oc)); - (curve>'x').transpose().save(file_oc); - } - if (file_od) { - std::fprintf(stderr," - Computing distance function, please wait...."); std::fflush(stderr); - CImg<> ncurve = (closed?(+curve).insert(curve[0]):curve)>'x'; - const float zero = 0.0f, one = 1.0f; - CImg<> distance = - CImg<>(img0.width(),img0.height(),1,1,-1.0f).draw_line(ncurve,&zero).draw_fill(0,0,&one). - distance(0); - std::fprintf(stderr,"\n - Save distance function in '%s'\n",cimg::basename(file_od)); - distance.save(file_od); - } - - std::fprintf(stderr," - Exit.\n"); - std::exit(0); - return 0; -} diff --git a/deps/CImg/examples/dtmri_view3d b/deps/CImg/examples/dtmri_view3d deleted file mode 100755 index e4136bf..0000000 Binary files a/deps/CImg/examples/dtmri_view3d and /dev/null differ diff --git a/deps/CImg/examples/dtmri_view3d.cpp b/deps/CImg/examples/dtmri_view3d.cpp deleted file mode 100644 index 530b346..0000000 --- a/deps/CImg/examples/dtmri_view3d.cpp +++ /dev/null @@ -1,552 +0,0 @@ -/* - # - # File : dtmri_view3d.cpp - # ( C++ source file ) - # - # Description : A viewer of Diffusion-Tensor MRI volumes (medical imaging). - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Compute fractional anisotropy (FA) of a tensor -//------------------------------------------- -template float get_FA(const T& val1, const T& val2, const T& val3) { - const float - l1 = val1>0?val1:0, l2 = val2>0?val2:0, l3 = val3>0?val3:0, - lm = (l1+l2+l3)/3, - tr2 = 2*(l1*l1 + l2*l2 + l3*l3), - ll1 = l1-lm, - ll2 = l2-lm, - ll3 = l3-lm; - if (tr2>0) return (float)std::sqrt(3*(ll1*ll1 + ll2*ll2 + ll3*ll3)/tr2); - return 0; -} - -// Insert an ellipsoid in a CImg 3D scene -//---------------------------------------- -template -void insert_ellipsoid(const CImg& tensor, const float X, const float Y, const float Z, const float tfact, - const float vx, const float vy, const float vz, - CImgList& points, CImgList& faces, CImgList& colors, - const unsigned int res1=20, const unsigned int res2=20) { - - // Compute eigen elements - float l1 = tensor[0], l2 = tensor[1], l3 = tensor[2], fa = get_FA(l1,l2,l3); - CImg<> vec = CImg<>::matrix(tensor[3],tensor[6],tensor[9], - tensor[4],tensor[7],tensor[10], - tensor[5],tensor[8],tensor[11]); - const int - r = (int)cimg::min(30 + 1.5f*cimg::abs(255*fa*tensor[3]),255.0f), - g = (int)cimg::min(30 + 1.5f*cimg::abs(255*fa*tensor[4]),255.0f), - b = (int)cimg::min(30 + 1.5f*cimg::abs(255*fa*tensor[5]),255.0f); - - // Define mesh points - const unsigned int N0 = points.size(); - for (unsigned int v = 1; v::vector(X,Y,Z) + vec*CImg::vector(x,y,z)).mul(CImg::vector(vx,vy,vz))); - } - const unsigned int N1 = points.size(); - points.insert((CImg::vector(X,Y,Z) - vec*CImg::vector(0,0,l3*tfact))); - points.insert((CImg::vector(X,Y,Z) + vec*CImg::vector(0,0,l3*tfact))); - points[points.size()-2](0)*=vx; points[points.size()-2](1)*=vy; points[points.size()-2](2)*=vz; - points[points.size()-1](0)*=vx; points[points.size()-1](1)*=vy; points[points.size()-1](2)*=vz; - - // Define mesh triangles - for (unsigned int vv = 0; vv::vector(N0+res1*vv+nu,N0+res1*nv+uu,N0+res1*vv+uu)); - faces.insert(CImg::vector(N0+res1*vv+nu,N0+res1*nv+nu,N0+res1*nv+uu)); - colors.insert(CImg::vector(r,g,b)); - colors.insert(CImg::vector(r,g,b)); - } - for (unsigned int uu = 0; uu::vector(N0+nu,N0+uu,N1)); - faces.insert(CImg::vector(N0+res1*(res2-2)+nu, N1+1,N0+res1*(res2-2)+uu)); - colors.insert(CImg::vector(r,g,b)); - colors.insert(CImg::vector(r,g,b)); - } -} - -// Insert a fiber in a CImg 3D scene -//----------------------------------- -template -void insert_fiber(const CImg& fiber, const CImg& eigen, const CImg& palette, - const int xm, const int ym, const int zm, - const float vx, const float vy, const float vz, - CImgList& points, CImgList& primitives, CImgList& colors) { - const int N0 = points.size(); - float x0 = fiber(0,0), y0 = fiber(0,1), z0 = fiber(0,2), fa0 = eigen.linear_atXYZ(x0,y0,z0,12); - points.insert(CImg<>::vector(vx*(x0-xm),vy*(y0-ym),vz*(z0-zm))); - for (int l = 1; l::vector(vx*(x1-xm),vy*(y1-ym),vz*(z1-zm))); - primitives.insert(CImg::vector(N0+l-1,N0+l)); - const unsigned char - icol = (unsigned char)(fa0*255), - r = palette(icol,0), - g = palette(icol,1), - b = palette(icol,2); - colors.insert(CImg::vector(r,g,b)); - x0 = x1; y0 = y1; z0 = z1; fa0 = fa1; - } -} - -// Compute fiber tracking using 4th-order Runge Kutta integration -//----------------------------------------------------------------- -template -CImg<> get_fibertrack(CImg& eigen, - const int X0, const int Y0, const int Z0, const float lmax=100, - const float dl=0.1f, const float FAmin=0.7f, const float cmin=0.5f) { -#define align_eigen(i,j,k) \ - { T &u = eigen(i,j,k,3), &v = eigen(i,j,k,4), &w = eigen(i,j,k,5); \ - if (u*cu+v*cv+w*cw<0) { u=-u; v=-v; w=-w; }} - - CImgList<> resf; - - // Forward tracking - float normU = 0, normpU = 0, l = 0, X = (float)X0, Y = (float)Y0, Z = (float)Z0; - T - pu = eigen(X0,Y0,Z0,3), - pv = eigen(X0,Y0,Z0,4), - pw = eigen(X0,Y0,Z0,5); - normpU = (float)std::sqrt(pu*pu + pv*pv + pw*pw); - bool stopflag = false; - - while (!stopflag) { - if (X<0 || X>eigen.width()-1 || Y<0 || Y>eigen.height()-1 || Z<0 || Z>eigen.depth()-1 || - eigen((int)X,(int)Y,(int)Z,12)lmax) stopflag = true; - else { - resf.insert(CImg<>::vector(X,Y,Z)); - - const int - cx = (int)X, px = (cx-1<0)?0:cx-1, nx = (cx+1>=eigen.width())?eigen.width()-1:cx+1, - cy = (int)Y, py = (cy-1<0)?0:cy-1, ny = (cy+1>=eigen.height())?eigen.height()-1:cy+1, - cz = (int)Z, pz = (cz-1<0)?0:cz-1, nz = (cz+1>=eigen.depth())?eigen.depth()-1:cz+1; - const T cu = eigen(cx,cy,cz,3), cv = eigen(cx,cy,cz,4), cw = eigen(cx,cy,cz,5); - - align_eigen(px,py,pz); align_eigen(cx,py,pz); align_eigen(nx,py,pz); - align_eigen(px,cy,pz); align_eigen(cx,cy,pz); align_eigen(nx,cy,pz); - align_eigen(px,ny,pz); align_eigen(cx,ny,pz); align_eigen(nx,ny,pz); - align_eigen(px,py,cz); align_eigen(cx,py,cz); align_eigen(nx,py,cz); - align_eigen(px,cy,cz); align_eigen(nx,cy,cz); - align_eigen(px,ny,cz); align_eigen(cx,ny,cz); align_eigen(nx,ny,cz); - align_eigen(px,py,nz); align_eigen(cx,py,nz); align_eigen(nx,py,nz); - align_eigen(px,cy,nz); align_eigen(cx,cy,nz); align_eigen(nx,cy,nz); - align_eigen(px,ny,nz); align_eigen(cx,ny,nz); align_eigen(nx,ny,nz); - - const T - u0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,3), - v0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,4), - w0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,5), - u1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,3), - v1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,4), - w1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,5), - u2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,3), - v2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,4), - w2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,5), - u3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,3), - v3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,4), - w3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,5); - T - u = u0/3 + 2*u1/3 + 2*u2/3 + u3/3, - v = v0/3 + 2*v1/3 + 2*v2/3 + v3/3, - w = w0/3 + 2*w1/3 + 2*w2/3 + w3/3; - if (u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } - normU = (float)std::sqrt(u*u + v*v + w*w); - const float scal = (u*pu + v*pv + w*pw)/(normU*normpU); - if (scaleigen.width()-1 || Y<0 || Y>eigen.height()-1 || Z<0 || Z>eigen.depth()-1 || - eigen((int)X,(int)Y,(int)Z,12)lmax) stopflag = true; - else { - - const int - cx = (int)X, px = (cx-1<0)?0:cx-1, nx = (cx+1>=eigen.width())?eigen.width()-1:cx+1, - cy = (int)Y, py = (cy-1<0)?0:cy-1, ny = (cy+1>=eigen.height())?eigen.height()-1:cy+1, - cz = (int)Z, pz = (cz-1<0)?0:cz-1, nz = (cz+1>=eigen.depth())?eigen.depth()-1:cz+1; - const T cu = eigen(cx,cy,cz,3), cv = eigen(cx,cy,cz,4), cw = eigen(cx,cy,cz,5); - - align_eigen(px,py,pz); align_eigen(cx,py,pz); align_eigen(nx,py,pz); - align_eigen(px,cy,pz); align_eigen(cx,cy,pz); align_eigen(nx,cy,pz); - align_eigen(px,ny,pz); align_eigen(cx,ny,pz); align_eigen(nx,ny,pz); - align_eigen(px,py,cz); align_eigen(cx,py,cz); align_eigen(nx,py,cz); - align_eigen(px,cy,cz); align_eigen(nx,cy,cz); - align_eigen(px,ny,cz); align_eigen(cx,ny,cz); align_eigen(nx,ny,cz); - align_eigen(px,py,nz); align_eigen(cx,py,nz); align_eigen(nx,py,nz); - align_eigen(px,cy,nz); align_eigen(cx,cy,nz); align_eigen(nx,cy,nz); - align_eigen(px,ny,nz); align_eigen(cx,ny,nz); align_eigen(nx,ny,nz); - - const T - u0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,3), - v0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,4), - w0 = 0.5f*dl*eigen.linear_atXYZ(X,Y,Z,5), - u1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,3), - v1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,4), - w1 = 0.5f*dl*eigen.linear_atXYZ(X+u0,Y+v0,Z+w0,5), - u2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,3), - v2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,4), - w2 = 0.5f*dl*eigen.linear_atXYZ(X+u1,Y+v1,Z+w1,5), - u3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,3), - v3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,4), - w3 = 0.5f*dl*eigen.linear_atXYZ(X+u2,Y+v2,Z+w2,5); - T - u = u0/3 + 2*u1/3 + 2*u2/3 + u3/3, - v = v0/3 + 2*v1/3 + 2*v2/3 + v3/3, - w = w0/3 + 2*w1/3 + 2*w2/3 + w3/3; - if (u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } - normU = (float)std::sqrt(u*u + v*v + w*w); - const float scal = (u*pu + v*pv + w*pw)/(normU*normpU); - if (scal::vector(X,Y,Z),0); - } - } - - return resf>'x'; -} - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read and init data - //-------------------- - cimg_usage("A viewer of Diffusion-Tensor MRI volumes."); - const char *file_i = cimg_option("-i",(char*)0,"Input : Filename of tensor field (volume wxhxdx6)"); - const char* vsize = cimg_option("-vsize","1x1x1","Input : Voxel aspect"); - const bool normalize = cimg_option("-normalize",true,"Input : Enable tensor normalization"); - const char *file_f = cimg_option("-f",(char*)0,"Input : Input fibers\n"); - const float dl = cimg_option("-dl",0.5f,"Fiber computation : Integration step"); - const float famin = cimg_option("-famin",0.3f,"Fiber computation : Fractional Anisotropy threshold"); - const float cmin = cimg_option("-cmin",0.2f,"Fiber computation : Curvature threshold"); - const float lmin = cimg_option("-lmin",10.0f,"Fiber computation : Minimum length\n"); - const float lmax = cimg_option("-lmax",1000.0f,"Fiber computation : Maximum length\n"); - const float tfact = cimg_option("-tfact",1.2f,"Display : Tensor size factor"); - const char *bgcolor = cimg_option("-bg","0,0,0","Display : Background color"); - unsigned int bgr = 0, bgg = 0, bgb = 0; - std::sscanf(bgcolor,"%u%*c%u%*c%u",&bgr,&bgg,&bgb); - - CImg<> tensors; - if (file_i) { - std::fprintf(stderr,"\n- Loading tensors '%s'",cimg::basename(file_i)); - tensors.load(file_i); - } else { - // Create a synthetic tensor field here - std::fprintf(stderr,"\n- No input files : Creating a synthetic tensor field"); - tensors.assign(32,32,32,6); - cimg_forXYZ(tensors,x,y,z) { - const float - u = x - tensors.width()/2.0f, - v = y - tensors.height()/2.0f, - w = z - tensors.depth()/2.0f, - norm = (float)std::sqrt(1e-5f + u*u + v*v + w*w), - nu = u/norm, nv = v/norm, nw = w/norm; - const CImg<> - dir1 = CImg<>::vector(nu,nv,nw), - dir2 = CImg<>::vector(-nv,nu,nw), - dir3 = CImg<>::vector(nw*(nv-nu),-nw*(nu+nv),nu*nu+nv*nv); - tensors.set_tensor_at(2.0*dir1*dir1.get_transpose() + - 1.0*dir2*dir2.get_transpose() + - 0.7*dir3*dir3.get_transpose(), - x,y,z); - } - } - float voxw = 1, voxh = 1, voxd = 1; - std::sscanf(vsize,"%f%*c%f%*c%f",&voxw,&voxh,&voxd); - - std::fprintf(stderr," : %ux%ux%u image, voxsize=%gx%gx%g.", - tensors.width(),tensors.height(),tensors.depth(), - voxw,voxh,voxd); - - CImgList<> fibers; - if (file_f) { - std::fprintf(stderr,"\n- Loading fibers '%s'.",cimg::basename(file_f)); - fibers.load(file_f); - } - - const CImg fiber_palette = - CImg<>(2,1,1,3).fill(200,255,0,255,0,200).RGBtoHSV().resize(256,1,1,3,3).HSVtoRGB(); - - // Compute eigen elements - //------------------------ - std::fprintf(stderr,"\n- Compute eigen elements."); - CImg coloredFA(tensors.width(),tensors.height(),tensors.depth(),3); - CImg<> eigen(tensors.width(),tensors.height(),tensors.depth(),13); - CImg<> val,vec; - float eigmax = 0; - cimg_forXYZ(tensors,x,y,z) { - tensors.get_tensor_at(x,y,z).symmetric_eigen(val,vec); - eigen(x,y,z,0) = val[0]; eigen(x,y,z,1) = val[1]; eigen(x,y,z,2) = val[2]; - if (val[0]<0) val[0] = 0; - if (val[1]<0) val[1] = 0; - if (val[2]<0) val[2] = 0; - if (val[0]>eigmax) eigmax = val[0]; - eigen(x,y,z,3) = vec(0,0); eigen(x,y,z,4) = vec(0,1); eigen(x,y,z,5) = vec(0,2); - eigen(x,y,z,6) = vec(1,0); eigen(x,y,z,7) = vec(1,1); eigen(x,y,z,8) = vec(1,2); - eigen(x,y,z,9) = vec(2,0); eigen(x,y,z,10) = vec(2,1); eigen(x,y,z,11) = vec(2,2); - const float fa = get_FA(val[0],val[1],val[2]); - eigen(x,y,z,12) = fa; - const int - r = (int)cimg::min(255.0f,1.5f*cimg::abs(255*fa*vec(0,0))), - g = (int)cimg::min(255.0f,1.5f*cimg::abs(255*fa*vec(0,1))), - b = (int)cimg::min(255.0f,1.5f*cimg::abs(255*fa*vec(0,2))); - coloredFA(x,y,z,0) = (unsigned char)r; - coloredFA(x,y,z,1) = (unsigned char)g; - coloredFA(x,y,z,2) = (unsigned char)b; - } - tensors.assign(); - std::fprintf(stderr,"\n- Maximum diffusivity = %g, Maximum FA = %g",eigmax,eigen.get_shared_channel(12).max()); - if (normalize) { - std::fprintf(stderr,"\n- Normalize tensors."); - eigen.get_shared_channels(0,2)/=eigmax; - } - - // Init display and begin user interaction - //----------------------------------------- - std::fprintf(stderr,"\n- Open user window."); - CImgDisplay disp(256,256,"DTMRI Viewer",0); - CImgDisplay disp3d(800,600,"3D Local View",0,false,true); - unsigned int XYZ[3]; - XYZ[0] = eigen.width()/2; XYZ[1] = eigen.height()/2; XYZ[2] = eigen.depth()/2; - - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - const CImg s = coloredFA.get_select(disp,2,XYZ); - if (!disp.is_closed()) switch (disp.key()) { - - // Open 3D visualization window - //----------------------------- - case cimg::keyA : - case 0 : { - const unsigned char white[] = { 255 }; - disp3d.display(CImg(disp3d.width(),disp3d.height(),1,1,0).draw_text(10,10,"Please wait...",white)).show(); - int xm,ym,zm,xM,yM,zM; - if (!disp.key()) { xm = s[0]; ym = s[1]; zm = s[2]; xM = s[3]; yM = s[4]; zM = s[5]; } - else { xm = ym = zm = 0; xM = eigen.width() - 1; yM = eigen.height() - 1; zM = eigen.height() - 1; } - const CImg<> img = eigen.get_crop(xm,ym,zm,xM,yM,zM); - CImgList<> points; - CImgList primitives; - CImgList colors; - - // Add ellipsoids to the 3D scene - int X = img.width()/2, Y = img.height()/2, Z = img.depth()/2; - cimg_forXY(img,x,y) insert_ellipsoid(img.get_vector_at(x,y,Z),(float)x,(float)y,(float)Z,tfact,voxw,voxh,voxd,points,primitives,colors,10,6); - cimg_forXZ(img,x,z) insert_ellipsoid(img.get_vector_at(x,Y,z),(float)x,(float)Y,(float)z,tfact,voxw,voxh,voxd,points,primitives,colors,10,6); - cimg_forYZ(img,y,z) insert_ellipsoid(img.get_vector_at(X,y,z),(float)X,(float)y,(float)z,tfact,voxw,voxh,voxd,points,primitives,colors,10,6); - - // Add computed fibers to the 3D scene - const CImg<> veigen = eigen.get_crop(xm,ym,zm,xM,yM,zM); - cimglist_for(fibers,l) { - const CImg<>& fiber = fibers[l]; - if (fiber.width()) insert_fiber(fiber,eigen,fiber_palette, - xm,ym,zm,voxw,voxh,voxd, - points,primitives,colors); - } - - // Display 3D object - CImg visu = CImg(3,disp3d.width(),disp3d.height(),1,0).fill(bgr,bgg,bgb).permute_axes("yzcx"); - bool stopflag = false; - while (!disp3d.is_closed() && !stopflag) { - const CImg<> pts = points>'x'; - visu.display_object3d(disp3d,pts,primitives,colors,true,4,-1,false,800,0.05f,1.0f); - disp3d.close(); - switch (disp3d.key()) { - case cimg::keyM : { // Create movie - std::fprintf(stderr,"\n- Movie mode.\n"); - const unsigned int N = 256; - CImg<> cpts(pts); - const CImg<> x = pts.get_shared_row(0), y = pts.get_shared_row(1), z = pts.get_shared_row(2); - float - xm, xM = x.max_min(xm), - ym, yM = y.max_min(ym), - zm, zM = z.max_min(zm), - ratio = 2.0f*cimg::min(visu.width(),visu.height())/(3.0f*cimg::max(xM-xm,yM-ym,zM-zm)), - dx = 0.5f*(xM+xm), dy = 0.5f*(yM+ym), dz = 0.5f*(zM+zm); - cimg_forX(pts,l) { - cpts(l,0) = (pts(l,0)-dx)*ratio; - cpts(l,1) = (pts(l,1)-dy)*ratio; - cpts(l,2) = (pts(l,2)-dz)*ratio; - } - - for (unsigned int i=0; i rpts = CImg<>::rotation_matrix(0,1,0,alpha)*CImg<>::rotation_matrix(1,0,0,1.30f)*cpts; - visu.fill(0).draw_object3d(visu.width()/2.0f,visu.height()/2.0f,-500.0f,rpts,primitives,colors, - 4,false,800.0f,visu.width()/2.0f,visu.height()/2.0f,-800.0f,0.05f,1.0f).display(disp3d); - visu.save("frame.png",i); - } - visu.fill(0); - } break; - default: stopflag = true; - } - } - if (disp3d.is_fullscreen()) disp3d.toggle_fullscreen().resize(800,600).close(); - } break; - - // Compute region statistics - //--------------------------- - case cimg::keyR : { - std::fprintf(stderr,"\n- Statistics computation. Select region."); std::fflush(stderr); - const CImg s = coloredFA.get_select(disp,2,XYZ); - int xm, ym, zm, xM, yM, zM; - if (!disp.key()) { xm = s[0]; ym = s[1]; zm = s[2]; xM = s[3]; yM = s[4]; zM = s[5]; } - else { xm = ym = zm = 0; xM = eigen.width()-1; yM = eigen.height()-1; zM = eigen.height()-1; } - const CImg<> img = eigen.get_crop(xm,ym,zm,xM,yM,zM); - std::fprintf(stderr,"\n- Mean diffusivity = %g, Mean FA = %g\n", - eigen.get_shared_channel(0).mean(), - eigen.get_shared_channel(12).mean()); - } break; - - // Track fiber bundle (single region) - //---------------------------------- - case cimg::keyF : { - std::fprintf(stderr,"\n- Tracking mode (single region). Select starting region.\n"); std::fflush(stderr); - const CImg s = coloredFA.get_select(disp,2,XYZ); - const unsigned int N = fibers.size(); - for (int z=s[2]; z<=s[5]; z++) - for (int y=s[1]; y<=s[4]; y++) - for (int x=s[0]; x<=s[3]; x++) { - const CImg<> fiber = get_fibertrack(eigen,x,y,z,lmax,dl,famin,cmin); - if (fiber.width()>lmin) { - std::fprintf(stderr,"\rFiber %u : Starting from (%d,%d,%d)\t\t",fibers.size(),x,y,z); - fibers.insert(fiber); - } - } - std::fprintf(stderr,"\n- %u fiber(s) added (total %u).",fibers.size()-N,fibers.size()); - } break; - - // Track fiber bundle (double regions) - //------------------------------------ - case cimg::keyG : { - std::fprintf(stderr,"\n- Tracking mode (double region). Select starting region."); std::fflush(stderr); - const CImg s = coloredFA.get_select(disp,2,XYZ); - std::fprintf(stderr," Select ending region."); std::fflush(stderr); - const CImg ns = coloredFA.get_select(disp,2,XYZ); - const unsigned int N = fibers.size(); - - // Track from start to end - for (int z = s[2]; z<=s[5]; ++z) - for (int y = s[1]; y<=s[4]; ++y) - for (int x = s[0]; x<=s[3]; ++x) { - const CImg<> fiber = get_fibertrack(eigen,x,y,z,lmax,dl,famin,cmin); - if (fiber.width()>lmin) { - bool valid_fiber = false; - cimg_forX(fiber,k) { - const int fx = (int)fiber(k,0), fy = (int)fiber(k,1), fz = (int)fiber(k,2); - if (fx>=ns[0] && fx<=ns[3] && - fy>=ns[1] && fy<=ns[4] && - fz>=ns[2] && fz<=ns[5]) valid_fiber = true; - } - if (valid_fiber) fibers.insert(fiber); - } - } - - // Track from end to start - for (int z = ns[2]; z<=ns[5]; ++z) - for (int y = ns[1]; y<=ns[4]; ++y) - for (int x = ns[0]; x<=ns[3]; ++x) { - const CImg<> fiber = get_fibertrack(eigen,x,y,z,lmax,dl,famin,cmin); - if (fiber.width()>lmin) { - bool valid_fiber = false; - cimg_forX(fiber,k) { - const int fx = (int)fiber(k,0), fy = (int)fiber(k,1), fz = (int)fiber(k,2); - if (fx>=s[0] && fx<=s[3] && - fy>=s[1] && fy<=s[4] && - fz>=s[2] && fz<=s[5]) valid_fiber = true; - } - if (valid_fiber) { - std::fprintf(stderr,"\rFiber %u : Starting from (%d,%d,%d)\t\t",fibers.size(),x,y,z); - fibers.insert(fiber); - } - } - } - - std::fprintf(stderr," %u fiber(s) added (total %u).",fibers.size()-N,fibers.size()); - } break; - - // Clear fiber bundle - //------------------- - case cimg::keyC : { - std::fprintf(stderr,"\n- Fibers removed."); - fibers.assign(); - } break; - - // Save fibers - //------------- - case cimg::keyS : { - fibers.save("fibers.cimg"); - std::fprintf(stderr,"\n- Fibers saved."); - } break; - - } - } - - std::fprintf(stderr,"\n- Exit.\n\n\n"); - return 0; -} diff --git a/deps/CImg/examples/edge_explorer2d b/deps/CImg/examples/edge_explorer2d deleted file mode 100755 index 36a3656..0000000 Binary files a/deps/CImg/examples/edge_explorer2d and /dev/null differ diff --git a/deps/CImg/examples/edge_explorer2d.cpp b/deps/CImg/examples/edge_explorer2d.cpp deleted file mode 100644 index 718e710..0000000 --- a/deps/CImg/examples/edge_explorer2d.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - # - # File : edge_explorer2d.cpp - # ( C++ source file ) - # - # Description : Real time edge detection while moving a ROI - # (rectangle of interest) over the original image. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Orges Leka - # ( oleka(at)students.uni-mainz.de ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc, char** argv) { - - // Usage of the program displayed at the command line - cimg_usage("Real time edge detection with CImg. (c) Orges Leka"); - - // Read command line arguments - // With cimg_option we can get a new name for the image which is to be loaded from the command line. - const char* img_name = cimg_option("-i", cimg_imagepath "lena.pgm","Input image."); - double - alpha = cimg_option("-a",1.0,"Blurring the gradient image."), - thresL = cimg_option("-tl",13.5,"Lower thresholding used in Hysteresis."), - thresH = cimg_option("-th",13.6,"Higher thresholding used in Hysteresis."); - const unsigned int - mode = cimg_option("-m",1,"Detection mode: 1 = Hysteresis, 2 = Gradient angle."), - factor = cimg_option("-s",80,"Half-size of edge-explorer window."); - - cimg_help("\nAdditional notes : user can press following keys on main display window :\n" - " - Left arrow : Decrease alpha.\n" - " - Right arrow : Increase alpha.\n"); - - // Construct a new image called 'edge' of size (2*factor,2*factor) - // and of type 'unsigned char'. - CImg edge(2*factor,2*factor); - CImgDisplay disp_edge(512,512,"Edge Explorer"); - - // Load the image with the name 'img_name' into the CImg 'img'. - // and create a display window 'disp' for the image 'img'. - const CImg img(img_name); - CImgDisplay disp(img,"Original Image"); - - // Begin main interaction loop. - int x = 0, y = 0; - bool redraw = false; - while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { - disp.wait(100); - if (disp.button()&1) { alpha+=0.05; redraw = true; } - if (disp.button()&2) { alpha-=0.05; redraw = true; } - if (disp.wheel()) { alpha+=0.05*disp.wheel(); disp.set_wheel(); redraw = true; } - if (alpha<0) alpha = 0; - if (disp_edge.is_resized()) { disp_edge.resize(); redraw = true; } - if (disp_edge.is_closed()) disp_edge.show(); - if (disp.is_resized()) disp.resize(disp); - if (disp.mouse_x()>=0) { - x = disp.mouse_x(); // Getting the current position of the mouse. - y = disp.mouse_y(); // - redraw = true; // The image should be redrawn. - } - if (redraw) { - disp_edge.set_title("Edge explorer (alpha=%g)",alpha); - const int - x0 = x-factor, y0 = y-factor, // These are the coordinates for the red rectangle - x1 = x+factor, y1 = y+factor; // to be drawn on the original image. - const unsigned char - red[3] = { 255,0,0 }, // - black[3] = { 0,0,0 }; // Defining the colors we need for drawing. - - (+img).draw_rectangle(x0,y0,x1,y1,red,1.0f,0x55555555U).display(disp); - //^ We draw the red rectangle on the original window using 'draw_line'. Then we display the result via '.display(disp)' . - // Observe, that the color 'red' has to be of type 'const unsigned char', - // since the image 'img' is of type 'const CImg'. - - //'normalize' is used to get a greyscaled image. - CImg<> visu_bw = CImg<>(img).get_crop(x0,y0,x1,y1).get_norm().normalize(0,255).resize(-100,-100,1,2,2); - // get_crop(x0,y0,x1,y1) gets the rectangle we are interested in. - - edge.fill(255); // Background color in the edge-detection window is white. - - // grad[0] is the gradient image of 'visu_bw' in x-direction. - // grad[1] is the gradient image of 'visu_bw' in y-direction. - CImgList<> grad(visu_bw.blur((float)alpha).normalize(0,255).get_gradient()); - - // To avoid unnecessary calculations in the image loops: - const double - pi = cimg::PI, - p8 = pi/8.0, p38 = 3.0*p8, - p58 = 5.0*p8, p78 = 7.0*p8; - - cimg_forXY(visu_bw,s,t) { - // We take s,t instead of x,y, since x,y are already used. - // s corresponds to the x-ordinate of the pixel while t corresponds to the y-ordinate. - if ( 1 <= s && s <= visu_bw.width()-1 && 1 <= t && t <=visu_bw.height()-1) { // if - good points - double - Gs = grad[0](s,t), // - Gt = grad[1](s,t), // The actual pixel is (s,t) - Gst = cimg::abs(Gs) + cimg::abs(Gt), // - // ^-- For efficient computation we observe that |Gs|+ |Gt| ~=~ sqrt( Gs^2 + Gt^2) - Gr, Gur, Gu, Gul, Gl, Gdl, Gd, Gdr; - // ^-- right, up right, up, up left, left, down left, down, down right. - double theta = std::atan2(Gt,Gs)+pi; // theta is from the interval [0,Pi] - switch(mode) { - case 1: // Hysterese is applied - if (Gst>=thresH) { edge.draw_point(s,t,black); } - else if (thresL <= Gst && Gst < thresH) { - // Neighbourhood of the actual pixel: - Gr = cimg::abs(grad[0](s+1,t)) + cimg::abs(grad[1](s+1,t)); // right - Gl = cimg::abs(grad[0](s-1,t)) + cimg::abs(grad[1](s-1,t)); // left - Gur = cimg::abs(grad[0](s+1,t+1)) + cimg::abs(grad[1](s+1,t+1)); // up right - Gdl = cimg::abs(grad[0](s-1,t-1)) + cimg::abs(grad[1](s-1,t-1)); // down left - Gu = cimg::abs(grad[0](s,t+1)) + cimg::abs(grad[1](s,t+1)); // up - Gd = cimg::abs(grad[0](s,t-1)) + cimg::abs(grad[1](s,t-1)); // down - Gul = cimg::abs(grad[0](s-1,t+1)) + cimg::abs(grad[1](s-1,t+1)); // up left - Gdr = cimg::abs(grad[0](s+1,t-1)) + cimg::abs(grad[1](s+1,t-1)); // down right - if (Gr>=thresH || Gur>=thresH || Gu>=thresH || Gul>=thresH - || Gl>=thresH || Gdl >=thresH || Gu >=thresH || Gdr >=thresH) { - edge.draw_point(s,t,black); - } - }; - break; - case 2: // Angle 'theta' of the gradient (Gs,Gt) at the point (s,t). - if(theta >= pi)theta-=pi; - //rounding theta: - if ((p8 < theta && theta <= p38 ) || (p78 < theta && theta <= pi)) { - // See (*) below for explanation of the vocabulary used. - // Direction-pixel is (s+1,t) with corresponding gradient value Gr. - Gr = cimg::abs(grad[0](s+1,t)) + cimg::abs(grad[1](s+1,t)); // right - // Contra-direction-pixel is (s-1,t) with corresponding gradient value Gl. - Gl = cimg::abs(grad[0](s-1,t)) + cimg::abs(grad[1](s-1,t)); // left - if (Gr < Gst && Gl < Gst) { - edge.draw_point(s,t,black); - } - } - else if ( p8 < theta && theta <= p38) { - // Direction-pixel is (s+1,t+1) with corresponding gradient value Gur. - Gur = cimg::abs(grad[0](s+1,t+1)) + cimg::abs(grad[1](s+1,t+1)); // up right - // Contra-direction-pixel is (s-1,t-1) with corresponding gradient value Gdl. - Gdl = cimg::abs(grad[0](s-1,t-1)) + cimg::abs(grad[1](s-1,t-1)); // down left - if (Gur < Gst && Gdl < Gst) { - edge.draw_point(s,t,black); - } - } - else if ( p38 < theta && theta <= p58) { - // Direction-pixel is (s,t+1) with corresponding gradient value Gu. - Gu = cimg::abs(grad[0](s,t+1)) + cimg::abs(grad[1](s,t+1)); // up - // Contra-direction-pixel is (s,t-1) with corresponding gradient value Gd. - Gd = cimg::abs(grad[0](s,t-1)) + cimg::abs(grad[1](s,t-1)); // down - if (Gu < Gst && Gd < Gst) { - edge.draw_point(s,t,black); - } - } - else if (p58 < theta && theta <= p78) { - // Direction-pixel is (s-1,t+1) with corresponding gradient value Gul. - Gul = cimg::abs(grad[0](s-1,t+1)) + cimg::abs(grad[1](s-1,t+1)); // up left - // Contra-direction-pixel is (s+1,t-1) with corresponding gradient value Gdr. - Gdr = cimg::abs(grad[0](s+1,t-1)) + cimg::abs(grad[1](s+1,t-1)); // down right - if (Gul < Gst && Gdr < Gst) { - edge.draw_point(s,t,black); - } - }; - break; - } // switch - } // if good-points - } // cimg_forXY */ - edge.display(disp_edge); - }// if redraw - } // while - return 0; -} - -// (*) Comments to the vocabulary used: -// If (s,t) is the current pixel, and G=(Gs,Gt) is the gradient at (s,t), -// then the _direction_pixel_ of (s,t) shall be the one of the eight neighbour pixels -// of (s,t) in whose direction the gradient G shows. -// The _contra_direction_pixel is the pixel in the opposite direction in which the gradient G shows. -// The _corresponding_gradient_value_ of the pixel (x,y) with gradient G = (Gx,Gy) -// shall be |Gx|+|Gy| ~=~ sqrt(Gx^2+Gy^2). diff --git a/deps/CImg/examples/fade_images b/deps/CImg/examples/fade_images deleted file mode 100755 index afbded7..0000000 Binary files a/deps/CImg/examples/fade_images and /dev/null differ diff --git a/deps/CImg/examples/fade_images.cpp b/deps/CImg/examples/fade_images.cpp deleted file mode 100644 index ed69081..0000000 --- a/deps/CImg/examples/fade_images.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - # - # File : fade_images.cpp - # ( C++ source file ) - # - # Description : Compute a linear fading between two images. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif -#undef min -#undef max - -// Main procedure -//--------------- -int main(int argc,char **argv) { - - // Read and check command line parameters. - cimg_usage("Compute a linear fading between two 2D images"); - const char *file_i1 = cimg_option("-i1",cimg_imagepath "sh0r.pgm","Input Image 1"); - const char *file_i2 = cimg_option("-i2",cimg_imagepath "milla.bmp","Input Image 2"); - const char *file_o = cimg_option("-o",(char*)0,"Output Image"); - const bool visu = cimg_option("-visu",true,"Visualization mode"); - const double pmin = cimg_option("-min",40.0,"Begin of the fade (in %)")/100.0; - const double pmax = cimg_option("-max",60.0,"End of the fade (in %)")/100.0; - const double angle = cimg_option("-angle",0.0,"Fade angle")*cil::cimg::PI/180; - - // Init images. - cil::CImg img1(file_i1), img2(file_i2); - if (!img2.is_sameXYZC(img1)) { - int - dx = cil::cimg::max(img1.width(),img2.width()), - dy = cil::cimg::max(img1.height(),img2.height()), - dz = cil::cimg::max(img1.depth(),img2.depth()), - dv = cil::cimg::max(img1.spectrum(),img2.spectrum()); - img1.resize(dx,dy,dz,dv,3); - img2.resize(dx,dy,dz,dv,3); - } - cil::CImg dest(img1); - - // Compute the faded image. - const double ca = std::cos(angle), sa = std::sin(angle); - double alpha; - cimg_forXYZC(dest,x,y,z,k) { - const double X = ((double)x/img1.width() - 0.5)*ca + ((double)y/img1.height() - 0.5)*sa; - if (X+0.5pmax) alpha = 1; else - alpha = (X+0.5-pmin)/(pmax-pmin); - } - dest(x,y,z,k) = (unsigned char)((1 - alpha)*img1(x,y,z,k) + alpha*img2(x,y,z,k)); - } - - // Save and exit - if (file_o) dest.save(file_o); - if (visu) dest.display("Image fading"); - return 0; -} diff --git a/deps/CImg/examples/gaussian_fit1d b/deps/CImg/examples/gaussian_fit1d deleted file mode 100755 index 2a809a5..0000000 Binary files a/deps/CImg/examples/gaussian_fit1d and /dev/null differ diff --git a/deps/CImg/examples/gaussian_fit1d.cpp b/deps/CImg/examples/gaussian_fit1d.cpp deleted file mode 100644 index b02fd57..0000000 --- a/deps/CImg/examples/gaussian_fit1d.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - # - # File : gaussian_fit1d.cpp - # ( C++ source file ) - # - # Description : Fit a gaussian function on a set of sample points, - # using the Levenberg-Marquardt algorithm. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin -#define cimg_plugin "examples/gaussian_fit1d.cpp" -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Main procedure -//---------------- -int main(int argc,char **argv) { - cimg_usage("Fit gaussian function on sample points, using Levenberg-Marquardt algorithm."); - - // Read command line arguments. - const char *s_params = cimg_option("-p","10,3,4","Amplitude, Mean and Std of the ground truth"); - const unsigned int s_nb = cimg_option("-N",40,"Number of sample points"); - const float s_noise = cimg_option("-n",10.0f,"Pourcentage of noise on the samples points"); - const char *s_xrange = cimg_option("-x","-10,10","X-range allowed for the sample points"); - const char *f_params = cimg_option("-p0",(char*)0,"Amplitude, Mean and Std of the first estimate"); - const float f_lambda0 = cimg_option("-l",100.0f,"Initial damping factor"); - const float f_dlambda = cimg_option("-dl",0.9f,"Damping attenuation"); - float s_xmin = -10, s_xmax = 10, s_amp = 1, s_mean = 1, s_std = 1; - std::sscanf(s_xrange,"%f%*c%f",&s_xmin,&s_xmax); - std::sscanf(s_params,"%f%*c%f%*c%f",&s_amp,&s_mean,&s_std); - - // Create noisy samples of a Gaussian function. - const float s_std2 = 2*s_std*s_std, s_fact = s_amp/((float)std::sqrt(2*cimg::PI)*s_std); - CImg<> samples(s_nb,2); - cimg_forX(samples,i) { - const float - x = (float)(s_xmin + (s_xmax-s_xmin)*cimg::rand()), - y = s_fact*(float)(1 + s_noise*cimg::grand()/100)*std::exp(-cimg::sqr(x-s_mean)/s_std2); - samples(i,0) = x; - samples(i,1) = y; - } - - // Fit Gaussian function on the sample points and display curve iterations. - CImgDisplay disp(640,480,"Levenberg-Marquardt Gaussian Fitting",0); - float f_amp = 1, f_mean = 1, f_std = 1, f_lambda = f_lambda0; - if (f_params) std::sscanf(f_params,"%f%*c%f%*c%f",&f_amp,&f_mean,&f_std); - else { - const float& vmax = samples.get_shared_row(1).max(); - float cmax = 0; samples.contains(vmax,cmax); - f_mean = samples((int)cmax,0); - f_std = (s_xmax-s_xmin)/10; - f_amp = vmax*(float)std::sqrt(2*cimg::PI)*f_std; - } - CImg<> beta = CImg<>::vector(f_amp,f_mean,f_std); - for (unsigned int iter = 0; !disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC(); ++iter) { - - // Do one iteration of the Levenberg-Marquardt algorithm. - CImg<> YmF(1,s_nb), J(beta.height(),s_nb); - const float - f_amp = beta(0), f_mean = beta(1), f_std = beta(2), - f_std2 = 2*f_std*f_std, f_fact = (float)std::sqrt(2*cimg::PI)*f_std; - float f_error = 0; - cimg_forY(J,i) { - const float x = samples(i,0), f_exp = std::exp(-cimg::sqr(x-f_mean)/f_std2), delta = samples(i,1) - f_amp*f_exp/f_fact; - YmF(i) = delta; - J(0,i) = f_exp/f_fact; - J(1,i) = f_amp*f_exp/f_fact*(x-f_mean)*2/f_std2; - J(2,i) = f_amp*f_exp/f_fact*(cimg::sqr(x-f_mean)*2/f_std2-1); - f_error+=cimg::sqr(delta); - } - CImg<> Jt = J.get_transpose(), M = Jt*J; - cimg_forX(M,x) M(x,x)*=1 + f_lambda; - beta+=M.get_invert()*Jt*YmF; - if (beta(0)<=0) beta(0) = 0.1f; - if (beta(2)<=0) beta(2) = 0.1f; - f_lambda*=f_dlambda; - - // Display fitting curves. - const unsigned char black[] = { 0,0,0 }, gray[] = { 228,228,228 }; - CImg(disp.width(),disp.height(),1,3,255).draw_gaussfit(samples,beta(0),beta(1),beta(2),s_amp,s_mean,s_std). - draw_rectangle(5,7,150,100,gray,0.9f).draw_rectangle(5,7,150,100,black,1,~0U). - draw_text(10,10,"Iteration : %d",black,0,1,13,iter). - draw_text(10,25,"Amplitude : %.4g (%.4g)",black,0,1,13,beta(0),s_amp). - draw_text(10,40,"Mean : %.4g (%.4g)",black,0,1,13,beta(1),s_mean). - draw_text(10,55,"Std : %.4g (%.4g)",black,0,1,13,beta(2),s_std). - draw_text(10,70,"Error : %.4g",black,0,1,13,std::sqrt(f_error)). - draw_text(10,85,"Lambda : %.4g",black,0,1,13,f_lambda). - display(disp.resize(false).wait(20)); - } - - return 0; -} - -#else - -// Draw sample points, ideal and fitted gaussian curves on the instance image. -// (defined as a CImg plug-in function). -template -CImg& draw_gaussfit(const CImg& samples, - const float f_amp, const float f_mean, const float f_std, - const float i_amp, const float i_mean, const float i_std) { - if (is_empty()) return *this; - const unsigned char black[] = { 0,0,0 }, green[] = { 10,155,20 }, orange[] = { 155,20,0 }, purple[] = { 200,10,200 }; - float - xmin, xmax = samples.get_shared_row(0).max_min(xmin), deltax = xmax - xmin, - ymin, ymax = samples.get_shared_row(1).max_min(ymin), deltay = ymax - ymin; - xmin-=0.2f*deltax; xmax+=0.2f*deltax; ymin-=0.2f*deltay; ymax+=0.2f*deltay; - deltax = xmax-xmin; deltay = ymax-ymin; - draw_grid(64,64,0,0,false,false,black,0.3f,0x55555555,0x55555555).draw_axes(xmin,xmax,ymax,ymin,black,0.8f); - CImg<> nsamples(samples); - (nsamples.get_shared_row(0)-=xmin)*=width()/deltax; - (nsamples.get_shared_row(1)-=ymax)*=-height()/deltay; - cimg_forX(nsamples,i) draw_circle((int)nsamples(i,0),(int)nsamples(i,1),3,orange,1,~0U); - CImg truth(width(),2), fit(width(),2); - const float - i_std2 = 2*i_std*i_std, i_fact = i_amp/((float)std::sqrt(2*cimg::PI)*i_std), - f_std2 = 2*f_std*f_std, f_fact = f_amp/((float)std::sqrt(2*cimg::PI)*f_std); - cimg_forX(*this,x) { - const float - x0 = xmin + x*deltax/width(), - ys0 = i_fact*std::exp(-cimg::sqr(x0-i_mean)/i_std2), - yf0 = f_fact*std::exp(-cimg::sqr(x0-f_mean)/f_std2); - fit(x,0) = truth(x,0) = x; - truth(x,1) = (int)((ymax-ys0)*height()/deltay); - fit(x,1) = (int)((ymax-yf0)*height()/deltay); - } - return draw_line(truth,green,0.7f,0xCCCCCCCC).draw_line(fit,purple); -} - -#endif - diff --git a/deps/CImg/examples/generate_loop_macros b/deps/CImg/examples/generate_loop_macros deleted file mode 100755 index 87c6519..0000000 Binary files a/deps/CImg/examples/generate_loop_macros and /dev/null differ diff --git a/deps/CImg/examples/generate_loop_macros.cpp b/deps/CImg/examples/generate_loop_macros.cpp deleted file mode 100644 index ceb0a67..0000000 --- a/deps/CImg/examples/generate_loop_macros.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* - # - # File : generate_loop_macros.cpp - # ( C++ source file ) - # - # Description : Generate C++ macros to deal with MxN[xP] neighborhood - # loops within the CImg Library. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; - -// Generate macro(s) 'cimg_forN(i,bound)' -//---------------------------------------- -void generate_forN(const unsigned int N) { - if (N>=2) { - const unsigned int Nn = N/2, Np = Nn-((N+1)%2); - std::printf("#define cimg_for%u(bound,i) for (int i = 0, \\\n",N); - for (unsigned int k = 0; k=(int)(bound)?(int)(bound)-1:%u%c \\\n",k,k,k,k==Nn?';':','); - std::printf(" _n%u##i<(int)(bound) || ",Nn); - for (unsigned int k = Nn-1; k>=1; --k) std::printf("_n%u##i==--_n%u##i || ",k,k+1); - std::printf("\\\n i==("); - for (unsigned int k = Nn; k>=2; --k) std::printf("_n%u##i = ",k); - std::printf("--_n1##i); \\\n "); - for (unsigned int k = Np; k>=2; --k) std::printf("_p%u##i = _p%u##i, ",k,k-1); - if (Np) std::printf("_p1##i = i++, \\\n "); - else std::printf(" ++i, "); - for (unsigned int k = 1; k=2) { - const unsigned int Nn = N/2, Np = Nn - ((N+1)%2); - std::printf("#define cimg_for_in%u(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \\\n",N); - for (unsigned int k = 0; k=(int)(bound)?(int)(bound)-1:i+%u%c \\\n",k,k,k,k==Nn?';':','); - std::printf(" i<=(int)(i1) && (_n%u##i<(int)(bound) || ",Nn); - for (unsigned int k = Nn-1; k>=1; --k) std::printf("_n%u##i==--_n%u##i || ",k,k+1); - std::printf("\\\n i==("); - for (unsigned int k = Nn; k>=2; --k) std::printf("_n%u##i = ",k); - std::printf("--_n1##i)); \\\n "); - for (unsigned int k = Np; k>=2; --k) std::printf("_p%u##i = _p%u##i, ",k,k-1); - if (Np) std::printf("_p1##i = i++, \\\n "); - else std::printf(" ++i, "); - for (unsigned int k = 1; k1) std::printf("#define cimg_for%ux%ux%u(img,x,y,z,c,I,T) \\\n cimg_for%u((img)._depth,z)",M,N,P,P); - else std::printf("#define cimg_for%ux%u(img,x,y,z,c,I,T) \\\n",M,N); - if (N>1) std::printf(" cimg_for%u((img)._height,y) ",N); - else std::printf(" cimg_forY(img,y) "); - - std::printf("for (int x = 0%c \\\n",M>1?',':';'); - for (int k = Mp; k>=1; --k) std::printf(" _p%u##x = 0%s",k,k==1?", \\\n":","); - for (int k = 1; k=((img)._width)?(img).width()-1:%u, \\\n",k,k,k); - - if (M>1) { - std::printf(" _n%u##x = (int)( \\\n ",Mn); - for (int k = 0, z = -Pp; z<=Pn; ++z) - for (int y = -Np; y<=Nn; ++y) { - for (int x = -Mp; x<=0; ++x) { std::printf("%sI[%d] =",k && x==-Mp?" (":(x==-Mp?"(":" "),k); ++k; } - k+=Mn; - if (y<0) std::sprintf(indy,"_p%d##",-y); else if (y>0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" (T)(img)(0,%sy,%sz,c))%s",indy,indz,k>=last?",":", \\\n"); - } - - std::printf(" \\\n"); - for (int x = 1; x0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" (I[%d] = (T)(img)(_n%d##x,%sy,%sz,c)), \\\n",(Mp+x)+(y+Np)*M+(z+Pp)*M*N,x,indy,indz); - } - std::printf(" %u>=((img)._width)?(img).width()-1:%u); \\\n",Mn,Mn); - } - - if (M>1) std::printf(" (_n%u##x",Mn); else std::printf(" (x"); - std::printf("<(img).width() && ( \\\n"); - - for (int z = -Pp; z<=Pn; ++z) - for (int y = -Np; y<=Nn; ++y) { - if (M>1) std::sprintf(indx,"_n%d##",Mn); else indx[0]='\0'; - if (y<0) std::sprintf(indy,"_p%d##",-y); else if (y>0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" (I[%d] = (T)(img)(%sx,%sy,%sz,c))%s",M-1+(y+Np)*M+(z+Pp)*M*N,indx,indy,indz, - z==Pn && y==Nn?",1))":", \\\n"); - } - - if (M>1) { - std::printf(" || \\\n "); - for (int k = Mn-1; k>=1; --k) std::printf("_n%d##x==--_n%u##x || ",k,k+1); - std::printf("x==("); - for (int k = Mn; k>=2; --k) std::printf("_n%d##x = ",k); - std::printf("--_n1##x); \\\n"); - } else std::printf("; \\\n"); - - if (M>1) { - for (unsigned int k = 0, z = 0; z=2; --k) std::printf("_p%d##x = _p%d##x, ",k,k-1); - if (M>2) std::printf("_p1##x = x++, "); else std::printf("++x, "); - for (int k = 1; k<=Mn-1; ++k) std::printf("++_n%d##x, ",k); - std::printf("++_n%d##x)\n\n",Mn); - } else std::printf(" ++x)\n\n"); -} - -// Generate macro 'cimg_for_inMxN[xP](img,x,y,z,c,I,T)' -//----------------------------------------------------- -void generate_for_inMxNxP(const unsigned int M, const unsigned int N, const unsigned int P) { - char indx[16], indy[16], indz[16]; - const int - Mn = (int)(M/2), Mp = (int)(Mn - ((M+1)%2)), - Nn = (int)(N/2), Np = (int)(Nn - ((N+1)%2)), - Pn = (int)(P/2), Pp = (int)(Pn - ((P+1)%2)); - - if (P>1) std::printf("#define cimg_for_in%ux%ux%u(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \\\n cimg_for_in%u((img)._depth,z0,z1,z)",M,N,P,P); - else std::printf("#define cimg_for_in%ux%u(img,x0,y0,x1,y1,x,y,z,c,I,T) \\\n",M,N); - if (N>1) std::printf(" cimg_for_in%u((img)._height,y0,y1,y) ",N); - else std::printf(" cimg_for_inY(img,y0,y1,y) "); - - std::printf("for (int x = (int)(x0)<0?0:(int)(x0)%c \\\n",M>1?',':';'); - for (int k = Mp; k>=1; --k) std::printf(" _p%u##x = x-%u<0?0:x-%u, \\\n",k,k,k); - for (int k = 1; k=(img).width()?(img).width()-1:x+%u, \\\n",k,k,k); - - if (M>1) { - std::printf(" _n%u##x = (int)( \\\n",Mn); - for (int x = -Mp; x0) std::sprintf(indx,"_n%d##",x); else indx[0]='\0'; - if (y<0) std::sprintf(indy,"_p%d##",-y); else if (y>0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" (I[%d] = (T)(img)(%sx,%sy,%sz,c)), \\\n",(Mp+x)+(y+Np)*M+(z+Pp)*M*N,indx,indy,indz); - } - std::printf(" x+%u>=(img).width()?(img).width()-1:x+%u); \\\n",Mn,Mn); - } - std::printf(" x<=(int)(x1) && ("); - if (M>1) std::printf("(_n%u##x",Mn); else std::printf("(x"); - std::printf("<(img).width() && ( \\\n"); - - for (int z = -Pp; z<=Pn; ++z) - for (int y = -Np; y<=Nn; ++y) { - if (M>1) std::sprintf(indx,"_n%d##",Mn); else indx[0]='\0'; - if (y<0) std::sprintf(indy,"_p%d##",-y); else if (y>0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" (I[%d] = (T)(img)(%sx,%sy,%sz,c))%s",M-1+(y+Np)*M+(z+Pp)*M*N,indx,indy,indz, - z==Pn && y==Nn?",1))":", \\\n"); - } - - if (M>1) { - std::printf(" || \\\n "); - for (int k = Mn-1; k>=1; --k) std::printf("_n%d##x==--_n%u##x || ",k,k+1); - std::printf("x==("); - for (int k = Mn; k>=2; --k) std::printf("_n%d##x = ",k); - std::printf("--_n1##x)); \\\n"); - } else std::printf("); \\\n"); - - if (M>1) { - for (unsigned int k = 0, z = 0; z=2; --k) std::printf("_p%d##x = _p%d##x, ",k,k-1); - if (M>2) std::printf("_p1##x = x++, "); else std::printf("++x, "); - for (int k = 1; k<=Mn-1; ++k) std::printf("++_n%d##x, ",k); - std::printf("++_n%d##x)\n\n",Mn); - } else std::printf(" ++x)\n\n"); -} - -// Generate macro 'cimg_getMxN[xP](img,x,y,z,c,I,T)' -//-------------------------------------------------- -void generate_getMxNxP(const unsigned int M, const unsigned int N, const unsigned int P) { - const int - Mn = (int)(M/2), Mp = (int)(Mn - ((M+1)%2)), - Nn = (int)(N/2), Np = (int)(Nn - ((N+1)%2)), - Pn = (int)(P/2), Pp = (int)(Pn - ((P+1)%2)), - last = M*N*P - 1; - if (P>1) std::printf("#define cimg_get%ux%ux%u(img,x,y,z,c,I,T) \\\n",M,N,P); - else std::printf("#define cimg_get%ux%u(img,x,y,z,c,I,T) \\\n",M,N); - char indx[16], indy[16], indz[16]; - for (int k = 0, z = -Pp; z<=Pn; ++z) - for (int y = -Np; y<=Nn; ++y) - for (int x = -Mp; x<=Mn; ++x) { - if (x<0) std::sprintf(indx,"_p%d##",-x); else if (x>0) std::sprintf(indx,"_n%d##",x); else indx[0]='\0'; - if (y<0) std::sprintf(indy,"_p%d##",-y); else if (y>0) std::sprintf(indy,"_n%d##",y); else indy[0]='\0'; - if (z<0) std::sprintf(indz,"_p%d##",-z); else if (z>0) std::sprintf(indz,"_n%d##",z); else indz[0]='\0'; - std::printf(" I[%u] = (T)(img)(%sx,%sy,%sz,c)%s",k,indx,indy,indz, - k==last?";\n\n":(x==Mn?", \\\n":",")); - ++k; - } -} - -//----------------- -// Main Procedure -//----------------- -int main(int argc, char **argv) { - - cimg_usage("Generate C++ macros to deal with MxN[xP] neighborhood loops within the CImg Library"); - - // Read command line arguments - //---------------------------- - const char *const size = cimg_option("-s","5x4","Size of the neighborhood"); - const bool do_forN = cimg_option("-forN",true,"Generate 'cimg_forN()'"); - const bool do_for_inN = cimg_option("-for_inN",true,"Generate 'cimg_for_inN()'"); - const bool do_for = cimg_option("-for",true,"Generate 'cimg_forMxNxP()'"); - const bool do_for_in = cimg_option("-for_in",true,"Generate 'cimg_for_inMxNxP()'"); - const bool do_get = cimg_option("-get",true,"Generate 'cimg_getMxNxP()'"); - if (cimg_option("-h",false,0)) std::exit(0); - - unsigned int M = 1, N = 1 , P = 1; - std::sscanf(size,"%u%*c%u%*c%u",&M,&N,&P); - if (!M || !N || !P || (M==1 && N==1 && P==1)) { - std::fprintf(stderr,"\n%s : Error, bad neighborhood size '%s'\n",argv[0],size); - std::exit(0); - } - if (!do_forN && !do_get && !do_for) return 0; - - if (P>1) - std::printf("// Define %ux%ux%u loop macros\n" - "//----------------------------\n",M,N,P); - else - std::printf("// Define %ux%u loop macros\n" - "//-------------------------\n",M,N); - - if (do_forN) { - if (N>1) generate_forN(N); - if (P>1 && P!=N) generate_forN(P); - } - if (do_for_inN) { - if (N>1) generate_for_inN(N); - if (P>1 && P!=N) generate_for_inN(P); - } - if (do_for) generate_forMxNxP(M,N,P); - if (do_for_in) generate_for_inMxNxP(M,N,P); - if (do_get) generate_getMxNxP(M,N,P); - - return 0; -} diff --git a/deps/CImg/examples/hough_transform2d b/deps/CImg/examples/hough_transform2d deleted file mode 100755 index ebdb417..0000000 Binary files a/deps/CImg/examples/hough_transform2d and /dev/null differ diff --git a/deps/CImg/examples/hough_transform2d.cpp b/deps/CImg/examples/hough_transform2d.cpp deleted file mode 100644 index c05d2c7..0000000 --- a/deps/CImg/examples/hough_transform2d.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - # - # File : hough_transform2d.cpp - # ( C++ source file ) - # - # Description : Implementation of the Hough transform. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc,char **argv) { - cimg_usage("Illustration of the Hough transform"); - CImg src(cimg_option("-i",cimg_imagepath "parrot_original.ppm","Input image")); - CImg<> vote(500,400,1,1,0), img = src.get_norm().normalize(0,255).resize(-100,-100,1,2,2); - - CImgDisplay disp(src,"Image"), dispvote(vote,"Hough Transform"); - const unsigned char col1[3]={255,255,255}, col2[3]={0,0,0}; - const double - alpha = cimg_option("-a",1.5,"Gradient smoothing"), - sigma = cimg_option("-s",0.5,"Hough Transform smoothing"), - rhomax = std::sqrt((double)(img.width()*img.width()+img.height()*img.height()))/2, - thetamax = 2*cimg::PI; - - if (cimg::dialog(cimg::basename(argv[0]), - "Instructions : \n" - "----------------\n\n" - "(1) When clicking on the color image, all lines crossing the selected point\n" - "will be voted in the Hough buffer.\n\n" - "(2) When clicking on the Hough buffer, the corresponding line is drawn\n" - "on the color image.\n\n" - "(3) When pressing the space bar, lines in the color image are detected from the\n" - "image gradients through votes in the Hough buffer.\n\n" - "Note that a logarithmic scaling is performed for displayin the vote image.\n" - "See also the available options (option '-h')\n","Start !","Quit",0,0,0,0, - src.get_resize(100,100,1,3),true)) std::exit(0); - - while (!disp.is_closed() && !dispvote.is_closed() && - !disp.is_keyQ() && !dispvote.is_keyQ() && !disp.is_keyESC() && !dispvote.is_keyESC()) { - - CImgDisplay::wait(disp,dispvote); - - // When pressing space bar, the vote is performed from the image gradients. - if (dispvote.is_keySPACE() || disp.is_keySPACE()) { - CImgList<> grad = img.get_gradient(); - cimglist_for(grad,l) grad[l].blur((float)alpha); - vote.fill(0); - cimg_forXY(img,x,y) { - const double - X = (double)x - img.width()/2, - Y = (double)y - img.height()/2, - gx = grad[0](x,y), - gy = grad[1](x,y); - double - theta = std::atan2(gy,gx), - rho = std::sqrt(X*X+Y*Y)*std::cos(std::atan2(Y,X)-theta); - if (rho<0) { rho=-rho; theta+=cimg::PI; } - theta = cimg::mod(theta,thetamax); - vote((int)(theta*dispvote.width()/thetamax),(int)(rho*dispvote.height()/rhomax))+=(float)std::sqrt(gx*gx+gy*gy); - } - vote.blur((float)sigma); - CImg<> vote2(vote); cimg_forXY(vote2,x,y) vote2(x,y) = (float)std::log(1+vote(x,y)); vote2.display(dispvote); - } - - // When clicking on the vote window. - if (dispvote.button()) { - const double - rho = dispvote.mouse_y()*rhomax/dispvote.height(), - theta = dispvote.mouse_x()*thetamax/dispvote.width(), - x = img.width()/2 + rho*std::cos(theta), - y = img.height()/2 + rho*std::sin(theta); - const int - x0 = (int)(x+1000*std::sin(theta)), - y0 = (int)(y-1000*std::cos(theta)), - x1 = (int)(x-1000*std::sin(theta)), - y1 = (int)(y+1000*std::cos(theta)); - CImg(src). - draw_line(x0,y0,x1,y1,col1,1.0f,0xF0F0F0F0).draw_line(x0,y0,x1,y1,col2,1.0f,0x0F0F0F0F). - draw_line(x0+1,y0,x1+1,y1,col1,1.0f,0xF0F0F0F0).draw_line(x0+1,y0,x1+1,y1,col2,1.0f,0x0F0F0F0F). - draw_line(x0,y0+1,x1,y1+1,col1,1.0f,0xF0F0F0F0).draw_line(x0,y0+1,x1,y1+1,col2,1.0f,0x0F0F0F0F). - display(disp); - } - - // When clicking on the image. - if (disp.button() && disp.mouse_x()>=0) { - const double - x0 = (double)disp.mouse_x()-disp.width()/2, - y0 = (double)disp.mouse_y()-disp.height()/2, - rho0 = std::sqrt(x0*x0+y0*y0), - theta0 = std::atan2(y0,x0); - - for (double t=0; t vote2(vote); cimg_forXY(vote2,x,y) vote2(x,y) = (float)std::log(1+vote(x,y)); vote2.display(dispvote); - } - dispvote.resize(dispvote); - disp.resize(disp); - } - - std::exit(0); - return 0; -} diff --git a/deps/CImg/examples/image2ascii b/deps/CImg/examples/image2ascii deleted file mode 100755 index e746b37..0000000 Binary files a/deps/CImg/examples/image2ascii and /dev/null differ diff --git a/deps/CImg/examples/image2ascii.cpp b/deps/CImg/examples/image2ascii.cpp deleted file mode 100644 index 64177d9..0000000 --- a/deps/CImg/examples/image2ascii.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - # - # File : image2ascii.cpp - # ( C++ source file ) - # - # Description : A basic image to ASCII-art converter. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Tell CImg not to use display capabilities. -#undef cimg_display -#define cimg_display 0 -#include "CImg.h" -using namespace cimg_library; - -/*--------------------------- - - Main procedure - - --------------------------*/ -int main(int argc,char **argv) { - cimg_usage("A simple image to ASCII-art converter.\n\nUsage : image2ascii [options] image"); - - // Read command line parameters - const char *geom = cimg_option("-g","79x40","Output size"); - const int alphabet = cimg_option("-a",0,"Alphabet type (0=full, 1=numbers, 2=letters, 3=signs, 4=minimal"); - const bool invert = cimg_option("-invert",false,"Invert image intensities"); - const float contour = (float)cimg_option("-contour",0.0f,"Use image contours higher than specified threshold"); - const float blur = (float)cimg_option("-blur",0.8f,"Image pre-blur"); - const float sigma = (float)cimg_option("-sigma",10.0f,"Font pre-blur"); - const char *file_i = cimg_argument1(0,"-invert"); - int w = 79, h = 40; - std::sscanf(geom,"%d%*c%d",&w,&h); - if (cimg_option("-h",false,0)) std::exit(0); - - // Init fonts - CImgList<> font_full = CImgList<>::font(13,false); - font_full.remove(0,255); - const int fw = font_full['A'].width(), fh = font_full['A'].height(); - CImgList<> font, font_blur; - CImgList font_code; - - switch (alphabet) { - case 1: { - font_code.insert(CImg<>::vector(' ')); - for (unsigned char l='0'; l<='9'; l++) font_code.insert(CImg<>::vector(l)); - } break; - case 2: { - font_code.insert(CImg<>::vector(' ')); - for (unsigned char l='A'; l<='Z'; l++) font_code.insert(CImg<>::vector(l)); - } break; - case 3: { - font_code.insert(CImg<>::vector(' ')); - font_code.insert(CImg<>::vector('-')); - font_code.insert(CImg<>::vector('_')); - font_code.insert(CImg<>::vector('|')); - font_code.insert(CImg<>::vector('/')); - font_code.insert(CImg<>::vector('\\')); - font_code.insert(CImg<>::vector('+')); - font_code.insert(CImg<>::vector('.')); - font_code.insert(CImg<>::vector('*')); - font_code.insert(CImg<>::vector('=')); - font_code.insert(CImg<>::vector(']')); - font_code.insert(CImg<>::vector('[')); - font_code.insert(CImg<>::vector('(')); - font_code.insert(CImg<>::vector(')')); - font_code.insert(CImg<>::vector('{')); - font_code.insert(CImg<>::vector('}')); - font_code.insert(CImg<>::vector('"')); - font_code.insert(CImg<>::vector('!')); - font_code.insert(CImg<>::vector('$')); - } break; - case 4: { - font_code.insert(CImg<>::vector(' ')); - font_code.insert(CImg<>::vector('.')); - font_code.insert(CImg<>::vector('/')); - font_code.insert(CImg<>::vector('\\')); - font_code.insert(CImg<>::vector('_')); - font_code.insert(CImg<>::vector('_')); - font_code.insert(CImg<>::vector('|')); - } break; - default: { for (unsigned char l=' '; l<='~'; l++) font_code.insert(CImg<>::vector(l)); } break; - } - cimglist_for(font_code,l) { - font.insert(font_full(font_code[l](0))); - font_blur.insert(font[l].get_resize(fw,fh,1,1).blur(sigma).normalize(0,255)); - } - - // Init images - CImg<> img; - if (!file_i) { float white[3] = { 255,255,255 }; img.assign().draw_text(0,0," CImg\nRocks !",white); } - else img.assign(file_i); - img.norm().resize(fw*w,fh*h); - if (blur) img.blur(blur); - if (contour>0) { - CImgList<> grad = img.get_gradient("xy",4); - img = (grad[0].pow(2) + grad[1].pow(2)).sqrt().normalize(0,100).threshold(contour); - } - img.normalize(0,255); - if (invert) img = 255.0f-img; - CImg dest(w,h,1,1,0); - - // Render ASCII-art image, using a simple correlation method. - CImg<> neigh; - cimg_forY(dest,y) { cimg_forX(dest,x) { - neigh = img.get_crop(x*fw,y*fh,(x+1)*fw,(y+1)*fh); - float scoremin = 2e28f; - unsigned int best = 0; - cimglist_for(font_code,l) { - const CImg<>& letter = font_blur[l]; - const float score = (float)((letter-neigh).pow(2).sum()); - if (score& src, const CImg& dest, const CImg<>& U, - const bool morph, const bool imode, const char *filename,int nb, CImgDisplay& disp) { - CImg visu = (src,dest,src)>'x', warp(src); - float t = 0; - for (unsigned int iteration = 0; !disp || (!disp.is_closed() && !disp.is_keyQ()); ++iteration) { - if (morph) cimg_forXYC(warp,x,y,k) { - const float dx = U(x,y,0), dy = U(x,y,1), - I1 = (float)src.linear_atXY(x-t*dx, y-t*dy, k), - I2 = (float)dest.linear_atXY(x+(1-t)*dx,y+(1-t)*dy,k); - warp(x,y,k) = (unsigned char)((1-t)*I1 + t*I2); - } else cimg_forXYC(warp,x,y,k) { - const float dx = U(x,y,0), dy = U(x,y,1), I1 = (float)src.linear_atXY(x-t*dx, y-t*dy, 0,k); - warp(x,y,k) = (unsigned char)I1; - } - if (disp) visu.draw_image(2*src.width(),warp).display(disp.resize().wait(30)); - if (filename && *filename && (imode || (int)iteration frame %d ",iteration); - warp.save(filename,iteration); - } - t+=1.0f/nb; - if (t<0) { t = 0; nb = -nb; } - if (t>1) { t = 1; nb = -nb; if (filename && *filename) std::exit(0); } - } -} - -// optflow() : multiscale version of the image registration algorithm -//----------- -CImg<> optflow(const CImg<>& source, const CImg<>& target, - const float smoothness, const float precision, const unsigned int nb_scales, CImgDisplay& disp) { - const unsigned int iteration_max = 100000; - const float _precision = (float)std::pow(10.0,-(double)precision); - const CImg<> - src = source.get_resize(target,3).normalize(0,1), - dest = target.get_normalize(0,1); - CImg<> U; - - const unsigned int _nb_scales = nb_scales>0?nb_scales:(unsigned int)(2*std::log((double)(cimg::max(src.width(),src.height())))); - for (int scale = _nb_scales-1; scale>=0; --scale) { - const float factor = (float)std::pow(1.5,(double)scale); - const unsigned int - _sw = (unsigned int)(src.width()/factor), sw = _sw?_sw:1, - _sh = (unsigned int)(src.height()/factor), sh = _sh?_sh:1; - const CImg<> - I1 = src.get_resize(sw,sh,1,-100,2), - I2 = dest.get_resize(I1,2); - std::fprintf(stderr," * Scale %d\n",scale); - if (U) (U*=1.5f).resize(I2.width(),I2.height(),1,-100,3); - else U.assign(I2.width(),I2.height(),1,2,0); - - float dt = 2, energy = cimg::type::max(); - const CImgList<> dI = I2.get_gradient(); - - for (unsigned int iteration = 0; iteration0) dt*=0.5f; - energy = _energy; - if (disp) disp.resize(); - if (disp && disp.is_closed()) std::exit(0); - if (disp && !(iteration%300)) { - const unsigned char white[] = { 255,255,255 }; - CImg tmp = I1.get_warp(U,true,true,1).normalize(0,200); - tmp.resize(disp.width(),disp.height()).draw_quiver(U,white,0.7f,15,-14,true).display(disp); - } - } - std::fprintf(stderr,"\n"); - } - return U; -} - -/*------------------------ - - Main function - - ------------------------*/ - -int main(int argc,char **argv) { - - // Read command line parameters - cimg_usage("Compute an optical flow between two 2D images, and create a warped animation"); - const char - *name_i1 = cimg_option("-i",cimg_imagepath "sh0r.pgm","Input Image 1 (Destination)"), - *name_i2 = cimg_option("-i2",cimg_imagepath "sh1r.pgm","Input Image 2 (Source)"), - *name_o = cimg_option("-o",(const char*)NULL,"Output 2D flow (inrimage)"), - *name_seq = cimg_option("-o2",(const char*)NULL,"Output Warping Sequence"); - const float - smoothness = cimg_option("-s",0.1f,"Flow Smoothness"), - precision = cimg_option("-p",6.0f,"Convergence precision"); - const unsigned int - nb = cimg_option("-n",40,"Number of warped frames"), - nb_scales = cimg_option("-scale",0,"Number of scales (0=auto)"); - const bool - normalize = cimg_option("-equalize",true,"Histogram normalization of the images"), - morph = cimg_option("-m",true,"Morphing mode"), - imode = cimg_option("-c",true,"Complete interpolation (or last frame is missing)"), - dispflag = !cimg_option("-novisu",false,"Visualization"); - - // Init images and display - std::fprintf(stderr," - Init images.\n"); - const CImg<> - src(name_i1), - dest(CImg<>(name_i2).resize(src,3)), - src_blur = normalize?src.get_blur(0.5f).equalize(256):src.get_blur(0.5f), - dest_blur = normalize?dest.get_blur(0.5f).equalize(256):dest.get_blur(0.5f); - - CImgDisplay disp; - if (dispflag) { - unsigned int w = src.width(), h = src.height(); - const unsigned int dmin = cimg::min(w,h), minsiz = 512; - if (dminmaxsiz) { w=w*maxsiz/dmax; h=h*maxsiz/dmax; } - disp.assign(w,h,"Estimated Motion",0); - } - - // Run Motion estimation algorithm - std::fprintf(stderr," - Compute optical flow.\n"); - const CImg<> U = optflow(src_blur,dest_blur,smoothness,precision,nb_scales,disp); - if (name_o) U.save(name_o); - U.print("Computed flow"); - - // Do morphing animation - std::fprintf(stderr," - Create warped animation.\n"); - CImgDisplay disp2; - if (dispflag) { - unsigned int w = src.width(), h = src.height(); - const unsigned int dmin = cimg::min(w,h), minsiz = 100; - if (dminmaxsiz) { w = w*maxsiz/dmax; h=h*maxsiz/dmax; } - disp2.assign(3*w,h,"Source/Destination images and Motion animation",0); - } - - animate_warp(src.get_normalize(0,255),dest.get_normalize(0,255),U,morph,imode,name_seq,nb,disp2); - - std::exit(0); - return 0; -} diff --git a/deps/CImg/examples/image_surface3d b/deps/CImg/examples/image_surface3d deleted file mode 100755 index 6215843..0000000 Binary files a/deps/CImg/examples/image_surface3d and /dev/null differ diff --git a/deps/CImg/examples/image_surface3d.cpp b/deps/CImg/examples/image_surface3d.cpp deleted file mode 100644 index 5f07f21..0000000 --- a/deps/CImg/examples/image_surface3d.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - # - # File : image_surface3d.cpp - # ( C++ source file ) - # - # Description : This tool allows to show an image as a 3D surface. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line arguments. - cimg_usage("Render an image as a surface"); - const char *file_i = cimg_option("-i",cimg_imagepath "logo.bmp","Input image"); - const char *file_o = cimg_option("-o",(char*)0,"Output 3D object"); - const float sigma = cimg_option("-smooth",1.0f,"Amount of image smoothing"); - const float ratioz = cimg_option("-z",0.25f,"Aspect ratio along z-axis"); - const unsigned int di = cimg_option("-di",10,"Step for isophote skipping"); - - // Load 2D image file. - std::fprintf(stderr,"\n- Load file '%s'",cimg::basename(file_i)); std::fflush(stderr); - const CImg - img = CImg<>(file_i).blur(sigma).resize(-100,-100,1,3), - norm = img.get_norm().normalize(0,255); - - // Compute surface with triangles. - std::fprintf(stderr,"\n- Create image surface"); std::fflush(stderr); - CImgList primitives; - CImgList colors; - const CImg<> points = img.get_elevation3d(primitives,colors,norm*-ratioz); - - // Compute image isophotes. - std::fprintf(stderr,"\n- Compute image isophotes"); std::fflush(stderr); - CImgList isoprimitives; - CImgList isocolors; - CImg<> isopoints; - for (unsigned int i = 0; i<255; i+=di) { - CImgList<> prims; - const CImg<> pts = norm.get_isoline3d(prims,(float)i); - isopoints.append_object3d(isoprimitives,pts,prims); - } - cimglist_for(isoprimitives,l) { - const unsigned int i0 = isoprimitives(l,0); - const float x0 = isopoints(i0,0), y0 = isopoints(i0,1); - const unsigned char - r = (unsigned char)img.linear_atXY(x0,y0,0), - g = (unsigned char)img.linear_atXY(x0,y0,1), - b = (unsigned char)img.linear_atXY(x0,y0,2); - isocolors.insert(CImg::vector(r,g,b)); - } - cimg_forX(isopoints,ll) isopoints(ll,2) = -ratioz*norm.linear_atXY(isopoints(ll,0),isopoints(ll,1)); - - // Save object if necessary - if (file_o) { - std::fprintf(stderr,"\n- Save 3d object as '%s'",cimg::basename(file_o)); std::fflush(stderr); - points.save_off(primitives,colors,file_o); - } - - // Enter event loop - std::fprintf(stderr, - "\n- Enter interactive loop.\n\n" - "Reminder : \n" - " + Use mouse to rotate and zoom object\n" - " + key 'F' : Toggle fullscreen\n" - " + key 'Q' or 'ESC' : Quit\n" - " + Any other key : Change rendering type\n\n"); std::fflush(stderr); - const char *const title = "Image viewed as a surface"; - CImgDisplay disp(800,600,title,0); - unsigned int rtype = 2; - CImg pose = CImg::identity_matrix(4); - - while (!disp.is_closed()) { - const unsigned char white[3]={ 255, 255, 255 }; - CImg visu(disp.width(),disp.height(),1,3,0); - visu.draw_text(10,10,"%s",white,0,1,24, - rtype==0?"Points":(rtype==1?"Lines":(rtype==2?"Faces":(rtype==3?"Flat-shaded faces": - (rtype==4?"Gouraud-shaded faces":(rtype==5?"Phong-shaded faces":"Isophotes")))))); - static bool first_time = true; - if (rtype==6) visu.display_object3d(disp,isopoints,isoprimitives,isocolors,first_time,1,-1,true, - 500.0f,0.0f,0.0f,-5000.0f,0.0f,0.0f,true,pose.data()); - else visu.display_object3d(disp,points,primitives,colors,first_time,rtype,-1,true, - 500.0f,0.0f,0.0f,-5000.0f,0.0f,0.0f,true,pose.data()); - first_time = false; - switch (disp.key()) { - case 0: break; - case cimg::keyBACKSPACE: rtype = (7+rtype-1)%7; break; - case cimg::keyQ: - case cimg::keyESC: disp.close(); break; - case cimg::keyF: - if (disp.is_fullscreen()) disp.resize(800,600); else disp.resize(disp.screen_width(),disp.screen_height()); - disp.toggle_fullscreen(); - break; - default: rtype = (rtype+1)%7; break; - } - } - - return 0; -} diff --git a/deps/CImg/examples/img/CImg_demo.h b/deps/CImg/examples/img/CImg_demo.h deleted file mode 100644 index 73aff28..0000000 --- a/deps/CImg/examples/img/CImg_demo.h +++ /dev/null @@ -1,31909 +0,0 @@ -/*------------------------------------------------------------ - - Define hard-coded color images used in the 'CImg_demo.cpp' - example file, so that the corresponding executable does not - depend on additional data files. - ---------------------------------------------------------------*/ - -/* Define image 'foot' of size 200x200x1x3 and type 'const unsigned char' */ -const unsigned char data_foot[] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 154, 68, - 17, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 84, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 230, 165, 84, 26, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 175, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 253, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 215, 116, 26, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 254, 254, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 194, 74, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 205, 133, 68, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 252, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 215, 144, 85, 33, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 245, 194, 122, 67, 32, 5, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 111, 39, 9, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 205, 58, 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, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 116, 215, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 251, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 48, 105, 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 205, 72, 0, 0, 0, - 0, 0, 27, 66, 122, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, - 242, 0, 0, 0, 0, 0, 108, 120, 171, 233, 253, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 254, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, - 219, 219, 0, 0, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 0, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 22, 88, 194, 245, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 0, 0, 0, 0, 0, 0, - 13, 110, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, - 0, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 11, 92, 205, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 156, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, - 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, - 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 49, 0, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 0, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 32, 0, 10, 47, - 156, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 149, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 1, 32, 145, 245, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 0, - 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 245, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 194, 245, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 0, 0, 0, 0, 0, - 0, 0, 2, 76, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 165, 230, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 226, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 198, 152, 119, 119, 152, 198, 0, 0, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 121, - 33, 5, 4, 24, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 205, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 164, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 152, 33, 0, 0, 0, 0, 0, 110, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, - 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 145, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 25, 194, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 119, 3, - 0, 0, 0, 0, 0, 16, 178, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 238, 147, 22, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 119, 1, 0, 0, 0, 0, 0, 0, 70, 198, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 39, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 114, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 152, 2, - 0, 0, 0, 0, 0, 0, 5, 137, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 207, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 198, 22, 0, 0, 0, 0, 0, 0, 0, 88, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 115, 0, 0, 0, 0, 0, 0, 0, 0, 37, 230, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 217, 0, - 0, 0, 0, 0, 0, 0, 0, 27, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 207, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 176, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 230, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 219, 219, 219, 210, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 210, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 205, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 210, 120, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 173, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 72, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 245, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 212, 0, 0, 0, 0, 0, 0, 0, 0, 4, 205, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 245, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, - 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 176, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 170, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 122, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 100, - 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 112, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 23, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 150, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 198, 152, 119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 215, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 167, 62, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 198, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 186, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 137, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 235, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 146, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 198, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 179, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 178, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 70, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 178, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 185, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 5, 235, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 178, 58, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 194, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 32, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 205, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 164, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, 0, - 0, 0, 4, 213, 255, 255, 255, 255, 255, 255, 255, 255, 238, 51, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 106, 0, 0, 0, 0, 0, 76, 235, 255, 255, 255, 255, - 255, 255, 255, 255, 120, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 106, 0, 0, - 6, 81, 235, 255, 255, 255, 255, 255, 255, 255, 255, 205, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 230, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 207, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 160, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 194, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 161, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 57, 22, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 86, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 229, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 205, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 163, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 57, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 221, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 198, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, - 255, 255, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 34, 0, 0, 0, 0, - 0, 0, 41, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 210, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 245, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 37, 4, 0, 0, 0, 0, 0, 0, 23, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 151, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 250, 253, 255, 255, 255, 255, 255, 221, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 204, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 240, 255, 255, 255, 255, 255, - 255, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 157, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 250, 247, 255, 255, 255, 255, 255, 255, 196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, - 255, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 140, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 198, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 84, 170, 230, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 37, 111, 205, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 185, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 21, - 84, 165, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 39, 53, 72, 125, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 23, 87, 170, 230, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 210, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 48, 105, - 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 28, - 49, 72, 111, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 198, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 30, 74, 144, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 79, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 176, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 46, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 131, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, - 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 98, 20, 0, 98, 205, - 0, 0, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 1, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 176, 39, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 9, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 185, 26, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 238, 216, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 111, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 247, 251, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 215, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 128, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 230, 128, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 15, 79, 176, 219, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 245, 141, 24, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 47, 5, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 4, 23, 40, 57, 90, 146, 198, 219, 219, 219, 0, - 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 230, 137, 30, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 215, 124, 79, 54, 47, 51, 62, 95, 152, 198, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 238, 125, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 201, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 20, 31, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 230, 105, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 198, 24, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 3, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 251, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 212, 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, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 238, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 215, 255, 255, 255, 255, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 196, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 40, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 205, 133, 85, - 61, 63, 92, 144, 215, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 170, 255, - 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 185, 124, 73, 28, 4, 0, 0, 0, 0, 1, 6, 5, 9, 0, 142, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 230, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 217, 200, 155, 100, 54, 24, 3, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 34, 170, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 198, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 176, 114, 60, 22, 3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 110, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 133, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 210, 167, 105, 58, 25, 3, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 185, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 198, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 205, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 198, - 113, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 117, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 210, 182, 148, - 125, 106, 79, 53, 33, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 210, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 163, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, - 219, 192, 114, 40, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 198, 142, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 164, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 64, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 159, 43, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 185, 219, 219, 219, 219, 219, 219, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 185, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 176, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, - 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 106, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 114, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 98, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 210, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 159, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 173, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 245, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 178, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 137, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 78, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 230, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 88, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 155, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 120, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 105, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 185, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 230, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 116, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 210, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 198, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 215, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 67, 198, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 56, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 154, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 25, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 83, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 238, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 84, 198, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 176, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 74, 190, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 128, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 202, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 0, 0, 0, 0, 219, 113, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 69, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, - 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 73, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 109, 210, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 219, 219, 219, - 219, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 215, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 139, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, - 0, 0, 219, 219, 219, 219, 219, 219, 219, 148, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 185, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 146, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 182, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 151, 253, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 137, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 210, 125, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, - 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 167, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 155, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 188, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 229, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 210, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 185, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 171, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 215, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 141, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 40, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 214, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 200, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 159, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 250, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 217, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 5, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, 219, 0, - 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 0, 0, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 137, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 145, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 248, 255, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 185, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 198, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 113, 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 64, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 122, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 110, 1, - 0, 0, 0, 0, 0, 0, 0, 3, 113, 209, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 198, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 198, 37, 0, 0, 0, 0, 0, 0, 3, 94, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 210, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, - 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 159, - 39, 0, 0, 0, 1, 15, 106, 210, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 113, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 176, 107, 69, 66, 100, 167, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 168, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 149, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 204, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 176, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 58, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 113, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, - 247, 255, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, - 219, 219, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 149, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 176, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 253, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 142, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 254, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 107, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 176, 114, 47, - 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 78, 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 251, 255, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 198, 142, 56, 8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 198, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 206, 126, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 65, 210, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 158, 46, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 70, 190, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 204, 140, 52, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 75, - 190, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 198, 110, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 65, 190, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 198, 142, 72, 22, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 70, 185, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 252, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 198, 122, 46, 5, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 90, 204, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 204, 168, 124, 80, 43, 17, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 98, 210, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 210, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 130, 210, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 185, - 0, 0, 0, 0, 0, 0, 0, 3, 50, 167, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 204, 140, 58, 0, 0, 0, 42, 122, - 198, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 251, - 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, - 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 254, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 252, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 0, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 0, 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, - 0, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 175, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 1, 1, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 2, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 116, 215, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 48, 105, 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 255, 205, 72, 0, 0, 0, - 0, 0, 27, 66, 122, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 6, 0, 0, 0, 0, 0, 108, 120, 171, 233, 253, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 0, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 22, 88, 194, 245, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 0, 0, 0, 0, 0, 0, - 13, 110, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 11, 92, 205, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 156, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 49, 0, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 149, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 245, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 194, 245, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 165, 230, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 146, 114, 114, 146, 189, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 116, - 32, 5, 4, 23, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 205, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 146, 32, 0, 0, 0, 0, 0, 105, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, - 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 145, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 114, 3, - 0, 0, 0, 0, 0, 16, 170, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 238, 147, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 114, 1, 0, 0, 0, 0, 0, 0, 67, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 39, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 146, 2, - 0, 0, 0, 0, 0, 0, 5, 132, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 207, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 189, 21, 0, 0, 0, 0, 0, 0, 0, 88, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 208, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 207, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 169, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 230, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 202, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 202, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 202, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 166, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 245, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 169, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 170, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 122, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 107, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 23, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 189, 146, 114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 215, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 160, 59, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 189, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 131, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 235, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 140, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 189, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 170, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 94, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 170, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 185, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 170, 56, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 194, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 30, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 157, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 106, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 207, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 194, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 161, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 57, 22, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 86, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 229, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 163, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 57, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 221, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 189, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, - 255, 255, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 34, 0, 0, 0, 0, - 0, 0, 41, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 202, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 245, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 37, 4, 0, 0, 0, 0, 0, 0, 23, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 145, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 250, 253, 255, 255, 255, 255, 255, 221, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 196, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 240, 255, 255, 255, 255, 255, - 255, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 151, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 250, 247, 255, 255, 255, 255, 255, 255, 196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, - 255, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 134, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 84, 170, 230, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 37, 111, 205, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 177, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 21, - 84, 165, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 61, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 39, 53, 72, 125, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 23, 87, 170, 230, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 48, 105, - 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 28, - 49, 72, 111, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 189, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 30, 74, 144, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 169, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 125, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 98, 20, 0, 98, 205, - 0, 0, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 1, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 176, 39, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 9, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 185, 26, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 238, 216, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 111, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 247, 251, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 215, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 128, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 230, 128, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 14, 76, 169, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 245, 141, 24, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 47, 5, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 4, 22, 39, 54, 86, 140, 189, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 230, 137, 30, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 215, 119, 76, 52, 45, 49, 59, 91, 146, 189, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 238, 125, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 201, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 19, 30, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 230, 105, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 189, 23, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 3, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 251, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 212, 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, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 238, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 196, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 205, 133, 85, - 61, 63, 92, 144, 215, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 177, 119, 70, 27, 4, 0, 0, 0, 0, 1, 6, 5, 9, 0, 142, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 208, 192, 148, 96, 52, 23, 3, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 34, 170, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 189, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 169, 110, 58, 21, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 210, 210, 210, 210, 105, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 160, 100, 55, 24, 3, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 185, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 189, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 189, - 108, 26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 202, 175, 142, - 119, 101, 76, 51, 32, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 30, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 184, 110, 38, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 189, 136, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 157, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, 41, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 177, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 177, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 169, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 110, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 94, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 202, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 152, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 166, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 170, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 84, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 149, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 100, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 177, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 64, 189, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 80, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 189, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 169, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 71, 182, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 194, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 210, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 70, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 105, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, - 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 133, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 142, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 140, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 175, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 131, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 119, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 160, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 149, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 180, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 202, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 177, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 164, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 135, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 39, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 205, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 192, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 208, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 5, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 132, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 139, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 255, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 189, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 109, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 61, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 117, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 105, 1, - 0, 0, 0, 0, 0, 0, 0, 3, 109, 200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 189, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 189, 35, 0, 0, 0, 0, 0, 0, 2, 90, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 202, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, - 37, 0, 0, 0, 1, 15, 102, 202, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 108, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 169, 103, 66, 63, 96, 160, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 161, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 142, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 196, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 169, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 55, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 108, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 153, 255, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 142, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 169, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 128, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 169, 110, 45, - 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 75, 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 154, 255, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 189, 136, 54, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 189, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 198, 121, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 63, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, 44, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 67, 182, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 196, 134, 50, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 72, - 182, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 189, 105, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 63, 182, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 189, 136, 69, 21, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 68, 177, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 189, 117, 44, 5, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 86, 196, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 196, 161, 119, 77, 41, 16, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 94, 202, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 202, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 124, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, - 0, 0, 0, 0, 0, 0, 0, 3, 48, 160, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 196, 134, 55, 0, 0, 0, 40, 117, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 9, - 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 5, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 175, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 116, 215, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 48, 105, 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 255, 205, 72, 0, 0, 0, - 0, 0, 27, 66, 122, 194, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 5, 0, 0, 0, 0, 0, 108, 120, 171, 233, 253, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 10, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 0, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 22, 88, 194, 245, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 0, 0, 0, 0, 0, 0, - 13, 110, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 11, 92, 205, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 156, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 49, 0, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 149, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 245, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 194, 245, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 165, 230, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 146, 114, 114, 146, 189, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 116, - 32, 5, 4, 23, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 205, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 146, 32, 0, 0, 0, 0, 0, 105, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, - 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 145, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 114, 3, - 0, 0, 0, 0, 0, 16, 170, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 238, 147, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 114, 1, 0, 0, 0, 0, 0, 0, 67, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 39, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 146, 2, - 0, 0, 0, 0, 0, 0, 5, 132, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 207, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 189, 21, 0, 0, 0, 0, 0, 0, 0, 88, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 208, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 207, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 169, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 230, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 202, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 202, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 245, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 202, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 166, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 245, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 210, 210, 210, 210, 152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 169, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 170, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 122, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 107, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 23, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 189, 146, 114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 215, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 160, 59, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 189, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 131, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 235, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 140, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 189, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 170, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 94, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 170, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 185, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 170, 56, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 194, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 30, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 157, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 106, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 207, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 194, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 161, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 57, 22, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 245, 86, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 229, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 163, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 57, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 55, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 221, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 189, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, - 255, 255, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 34, 0, 0, 0, 0, - 0, 0, 41, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 202, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 245, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 37, 4, 0, 0, 0, 0, 0, 0, 23, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 145, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 250, 253, 255, 255, 255, 255, 255, 221, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 196, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 240, 255, 255, 255, 255, 255, - 255, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 151, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 250, 247, 255, 255, 255, 255, 255, 255, 196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, - 255, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 134, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 84, 170, 230, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 37, 111, 205, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 177, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 21, - 84, 165, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 61, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 39, 53, 72, 125, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 23, 87, 170, 230, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 50, 111, 177, 230, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 48, 105, - 170, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 28, - 49, 72, 111, 177, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 189, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 0, 0, 30, 74, 144, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 169, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 125, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 98, 20, 0, 98, 205, - 0, 0, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 1, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 176, 39, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 9, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 185, 26, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 238, 216, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 111, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 247, 251, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 215, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 128, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 230, 128, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 14, 76, 169, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 245, 141, 24, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 47, 5, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 4, 22, 39, 54, 86, 140, 189, 210, 210, 210, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 230, 137, 30, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 215, 119, 76, 52, 45, 49, 59, 91, 146, 189, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 238, 125, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 201, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 19, 30, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 230, 105, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 189, 23, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 164, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 3, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 251, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 212, 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, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 238, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 196, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 255, 205, 133, 85, - 61, 63, 92, 144, 215, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 177, 119, 70, 27, 4, 0, 0, 0, 0, 1, 6, 5, 9, 0, 142, - 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 208, 192, 148, 96, 52, 23, 3, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 34, 170, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 189, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 169, 110, 58, 21, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 210, 210, 210, 210, 105, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 160, 100, 55, 24, 3, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 185, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 189, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 189, - 108, 26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 202, 175, 142, - 119, 101, 76, 51, 32, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 30, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, - 210, 184, 110, 38, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 189, 136, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 157, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, 41, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 177, 210, 210, 210, 210, 210, 210, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 177, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 169, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 110, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 94, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 202, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 152, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 166, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 170, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 84, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 149, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 100, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 177, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 189, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 64, 189, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 80, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 189, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 169, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 71, 182, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 194, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 210, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 70, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 105, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, - 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 133, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 0, 210, 210, 210, 210, 210, 210, 210, 142, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 140, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 175, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 131, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 202, 119, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 160, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 149, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 180, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 202, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 177, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 164, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 135, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 39, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 205, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 192, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 208, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 5, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 132, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 139, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 255, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 189, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 109, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 61, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 117, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 105, 1, - 0, 0, 0, 0, 0, 0, 0, 3, 109, 200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 189, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 189, 35, 0, 0, 0, 0, 0, 0, 2, 90, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 202, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, - 37, 0, 0, 0, 1, 15, 102, 202, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 108, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 169, 103, 66, 63, 96, 160, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 161, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 142, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 255, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 196, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 169, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 55, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 108, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 152, 255, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 142, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 169, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 255, 255, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 128, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 169, 110, 45, - 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 75, 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 152, 255, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 189, 136, 54, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 189, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 198, 121, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 63, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 152, 44, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 67, 182, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 255, 255, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 196, 134, 50, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 72, - 182, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 255, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 189, 105, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 63, 182, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 189, 136, 69, 21, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 68, 177, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 189, 117, 44, 5, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 86, 196, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 196, 161, 119, 77, 41, 16, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 94, 202, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 202, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 124, 202, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 177, - 0, 0, 0, 0, 0, 0, 0, 3, 48, 160, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 196, 134, 55, 0, 0, 0, 40, 117, - 189, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 8, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, - 0, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - -/* Define image 'lena' of size 256x256x1x1 and type 'const unsigned char' */ -const unsigned char data_lena[] = { - 254, 254, 254, 254, 254, 254, 254, 254, 162, 165, 155, 156, 158, 158, 158, 155, - 155, 156, 160, 162, 169, 169, 174, 177, 174, 169, 171, 162, 147, 155, 127, 114, - 86, 86, 76, 98, 98, 98, 98, 96, 108, 101, 98, 108, 103, 101, 105, 101, - 105, 105, 98, 98, 105, 117, 108, 119, 105, 117, 123, 119, 119, 125, 117, 133, - 129, 133, 125, 129, 135, 131, 129, 125, 133, 127, 133, 127, 125, 125, 133, 133, - 123, 125, 131, 131, 127, 125, 131, 131, 135, 133, 129, 129, 129, 137, 133, 133, - 133, 129, 133, 129, 135, 131, 133, 131, 141, 127, 133, 129, 131, 129, 131, 127, - 129, 135, 133, 129, 129, 127, 125, 127, 133, 129, 129, 133, 131, 131, 125, 131, - 137, 133, 131, 127, 129, 127, 131, 127, 127, 129, 121, 133, 127, 125, 125, 133, - 123, 127, 127, 131, 125, 121, 123, 123, 119, 121, 114, 119, 117, 110, 114, 98, - 96, 110, 119, 135, 139, 147, 156, 155, 164, 167, 169, 158, 149, 156, 158, 151, - 153, 156, 158, 156, 162, 156, 156, 153, 155, 156, 156, 155, 155, 153, 156, 156, - 156, 156, 162, 156, 158, 164, 160, 160, 158, 162, 200, 213, 219, 219, 224, 222, - 225, 218, 201, 158, 103, 96, 103, 98, 114, 119, 119, 123, 129, 117, 121, 121, - 123, 127, 121, 123, 117, 123, 121, 119, 123, 129, 121, 123, 125, 121, 123, 114, - 129, 125, 123, 123, 121, 129, 125, 117, 110, 112, 117, 119, 135, 171, 174, 158, - 164, 164, 165, 165, 167, 162, 158, 162, 162, 165, 155, 156, 158, 158, 158, 155, - 155, 156, 160, 162, 169, 169, 174, 177, 174, 169, 171, 162, 147, 155, 127, 114, - 86, 86, 76, 98, 98, 98, 98, 96, 108, 101, 98, 108, 103, 101, 105, 101, - 105, 105, 98, 98, 105, 117, 108, 119, 105, 117, 123, 119, 119, 125, 117, 133, - 129, 133, 125, 129, 135, 131, 129, 125, 133, 127, 133, 127, 125, 125, 133, 133, - 123, 125, 131, 131, 127, 125, 131, 131, 135, 133, 129, 129, 129, 137, 133, 133, - 133, 129, 133, 129, 135, 131, 133, 131, 141, 127, 133, 129, 131, 129, 131, 127, - 129, 135, 133, 129, 129, 127, 125, 127, 133, 129, 129, 133, 131, 131, 125, 131, - 137, 133, 131, 127, 129, 127, 131, 127, 127, 129, 121, 133, 127, 125, 125, 133, - 123, 127, 127, 131, 125, 121, 123, 123, 119, 121, 114, 119, 117, 110, 114, 98, - 96, 110, 119, 135, 139, 147, 156, 155, 164, 167, 169, 158, 149, 156, 158, 151, - 153, 156, 158, 156, 162, 156, 156, 153, 155, 156, 156, 155, 155, 153, 156, 156, - 156, 156, 162, 156, 158, 164, 160, 160, 158, 162, 200, 213, 219, 219, 224, 222, - 225, 218, 201, 158, 103, 96, 103, 98, 114, 119, 119, 123, 129, 117, 121, 121, - 123, 127, 121, 123, 117, 123, 121, 119, 123, 129, 121, 123, 125, 121, 123, 114, - 129, 125, 123, 123, 121, 129, 125, 117, 110, 112, 117, 119, 135, 171, 174, 158, - 164, 164, 165, 165, 167, 162, 158, 162, 162, 165, 155, 156, 158, 158, 158, 155, - 155, 156, 160, 162, 169, 169, 174, 177, 174, 169, 171, 162, 147, 155, 127, 114, - 86, 86, 76, 98, 98, 98, 98, 96, 108, 101, 98, 108, 103, 101, 105, 101, - 105, 105, 98, 98, 105, 117, 108, 119, 105, 117, 123, 119, 119, 125, 117, 133, - 129, 133, 125, 129, 135, 131, 129, 125, 133, 127, 133, 127, 125, 125, 133, 133, - 123, 125, 131, 131, 127, 125, 131, 131, 135, 133, 129, 129, 129, 137, 133, 133, - 133, 129, 133, 129, 135, 131, 133, 131, 141, 127, 133, 129, 131, 129, 131, 127, - 129, 135, 133, 129, 129, 127, 125, 127, 133, 129, 129, 133, 131, 131, 125, 131, - 137, 133, 131, 127, 129, 127, 131, 127, 127, 129, 121, 133, 127, 125, 125, 133, - 123, 127, 127, 131, 125, 121, 123, 123, 119, 121, 114, 119, 117, 110, 114, 98, - 96, 110, 119, 135, 139, 147, 156, 155, 164, 167, 169, 158, 149, 156, 158, 151, - 153, 156, 158, 156, 162, 156, 156, 153, 155, 156, 156, 155, 155, 153, 156, 156, - 156, 156, 162, 156, 158, 164, 160, 160, 158, 162, 200, 213, 219, 219, 224, 222, - 225, 218, 201, 158, 103, 96, 103, 98, 114, 119, 119, 123, 129, 117, 121, 121, - 123, 127, 121, 123, 117, 123, 121, 119, 123, 129, 121, 123, 125, 121, 123, 114, - 129, 125, 123, 123, 121, 129, 125, 117, 110, 112, 117, 119, 135, 171, 174, 158, - 162, 167, 162, 160, 162, 156, 156, 158, 155, 156, 160, 156, 158, 155, 151, 156, - 162, 156, 160, 167, 172, 172, 172, 174, 176, 171, 167, 160, 149, 135, 114, 98, - 86, 76, 86, 81, 86, 86, 98, 110, 94, 101, 103, 101, 91, 98, 103, 91, - 94, 101, 94, 112, 98, 103, 119, 108, 112, 114, 127, 121, 123, 114, 119, 125, - 129, 127, 135, 119, 123, 125, 129, 127, 129, 131, 127, 129, 121, 127, 125, 125, - 131, 135, 133, 133, 127, 131, 129, 137, 129, 125, 131, 129, 129, 125, 127, 129, - 133, 133, 129, 131, 135, 131, 129, 129, 137, 127, 133, 129, 131, 127, 131, 123, - 127, 133, 135, 125, 129, 125, 129, 129, 131, 125, 131, 131, 129, 127, 127, 127, - 127, 131, 131, 125, 125, 125, 121, 129, 123, 131, 125, 123, 123, 125, 125, 131, - 131, 127, 121, 125, 127, 127, 125, 121, 119, 123, 121, 117, 112, 110, 105, 98, - 96, 112, 119, 125, 133, 147, 145, 158, 164, 162, 167, 160, 156, 155, 153, 155, - 155, 158, 162, 156, 162, 158, 156, 156, 156, 153, 153, 158, 158, 160, 155, 153, - 156, 156, 158, 160, 160, 160, 158, 158, 155, 156, 181, 207, 216, 219, 222, 224, - 227, 222, 213, 187, 133, 103, 96, 108, 112, 114, 119, 117, 117, 121, 121, 129, - 121, 127, 119, 117, 125, 123, 127, 123, 125, 121, 127, 125, 123, 114, 125, 125, - 121, 125, 123, 117, 119, 123, 123, 125, 117, 112, 125, 129, 125, 123, 86, 49, - 156, 160, 162, 158, 165, 160, 164, 156, 156, 165, 160, 156, 162, 153, 153, 160, - 158, 155, 164, 171, 176, 177, 174, 174, 177, 171, 167, 160, 145, 135, 117, 103, - 86, 79, 76, 81, 86, 91, 98, 96, 96, 98, 94, 105, 96, 103, 103, 103, - 94, 114, 101, 96, 105, 105, 103, 117, 114, 117, 114, 125, 121, 129, 121, 125, - 114, 121, 127, 131, 129, 131, 127, 123, 131, 125, 127, 129, 127, 131, 127, 127, - 123, 129, 131, 129, 127, 131, 131, 129, 127, 133, 135, 127, 127, 143, 133, 129, - 129, 131, 129, 129, 129, 127, 123, 125, 133, 127, 133, 137, 127, 121, 119, 127, - 129, 137, 141, 131, 123, 125, 131, 131, 129, 127, 125, 129, 123, 129, 131, 133, - 127, 133, 133, 125, 127, 119, 127, 129, 121, 133, 125, 127, 119, 127, 127, 127, - 129, 127, 123, 125, 125, 123, 123, 125, 123, 119, 121, 121, 110, 110, 105, 108, - 96, 103, 110, 117, 131, 139, 143, 149, 156, 158, 167, 160, 158, 158, 155, 153, - 156, 158, 155, 156, 158, 156, 158, 162, 155, 160, 160, 153, 156, 155, 155, 158, - 158, 158, 158, 158, 153, 158, 158, 160, 155, 155, 162, 193, 210, 219, 219, 222, - 222, 225, 219, 206, 167, 112, 101, 105, 112, 112, 114, 125, 117, 117, 114, 125, - 117, 119, 117, 123, 117, 117, 119, 123, 125, 121, 121, 119, 121, 121, 119, 125, - 125, 121, 127, 121, 121, 125, 131, 125, 127, 123, 125, 123, 86, 52, 32, 26, - 158, 160, 158, 155, 160, 158, 162, 160, 156, 155, 162, 160, 155, 156, 156, 153, - 158, 158, 164, 171, 174, 171, 176, 177, 171, 165, 165, 160, 141, 131, 127, 108, - 86, 76, 79, 86, 103, 86, 91, 98, 94, 94, 94, 89, 94, 108, 91, 96, - 96, 94, 101, 103, 110, 105, 110, 119, 117, 121, 119, 119, 121, 121, 117, 127, - 119, 133, 123, 121, 129, 129, 123, 131, 125, 131, 133, 121, 123, 127, 125, 133, - 123, 133, 133, 137, 127, 127, 129, 129, 127, 131, 125, 123, 129, 131, 125, 127, - 123, 125, 127, 127, 131, 129, 131, 129, 125, 133, 135, 125, 131, 125, 121, 123, - 131, 123, 129, 125, 133, 125, 129, 123, 133, 125, 131, 125, 129, 125, 127, 123, - 127, 125, 131, 129, 125, 125, 127, 123, 125, 125, 123, 127, 121, 127, 125, 123, - 125, 125, 131, 125, 125, 125, 127, 127, 123, 117, 108, 112, 112, 112, 110, 108, - 108, 96, 108, 119, 125, 137, 143, 151, 156, 162, 165, 167, 158, 158, 156, 153, - 158, 156, 164, 162, 160, 158, 158, 160, 156, 156, 156, 156, 156, 160, 158, 155, - 153, 156, 155, 156, 156, 158, 153, 156, 160, 151, 153, 174, 201, 212, 219, 221, - 222, 224, 224, 215, 192, 149, 103, 96, 103, 108, 114, 114, 121, 114, 114, 123, - 121, 121, 114, 121, 117, 121, 117, 119, 121, 123, 119, 114, 121, 117, 123, 125, - 121, 123, 123, 127, 119, 121, 125, 131, 129, 131, 110, 84, 46, 32, 32, 38, - 158, 160, 158, 160, 164, 160, 156, 156, 158, 165, 158, 158, 153, 155, 155, 153, - 158, 167, 164, 171, 174, 174, 174, 169, 165, 172, 172, 162, 139, 135, 121, 101, - 94, 71, 76, 91, 74, 86, 91, 103, 94, 96, 98, 103, 103, 98, 94, 98, - 91, 98, 94, 98, 110, 101, 105, 108, 114, 112, 119, 121, 121, 117, 127, 121, - 119, 121, 123, 137, 125, 129, 125, 129, 127, 127, 125, 125, 125, 131, 121, 133, - 123, 127, 135, 125, 129, 125, 127, 131, 125, 127, 127, 131, 135, 129, 123, 127, - 123, 127, 125, 125, 133, 125, 133, 129, 129, 133, 129, 127, 129, 123, 127, 121, - 127, 129, 125, 129, 125, 129, 125, 127, 125, 133, 129, 129, 131, 127, 137, 127, - 125, 127, 125, 131, 125, 129, 125, 125, 125, 121, 125, 127, 127, 127, 125, 133, - 125, 119, 119, 125, 119, 125, 133, 125, 119, 121, 117, 119, 114, 108, 110, 110, - 101, 101, 96, 105, 117, 131, 133, 145, 151, 155, 167, 162, 162, 162, 158, 156, - 156, 160, 162, 162, 165, 162, 162, 158, 160, 156, 158, 158, 156, 158, 156, 158, - 155, 156, 155, 155, 155, 158, 158, 160, 167, 149, 155, 155, 189, 209, 216, 219, - 222, 222, 224, 224, 209, 176, 117, 98, 101, 105, 110, 117, 110, 121, 117, 119, - 123, 119, 121, 114, 125, 112, 117, 119, 131, 121, 119, 114, 119, 117, 125, 117, - 123, 125, 121, 121, 119, 119, 133, 129, 125, 123, 89, 46, 38, 29, 35, 38, - 160, 162, 156, 162, 156, 151, 156, 156, 156, 156, 153, 158, 155, 153, 156, 156, - 164, 169, 171, 174, 172, 172, 172, 174, 171, 169, 162, 160, 141, 131, 119, 105, - 91, 89, 79, 86, 86, 91, 94, 96, 96, 98, 96, 105, 96, 101, 91, 101, - 105, 96, 94, 98, 105, 103, 108, 108, 112, 112, 119, 119, 123, 119, 117, 129, - 123, 119, 127, 123, 121, 131, 129, 133, 129, 125, 127, 125, 125, 125, 129, 127, - 123, 123, 125, 125, 127, 127, 131, 129, 125, 127, 133, 133, 129, 127, 133, 123, - 125, 127, 135, 133, 131, 131, 121, 135, 129, 125, 131, 131, 133, 125, 129, 129, - 129, 131, 123, 131, 125, 123, 129, 127, 133, 127, 129, 133, 137, 127, 127, 129, - 125, 135, 127, 127, 125, 121, 135, 123, 127, 129, 127, 121, 123, 127, 121, 123, - 127, 119, 125, 127, 131, 125, 121, 121, 114, 119, 121, 119, 114, 117, 110, 108, - 98, 105, 96, 105, 114, 123, 139, 147, 151, 156, 160, 164, 165, 164, 164, 160, - 162, 162, 162, 169, 165, 167, 164, 160, 158, 160, 155, 156, 162, 160, 151, 155, - 156, 153, 153, 153, 153, 156, 155, 156, 155, 160, 155, 149, 167, 201, 212, 218, - 221, 225, 224, 225, 218, 200, 155, 98, 103, 101, 105, 110, 117, 110, 114, 121, - 121, 112, 123, 117, 121, 117, 110, 123, 125, 114, 121, 125, 119, 127, 129, 121, - 125, 119, 119, 125, 123, 125, 129, 127, 108, 84, 35, 38, 41, 38, 46, 35, - 156, 156, 158, 158, 156, 155, 160, 156, 153, 155, 158, 155, 156, 151, 151, 167, - 164, 167, 176, 169, 169, 172, 169, 169, 171, 169, 158, 160, 141, 137, 125, 98, - 91, 81, 79, 84, 81, 96, 96, 81, 96, 108, 105, 105, 86, 91, 98, 108, - 91, 94, 91, 98, 101, 108, 110, 108, 108, 117, 112, 121, 114, 121, 119, 125, - 125, 127, 123, 129, 123, 127, 131, 129, 131, 125, 123, 125, 129, 123, 125, 125, - 129, 129, 133, 131, 125, 141, 129, 129, 125, 131, 129, 129, 137, 127, 127, 125, - 123, 125, 123, 125, 127, 121, 131, 131, 129, 125, 131, 125, 133, 133, 129, 123, - 121, 131, 129, 129, 123, 127, 129, 129, 133, 137, 127, 141, 129, 127, 131, 127, - 129, 131, 125, 125, 127, 127, 127, 123, 129, 127, 125, 123, 125, 114, 125, 127, - 127, 127, 127, 123, 125, 123, 123, 123, 125, 123, 110, 119, 112, 112, 110, 125, - 108, 108, 103, 94, 112, 117, 135, 141, 149, 155, 158, 156, 160, 171, 162, 160, - 160, 164, 165, 165, 162, 162, 162, 165, 158, 160, 165, 162, 162, 158, 153, 153, - 155, 155, 158, 151, 158, 149, 156, 151, 151, 155, 151, 158, 151, 184, 206, 215, - 221, 222, 225, 225, 224, 213, 189, 125, 103, 91, 112, 103, 121, 112, 108, 117, - 119, 121, 121, 114, 114, 119, 117, 127, 119, 117, 125, 121, 119, 123, 127, 123, - 129, 131, 125, 129, 129, 133, 133, 108, 71, 23, 32, 23, 26, 38, 26, 35, - 158, 162, 158, 155, 160, 155, 162, 165, 162, 164, 156, 156, 155, 156, 164, 162, - 169, 171, 174, 167, 172, 171, 171, 165, 172, 165, 164, 153, 139, 131, 121, 101, - 84, 89, 89, 81, 86, 101, 89, 91, 91, 89, 105, 96, 94, 101, 98, 94, - 89, 98, 94, 103, 101, 112, 110, 108, 112, 110, 117, 121, 119, 123, 114, 125, - 123, 125, 121, 127, 125, 127, 129, 125, 119, 123, 127, 127, 127, 125, 125, 123, - 127, 127, 131, 125, 123, 127, 127, 127, 131, 135, 129, 123, 125, 133, 131, 127, - 125, 123, 129, 137, 125, 125, 127, 125, 127, 127, 135, 125, 139, 125, 125, 127, - 123, 135, 135, 123, 125, 121, 119, 125, 129, 131, 133, 133, 131, 127, 129, 127, - 131, 125, 131, 133, 129, 127, 123, 121, 125, 125, 129, 125, 127, 123, 121, 119, - 125, 123, 127, 121, 131, 117, 121, 127, 127, 127, 121, 123, 112, 112, 108, 114, - 108, 108, 94, 96, 105, 119, 125, 139, 141, 155, 156, 162, 162, 171, 162, 162, - 165, 162, 160, 167, 164, 165, 167, 167, 162, 160, 158, 164, 164, 155, 158, 155, - 156, 162, 155, 156, 155, 158, 153, 155, 158, 153, 155, 151, 147, 156, 193, 210, - 218, 224, 224, 225, 224, 219, 204, 164, 103, 98, 108, 105, 112, 108, 108, 121, - 117, 119, 125, 117, 129, 131, 119, 121, 121, 139, 123, 117, 127, 125, 131, 123, - 129, 133, 129, 131, 135, 125, 103, 79, 29, 20, 41, 29, 35, 38, 32, 29, - 160, 156, 156, 156, 160, 160, 160, 162, 158, 156, 153, 162, 155, 156, 160, 162, - 165, 171, 169, 171, 176, 167, 165, 169, 164, 165, 158, 156, 145, 131, 129, 129, - 98, 96, 76, 76, 86, 89, 91, 98, 98, 103, 96, 103, 96, 96, 98, 91, - 101, 91, 96, 89, 101, 105, 108, 105, 121, 110, 110, 114, 121, 121, 117, 127, - 119, 123, 123, 127, 127, 125, 127, 125, 119, 131, 125, 129, 129, 131, 131, 127, - 125, 123, 129, 133, 123, 121, 131, 125, 127, 121, 125, 125, 125, 125, 127, 127, - 135, 125, 127, 131, 125, 127, 129, 125, 129, 127, 123, 129, 129, 125, 139, 131, - 129, 129, 133, 127, 121, 125, 123, 123, 131, 133, 131, 129, 143, 131, 125, 125, - 133, 121, 123, 125, 141, 121, 131, 119, 125, 123, 125, 125, 129, 119, 119, 123, - 123, 123, 125, 127, 127, 123, 125, 123, 127, 119, 121, 119, 141, 114, 112, 112, - 103, 101, 103, 89, 105, 114, 127, 137, 147, 147, 155, 158, 160, 167, 164, 164, - 162, 162, 162, 169, 165, 171, 164, 164, 164, 156, 162, 162, 162, 169, 153, 160, - 158, 160, 155, 156, 153, 155, 156, 158, 155, 151, 155, 155, 160, 147, 176, 204, - 213, 221, 222, 225, 227, 224, 215, 192, 143, 94, 112, 103, 114, 108, 112, 114, - 112, 119, 119, 121, 121, 119, 112, 127, 112, 121, 121, 129, 125, 125, 125, 129, - 129, 133, 131, 141, 129, 105, 71, 41, 29, 46, 46, 29, 49, 32, 26, 26, - 160, 158, 155, 158, 156, 153, 158, 160, 162, 158, 160, 158, 149, 156, 158, 164, - 172, 171, 169, 164, 169, 172, 171, 164, 162, 162, 160, 151, 155, 135, 129, 119, - 89, 84, 84, 86, 84, 86, 89, 86, 137, 91, 98, 89, 91, 105, 89, 98, - 101, 98, 94, 96, 108, 117, 103, 114, 110, 123, 112, 117, 110, 121, 123, 119, - 121, 117, 123, 125, 131, 127, 129, 129, 129, 123, 131, 131, 125, 125, 123, 125, - 123, 129, 129, 131, 127, 125, 125, 127, 127, 125, 133, 131, 125, 121, 125, 125, - 127, 133, 123, 127, 127, 125, 125, 129, 125, 123, 127, 125, 127, 123, 125, 125, - 125, 125, 123, 121, 121, 125, 123, 125, 131, 127, 131, 133, 135, 127, 127, 127, - 129, 129, 129, 125, 129, 127, 127, 129, 121, 127, 119, 119, 119, 121, 119, 125, - 125, 123, 121, 125, 119, 117, 125, 123, 119, 117, 117, 121, 117, 119, 108, 108, - 103, 117, 101, 96, 101, 103, 125, 135, 145, 153, 155, 158, 162, 160, 165, 162, - 164, 165, 158, 164, 164, 165, 162, 167, 167, 167, 162, 153, 160, 156, 156, 156, - 153, 156, 151, 155, 153, 153, 153, 155, 155, 153, 155, 153, 141, 147, 153, 190, - 209, 216, 221, 224, 224, 225, 222, 210, 172, 108, 98, 103, 108, 114, 123, 121, - 114, 117, 110, 121, 125, 121, 121, 117, 123, 114, 129, 127, 135, 133, 131, 127, - 125, 131, 133, 131, 112, 55, 35, 20, 29, 29, 41, 32, 41, 32, 32, 38, - 158, 160, 153, 162, 162, 156, 158, 160, 162, 155, 160, 162, 153, 160, 164, 167, - 171, 167, 174, 167, 169, 169, 169, 156, 160, 162, 160, 155, 149, 137, 121, 108, - 94, 79, 81, 84, 89, 79, 96, 96, 105, 101, 98, 94, 94, 98, 94, 94, - 101, 94, 96, 98, 98, 105, 98, 105, 117, 114, 114, 121, 114, 110, 123, 121, - 127, 125, 119, 129, 123, 139, 119, 125, 125, 121, 125, 125, 123, 121, 127, 125, - 127, 127, 133, 125, 125, 129, 133, 127, 123, 125, 129, 129, 123, 125, 133, 131, - 125, 129, 119, 129, 123, 127, 121, 123, 121, 127, 121, 117, 123, 123, 117, 123, - 123, 123, 125, 127, 123, 127, 119, 123, 131, 125, 133, 129, 125, 133, 129, 125, - 131, 125, 133, 133, 125, 127, 119, 125, 125, 131, 125, 125, 121, 123, 117, 121, - 121, 127, 123, 125, 117, 121, 121, 123, 119, 117, 125, 117, 119, 112, 114, 105, - 108, 105, 101, 103, 110, 119, 123, 131, 143, 149, 151, 160, 158, 164, 167, 167, - 164, 171, 164, 156, 162, 164, 162, 160, 160, 164, 162, 158, 158, 164, 162, 155, - 162, 158, 151, 149, 156, 153, 153, 153, 156, 153, 153, 151, 151, 147, 145, 172, - 204, 213, 219, 224, 225, 225, 225, 218, 201, 158, 98, 98, 105, 112, 119, 123, - 114, 123, 112, 119, 121, 119, 119, 119, 117, 117, 121, 129, 125, 123, 125, 125, - 135, 137, 127, 108, 60, 79, 32, 26, 35, 38, 26, 29, 23, 35, 43, 41, - 155, 153, 155, 156, 160, 156, 162, 162, 160, 156, 160, 155, 156, 164, 164, 165, - 167, 169, 172, 171, 165, 164, 165, 162, 164, 164, 164, 149, 149, 137, 114, 101, - 81, 71, 60, 71, 81, 86, 91, 98, 96, 101, 101, 96, 98, 94, 96, 91, - 101, 91, 98, 101, 103, 101, 110, 105, 114, 121, 114, 121, 117, 119, 117, 123, - 121, 129, 125, 129, 121, 125, 127, 127, 117, 125, 125, 117, 125, 127, 125, 125, - 125, 127, 123, 119, 121, 127, 121, 117, 121, 127, 125, 119, 125, 135, 135, 129, - 135, 125, 129, 121, 125, 123, 119, 119, 119, 123, 117, 123, 123, 127, 125, 125, - 127, 114, 121, 121, 123, 123, 114, 125, 117, 121, 121, 131, 127, 123, 129, 125, - 125, 125, 127, 133, 125, 127, 125, 125, 121, 125, 125, 123, 135, 121, 123, 127, - 119, 125, 127, 121, 125, 125, 121, 121, 123, 123, 121, 117, 125, 127, 110, 101, - 108, 101, 96, 98, 101, 108, 117, 125, 137, 143, 155, 158, 158, 164, 162, 162, - 164, 164, 158, 162, 160, 158, 162, 164, 162, 164, 162, 162, 160, 158, 151, 155, - 158, 153, 153, 155, 151, 155, 158, 155, 155, 155, 156, 153, 151, 151, 145, 147, - 187, 212, 218, 222, 224, 227, 228, 225, 213, 189, 125, 101, 105, 108, 112, 114, - 125, 121, 125, 114, 123, 121, 117, 117, 119, 129, 123, 117, 123, 127, 125, 129, - 133, 135, 108, 71, 32, 32, 41, 18, 15, 29, 23, 26, 26, 41, 43, 26, - 160, 158, 165, 160, 158, 156, 160, 160, 160, 158, 162, 162, 160, 167, 167, 172, - 172, 172, 169, 169, 162, 160, 162, 162, 160, 164, 160, 155, 147, 137, 117, 105, - 84, 76, 74, 76, 86, 84, 91, 89, 94, 101, 98, 94, 101, 98, 101, 89, - 98, 91, 96, 101, 101, 105, 110, 110, 110, 123, 119, 112, 117, 125, 121, 123, - 125, 119, 114, 121, 133, 125, 123, 123, 123, 123, 127, 125, 131, 127, 117, 131, - 129, 125, 121, 127, 123, 123, 125, 129, 129, 123, 125, 121, 125, 127, 121, 131, - 129, 139, 137, 123, 123, 119, 117, 119, 119, 114, 117, 119, 117, 123, 125, 123, - 119, 123, 121, 119, 114, 123, 119, 127, 127, 123, 125, 123, 123, 129, 125, 131, - 127, 129, 127, 127, 125, 127, 125, 119, 125, 121, 123, 127, 117, 121, 121, 121, - 123, 119, 121, 121, 119, 125, 125, 121, 123, 117, 121, 123, 114, 117, 119, 114, - 110, 103, 98, 103, 110, 117, 127, 133, 141, 143, 156, 156, 162, 162, 171, 165, - 165, 162, 162, 160, 164, 158, 164, 156, 167, 158, 158, 158, 156, 156, 160, 156, - 160, 156, 158, 155, 155, 160, 155, 153, 155, 155, 156, 153, 149, 153, 147, 145, - 169, 203, 213, 222, 222, 224, 227, 227, 222, 206, 162, 96, 105, 110, 108, 112, - 114, 119, 114, 123, 121, 117, 121, 121, 119, 119, 123, 121, 121, 125, 131, 135, - 133, 108, 55, 20, 20, 35, 32, 23, 26, 26, 29, 26, 29, 46, 29, 43, - 158, 160, 162, 158, 158, 160, 162, 167, 162, 160, 160, 165, 165, 171, 171, 172, - 171, 169, 169, 169, 162, 162, 160, 160, 158, 165, 165, 158, 143, 135, 129, 110, - 86, 86, 76, 76, 81, 91, 86, 94, 101, 96, 110, 91, 98, 96, 96, 94, - 96, 94, 94, 91, 98, 101, 103, 110, 110, 112, 119, 121, 119, 125, 123, 117, - 125, 121, 123, 123, 125, 129, 127, 121, 123, 123, 127, 125, 125, 127, 125, 123, - 123, 125, 121, 125, 125, 127, 125, 121, 121, 127, 125, 119, 123, 117, 123, 129, - 131, 123, 125, 125, 127, 123, 119, 117, 114, 112, 117, 112, 121, 119, 123, 125, - 123, 125, 123, 123, 127, 121, 121, 121, 125, 129, 133, 125, 129, 129, 127, 131, - 131, 123, 127, 127, 127, 121, 125, 123, 125, 129, 125, 125, 127, 123, 112, 127, - 123, 117, 123, 121, 125, 129, 119, 123, 127, 131, 117, 119, 114, 110, 117, 112, - 108, 110, 105, 101, 101, 112, 121, 131, 133, 147, 153, 153, 160, 160, 162, 167, - 164, 164, 162, 156, 164, 156, 165, 160, 164, 158, 158, 160, 160, 158, 155, 156, - 162, 156, 153, 155, 158, 165, 153, 160, 151, 153, 151, 155, 151, 151, 151, 143, - 149, 185, 204, 216, 221, 222, 227, 227, 227, 218, 197, 131, 91, 114, 112, 119, - 112, 114, 110, 123, 112, 110, 117, 121, 119, 121, 114, 127, 129, 133, 131, 129, - 110, 55, 23, 29, 32, 29, 35, 20, 32, 20, 29, 38, 32, 32, 41, 46, - 158, 158, 162, 156, 158, 160, 160, 158, 162, 165, 158, 164, 172, 176, 172, 171, - 174, 171, 174, 167, 160, 160, 158, 158, 162, 162, 160, 158, 155, 139, 129, 101, - 94, 79, 74, 84, 91, 84, 94, 91, 94, 105, 103, 105, 105, 108, 91, 94, - 96, 86, 94, 96, 98, 103, 114, 105, 114, 110, 119, 117, 114, 114, 112, 117, - 121, 121, 127, 117, 123, 127, 125, 125, 127, 119, 121, 127, 121, 127, 123, 121, - 125, 123, 125, 129, 129, 127, 129, 129, 127, 125, 129, 125, 125, 119, 125, 123, - 121, 127, 131, 121, 123, 131, 125, 117, 123, 114, 117, 119, 121, 117, 121, 123, - 119, 114, 119, 121, 121, 117, 121, 119, 121, 125, 129, 123, 127, 129, 123, 121, - 129, 125, 131, 125, 129, 119, 119, 123, 127, 123, 123, 121, 127, 125, 112, 123, - 119, 119, 123, 121, 123, 121, 121, 127, 119, 125, 114, 112, 117, 112, 112, 105, - 101, 101, 98, 101, 96, 114, 131, 127, 133, 145, 147, 153, 158, 160, 162, 164, - 164, 165, 164, 162, 164, 160, 164, 162, 160, 165, 160, 160, 160, 162, 160, 158, - 156, 156, 160, 158, 160, 158, 160, 158, 156, 158, 158, 156, 158, 153, 147, 145, - 143, 153, 190, 209, 215, 222, 225, 228, 230, 227, 213, 193, 131, 101, 94, 108, - 114, 121, 114, 117, 114, 127, 125, 121, 125, 117, 123, 127, 127, 131, 135, 117, - 74, 23, 35, 15, 49, 32, 29, 23, 29, 32, 41, 35, 32, 29, 35, 46, - 164, 164, 160, 158, 164, 165, 162, 162, 164, 162, 165, 169, 171, 167, 171, 171, - 171, 169, 174, 164, 164, 162, 160, 160, 164, 162, 164, 155, 147, 129, 117, 103, - 84, 66, 86, 89, 81, 89, 84, 96, 94, 98, 96, 103, 91, 96, 96, 94, - 94, 96, 94, 94, 105, 103, 98, 110, 105, 108, 119, 119, 119, 123, 112, 127, - 123, 123, 125, 127, 123, 123, 125, 125, 121, 127, 123, 121, 119, 121, 121, 129, - 129, 129, 121, 119, 123, 127, 129, 129, 119, 125, 125, 125, 119, 127, 123, 125, - 127, 125, 133, 123, 119, 117, 119, 114, 119, 123, 117, 110, 119, 121, 121, 121, - 119, 129, 119, 117, 112, 123, 117, 121, 117, 121, 127, 123, 127, 131, 127, 125, - 125, 131, 131, 127, 123, 131, 117, 121, 127, 125, 121, 123, 125, 125, 117, 123, - 119, 125, 117, 119, 125, 121, 127, 123, 123, 123, 119, 117, 119, 112, 117, 110, - 110, 112, 105, 101, 108, 112, 121, 125, 131, 139, 145, 155, 151, 156, 160, 160, - 156, 167, 162, 162, 164, 160, 162, 158, 164, 162, 160, 160, 160, 164, 156, 158, - 158, 158, 156, 158, 156, 156, 155, 158, 156, 153, 156, 156, 155, 147, 153, 145, - 143, 143, 177, 209, 215, 222, 224, 228, 228, 228, 219, 203, 147, 103, 98, 101, - 96, 110, 114, 114, 114, 119, 121, 121, 119, 129, 123, 131, 129, 127, 110, 60, - 26, 20, 23, 23, 26, 46, 35, 32, 46, 20, 32, 29, 41, 38, 49, 35, - 160, 160, 158, 164, 160, 158, 165, 165, 169, 167, 167, 172, 169, 169, 171, 174, - 167, 171, 164, 162, 156, 156, 160, 162, 164, 162, 160, 156, 147, 131, 129, 96, - 89, 79, 71, 76, 96, 89, 91, 89, 86, 98, 98, 96, 96, 94, 96, 91, - 91, 103, 101, 98, 103, 103, 114, 101, 114, 110, 114, 114, 114, 110, 121, 117, - 117, 121, 121, 123, 123, 119, 121, 125, 123, 117, 117, 119, 117, 123, 129, 123, - 114, 117, 123, 123, 125, 119, 117, 121, 117, 127, 129, 123, 121, 123, 117, 127, - 121, 123, 123, 125, 114, 121, 114, 123, 127, 121, 119, 121, 123, 123, 121, 123, - 123, 123, 121, 114, 123, 119, 110, 121, 117, 117, 125, 127, 127, 125, 129, 125, - 129, 127, 131, 123, 125, 123, 119, 121, 125, 119, 119, 119, 121, 123, 117, 114, - 117, 121, 121, 123, 117, 119, 121, 121, 125, 114, 121, 119, 110, 110, 114, 108, - 112, 110, 101, 101, 105, 114, 117, 129, 135, 137, 143, 149, 158, 156, 156, 153, - 158, 164, 162, 160, 160, 162, 162, 162, 162, 158, 158, 155, 158, 160, 156, 164, - 158, 158, 158, 153, 156, 158, 153, 158, 158, 155, 151, 151, 151, 153, 155, 141, - 143, 145, 149, 193, 210, 219, 225, 228, 227, 228, 227, 212, 189, 127, 94, 98, - 103, 112, 108, 108, 117, 119, 121, 129, 127, 127, 121, 133, 123, 101, 60, 18, - 23, 23, 35, 35, 43, 46, 43, 43, 35, 32, 29, 32, 35, 49, 41, 32, - 160, 164, 167, 160, 164, 160, 160, 164, 167, 165, 167, 171, 171, 167, 171, 165, - 165, 167, 165, 165, 158, 158, 165, 164, 164, 162, 165, 153, 141, 139, 119, 105, - 81, 63, 79, 76, 76, 81, 91, 91, 103, 94, 94, 96, 96, 91, 98, 96, - 96, 96, 89, 96, 98, 103, 103, 110, 105, 112, 121, 114, 112, 110, 114, 121, - 117, 117, 121, 123, 119, 121, 121, 123, 119, 119, 117, 121, 125, 117, 119, 125, - 125, 119, 127, 125, 121, 121, 125, 125, 125, 117, 121, 121, 129, 119, 114, 121, - 127, 123, 123, 119, 117, 119, 121, 119, 117, 119, 112, 117, 119, 110, 119, 121, - 123, 119, 119, 112, 112, 112, 121, 114, 121, 121, 121, 119, 119, 121, 127, 127, - 133, 123, 129, 125, 123, 125, 127, 125, 123, 121, 123, 119, 123, 121, 119, 123, - 123, 119, 119, 119, 123, 121, 117, 121, 125, 119, 119, 112, 117, 112, 127, 125, - 114, 105, 96, 96, 101, 105, 121, 121, 133, 139, 143, 149, 151, 155, 155, 158, - 158, 162, 156, 160, 158, 162, 156, 160, 155, 164, 156, 156, 158, 156, 153, 155, - 155, 160, 156, 158, 155, 155, 153, 155, 160, 155, 153, 155, 156, 147, 147, 143, - 143, 137, 141, 167, 204, 216, 222, 227, 227, 228, 230, 224, 210, 165, 98, 91, - 101, 105, 108, 110, 108, 117, 114, 123, 121, 133, 135, 125, 105, 66, 23, 32, - 29, 20, 23, 32, 29, 35, 43, 55, 46, 41, 38, 32, 35, 23, 29, 38, - 167, 171, 167, 158, 164, 167, 162, 164, 169, 167, 174, 167, 167, 165, 162, 165, - 167, 169, 165, 156, 160, 160, 164, 164, 164, 164, 158, 155, 145, 131, 117, 91, - 84, 71, 66, 81, 81, 96, 101, 96, 98, 94, 91, 91, 94, 98, 94, 91, - 91, 98, 105, 98, 96, 114, 110, 112, 105, 117, 114, 121, 119, 123, 117, 119, - 123, 112, 117, 123, 125, 119, 121, 121, 121, 119, 114, 117, 117, 114, 121, 114, - 127, 127, 123, 117, 119, 129, 117, 121, 119, 119, 129, 121, 129, 125, 123, 119, - 127, 129, 119, 121, 119, 119, 121, 117, 129, 108, 114, 112, 119, 123, 110, 112, - 117, 117, 119, 117, 110, 114, 121, 114, 119, 112, 121, 123, 121, 125, 129, 125, - 131, 125, 123, 125, 123, 119, 119, 123, 123, 123, 119, 123, 121, 114, 123, 123, - 125, 123, 121, 125, 121, 117, 121, 125, 121, 119, 117, 110, 117, 108, 114, 114, - 105, 110, 110, 98, 101, 103, 121, 123, 129, 135, 143, 147, 149, 149, 153, 153, - 153, 164, 156, 165, 158, 155, 162, 155, 158, 151, 158, 155, 160, 156, 151, 153, - 156, 158, 158, 158, 158, 155, 160, 153, 151, 155, 155, 151, 151, 149, 143, 147, - 143, 145, 141, 149, 190, 212, 221, 225, 227, 227, 230, 227, 218, 201, 137, 94, - 103, 114, 103, 108, 108, 114, 119, 123, 125, 127, 129, 108, 63, 32, 18, 32, - 20, 26, 26, 26, 32, 38, 32, 29, 35, 35, 32, 26, 41, 26, 29, 29, - 162, 158, 164, 160, 156, 160, 164, 169, 172, 174, 171, 165, 162, 169, 158, 160, - 160, 160, 160, 165, 164, 158, 164, 162, 160, 164, 162, 153, 141, 133, 121, 96, - 81, 76, 66, 79, 74, 91, 94, 91, 94, 101, 94, 94, 96, 101, 86, 105, - 91, 101, 98, 94, 96, 103, 103, 110, 105, 114, 117, 112, 114, 117, 119, 125, - 119, 112, 117, 125, 114, 125, 127, 117, 117, 119, 123, 121, 121, 121, 131, 127, - 117, 117, 119, 125, 117, 125, 121, 123, 125, 121, 121, 125, 121, 119, 119, 127, - 125, 125, 121, 119, 119, 121, 131, 123, 117, 117, 123, 121, 119, 121, 112, 114, - 114, 117, 112, 114, 110, 114, 112, 112, 114, 112, 121, 125, 125, 121, 129, 127, - 127, 131, 125, 123, 117, 125, 125, 123, 114, 121, 129, 137, 119, 121, 129, 129, - 121, 123, 121, 117, 119, 125, 127, 125, 121, 123, 117, 117, 110, 117, 108, 112, - 110, 119, 103, 103, 105, 108, 112, 114, 133, 129, 141, 143, 147, 149, 151, 155, - 153, 151, 155, 160, 162, 155, 158, 158, 153, 156, 158, 155, 153, 155, 156, 155, - 155, 155, 156, 155, 156, 158, 156, 153, 153, 147, 155, 147, 149, 153, 141, 147, - 145, 137, 139, 141, 169, 204, 216, 224, 227, 228, 228, 230, 224, 210, 171, 105, - 98, 105, 98, 103, 105, 103, 110, 119, 133, 129, 108, 74, 26, 23, 20, 20, - 32, 23, 35, 46, 41, 49, 41, 38, 35, 29, 38, 32, 32, 26, 29, 15, - 164, 164, 165, 167, 162, 164, 164, 172, 177, 172, 169, 160, 158, 162, 156, 156, - 155, 156, 156, 164, 165, 164, 158, 160, 165, 164, 164, 153, 149, 127, 119, 98, - 89, 74, 79, 79, 79, 91, 94, 89, 98, 91, 101, 94, 91, 98, 98, 96, - 96, 101, 94, 91, 103, 96, 101, 108, 110, 114, 114, 117, 117, 123, 127, 117, - 125, 119, 123, 117, 117, 119, 119, 119, 117, 121, 121, 119, 119, 123, 125, 121, - 123, 117, 121, 121, 121, 123, 121, 127, 123, 125, 125, 125, 121, 123, 121, 119, - 125, 129, 119, 125, 117, 121, 127, 125, 127, 121, 117, 117, 114, 114, 123, 127, - 147, 127, 143, 119, 125, 114, 112, 112, 114, 112, 112, 123, 114, 112, 119, 123, - 119, 119, 117, 127, 125, 125, 125, 121, 117, 123, 127, 127, 123, 119, 125, 121, - 121, 123, 129, 121, 123, 119, 121, 119, 127, 117, 117, 119, 108, 119, 103, 112, - 114, 110, 105, 98, 103, 103, 105, 123, 131, 137, 135, 143, 143, 147, 149, 153, - 153, 153, 158, 156, 158, 162, 158, 155, 153, 158, 153, 153, 156, 155, 160, 156, - 158, 155, 153, 156, 158, 153, 151, 155, 151, 147, 143, 145, 145, 141, 145, 145, - 145, 141, 141, 145, 147, 189, 212, 218, 222, 228, 227, 230, 228, 218, 204, 139, - 94, 96, 103, 105, 110, 108, 119, 119, 129, 103, 66, 35, 23, 20, 32, 20, - 35, 38, 41, 46, 46, 49, 38, 43, 38, 35, 38, 23, 20, 29, 32, 20, - 167, 160, 167, 165, 162, 164, 167, 171, 169, 167, 169, 155, 155, 156, 153, 153, - 153, 153, 160, 164, 169, 167, 164, 158, 165, 162, 160, 155, 151, 139, 119, 96, - 79, 76, 71, 86, 76, 81, 96, 103, 96, 103, 96, 94, 98, 89, 98, 94, - 96, 96, 96, 94, 114, 108, 114, 112, 108, 121, 112, 117, 114, 123, 117, 117, - 112, 114, 117, 117, 119, 114, 119, 117, 114, 123, 123, 123, 119, 119, 121, 121, - 125, 125, 121, 121, 123, 149, 123, 127, 123, 125, 125, 119, 127, 119, 129, 114, - 123, 139, 125, 114, 125, 117, 121, 123, 129, 143, 141, 139, 133, 164, 153, 197, - 164, 197, 171, 189, 176, 195, 171, 179, 139, 125, 110, 114, 110, 114, 114, 121, - 114, 125, 119, 121, 119, 119, 112, 121, 119, 131, 129, 121, 123, 119, 123, 121, - 121, 121, 119, 121, 119, 127, 121, 121, 117, 119, 121, 112, 112, 110, 112, 103, - 117, 101, 108, 101, 103, 119, 112, 125, 129, 133, 139, 141, 143, 149, 143, 151, - 151, 153, 155, 156, 156, 160, 158, 158, 155, 155, 151, 153, 158, 153, 158, 155, - 156, 158, 153, 156, 149, 155, 149, 149, 147, 147, 153, 145, 143, 141, 143, 143, - 135, 145, 145, 143, 139, 160, 200, 213, 221, 227, 227, 230, 230, 225, 213, 181, - 108, 98, 103, 105, 114, 114, 127, 123, 101, 79, 29, 23, 26, 38, 26, 23, - 29, 32, 38, 49, 43, 43, 41, 43, 55, 20, 35, 43, 26, 29, 35, 26, - 165, 164, 164, 160, 162, 165, 172, 174, 176, 167, 162, 153, 149, 147, 149, 153, - 147, 155, 164, 167, 165, 167, 165, 158, 167, 165, 164, 155, 153, 133, 127, 101, - 81, 79, 68, 84, 84, 76, 81, 89, 94, 98, 98, 98, 94, 98, 103, 94, - 91, 94, 96, 96, 110, 108, 103, 103, 103, 112, 117, 117, 119, 119, 117, 119, - 121, 121, 119, 123, 123, 121, 112, 121, 117, 121, 125, 125, 123, 129, 121, 117, - 121, 121, 119, 121, 121, 121, 117, 127, 123, 131, 119, 117, 117, 123, 121, 121, - 121, 121, 125, 127, 129, 117, 162, 133, 162, 149, 147, 160, 171, 177, 179, 182, - 185, 189, 177, 190, 195, 187, 201, 182, 207, 195, 172, 171, 127, 119, 112, 114, - 112, 119, 114, 123, 123, 119, 125, 125, 121, 131, 131, 123, 129, 127, 129, 119, - 123, 114, 123, 121, 121, 129, 121, 117, 127, 119, 117, 112, 117, 114, 103, 105, - 110, 108, 108, 101, 101, 105, 114, 117, 123, 131, 143, 141, 143, 147, 147, 145, - 153, 147, 156, 158, 160, 156, 155, 155, 155, 155, 153, 153, 153, 156, 155, 156, - 156, 160, 155, 151, 151, 155, 151, 147, 145, 141, 155, 147, 147, 147, 147, 141, - 145, 149, 143, 141, 141, 143, 181, 209, 216, 224, 227, 228, 230, 228, 221, 206, - 156, 101, 103, 108, 110, 123, 121, 108, 68, 20, 32, 18, 23, 29, 23, 29, - 38, 49, 35, 49, 43, 46, 43, 35, 41, 29, 20, 29, 29, 20, 26, 32, - 164, 165, 160, 162, 160, 169, 172, 177, 171, 164, 160, 151, 145, 143, 141, 145, - 141, 153, 162, 165, 167, 160, 165, 162, 167, 167, 162, 158, 149, 129, 123, 103, - 76, 66, 84, 81, 84, 89, 89, 86, 91, 98, 98, 96, 94, 96, 96, 98, - 94, 94, 94, 103, 103, 108, 105, 101, 110, 114, 117, 119, 117, 112, 121, 117, - 129, 119, 119, 121, 119, 129, 119, 123, 123, 123, 123, 131, 121, 125, 119, 123, - 125, 121, 119, 112, 117, 119, 129, 121, 141, 123, 119, 133, 117, 117, 119, 110, - 117, 129, 155, 158, 153, 162, 169, 160, 155, 147, 167, 172, 187, 165, 189, 174, - 190, 184, 198, 177, 197, 187, 190, 198, 176, 197, 200, 203, 201, 182, 155, 131, - 112, 108, 103, 119, 112, 119, 119, 117, 123, 131, 129, 127, 125, 125, 133, 121, - 123, 119, 117, 119, 117, 114, 119, 121, 119, 121, 114, 110, 110, 114, 117, 103, - 108, 103, 105, 98, 101, 108, 114, 119, 127, 141, 139, 141, 145, 141, 143, 143, - 145, 151, 145, 149, 153, 156, 155, 155, 153, 156, 156, 155, 155, 155, 160, 151, - 158, 156, 149, 155, 156, 145, 143, 151, 141, 143, 141, 143, 139, 147, 141, 141, - 143, 141, 141, 141, 141, 149, 153, 195, 212, 221, 224, 228, 228, 233, 228, 216, - 192, 131, 103, 117, 129, 129, 98, 57, 29, 15, 23, 23, 26, 23, 29, 29, - 41, 32, 41, 41, 43, 49, 43, 43, 23, 32, 20, 23, 26, 29, 29, 29, - 162, 162, 158, 165, 158, 171, 174, 174, 167, 160, 155, 143, 141, 135, 145, 131, - 147, 153, 164, 165, 169, 164, 165, 162, 167, 164, 167, 153, 147, 133, 119, 101, - 86, 74, 71, 76, 86, 76, 91, 94, 89, 96, 101, 96, 96, 108, 91, 86, - 96, 94, 84, 91, 101, 98, 108, 110, 112, 112, 112, 121, 110, 117, 114, 119, - 123, 125, 125, 114, 119, 121, 114, 129, 119, 125, 123, 127, 121, 127, 125, 131, - 125, 123, 114, 117, 119, 121, 119, 125, 123, 123, 121, 123, 121, 117, 117, 141, - 143, 151, 165, 164, 156, 139, 155, 162, 151, 158, 182, 169, 193, 169, 184, 172, - 195, 181, 197, 184, 197, 193, 169, 187, 187, 203, 185, 197, 201, 203, 203, 198, - 189, 147, 117, 110, 114, 110, 114, 110, 123, 123, 123, 119, 117, 125, 125, 114, - 121, 125, 127, 127, 114, 117, 121, 117, 117, 108, 112, 114, 110, 121, 114, 105, - 108, 108, 103, 103, 98, 101, 117, 123, 131, 139, 137, 156, 141, 143, 141, 147, - 143, 153, 145, 155, 151, 156, 151, 156, 156, 151, 153, 151, 158, 153, 153, 153, - 151, 153, 147, 153, 143, 147, 143, 145, 149, 137, 137, 141, 145, 141, 141, 149, - 141, 147, 145, 143, 145, 143, 147, 172, 203, 215, 222, 227, 228, 233, 233, 225, - 212, 174, 117, 112, 117, 114, 63, 32, 23, 20, 29, 29, 26, 32, 20, 23, - 38, 41, 32, 46, 41, 38, 41, 35, 29, 26, 35, 29, 23, 32, 20, 26, - 160, 162, 160, 164, 169, 169, 174, 169, 162, 156, 147, 143, 125, 121, 129, 135, - 143, 156, 160, 165, 167, 167, 165, 165, 164, 164, 162, 160, 143, 135, 114, 103, - 84, 66, 79, 71, 89, 81, 96, 96, 91, 101, 96, 81, 94, 101, 94, 89, - 103, 91, 96, 101, 103, 105, 119, 112, 108, 117, 112, 123, 117, 119, 112, 117, - 114, 123, 127, 119, 121, 114, 121, 123, 125, 141, 121, 121, 123, 125, 125, 110, - 121, 117, 123, 112, 123, 121, 114, 123, 121, 117, 119, 121, 117, 129, 141, 158, - 139, 145, 151, 169, 139, 141, 139, 155, 153, 162, 156, 182, 167, 167, 181, 176, - 187, 182, 189, 198, 184, 189, 176, 193, 174, 195, 198, 184, 198, 206, 189, 201, - 203, 203, 192, 135, 110, 110, 105, 110, 110, 123, 121, 125, 119, 119, 123, 127, - 119, 121, 117, 123, 121, 119, 119, 110, 117, 114, 114, 112, 112, 103, 112, 105, - 105, 112, 105, 98, 96, 101, 119, 119, 133, 137, 141, 143, 147, 141, 145, 143, - 149, 145, 149, 149, 155, 155, 156, 160, 156, 156, 149, 151, 153, 149, 151, 147, - 143, 151, 149, 147, 147, 147, 139, 141, 149, 149, 139, 141, 139, 135, 137, 141, - 145, 139, 141, 143, 141, 141, 135, 137, 187, 210, 221, 227, 228, 228, 233, 233, - 224, 207, 151, 121, 108, 68, 29, 15, 35, 26, 29, 41, 32, 41, 29, 46, - 43, 43, 32, 29, 43, 35, 38, 18, 38, 35, 29, 35, 29, 26, 32, 29, - 162, 165, 160, 164, 171, 176, 172, 167, 158, 153, 143, 131, 121, 119, 121, 137, - 147, 156, 162, 169, 171, 167, 165, 169, 169, 167, 164, 164, 143, 133, 125, 98, - 81, 66, 63, 74, 76, 81, 86, 84, 98, 91, 101, 94, 91, 103, 98, 96, - 98, 94, 98, 91, 98, 103, 119, 108, 114, 112, 114, 114, 119, 110, 123, 112, - 119, 119, 117, 117, 121, 123, 125, 119, 121, 114, 125, 117, 125, 127, 125, 121, - 123, 121, 119, 125, 125, 119, 121, 123, 127, 129, 137, 133, 125, 141, 156, 151, - 137, 149, 162, 147, 156, 153, 156, 151, 141, 164, 151, 165, 164, 182, 160, 184, - 156, 192, 189, 195, 179, 200, 182, 177, 197, 182, 193, 198, 179, 198, 206, 193, - 200, 210, 210, 201, 177, 123, 103, 108, 117, 112, 121, 121, 119, 123, 125, 114, - 123, 119, 114, 121, 119, 117, 112, 117, 117, 117, 117, 110, 112, 110, 108, 103, - 110, 98, 108, 101, 108, 101, 119, 121, 135, 137, 139, 141, 145, 147, 139, 143, - 147, 149, 149, 149, 151, 149, 153, 151, 156, 155, 153, 149, 147, 149, 147, 151, - 139, 153, 147, 147, 141, 145, 141, 145, 143, 141, 145, 133, 141, 137, 137, 141, - 139, 143, 141, 141, 139, 139, 137, 139, 155, 201, 216, 225, 227, 230, 231, 233, - 231, 219, 190, 121, 71, 20, 20, 20, 23, 15, 41, 23, 32, 43, 35, 35, - 35, 38, 38, 41, 35, 29, 23, 46, 41, 35, 29, 20, 41, 20, 29, 26, - 162, 165, 167, 164, 169, 177, 172, 164, 156, 153, 141, 119, 112, 112, 117, 137, - 153, 156, 162, 165, 167, 171, 164, 165, 167, 167, 160, 155, 151, 129, 121, 96, - 76, 60, 63, 74, 76, 89, 81, 81, 86, 84, 91, 98, 91, 96, 96, 89, - 81, 98, 103, 94, 96, 103, 105, 114, 108, 119, 112, 117, 117, 112, 112, 119, - 119, 110, 121, 127, 114, 125, 119, 121, 121, 123, 121, 117, 123, 123, 117, 125, - 117, 108, 112, 117, 112, 139, 156, 151, 153, 141, 123, 110, 123, 129, 147, 143, - 149, 158, 145, 155, 147, 147, 169, 147, 158, 162, 155, 174, 149, 172, 177, 177, - 176, 169, 190, 185, 184, 181, 195, 179, 192, 201, 184, 198, 204, 187, 201, 204, - 204, 204, 201, 210, 204, 201, 141, 108, 103, 110, 121, 117, 121, 121, 125, 114, - 112, 112, 119, 119, 119, 121, 117, 117, 117, 110, 110, 105, 101, 103, 103, 98, - 103, 98, 96, 101, 103, 110, 110, 123, 125, 131, 145, 147, 145, 139, 141, 143, - 143, 151, 145, 151, 147, 145, 151, 153, 149, 155, 153, 149, 145, 149, 153, 149, - 141, 143, 147, 143, 151, 143, 139, 137, 147, 141, 143, 141, 139, 139, 131, 137, - 139, 135, 141, 135, 139, 137, 137, 135, 135, 177, 210, 219, 225, 228, 230, 231, - 233, 228, 212, 135, 23, 26, 23, 15, 38, 26, 38, 23, 41, 43, 32, 43, - 46, 32, 55, 49, 35, 38, 26, 29, 49, 38, 26, 32, 20, 32, 26, 23, - 160, 169, 172, 172, 172, 171, 165, 156, 151, 139, 121, 105, 101, 105, 121, 133, - 151, 158, 164, 172, 165, 171, 169, 167, 162, 167, 162, 160, 149, 139, 125, 98, - 74, 63, 71, 76, 94, 84, 89, 94, 101, 89, 96, 89, 89, 96, 89, 94, - 89, 101, 98, 103, 98, 98, 105, 105, 114, 123, 108, 114, 112, 119, 110, 110, - 108, 112, 125, 114, 121, 117, 119, 121, 117, 125, 119, 123, 119, 119, 114, 117, - 114, 112, 181, 158, 153, 160, 153, 147, 127, 129, 119, 121, 119, 121, 127, 141, - 145, 139, 139, 133, 141, 143, 162, 149, 158, 155, 164, 153, 172, 151, 185, 177, - 181, 177, 184, 162, 184, 189, 184, 195, 179, 198, 201, 189, 197, 200, 200, 197, - 206, 210, 198, 201, 206, 210, 204, 174, 110, 103, 121, 105, 117, 112, 112, 119, - 112, 121, 121, 123, 117, 114, 114, 112, 119, 108, 105, 105, 103, 112, 105, 105, - 96, 98, 91, 89, 98, 103, 108, 121, 125, 141, 139, 143, 143, 147, 137, 143, - 141, 143, 147, 145, 145, 149, 156, 158, 149, 155, 151, 149, 151, 143, 147, 141, - 143, 143, 145, 147, 145, 151, 141, 145, 139, 139, 141, 141, 139, 133, 141, 139, - 135, 139, 139, 141, 143, 145, 139, 139, 137, 147, 200, 212, 224, 225, 228, 233, - 236, 231, 221, 105, 12, 23, 20, 18, 29, 32, 41, 20, 41, 35, 32, 29, - 35, 41, 38, 29, 26, 32, 35, 81, 41, 41, 32, 46, 46, 29, 46, 35, - 162, 165, 174, 174, 174, 167, 158, 149, 145, 129, 108, 89, 89, 108, 125, 139, - 153, 160, 165, 169, 167, 164, 169, 165, 167, 167, 165, 158, 147, 131, 121, 105, - 74, 71, 63, 66, 84, 74, 89, 84, 86, 91, 91, 76, 86, 86, 91, 91, - 96, 89, 94, 96, 105, 112, 101, 112, 108, 112, 103, 121, 114, 117, 112, 110, - 114, 112, 114, 112, 117, 121, 114, 117, 114, 119, 121, 119, 117, 123, 112, 121, - 119, 123, 129, 147, 141, 137, 135, 117, 125, 117, 114, 117, 121, 127, 137, 147, - 137, 135, 121, 139, 139, 137, 145, 145, 155, 165, 171, 149, 167, 171, 174, 177, - 171, 162, 189, 184, 179, 192, 177, 190, 200, 193, 185, 203, 193, 185, 207, 203, - 189, 203, 209, 203, 203, 204, 215, 207, 195, 149, 114, 114, 105, 105, 117, 114, - 114, 112, 119, 114, 117, 114, 112, 114, 114, 114, 110, 105, 103, 103, 94, 101, - 108, 91, 91, 89, 96, 108, 112, 123, 133, 133, 141, 145, 145, 145, 143, 145, - 141, 145, 147, 151, 147, 145, 149, 151, 145, 153, 153, 147, 147, 145, 143, 139, - 137, 145, 145, 145, 143, 151, 145, 139, 139, 135, 145, 143, 141, 137, 139, 141, - 139, 143, 143, 139, 143, 143, 137, 141, 143, 139, 172, 203, 219, 225, 231, 233, - 234, 233, 204, 32, 18, 23, 26, 32, 20, 32, 35, 41, 43, 35, 32, 38, - 38, 38, 29, 26, 29, 35, 46, 26, 29, 29, 23, 26, 26, 23, 46, 46, - 169, 171, 177, 176, 171, 164, 160, 149, 139, 112, 94, 74, 74, 105, 121, 139, - 153, 164, 167, 167, 172, 165, 167, 165, 164, 167, 169, 158, 151, 141, 119, 98, - 86, 71, 60, 60, 63, 74, 89, 91, 89, 91, 79, 84, 91, 91, 89, 94, - 91, 96, 98, 96, 101, 103, 91, 101, 114, 108, 112, 103, 105, 112, 112, 108, - 119, 112, 117, 117, 110, 114, 121, 119, 117, 114, 117, 114, 117, 112, 114, 181, - 139, 105, 125, 121, 121, 125, 121, 114, 117, 119, 125, 117, 139, 131, 145, 137, - 131, 137, 133, 145, 135, 151, 141, 149, 153, 155, 141, 162, 167, 167, 169, 153, - 174, 155, 182, 193, 172, 181, 193, 201, 198, 200, 192, 185, 200, 203, 192, 198, - 209, 193, 197, 203, 209, 201, 200, 204, 212, 206, 172, 108, 103, 103, 108, 108, - 112, 112, 114, 112, 108, 117, 110, 108, 112, 108, 114, 112, 103, 110, 103, 105, - 96, 103, 94, 91, 101, 103, 110, 123, 129, 131, 141, 147, 147, 143, 143, 145, - 141, 145, 143, 143, 145, 141, 147, 145, 147, 153, 149, 153, 149, 139, 137, 145, - 139, 137, 139, 147, 143, 143, 141, 143, 143, 147, 141, 141, 139, 135, 137, 139, - 135, 141, 147, 143, 145, 153, 145, 137, 145, 137, 145, 184, 213, 224, 231, 233, - 230, 215, 121, 12, 26, 12, 15, 23, 41, 23, 38, 38, 38, 29, 29, 52, - 38, 32, 29, 26, 26, 35, 41, 46, 32, 20, 29, 32, 32, 43, 41, 32, - 171, 174, 181, 171, 167, 162, 155, 145, 129, 110, 84, 68, 74, 98, 127, 141, - 149, 165, 169, 167, 171, 165, 171, 162, 164, 167, 160, 155, 147, 135, 119, 105, - 74, 63, 55, 74, 74, 81, 81, 86, 84, 89, 91, 86, 84, 91, 89, 105, - 91, 89, 108, 96, 89, 94, 94, 101, 101, 110, 112, 108, 123, 105, 103, 114, - 114, 117, 117, 123, 117, 114, 112, 112, 123, 121, 125, 114, 114, 119, 139, 174, - 79, 98, 121, 123, 121, 108, 121, 112, 123, 121, 117, 121, 125, 139, 133, 129, - 139, 127, 135, 137, 141, 131, 141, 139, 131, 156, 149, 160, 158, 158, 160, 160, - 172, 197, 174, 171, 197, 181, 197, 201, 187, 197, 201, 200, 185, 206, 204, 185, - 192, 204, 206, 198, 206, 207, 207, 204, 203, 203, 206, 198, 129, 101, 103, 103, - 110, 112, 108, 108, 114, 108, 108, 112, 110, 112, 108, 105, 103, 96, 98, 101, - 101, 101, 91, 91, 91, 98, 108, 125, 133, 135, 143, 147, 151, 155, 149, 143, - 147, 141, 147, 151, 143, 143, 145, 143, 149, 145, 149, 153, 153, 145, 145, 139, - 135, 141, 137, 139, 145, 143, 147, 141, 137, 143, 141, 141, 141, 139, 139, 139, - 135, 143, 143, 143, 143, 147, 141, 139, 145, 147, 143, 151, 209, 219, 230, 228, - 216, 158, 29, 32, 18, 29, 26, 20, 29, 23, 43, 52, 35, 52, 43, 46, - 43, 26, 32, 32, 35, 41, 35, 20, 23, 32, 32, 29, 38, 49, 29, 12, - 171, 169, 174, 167, 165, 153, 149, 137, 123, 103, 63, 55, 71, 103, 127, 139, - 151, 169, 164, 176, 172, 167, 169, 169, 167, 167, 162, 151, 143, 125, 119, 101, - 71, 68, 49, 74, 71, 81, 86, 86, 81, 96, 98, 89, 89, 94, 96, 89, - 96, 94, 91, 91, 91, 103, 101, 103, 108, 112, 105, 108, 105, 108, 110, 108, - 114, 117, 114, 119, 114, 114, 117, 117, 117, 121, 117, 114, 114, 117, 149, 131, - 84, 103, 112, 110, 123, 112, 119, 121, 133, 121, 114, 112, 123, 133, 133, 139, - 131, 123, 141, 129, 139, 139, 143, 129, 141, 151, 155, 153, 139, 169, 147, 181, - 174, 174, 193, 181, 174, 195, 185, 182, 197, 197, 190, 193, 204, 190, 195, 204, - 200, 193, 203, 207, 203, 200, 209, 209, 203, 203, 204, 209, 207, 176, 108, 91, - 101, 101, 91, 101, 112, 110, 101, 110, 110, 103, 105, 110, 108, 103, 108, 98, - 103, 98, 103, 101, 96, 101, 108, 121, 131, 139, 149, 149, 151, 153, 147, 149, - 145, 147, 141, 149, 137, 149, 137, 139, 135, 139, 145, 151, 145, 143, 147, 143, - 137, 141, 137, 143, 139, 145, 141, 139, 139, 145, 137, 143, 141, 141, 135, 137, - 143, 143, 139, 149, 143, 145, 147, 149, 143, 149, 151, 143, 177, 212, 224, 212, - 160, 29, 18, 26, 32, 20, 29, 26, 23, 41, 32, 32, 41, 41, 38, 46, - 23, 29, 26, 35, 41, 35, 29, 26, 23, 23, 38, 41, 55, 55, 18, 6, - 171, 172, 176, 167, 160, 151, 141, 125, 110, 71, 60, 57, 76, 108, 127, 137, - 145, 162, 167, 169, 171, 165, 165, 171, 169, 171, 164, 156, 137, 135, 119, 101, - 63, 68, 43, 63, 71, 68, 89, 86, 91, 103, 101, 101, 89, 94, 89, 89, - 91, 91, 98, 98, 101, 98, 94, 108, 110, 108, 101, 105, 112, 112, 110, 112, - 119, 114, 112, 112, 119, 117, 123, 123, 121, 121, 114, 114, 119, 133, 108, 98, - 110, 101, 110, 114, 119, 110, 110, 127, 114, 121, 114, 117, 129, 135, 137, 141, - 123, 135, 129, 127, 147, 127, 139, 131, 145, 139, 117, 153, 153, 164, 169, 162, - 182, 177, 177, 198, 174, 177, 200, 184, 169, 201, 197, 181, 197, 201, 200, 193, - 209, 204, 193, 206, 209, 212, 206, 203, 207, 209, 207, 209, 212, 210, 185, 110, - 94, 89, 96, 98, 103, 105, 96, 108, 103, 103, 112, 108, 110, 108, 110, 98, - 101, 103, 91, 89, 94, 101, 103, 119, 133, 135, 147, 149, 149, 151, 149, 149, - 147, 141, 143, 137, 135, 137, 137, 141, 129, 137, 139, 145, 149, 145, 145, 139, - 137, 143, 141, 141, 147, 145, 145, 141, 139, 139, 137, 143, 141, 143, 141, 143, - 147, 143, 141, 143, 145, 141, 143, 145, 147, 143, 151, 151, 160, 204, 197, 139, - 29, 18, 29, 26, 35, 29, 29, 29, 35, 32, 38, 29, 41, 43, 38, 23, - 32, 46, 43, 43, 43, 43, 38, 29, 38, 32, 52, 55, 49, 20, 6, 18, - 174, 174, 172, 164, 162, 147, 135, 121, 91, 66, 63, 60, 86, 105, 123, 139, - 153, 164, 167, 167, 176, 167, 167, 169, 162, 162, 165, 155, 143, 135, 112, 96, - 66, 71, 57, 68, 74, 91, 79, 86, 96, 91, 89, 112, 98, 91, 81, 84, - 96, 91, 81, 86, 94, 98, 105, 101, 105, 105, 105, 112, 108, 112, 108, 103, - 119, 110, 105, 112, 114, 110, 121, 114, 121, 110, 114, 110, 119, 149, 101, 108, - 105, 119, 119, 112, 103, 101, 117, 119, 123, 121, 127, 133, 121, 143, 123, 135, - 121, 143, 125, 143, 145, 137, 117, 133, 149, 143, 153, 141, 158, 147, 162, 172, - 167, 189, 169, 181, 187, 185, 185, 200, 200, 182, 189, 206, 201, 195, 203, 209, - 195, 201, 209, 203, 201, 207, 207, 209, 197, 206, 210, 212, 210, 206, 212, 193, - 119, 76, 89, 91, 89, 96, 98, 96, 112, 103, 110, 96, 98, 96, 101, 103, - 110, 98, 94, 91, 89, 96, 103, 123, 129, 143, 143, 151, 153, 153, 151, 147, - 151, 145, 145, 141, 137, 133, 131, 133, 127, 125, 133, 141, 145, 149, 145, 143, - 143, 135, 137, 139, 145, 147, 143, 139, 139, 141, 141, 137, 139, 147, 139, 143, - 143, 139, 145, 145, 147, 143, 149, 151, 147, 147, 153, 153, 160, 162, 112, 29, - 23, 26, 43, 23, 26, 32, 35, 32, 35, 32, 32, 43, 29, 43, 32, 20, - 29, 52, 43, 38, 38, 26, 26, 49, 29, 55, 71, 60, 41, 12, 9, 38, - 177, 172, 167, 162, 158, 139, 121, 103, 76, 63, 63, 63, 94, 112, 123, 135, - 153, 162, 167, 174, 169, 169, 164, 164, 164, 165, 158, 151, 145, 129, 119, 105, - 71, 66, 57, 71, 76, 74, 86, 79, 81, 89, 91, 96, 96, 103, 94, 94, - 96, 91, 86, 101, 98, 98, 108, 105, 110, 108, 108, 114, 103, 105, 105, 114, - 110, 112, 112, 114, 117, 112, 121, 112, 121, 119, 112, 112, 187, 119, 103, 108, - 112, 105, 101, 98, 101, 105, 114, 119, 131, 125, 129, 105, 149, 129, 112, 141, - 129, 141, 125, 149, 119, 137, 133, 147, 125, 149, 131, 155, 129, 167, 145, 165, - 176, 165, 179, 167, 171, 195, 193, 182, 193, 197, 193, 187, 204, 206, 198, 198, - 206, 204, 198, 210, 206, 206, 201, 204, 207, 206, 204, 209, 207, 206, 209, 209, - 210, 121, 112, 98, 79, 86, 89, 96, 110, 98, 105, 103, 105, 98, 101, 98, - 96, 91, 98, 94, 96, 96, 98, 121, 131, 147, 149, 151, 149, 162, 151, 151, - 149, 145, 149, 143, 129, 127, 123, 125, 117, 119, 131, 139, 141, 155, 149, 143, - 143, 139, 143, 149, 145, 147, 147, 139, 137, 143, 139, 137, 145, 139, 145, 149, - 141, 141, 143, 147, 145, 149, 145, 147, 145, 149, 158, 156, 151, 108, 43, 29, - 38, 26, 15, 23, 18, 20, 35, 49, 63, 38, 32, 26, 32, 26, 15, 18, - 43, 38, 43, 49, 32, 46, 35, 41, 41, 60, 63, 29, 12, 12, 41, 127, - 172, 167, 160, 156, 151, 139, 110, 81, 66, 71, 63, 71, 86, 110, 125, 135, - 147, 162, 167, 171, 167, 172, 169, 164, 162, 160, 160, 153, 147, 131, 121, 91, - 68, 66, 55, 71, 68, 68, 86, 84, 94, 84, 86, 94, 89, 96, 91, 94, - 96, 96, 91, 101, 108, 89, 96, 103, 98, 108, 108, 108, 101, 112, 112, 123, - 119, 114, 117, 112, 121, 110, 110, 117, 114, 119, 112, 123, 174, 101, 108, 117, - 96, 103, 98, 103, 101, 117, 117, 108, 121, 117, 112, 133, 123, 125, 135, 129, - 145, 121, 133, 129, 147, 141, 143, 147, 133, 143, 131, 141, 169, 153, 158, 147, - 167, 167, 158, 190, 181, 181, 197, 197, 190, 190, 201, 200, 189, 201, 206, 200, - 197, 204, 206, 200, 200, 207, 207, 198, 201, 207, 201, 185, 197, 203, 215, 221, - 225, 224, 221, 207, 117, 71, 84, 91, 105, 98, 105, 108, 103, 101, 91, 91, - 101, 105, 98, 94, 91, 103, 110, 121, 137, 143, 149, 153, 155, 155, 160, 156, - 153, 151, 151, 139, 131, 123, 114, 114, 114, 112, 125, 127, 141, 145, 149, 147, - 145, 145, 141, 147, 151, 151, 147, 143, 141, 141, 141, 141, 141, 143, 143, 143, - 139, 145, 145, 143, 141, 143, 145, 145, 151, 153, 151, 158, 123, 57, 23, 32, - 26, 20, 32, 29, 20, 35, 43, 41, 41, 43, 35, 32, 23, 23, 35, 41, - 43, 60, 38, 32, 26, 38, 35, 38, 60, 57, 35, 20, 18, 38, 117, 151, - 164, 162, 156, 155, 139, 123, 96, 66, 66, 74, 71, 66, 79, 114, 123, 139, - 153, 160, 165, 171, 176, 169, 171, 167, 167, 164, 160, 156, 141, 135, 112, 108, - 79, 52, 68, 57, 89, 71, 81, 89, 114, 91, 89, 101, 103, 89, 91, 94, - 89, 94, 94, 103, 98, 98, 108, 105, 103, 112, 110, 105, 105, 105, 110, 108, - 114, 114, 114, 112, 117, 117, 114, 119, 114, 112, 114, 155, 121, 105, 103, 98, - 103, 94, 103, 105, 114, 119, 108, 114, 110, 125, 114, 137, 112, 123, 135, 127, - 133, 127, 135, 133, 143, 131, 151, 117, 153, 143, 143, 153, 151, 167, 143, 162, - 155, 174, 182, 162, 193, 200, 184, 197, 200, 203, 176, 200, 204, 190, 198, 198, - 209, 190, 203, 207, 206, 195, 203, 206, 193, 195, 203, 218, 218, 219, 221, 224, - 225, 231, 234, 234, 212, 84, 79, 79, 96, 96, 101, 105, 96, 91, 91, 98, - 96, 91, 96, 86, 101, 94, 98, 127, 135, 141, 147, 145, 160, 155, 156, 155, - 153, 156, 155, 149, 133, 121, 112, 98, 103, 108, 110, 119, 135, 139, 145, 149, - 143, 143, 143, 145, 141, 149, 143, 141, 141, 145, 143, 139, 139, 141, 145, 141, - 145, 137, 145, 143, 145, 149, 149, 149, 151, 149, 158, 139, 79, 35, 23, 32, - 41, 18, 26, 18, 20, 35, 32, 35, 38, 35, 29, 23, 26, 29, 32, 43, - 46, 43, 35, 29, 41, 35, 52, 46, 76, 55, 20, 26, 35, 91, 139, 167, - 162, 164, 151, 143, 129, 108, 89, 66, 74, 76, 76, 66, 86, 110, 131, 143, - 151, 160, 165, 172, 169, 169, 169, 171, 165, 164, 165, 153, 143, 133, 114, 101, - 76, 66, 46, 63, 66, 74, 86, 86, 79, 86, 89, 89, 96, 91, 84, 89, - 94, 91, 89, 89, 98, 101, 94, 105, 108, 105, 114, 105, 114, 110, 121, 112, - 117, 110, 121, 112, 114, 117, 110, 110, 114, 117, 125, 129, 117, 101, 103, 101, - 98, 105, 101, 108, 112, 110, 108, 108, 123, 123, 121, 123, 117, 135, 114, 135, - 123, 125, 127, 133, 131, 141, 133, 156, 114, 137, 129, 160, 141, 155, 165, 155, - 177, 153, 184, 193, 185, 185, 201, 203, 182, 198, 201, 192, 187, 201, 203, 198, - 195, 204, 204, 193, 200, 195, 190, 195, 212, 219, 216, 216, 225, 218, 218, 222, - 221, 225, 233, 236, 233, 177, 74, 71, 84, 91, 101, 96, 96, 96, 91, 94, - 84, 96, 98, 98, 101, 103, 112, 127, 131, 143, 147, 155, 153, 158, 158, 153, - 151, 153, 156, 141, 133, 121, 103, 94, 89, 91, 96, 117, 125, 129, 143, 155, - 145, 147, 141, 141, 141, 143, 145, 143, 139, 137, 141, 141, 143, 149, 143, 145, - 137, 135, 143, 139, 143, 141, 147, 151, 151, 156, 137, 103, 23, 32, 29, 32, - 20, 23, 43, 26, 20, 46, 26, 35, 29, 32, 38, 32, 20, 32, 35, 41, - 29, 29, 32, 29, 35, 38, 55, 71, 84, 52, 23, 35, 91, 141, 155, 171, - 164, 156, 151, 131, 114, 94, 60, 71, 66, 74, 76, 76, 84, 103, 127, 139, - 149, 158, 167, 174, 169, 167, 172, 167, 169, 164, 158, 155, 143, 135, 114, 89, - 74, 60, 60, 66, 74, 81, 81, 86, 81, 96, 112, 91, 98, 86, 86, 89, - 91, 96, 98, 101, 98, 94, 105, 105, 103, 101, 110, 105, 112, 112, 108, 114, - 112, 112, 117, 117, 121, 112, 114, 119, 119, 121, 129, 117, 103, 110, 96, 91, - 98, 105, 114, 114, 110, 119, 105, 125, 123, 114, 123, 121, 119, 117, 125, 125, - 123, 125, 125, 141, 129, 125, 131, 135, 145, 119, 147, 143, 139, 143, 147, 162, - 145, 185, 182, 174, 192, 206, 176, 190, 200, 197, 177, 201, 203, 190, 190, 204, - 204, 192, 185, 190, 184, 198, 216, 218, 221, 216, 221, 218, 216, 222, 218, 219, - 222, 221, 225, 230, 233, 215, 121, 60, 81, 89, 94, 89, 98, 91, 91, 89, - 96, 89, 94, 86, 86, 96, 105, 123, 137, 139, 143, 153, 153, 151, 158, 151, - 149, 151, 155, 143, 145, 125, 112, 76, 68, 71, 76, 96, 114, 129, 139, 145, - 147, 143, 145, 135, 141, 143, 143, 141, 139, 141, 145, 139, 141, 145, 145, 143, - 141, 143, 147, 147, 149, 145, 145, 156, 156, 145, 108, 38, 23, 35, 18, 20, - 20, 29, 35, 32, 29, 38, 35, 38, 41, 32, 23, 32, 23, 38, 38, 46, - 26, 46, 41, 26, 41, 52, 46, 66, 74, 46, 29, 81, 133, 153, 160, 162, - 153, 153, 141, 127, 108, 86, 66, 76, 79, 71, 71, 74, 91, 108, 121, 137, - 151, 156, 167, 172, 172, 171, 169, 171, 169, 164, 156, 156, 137, 127, 105, 117, - 66, 55, 55, 63, 74, 79, 94, 84, 91, 91, 94, 96, 98, 86, 101, 101, - 94, 91, 89, 96, 91, 94, 105, 105, 105, 112, 105, 105, 114, 108, 121, 117, - 114, 119, 121, 114, 117, 114, 123, 112, 114, 121, 117, 103, 105, 91, 101, 103, - 103, 114, 121, 108, 108, 112, 119, 119, 105, 119, 121, 112, 123, 114, 127, 112, - 133, 119, 139, 139, 153, 135, 145, 143, 123, 145, 129, 145, 133, 145, 156, 133, - 169, 155, 174, 181, 172, 182, 197, 195, 190, 198, 207, 201, 187, 206, 201, 193, - 181, 179, 185, 204, 216, 219, 213, 218, 219, 216, 215, 219, 215, 216, 219, 210, - 215, 221, 222, 230, 230, 233, 213, 84, 76, 76, 84, 89, 84, 94, 84, 91, - 94, 89, 96, 89, 86, 105, 103, 121, 127, 139, 145, 153, 156, 155, 151, 151, - 149, 151, 149, 143, 137, 129, 108, 81, 76, 52, 52, 81, 112, 127, 131, 145, - 149, 143, 145, 139, 141, 145, 145, 145, 139, 145, 147, 137, 139, 145, 143, 141, - 135, 141, 141, 145, 145, 145, 145, 155, 155, 121, 74, 35, 29, 15, 9, 20, - 43, 23, 38, 32, 41, 43, 32, 26, 29, 35, 26, 43, 29, 35, 41, 35, - 26, 38, 35, 35, 43, 63, 68, 57, 60, 55, 76, 123, 147, 153, 156, 162, - 145, 147, 133, 105, 89, 60, 71, 71, 79, 74, 71, 81, 74, 105, 123, 141, - 151, 164, 167, 171, 169, 172, 171, 169, 171, 164, 158, 156, 141, 129, 112, 98, - 76, 68, 76, 68, 84, 79, 74, 79, 86, 89, 86, 89, 96, 91, 105, 94, - 91, 91, 94, 94, 96, 96, 101, 103, 101, 105, 110, 103, 110, 108, 105, 110, - 114, 117, 119, 114, 117, 114, 129, 114, 123, 125, 110, 96, 94, 105, 108, 108, - 121, 119, 108, 110, 127, 117, 117, 119, 110, 121, 114, 127, 110, 125, 121, 137, - 129, 137, 125, 143, 129, 137, 143, 137, 145, 131, 147, 133, 143, 147, 151, 162, - 151, 164, 179, 160, 179, 204, 171, 187, 197, 190, 187, 204, 204, 174, 181, 174, - 190, 210, 215, 225, 215, 215, 215, 212, 216, 215, 218, 215, 216, 212, 218, 219, - 210, 215, 222, 221, 230, 227, 231, 181, 81, 66, 74, 94, 84, 89, 86, 84, - 101, 89, 89, 89, 86, 98, 105, 117, 129, 135, 151, 151, 155, 153, 151, 155, - 155, 149, 153, 141, 139, 125, 112, 89, 43, 35, 41, 74, 112, 119, 127, 135, - 145, 145, 147, 139, 139, 137, 143, 149, 139, 139, 141, 143, 141, 143, 141, 147, - 137, 143, 139, 135, 139, 143, 153, 156, 143, 84, 18, 15, 18, 20, 23, 15, - 20, 20, 26, 52, 55, 43, 43, 38, 26, 15, 29, 38, 35, 43, 32, 20, - 46, 38, 66, 74, 55, 66, 96, 68, 49, 71, 125, 147, 156, 149, 151, 153, - 145, 139, 117, 94, 79, 63, 76, 76, 81, 81, 68, 74, 94, 103, 123, 139, - 149, 160, 164, 167, 174, 167, 174, 172, 171, 169, 158, 155, 139, 131, 119, 98, - 76, 63, 52, 63, 63, 79, 79, 84, 79, 79, 84, 89, 101, 96, 98, 89, - 96, 86, 96, 98, 98, 98, 98, 112, 98, 101, 108, 110, 112, 101, 112, 119, - 114, 112, 117, 114, 114, 114, 117, 123, 117, 110, 105, 105, 96, 96, 110, 105, - 103, 117, 101, 127, 119, 108, 112, 119, 123, 105, 121, 105, 114, 125, 117, 133, - 119, 129, 139, 135, 145, 125, 139, 133, 121, 153, 133, 141, 147, 145, 158, 143, - 171, 155, 171, 184, 172, 179, 189, 193, 174, 195, 203, 185, 184, 164, 182, 203, - 218, 215, 219, 218, 218, 213, 209, 212, 216, 212, 213, 216, 212, 215, 213, 215, - 221, 213, 215, 219, 219, 231, 228, 227, 165, 68, 63, 74, 81, 81, 89, 91, - 94, 86, 94, 86, 86, 94, 108, 117, 131, 139, 149, 155, 153, 155, 155, 151, - 155, 145, 151, 143, 141, 129, 123, 94, 52, 29, 38, 46, 74, 112, 119, 137, - 139, 149, 153, 147, 137, 139, 139, 139, 145, 139, 143, 139, 137, 139, 139, 141, - 137, 145, 141, 141, 149, 153, 155, 149, 105, 32, 26, 18, 32, 18, 20, 32, - 32, 49, 46, 41, 38, 43, 41, 38, 23, 18, 38, 46, 38, 29, 23, 20, - 29, 41, 63, 55, 63, 71, 68, 55, 89, 131, 145, 155, 158, 147, 149, 143, - 129, 129, 105, 79, 71, 68, 74, 79, 81, 84, 74, 71, 89, 103, 119, 139, - 151, 156, 164, 167, 167, 171, 167, 169, 167, 171, 158, 149, 141, 125, 105, 96, - 76, 63, 57, 74, 89, 86, 84, 86, 89, 81, 98, 96, 96, 105, 98, 98, - 94, 86, 94, 94, 98, 103, 98, 98, 105, 105, 108, 110, 101, 114, 117, 121, - 121, 119, 114, 119, 114, 108, 119, 127, 110, 105, 91, 101, 101, 101, 112, 108, - 108, 117, 123, 117, 114, 108, 117, 114, 112, 110, 121, 121, 119, 125, 141, 121, - 123, 137, 143, 141, 125, 151, 141, 143, 149, 139, 143, 143, 156, 156, 141, 151, - 155, 160, 174, 153, 182, 197, 179, 189, 187, 201, 165, 164, 167, 192, 213, 215, - 216, 221, 215, 212, 207, 212, 218, 206, 215, 215, 213, 212, 216, 209, 216, 213, - 212, 216, 218, 224, 221, 227, 231, 224, 224, 117, 68, 68, 74, 84, 81, 84, - 98, 96, 91, 89, 89, 89, 105, 117, 129, 133, 147, 153, 158, 155, 153, 153, - 153, 151, 151, 151, 137, 131, 119, 94, 71, 26, 18, 29, 57, 94, 105, 121, - 131, 147, 139, 151, 141, 137, 141, 139, 141, 141, 141, 135, 143, 139, 135, 143, - 141, 147, 143, 141, 147, 151, 155, 119, 52, 20, 60, 81, 55, 23, 20, 38, - 41, 41, 38, 43, 49, 43, 38, 26, 29, 26, 41, 49, 43, 41, 26, 35, - 20, 60, 49, 49, 74, 71, 76, 86, 119, 139, 155, 156, 162, 145, 131, 155, - 123, 117, 91, 63, 76, 74, 84, 84, 84, 66, 81, 76, 84, 105, 119, 141, - 153, 156, 164, 167, 165, 169, 167, 169, 169, 164, 158, 153, 141, 131, 117, 89, - 84, 63, 52, 74, 71, 79, 91, 86, 86, 81, 84, 89, 89, 91, 91, 91, - 91, 94, 98, 94, 101, 96, 101, 103, 98, 98, 110, 108, 105, 114, 114, 112, - 121, 119, 117, 112, 119, 117, 123, 110, 103, 108, 94, 101, 105, 105, 108, 103, - 114, 114, 114, 114, 114, 117, 101, 117, 91, 114, 110, 131, 119, 137, 114, 139, - 125, 145, 141, 127, 153, 137, 143, 139, 131, 147, 139, 153, 153, 139, 145, 135, - 155, 151, 167, 187, 189, 174, 192, 187, 169, 169, 149, 198, 209, 212, 207, 215, - 210, 212, 210, 215, 221, 213, 210, 215, 206, 213, 212, 212, 210, 210, 206, 218, - 219, 222, 222, 224, 222, 230, 233, 231, 227, 206, 84, 66, 60, 74, 76, 81, - 81, 76, 79, 84, 84, 98, 110, 117, 127, 139, 149, 153, 160, 155, 151, 155, - 156, 156, 153, 141, 141, 137, 121, 96, 63, 23, 20, 23, 57, 94, 101, 108, - 127, 141, 143, 149, 147, 145, 151, 143, 141, 143, 141, 135, 141, 133, 143, 145, - 143, 139, 145, 145, 149, 155, 137, 74, 18, 41, 23, 26, 32, 26, 26, 26, - 41, 32, 26, 38, 43, 41, 32, 29, 32, 49, 46, 32, 29, 32, 32, 41, - 35, 38, 55, 57, 79, 84, 84, 112, 137, 145, 158, 156, 158, 139, 145, 162, - 112, 103, 68, 66, 76, 76, 96, 84, 84, 79, 68, 68, 94, 105, 121, 139, - 143, 153, 160, 164, 171, 167, 169, 172, 169, 160, 160, 156, 141, 129, 114, 96, - 74, 66, 79, 71, 86, 89, 86, 91, 94, 96, 98, 81, 86, 84, 98, 84, - 103, 89, 84, 98, 105, 94, 105, 108, 119, 98, 105, 108, 110, 119, 114, 114, - 117, 119, 121, 114, 119, 125, 117, 121, 98, 96, 103, 121, 110, 105, 123, 108, - 110, 114, 112, 110, 105, 108, 110, 108, 108, 119, 119, 129, 131, 114, 137, 121, - 149, 137, 149, 143, 129, 149, 141, 149, 156, 143, 158, 119, 153, 151, 139, 151, - 139, 167, 181, 156, 185, 185, 181, 169, 147, 167, 203, 215, 212, 215, 213, 203, - 209, 212, 212, 222, 213, 216, 210, 210, 206, 204, 204, 207, 210, 216, 227, 225, - 221, 215, 221, 215, 219, 225, 225, 234, 228, 233, 181, 81, 66, 57, 71, 79, - 81, 76, 81, 76, 84, 98, 108, 127, 131, 143, 149, 151, 155, 153, 155, 151, - 158, 156, 149, 147, 139, 129, 125, 86, 63, 23, 15, 23, 46, 68, 96, 114, - 121, 139, 143, 145, 147, 149, 143, 145, 135, 143, 139, 149, 139, 141, 139, 137, - 141, 143, 145, 145, 149, 151, 103, 38, 18, 18, 29, 26, 23, 35, 29, 41, - 41, 29, 55, 41, 29, 29, 12, 23, 41, 46, 57, 32, 35, 35, 41, 35, - 43, 41, 57, 81, 71, 94, 117, 141, 151, 156, 151, 155, 147, 141, 158, 172, - 96, 94, 63, 71, 76, 79, 79, 86, 76, 74, 76, 76, 84, 103, 125, 137, - 145, 160, 158, 164, 164, 167, 172, 169, 165, 167, 158, 155, 141, 137, 110, 98, - 76, 52, 74, 76, 81, 86, 86, 76, 86, 96, 84, 84, 89, 94, 89, 94, - 96, 96, 86, 98, 89, 91, 101, 108, 112, 105, 112, 117, 105, 110, 108, 112, - 112, 114, 117, 119, 121, 129, 112, 110, 105, 110, 105, 112, 103, 117, 105, 112, - 117, 112, 123, 103, 114, 105, 112, 112, 119, 112, 125, 119, 145, 119, 121, 143, - 127, 143, 133, 133, 153, 129, 151, 149, 149, 149, 133, 141, 147, 127, 149, 135, - 164, 156, 158, 181, 190, 158, 151, 147, 181, 210, 207, 212, 210, 210, 209, 209, - 209, 218, 209, 215, 213, 206, 209, 204, 213, 206, 215, 216, 216, 213, 219, 215, - 210, 209, 212, 213, 213, 218, 219, 221, 224, 227, 222, 172, 101, 76, 63, 74, - 63, 81, 86, 68, 71, 86, 103, 117, 133, 135, 145, 153, 155, 155, 155, 151, - 155, 156, 149, 149, 139, 133, 121, 91, 57, 20, 35, 43, 20, 76, 89, 98, - 125, 127, 139, 145, 145, 145, 139, 133, 139, 137, 137, 133, 137, 147, 143, 143, - 147, 143, 143, 151, 155, 129, 57, 41, 18, 12, 23, 26, 32, 32, 38, 38, - 55, 32, 46, 29, 20, 20, 15, 32, 41, 46, 23, 26, 46, 41, 32, 38, - 57, 49, 41, 66, 81, 121, 133, 149, 151, 156, 151, 149, 147, 160, 164, 171, - 86, 74, 74, 79, 76, 81, 81, 81, 79, 79, 71, 71, 96, 98, 123, 133, - 145, 155, 164, 165, 167, 167, 169, 169, 164, 165, 160, 151, 135, 125, 121, 96, - 79, 63, 60, 63, 76, 89, 89, 89, 91, 84, 89, 91, 89, 91, 84, 89, - 98, 98, 105, 96, 101, 110, 94, 105, 110, 105, 110, 112, 108, 108, 119, 119, - 119, 112, 112, 114, 135, 112, 105, 105, 110, 114, 103, 105, 98, 110, 105, 108, - 105, 121, 101, 127, 117, 123, 96, 123, 101, 121, 114, 143, 117, 141, 129, 119, - 137, 131, 139, 137, 121, 153, 131, 145, 151, 137, 151, 143, 145, 145, 143, 156, - 139, 158, 177, 171, 153, 125, 165, 192, 206, 204, 213, 209, 201, 210, 213, 216, - 209, 203, 210, 206, 198, 206, 201, 213, 213, 215, 212, 204, 206, 204, 207, 210, - 210, 213, 216, 216, 219, 219, 221, 218, 224, 225, 227, 233, 218, 160, 63, 52, - 63, 57, 81, 79, 74, 89, 103, 119, 127, 137, 149, 155, 153, 153, 155, 155, - 151, 151, 155, 145, 145, 133, 119, 91, 74, 26, 23, 32, 52, 26, 71, 84, - 119, 117, 131, 141, 143, 145, 145, 145, 141, 137, 135, 137, 141, 143, 143, 147, - 141, 143, 151, 151, 139, 98, 15, 15, 18, 20, 18, 35, 23, 63, 41, 38, - 41, 35, 32, 32, 26, 26, 23, 35, 43, 35, 35, 20, 46, 35, 43, 38, - 43, 46, 49, 60, 103, 133, 149, 149, 155, 158, 149, 143, 160, 171, 165, 172, - 76, 63, 66, 86, 76, 79, 71, 79, 79, 84, 74, 68, 84, 96, 117, 139, - 143, 162, 158, 164, 172, 172, 169, 169, 172, 167, 165, 153, 141, 131, 114, 98, - 76, 60, 63, 63, 76, 84, 84, 91, 86, 101, 91, 89, 89, 96, 86, 98, - 89, 96, 94, 96, 96, 96, 103, 103, 103, 105, 114, 110, 103, 121, 114, 110, - 129, 108, 114, 127, 141, 98, 98, 96, 101, 112, 112, 103, 98, 105, 110, 105, - 112, 108, 101, 123, 114, 123, 112, 129, 105, 121, 131, 121, 135, 129, 139, 129, - 131, 139, 137, 133, 145, 143, 145, 141, 137, 147, 125, 135, 141, 129, 143, 133, - 158, 169, 160, 153, 127, 182, 204, 201, 198, 203, 200, 210, 210, 203, 213, 213, - 210, 206, 206, 207, 204, 212, 206, 209, 206, 209, 207, 210, 212, 210, 216, 209, - 212, 216, 216, 218, 215, 218, 215, 219, 222, 222, 225, 227, 230, 230, 160, 110, - 41, 55, 68, 68, 76, 86, 101, 117, 129, 137, 155, 151, 153, 155, 158, 151, - 151, 153, 155, 172, 141, 131, 114, 96, 74, 23, 20, 20, 23, 29, 43, 66, - 89, 112, 123, 131, 143, 143, 143, 143, 137, 137, 135, 143, 141, 133, 141, 143, - 147, 149, 155, 149, 108, 23, 15, 20, 20, 20, 23, 23, 52, 29, 46, 57, - 41, 32, 35, 41, 23, 29, 46, 41, 38, 23, 38, 32, 49, 41, 35, 43, - 52, 57, 68, 86, 129, 139, 151, 145, 156, 158, 143, 155, 169, 172, 172, 169, - 86, 84, 68, 79, 91, 76, 79, 84, 84, 81, 71, 74, 81, 108, 121, 139, - 143, 158, 164, 167, 169, 169, 171, 169, 169, 164, 158, 153, 147, 125, 121, 101, - 86, 60, 55, 66, 71, 81, 86, 86, 94, 84, 91, 79, 86, 94, 86, 94, - 94, 94, 86, 98, 91, 108, 101, 105, 105, 112, 112, 114, 112, 110, 112, 112, - 117, 117, 114, 139, 119, 98, 112, 91, 108, 101, 110, 103, 105, 108, 112, 96, - 110, 101, 110, 112, 112, 114, 125, 108, 133, 137, 139, 137, 119, 143, 131, 143, - 153, 129, 149, 145, 125, 156, 131, 137, 135, 133, 139, 123, 141, 149, 133, 151, - 131, 155, 135, 139, 187, 207, 206, 204, 204, 203, 207, 197, 207, 204, 201, 207, - 206, 204, 206, 207, 210, 195, 206, 209, 215, 203, 215, 218, 212, 213, 213, 215, - 216, 215, 216, 218, 216, 216, 219, 213, 219, 221, 224, 219, 225, 231, 228, 164, - 52, 52, 55, 68, 74, 84, 98, 123, 135, 137, 147, 155, 155, 153, 153, 151, - 156, 153, 162, 155, 137, 131, 114, 96, 66, 26, 20, 23, 12, 20, 23, 49, - 79, 91, 127, 125, 139, 145, 145, 143, 141, 137, 137, 135, 141, 139, 145, 147, - 147, 151, 147, 133, 49, 32, 9, 15, 23, 23, 43, 35, 41, 43, 41, 35, - 41, 46, 26, 35, 32, 41, 43, 66, 41, 26, 46, 32, 38, 38, 43, 35, - 46, 52, 91, 127, 153, 149, 149, 151, 153, 145, 153, 165, 172, 171, 171, 171, - 74, 89, 86, 81, 86, 76, 89, 94, 79, 89, 76, 76, 89, 103, 121, 139, - 143, 158, 162, 158, 167, 167, 167, 167, 167, 165, 160, 155, 145, 131, 117, 103, - 91, 60, 63, 68, 81, 79, 89, 84, 86, 86, 84, 101, 98, 86, 94, 94, - 89, 98, 89, 101, 96, 94, 101, 103, 98, 108, 112, 110, 108, 117, 117, 114, - 110, 110, 147, 112, 108, 94, 96, 91, 98, 101, 121, 114, 105, 103, 110, 108, - 123, 119, 110, 110, 125, 105, 121, 125, 125, 139, 114, 139, 139, 133, 153, 139, - 137, 141, 141, 141, 147, 131, 145, 139, 133, 139, 131, 145, 133, 143, 149, 123, - 145, 127, 167, 187, 204, 200, 207, 210, 210, 195, 206, 200, 198, 204, 203, 197, - 203, 206, 204, 200, 203, 212, 213, 207, 215, 216, 204, 213, 213, 213, 213, 213, - 218, 219, 212, 207, 213, 215, 216, 212, 221, 221, 219, 219, 218, 222, 230, 225, - 121, 26, 46, 57, 74, 81, 103, 119, 129, 135, 151, 149, 155, 155, 151, 149, - 149, 153, 155, 151, 143, 133, 110, 91, 66, 29, 23, 20, 12, 18, 15, 26, - 63, 81, 119, 123, 127, 137, 143, 143, 141, 135, 139, 135, 135, 143, 137, 145, - 147, 147, 145, 89, 20, 26, 20, 32, 23, 26, 41, 32, 41, 49, 38, 32, - 41, 38, 32, 26, 29, 38, 29, 23, 23, 29, 35, 35, 57, 41, 38, 38, - 43, 81, 129, 145, 155, 153, 147, 143, 137, 145, 160, 169, 174, 171, 172, 169, - 71, 71, 76, 79, 84, 84, 86, 86, 84, 81, 71, 79, 98, 108, 127, 133, - 145, 156, 162, 167, 165, 164, 171, 176, 162, 165, 160, 153, 147, 135, 112, 101, - 76, 68, 66, 66, 74, 74, 91, 86, 81, 81, 94, 86, 96, 98, 89, 81, - 91, 81, 94, 96, 94, 101, 98, 108, 103, 101, 110, 114, 112, 105, 121, 110, - 105, 123, 203, 117, 89, 98, 94, 96, 96, 101, 108, 105, 108, 105, 103, 105, - 98, 108, 101, 112, 98, 127, 114, 135, 117, 123, 139, 125, 133, 143, 145, 141, - 129, 127, 141, 141, 143, 141, 139, 149, 133, 125, 127, 108, 141, 127, 121, 123, - 145, 190, 197, 179, 182, 204, 204, 209, 201, 204, 192, 207, 198, 193, 203, 207, - 187, 195, 197, 204, 210, 212, 212, 213, 201, 213, 215, 209, 213, 210, 215, 209, - 215, 216, 215, 213, 219, 216, 216, 215, 212, 224, 222, 222, 225, 228, 218, 228, - 209, 55, 52, 52, 66, 76, 101, 117, 127, 139, 145, 153, 153, 153, 153, 156, - 151, 153, 149, 145, 139, 129, 123, 103, 76, 35, 20, 18, 35, 23, 18, 20, - 46, 74, 84, 110, 127, 129, 141, 147, 145, 137, 137, 133, 135, 139, 141, 145, - 149, 151, 112, 35, 29, 26, 18, 23, 20, 18, 35, 35, 29, 38, 55, 35, - 43, 35, 26, 29, 35, 43, 35, 23, 32, 23, 35, 29, 32, 38, 41, 49, - 60, 112, 141, 155, 158, 143, 141, 141, 151, 160, 169, 172, 172, 176, 172, 169, - 86, 81, 86, 84, 89, 84, 76, 66, 76, 84, 79, 79, 94, 110, 125, 137, - 149, 158, 162, 162, 167, 164, 165, 165, 164, 162, 165, 155, 139, 131, 114, 103, - 89, 60, 66, 71, 79, 81, 86, 79, 86, 98, 94, 84, 94, 91, 94, 94, - 89, 89, 98, 98, 94, 96, 98, 103, 112, 105, 112, 105, 101, 110, 114, 110, - 108, 156, 174, 108, 86, 86, 91, 108, 96, 112, 110, 110, 108, 108, 98, 117, - 96, 112, 108, 108, 112, 119, 131, 98, 131, 127, 131, 129, 141, 151, 145, 133, - 112, 153, 131, 143, 143, 133, 147, 127, 139, 141, 114, 135, 131, 121, 119, 171, - 182, 204, 190, 187, 198, 197, 203, 204, 195, 201, 206, 192, 204, 203, 195, 193, - 195, 204, 207, 206, 209, 209, 213, 212, 215, 206, 219, 216, 195, 215, 218, 213, - 213, 218, 212, 213, 215, 213, 213, 215, 209, 213, 218, 224, 221, 230, 225, 230, - 231, 114, 84, 52, 52, 74, 101, 108, 123, 141, 145, 153, 153, 153, 153, 155, - 151, 156, 151, 147, 145, 129, 117, 101, 71, 41, 18, 29, 20, 15, 12, 9, - 23, 46, 81, 103, 117, 121, 133, 139, 143, 137, 135, 131, 137, 143, 143, 147, - 155, 129, 57, 20, 18, 26, 20, 23, 52, 26, 32, 32, 43, 49, 46, 38, - 52, 29, 32, 41, 41, 52, 38, 35, 38, 35, 46, 41, 41, 20, 29, 74, - 108, 141, 151, 153, 149, 145, 131, 149, 158, 167, 169, 169, 172, 172, 172, 172, - 84, 76, 84, 84, 89, 81, 79, 89, 79, 74, 68, 79, 89, 105, 125, 143, - 147, 162, 164, 164, 167, 167, 165, 162, 162, 164, 162, 153, 145, 141, 123, 96, - 68, 63, 63, 66, 74, 76, 79, 89, 86, 91, 98, 89, 96, 96, 94, 91, - 91, 94, 101, 94, 103, 98, 108, 103, 108, 103, 112, 110, 110, 114, 110, 98, - 110, 206, 176, 91, 98, 84, 114, 94, 98, 98, 98, 112, 101, 101, 112, 103, - 117, 114, 114, 119, 114, 119, 133, 129, 117, 133, 141, 133, 153, 141, 121, 143, - 145, 108, 156, 143, 137, 151, 121, 131, 129, 131, 121, 96, 110, 123, 184, 179, - 192, 189, 209, 198, 201, 187, 198, 189, 207, 203, 201, 207, 184, 195, 201, 206, - 207, 204, 207, 209, 203, 210, 210, 213, 213, 212, 210, 216, 209, 213, 213, 212, - 212, 215, 213, 212, 209, 213, 210, 215, 212, 218, 219, 221, 225, 222, 228, 233, - 233, 218, 114, 38, 55, 68, 91, 112, 127, 135, 143, 147, 149, 149, 156, 153, - 158, 156, 155, 149, 139, 123, 119, 96, 74, 41, 26, 23, 35, 15, 15, 18, - 15, 29, 46, 84, 101, 114, 123, 141, 162, 156, 149, 127, 137, 143, 153, 149, - 147, 91, 32, 23, 20, 32, 20, 32, 35, 26, 52, 43, 35, 41, 41, 41, - 38, 26, 38, 49, 41, 26, 38, 26, 41, 49, 29, 35, 18, 23, 32, 94, - 133, 151, 153, 149, 151, 137, 143, 160, 165, 164, 174, 171, 169, 167, 169, 169, - 74, 96, 74, 86, 81, 89, 89, 91, 84, 76, 68, 76, 86, 96, 123, 139, - 145, 155, 160, 167, 169, 165, 164, 167, 165, 169, 165, 153, 141, 129, 112, 103, - 81, 71, 55, 76, 76, 74, 76, 86, 84, 86, 76, 94, 89, 91, 101, 89, - 96, 89, 98, 98, 108, 94, 101, 110, 98, 110, 110, 117, 105, 110, 103, 103, - 147, 210, 143, 86, 96, 101, 101, 94, 105, 108, 91, 110, 98, 112, 105, 103, - 117, 108, 117, 117, 108, 133, 119, 121, 135, 133, 151, 135, 131, 127, 145, 123, - 139, 145, 131, 137, 147, 125, 135, 119, 127, 121, 105, 98, 155, 182, 185, 185, - 192, 200, 206, 204, 185, 193, 190, 201, 198, 203, 190, 172, 197, 206, 210, 200, - 212, 210, 201, 201, 207, 207, 213, 213, 212, 215, 206, 210, 212, 212, 215, 215, - 213, 200, 203, 210, 212, 216, 219, 218, 216, 215, 218, 218, 221, 219, 222, 230, - 231, 234, 210, 43, 43, 60, 89, 110, 123, 129, 147, 151, 147, 149, 153, 153, - 155, 155, 155, 160, 139, 125, 121, 105, 74, 46, 35, 23, 15, 29, 23, 35, - 15, 12, 20, 52, 74, 137, 204, 209, 225, 225, 218, 179, 176, 207, 176, 143, - 105, 29, 23, 18, 32, 23, 41, 35, 46, 23, 46, 41, 29, 43, 41, 52, - 38, 46, 32, 43, 38, 29, 43, 35, 35, 41, 32, 32, 20, 29, 79, 129, - 149, 155, 151, 139, 139, 137, 153, 164, 165, 169, 171, 167, 164, 162, 164, 169, - 79, 91, 81, 81, 84, 79, 74, 76, 74, 74, 68, 68, 81, 101, 125, 137, - 147, 149, 160, 167, 167, 164, 165, 167, 169, 164, 164, 155, 145, 139, 121, 103, - 86, 74, 68, 66, 68, 81, 79, 84, 84, 79, 86, 84, 103, 91, 98, 94, - 81, 96, 101, 121, 108, 103, 101, 94, 98, 101, 105, 108, 103, 108, 101, 94, - 201, 198, 155, 89, 89, 103, 89, 98, 101, 101, 103, 105, 105, 112, 94, 101, - 86, 123, 110, 110, 123, 114, 133, 114, 127, 137, 127, 129, 151, 137, 131, 141, - 127, 114, 139, 137, 143, 123, 105, 127, 119, 105, 114, 162, 167, 195, 193, 197, - 189, 195, 187, 187, 197, 197, 200, 192, 190, 169, 190, 193, 198, 203, 203, 209, - 203, 204, 209, 206, 203, 210, 204, 215, 210, 210, 209, 212, 207, 215, 209, 206, - 209, 212, 207, 212, 212, 215, 212, 219, 218, 210, 218, 221, 216, 222, 221, 231, - 231, 233, 231, 103, 29, 60, 81, 103, 127, 137, 145, 151, 147, 151, 153, 153, - 155, 151, 149, 153, 141, 137, 127, 89, 79, 38, 32, 20, 32, 26, 26, 12, - 18, 12, 20, 68, 187, 213, 225, 225, 218, 212, 203, 213, 225, 225, 225, 185, - 55, 20, 26, 41, 18, 63, 20, 35, 46, 38, 41, 38, 43, 46, 60, 49, - 35, 49, 38, 35, 29, 26, 41, 38, 41, 32, 23, 23, 41, 71, 119, 139, - 156, 151, 149, 143, 141, 149, 156, 167, 172, 171, 162, 169, 165, 169, 164, 164, - 81, 81, 84, 79, 89, 89, 76, 76, 71, 81, 71, 79, 79, 98, 112, 139, - 141, 160, 162, 165, 167, 164, 164, 165, 164, 165, 164, 149, 145, 131, 114, 101, - 89, 55, 55, 63, 66, 76, 71, 76, 76, 91, 91, 79, 91, 89, 84, 86, - 96, 101, 81, 94, 89, 98, 94, 108, 105, 112, 103, 101, 105, 96, 101, 121, - 222, 189, 110, 79, 96, 91, 84, 101, 103, 101, 114, 114, 103, 96, 110, 94, - 114, 101, 121, 110, 123, 129, 123, 135, 131, 129, 141, 131, 137, 143, 121, 119, - 135, 141, 141, 135, 105, 123, 127, 108, 112, 129, 184, 185, 171, 184, 207, 201, - 197, 181, 184, 181, 197, 206, 204, 177, 179, 195, 190, 201, 193, 201, 201, 204, - 209, 206, 206, 204, 207, 207, 203, 201, 212, 213, 210, 207, 207, 197, 212, 215, - 207, 219, 215, 204, 210, 215, 216, 215, 219, 213, 216, 219, 216, 219, 221, 222, - 230, 228, 231, 185, 29, 55, 81, 103, 123, 133, 141, 151, 149, 158, 155, 151, - 155, 156, 149, 155, 141, 137, 125, 103, 68, 38, 32, 29, 32, 29, 18, 23, - 41, 26, 68, 203, 219, 227, 219, 204, 193, 215, 215, 219, 222, 224, 224, 219, - 79, 15, 23, 29, 29, 35, 20, 46, 55, 52, 46, 46, 26, 43, 41, 29, - 38, 41, 43, 41, 29, 35, 49, 63, 38, 23, 15, 26, 55, 108, 143, 151, - 153, 149, 149, 139, 151, 162, 169, 179, 165, 165, 169, 169, 165, 164, 165, 164, - 94, 84, 86, 89, 81, 71, 74, 81, 81, 76, 68, 81, 68, 98, 123, 129, - 147, 153, 162, 165, 162, 165, 169, 162, 158, 165, 160, 153, 143, 133, 112, 103, - 68, 55, 60, 68, 74, 74, 86, 74, 89, 86, 89, 86, 86, 94, 89, 86, - 96, 96, 96, 98, 91, 94, 96, 101, 103, 103, 108, 101, 98, 89, 96, 169, - 216, 153, 117, 98, 94, 86, 98, 96, 108, 98, 108, 110, 103, 103, 110, 110, - 105, 127, 101, 121, 123, 125, 133, 121, 133, 135, 135, 139, 133, 121, 125, 139, - 137, 135, 125, 101, 121, 103, 86, 103, 151, 174, 167, 189, 193, 181, 207, 181, - 187, 190, 181, 184, 200, 189, 179, 195, 200, 195, 195, 189, 200, 201, 204, 198, - 201, 204, 195, 213, 203, 201, 207, 207, 206, 210, 200, 198, 204, 209, 215, 213, - 215, 209, 216, 216, 207, 210, 215, 218, 215, 218, 216, 218, 216, 218, 219, 221, - 225, 233, 233, 218, 71, 49, 71, 103, 117, 135, 143, 149, 149, 153, 153, 153, - 151, 153, 151, 155, 143, 133, 114, 94, 66, 35, 26, 20, 26, 23, 18, 23, - 35, 119, 210, 225, 224, 210, 189, 212, 213, 222, 231, 233, 233, 236, 233, 230, - 176, 29, 23, 29, 26, 29, 38, 49, 35, 38, 38, 49, 52, 43, 46, 35, - 35, 43, 49, 35, 38, 46, 35, 35, 41, 29, 23, 26, 84, 133, 151, 151, - 149, 149, 143, 151, 158, 174, 174, 179, 167, 167, 164, 169, 165, 162, 165, 165, - 76, 81, 79, 81, 81, 84, 74, 79, 84, 86, 76, 60, 79, 105, 119, 131, - 143, 155, 158, 165, 169, 162, 165, 164, 165, 167, 160, 155, 139, 129, 112, 98, - 57, 63, 49, 55, 60, 68, 76, 81, 86, 91, 86, 89, 86, 89, 91, 86, - 96, 89, 91, 103, 94, 91, 98, 103, 105, 101, 103, 98, 103, 94, 98, 221, - 201, 172, 131, 96, 84, 101, 101, 96, 105, 105, 96, 112, 103, 117, 98, 125, - 101, 117, 117, 105, 131, 119, 131, 127, 125, 119, 143, 114, 98, 135, 135, 129, - 133, 119, 137, 123, 101, 105, 110, 171, 182, 179, 182, 200, 182, 171, 185, 187, - 179, 181, 192, 192, 156, 176, 198, 195, 197, 187, 190, 198, 189, 203, 204, 200, - 206, 204, 206, 197, 207, 198, 204, 203, 201, 189, 206, 212, 210, 210, 209, 210, - 215, 209, 206, 215, 213, 206, 212, 213, 215, 216, 215, 215, 212, 213, 212, 216, - 224, 228, 233, 228, 176, 43, 79, 103, 117, 131, 143, 149, 158, 149, 155, 156, - 153, 149, 153, 155, 145, 135, 117, 94, 71, 29, 29, 20, 23, 18, 20, 41, - 151, 213, 227, 221, 193, 179, 218, 222, 227, 228, 230, 230, 230, 233, 237, 237, - 222, 32, 35, 32, 32, 26, 32, 38, 43, 41, 46, 32, 35, 32, 29, 29, - 32, 43, 29, 38, 32, 46, 35, 49, 35, 23, 52, 68, 121, 149, 156, 156, - 149, 145, 147, 158, 164, 171, 169, 171, 167, 167, 165, 167, 169, 169, 162, 162, - 79, 74, 84, 71, 79, 79, 79, 84, 86, 86, 79, 79, 84, 96, 121, 127, - 147, 153, 164, 162, 169, 171, 171, 169, 164, 165, 162, 156, 147, 125, 117, 91, - 74, 57, 52, 52, 68, 66, 81, 86, 81, 81, 86, 101, 89, 101, 86, 84, - 89, 98, 84, 91, 98, 103, 91, 94, 91, 110, 103, 105, 96, 89, 123, 218, - 195, 169, 110, 86, 84, 91, 94, 96, 96, 94, 105, 123, 101, 101, 110, 98, - 123, 96, 105, 123, 129, 127, 127, 110, 125, 127, 101, 119, 131, 135, 141, 137, - 121, 131, 121, 105, 98, 119, 165, 162, 177, 190, 185, 184, 177, 164, 174, 171, - 193, 201, 172, 179, 184, 195, 177, 195, 187, 198, 200, 192, 201, 193, 206, 193, - 201, 204, 203, 207, 198, 206, 195, 190, 203, 210, 206, 209, 212, 209, 212, 210, - 209, 207, 209, 203, 209, 207, 207, 216, 216, 212, 213, 213, 213, 213, 219, 216, - 215, 224, 233, 230, 222, 108, 57, 96, 117, 137, 133, 155, 155, 149, 156, 158, - 151, 151, 151, 149, 137, 129, 121, 103, 57, 20, 18, 12, 15, 23, 66, 195, - 216, 221, 213, 171, 195, 221, 224, 225, 222, 224, 225, 222, 228, 228, 230, 237, - 231, 63, 32, 32, 23, 26, 29, 29, 32, 43, 66, 23, 32, 35, 26, 38, - 49, 29, 29, 29, 35, 29, 35, 32, 26, 38, 60, 108, 143, 158, 158, 145, - 143, 145, 153, 164, 167, 169, 167, 169, 167, 165, 165, 167, 164, 160, 164, 162, - 79, 86, 86, 91, 81, 79, 79, 86, 86, 79, 76, 71, 74, 108, 114, 129, - 143, 153, 160, 165, 167, 169, 165, 164, 164, 165, 160, 149, 141, 131, 114, 96, - 71, 74, 57, 60, 49, 76, 71, 86, 84, 89, 91, 91, 86, 91, 86, 96, - 84, 98, 94, 94, 91, 94, 101, 94, 103, 105, 110, 117, 96, 89, 155, 219, - 200, 155, 110, 84, 89, 91, 96, 91, 101, 101, 112, 117, 105, 94, 125, 105, - 94, 123, 125, 123, 133, 119, 110, 125, 119, 108, 129, 131, 135, 131, 117, 123, - 119, 101, 108, 74, 133, 174, 182, 169, 187, 189, 171, 172, 181, 172, 155, 200, - 172, 160, 185, 197, 195, 189, 185, 169, 203, 193, 203, 198, 193, 203, 189, 206, - 192, 206, 204, 203, 201, 177, 201, 204, 203, 207, 210, 206, 204, 206, 210, 210, - 207, 209, 210, 209, 203, 210, 209, 210, 213, 218, 209, 218, 218, 218, 218, 216, - 218, 221, 225, 230, 230, 201, 63, 79, 119, 133, 141, 155, 156, 160, 160, 160, - 158, 153, 160, 153, 145, 135, 114, 89, 55, 23, 15, 18, 26, 86, 203, 219, - 224, 204, 162, 197, 218, 228, 224, 221, 219, 218, 224, 224, 218, 222, 227, 237, - 231, 123, 35, 26, 32, 32, 29, 32, 35, 46, 49, 38, 29, 29, 23, 20, - 23, 15, 46, 32, 43, 43, 43, 43, 46, 41, 84, 139, 156, 156, 155, 149, - 141, 155, 165, 167, 169, 169, 164, 167, 165, 169, 167, 165, 162, 164, 165, 160, - 81, 84, 91, 81, 91, 81, 81, 89, 91, 91, 86, 71, 84, 101, 114, 137, - 147, 155, 164, 174, 174, 167, 172, 167, 167, 171, 164, 155, 145, 129, 121, 101, - 68, 57, 66, 55, 68, 76, 81, 89, 89, 91, 86, 89, 86, 96, 98, 94, - 89, 94, 101, 91, 94, 94, 98, 110, 110, 101, 110, 108, 103, 96, 181, 216, - 187, 137, 103, 81, 89, 103, 91, 98, 91, 108, 103, 105, 76, 110, 103, 103, - 127, 121, 125, 131, 114, 123, 119, 105, 117, 131, 139, 131, 112, 108, 137, 121, - 108, 117, 98, 141, 160, 174, 182, 195, 184, 174, 164, 165, 171, 185, 192, 167, - 182, 195, 182, 189, 193, 190, 182, 190, 185, 206, 195, 206, 198, 189, 189, 193, - 204, 195, 193, 182, 189, 206, 207, 210, 203, 203, 206, 204, 200, 193, 204, 212, - 209, 206, 209, 210, 212, 209, 210, 210, 216, 216, 216, 218, 216, 212, 209, 213, - 213, 216, 216, 222, 224, 225, 145, 74, 114, 129, 145, 151, 155, 151, 155, 158, - 156, 155, 156, 151, 143, 127, 101, 91, 41, 20, 15, 32, 123, 212, 227, 218, - 190, 156, 207, 221, 227, 224, 221, 218, 218, 218, 219, 216, 209, 219, 227, 234, - 234, 158, 35, 26, 23, 18, 32, 32, 41, 29, 52, 32, 26, 26, 29, 20, - 15, 35, 35, 38, 46, 43, 46, 32, 35, 57, 112, 149, 162, 153, 151, 147, - 153, 162, 165, 167, 162, 164, 164, 164, 167, 162, 165, 162, 164, 164, 162, 164, - 84, 86, 91, 91, 86, 89, 94, 89, 84, 81, 103, 91, 89, 105, 114, 125, - 145, 158, 160, 169, 171, 167, 171, 172, 169, 167, 165, 158, 145, 137, 110, 94, - 71, 63, 68, 66, 66, 79, 84, 81, 84, 86, 89, 89, 84, 96, 91, 86, - 91, 96, 101, 94, 103, 94, 98, 103, 105, 105, 105, 96, 98, 96, 218, 206, - 176, 177, 103, 76, 98, 89, 103, 108, 103, 101, 110, 71, 110, 119, 117, 110, - 117, 127, 112, 119, 125, 101, 105, 127, 119, 129, 137, 117, 119, 133, 127, 108, - 103, 98, 153, 162, 165, 181, 177, 179, 177, 171, 156, 167, 190, 181, 162, 182, - 190, 192, 189, 182, 184, 185, 200, 193, 197, 189, 198, 185, 203, 195, 203, 185, - 193, 190, 182, 201, 198, 206, 206, 207, 207, 198, 203, 209, 207, 204, 193, 209, - 210, 209, 204, 209, 209, 218, 216, 215, 213, 209, 203, 210, 210, 213, 213, 215, - 213, 215, 215, 218, 222, 225, 209, 112, 114, 125, 143, 153, 153, 158, 158, 156, - 155, 155, 153, 151, 135, 119, 101, 66, 38, 26, 60, 167, 219, 224, 215, 179, - 176, 209, 222, 222, 221, 221, 221, 215, 210, 209, 212, 213, 218, 221, 225, 231, - 236, 162, 29, 26, 23, 26, 43, 55, 46, 29, 35, 20, 23, 35, 23, 23, - 29, 26, 29, 35, 41, 38, 29, 23, 35, 101, 145, 153, 156, 153, 147, 151, - 162, 164, 164, 164, 167, 164, 165, 164, 165, 164, 167, 164, 160, 162, 164, 165, - 86, 89, 84, 89, 94, 91, 98, 89, 81, 84, 91, 91, 86, 103, 110, 135, - 141, 155, 162, 165, 174, 172, 176, 174, 171, 169, 164, 158, 143, 135, 114, 96, - 68, 63, 57, 63, 74, 74, 76, 91, 98, 96, 81, 91, 81, 89, 89, 96, - 91, 86, 91, 101, 98, 94, 98, 101, 103, 108, 103, 98, 94, 103, 221, 218, - 192, 137, 103, 81, 98, 96, 84, 98, 94, 81, 74, 110, 108, 112, 105, 125, - 112, 110, 125, 114, 119, 125, 114, 105, 137, 127, 131, 153, 131, 125, 114, 89, - 103, 137, 160, 179, 165, 179, 172, 158, 164, 176, 174, 174, 167, 165, 197, 185, - 185, 187, 187, 179, 187, 198, 201, 185, 192, 192, 184, 200, 184, 201, 182, 192, - 160, 176, 204, 198, 197, 198, 204, 207, 209, 206, 197, 198, 206, 206, 207, 197, - 210, 210, 210, 206, 198, 215, 203, 189, 206, 206, 206, 212, 212, 215, 212, 216, - 213, 215, 215, 218, 216, 221, 224, 212, 149, 123, 137, 147, 156, 151, 155, 155, - 156, 153, 149, 149, 129, 114, 86, 52, 52, 123, 200, 225, 219, 206, 182, 195, - 213, 222, 221, 219, 221, 218, 215, 210, 206, 212, 209, 216, 218, 224, 225, 231, - 234, 155, 20, 26, 26, 26, 46, 43, 52, 35, 29, 26, 23, 23, 32, 20, - 35, 41, 32, 29, 41, 23, 12, 43, 63, 133, 156, 156, 149, 149, 147, 160, - 169, 165, 169, 164, 165, 164, 165, 165, 162, 167, 165, 164, 164, 156, 162, 162, - 84, 96, 91, 89, 89, 94, 89, 86, 91, 89, 86, 86, 84, 98, 121, 125, - 143, 156, 160, 171, 167, 167, 171, 172, 165, 171, 167, 156, 153, 139, 114, 98, - 71, 63, 60, 57, 66, 81, 91, 81, 89, 96, 84, 101, 86, 84, 101, 108, - 94, 89, 91, 96, 103, 101, 108, 98, 108, 101, 108, 94, 91, 117, 222, 201, - 158, 117, 89, 76, 86, 89, 94, 98, 86, 98, 105, 121, 105, 114, 108, 110, - 119, 119, 96, 105, 117, 123, 112, 129, 133, 129, 121, 125, 129, 117, 76, 110, - 160, 169, 147, 162, 189, 162, 145, 160, 162, 187, 181, 147, 171, 181, 177, 200, - 182, 179, 190, 197, 195, 187, 185, 200, 190, 190, 192, 177, 200, 182, 189, 171, - 184, 204, 197, 198, 189, 192, 203, 203, 204, 206, 207, 204, 201, 204, 204, 207, - 197, 212, 213, 207, 190, 158, 182, 207, 212, 210, 204, 213, 209, 210, 209, 207, - 210, 213, 212, 209, 213, 221, 221, 222, 224, 165, 129, 145, 145, 149, 153, 155, - 156, 149, 149, 139, 131, 105, 81, 89, 179, 218, 219, 212, 185, 185, 201, 216, - 221, 221, 216, 215, 218, 212, 213, 209, 209, 212, 212, 219, 221, 224, 227, 230, - 231, 131, 41, 32, 38, 35, 35, 38, 43, 29, 41, 35, 26, 29, 20, 23, - 35, 52, 41, 55, 18, 12, 18, 52, 108, 147, 158, 153, 151, 147, 151, 162, - 164, 169, 169, 162, 164, 162, 164, 165, 162, 164, 162, 167, 165, 160, 164, 160, - 91, 89, 91, 91, 91, 91, 96, 91, 86, 89, 84, 86, 86, 94, 114, 133, - 149, 155, 164, 167, 171, 169, 174, 169, 169, 174, 167, 156, 145, 143, 114, 101, - 74, 66, 66, 71, 86, 74, 86, 89, 91, 91, 94, 94, 86, 94, 89, 96, - 89, 86, 91, 94, 94, 96, 98, 101, 103, 114, 112, 94, 91, 147, 216, 212, - 145, 110, 105, 91, 81, 81, 98, 86, 105, 98, 105, 103, 105, 108, 81, 121, - 110, 86, 125, 123, 110, 123, 123, 110, 133, 117, 108, 129, 121, 98, 110, 141, - 155, 169, 176, 151, 145, 162, 143, 156, 190, 155, 153, 185, 192, 179, 174, 174, - 192, 189, 189, 198, 185, 177, 182, 182, 201, 187, 185, 189, 181, 171, 174, 192, - 189, 184, 198, 200, 198, 189, 198, 198, 200, 206, 206, 198, 207, 210, 206, 206, - 210, 207, 209, 204, 158, 179, 204, 203, 207, 209, 210, 215, 209, 210, 212, 212, - 209, 209, 203, 207, 212, 212, 216, 218, 222, 215, 153, 145, 153, 156, 149, 151, - 149, 153, 139, 131, 125, 105, 155, 209, 228, 215, 201, 200, 189, 209, 218, 219, - 219, 216, 215, 210, 215, 210, 210, 209, 213, 210, 213, 218, 222, 225, 225, 228, - 230, 86, 41, 18, 29, 35, 29, 23, 55, 43, 41, 35, 32, 29, 41, 35, - 32, 41, 29, 35, 18, 12, 26, 89, 135, 160, 160, 155, 147, 151, 158, 162, - 167, 169, 167, 165, 164, 172, 160, 164, 165, 162, 162, 158, 164, 164, 164, 164, - 94, 91, 96, 91, 89, 84, 91, 89, 91, 84, 89, 81, 89, 103, 119, 137, - 141, 151, 164, 167, 169, 169, 174, 172, 172, 169, 165, 160, 153, 141, 117, 105, - 74, 55, 63, 60, 74, 74, 84, 81, 96, 91, 86, 91, 91, 89, 91, 89, - 94, 84, 76, 86, 98, 94, 103, 101, 105, 110, 98, 94, 74, 190, 221, 192, - 143, 110, 117, 94, 81, 94, 81, 101, 91, 117, 86, 105, 103, 89, 114, 112, - 110, 119, 114, 112, 121, 131, 125, 133, 108, 114, 119, 110, 96, 112, 145, 167, - 162, 160, 169, 151, 139, 141, 171, 165, 127, 160, 176, 177, 185, 182, 182, 181, - 184, 197, 185, 174, 190, 182, 176, 193, 182, 200, 190, 179, 153, 165, 200, 197, - 192, 184, 185, 201, 198, 190, 193, 203, 200, 193, 203, 197, 200, 210, 207, 206, - 209, 210, 190, 155, 190, 204, 198, 200, 206, 210, 207, 210, 209, 213, 210, 210, - 207, 207, 206, 201, 207, 210, 212, 215, 215, 218, 198, 139, 156, 153, 147, 143, - 153, 153, 141, 129, 160, 203, 224, 218, 207, 197, 203, 197, 209, 221, 218, 218, - 216, 215, 209, 213, 210, 209, 209, 212, 207, 213, 219, 221, 222, 222, 225, 230, - 231, 35, 38, 35, 41, 38, 32, 26, 41, 46, 35, 26, 26, 26, 23, 41, - 29, 38, 49, 35, 9, 18, 43, 114, 156, 162, 153, 156, 145, 155, 167, 167, - 165, 167, 169, 160, 165, 162, 162, 162, 164, 162, 156, 164, 160, 162, 160, 155, - 89, 101, 96, 96, 96, 86, 89, 91, 96, 89, 89, 86, 89, 98, 117, 135, - 149, 149, 153, 171, 169, 169, 174, 177, 172, 171, 169, 162, 155, 137, 119, 108, - 76, 66, 63, 60, 76, 76, 79, 84, 81, 96, 94, 94, 94, 96, 86, 96, - 101, 81, 86, 96, 86, 94, 103, 98, 110, 101, 96, 89, 81, 198, 215, 182, - 135, 127, 112, 105, 101, 79, 101, 94, 94, 86, 96, 79, 94, 114, 117, 117, - 110, 98, 123, 121, 125, 119, 110, 103, 123, 110, 108, 98, 112, 135, 160, 156, - 171, 143, 143, 151, 151, 160, 147, 135, 155, 158, 179, 177, 172, 185, 189, 187, - 172, 174, 181, 179, 167, 200, 195, 179, 193, 174, 187, 167, 187, 189, 181, 197, - 189, 192, 192, 187, 184, 203, 197, 184, 190, 200, 197, 198, 198, 210, 209, 212, - 206, 187, 172, 187, 197, 197, 204, 209, 209, 207, 206, 207, 204, 209, 204, 207, - 209, 209, 209, 207, 201, 201, 206, 206, 215, 212, 215, 143, 151, 155, 149, 151, - 149, 141, 151, 203, 219, 221, 212, 195, 207, 179, 203, 213, 221, 218, 215, 215, - 212, 209, 210, 209, 209, 210, 212, 212, 215, 218, 219, 222, 224, 225, 227, 225, - 222, 35, 35, 29, 41, 32, 35, 26, 32, 32, 46, 35, 26, 29, 15, 32, - 41, 32, 32, 29, 23, 38, 94, 143, 153, 162, 155, 145, 153, 158, 160, 169, - 164, 167, 165, 164, 162, 160, 160, 165, 162, 167, 160, 162, 164, 165, 158, 158, - 86, 96, 84, 86, 89, 96, 96, 98, 96, 81, 86, 79, 98, 98, 119, 131, - 147, 153, 158, 167, 169, 176, 172, 176, 174, 176, 172, 164, 153, 139, 123, 101, - 86, 55, 60, 57, 76, 81, 79, 84, 94, 101, 91, 96, 89, 86, 94, 94, - 86, 86, 89, 91, 86, 96, 103, 101, 96, 98, 105, 86, 91, 222, 215, 158, - 149, 121, 123, 98, 98, 103, 94, 96, 81, 94, 84, 98, 89, 91, 110, 94, - 94, 123, 110, 114, 117, 105, 101, 129, 108, 110, 110, 123, 151, 143, 149, 160, - 160, 141, 143, 147, 179, 139, 127, 162, 172, 169, 153, 176, 179, 187, 192, 174, - 177, 171, 164, 162, 193, 187, 201, 197, 174, 158, 164, 192, 184, 187, 185, 172, - 200, 193, 185, 185, 182, 181, 187, 197, 179, 187, 201, 207, 204, 195, 207, 201, - 172, 185, 201, 206, 198, 201, 192, 198, 200, 203, 204, 206, 204, 204, 204, 200, - 200, 206, 206, 207, 203, 201, 206, 201, 204, 209, 219, 164, 151, 151, 149, 147, - 139, 181, 209, 225, 209, 198, 193, 203, 187, 209, 219, 218, 216, 215, 212, 210, - 209, 209, 210, 212, 212, 213, 210, 213, 213, 216, 221, 218, 222, 225, 227, 228, - 212, 35, 38, 43, 43, 43, 41, 38, 46, 29, 23, 41, 20, 18, 23, 35, - 35, 35, 32, 35, 35, 74, 127, 147, 162, 153, 153, 147, 153, 160, 169, 167, - 167, 169, 164, 164, 164, 167, 158, 162, 162, 162, 164, 162, 162, 158, 160, 155, - 91, 94, 98, 89, 86, 91, 98, 89, 94, 86, 91, 76, 94, 98, 127, 133, - 149, 155, 164, 164, 171, 171, 174, 174, 172, 177, 174, 164, 155, 139, 127, 96, - 74, 68, 66, 63, 74, 76, 76, 79, 94, 81, 89, 91, 98, 94, 96, 94, - 79, 96, 94, 91, 94, 98, 96, 98, 98, 96, 101, 81, 96, 225, 209, 179, - 135, 135, 121, 98, 101, 98, 103, 96, 103, 91, 96, 91, 98, 117, 101, 110, - 117, 110, 123, 114, 101, 112, 114, 123, 117, 103, 123, 164, 147, 153, 147, 149, - 143, 145, 156, 153, 135, 129, 153, 164, 165, 169, 164, 177, 185, 177, 177, 177, - 174, 171, 181, 189, 167, 198, 179, 187, 155, 164, 187, 182, 181, 184, 176, 185, - 177, 189, 192, 172, 190, 187, 176, 192, 195, 189, 200, 190, 190, 160, 172, 179, - 189, 200, 203, 197, 187, 192, 189, 201, 203, 200, 201, 206, 206, 200, 193, 203, - 198, 195, 200, 203, 201, 193, 197, 198, 193, 206, 210, 197, 141, 156, 153, 172, - 207, 215, 212, 200, 203, 210, 189, 207, 212, 219, 215, 213, 213, 206, 207, 212, - 210, 207, 209, 212, 212, 210, 209, 215, 213, 212, 215, 221, 227, 227, 225, 230, - 171, 46, 35, 41, 41, 41, 46, 23, 41, 32, 20, 20, 20, 41, 23, 35, - 29, 41, 46, 55, 60, 101, 149, 153, 151, 149, 145, 149, 165, 169, 167, 162, - 169, 169, 169, 167, 164, 164, 160, 165, 167, 162, 160, 153, 160, 158, 158, 158, - 91, 98, 89, 86, 98, 96, 86, 86, 96, 89, 91, 81, 89, 103, 117, 135, - 145, 160, 167, 169, 174, 169, 179, 177, 174, 181, 174, 169, 153, 139, 123, 94, - 81, 68, 66, 68, 84, 98, 76, 86, 86, 91, 91, 84, 89, 94, 89, 96, - 81, 94, 96, 91, 98, 98, 91, 94, 105, 98, 86, 81, 129, 222, 204, 160, - 174, 127, 129, 98, 84, 101, 86, 98, 94, 103, 91, 101, 94, 96, 103, 103, - 103, 117, 103, 98, 121, 119, 125, 119, 98, 123, 151, 147, 153, 160, 149, 137, - 135, 153, 158, 129, 137, 162, 169, 158, 153, 172, 177, 160, 149, 172, 172, 174, - 185, 174, 172, 190, 179, 156, 181, 153, 181, 184, 179, 190, 182, 190, 185, 182, - 182, 182, 177, 192, 177, 197, 189, 181, 201, 190, 197, 190, 165, 190, 193, 192, - 197, 192, 179, 179, 201, 200, 206, 197, 206, 204, 201, 203, 203, 197, 190, 193, - 201, 200, 195, 198, 198, 195, 192, 201, 195, 198, 200, 210, 172, 149, 192, 221, - 216, 200, 184, 209, 195, 201, 212, 215, 216, 215, 212, 213, 209, 207, 209, 212, - 207, 210, 213, 213, 212, 210, 212, 209, 207, 213, 218, 218, 224, 228, 227, 231, - 137, 23, 35, 38, 43, 60, 38, 43, 46, 35, 38, 26, 29, 35, 26, 23, - 26, 29, 52, 57, 81, 131, 151, 156, 156, 143, 149, 155, 164, 167, 167, 162, - 164, 164, 165, 164, 164, 158, 162, 164, 162, 160, 160, 162, 162, 160, 160, 160, - 89, 89, 94, 91, 101, 91, 81, 89, 86, 86, 96, 86, 91, 101, 123, 137, - 145, 155, 164, 167, 174, 176, 177, 179, 177, 176, 174, 165, 156, 143, 119, 101, - 79, 66, 52, 60, 71, 66, 76, 81, 81, 89, 86, 94, 94, 91, 84, 86, - 86, 84, 94, 89, 98, 98, 96, 98, 96, 91, 89, 71, 172, 225, 204, 190, - 147, 137, 121, 108, 108, 89, 105, 110, 101, 86, 101, 94, 101, 108, 110, 108, - 117, 108, 98, 119, 127, 121, 114, 98, 114, 155, 139, 149, 149, 153, 145, 133, - 141, 158, 121, 125, 151, 149, 143, 167, 171, 174, 167, 174, 164, 165, 160, 182, - 192, 187, 174, 164, 181, 162, 164, 181, 182, 185, 181, 174, 182, 192, 185, 179, - 182, 184, 179, 176, 192, 179, 198, 201, 200, 201, 184, 182, 189, 181, 185, 192, - 201, 201, 203, 189, 198, 201, 201, 204, 192, 203, 198, 190, 198, 195, 189, 195, - 197, 197, 195, 197, 198, 195, 187, 201, 193, 197, 195, 203, 198, 207, 215, 209, - 197, 200, 204, 198, 206, 215, 216, 210, 212, 213, 210, 210, 212, 212, 206, 207, - 207, 212, 212, 213, 209, 212, 207, 203, 206, 218, 218, 216, 227, 227, 230, 230, - 68, 20, 26, 20, 26, 23, 35, 76, 55, 29, 38, 18, 41, 26, 26, 43, - 43, 52, 71, 84, 123, 145, 155, 149, 149, 145, 156, 165, 165, 169, 169, 169, - 165, 162, 165, 164, 160, 164, 160, 164, 162, 158, 164, 162, 156, 158, 162, 164, - 89, 94, 86, 94, 98, 79, 98, 94, 98, 84, 86, 94, 94, 112, 123, 131, - 145, 160, 171, 174, 174, 177, 179, 177, 176, 179, 174, 167, 156, 141, 112, 112, - 71, 63, 68, 68, 71, 79, 76, 86, 81, 79, 84, 101, 94, 89, 86, 84, - 89, 86, 91, 89, 86, 86, 98, 94, 91, 89, 84, 74, 203, 218, 207, 169, - 156, 141, 137, 119, 101, 112, 101, 89, 84, 98, 98, 96, 98, 103, 114, 112, - 110, 133, 121, 119, 133, 114, 96, 105, 151, 156, 149, 143, 143, 141, 139, 162, - 141, 119, 131, 155, 145, 151, 153, 155, 179, 151, 153, 158, 164, 169, 182, 169, - 189, 193, 193, 167, 156, 162, 177, 200, 185, 171, 177, 182, 174, 177, 195, 174, - 181, 179, 179, 179, 177, 190, 185, 200, 190, 184, 189, 193, 193, 187, 197, 189, - 184, 197, 193, 201, 193, 198, 200, 197, 203, 193, 200, 189, 177, 184, 193, 193, - 197, 182, 198, 187, 195, 190, 181, 177, 195, 185, 193, 201, 207, 209, 203, 203, - 203, 201, 207, 212, 219, 215, 212, 209, 209, 210, 209, 209, 209, 206, 207, 210, - 212, 213, 210, 212, 212, 212, 198, 200, 209, 213, 216, 218, 224, 227, 228, 222, - 20, 12, 23, 20, 43, 26, 23, 32, 32, 32, 18, 23, 29, 29, 49, 35, - 32, 38, 60, 101, 137, 155, 155, 153, 149, 151, 156, 164, 167, 167, 167, 164, - 167, 162, 160, 167, 162, 164, 162, 164, 162, 164, 162, 162, 158, 158, 160, 162, - 98, 98, 84, 84, 84, 86, 89, 89, 86, 86, 89, 86, 101, 108, 117, 133, - 145, 156, 164, 172, 176, 177, 179, 174, 176, 179, 172, 169, 155, 135, 121, 105, - 79, 55, 60, 60, 76, 79, 79, 89, 81, 91, 81, 91, 84, 89, 86, 91, - 89, 81, 98, 91, 86, 91, 103, 94, 89, 103, 79, 79, 218, 219, 193, 201, - 141, 147, 125, 127, 117, 125, 108, 108, 101, 94, 101, 96, 103, 123, 94, 98, - 114, 108, 117, 123, 117, 108, 103, 141, 149, 149, 155, 141, 133, 143, 160, 137, - 135, 133, 158, 145, 151, 143, 155, 158, 131, 167, 149, 158, 172, 177, 182, 190, - 172, 165, 179, 153, 171, 185, 171, 185, 182, 172, 176, 184, 189, 172, 171, 187, - 179, 177, 184, 176, 177, 174, 193, 181, 181, 193, 197, 189, 181, 187, 195, 176, - 190, 193, 192, 203, 201, 197, 195, 201, 195, 189, 184, 189, 185, 176, 187, 193, - 197, 197, 181, 189, 189, 181, 172, 172, 182, 203, 216, 204, 192, 172, 195, 204, - 203, 207, 216, 218, 215, 215, 209, 200, 209, 209, 207, 210, 207, 206, 204, 212, - 209, 213, 210, 213, 215, 195, 184, 193, 207, 213, 216, 216, 219, 225, 225, 195, - 26, 9, 23, 29, 20, 26, 23, 32, 35, 29, 20, 26, 23, 46, 38, 23, - 18, 43, 89, 129, 149, 153, 153, 145, 143, 153, 164, 164, 167, 165, 164, 167, - 167, 167, 169, 164, 160, 165, 164, 164, 164, 158, 165, 164, 160, 164, 162, 160, - 84, 86, 84, 89, 86, 89, 89, 96, 86, 86, 86, 86, 89, 108, 112, 133, - 145, 156, 164, 171, 177, 176, 176, 176, 176, 177, 172, 167, 149, 143, 125, 108, - 81, 63, 57, 68, 74, 84, 89, 86, 84, 89, 89, 91, 91, 91, 84, 84, - 84, 91, 86, 86, 98, 98, 94, 98, 96, 91, 79, 76, 218, 213, 200, 158, - 162, 147, 133, 129, 105, 133, 114, 110, 91, 101, 91, 105, 103, 89, 96, 108, - 131, 110, 125, 105, 101, 110, 149, 127, 145, 155, 141, 141, 133, 162, 133, 105, - 137, 149, 153, 151, 153, 165, 164, 133, 145, 137, 167, 158, 167, 189, 176, 177, - 179, 147, 151, 185, 184, 184, 185, 162, 164, 182, 174, 182, 182, 189, 177, 174, - 189, 181, 182, 177, 176, 179, 174, 181, 187, 185, 189, 195, 185, 189, 192, 197, - 184, 195, 192, 200, 201, 198, 193, 187, 189, 192, 195, 185, 172, 189, 172, 195, - 190, 190, 171, 190, 164, 177, 167, 198, 210, 209, 197, 167, 200, 197, 207, 209, - 212, 216, 215, 213, 213, 206, 203, 207, 209, 210, 206, 210, 206, 207, 209, 212, - 212, 212, 213, 215, 200, 176, 174, 189, 201, 212, 212, 210, 219, 224, 225, 114, - 29, 20, 20, 23, 20, 26, 29, 35, 74, 26, 23, 29, 43, 32, 35, 20, - 15, 52, 117, 141, 156, 156, 149, 147, 156, 160, 169, 165, 165, 167, 165, 167, - 165, 169, 169, 164, 158, 164, 162, 160, 164, 165, 160, 164, 162, 164, 164, 167, - 84, 89, 98, 86, 76, 81, 86, 79, 94, 98, 81, 84, 91, 105, 114, 139, - 143, 155, 164, 171, 174, 172, 179, 177, 172, 176, 174, 165, 155, 141, 119, 110, - 84, 57, 66, 71, 76, 74, 86, 81, 84, 91, 91, 94, 91, 84, 91, 86, - 86, 91, 79, 89, 91, 94, 96, 101, 94, 91, 84, 81, 230, 216, 182, 190, - 156, 165, 125, 143, 117, 125, 125, 94, 110, 89, 98, 101, 91, 112, 98, 110, - 129, 108, 84, 89, 117, 151, 133, 141, 147, 137, 143, 133, 160, 121, 110, 129, - 151, 149, 147, 156, 151, 162, 149, 131, 143, 143, 149, 167, 160, 164, 182, 162, - 153, 151, 172, 181, 192, 181, 179, 171, 169, 169, 185, 182, 177, 179, 187, 177, - 172, 156, 181, 185, 176, 162, 179, 181, 179, 192, 174, 179, 184, 184, 193, 197, - 195, 177, 197, 200, 198, 197, 187, 182, 179, 187, 184, 190, 192, 169, 193, 169, - 189, 187, 179, 174, 160, 189, 209, 216, 200, 181, 200, 195, 203, 204, 210, 213, - 215, 212, 210, 213, 206, 206, 204, 207, 206, 207, 209, 207, 207, 212, 210, 212, - 212, 213, 210, 210, 182, 164, 172, 174, 195, 212, 200, 204, 218, 218, 219, 23, - 35, 26, 23, 29, 32, 35, 23, 41, 29, 38, 26, 35, 32, 32, 41, 32, - 23, 71, 131, 151, 153, 151, 147, 151, 162, 167, 165, 165, 167, 167, 165, 160, - 164, 169, 160, 162, 162, 164, 164, 165, 162, 167, 160, 171, 165, 164, 162, 162, - 91, 86, 89, 86, 89, 89, 86, 86, 84, 94, 81, 91, 101, 98, 123, 135, - 147, 158, 167, 176, 176, 174, 177, 176, 177, 176, 177, 165, 156, 139, 125, 103, - 68, 63, 60, 66, 81, 89, 86, 91, 89, 86, 98, 94, 96, 86, 89, 94, - 89, 81, 91, 94, 89, 86, 86, 96, 98, 89, 76, 74, 222, 210, 201, 167, - 177, 145, 177, 127, 160, 125, 114, 101, 110, 105, 84, 68, 105, 94, 103, 123, - 112, 96, 94, 110, 143, 147, 135, 133, 141, 143, 141, 160, 110, 117, 125, 143, - 151, 153, 151, 158, 153, 151, 139, 143, 155, 177, 145, 135, 176, 158, 153, 145, - 167, 182, 181, 177, 169, 172, 179, 176, 169, 169, 162, 174, 189, 176, 164, 172, - 172, 171, 167, 171, 179, 182, 176, 169, 172, 162, 181, 176, 181, 187, 184, 195, - 195, 187, 181, 190, 192, 185, 185, 184, 177, 190, 190, 195, 192, 184, 185, 165, - 187, 174, 167, 172, 203, 216, 200, 193, 197, 204, 206, 203, 210, 215, 210, 209, - 207, 204, 203, 204, 206, 206, 206, 210, 207, 207, 206, 212, 209, 207, 212, 210, - 215, 209, 215, 189, 174, 167, 160, 172, 198, 164, 177, 200, 210, 219, 177, 23, - 23, 57, 46, 43, 23, 32, 41, 52, 29, 20, 23, 26, 23, 32, 43, 66, - 57, 117, 147, 155, 155, 151, 149, 155, 167, 171, 169, 167, 169, 164, 165, 165, - 167, 172, 167, 160, 172, 160, 167, 164, 164, 162, 167, 169, 164, 162, 162, 165, - 84, 89, 81, 94, 86, 84, 86, 84, 86, 81, 81, 94, 94, 94, 123, 131, - 151, 158, 172, 174, 172, 172, 177, 176, 171, 176, 169, 164, 155, 141, 131, 98, - 81, 76, 63, 71, 81, 91, 81, 84, 89, 89, 89, 86, 91, 81, 89, 91, - 94, 86, 86, 98, 89, 89, 94, 89, 96, 91, 86, 84, 227, 210, 174, 189, - 141, 164, 131, 139, 137, 133, 121, 119, 114, 94, 76, 96, 79, 91, 123, 110, - 110, 84, 119, 139, 147, 139, 141, 123, 133, 129, 164, 112, 108, 127, 143, 153, - 145, 158, 155, 147, 151, 137, 164, 162, 153, 145, 143, 137, 153, 172, 139, 164, - 172, 174, 185, 177, 164, 169, 167, 177, 172, 177, 177, 164, 172, 182, 164, 167, - 174, 174, 171, 177, 165, 179, 177, 151, 167, 177, 182, 179, 177, 184, 185, 182, - 193, 193, 192, 184, 187, 187, 182, 182, 179, 171, 184, 193, 182, 182, 155, 169, - 167, 169, 195, 207, 201, 190, 192, 201, 201, 204, 210, 218, 213, 209, 206, 207, - 201, 195, 203, 204, 204, 201, 209, 207, 206, 207, 207, 209, 209, 210, 212, 215, - 215, 210, 207, 174, 155, 162, 177, 198, 149, 141, 172, 195, 204, 222, 49, 41, - 12, 55, 68, 38, 35, 41, 29, 32, 38, 18, 32, 23, 35, 38, 52, 71, - 103, 137, 149, 151, 151, 147, 151, 165, 164, 162, 167, 165, 167, 156, 164, 165, - 164, 164, 165, 167, 165, 164, 165, 160, 164, 167, 171, 169, 162, 164, 164, 162, - 89, 81, 91, 91, 86, 86, 81, 91, 91, 84, 91, 86, 86, 103, 123, 141, - 155, 162, 165, 172, 177, 171, 171, 176, 176, 172, 171, 164, 153, 141, 121, 103, - 76, 55, 66, 57, 79, 86, 79, 91, 84, 108, 96, 89, 84, 84, 89, 86, - 84, 79, 89, 91, 89, 84, 89, 98, 89, 94, 74, 89, 228, 192, 195, 156, - 181, 137, 189, 131, 153, 125, 141, 121, 101, 96, 101, 81, 86, 110, 96, 105, - 76, 117, 145, 143, 131, 137, 127, 137, 129, 158, 103, 117, 119, 133, 135, 149, - 156, 147, 147, 135, 149, 155, 160, 167, 139, 167, 167, 156, 141, 135, 179, 151, - 165, 174, 164, 169, 174, 171, 171, 176, 176, 167, 181, 169, 155, 158, 190, 171, - 165, 172, 176, 177, 164, 156, 169, 172, 172, 171, 177, 187, 174, 182, 172, 172, - 185, 193, 187, 182, 169, 177, 177, 184, 171, 181, 165, 189, 181, 174, 162, 160, - 181, 203, 209, 190, 185, 197, 187, 204, 207, 212, 213, 210, 209, 206, 198, 198, - 201, 200, 198, 203, 206, 206, 209, 209, 209, 209, 209, 213, 207, 213, 215, 212, - 213, 216, 172, 165, 160, 177, 195, 160, 127, 155, 181, 195, 213, 212, 18, 20, - 18, 18, 41, 32, 66, 41, 23, 15, 38, 35, 38, 26, 35, 41, 63, 84, - 127, 143, 156, 147, 149, 153, 153, 162, 165, 165, 165, 169, 167, 167, 167, 162, - 162, 164, 167, 165, 165, 162, 160, 160, 165, 164, 167, 162, 164, 164, 164, 162, - 79, 94, 86, 84, 89, 86, 91, 86, 86, 84, 86, 79, 89, 108, 123, 141, - 145, 160, 167, 171, 174, 176, 174, 172, 176, 176, 174, 167, 156, 145, 123, 101, - 84, 52, 66, 57, 71, 84, 86, 96, 86, 89, 91, 89, 94, 84, 84, 89, - 84, 91, 81, 91, 94, 86, 98, 86, 91, 84, 79, 89, 231, 206, 164, 192, - 145, 167, 135, 155, 139, 141, 123, 133, 94, 98, 89, 101, 103, 96, 101, 79, - 105, 145, 141, 135, 139, 119, 141, 139, 156, 101, 114, 112, 141, 153, 141, 145, - 147, 153, 131, 156, 139, 137, 143, 151, 155, 156, 162, 143, 137, 145, 177, 174, - 164, 149, 155, 153, 171, 182, 171, 165, 174, 162, 160, 172, 162, 167, 160, 176, - 177, 164, 156, 143, 179, 167, 171, 174, 172, 172, 177, 169, 184, 176, 165, 181, - 177, 181, 182, 181, 181, 174, 172, 182, 172, 171, 171, 181, 176, 164, 179, 200, - 212, 184, 169, 195, 192, 204, 206, 216, 215, 213, 212, 209, 203, 203, 201, 204, - 203, 201, 201, 206, 206, 207, 210, 210, 209, 207, 210, 209, 209, 212, 215, 215, - 213, 203, 160, 171, 176, 189, 156, 139, 149, 174, 185, 190, 222, 171, 15, 20, - 18, 20, 35, 41, 32, 32, 26, 26, 35, 26, 35, 23, 29, 60, 63, 105, - 143, 158, 153, 151, 147, 151, 164, 165, 164, 171, 162, 165, 172, 164, 165, 162, - 169, 165, 165, 164, 167, 167, 164, 167, 164, 160, 164, 167, 158, 160, 165, 162, - 91, 86, 94, 81, 81, 89, 89, 84, 86, 84, 91, 86, 86, 110, 125, 135, - 151, 158, 167, 172, 179, 174, 174, 174, 172, 176, 176, 164, 155, 141, 133, 101, - 84, 66, 63, 74, 71, 89, 81, 96, 89, 89, 89, 89, 84, 84, 94, 84, - 89, 86, 96, 101, 89, 89, 101, 91, 84, 79, 79, 112, 224, 185, 195, 160, - 187, 141, 176, 135, 143, 112, 141, 114, 112, 112, 103, 91, 94, 103, 79, 131, - 141, 145, 141, 131, 133, 123, 121, 164, 86, 131, 117, 143, 141, 141, 147, 139, - 133, 139, 139, 141, 151, 133, 153, 151, 160, 149, 139, 139, 160, 176, 156, 155, - 164, 162, 155, 164, 171, 160, 171, 162, 158, 160, 165, 171, 169, 176, 177, 162, - 171, 131, 158, 181, 164, 179, 171, 179, 169, 158, 179, 176, 182, 176, 167, 162, - 181, 164, 167, 172, 182, 179, 171, 176, 181, 162, 172, 153, 156, 184, 206, 200, - 172, 193, 193, 200, 206, 212, 210, 209, 209, 206, 203, 201, 200, 201, 203, 203, - 203, 204, 203, 207, 209, 213, 209, 210, 209, 210, 209, 212, 213, 213, 218, 218, - 218, 164, 158, 174, 190, 162, 139, 158, 174, 174, 179, 206, 228, 52, 20, 18, - 20, 20, 32, 29, 38, 71, 18, 26, 26, 38, 32, 20, 35, 63, 94, 131, - 153, 155, 151, 145, 147, 153, 160, 167, 169, 165, 174, 167, 158, 164, 162, 158, - 162, 167, 164, 162, 164, 167, 162, 162, 167, 164, 167, 162, 160, 158, 160, 160, - 89, 84, 101, 79, 79, 84, 91, 94, 91, 89, 79, 91, 96, 103, 121, 133, - 149, 162, 167, 172, 169, 176, 174, 172, 174, 172, 172, 162, 153, 149, 125, 103, - 76, 71, 60, 66, 79, 81, 79, 94, 89, 91, 96, 89, 94, 86, 96, 86, - 81, 89, 89, 89, 89, 84, 94, 96, 84, 79, 63, 119, 212, 209, 177, 203, - 171, 179, 149, 165, 141, 135, 131, 162, 114, 127, 105, 94, 98, 86, 117, 127, - 139, 141, 135, 133, 135, 145, 135, 101, 114, 117, 137, 153, 145, 139, 153, 143, - 133, 145, 153, 131, 129, 147, 155, 158, 151, 135, 141, 151, 162, 156, 167, 155, - 151, 158, 174, 155, 155, 164, 139, 147, 164, 165, 167, 177, 171, 174, 160, 137, - 162, 169, 165, 167, 177, 156, 171, 177, 176, 167, 164, 169, 162, 177, 164, 176, - 153, 179, 164, 169, 167, 177, 165, 167, 171, 156, 149, 184, 200, 210, 181, 181, - 192, 192, 206, 201, 209, 206, 206, 204, 197, 189, 200, 200, 200, 203, 204, 207, - 204, 201, 207, 209, 210, 210, 212, 212, 209, 212, 210, 212, 216, 215, 216, 216, - 190, 158, 164, 187, 149, 153, 172, 179, 162, 147, 181, 222, 212, 32, 20, 23, - 46, 41, 35, 38, 29, 32, 41, 32, 41, 43, 23, 35, 68, 60, 108, 145, - 158, 158, 149, 147, 155, 164, 162, 167, 169, 165, 167, 167, 162, 160, 160, 160, - 162, 160, 167, 162, 162, 164, 162, 158, 165, 165, 162, 162, 162, 164, 165, 165, - 86, 91, 96, 91, 86, 84, 98, 86, 91, 96, 89, 89, 96, 108, 125, 137, - 145, 158, 169, 177, 177, 177, 177, 177, 177, 177, 174, 165, 156, 145, 127, 112, - 96, 63, 52, 57, 81, 79, 86, 89, 84, 96, 86, 81, 86, 79, 89, 86, - 89, 89, 94, 89, 86, 89, 101, 94, 84, 79, 63, 167, 216, 195, 210, 177, - 195, 177, 158, 171, 145, 149, 143, 151, 129, 112, 94, 96, 79, 123, 135, 139, - 110, 135, 131, 119, 137, 147, 98, 119, 112, 141, 133, 137, 147, 156, 137, 137, - 141, 129, 112, 131, 149, 155, 143, 165, 131, 147, 162, 164, 155, 158, 164, 158, - 153, 143, 174, 171, 164, 171, 155, 147, 139, 129, 143, 135, 153, 147, 158, 165, - 162, 177, 172, 171, 160, 169, 167, 165, 176, 176, 176, 158, 179, 160, 179, 167, - 179, 158, 172, 172, 156, 169, 160, 155, 156, 165, 195, 209, 192, 176, 197, 179, - 201, 209, 213, 209, 200, 200, 193, 192, 193, 195, 197, 203, 204, 206, 203, 206, - 209, 207, 209, 210, 212, 210, 210, 210, 209, 213, 212, 213, 218, 218, 224, 213, - 155, 162, 187, 151, 155, 177, 169, 119, 127, 164, 204, 230, 135, 18, 23, 26, - 29, 43, 41, 35, 49, 29, 41, 68, 41, 52, 41, 26, 43, 81, 129, 153, - 153, 149, 151, 147, 158, 165, 164, 162, 158, 165, 160, 162, 167, 164, 160, 162, - 162, 160, 169, 164, 164, 162, 162, 164, 165, 164, 169, 162, 164, 162, 164, 160, - 84, 86, 91, 91, 91, 96, 86, 86, 89, 91, 98, 101, 101, 114, 119, 135, - 151, 162, 164, 174, 176, 177, 171, 177, 174, 172, 172, 164, 158, 151, 133, 98, - 81, 57, 60, 63, 68, 84, 91, 91, 84, 89, 86, 86, 86, 81, 96, 94, - 89, 86, 98, 89, 86, 84, 94, 84, 86, 66, 57, 145, 212, 213, 195, 200, - 192, 171, 177, 151, 160, 141, 141, 149, 145, 114, 98, 74, 89, 133, 139, 137, - 137, 117, 125, 131, 141, 96, 129, 114, 131, 151, 139, 133, 143, 135, 135, 145, - 117, 129, 121, 135, 147, 153, 155, 121, 125, 151, 153, 176, 158, 162, 155, 145, - 143, 156, 139, 155, 151, 158, 156, 131, 137, 151, 153, 112, 60, 147, 171, 158, - 164, 164, 160, 162, 162, 162, 165, 171, 164, 171, 172, 167, 160, 164, 156, 172, - 164, 169, 162, 172, 162, 141, 162, 151, 179, 203, 198, 185, 184, 182, 204, 204, - 201, 212, 209, 197, 198, 198, 201, 200, 198, 198, 207, 204, 204, 207, 207, 209, - 207, 207, 212, 212, 210, 209, 210, 212, 209, 213, 213, 216, 216, 218, 219, 181, - 164, 181, 145, 167, 147, 108, 74, 108, 127, 184, 221, 227, 41, 26, 12, 29, - 41, 43, 52, 26, 46, 38, 29, 71, 35, 32, 26, 38, 49, 103, 149, 162, - 153, 149, 151, 153, 160, 165, 167, 164, 165, 165, 162, 162, 160, 160, 160, 160, - 160, 164, 162, 160, 160, 164, 162, 162, 165, 162, 160, 167, 164, 156, 160, 160, - 96, 84, 89, 84, 86, 89, 94, 81, 94, 89, 94, 101, 98, 105, 123, 135, - 147, 160, 165, 172, 171, 177, 172, 176, 172, 177, 172, 167, 158, 143, 123, 105, - 79, 63, 55, 71, 71, 74, 96, 98, 89, 81, 84, 84, 84, 81, 91, 91, - 91, 86, 79, 84, 94, 89, 101, 84, 81, 68, 60, 164, 222, 201, 207, 195, - 174, 185, 149, 177, 155, 174, 135, 167, 139, 125, 89, 89, 114, 129, 123, 123, - 125, 121, 137, 143, 96, 119, 125, 127, 151, 143, 135, 141, 135, 139, 145, 105, - 123, 137, 141, 131, 143, 160, 121, 139, 153, 143, 155, 153, 149, 108, 84, 105, - 110, 101, 84, 86, 112, 129, 153, 108, 149, 137, 149, 153, 103, 112, 165, 167, - 167, 167, 172, 162, 149, 137, 147, 158, 162, 169, 169, 167, 151, 149, 158, 89, - 179, 164, 174, 141, 164, 145, 158, 189, 203, 193, 181, 184, 190, 203, 200, 210, - 204, 206, 203, 197, 197, 200, 201, 198, 203, 203, 204, 207, 206, 209, 209, 206, - 207, 212, 206, 213, 212, 213, 212, 212, 209, 213, 213, 216, 219, 218, 209, 164, - 177, 155, 162, 105, 68, 79, 84, 129, 165, 210, 228, 200, 18, 12, 12, 29, - 26, 23, 43, 29, 26, 26, 38, 46, 35, 43, 38, 46, 81, 133, 155, 160, - 149, 149, 149, 155, 158, 169, 165, 165, 164, 160, 167, 158, 164, 162, 162, 164, - 158, 162, 160, 158, 164, 162, 162, 164, 160, 165, 162, 164, 164, 158, 162, 158, - 89, 96, 84, 91, 84, 91, 91, 94, 86, 94, 91, 94, 94, 108, 121, 135, - 149, 162, 167, 171, 169, 177, 176, 174, 177, 177, 169, 172, 156, 149, 129, 105, - 81, 71, 49, 55, 79, 76, 79, 91, 86, 84, 89, 86, 86, 86, 86, 96, - 84, 86, 81, 89, 94, 91, 84, 89, 86, 76, 63, 153, 216, 216, 201, 204, - 197, 151, 176, 153, 165, 125, 177, 133, 164, 127, 117, 125, 112, 127, 119, 119, - 117, 133, 133, 127, 96, 121, 125, 145, 135, 143, 137, 131, 141, 133, 114, 125, - 121, 133, 139, 158, 133, 117, 135, 151, 164, 151, 147, 135, 86, 91, 160, 133, - 141, 114, 117, 108, 98, 71, 108, 79, 145, 174, 172, 167, 149, 117, 98, 91, - 112, 137, 137, 165, 160, 162, 158, 158, 105, 158, 147, 156, 167, 127, 137, 84, - 41, 133, 156, 153, 139, 167, 195, 207, 171, 185, 171, 204, 210, 210, 212, 204, - 201, 206, 203, 204, 198, 201, 206, 200, 206, 204, 206, 212, 207, 207, 209, 210, - 207, 210, 209, 212, 210, 210, 213, 212, 210, 215, 215, 219, 219, 218, 171, 167, - 164, 121, 68, 84, 84, 94, 110, 162, 201, 222, 228, 89, 18, 20, 15, 29, - 41, 23, 32, 23, 26, 38, 29, 38, 32, 35, 43, 55, 103, 145, 158, 156, - 149, 147, 155, 165, 165, 169, 164, 167, 164, 167, 164, 165, 164, 167, 165, 158, - 164, 165, 165, 164, 164, 164, 162, 162, 162, 162, 160, 160, 160, 156, 165, 160, - 94, 91, 86, 89, 89, 89, 84, 94, 94, 79, 89, 86, 94, 108, 127, 137, - 149, 158, 167, 177, 176, 179, 179, 176, 177, 172, 171, 167, 156, 139, 123, 105, - 79, 57, 66, 63, 71, 76, 79, 86, 86, 98, 86, 86, 96, 86, 91, 94, - 86, 91, 84, 89, 86, 89, 89, 94, 71, 68, 57, 141, 225, 206, 209, 209, - 187, 197, 162, 176, 119, 182, 131, 167, 135, 127, 110, 105, 129, 114, 103, 123, - 121, 133, 112, 127, 114, 127, 147, 139, 135, 131, 135, 133, 121, 112, 127, 133, - 133, 133, 141, 145, 131, 127, 151, 155, 145, 155, 145, 98, 121, 143, 141, 139, - 129, 119, 117, 105, 110, 89, 68, 79, 160, 176, 171, 172, 158, 123, 137, 112, - 133, 131, 105, 84, 123, 143, 153, 179, 145, 114, 105, 55, 105, 49, 114, 119, - 32, 35, 172, 151, 167, 203, 189, 156, 171, 176, 198, 192, 204, 204, 209, 200, - 201, 204, 203, 203, 206, 206, 200, 204, 204, 206, 207, 206, 209, 209, 209, 210, - 209, 212, 213, 215, 210, 210, 210, 210, 212, 212, 216, 219, 212, 179, 158, 153, - 79, 76, 81, 84, 89, 103, 137, 187, 218, 225, 189, 23, 23, 35, 20, 26, - 29, 26, 38, 26, 20, 43, 41, 43, 41, 29, 43, 81, 125, 149, 155, 149, - 143, 151, 156, 162, 172, 171, 167, 165, 167, 169, 169, 164, 160, 160, 165, 162, - 162, 160, 162, 160, 162, 160, 158, 160, 160, 162, 160, 160, 160, 158, 160, 158, - 89, 91, 98, 89, 86, 96, 79, 94, 105, 96, 96, 94, 105, 119, 131, 133, - 155, 155, 169, 176, 181, 172, 177, 179, 177, 174, 174, 164, 162, 143, 127, 103, - 74, 60, 55, 63, 68, 76, 89, 79, 84, 84, 91, 103, 96, 89, 81, 101, - 86, 94, 86, 84, 91, 89, 94, 89, 76, 71, 60, 123, 219, 216, 207, 198, - 210, 181, 189, 145, 172, 123, 156, 139, 167, 149, 101, 103, 96, 121, 108, 117, - 133, 112, 98, 123, 127, 143, 135, 133, 137, 135, 139, 133, 112, 129, 127, 125, - 139, 131, 127, 129, 125, 145, 137, 147, 156, 135, 114, 147, 149, 145, 135, 112, - 101, 101, 98, 63, 49, 49, 55, 57, 162, 151, 169, 167, 135, 149, 127, 137, - 129, 114, 98, 79, 89, 101, 63, 84, 76, 55, 60, 41, 26, 43, 23, 63, - 20, 26, 127, 189, 203, 169, 164, 164, 192, 203, 209, 206, 204, 207, 201, 200, - 204, 209, 204, 203, 203, 204, 204, 201, 206, 204, 209, 209, 206, 209, 207, 210, - 206, 209, 213, 213, 210, 213, 213, 212, 213, 215, 218, 190, 165, 133, 94, 74, - 74, 76, 86, 91, 94, 133, 185, 207, 219, 216, 35, 20, 15, 18, 35, 29, - 41, 32, 23, 23, 18, 26, 41, 41, 29, 29, 74, 105, 145, 155, 147, 149, - 147, 153, 160, 169, 169, 164, 171, 162, 169, 167, 162, 164, 162, 162, 162, 164, - 162, 164, 160, 162, 160, 160, 162, 162, 164, 160, 165, 162, 164, 162, 160, 158, - 94, 96, 91, 91, 94, 96, 89, 86, 91, 101, 98, 94, 91, 108, 125, 137, - 155, 160, 171, 176, 176, 179, 177, 179, 176, 177, 171, 171, 158, 145, 127, 105, - 81, 55, 46, 66, 74, 66, 89, 84, 94, 81, 91, 84, 89, 96, 84, 96, - 84, 86, 86, 84, 86, 81, 84, 79, 81, 79, 66, 103, 224, 215, 193, 210, - 181, 210, 171, 176, 121, 141, 112, 149, 153, 112, 103, 96, 110, 123, 112, 131, - 108, 89, 119, 112, 143, 135, 135, 125, 133, 149, 114, 129, 125, 135, 127, 137, - 129, 131, 127, 119, 137, 149, 139, 133, 139, 114, 123, 135, 155, 127, 98, 94, - 101, 96, 84, 89, 108, 71, 81, 96, 137, 156, 147, 143, 147, 135, 68, 55, - 60, 60, 43, 101, 139, 41, 63, 55, 41, 38, 43, 26, 32, 26, 35, 20, - 18, 81, 185, 200, 153, 160, 177, 203, 203, 206, 209, 203, 210, 203, 203, 201, - 206, 206, 204, 203, 203, 203, 203, 204, 203, 207, 207, 209, 209, 212, 207, 210, - 207, 213, 216, 215, 213, 213, 213, 215, 212, 184, 141, 108, 91, 84, 81, 76, - 79, 89, 89, 94, 137, 179, 197, 213, 225, 141, 32, 26, 26, 38, 29, 32, - 35, 26, 18, 41, 35, 38, 43, 26, 23, 32, 68, 129, 151, 149, 149, 147, - 151, 162, 165, 165, 167, 167, 167, 164, 165, 162, 167, 162, 167, 160, 164, 162, - 164, 155, 160, 162, 162, 164, 165, 164, 164, 162, 160, 156, 165, 158, 160, 162, - 89, 89, 94, 96, 91, 91, 94, 101, 84, 89, 101, 94, 94, 110, 121, 141, - 151, 165, 167, 176, 174, 177, 177, 176, 174, 174, 176, 167, 158, 151, 125, 110, - 79, 60, 46, 68, 71, 74, 81, 96, 84, 98, 96, 86, 84, 94, 84, 89, - 84, 94, 91, 94, 89, 86, 103, 86, 86, 71, 71, 81, 228, 207, 212, 189, - 216, 185, 204, 153, 153, 125, 133, 141, 131, 117, 112, 108, 103, 108, 133, 108, - 101, 105, 110, 131, 131, 141, 131, 137, 135, 137, 114, 131, 125, 129, 129, 127, - 141, 127, 117, 137, 141, 141, 137, 145, 103, 105, 141, 143, 127, 119, 105, 127, - 135, 105, 117, 149, 123, 110, 63, 86, 110, 84, 123, 153, 86, 71, 108, 46, - 41, 55, 127, 103, 46, 52, 66, 86, 26, 32, 18, 15, 23, 68, 23, 103, - 117, 195, 187, 137, 155, 193, 207, 209, 210, 206, 204, 201, 204, 200, 201, 201, - 203, 201, 203, 206, 200, 203, 203, 204, 201, 206, 207, 206, 210, 207, 209, 204, - 206, 218, 212, 212, 216, 216, 210, 158, 112, 81, 81, 81, 89, 86, 86, 79, - 76, 96, 110, 147, 185, 190, 204, 219, 193, 26, 35, 32, 18, 35, 38, 26, - 38, 26, 35, 20, 29, 35, 26, 26, 18, 43, 89, 143, 151, 149, 149, 147, - 153, 167, 176, 164, 165, 169, 164, 162, 164, 169, 167, 167, 160, 164, 167, 164, - 167, 164, 160, 160, 158, 158, 162, 162, 162, 162, 164, 162, 160, 165, 160, 158, - 89, 89, 94, 98, 103, 89, 89, 84, 89, 103, 96, 89, 91, 112, 121, 139, - 147, 164, 169, 176, 172, 176, 181, 174, 176, 176, 176, 165, 158, 143, 133, 110, - 84, 74, 57, 74, 71, 84, 81, 98, 86, 84, 91, 86, 86, 86, 98, 84, - 89, 89, 89, 89, 98, 84, 86, 81, 89, 76, 66, 55, 203, 219, 204, 218, - 190, 213, 184, 182, 121, 119, 98, 123, 133, 129, 108, 105, 108, 123, 123, 98, - 105, 112, 135, 133, 129, 131, 129, 135, 139, 101, 119, 125, 131, 133, 135, 127, - 121, 123, 135, 141, 131, 133, 141, 105, 108, 133, 131, 125, 125, 98, 125, 121, - 101, 103, 133, 121, 98, 55, 71, 71, 74, 79, 121, 96, 114, 68, 60, 68, - 84, 129, 55, 71, 96, 74, 79, 101, 43, 26, 18, 20, 12, 18, 35, 164, - 203, 165, 149, 158, 192, 207, 203, 210, 204, 203, 206, 203, 203, 204, 203, 201, - 203, 209, 203, 200, 203, 203, 206, 201, 201, 209, 203, 204, 209, 209, 213, 210, - 210, 218, 213, 215, 212, 133, 94, 76, 79, 84, 81, 76, 94, 79, 84, 94, - 96, 135, 158, 181, 203, 206, 206, 101, 32, 18, 20, 23, 29, 41, 35, 32, - 35, 26, 41, 38, 29, 43, 29, 23, 23, 49, 121, 156, 156, 149, 149, 155, - 164, 167, 171, 167, 172, 167, 164, 167, 169, 167, 169, 167, 165, 164, 167, 162, - 160, 162, 162, 162, 162, 162, 162, 164, 162, 164, 158, 164, 162, 160, 158, 160, - 86, 91, 105, 91, 101, 98, 94, 96, 84, 91, 86, 91, 96, 112, 127, 135, - 153, 162, 171, 177, 179, 176, 176, 172, 174, 177, 174, 167, 162, 145, 125, 105, - 76, 63, 55, 68, 71, 79, 76, 84, 81, 89, 89, 81, 84, 84, 91, 84, - 101, 86, 98, 79, 89, 81, 86, 84, 86, 84, 60, 55, 193, 210, 219, 195, - 216, 192, 200, 147, 155, 110, 91, 169, 133, 153, 117, 121, 131, 105, 81, 108, - 110, 127, 129, 145, 137, 139, 129, 125, 114, 121, 125, 127, 131, 135, 129, 125, - 123, 127, 137, 137, 141, 129, 117, 110, 135, 137, 135, 119, 98, 129, 137, 119, - 125, 76, 46, 43, 41, 43, 41, 43, 57, 94, 101, 137, 103, 121, 105, 137, - 117, 89, 149, 43, 41, 23, 46, 129, 32, 29, 46, 12, 18, 55, 162, 201, - 151, 112, 160, 207, 195, 200, 198, 200, 203, 207, 204, 198, 203, 201, 197, 201, - 200, 198, 206, 204, 201, 203, 201, 203, 203, 207, 206, 207, 210, 212, 210, 206, - 215, 216, 212, 184, 103, 81, 84, 81, 91, 81, 76, 81, 91, 96, 103, 121, - 149, 172, 185, 204, 204, 206, 46, 26, 18, 23, 29, 29, 43, 29, 35, 20, - 32, 23, 46, 35, 41, 41, 35, 26, 38, 89, 135, 153, 155, 145, 143, 155, - 160, 169, 169, 171, 169, 167, 164, 164, 172, 165, 167, 171, 164, 164, 164, 167, - 160, 165, 164, 160, 162, 158, 162, 162, 156, 160, 162, 158, 162, 162, 162, 158, - 98, 101, 101, 101, 101, 91, 89, 91, 89, 86, 94, 98, 98, 108, 129, 139, - 149, 156, 171, 172, 174, 174, 174, 179, 171, 176, 177, 164, 158, 145, 129, 101, - 81, 68, 63, 55, 71, 71, 81, 79, 76, 89, 96, 86, 89, 94, 86, 84, - 89, 86, 89, 86, 89, 84, 81, 84, 86, 86, 71, 68, 117, 228, 190, 218, - 193, 219, 189, 172, 123, 129, 153, 139, 162, 110, 155, 121, 110, 94, 94, 117, - 125, 127, 141, 127, 133, 137, 112, 112, 121, 117, 127, 125, 129, 133, 129, 117, - 131, 141, 137, 137, 127, 114, 94, 125, 127, 145, 119, 123, 94, 121, 98, 74, - 66, 60, 74, 49, 35, 57, 55, 52, 84, 112, 133, 117, 103, 76, 71, 101, - 55, 149, 101, 60, 76, 43, 43, 131, 18, 18, 18, 32, 89, 184, 193, 133, - 112, 162, 200, 207, 200, 197, 195, 190, 198, 203, 200, 198, 198, 204, 198, 193, - 200, 203, 195, 204, 195, 203, 204, 203, 204, 204, 204, 209, 207, 209, 204, 209, - 210, 197, 147, 127, 79, 84, 86, 86, 84, 81, 84, 81, 119, 133, 156, 160, - 165, 184, 200, 201, 218, 81, 15, 23, 29, 23, 20, 35, 26, 43, 23, 29, - 35, 29, 32, 32, 55, 46, 41, 43, 60, 114, 149, 147, 155, 147, 147, 164, - 171, 172, 172, 169, 169, 171, 162, 167, 169, 167, 172, 164, 164, 162, 164, 169, - 167, 167, 162, 164, 164, 162, 164, 160, 162, 162, 164, 164, 160, 156, 158, 156, - 101, 98, 98, 91, 94, 84, 94, 94, 91, 89, 89, 91, 98, 117, 121, 143, - 149, 156, 171, 177, 181, 176, 176, 174, 177, 176, 176, 164, 158, 145, 127, 101, - 76, 60, 55, 60, 71, 98, 81, 86, 86, 86, 89, 91, 81, 94, 89, 91, - 91, 86, 86, 91, 89, 81, 86, 96, 96, 86, 84, 52, 84, 218, 219, 197, - 212, 192, 210, 149, 160, 131, 131, 149, 133, 145, 127, 131, 89, 96, 114, 112, - 145, 125, 125, 141, 133, 135, 110, 125, 125, 123, 123, 131, 131, 119, 121, 131, - 147, 135, 135, 125, 121, 96, 133, 131, 135, 117, 114, 91, 68, 55, 43, 63, - 96, 81, 60, 38, 23, 35, 26, 63, 147, 89, 131, 105, 38, 35, 35, 86, - 114, 66, 74, 114, 57, 9, 41, 114, 18, 15, 15, 96, 177, 181, 137, 117, - 171, 192, 201, 198, 190, 189, 190, 195, 200, 200, 200, 200, 200, 195, 195, 198, - 201, 197, 201, 198, 201, 201, 201, 203, 201, 204, 204, 206, 209, 210, 209, 197, - 125, 89, 147, 137, 119, 96, 89, 74, 81, 98, 119, 139, 158, 160, 172, 171, - 182, 187, 201, 215, 94, 18, 23, 26, 29, 23, 41, 38, 38, 32, 32, 20, - 23, 23, 26, 29, 32, 46, 89, 35, 76, 135, 156, 155, 151, 145, 158, 171, - 171, 171, 176, 167, 165, 167, 164, 165, 165, 165, 167, 169, 167, 169, 165, 165, - 167, 165, 162, 160, 162, 160, 164, 160, 162, 162, 164, 156, 164, 156, 158, 151, - 101, 98, 98, 98, 98, 94, 98, 98, 98, 94, 91, 98, 103, 108, 121, 141, - 149, 158, 167, 171, 174, 172, 172, 177, 171, 172, 176, 164, 155, 149, 129, 103, - 79, 66, 66, 66, 71, 74, 71, 79, 89, 81, 86, 84, 96, 76, 81, 94, - 98, 81, 98, 86, 103, 84, 86, 91, 89, 89, 79, 63, 57, 209, 207, 215, - 187, 210, 181, 201, 149, 139, 112, 155, 133, 155, 145, 96, 79, 114, 114, 139, - 125, 133, 133, 131, 112, 110, 119, 123, 117, 119, 125, 131, 135, 119, 108, 135, - 133, 135, 133, 127, 133, 98, 135, 135, 123, 94, 74, 43, 35, 63, 117, 96, - 57, 38, 38, 20, 41, 29, 35, 131, 121, 141, 105, 18, 18, 32, 57, 143, - 41, 79, 137, 46, 18, 12, 74, 60, 32, 20, 110, 185, 169, 127, 137, 179, - 206, 198, 198, 192, 189, 192, 197, 197, 195, 200, 197, 198, 193, 195, 198, 195, - 198, 198, 201, 197, 198, 201, 204, 204, 203, 207, 209, 207, 207, 201, 145, 71, - 117, 98, 139, 155, 129, 108, 112, 121, 143, 160, 165, 174, 167, 167, 165, 174, - 182, 200, 215, 79, 29, 23, 23, 32, 23, 41, 43, 35, 43, 46, 35, 32, - 18, 26, 35, 49, 76, 41, 43, 41, 114, 145, 155, 151, 143, 141, 165, 174, - 176, 172, 172, 172, 172, 172, 174, 171, 167, 172, 165, 167, 165, 167, 162, 162, - 167, 162, 164, 160, 164, 167, 162, 164, 162, 164, 160, 162, 160, 158, 160, 160, - 103, 101, 89, 91, 105, 96, 98, 91, 89, 94, 91, 86, 101, 108, 121, 137, - 149, 156, 169, 171, 176, 171, 172, 177, 171, 172, 174, 167, 158, 145, 127, 98, - 84, 63, 60, 60, 76, 66, 74, 84, 94, 86, 84, 98, 91, 94, 86, 86, - 84, 94, 94, 84, 86, 84, 86, 86, 91, 91, 84, 68, 60, 129, 225, 193, - 213, 187, 210, 182, 182, 155, 137, 129, 167, 114, 143, 103, 98, 108, 129, 135, - 131, 133, 131, 125, 89, 121, 127, 125, 127, 133, 114, 121, 123, 117, 145, 137, - 131, 129, 131, 139, 153, 110, 112, 131, 84, 63, 43, 41, 103, 121, 43, 32, - 26, 32, 49, 20, 32, 20, 94, 133, 127, 84, 26, 32, 26, 52, 149, 76, - 71, 89, 79, 15, 38, 18, 121, 66, 38, 133, 185, 158, 121, 131, 189, 207, - 204, 201, 195, 190, 189, 190, 192, 193, 190, 192, 195, 198, 197, 190, 195, 198, - 195, 200, 201, 203, 200, 200, 204, 206, 206, 206, 212, 204, 156, 60, 98, 74, - 121, 112, 129, 151, 151, 165, 164, 160, 169, 165, 169, 167, 177, 172, 172, 184, - 200, 219, 96, 20, 18, 12, 29, 35, 49, 41, 41, 49, 29, 29, 35, 29, - 43, 32, 41, 32, 26, 26, 41, 91, 127, 156, 153, 155, 141, 147, 174, 171, - 171, 172, 174, 169, 176, 174, 169, 165, 165, 167, 169, 165, 165, 165, 164, 171, - 165, 164, 162, 164, 165, 162, 158, 158, 164, 165, 164, 156, 160, 156, 158, 156, - 108, 101, 96, 98, 98, 101, 98, 89, 94, 94, 96, 98, 101, 105, 119, 137, - 151, 160, 167, 177, 176, 176, 171, 174, 171, 174, 176, 167, 158, 141, 131, 103, - 79, 63, 49, 57, 79, 71, 84, 89, 91, 89, 86, 89, 86, 89, 86, 94, - 96, 86, 81, 84, 86, 89, 86, 89, 89, 86, 86, 71, 63, 86, 224, 213, - 189, 212, 197, 203, 197, 156, 182, 133, 172, 129, 91, 98, 119, 121, 131, 129, - 137, 133, 114, 89, 114, 119, 121, 119, 123, 129, 121, 119, 103, 133, 133, 94, - 81, 117, 133, 137, 139, 108, 79, 89, 57, 41, 43, 108, 76, 35, 38, 20, - 41, 60, 23, 12, 41, 35, 123, 101, 74, 57, 23, 29, 60, 145, 103, 63, - 91, 55, 18, 35, 26, 32, 153, 35, 139, 187, 151, 114, 143, 193, 203, 207, - 200, 192, 193, 185, 192, 192, 193, 192, 192, 189, 190, 190, 187, 198, 192, 193, - 197, 200, 204, 200, 200, 203, 203, 206, 207, 209, 176, 94, 29, 49, 131, 119, - 96, 110, 110, 147, 158, 167, 160, 171, 171, 171, 167, 174, 176, 182, 192, 206, - 216, 125, 32, 29, 15, 18, 23, 29, 41, 41, 43, 35, 52, 32, 29, 23, - 43, 35, 38, 35, 18, 55, 32, 103, 143, 155, 147, 153, 147, 164, 174, 171, - 172, 169, 171, 172, 176, 172, 169, 167, 171, 164, 169, 171, 169, 165, 162, 169, - 167, 164, 165, 164, 169, 162, 162, 162, 162, 158, 164, 158, 165, 162, 156, 160, - 101, 98, 105, 98, 96, 98, 101, 89, 89, 94, 86, 89, 96, 112, 123, 135, - 149, 156, 164, 171, 177, 176, 174, 176, 174, 177, 174, 164, 158, 145, 127, 108, - 79, 60, 55, 60, 81, 74, 84, 86, 74, 81, 96, 91, 84, 86, 81, 89, - 94, 84, 76, 94, 89, 89, 94, 96, 91, 89, 89, 76, 66, 71, 210, 206, - 218, 201, 206, 200, 155, 185, 162, 179, 135, 160, 86, 114, 121, 127, 139, 135, - 131, 127, 96, 119, 119, 121, 127, 125, 119, 125, 123, 114, 119, 141, 133, 141, - 119, 96, 60, 117, 129, 117, 84, 46, 55, 91, 79, 55, 49, 43, 41, 29, - 74, 29, 9, 18, 35, 105, 121, 46, 46, 23, 29, 38, 133, 71, 89, 129, - 96, 12, 23, 133, 3, 20, 165, 153, 177, 139, 123, 145, 197, 189, 204, 206, - 198, 190, 179, 190, 197, 193, 197, 185, 192, 190, 187, 192, 189, 190, 198, 198, - 198, 195, 198, 197, 203, 204, 204, 203, 203, 91, 35, 86, 91, 52, 147, 137, - 105, 127, 101, 147, 155, 165, 162, 171, 172, 174, 174, 179, 185, 192, 200, 213, - 131, 20, 20, 20, 26, 26, 32, 29, 46, 32, 43, 38, 43, 32, 26, 26, - 32, 32, 32, 38, 35, 38, 66, 123, 149, 149, 145, 145, 151, 167, 176, 172, - 172, 172, 171, 167, 174, 172, 171, 171, 169, 172, 174, 167, 167, 165, 169, 165, - 169, 162, 162, 164, 165, 165, 160, 162, 164, 164, 164, 160, 164, 158, 160, 156, - 94, 98, 94, 98, 96, 94, 96, 91, 94, 91, 91, 108, 89, 101, 121, 135, - 147, 160, 171, 172, 179, 171, 174, 174, 172, 174, 174, 171, 160, 143, 137, 108, - 84, 52, 60, 68, 71, 86, 79, 86, 84, 86, 86, 81, 79, 81, 94, 98, - 84, 89, 81, 91, 86, 79, 98, 96, 98, 94, 91, 86, 91, 79, 114, 228, - 209, 212, 212, 189, 167, 172, 193, 160, 127, 86, 89, 123, 129, 117, 121, 133, - 114, 89, 125, 127, 123, 133, 108, 119, 105, 121, 112, 121, 137, 143, 135, 133, - 103, 91, 114, 84, 68, 76, 68, 66, 52, 79, 81, 74, 55, 43, 32, 91, - 71, 15, 15, 20, 49, 71, 123, 26, 46, 43, 38, 141, 63, 81, 127, 81, - 23, 29, 143, 84, 12, 63, 172, 184, 123, 121, 147, 197, 207, 204, 197, 200, - 200, 189, 189, 190, 190, 192, 189, 189, 189, 182, 182, 189, 184, 187, 192, 203, - 195, 204, 201, 203, 198, 207, 204, 184, 86, 29, 23, 96, 121, 68, 98, 158, - 117, 133, 121, 139, 156, 151, 153, 169, 172, 177, 179, 185, 190, 206, 200, 103, - 29, 18, 20, 20, 26, 29, 38, 32, 38, 43, 35, 41, 43, 32, 29, 23, - 20, 41, 35, 38, 26, 35, 94, 137, 151, 149, 141, 149, 162, 169, 169, 176, - 174, 177, 172, 172, 172, 171, 172, 174, 169, 165, 169, 169, 167, 169, 164, 162, - 167, 165, 162, 165, 165, 162, 160, 165, 160, 162, 162, 158, 162, 156, 162, 156, - 98, 105, 98, 112, 103, 98, 96, 91, 98, 89, 101, 91, 84, 108, 125, 135, - 149, 160, 167, 176, 174, 174, 174, 176, 174, 176, 177, 162, 160, 147, 129, 112, - 81, 55, 49, 57, 74, 76, 76, 76, 86, 76, 86, 86, 84, 84, 81, 86, - 84, 94, 84, 81, 86, 84, 91, 96, 91, 98, 89, 94, 86, 74, 76, 207, - 219, 218, 203, 195, 165, 181, 174, 184, 165, 84, 98, 141, 125, 129, 121, 129, - 114, 108, 125, 117, 131, 121, 121, 117, 121, 121, 112, 141, 133, 135, 139, 119, - 94, 35, 38, 52, 74, 86, 55, 71, 84, 86, 57, 60, 23, 20, 81, 108, - 23, 18, 26, 29, 86, 43, 57, 20, 26, 38, 46, 89, 60, 52, 108, 49, - 15, 108, 164, 15, 26, 158, 156, 125, 121, 158, 197, 203, 207, 204, 200, 198, - 200, 197, 193, 195, 190, 187, 190, 190, 185, 185, 184, 192, 197, 187, 192, 200, - 203, 203, 201, 200, 193, 192, 176, 112, 74, 71, 84, 60, 108, 123, 94, 123, - 153, 114, 139, 101, 151, 158, 155, 171, 169, 177, 172, 193, 212, 185, 32, 23, - 20, 6, 23, 23, 23, 29, 32, 43, 52, 35, 66, 41, 43, 32, 35, 29, - 35, 29, 46, 38, 35, 60, 108, 141, 141, 141, 133, 149, 169, 176, 172, 169, - 171, 177, 171, 172, 169, 169, 172, 169, 172, 169, 169, 169, 167, 171, 167, 164, - 169, 165, 167, 160, 165, 167, 165, 164, 164, 165, 162, 160, 158, 158, 158, 158, - 94, 103, 105, 108, 112, 105, 96, 96, 84, 91, 94, 94, 91, 108, 123, 137, - 145, 160, 167, 169, 174, 177, 172, 177, 176, 179, 176, 164, 155, 147, 131, 108, - 71, 63, 60, 63, 71, 66, 81, 84, 84, 84, 94, 91, 86, 91, 86, 86, - 86, 94, 84, 89, 89, 86, 91, 91, 96, 105, 91, 89, 89, 84, 68, 98, - 225, 209, 222, 195, 187, 177, 185, 198, 151, 96, 127, 131, 125, 127, 119, 117, - 101, 112, 123, 133, 127, 129, 117, 125, 112, 117, 137, 133, 112, 96, 101, 121, - 103, 110, 81, 76, 68, 49, 52, 103, 71, 63, 35, 26, 20, 49, 121, 110, - 9, 15, 20, 43, 98, 32, 26, 20, 41, 41, 43, 35, 32, 55, 125, 15, - 15, 153, 119, 57, 105, 135, 121, 103, 172, 200, 206, 203, 203, 203, 201, 195, - 195, 189, 192, 185, 192, 193, 195, 193, 182, 176, 189, 195, 190, 193, 197, 198, - 197, 200, 195, 192, 190, 197, 192, 172, 91, 60, 81, 112, 71, 96, 98, 84, - 151, 131, 123, 105, 127, 160, 151, 164, 176, 185, 200, 212, 151, 38, 23, 43, - 32, 20, 26, 29, 32, 32, 35, 46, 38, 57, 43, 38, 23, 49, 20, 29, - 38, 41, 43, 41, 57, 76, 123, 141, 135, 137, 127, 155, 174, 176, 174, 177, - 167, 176, 167, 172, 169, 167, 171, 169, 172, 172, 172, 171, 169, 167, 169, 169, - 167, 167, 169, 167, 165, 169, 165, 165, 162, 162, 165, 162, 164, 156, 156, 160, - 103, 105, 103, 94, 96, 98, 98, 94, 86, 91, 76, 81, 89, 101, 117, 131, - 147, 160, 167, 167, 177, 177, 177, 177, 176, 177, 177, 176, 158, 147, 131, 110, - 76, 55, 60, 63, 68, 76, 81, 81, 76, 94, 89, 94, 89, 89, 86, 91, - 89, 81, 84, 86, 94, 94, 86, 96, 96, 98, 98, 94, 94, 81, 79, 68, - 155, 228, 212, 195, 203, 187, 192, 181, 91, 131, 135, 110, 129, 131, 127, 112, - 114, 121, 125, 123, 133, 125, 121, 110, 108, 108, 137, 131, 121, 121, 127, 114, - 119, 86, 91, 68, 49, 60, 98, 96, 55, 29, 18, 20, 23, 52, 121, 76, - 18, 23, 29, 29, 68, 52, 41, 20, 46, 35, 29, 35, 20, 55, 119, 18, - 43, 155, 101, 153, 151, 55, 105, 139, 203, 197, 203, 200, 200, 201, 190, 192, - 190, 189, 190, 192, 189, 197, 193, 185, 179, 182, 192, 195, 192, 192, 195, 195, - 193, 187, 182, 193, 197, 198, 192, 176, 127, 81, 68, 57, 133, 89, 103, 94, - 105, 156, 127, 127, 125, 155, 155, 181, 190, 209, 195, 117, 32, 32, 15, 23, - 32, 23, 38, 38, 38, 46, 32, 32, 38, 43, 46, 35, 32, 26, 26, 23, - 32, 43, 46, 46, 63, 98, 133, 145, 133, 123, 135, 160, 174, 174, 174, 176, - 171, 167, 171, 165, 176, 167, 171, 172, 171, 171, 171, 169, 167, 165, 167, 171, - 164, 160, 169, 169, 171, 169, 165, 165, 164, 165, 164, 162, 162, 158, 160, 160, - 101, 98, 105, 98, 98, 96, 98, 94, 84, 89, 86, 81, 81, 98, 114, 135, - 141, 162, 169, 177, 176, 174, 172, 174, 179, 184, 172, 174, 164, 147, 127, 103, - 79, 60, 57, 60, 68, 84, 74, 79, 79, 91, 94, 81, 81, 86, 86, 91, - 86, 96, 86, 96, 89, 91, 91, 98, 98, 96, 103, 98, 105, 98, 81, 74, - 76, 219, 209, 200, 204, 197, 204, 158, 96, 156, 119, 103, 127, 123, 114, 117, - 127, 119, 129, 125, 117, 127, 114, 133, 127, 129, 112, 86, 129, 129, 103, 81, - 49, 89, 60, 74, 76, 81, 96, 76, 41, 35, 38, 20, 26, 79, 117, 41, - 12, 18, 96, 23, 38, 43, 35, 46, 68, 84, 79, 84, 35, 96, 81, 55, - 101, 127, 129, 125, 137, 76, 164, 164, 195, 198, 198, 195, 203, 198, 197, 193, - 193, 187, 197, 185, 195, 189, 184, 184, 189, 181, 189, 192, 192, 192, 197, 187, - 193, 190, 197, 197, 203, 201, 197, 184, 147, 98, 79, 89, 63, 149, 112, 101, - 91, 143, 145, 147, 129, 153, 167, 190, 200, 153, 41, 38, 35, 26, 32, 20, - 18, 23, 35, 35, 49, 38, 32, 46, 35, 43, 35, 23, 20, 29, 29, 35, - 41, 41, 41, 49, 66, 123, 139, 141, 133, 129, 145, 167, 174, 181, 174, 177, - 172, 171, 172, 172, 171, 169, 172, 171, 174, 165, 171, 171, 171, 167, 167, 167, - 169, 165, 167, 167, 167, 162, 171, 165, 162, 165, 165, 160, 162, 156, 164, 155, - 98, 101, 103, 103, 96, 89, 98, 101, 94, 91, 84, 81, 81, 91, 119, 127, - 145, 164, 165, 171, 176, 176, 182, 179, 174, 179, 179, 174, 160, 149, 137, 108, - 79, 60, 43, 57, 60, 68, 76, 79, 84, 84, 84, 86, 89, 86, 86, 86, - 91, 84, 89, 89, 86, 98, 96, 101, 96, 103, 108, 96, 103, 98, 94, 76, - 68, 165, 227, 207, 197, 198, 210, 158, 131, 123, 119, 108, 112, 110, 91, 110, - 125, 127, 133, 112, 117, 98, 105, 119, 127, 131, 131, 139, 112, 112, 55, 41, - 76, 66, 60, 86, 71, 108, 103, 57, 41, 35, 41, 20, 41, 79, 66, 63, - 29, 38, 112, 20, 35, 41, 29, 32, 43, 55, 57, 41, 41, 84, 46, 74, - 52, 110, 81, 149, 127, 164, 181, 176, 197, 193, 189, 193, 197, 192, 190, 184, - 182, 184, 184, 185, 184, 190, 189, 184, 182, 181, 185, 189, 190, 187, 195, 197, - 197, 201, 197, 200, 200, 206, 203, 197, 169, 137, 84, 84, 71, 55, 139, 79, - 81, 55, 149, 143, 145, 145, 160, 158, 131, 74, 15, 20, 15, 32, 20, 38, - 38, 26, 29, 43, 41, 41, 41, 41, 41, 49, 35, 23, 23, 35, 35, 35, - 38, 20, 35, 55, 84, 131, 137, 137, 131, 129, 155, 174, 179, 177, 174, 172, - 171, 171, 174, 174, 169, 177, 172, 172, 167, 167, 165, 171, 172, 171, 171, 169, - 167, 165, 169, 169, 169, 169, 165, 164, 167, 165, 167, 162, 160, 162, 156, 160, - 101, 101, 103, 94, 94, 103, 91, 91, 86, 84, 91, 79, 81, 98, 110, 135, - 149, 156, 160, 165, 174, 179, 176, 174, 179, 176, 177, 169, 158, 145, 127, 112, - 79, 66, 52, 55, 68, 60, 76, 76, 89, 81, 86, 86, 89, 84, 84, 79, - 81, 86, 91, 89, 89, 94, 94, 101, 91, 98, 108, 103, 98, 101, 89, 84, - 68, 135, 222, 228, 206, 204, 200, 172, 139, 121, 121, 127, 112, 94, 108, 123, - 119, 129, 125, 108, 98, 121, 133, 119, 121, 114, 81, 141, 129, 105, 71, 57, - 66, 41, 43, 60, 55, 86, 89, 68, 41, 32, 29, 23, 60, 55, 55, 96, - 86, 57, 20, 29, 26, 23, 26, 29, 32, 35, 32, 20, 12, 55, 49, 71, - 74, 89, 81, 125, 125, 149, 155, 176, 190, 187, 182, 193, 192, 187, 184, 184, - 177, 184, 189, 181, 184, 181, 189, 185, 181, 189, 181, 185, 187, 195, 203, 195, - 197, 195, 200, 201, 197, 201, 201, 201, 185, 149, 103, 81, 46, 49, 49, 127, - 101, 57, 133, 143, 147, 139, 156, 141, 117, 84, 15, 20, 29, 32, 26, 26, - 35, 20, 38, 46, 43, 41, 38, 41, 52, 46, 32, 32, 20, 32, 43, 35, - 32, 32, 55, 66, 112, 137, 139, 129, 121, 135, 160, 174, 174, 172, 176, 174, - 174, 172, 176, 169, 171, 174, 172, 172, 176, 169, 165, 171, 171, 172, 167, 169, - 167, 174, 171, 167, 162, 165, 171, 167, 162, 165, 162, 162, 164, 160, 156, 162, - 98, 101, 96, 98, 103, 91, 101, 94, 91, 91, 89, 76, 71, 96, 108, 129, - 147, 151, 165, 171, 172, 174, 176, 176, 179, 176, 176, 167, 162, 149, 127, 110, - 84, 60, 52, 66, 55, 68, 84, 84, 81, 86, 91, 91, 98, 94, 96, 86, - 84, 84, 89, 89, 94, 94, 98, 94, 101, 110, 103, 103, 108, 108, 94, 86, - 68, 123, 224, 218, 219, 206, 207, 189, 131, 121, 121, 121, 119, 98, 119, 119, - 117, 117, 96, 129, 127, 133, 121, 117, 127, 114, 86, 114, 101, 96, 52, 57, - 52, 38, 46, 23, 49, 101, 76, 55, 71, 52, 52, 35, 63, 46, 38, 112, - 105, 63, 18, 29, 38, 38, 35, 29, 41, 38, 32, 26, 23, 55, 84, 123, - 79, 94, 94, 156, 153, 171, 176, 185, 189, 184, 192, 195, 193, 179, 182, 172, - 179, 185, 185, 190, 189, 184, 177, 185, 187, 182, 171, 193, 192, 197, 204, 198, - 198, 201, 203, 203, 200, 198, 207, 198, 189, 153, 110, 81, 74, 46, 23, 55, - 81, 71, 55, 143, 139, 160, 165, 149, 110, 57, 32, 23, 20, 18, 35, 23, - 43, 49, 41, 35, 43, 57, 46, 43, 57, 41, 41, 35, 20, 26, 29, 35, - 32, 43, 46, 89, 133, 145, 133, 127, 131, 145, 160, 171, 176, 174, 174, 172, - 174, 176, 172, 167, 172, 171, 169, 169, 169, 174, 171, 167, 171, 171, 164, 165, - 167, 171, 169, 165, 169, 162, 167, 165, 164, 169, 165, 160, 164, 158, 165, 158, - 105, 105, 103, 96, 91, 98, 96, 89, 89, 81, 89, 74, 79, 98, 121, 129, - 141, 156, 162, 174, 181, 172, 179, 177, 179, 176, 177, 174, 160, 151, 137, 114, - 81, 57, 49, 57, 63, 71, 84, 79, 89, 84, 84, 89, 96, 91, 86, 89, - 84, 89, 79, 79, 89, 89, 94, 94, 96, 103, 101, 108, 108, 94, 91, 89, - 74, 121, 222, 218, 224, 216, 201, 131, 101, 112, 125, 121, 110, 121, 117, 119, - 98, 101, 114, 135, 131, 129, 131, 125, 114, 94, 66, 91, 66, 38, 81, 74, - 35, 29, 29, 26, 38, 68, 76, 84, 63, 94, 46, 15, 68, 52, 26, 86, - 135, 94, 20, 32, 23, 35, 41, 26, 35, 26, 9, 26, 43, 79, 145, 74, - 74, 108, 133, 162, 174, 192, 182, 190, 190, 193, 201, 195, 193, 182, 171, 179, - 179, 182, 189, 193, 184, 181, 167, 184, 174, 179, 192, 201, 201, 201, 206, 198, - 201, 198, 203, 201, 204, 200, 200, 203, 187, 169, 129, 81, 63, 57, 29, 20, - 117, 81, 84, 145, 147, 145, 156, 151, 125, 46, 23, 18, 20, 23, 26, 23, - 23, 52, 38, 49, 41, 49, 49, 41, 43, 35, 60, 35, 23, 23, 32, 32, - 26, 29, 68, 112, 137, 147, 135, 125, 131, 158, 169, 169, 169, 176, 172, 172, - 171, 171, 169, 169, 169, 172, 171, 169, 165, 171, 171, 172, 167, 169, 167, 169, - 172, 169, 165, 167, 169, 165, 176, 165, 164, 165, 160, 164, 164, 158, 155, 156, - 103, 103, 96, 105, 103, 101, 91, 96, 96, 96, 86, 86, 76, 94, 121, 125, - 143, 155, 165, 169, 171, 176, 176, 179, 177, 176, 176, 172, 160, 151, 133, 110, - 76, 66, 55, 55, 79, 71, 86, 84, 94, 91, 86, 96, 91, 89, 86, 86, - 86, 86, 96, 89, 91, 96, 96, 101, 103, 110, 112, 108, 108, 105, 96, 81, - 66, 125, 221, 224, 213, 224, 177, 110, 86, 114, 123, 110, 119, 117, 117, 103, - 91, 108, 135, 125, 137, 127, 110, 110, 127, 89, 38, 43, 26, 46, 98, 38, - 23, 38, 23, 29, 38, 68, 86, 49, 63, 84, 49, 32, 66, 55, 18, 66, - 125, 137, 46, 23, 29, 32, 38, 29, 29, 9, 15, 20, 96, 127, 123, 60, - 119, 176, 129, 162, 193, 189, 187, 192, 195, 197, 197, 192, 179, 174, 169, 169, - 172, 181, 190, 190, 182, 162, 172, 172, 187, 190, 193, 200, 204, 204, 207, 201, - 204, 200, 200, 203, 207, 206, 207, 200, 193, 169, 129, 91, 63, 52, 29, 29, - 41, 79, 63, 91, 155, 143, 156, 162, 86, 20, 38, 32, 32, 29, 32, 26, - 35, 29, 49, 52, 46, 71, 57, 55, 41, 29, 29, 35, 20, 26, 35, 32, - 26, 41, 89, 125, 153, 143, 133, 127, 147, 162, 162, 169, 171, 171, 177, 176, - 174, 171, 171, 172, 169, 171, 169, 167, 174, 167, 171, 171, 171, 174, 169, 165, - 167, 165, 169, 169, 162, 162, 165, 165, 160, 165, 167, 162, 162, 164, 162, 158, - 94, 98, 96, 98, 94, 98, 105, 94, 86, 86, 89, 84, 71, 91, 114, 129, - 143, 156, 164, 171, 172, 176, 176, 177, 176, 172, 174, 169, 164, 149, 133, 112, - 86, 60, 46, 63, 68, 76, 76, 86, 86, 91, 91, 96, 79, 98, 91, 86, - 86, 86, 96, 86, 91, 98, 98, 94, 101, 101, 108, 103, 108, 103, 101, 86, - 76, 101, 227, 218, 218, 221, 137, 91, 91, 105, 110, 103, 108, 117, 108, 108, - 114, 121, 117, 123, 127, 127, 105, 125, 119, 89, 26, 20, 46, 60, 63, 35, - 32, 23, 29, 35, 29, 35, 89, 76, 52, 74, 68, 26, 52, 79, 12, 41, - 81, 147, 108, 91, 89, 38, 12, 26, 15, 15, 15, 89, 162, 117, 74, 117, - 189, 172, 127, 160, 195, 192, 189, 195, 201, 204, 198, 189, 177, 174, 171, 174, - 181, 182, 193, 189, 176, 169, 174, 172, 189, 187, 193, 203, 198, 200, 207, 203, - 203, 203, 207, 207, 206, 207, 209, 209, 200, 177, 145, 98, 71, 57, 26, 26, - 15, 89, 68, 66, 156, 139, 167, 162, 79, 26, 23, 20, 23, 29, 32, 32, - 29, 35, 35, 43, 43, 52, 52, 49, 20, 26, 29, 26, 32, 41, 29, 35, - 29, 52, 105, 139, 147, 141, 131, 145, 153, 162, 155, 160, 160, 164, 177, 172, - 174, 172, 172, 172, 171, 171, 169, 172, 169, 169, 167, 172, 172, 172, 172, 169, - 164, 165, 169, 162, 165, 165, 165, 169, 162, 165, 165, 160, 160, 162, 155, 155, - 91, 103, 103, 94, 98, 86, 96, 89, 94, 96, 79, 79, 79, 94, 117, 131, - 145, 160, 165, 167, 182, 177, 174, 181, 172, 177, 177, 169, 156, 153, 133, 117, - 94, 55, 57, 71, 68, 74, 84, 79, 89, 86, 96, 94, 89, 89, 96, 94, - 84, 86, 86, 91, 96, 96, 94, 103, 101, 110, 112, 112, 101, 101, 101, 96, - 94, 86, 213, 222, 222, 209, 96, 96, 98, 96, 101, 117, 110, 119, 105, 121, - 121, 129, 123, 101, 117, 105, 110, 117, 103, 105, 26, 20, 46, 101, 23, 20, - 15, 26, 35, 23, 32, 38, 43, 84, 60, 55, 68, 52, 63, 86, 29, 49, - 32, 158, 86, 52, 74, 55, 23, 20, 15, 9, 84, 162, 133, 105, 121, 190, - 164, 169, 137, 155, 198, 185, 172, 197, 197, 198, 190, 179, 171, 171, 171, 169, - 189, 193, 187, 167, 156, 169, 167, 177, 190, 189, 193, 201, 198, 203, 206, 206, - 206, 204, 206, 206, 212, 213, 212, 212, 207, 189, 164, 103, 71, 60, 20, 20, - 32, 52, 81, 49, 155, 153, 181, 160, 63, 23, 38, 20, 29, 23, 23, 35, - 32, 41, 46, 57, 49, 55, 63, 43, 29, 23, 32, 38, 29, 52, 18, 26, - 41, 74, 123, 151, 141, 137, 131, 155, 164, 162, 158, 158, 164, 160, 162, 165, - 169, 169, 176, 171, 169, 169, 171, 174, 167, 169, 167, 171, 171, 171, 169, 167, - 171, 167, 167, 167, 164, 162, 167, 165, 167, 169, 167, 164, 162, 158, 162, 153, - 98, 101, 98, 101, 103, 96, 96, 96, 89, 94, 86, 86, 84, 101, 112, 129, - 143, 158, 167, 169, 176, 172, 176, 172, 179, 176, 179, 171, 165, 158, 137, 112, - 89, 68, 46, 66, 66, 74, 81, 84, 79, 89, 98, 89, 86, 86, 94, 89, - 91, 91, 94, 94, 91, 96, 94, 94, 105, 119, 103, 108, 103, 101, 103, 108, - 89, 76, 174, 227, 225, 192, 105, 103, 108, 105, 103, 112, 101, 86, 119, 139, - 112, 114, 125, 103, 81, 84, 63, 49, 52, 55, 38, 23, 84, 98, 26, 18, - 18, 35, 23, 43, 35, 32, 35, 55, 68, 52, 60, 55, 63, 74, 29, 46, - 26, 149, 91, 20, 15, 23, 15, 6, 9, 57, 174, 133, 91, 137, 189, 181, - 171, 169, 151, 139, 181, 182, 167, 200, 192, 179, 182, 182, 179, 172, 169, 171, - 187, 189, 143, 162, 164, 181, 179, 190, 189, 197, 198, 209, 204, 204, 206, 207, - 204, 206, 207, 210, 212, 213, 215, 216, 209, 197, 167, 119, 86, 63, 23, 12, - 29, 29, 57, 55, 121, 164, 184, 164, 66, 29, 29, 29, 26, 57, 43, 41, - 46, 32, 38, 46, 57, 41, 55, 35, 38, 32, 23, 35, 35, 43, 20, 26, - 38, 98, 135, 155, 139, 125, 149, 162, 171, 164, 156, 164, 160, 156, 153, 162, - 160, 160, 167, 165, 172, 164, 165, 171, 169, 167, 167, 171, 177, 171, 174, 165, - 169, 167, 167, 169, 164, 162, 160, 164, 165, 165, 160, 164, 164, 158, 155, 156, - 86, 94, 105, 91, 108, 101, 91, 96, 94, 91, 94, 86, 84, 91, 110, 129, - 145, 156, 164, 172, 171, 177, 177, 176, 177, 177, 174, 177, 162, 149, 133, 110, - 94, 76, 52, 63, 57, 68, 81, 76, 89, 84, 101, 91, 94, 103, 91, 101, - 86, 96, 89, 89, 94, 86, 96, 101, 193, 101, 98, 112, 112, 105, 96, 101, - 101, 86, 123, 231, 228, 169, 108, 96, 112, 114, 110, 94, 89, 129, 129, 127, - 127, 121, 63, 84, 74, 63, 84, 38, 32, 71, 32, 23, 108, 66, 29, 20, - 29, 63, 46, 49, 20, 26, 29, 38, 38, 52, 46, 38, 89, 101, 63, 41, - 26, 84, 137, 23, 26, 15, 15, 12, 38, 169, 141, 98, 121, 187, 179, 172, - 172, 172, 158, 153, 187, 177, 187, 203, 198, 190, 176, 174, 177, 181, 181, 182, - 177, 147, 164, 162, 171, 177, 177, 190, 192, 200, 195, 200, 203, 204, 204, 204, - 204, 206, 210, 213, 209, 213, 210, 213, 209, 200, 181, 131, 96, 74, 26, 29, - 26, 20, 38, 76, 55, 160, 171, 174, 98, 41, 57, 32, 35, 35, 29, 41, - 43, 41, 43, 49, 60, 60, 52, 43, 29, 23, 32, 32, 35, 38, 23, 23, - 43, 121, 151, 147, 139, 135, 151, 167, 171, 164, 158, 158, 158, 156, 155, 158, - 156, 158, 160, 158, 160, 158, 172, 167, 167, 169, 167, 171, 167, 164, 169, 171, - 172, 165, 169, 162, 169, 160, 167, 164, 162, 165, 164, 158, 164, 158, 160, 155, - 101, 98, 94, 101, 91, 96, 98, 96, 94, 96, 84, 79, 79, 89, 112, 133, - 143, 155, 164, 172, 176, 176, 179, 179, 174, 181, 176, 177, 162, 149, 133, 117, - 96, 71, 66, 46, 63, 74, 86, 91, 89, 89, 91, 94, 98, 101, 89, 98, - 96, 89, 94, 91, 84, 84, 98, 176, 110, 105, 112, 108, 110, 101, 112, 110, - 105, 108, 108, 198, 228, 176, 96, 108, 110, 110, 117, 89, 125, 121, 129, 117, - 127, 135, 117, 105, 98, 79, 57, 26, 29, 20, 18, 38, 114, 55, 23, 29, - 57, 60, 26, 46, 26, 41, 55, 41, 29, 57, 41, 35, 52, 117, 127, 76, - 20, 41, 149, 23, 18, 18, 9, 43, 156, 151, 121, 119, 192, 176, 190, 181, - 172, 182, 158, 155, 192, 182, 182, 198, 201, 192, 176, 181, 182, 177, 179, 167, - 147, 149, 165, 171, 169, 176, 185, 195, 195, 189, 198, 204, 204, 201, 206, 206, - 206, 206, 212, 210, 215, 212, 215, 216, 209, 198, 189, 151, 103, 63, 35, 29, - 12, 15, 35, 68, 32, 165, 165, 174, 119, 43, 32, 55, 29, 41, 38, 41, - 41, 43, 46, 49, 60, 57, 38, 35, 29, 20, 38, 43, 46, 46, 26, 20, - 68, 127, 145, 145, 135, 145, 162, 171, 174, 167, 164, 162, 160, 160, 158, 162, - 160, 156, 155, 156, 164, 160, 164, 160, 160, 162, 165, 165, 165, 167, 172, 167, - 167, 169, 167, 165, 165, 169, 162, 164, 164, 162, 160, 167, 164, 158, 156, 153, - 98, 96, 101, 96, 94, 96, 91, 96, 89, 91, 89, 84, 79, 101, 112, 131, - 139, 153, 164, 176, 172, 179, 179, 174, 174, 184, 181, 169, 156, 153, 133, 129, - 96, 74, 55, 71, 74, 74, 79, 91, 96, 91, 91, 94, 94, 89, 89, 89, - 94, 86, 89, 89, 101, 98, 98, 114, 105, 105, 105, 114, 110, 108, 105, 112, - 112, 103, 89, 119, 231, 207, 105, 112, 105, 91, 110, 119, 127, 114, 108, 131, - 119, 125, 96, 96, 66, 46, 35, 38, 57, 20, 20, 12, 89, 52, 23, 20, - 55, 26, 41, 32, 32, 41, 41, 35, 26, 46, 26, 49, 81, 89, 57, 103, - 76, 46, 181, 117, 12, 9, 23, 145, 160, 117, 121, 182, 190, 179, 189, 182, - 184, 187, 172, 156, 176, 177, 190, 207, 210, 185, 176, 184, 176, 171, 164, 143, - 155, 158, 167, 174, 172, 174, 187, 192, 197, 195, 197, 201, 204, 207, 206, 207, - 207, 207, 212, 213, 212, 213, 213, 213, 212, 206, 190, 160, 103, 68, 52, 18, - 20, 12, 15, 57, 52, 155, 169, 181, 96, 43, 35, 38, 43, 46, 29, 41, - 46, 41, 49, 57, 57, 60, 55, 32, 41, 35, 26, 38, 41, 32, 29, 41, - 96, 139, 151, 143, 133, 149, 164, 177, 176, 164, 164, 162, 162, 158, 160, 160, - 156, 160, 153, 153, 156, 156, 155, 160, 160, 151, 156, 160, 160, 164, 165, 167, - 169, 167, 167, 164, 164, 162, 164, 162, 160, 164, 164, 160, 158, 153, 156, 153, - 101, 101, 96, 103, 94, 84, 89, 98, 81, 96, 86, 81, 89, 91, 108, 123, - 143, 153, 165, 167, 174, 179, 179, 181, 179, 181, 177, 174, 162, 147, 135, 119, - 89, 76, 71, 74, 81, 81, 84, 89, 89, 86, 98, 96, 98, 94, 89, 98, - 96, 98, 86, 86, 98, 86, 103, 112, 105, 105, 105, 110, 108, 112, 110, 105, - 112, 108, 98, 98, 207, 212, 121, 114, 103, 101, 119, 125, 119, 123, 137, 123, - 127, 94, 84, 91, 38, 49, 29, 79, 29, 20, 12, 18, 63, 86, 63, 76, - 23, 29, 57, 32, 29, 41, 35, 35, 63, 46, 12, 23, 110, 52, 55, 79, - 43, 38, 174, 76, 12, 9, 129, 176, 117, 114, 169, 187, 174, 179, 190, 197, - 187, 190, 158, 156, 176, 171, 193, 207, 200, 181, 172, 169, 174, 155, 153, 158, - 165, 171, 171, 174, 171, 184, 185, 192, 198, 200, 201, 203, 203, 204, 207, 207, - 210, 207, 210, 210, 213, 215, 216, 216, 218, 210, 198, 162, 117, 81, 60, 32, - 23, 20, 23, 32, 94, 98, 172, 177, 94, 71, 35, 26, 35, 43, 38, 35, - 49, 52, 41, 49, 57, 52, 41, 26, 26, 41, 32, 46, 55, 29, 26, 71, - 127, 149, 147, 145, 137, 155, 172, 172, 171, 172, 169, 174, 169, 169, 164, 162, - 162, 162, 162, 156, 158, 160, 158, 156, 151, 156, 158, 156, 153, 155, 164, 165, - 165, 164, 165, 164, 158, 165, 160, 158, 164, 162, 160, 162, 155, 158, 155, 153, - 98, 96, 94, 101, 91, 91, 94, 91, 84, 86, 86, 81, 68, 89, 110, 125, - 143, 155, 167, 176, 179, 179, 179, 181, 181, 179, 179, 169, 156, 145, 135, 112, - 94, 66, 66, 57, 81, 76, 84, 89, 96, 96, 94, 89, 94, 89, 91, 101, - 89, 96, 94, 91, 89, 94, 96, 129, 110, 112, 105, 117, 114, 108, 121, 119, - 110, 105, 114, 110, 129, 216, 121, 119, 89, 103, 131, 139, 121, 125, 129, 131, - 125, 101, 55, 20, 46, 26, 119, 108, 15, 20, 29, 18, 38, 114, 41, 23, - 32, 76, 66, 23, 38, 43, 23, 35, 81, 32, 18, 23, 86, 23, 71, 52, - 20, 6, 71, 131, 9, 105, 165, 117, 125, 153, 177, 172, 182, 181, 197, 195, - 195, 195, 153, 135, 185, 185, 200, 201, 185, 174, 164, 177, 147, 158, 156, 156, - 169, 169, 176, 176, 176, 179, 189, 187, 200, 195, 193, 203, 201, 203, 210, 209, - 206, 209, 212, 213, 212, 210, 216, 216, 218, 210, 204, 171, 135, 86, 74, 38, - 32, 23, 23, 35, 79, 66, 177, 184, 86, 41, 23, 38, 41, 49, 35, 43, - 43, 41, 52, 43, 52, 41, 32, 35, 23, 26, 49, 41, 32, 32, 26, 79, - 137, 151, 145, 139, 147, 164, 174, 177, 176, 172, 169, 171, 172, 167, 165, 164, - 169, 167, 162, 162, 160, 158, 160, 153, 158, 156, 156, 153, 158, 155, 155, 155, - 158, 156, 158, 162, 160, 160, 158, 160, 160, 158, 162, 160, 156, 155, 158, 155, - 94, 96, 101, 86, 91, 96, 89, 91, 91, 91, 79, 84, 76, 98, 119, 131, - 145, 149, 158, 172, 177, 179, 181, 176, 179, 174, 179, 172, 162, 155, 139, 110, - 91, 60, 57, 60, 76, 84, 91, 89, 98, 89, 89, 89, 98, 98, 98, 98, - 91, 96, 91, 94, 91, 101, 94, 110, 112, 110, 103, 105, 117, 108, 112, 117, - 123, 117, 110, 121, 125, 158, 103, 117, 98, 131, 135, 123, 145, 125, 119, 123, - 89, 57, 26, 71, 32, 18, 60, 63, 20, 35, 38, 29, 15, 43, 98, 26, - 49, 86, 46, 20, 41, 43, 23, 52, 52, 60, 35, 38, 26, 49, 76, 52, - 9, 9, 29, 137, 89, 162, 133, 103, 133, 184, 167, 160, 171, 189, 198, 193, - 200, 193, 169, 121, 177, 197, 201, 184, 171, 160, 162, 155, 155, 153, 165, 162, - 171, 174, 171, 177, 177, 179, 184, 184, 197, 198, 201, 198, 203, 200, 203, 204, - 206, 206, 209, 210, 215, 215, 216, 215, 215, 213, 207, 181, 141, 96, 86, 63, - 35, 23, 23, 18, 66, 52, 169, 181, 103, 55, 60, 32, 52, 35, 46, 43, - 60, 57, 46, 52, 49, 38, 32, 41, 35, 35, 43, 35, 23, 32, 60, 119, - 141, 149, 141, 131, 147, 172, 171, 172, 172, 171, 172, 172, 167, 167, 174, 176, - 165, 172, 171, 169, 167, 165, 160, 162, 162, 149, 151, 155, 160, 156, 156, 149, - 151, 149, 156, 149, 153, 156, 160, 160, 158, 158, 160, 162, 160, 156, 156, 155, - 91, 96, 89, 94, 101, 91, 94, 86, 89, 101, 89, 79, 79, 86, 112, 127, - 141, 153, 165, 179, 179, 176, 179, 176, 179, 184, 177, 172, 158, 155, 135, 108, - 86, 66, 71, 68, 68, 79, 84, 91, 96, 84, 96, 89, 101, 96, 101, 98, - 98, 91, 94, 96, 98, 98, 96, 98, 110, 112, 108, 98, 98, 101, 103, 96, - 89, 91, 125, 151, 74, 74, 119, 94, 131, 119, 127, 131, 121, 131, 123, 94, - 68, 26, 32, 89, 18, 15, 81, 63, 23, 103, 23, 43, 15, 18, 38, 71, - 110, 49, 41, 18, 43, 26, 20, 84, 26, 26, 46, 41, 29, 26, 103, 96, - 9, 6, 12, 52, 155, 131, 108, 137, 198, 160, 167, 164, 167, 179, 195, 195, - 197, 197, 187, 153, 182, 198, 174, 174, 169, 156, 156, 165, 164, 156, 162, 160, - 169, 172, 176, 177, 176, 182, 179, 187, 193, 195, 200, 201, 200, 198, 204, 200, - 207, 206, 206, 207, 210, 210, 213, 213, 216, 210, 207, 193, 153, 105, 76, 63, - 35, 15, 23, 23, 41, 55, 158, 182, 135, 79, 41, 26, 20, 46, 35, 46, - 41, 63, 55, 57, 46, 35, 20, 35, 32, 46, 43, 38, 23, 35, 81, 129, - 147, 149, 141, 137, 153, 167, 171, 174, 169, 169, 167, 167, 165, 169, 171, 174, - 172, 169, 176, 172, 167, 167, 164, 162, 160, 155, 153, 155, 160, 158, 156, 153, - 155, 151, 151, 151, 147, 147, 153, 155, 156, 164, 164, 156, 158, 158, 155, 153, - 94, 94, 96, 91, 86, 91, 96, 84, 89, 89, 96, 71, 76, 94, 112, 133, - 145, 160, 167, 176, 172, 176, 179, 177, 182, 182, 174, 172, 160, 147, 131, 105, - 86, 74, 52, 66, 74, 68, 89, 84, 94, 94, 94, 91, 89, 86, 98, 91, - 86, 96, 91, 94, 101, 101, 103, 101, 108, 112, 112, 112, 110, 110, 108, 114, - 119, 119, 149, 52, 91, 153, 137, 94, 121, 114, 123, 137, 131, 119, 123, 108, - 74, 26, 101, 71, 18, 15, 91, 89, 52, 35, 20, 23, 52, 43, 63, 119, - 41, 41, 12, 32, 46, 20, 15, 114, 15, 26, 94, 43, 46, 26, 131, 20, - 23, 12, 26, 131, 123, 86, 121, 195, 167, 169, 171, 160, 165, 174, 198, 203, - 193, 197, 193, 182, 195, 181, 176, 176, 153, 162, 171, 164, 165, 162, 164, 169, - 174, 184, 176, 177, 179, 179, 174, 179, 192, 193, 197, 201, 198, 200, 197, 197, - 204, 204, 206, 207, 207, 212, 210, 215, 213, 212, 209, 201, 162, 105, 84, 71, - 35, 15, 26, 20, 35, 57, 123, 177, 153, 86, 43, 32, 46, 68, 52, 55, - 49, 46, 63, 57, 49, 46, 29, 43, 29, 38, 38, 38, 26, 38, 108, 143, - 145, 143, 131, 145, 158, 171, 169, 171, 171, 172, 167, 174, 171, 169, 167, 172, - 172, 174, 176, 176, 174, 169, 167, 167, 165, 160, 158, 158, 158, 158, 155, 151, - 155, 149, 153, 155, 151, 153, 149, 149, 153, 156, 158, 158, 158, 156, 155, 156, - 91, 94, 89, 91, 96, 89, 94, 86, 76, 86, 81, 81, 81, 91, 112, 131, - 143, 156, 167, 174, 177, 172, 176, 181, 184, 182, 182, 177, 160, 153, 135, 108, - 94, 74, 52, 68, 68, 76, 86, 84, 94, 86, 84, 89, 86, 96, 101, 89, - 89, 91, 94, 86, 96, 101, 103, 105, 105, 114, 103, 108, 112, 114, 114, 114, - 112, 108, 174, 141, 127, 131, 193, 151, 108, 117, 131, 133, 119, 110, 125, 81, - 23, 43, 94, 52, 20, 15, 79, 101, 41, 6, 41, 15, 41, 79, 117, 76, - 60, 35, 26, 26, 52, 35, 26, 121, 18, 12, 105, 43, 15, 96, 20, 35, - 32, 15, 103, 158, 79, 98, 189, 181, 174, 182, 181, 172, 167, 176, 197, 200, - 197, 200, 193, 192, 185, 182, 145, 129, 145, 149, 158, 160, 164, 164, 177, 167, - 177, 179, 179, 182, 184, 182, 179, 184, 187, 189, 193, 198, 198, 198, 200, 197, - 200, 203, 206, 207, 203, 210, 213, 215, 215, 209, 209, 200, 165, 119, 84, 49, - 26, 15, 18, 32, 38, 49, 129, 184, 155, 66, 57, 41, 52, 71, 60, 32, - 46, 52, 60, 52, 38, 32, 38, 29, 38, 57, 43, 29, 43, 68, 121, 141, - 143, 139, 133, 153, 164, 171, 174, 169, 172, 171, 172, 167, 171, 171, 172, 169, - 172, 169, 179, 176, 172, 172, 171, 164, 164, 165, 164, 158, 162, 156, 160, 156, - 153, 153, 153, 153, 147, 153, 147, 147, 145, 149, 149, 149, 149, 156, 158, 156, - 98, 98, 108, 89, 89, 89, 86, 89, 89, 89, 84, 84, 71, 96, 105, 135, - 131, 158, 167, 176, 176, 176, 177, 177, 177, 177, 174, 171, 165, 147, 135, 110, - 81, 68, 55, 68, 74, 66, 76, 86, 86, 89, 91, 105, 94, 89, 94, 96, - 91, 96, 98, 98, 94, 94, 103, 103, 101, 112, 105, 114, 110, 108, 105, 117, - 176, 158, 165, 26, 43, 49, 74, 112, 133, 129, 131, 123, 105, 125, 108, 29, - 35, 94, 131, 9, 20, 32, 94, 112, 12, 12, 43, 38, 68, 55, 35, 63, - 18, 15, 23, 26, 35, 43, 35, 63, 12, 29, 110, 49, 15, 117, 60, 49, - 12, 57, 164, 112, 94, 177, 193, 174, 177, 185, 181, 160, 153, 172, 192, 201, - 200, 200, 201, 192, 179, 63, 66, 110, 117, 133, 139, 145, 155, 158, 172, 176, - 171, 182, 182, 182, 181, 174, 179, 181, 182, 184, 192, 200, 203, 198, 198, 192, - 198, 201, 203, 207, 204, 207, 212, 210, 212, 207, 204, 192, 162, 117, 49, 32, - 29, 23, 23, 29, 20, 81, 94, 184, 160, 94, 57, 38, 55, 49, 74, 52, - 52, 57, 84, 57, 41, 32, 43, 32, 38, 52, 29, 38, 35, 84, 133, 145, - 143, 133, 139, 155, 167, 171, 165, 164, 167, 171, 165, 167, 167, 171, 165, 169, - 172, 174, 171, 176, 171, 174, 167, 165, 165, 165, 164, 164, 162, 160, 164, 156, - 156, 155, 156, 155, 155, 153, 153, 147, 149, 153, 153, 149, 151, 143, 149, 147, - 86, 96, 91, 94, 94, 94, 89, 96, 94, 89, 84, 89, 79, 91, 108, 133, - 145, 155, 165, 167, 177, 179, 181, 179, 179, 181, 177, 176, 164, 151, 137, 117, - 91, 84, 57, 63, 76, 68, 79, 81, 84, 91, 101, 94, 98, 105, 94, 91, - 96, 91, 94, 89, 98, 91, 96, 101, 101, 114, 112, 110, 114, 114, 108, 181, - 207, 103, 76, 18, 12, 18, 15, 151, 156, 182, 114, 101, 94, 101, 32, 35, - 91, 57, 98, 15, 23, 49, 143, 110, 6, 26, 23, 26, 35, 49, 35, 46, - 23, 23, 41, 43, 35, 41, 26, 60, 18, 43, 68, 46, 38, 63, 15, 6, - 26, 145, 131, 81, 147, 201, 171, 181, 187, 200, 181, 165, 164, 182, 198, 203, - 206, 201, 200, 127, 68, 76, 89, 94, 79, 98, 94, 91, 110, 119, 141, 164, - 177, 182, 185, 182, 179, 179, 176, 176, 177, 189, 190, 198, 197, 197, 192, 195, - 200, 193, 198, 203, 203, 204, 209, 209, 209, 201, 182, 169, 131, 94, 46, 35, - 18, 15, 18, 23, 26, 94, 46, 193, 164, 125, 32, 35, 63, 66, 38, 41, - 60, 63, 66, 46, 41, 35, 32, 35, 38, 41, 32, 35, 46, 101, 139, 145, - 139, 131, 147, 158, 171, 167, 167, 167, 164, 165, 169, 167, 167, 165, 164, 162, - 167, 167, 172, 169, 171, 174, 172, 169, 162, 165, 167, 164, 169, 165, 160, 162, - 158, 155, 158, 155, 158, 153, 147, 153, 145, 147, 147, 149, 143, 145, 143, 141, - 91, 96, 96, 91, 98, 91, 98, 86, 91, 91, 81, 86, 76, 86, 108, 127, - 145, 155, 160, 169, 176, 176, 179, 179, 179, 181, 181, 172, 165, 155, 139, 108, - 84, 66, 66, 68, 79, 74, 91, 89, 91, 96, 91, 91, 94, 98, 98, 101, - 94, 94, 98, 91, 96, 96, 96, 112, 108, 108, 108, 117, 114, 114, 119, 181, - 184, 98, 35, 23, 15, 23, 76, 145, 189, 201, 121, 74, 52, 68, 35, 55, - 101, 141, 23, 26, 20, 89, 133, 123, 9, 26, 12, 35, 52, 63, 52, 68, - 43, 23, 46, 32, 23, 29, 55, 105, 57, 52, 29, 76, 29, 29, 20, 15, - 125, 165, 81, 125, 193, 171, 179, 184, 200, 204, 174, 164, 164, 190, 197, 203, - 204, 195, 119, 117, 135, 137, 139, 123, 112, 103, 81, 46, 55, 60, 76, 103, - 141, 165, 179, 177, 177, 182, 182, 174, 172, 181, 189, 197, 197, 198, 192, 192, - 195, 197, 198, 206, 203, 204, 209, 203, 193, 171, 139, 119, 96, 71, 43, 38, - 18, 15, 20, 23, 29, 71, 35, 184, 177, 135, 29, 26, 46, 68, 46, 55, - 52, 52, 43, 49, 32, 26, 46, 29, 49, 35, 35, 35, 63, 110, 139, 141, - 141, 131, 151, 162, 177, 171, 165, 167, 167, 164, 164, 167, 164, 167, 162, 165, - 167, 167, 169, 169, 171, 169, 171, 164, 158, 162, 165, 167, 164, 165, 162, 164, - 158, 164, 160, 160, 153, 156, 158, 155, 155, 149, 149, 145, 147, 143, 139, 139, - 98, 91, 94, 96, 98, 86, 91, 98, 94, 94, 89, 81, 71, 84, 108, 127, - 141, 156, 169, 174, 179, 171, 179, 177, 182, 179, 176, 174, 162, 147, 141, 119, - 91, 60, 63, 74, 76, 74, 76, 79, 84, 94, 108, 89, 94, 86, 91, 84, - 94, 89, 96, 89, 91, 96, 101, 105, 105, 101, 110, 117, 119, 125, 131, 135, - 155, 151, 55, 29, 12, 26, 68, 141, 147, 79, 105, 43, 63, 79, 35, 57, - 76, 81, 32, 41, 63, 89, 52, 139, 12, 20, 20, 76, 57, 26, 91, 38, - 84, 18, 52, 20, 23, 9, 23, 76, 84, 117, 15, 91, 32, 15, 18, 74, - 167, 110, 114, 198, 172, 176, 185, 197, 206, 189, 164, 162, 179, 197, 201, 206, - 189, 110, 125, 143, 151, 151, 143, 162, 149, 141, 114, 86, 68, 63, 49, 35, - 66, 94, 151, 172, 172, 174, 167, 171, 177, 176, 189, 189, 195, 195, 193, 187, - 197, 198, 193, 198, 190, 192, 176, 147, 112, 81, 79, 60, 76, 84, 74, 71, - 29, 23, 26, 26, 29, 52, 29, 182, 169, 139, 55, 38, 38, 74, 57, 57, - 57, 55, 43, 23, 41, 35, 32, 23, 43, 43, 35, 32, 71, 137, 145, 139, - 129, 137, 155, 172, 165, 171, 167, 167, 167, 165, 164, 162, 165, 169, 164, 162, - 160, 165, 167, 171, 167, 171, 171, 160, 164, 165, 162, 165, 165, 164, 169, 162, - 165, 162, 164, 162, 160, 164, 156, 153, 151, 155, 153, 147, 151, 139, 141, 141, - 94, 89, 94, 89, 101, 105, 96, 89, 96, 86, 91, 81, 74, 86, 108, 125, - 147, 153, 162, 174, 177, 172, 181, 177, 176, 181, 182, 176, 162, 155, 137, 121, - 84, 63, 66, 74, 74, 68, 81, 86, 91, 91, 96, 96, 96, 86, 94, 86, - 79, 94, 86, 96, 98, 98, 98, 96, 91, 103, 114, 117, 141, 156, 143, 141, - 137, 129, 29, 49, 55, 15, 79, 131, 141, 63, 63, 105, 57, 41, 52, 108, - 96, 26, 35, 41, 123, 76, 29, 151, 26, 20, 18, 66, 55, 32, 26, 43, - 96, 46, 29, 12, 20, 18, 18, 32, 91, 145, 12, 74, 18, 6, 38, 151, - 153, 105, 176, 192, 171, 184, 193, 207, 206, 177, 160, 177, 195, 203, 209, 169, - 101, 127, 125, 131, 145, 147, 108, 141, 164, 153, 121, 135, 74, 74, 71, 63, - 66, 60, 84, 131, 167, 167, 169, 169, 174, 177, 184, 187, 195, 193, 193, 190, - 190, 193, 189, 190, 171, 141, 89, 79, 94, 76, 98, 96, 137, 114, 105, 84, - 41, 38, 18, 15, 20, 52, 32, 179, 171, 137, 81, 41, 43, 68, 46, 49, - 49, 57, 41, 35, 29, 29, 38, 46, 43, 46, 43, 38, 91, 137, 143, 137, - 129, 145, 160, 167, 172, 164, 167, 171, 164, 164, 162, 164, 162, 162, 162, 164, - 162, 160, 162, 165, 167, 165, 165, 162, 167, 160, 167, 162, 162, 162, 165, 165, - 162, 165, 165, 160, 160, 158, 164, 158, 155, 153, 153, 149, 149, 143, 143, 141, - 89, 101, 91, 91, 103, 89, 94, 91, 91, 89, 89, 79, 68, 84, 105, 121, - 145, 153, 165, 176, 177, 177, 176, 182, 181, 184, 185, 176, 162, 156, 137, 117, - 89, 68, 55, 76, 76, 79, 98, 84, 96, 98, 94, 89, 94, 89, 91, 89, - 86, 94, 84, 86, 89, 94, 98, 98, 103, 98, 101, 143, 156, 156, 151, 145, - 137, 193, 129, 105, 145, 71, 103, 125, 147, 119, 46, 76, 32, 32, 63, 117, - 105, 52, 60, 91, 103, 15, 15, 123, 60, 32, 23, 84, 32, 18, 23, 35, - 103, 89, 18, 20, 18, 29, 15, 20, 29, 46, 101, 18, 18, 12, 131, 158, - 103, 165, 201, 169, 177, 193, 200, 207, 197, 171, 167, 192, 203, 210, 137, 84, - 103, 103, 110, 121, 108, 125, 68, 79, 149, 135, 81, 119, 68, 108, 103, 89, - 86, 89, 91, 114, 149, 153, 155, 165, 165, 172, 187, 187, 195, 197, 197, 193, - 193, 190, 174, 174, 129, 103, 91, 110, 123, 86, 105, 112, 103, 79, 63, 71, - 38, 68, 29, 32, 20, 63, 23, 164, 177, 135, 89, 35, 38, 46, 35, 60, - 55, 55, 35, 46, 32, 32, 35, 35, 41, 26, 46, 57, 117, 139, 145, 135, - 129, 145, 164, 167, 165, 167, 165, 164, 165, 164, 160, 162, 162, 162, 160, 158, - 165, 160, 165, 164, 164, 167, 169, 165, 164, 167, 162, 165, 162, 160, 162, 162, - 165, 165, 165, 164, 167, 164, 160, 156, 160, 160, 156, 153, 149, 145, 145, 141, - 81, 94, 91, 94, 96, 94, 89, 94, 91, 89, 86, 68, 63, 84, 108, 121, - 143, 153, 164, 174, 179, 181, 174, 177, 181, 177, 179, 174, 164, 155, 139, 112, - 94, 63, 55, 63, 71, 68, 81, 81, 86, 91, 98, 91, 91, 89, 86, 86, - 86, 98, 76, 89, 96, 86, 96, 98, 105, 121, 133, 141, 149, 160, 155, 149, - 147, 193, 190, 172, 169, 139, 98, 68, 81, 35, 55, 20, 35, 76, 103, 139, - 20, 84, 79, 108, 98, 12, 12, 86, 117, 32, 29, 81, 29, 32, 15, 41, - 96, 117, 38, 32, 23, 23, 35, 29, 20, 29, 23, 52, 6, 49, 167, 98, - 125, 206, 169, 172, 184, 200, 207, 212, 189, 176, 181, 198, 212, 101, 74, 89, - 89, 91, 60, 52, 68, 68, 29, 35, 101, 60, 23, 52, 76, 119, 66, 121, - 117, 103, 105, 112, 127, 143, 155, 160, 155, 167, 176, 193, 197, 203, 200, 193, - 192, 195, 171, 141, 135, 127, 119, 71, 57, 29, 35, 43, 43, 55, 49, 49, - 55, 49, 29, 15, 26, 68, 20, 164, 185, 117, 105, 26, 29, 52, 49, 57, - 57, 41, 32, 29, 26, 26, 32, 41, 41, 26, 35, 86, 129, 143, 143, 129, - 137, 160, 167, 164, 162, 165, 167, 158, 160, 162, 164, 162, 164, 160, 158, 160, - 164, 164, 164, 165, 165, 165, 164, 165, 165, 162, 164, 158, 162, 162, 165, 164, - 167, 162, 164, 165, 162, 156, 155, 153, 158, 155, 156, 155, 153, 147, 145, 143, - 89, 98, 94, 94, 91, 86, 86, 89, 94, 86, 89, 79, 68, 81, 110, 129, - 143, 153, 160, 169, 177, 179, 177, 187, 179, 182, 181, 174, 164, 155, 137, 119, - 94, 71, 74, 57, 63, 74, 81, 84, 89, 89, 89, 94, 91, 94, 89, 84, - 89, 81, 98, 86, 89, 86, 89, 141, 149, 162, 143, 143, 149, 156, 151, 147, - 151, 153, 117, 114, 158, 121, 20, 23, 12, 20, 57, 76, 76, 84, 151, 60, - 46, 74, 74, 117, 68, 26, 23, 96, 79, 26, 20, 101, 29, 18, 12, 35, - 49, 139, 105, 32, 15, 26, 43, 29, 18, 15, 23, 15, 23, 156, 135, 94, - 197, 174, 176, 182, 195, 207, 209, 203, 197, 192, 200, 210, 84, 66, 60, 52, - 43, 41, 35, 38, 26, 26, 35, 35, 29, 23, 23, 15, 18, 49, 101, 137, - 119, 110, 121, 110, 131, 141, 147, 156, 158, 169, 181, 195, 197, 200, 201, 201, - 197, 187, 155, 112, 89, 60, 23, 32, 41, 26, 26, 20, 38, 35, 46, 57, - 60, 20, 32, 15, 15, 66, 20, 165, 184, 127, 112, 76, 32, 49, 66, 55, - 63, 49, 26, 35, 43, 29, 32, 43, 41, 18, 29, 96, 139, 147, 139, 139, - 143, 156, 164, 167, 164, 165, 164, 162, 162, 162, 160, 164, 171, 162, 160, 164, - 162, 160, 164, 164, 167, 169, 167, 158, 156, 162, 162, 156, 164, 164, 158, 158, - 164, 165, 162, 162, 162, 164, 153, 158, 155, 155, 155, 151, 151, 149, 149, 149, - 91, 101, 96, 84, 91, 91, 84, 86, 81, 94, 84, 74, 66, 66, 101, 127, - 141, 156, 167, 171, 176, 176, 182, 181, 181, 179, 176, 172, 160, 149, 139, 114, - 89, 84, 60, 57, 68, 71, 74, 74, 96, 81, 101, 86, 86, 86, 89, 86, - 86, 91, 76, 76, 76, 81, 117, 165, 210, 197, 133, 145, 151, 149, 153, 153, - 156, 149, 108, 55, 74, 103, 15, 18, 15, 55, 125, 89, 74, 112, 96, 101, - 60, 112, 66, 135, 81, 20, 18, 98, 18, 84, 29, 94, 26, 26, 12, 15, - 9, 41, 129, 123, 55, 18, 15, 32, 38, 9, 29, 9, 89, 181, 96, 160, - 203, 171, 185, 189, 192, 207, 204, 203, 198, 195, 207, 84, 43, 57, 23, 38, - 26, 29, 41, 20, 29, 23, 23, 35, 55, 68, 32, 20, 18, 29, 23, 103, - 133, 121, 125, 117, 119, 139, 141, 143, 155, 164, 182, 193, 200, 201, 206, 206, - 192, 162, 79, 41, 46, 38, 41, 41, 43, 23, 32, 29, 35, 60, 32, 46, - 26, 26, 29, 29, 26, 66, 23, 156, 187, 133, 103, 63, 68, 38, 49, 49, - 55, 35, 26, 29, 38, 26, 41, 32, 41, 23, 23, 105, 149, 145, 137, 139, - 155, 171, 169, 171, 162, 164, 167, 158, 165, 160, 160, 158, 158, 155, 167, 162, - 158, 158, 164, 158, 164, 164, 162, 162, 162, 162, 165, 162, 160, 162, 164, 164, - 160, 162, 160, 158, 160, 153, 160, 153, 156, 153, 151, 153, 153, 153, 147, 145, - 84, 81, 91, 81, 81, 81, 84, 79, 86, 89, 79, 63, 60, 68, 103, 121, - 141, 151, 169, 174, 176, 179, 177, 181, 177, 181, 181, 172, 162, 153, 133, 117, - 86, 63, 63, 57, 71, 76, 74, 79, 89, 86, 84, 94, 81, 79, 86, 81, - 89, 84, 74, 71, 66, 103, 213, 181, 216, 131, 137, 139, 143, 149, 158, 147, - 139, 147, 86, 32, 74, 26, 9, 12, 41, 141, 94, 26, 81, 105, 43, 91, - 74, 84, 76, 162, 74, 18, 38, 81, 23, 49, 81, 101, 63, 29, 35, 15, - 23, 23, 57, 129, 119, 76, 20, 18, 18, 12, 12, 35, 153, 108, 127, 209, - 172, 174, 182, 195, 203, 212, 201, 197, 206, 206, 81, 57, 38, 49, 26, 35, - 23, 23, 23, 26, 20, 26, 26, 60, 147, 160, 103, 41, 18, 20, 20, 52, - 110, 131, 121, 119, 127, 129, 137, 145, 149, 160, 182, 192, 207, 207, 212, 207, - 165, 35, 43, 29, 43, 32, 43, 76, 129, 86, 23, 20, 32, 29, 38, 41, - 23, 38, 35, 20, 29, 74, 18, 155, 192, 155, 89, 63, 52, 55, 71, 46, - 46, 29, 29, 32, 29, 32, 43, 35, 41, 29, 55, 127, 151, 143, 143, 141, - 160, 167, 165, 165, 164, 162, 165, 160, 158, 160, 155, 160, 162, 160, 160, 167, - 165, 158, 158, 165, 164, 160, 164, 160, 164, 158, 165, 162, 160, 167, 162, 160, - 160, 160, 160, 160, 158, 155, 153, 155, 153, 149, 149, 145, 149, 145, 145, 143, - 84, 91, 89, 84, 81, 86, 79, 79, 79, 76, 63, 84, 60, 68, 94, 125, - 139, 155, 164, 176, 179, 177, 177, 182, 179, 179, 181, 172, 164, 151, 139, 117, - 89, 71, 55, 57, 68, 74, 84, 76, 86, 84, 86, 91, 89, 89, 84, 89, - 81, 79, 74, 71, 63, 131, 203, 193, 189, 114, 133, 143, 151, 155, 155, 91, - 127, 129, 74, 81, 26, 15, 32, 26, 141, 98, 15, 43, 131, 18, 9, 52, - 112, 98, 105, 131, 46, 32, 26, 57, 20, 32, 26, 74, 105, 32, 32, 29, - 35, 23, 35, 52, 26, 57, 91, 29, 15, 9, 12, 117, 165, 86, 184, 185, - 172, 187, 182, 192, 210, 209, 203, 207, 206, 103, 68, 74, 49, 23, 15, 32, - 49, 49, 23, 41, 15, 20, 84, 84, 182, 210, 185, 167, 55, 20, 63, 41, - 98, 121, 110, 108, 129, 133, 141, 141, 151, 164, 169, 197, 209, 218, 216, 189, - 71, 29, 23, 35, 26, 35, 162, 57, 171, 139, 66, 20, 20, 38, 35, 41, - 23, 26, 35, 15, 20, 74, 12, 147, 190, 153, 84, 86, 55, 55, 57, 46, - 49, 32, 23, 32, 38, 46, 32, 29, 26, 29, 94, 133, 151, 145, 139, 149, - 164, 167, 164, 165, 165, 164, 165, 160, 158, 162, 158, 158, 155, 160, 162, 160, - 158, 158, 165, 153, 158, 158, 162, 160, 158, 160, 156, 164, 164, 160, 162, 156, - 156, 162, 160, 156, 153, 149, 147, 149, 147, 153, 141, 141, 143, 141, 145, 145, - 89, 94, 86, 81, 94, 86, 79, 86, 79, 71, 66, 71, 52, 68, 103, 131, - 135, 155, 165, 179, 176, 184, 179, 179, 181, 179, 182, 182, 160, 153, 135, 119, - 86, 60, 57, 68, 74, 84, 89, 91, 81, 91, 94, 79, 86, 86, 96, 96, - 84, 79, 81, 71, 66, 81, 200, 197, 187, 147, 135, 147, 149, 149, 153, 98, - 155, 129, 29, 74, 32, 20, 66, 119, 46, 32, 46, 110, 57, 20, 20, 81, - 143, 84, 84, 119, 38, 29, 32, 26, 12, 38, 26, 41, 153, 38, 38, 15, - 18, 26, 26, 35, 23, 26, 55, 23, 29, 63, 43, 156, 94, 147, 209, 171, - 190, 193, 193, 200, 213, 207, 209, 212, 127, 84, 74, 46, 38, 32, 20, 38, - 86, 81, 43, 91, 23, 23, 119, 38, 164, 207, 201, 200, 149, 49, 79, 101, - 74, 114, 105, 101, 123, 129, 129, 131, 149, 165, 182, 201, 221, 222, 209, 110, - 52, 35, 60, 43, 18, 43, 103, 60, 185, 167, 86, 41, 26, 68, 23, 49, - 35, 26, 23, 18, 15, 96, 18, 141, 181, 155, 68, 103, 55, 66, 52, 46, - 41, 29, 29, 55, 26, 38, 26, 26, 38, 57, 110, 145, 145, 149, 145, 160, - 172, 162, 160, 160, 164, 164, 160, 160, 160, 160, 156, 158, 158, 160, 158, 160, - 156, 162, 158, 156, 160, 158, 153, 165, 158, 160, 158, 160, 155, 156, 155, 153, - 158, 156, 158, 153, 149, 153, 151, 149, 145, 137, 141, 143, 141, 139, 135, 141, - 89, 91, 91, 79, 94, 81, 84, 84, 81, 74, 74, 63, 55, 68, 103, 127, - 137, 153, 169, 176, 179, 179, 179, 184, 185, 184, 182, 177, 164, 151, 137, 117, - 98, 68, 52, 57, 76, 86, 79, 91, 91, 91, 94, 86, 98, 91, 105, 86, - 94, 81, 86, 76, 23, 66, 197, 74, 117, 200, 187, 149, 147, 153, 137, 84, - 114, 52, 20, 23, 12, 43, 129, 71, 18, 46, 86, 32, 74, 32, 32, 57, - 137, 71, 108, 119, 29, 35, 23, 32, 29, 26, 20, 32, 135, 63, 23, 26, - 23, 26, 35, 26, 15, 18, 26, 20, 18, 29, 108, 114, 103, 198, 176, 156, - 156, 181, 198, 210, 212, 201, 209, 158, 94, 108, 98, 68, 68, 41, 12, 43, - 86, 123, 55, 81, 79, 91, 57, 55, 207, 212, 216, 212, 189, 101, 49, 119, - 74, 103, 96, 108, 110, 123, 131, 135, 155, 164, 187, 203, 218, 216, 176, 74, - 101, 41, 94, 86, 49, 110, 60, 79, 182, 158, 112, 41, 18, 20, 20, 26, - 26, 15, 32, 18, 23, 98, 18, 127, 182, 160, 68, 105, 68, 91, 35, 60, - 29, 26, 35, 38, 38, 38, 38, 35, 38, 63, 121, 147, 147, 139, 145, 158, - 165, 167, 169, 162, 162, 167, 162, 160, 164, 155, 162, 156, 155, 158, 158, 158, - 158, 162, 156, 156, 162, 160, 158, 158, 158, 156, 155, 158, 155, 156, 155, 155, - 155, 158, 149, 153, 149, 149, 145, 139, 141, 139, 131, 141, 137, 147, 153, 160, - 98, 89, 91, 89, 91, 91, 101, 84, 84, 76, 68, 63, 49, 66, 94, 123, - 141, 156, 165, 172, 182, 181, 179, 185, 184, 185, 182, 179, 165, 151, 133, 117, - 91, 76, 52, 71, 66, 74, 86, 86, 91, 98, 91, 91, 98, 79, 101, 98, - 108, 105, 57, 49, 29, 20, 167, 114, 147, 182, 216, 213, 185, 160, 35, 20, - 20, 32, 18, 32, 52, 98, 60, 41, 26, 57, 49, 41, 63, 43, 49, 86, - 149, 91, 141, 125, 32, 35, 32, 29, 43, 29, 23, 18, 86, 74, 26, 32, - 23, 23, 43, 29, 29, 20, 23, 32, 18, 52, 147, 74, 147, 176, 160, 181, - 197, 203, 206, 207, 204, 209, 164, 94, 105, 121, 121, 110, 105, 91, 20, 23, - 79, 112, 114, 49, 38, 41, 71, 172, 213, 213, 213, 203, 181, 127, 76, 119, - 108, 101, 108, 105, 110, 117, 129, 135, 153, 169, 190, 216, 221, 221, 131, 98, - 129, 119, 52, 105, 94, 74, 63, 169, 177, 155, 101, 52, 20, 38, 20, 20, - 18, 23, 29, 18, 41, 105, 18, 105, 172, 162, 79, 91, 68, 84, 43, 41, - 32, 55, 32, 32, 55, 38, 26, 29, 35, 86, 135, 155, 143, 141, 149, 160, - 164, 167, 165, 164, 165, 162, 158, 160, 156, 158, 164, 156, 162, 158, 156, 160, - 153, 164, 158, 155, 156, 160, 162, 164, 158, 156, 156, 151, 151, 155, 151, 158, - 151, 155, 151, 143, 143, 143, 143, 139, 139, 137, 137, 143, 153, 158, 167, 176, - 91, 101, 91, 86, 84, 91, 96, 84, 81, 81, 68, 63, 49, 71, 101, 119, - 141, 155, 162, 174, 181, 181, 184, 184, 181, 182, 182, 177, 164, 155, 137, 112, - 98, 76, 66, 63, 79, 84, 91, 89, 84, 101, 103, 96, 91, 86, 96, 91, - 110, 38, 49, 26, 43, 79, 149, 155, 171, 187, 227, 246, 215, 38, 68, 20, - 35, 15, 18, 35, 101, 74, 81, 89, 35, 55, 86, 66, 76, 101, 91, 101, - 112, 66, 119, 147, 43, 23, 41, 29, 55, 23, 26, 20, 52, 43, 18, 55, - 18, 18, 32, 35, 18, 32, 12, 26, 57, 143, 91, 98, 204, 153, 181, 185, - 197, 203, 209, 207, 206, 167, 101, 110, 101, 117, 127, 125, 133, 112, 63, 52, - 89, 112, 121, 123, 96, 119, 176, 203, 207, 210, 210, 204, 149, 141, 145, 96, - 127, 103, 110, 114, 114, 121, 121, 127, 143, 171, 201, 221, 225, 213, 123, 84, - 127, 155, 114, 84, 66, 96, 167, 187, 177, 153, 96, 49, 43, 26, 20, 26, - 41, 18, 43, 26, 38, 86, 32, 86, 174, 172, 96, 76, 84, 98, 66, 35, - 38, 38, 35, 23, 41, 46, 38, 23, 35, 103, 143, 143, 143, 137, 155, 171, - 165, 164, 160, 162, 164, 160, 162, 160, 158, 158, 160, 156, 172, 164, 164, 162, - 165, 162, 162, 165, 160, 160, 164, 160, 155, 162, 160, 158, 160, 155, 153, 149, - 149, 147, 149, 149, 143, 141, 141, 135, 137, 143, 153, 160, 171, 172, 179, 190, - 89, 86, 96, 91, 86, 94, 91, 79, 79, 81, 79, 55, 60, 68, 101, 121, - 137, 155, 167, 177, 179, 181, 184, 184, 185, 184, 184, 177, 165, 153, 131, 123, - 91, 74, 74, 66, 79, 71, 89, 91, 96, 101, 91, 101, 96, 125, 43, 26, - 18, 35, 68, 123, 137, 155, 171, 195, 160, 221, 230, 147, 55, 38, 119, 26, - 20, 29, 55, 127, 139, 114, 29, 32, 12, 60, 41, 89, 79, 55, 66, 112, - 129, 26, 127, 145, 89, 71, 29, 18, 46, 15, 18, 35, 26, 23, 46, 43, - 26, 29, 71, 26, 23, 20, 15, 23, 117, 153, 91, 181, 200, 169, 181, 195, - 206, 210, 209, 203, 155, 86, 114, 117, 123, 121, 131, 145, 137, 139, 121, 96, - 91, 52, 114, 135, 151, 156, 172, 184, 195, 201, 189, 167, 155, 137, 112, 105, - 119, 117, 108, 110, 117, 121, 117, 137, 151, 174, 197, 224, 227, 209, 123, 91, - 81, 114, 143, 141, 147, 167, 177, 182, 162, 119, 84, 26, 32, 46, 38, 32, - 43, 35, 41, 35, 38, 84, 43, 89, 171, 187, 110, 84, 84, 66, 49, 35, - 29, 29, 26, 35, 38, 43, 23, 29, 57, 123, 143, 141, 139, 145, 164, 165, - 162, 160, 162, 160, 160, 160, 162, 160, 155, 158, 162, 160, 160, 171, 158, 160, - 156, 160, 160, 162, 158, 155, 155, 155, 160, 153, 153, 153, 149, 156, 153, 151, - 147, 143, 149, 147, 139, 143, 141, 145, 167, 167, 171, 181, 185, 189, 192, 197, - 103, 98, 89, 96, 89, 103, 86, 79, 81, 71, 74, 60, 52, 63, 89, 123, - 139, 153, 169, 174, 182, 181, 184, 189, 184, 185, 184, 182, 165, 156, 137, 117, - 98, 74, 63, 74, 86, 86, 91, 98, 98, 108, 103, 103, 98, 182, 12, 9, - 35, 66, 133, 164, 145, 158, 156, 171, 151, 185, 74, 46, 26, 15, 71, 94, - 94, 123, 147, 84, 68, 86, 15, 18, 20, 98, 29, 103, 79, 74, 74, 96, - 164, 74, 143, 119, 123, 43, 101, 26, 29, 20, 23, 29, 43, 32, 29, 20, - 20, 26, 26, 15, 15, 18, 12, 43, 162, 79, 133, 209, 171, 177, 189, 198, - 210, 210, 204, 147, 86, 105, 123, 114, 133, 129, 127, 137, 137, 137, 139, 112, - 121, 123, 96, 94, 101, 117, 131, 156, 151, 165, 165, 167, 176, 174, 179, 147, - 123, 121, 117, 112, 110, 117, 121, 135, 145, 172, 193, 222, 228, 206, 179, 171, - 169, 133, 141, 139, 123, 155, 162, 137, 114, 79, 43, 23, 79, 66, 38, 29, - 41, 18, 71, 41, 46, 68, 23, 79, 160, 190, 133, 66, 86, 66, 63, 35, - 35, 35, 29, 18, 46, 43, 29, 46, 86, 125, 151, 137, 137, 145, 165, 165, - 164, 164, 162, 158, 158, 162, 162, 156, 158, 156, 158, 160, 165, 189, 158, 156, - 153, 164, 164, 160, 165, 162, 158, 155, 149, 156, 155, 149, 145, 155, 151, 143, - 139, 149, 141, 143, 139, 143, 151, 171, 176, 182, 185, 190, 193, 193, 198, 198, - 91, 96, 96, 98, 86, 98, 79, 74, 76, 68, 63, 68, 49, 55, 91, 119, - 143, 155, 169, 177, 177, 182, 182, 189, 189, 182, 187, 179, 171, 160, 137, 123, - 96, 71, 66, 68, 81, 94, 94, 91, 105, 103, 101, 96, 103, 177, 18, 35, - 105, 137, 165, 156, 133, 127, 131, 177, 167, 55, 55, 63, 35, 32, 41, 127, - 127, 43, 29, 66, 133, 20, 15, 26, 41, 98, 41, 79, 112, 29, 74, 112, - 139, 117, 145, 101, 96, 141, 76, 15, 26, 26, 18, 20, 26, 29, 35, 18, - 49, 29, 23, 18, 15, 15, 18, 133, 127, 81, 187, 182, 179, 187, 192, 203, - 212, 209, 164, 68, 94, 119, 125, 127, 137, 133, 137, 137, 141, 135, 145, 135, - 137, 125, 98, 123, 98, 127, 137, 141, 108, 119, 127, 155, 158, 165, 153, 133, - 117, 108, 114, 125, 112, 119, 119, 133, 143, 165, 184, 219, 230, 210, 174, 162, - 151, 143, 139, 125, 108, 108, 91, 81, 38, 38, 76, 74, 74, 68, 35, 23, - 29, 9, 32, 49, 68, 79, 38, 68, 158, 198, 147, 79, 96, 79, 41, 23, - 29, 41, 29, 38, 43, 41, 32, 57, 108, 135, 143, 139, 145, 151, 172, 171, - 164, 165, 158, 160, 162, 160, 162, 158, 158, 155, 155, 155, 158, 160, 156, 156, - 156, 156, 156, 164, 162, 158, 155, 155, 147, 151, 149, 149, 149, 149, 145, 143, - 149, 141, 143, 145, 158, 162, 176, 182, 187, 193, 197, 197, 198, 198, 197, 197, - 94, 98, 96, 101, 86, 98, 79, 79, 68, 74, 71, 57, 55, 49, 91, 123, - 137, 155, 167, 172, 179, 185, 181, 187, 187, 185, 192, 181, 169, 156, 141, 125, - 98, 76, 63, 68, 79, 84, 94, 103, 103, 108, 110, 96, 98, 143, 96, 121, - 137, 123, 121, 149, 156, 114, 49, 84, 79, 86, 49, 32, 26, 32, 15, 55, - 167, 137, 74, 141, 108, 74, 66, 43, 18, 81, 57, 71, 114, 74, 43, 121, - 103, 129, 123, 121, 151, 127, 15, 35, 35, 23, 35, 35, 20, 35, 23, 23, - 41, 35, 26, 20, 6, 15, 89, 169, 89, 110, 193, 169, 187, 187, 197, 209, - 209, 172, 68, 79, 94, 119, 125, 125, 141, 133, 141, 147, 151, 145, 139, 139, - 147, 139, 123, 131, 114, 123, 133, 125, 112, 147, 145, 153, 151, 149, 141, 151, - 125, 110, 121, 123, 114, 123, 112, 125, 139, 160, 193, 218, 230, 215, 187, 160, - 151, 139, 131, 119, 125, 121, 125, 112, 74, 84, 68, 91, 79, 68, 35, 38, - 23, 9, 35, 32, 74, 79, 20, 74, 160, 197, 151, 91, 79, 52, 29, 41, - 26, 29, 18, 49, 41, 43, 23, 76, 127, 143, 139, 133, 143, 167, 169, 160, - 165, 162, 162, 158, 162, 160, 162, 160, 164, 158, 158, 162, 155, 158, 155, 162, - 160, 158, 158, 155, 160, 155, 155, 156, 145, 156, 149, 147, 147, 149, 139, 143, - 143, 137, 143, 162, 171, 182, 192, 195, 197, 200, 200, 201, 201, 200, 195, 195, - 91, 94, 89, 91, 86, 86, 86, 81, 71, 76, 71, 55, 41, 63, 86, 112, - 141, 151, 171, 176, 177, 179, 184, 187, 184, 189, 184, 184, 167, 160, 141, 125, - 96, 63, 52, 66, 76, 84, 89, 91, 98, 98, 94, 94, 86, 110, 164, 137, - 165, 169, 167, 125, 86, 74, 79, 57, 108, 79, 29, 32, 29, 41, 15, 41, - 55, 164, 153, 139, 137, 137, 63, 41, 18, 35, 84, 57, 105, 112, 66, 89, - 66, 123, 121, 147, 133, 89, 41, 26, 20, 23, 29, 23, 32, 32, 38, 29, - 23, 20, 18, 26, 9, 26, 139, 131, 94, 174, 176, 179, 192, 190, 209, 212, - 182, 55, 76, 101, 103, 119, 133, 133, 145, 145, 151, 153, 151, 147, 153, 145, - 139, 141, 145, 137, 135, 137, 139, 149, 149, 151, 156, 164, 165, 158, 164, 151, - 121, 119, 125, 129, 125, 119, 119, 117, 129, 164, 192, 213, 227, 215, 190, 181, - 165, 156, 143, 135, 129, 129, 117, 119, 86, 94, 96, 94, 86, 81, 38, 46, - 18, 18, 35, 32, 49, 60, 26, 63, 158, 193, 145, 94, 49, 68, 49, 41, - 35, 32, 32, 60, 41, 29, 26, 71, 137, 141, 141, 135, 151, 167, 165, 167, - 162, 156, 164, 160, 162, 155, 155, 156, 162, 158, 156, 156, 156, 153, 158, 153, - 156, 162, 158, 158, 153, 151, 155, 155, 155, 151, 151, 151, 145, 141, 147, 139, - 137, 145, 167, 182, 189, 193, 201, 201, 201, 203, 200, 198, 197, 200, 197, 197, - 96, 91, 94, 79, 84, 79, 79, 79, 68, 74, 66, 43, 32, 38, 79, 127, - 133, 147, 164, 174, 176, 181, 185, 185, 184, 187, 189, 177, 169, 158, 139, 125, - 94, 63, 74, 66, 81, 79, 86, 98, 98, 101, 101, 96, 103, 98, 143, 165, - 172, 137, 114, 110, 60, 52, 60, 110, 89, 41, 20, 18, 52, 49, 49, 57, - 76, 101, 117, 114, 101, 66, 35, 20, 12, 52, 71, 63, 41, 127, 125, 71, - 96, 108, 89, 160, 52, 94, 55, 35, 32, 29, 26, 29, 23, 29, 38, 32, - 35, 32, 23, 12, 15, 103, 165, 89, 121, 197, 190, 187, 193, 206, 213, 200, - 38, 66, 86, 101, 110, 121, 129, 135, 147, 151, 151, 149, 153, 162, 162, 156, - 151, 149, 149, 151, 145, 158, 155, 165, 164, 165, 172, 169, 162, 167, 169, 139, - 121, 123, 133, 127, 112, 119, 119, 119, 133, 158, 184, 209, 225, 219, 195, 190, - 174, 165, 153, 153, 141, 125, 121, 119, 114, 98, 103, 108, 101, 89, 35, 43, - 32, 23, 35, 46, 38, 79, 35, 60, 169, 197, 145, 98, 60, 71, 46, 26, - 35, 23, 35, 46, 32, 20, 23, 103, 135, 143, 137, 131, 147, 164, 165, 162, - 162, 160, 158, 164, 155, 162, 156, 158, 156, 156, 158, 160, 158, 156, 156, 160, - 160, 156, 156, 160, 153, 151, 151, 155, 149, 151, 143, 151, 139, 143, 133, 133, - 149, 174, 187, 198, 200, 201, 203, 203, 203, 201, 200, 198, 198, 200, 198, 198, - 96, 84, 81, 76, 86, 71, 71, 66, 66, 74, 57, 52, 43, 43, 76, 117, - 137, 155, 165, 172, 182, 181, 184, 182, 182, 184, 185, 181, 169, 156, 143, 121, - 94, 81, 55, 63, 81, 84, 86, 105, 103, 101, 98, 108, 101, 98, 112, 129, - 108, 98, 108, 66, 52, 66, 91, 101, 32, 49, 26, 35, 84, 60, 71, 110, - 119, 117, 49, 35, 117, 84, 18, 23, 35, 26, 55, 91, 41, 46, 147, 162, - 143, 98, 55, 71, 125, 149, 26, 29, 23, 20, 35, 26, 32, 29, 32, 55, - 32, 35, 29, 29, 46, 149, 103, 91, 167, 177, 189, 198, 206, 216, 209, 49, - 55, 84, 103, 105, 105, 125, 131, 129, 147, 149, 155, 147, 162, 167, 164, 164, - 172, 172, 167, 165, 164, 162, 171, 176, 171, 177, 165, 174, 164, 177, 158, 133, - 127, 139, 137, 127, 125, 117, 119, 114, 131, 167, 181, 210, 225, 219, 200, 189, - 181, 164, 156, 153, 151, 135, 125, 125, 123, 108, 105, 101, 105, 84, 35, 43, - 35, 35, 32, 52, 43, 52, 23, 49, 165, 193, 158, 96, 52, 81, 29, 32, - 35, 18, 35, 46, 23, 23, 38, 110, 141, 141, 141, 139, 158, 165, 160, 160, - 165, 158, 160, 160, 158, 160, 158, 160, 156, 158, 158, 156, 160, 156, 156, 158, - 156, 155, 155, 156, 155, 158, 155, 151, 153, 151, 149, 145, 141, 141, 139, 153, - 176, 187, 197, 203, 203, 204, 203, 201, 201, 201, 200, 198, 198, 200, 198, 198, - 89, 81, 86, 74, 84, 71, 76, 63, 74, 68, 49, 49, 38, 57, 79, 112, - 133, 155, 160, 169, 177, 182, 181, 184, 187, 182, 187, 179, 171, 164, 139, 123, - 96, 74, 57, 68, 79, 86, 81, 94, 96, 105, 98, 105, 101, 108, 117, 91, - 110, 145, 105, 114, 158, 156, 127, 52, 43, 32, 29, 38, 117, 68, 112, 125, - 123, 94, 55, 117, 117, 32, 15, 20, 32, 46, 98, 139, 86, 52, 71, 84, - 143, 76, 91, 123, 187, 49, 41, 35, 35, 35, 38, 46, 23, 26, 29, 29, - 38, 29, 41, 18, 119, 162, 103, 133, 201, 187, 200, 197, 204, 215, 74, 49, - 71, 86, 101, 114, 110, 117, 133, 131, 143, 145, 147, 155, 158, 172, 158, 160, - 174, 182, 172, 162, 164, 164, 176, 176, 176, 167, 167, 176, 172, 164, 151, 137, - 129, 135, 131, 123, 119, 123, 114, 114, 127, 147, 184, 204, 224, 221, 203, 184, - 185, 174, 165, 151, 149, 137, 133, 133, 119, 114, 114, 119, 108, 89, 49, 38, - 29, 26, 35, 41, 46, 66, 9, 41, 164, 189, 172, 112, 46, 71, 15, 41, - 23, 29, 41, 41, 23, 26, 55, 117, 145, 139, 139, 145, 165, 172, 172, 164, - 164, 164, 158, 155, 156, 160, 160, 158, 156, 156, 158, 156, 155, 153, 155, 156, - 158, 156, 153, 153, 151, 147, 151, 147, 145, 149, 149, 143, 145, 137, 153, 176, - 190, 198, 204, 207, 209, 204, 203, 201, 201, 201, 198, 197, 197, 198, 198, 200, - 74, 84, 81, 74, 71, 74, 74, 76, 74, 66, 43, 35, 41, 49, 76, 108, - 131, 149, 167, 176, 181, 179, 182, 182, 184, 182, 187, 179, 171, 156, 137, 123, - 91, 79, 63, 63, 84, 84, 84, 84, 96, 96, 98, 105, 110, 133, 129, 145, - 160, 177, 177, 164, 155, 108, 68, 49, 55, 66, 57, 52, 133, 63, 119, 123, - 86, 117, 108, 123, 68, 23, 23, 18, 35, 32, 46, 96, 121, 103, 114, 91, - 71, 165, 176, 169, 66, 112, 94, 76, 68, 15, 23, 35, 20, 35, 23, 32, - 32, 29, 23, 63, 162, 103, 98, 169, 172, 197, 195, 206, 216, 135, 29, 52, - 66, 96, 101, 110, 110, 119, 125, 135, 137, 149, 147, 155, 158, 165, 169, 169, - 176, 177, 176, 177, 177, 177, 171, 172, 165, 177, 181, 181, 169, 155, 151, 143, - 131, 133, 139, 129, 125, 119, 110, 108, 119, 153, 177, 204, 224, 227, 207, 187, - 181, 177, 165, 147, 139, 139, 129, 133, 125, 117, 119, 114, 108, 101, 63, 32, - 35, 32, 43, 29, 41, 46, 9, 35, 165, 177, 174, 125, 35, 46, 15, 57, - 23, 23, 43, 32, 26, 26, 89, 133, 145, 141, 137, 153, 167, 164, 167, 164, - 167, 158, 164, 162, 156, 164, 164, 156, 162, 158, 160, 160, 160, 156, 151, 155, - 158, 153, 156, 155, 151, 151, 151, 149, 147, 145, 143, 143, 135, 153, 171, 192, - 200, 203, 207, 206, 206, 204, 204, 200, 198, 201, 200, 198, 200, 200, 198, 201, - 79, 81, 101, 76, 74, 74, 74, 71, 60, 55, 55, 41, 35, 52, 94, 119, - 137, 153, 162, 171, 177, 181, 182, 182, 185, 187, 182, 181, 165, 156, 135, 127, - 98, 68, 60, 71, 84, 74, 86, 89, 86, 105, 151, 169, 164, 160, 155, 156, - 151, 147, 55, 41, 68, 89, 43, 46, 52, 57, 60, 79, 110, 68, 129, 76, - 101, 137, 129, 86, 32, 23, 20, 20, 18, 23, 29, 57, 79, 66, 125, 135, - 133, 114, 57, 38, 38, 143, 137, 98, 96, 29, 38, 38, 52, 32, 35, 29, - 35, 23, 20, 119, 153, 96, 117, 201, 187, 197, 203, 218, 184, 26, 26, 57, - 74, 103, 105, 110, 117, 112, 129, 135, 139, 143, 149, 155, 162, 165, 176, 174, - 174, 184, 176, 169, 179, 179, 184, 179, 179, 176, 179, 179, 172, 164, 151, 141, - 145, 139, 139, 135, 123, 121, 112, 121, 123, 139, 169, 204, 222, 224, 209, 190, - 177, 171, 169, 160, 147, 135, 129, 119, 121, 114, 119, 114, 110, 98, 49, 35, - 32, 32, 66, 43, 46, 41, 35, 23, 162, 185, 164, 149, 29, 49, 29, 46, - 20, 26, 46, 23, 26, 32, 105, 145, 139, 143, 135, 160, 167, 167, 165, 164, - 158, 160, 165, 158, 158, 156, 158, 158, 155, 156, 164, 160, 158, 151, 153, 147, - 153, 155, 158, 153, 149, 153, 143, 147, 147, 145, 153, 141, 147, 174, 189, 198, - 201, 206, 206, 204, 203, 201, 203, 200, 201, 200, 201, 200, 200, 200, 201, 203, - 81, 68, 79, 81, 71, 57, 66, 63, 63, 55, 60, 41, 41, 52, 81, 117, - 143, 151, 167, 172, 177, 176, 179, 181, 184, 189, 189, 184, 171, 160, 147, 123, - 96, 71, 63, 71, 68, 76, 91, 114, 141, 137, 123, 108, 127, 133, 129, 112, - 71, 41, 35, 91, 74, 55, 60, 49, 71, 35, 66, 103, 63, 94, 127, 119, - 149, 158, 46, 43, 41, 41, 20, 38, 29, 26, 35, 35, 66, 86, 43, 60, - 117, 29, 20, 38, 57, 133, 147, 121, 57, 43, 29, 38, 32, 32, 32, 35, - 20, 23, 49, 153, 112, 117, 147, 176, 200, 203, 213, 213, 29, 12, 32, 74, - 86, 103, 117, 112, 119, 119, 117, 127, 143, 141, 147, 155, 155, 165, 167, 176, - 172, 177, 177, 177, 182, 184, 176, 177, 181, 181, 181, 171, 167, 160, 155, 153, - 143, 143, 143, 135, 117, 125, 119, 119, 114, 137, 167, 207, 218, 224, 212, 187, - 174, 165, 165, 164, 151, 141, 131, 127, 123, 121, 117, 112, 117, 96, 52, 49, - 29, 23, 46, 38, 52, 41, 26, 29, 156, 177, 153, 164, 29, 29, 20, 26, - 18, 32, 29, 23, 26, 57, 119, 139, 147, 139, 145, 158, 169, 165, 165, 167, - 164, 164, 164, 162, 160, 164, 158, 158, 162, 158, 155, 158, 153, 164, 153, 153, - 153, 156, 149, 151, 156, 155, 145, 147, 143, 143, 139, 143, 167, 189, 197, 203, - 203, 204, 206, 203, 204, 204, 203, 203, 203, 200, 200, 201, 201, 204, 204, 209, - 66, 79, 66, 74, 60, 57, 63, 71, 63, 57, 57, 38, 49, 41, 79, 117, - 137, 149, 167, 174, 179, 179, 182, 181, 187, 185, 187, 179, 167, 156, 141, 119, - 101, 79, 52, 71, 71, 84, 86, 98, 103, 103, 110, 110, 129, 121, 101, 105, - 108, 91, 79, 89, 94, 43, 55, 29, 46, 68, 119, 49, 71, 119, 133, 156, - 76, 55, 86, 32, 52, 32, 38, 32, 32, 29, 32, 49, 26, 60, 94, 26, - 96, 23, 23, 15, 94, 108, 149, 108, 103, 41, 23, 23, 35, 18, 38, 38, - 12, 29, 129, 155, 101, 117, 210, 189, 195, 198, 221, 60, 20, 41, 32, 76, - 94, 108, 110, 114, 110, 110, 123, 131, 141, 141, 149, 147, 155, 160, 167, 176, - 176, 177, 181, 184, 182, 179, 174, 176, 181, 176, 172, 177, 167, 162, 153, 141, - 151, 141, 143, 133, 131, 129, 117, 119, 119, 141, 162, 200, 224, 228, 215, 187, - 172, 164, 164, 155, 155, 141, 137, 125, 125, 123, 123, 119, 110, 84, 38, 35, - 26, 41, 35, 38, 79, 35, 20, 18, 147, 177, 129, 169, 55, 38, 9, 20, - 49, 29, 35, 20, 20, 71, 125, 149, 141, 137, 151, 169, 169, 165, 164, 162, - 164, 164, 164, 156, 155, 158, 162, 156, 155, 149, 160, 155, 158, 155, 155, 153, - 151, 149, 155, 147, 151, 151, 147, 141, 141, 139, 137, 153, 182, 195, 201, 203, - 203, 204, 203, 203, 204, 201, 203, 203, 203, 203, 201, 203, 204, 207, 209, 210, - 74, 68, 71, 68, 63, 60, 63, 71, 57, 63, 57, 68, 35, 52, 76, 117, - 131, 151, 162, 172, 177, 182, 182, 184, 184, 184, 182, 177, 171, 151, 143, 133, - 94, 76, 66, 79, 79, 81, 91, 108, 94, 103, 98, 105, 129, 103, 89, 60, - 76, 68, 105, 71, 86, 74, 29, 46, 81, 121, 94, 32, 60, 156, 119, 103, - 60, 60, 117, 43, 35, 18, 20, 49, 38, 35, 35, 49, 29, 55, 38, 46, - 81, 38, 12, 6, 84, 103, 137, 133, 139, 38, 29, 23, 23, 18, 35, 26, - 6, 43, 153, 105, 119, 165, 198, 201, 197, 213, 162, 18, 29, 26, 55, 79, - 91, 103, 103, 114, 121, 108, 119, 123, 129, 141, 145, 141, 149, 158, 167, 169, - 172, 172, 179, 182, 185, 187, 176, 176, 172, 169, 169, 169, 162, 153, 156, 143, - 147, 145, 135, 133, 123, 127, 119, 125, 127, 137, 164, 197, 221, 227, 219, 187, - 172, 165, 165, 158, 149, 149, 133, 127, 127, 119, 121, 121, 110, 84, 41, 41, - 26, 52, 32, 41, 91, 29, 12, 20, 141, 181, 125, 172, 79, 29, 23, 18, - 74, 38, 41, 23, 20, 86, 137, 143, 143, 143, 158, 171, 169, 165, 164, 158, - 156, 158, 158, 160, 158, 156, 153, 158, 156, 160, 156, 155, 153, 156, 156, 155, - 153, 149, 153, 151, 151, 153, 143, 145, 135, 131, 139, 174, 192, 198, 206, 204, - 201, 201, 201, 203, 203, 203, 203, 206, 206, 201, 206, 206, 212, 210, 212, 212, - 71, 76, 60, 55, 55, 57, 60, 57, 57, 46, 46, 43, 32, 52, 74, 121, - 137, 151, 164, 174, 174, 182, 181, 182, 182, 179, 181, 174, 165, 158, 139, 127, - 98, 63, 55, 66, 79, 76, 103, 98, 94, 101, 103, 103, 108, 91, 55, 123, - 105, 143, 96, 60, 129, 89, 60, 91, 127, 81, 29, 38, 81, 112, 139, 94, - 112, 55, 46, 49, 23, 26, 52, 41, 38, 35, 41, 41, 29, 76, 32, 18, - 55, 41, 15, 32, 81, 112, 105, 158, 155, 84, 20, 9, 15, 18, 12, 9, - 18, 121, 145, 112, 112, 204, 195, 204, 207, 206, 43, 23, 46, 38, 41, 76, - 101, 108, 110, 108, 121, 121, 121, 123, 133, 141, 135, 139, 145, 155, 160, 160, - 165, 177, 179, 185, 179, 184, 177, 176, 172, 174, 171, 169, 165, 155, 145, 137, - 135, 143, 137, 133, 125, 117, 117, 117, 119, 141, 160, 181, 218, 224, 219, 197, - 174, 171, 162, 164, 153, 141, 139, 131, 121, 114, 114, 121, 110, 71, 35, 38, - 26, 38, 29, 38, 94, 29, 15, 15, 145, 179, 147, 169, 114, 23, 18, 15, - 57, 43, 38, 20, 26, 108, 141, 141, 149, 151, 158, 176, 169, 167, 164, 160, - 164, 162, 158, 158, 156, 158, 156, 156, 151, 160, 155, 153, 156, 156, 153, 155, - 151, 149, 149, 151, 149, 145, 139, 139, 137, 131, 160, 185, 198, 201, 204, 204, - 201, 204, 200, 204, 204, 204, 203, 204, 206, 209, 210, 210, 212, 213, 213, 213, - 60, 66, 66, 57, 60, 66, 63, 55, 55, 55, 55, 35, 38, 52, 68, 110, - 141, 149, 156, 171, 174, 181, 179, 177, 177, 185, 179, 177, 174, 158, 141, 127, - 91, 66, 60, 68, 91, 91, 81, 91, 91, 101, 101, 103, 105, 68, 133, 160, - 167, 91, 57, 108, 117, 49, 91, 145, 71, 52, 55, 60, 43, 74, 160, 91, - 131, 38, 52, 43, 38, 35, 55, 26, 26, 38, 26, 29, 32, 29, 94, 38, - 15, 57, 26, 18, 71, 114, 91, 76, 171, 160, 57, 23, 23, 23, 12, 18, - 32, 147, 96, 112, 147, 197, 203, 210, 219, 66, 18, 23, 52, 29, 46, 63, - 94, 98, 114, 112, 114, 123, 121, 125, 129, 137, 141, 145, 149, 147, 155, 158, - 165, 174, 174, 179, 177, 179, 176, 172, 172, 174, 167, 165, 160, 155, 143, 137, - 129, 129, 127, 127, 123, 121, 114, 121, 121, 139, 155, 179, 210, 227, 222, 197, - 171, 167, 160, 158, 149, 145, 139, 133, 123, 127, 114, 112, 98, 60, 46, 23, - 35, 20, 26, 43, 96, 26, 12, 6, 125, 184, 153, 160, 153, 15, 20, 15, - 55, 46, 35, 23, 55, 123, 149, 143, 137, 147, 182, 189, 162, 164, 165, 160, - 165, 158, 164, 158, 160, 156, 156, 156, 155, 158, 155, 155, 153, 153, 151, 147, - 149, 153, 155, 153, 151, 145, 141, 133, 139, 153, 177, 192, 200, 204, 206, 203, - 203, 201, 201, 201, 201, 203, 206, 207, 210, 212, 213, 213, 212, 212, 212, 212, - 57, 66, 76, 66, 66, 68, 68, 57, 60, 63, 41, 43, 38, 35, 76, 112, - 139, 156, 160, 177, 177, 179, 179, 174, 177, 177, 184, 171, 165, 147, 143, 125, - 103, 60, 49, 74, 79, 133, 94, 91, 98, 91, 89, 110, 139, 165, 156, 84, - 29, 66, 114, 133, 74, 86, 149, 49, 41, 49, 63, 86, 52, 76, 156, 119, - 149, 60, 41, 46, 52, 38, 66, 38, 38, 23, 23, 26, 20, 35, 74, 35, - 29, 46, 26, 23, 91, 123, 137, 63, 143, 153, 160, 35, 32, 23, 23, 15, - 96, 156, 94, 119, 201, 204, 209, 218, 184, 15, 18, 38, 63, 38, 55, 68, - 89, 96, 103, 119, 121, 114, 119, 127, 133, 131, 147, 147, 147, 153, 153, 153, - 172, 176, 172, 177, 176, 174, 177, 167, 174, 167, 167, 162, 156, 153, 139, 131, - 131, 125, 129, 127, 117, 121, 114, 110, 129, 135, 145, 171, 206, 224, 222, 206, - 164, 164, 160, 155, 147, 145, 127, 133, 125, 125, 123, 110, 98, 55, 32, 32, - 41, 35, 38, 55, 94, 20, 12, 9, 112, 176, 162, 158, 149, 35, 18, 20, - 46, 49, 26, 18, 89, 133, 147, 143, 139, 164, 167, 172, 167, 165, 165, 162, - 156, 162, 160, 160, 156, 156, 158, 155, 158, 153, 155, 153, 155, 153, 149, 158, - 153, 149, 151, 147, 149, 145, 141, 139, 141, 162, 185, 198, 203, 203, 203, 197, - 203, 198, 203, 203, 203, 206, 207, 210, 212, 218, 216, 215, 215, 210, 212, 209, - 79, 68, 57, 63, 63, 76, 60, 66, 57, 46, 38, 29, 23, 49, 84, 112, - 137, 147, 160, 169, 172, 176, 177, 174, 179, 184, 185, 179, 164, 153, 139, 119, - 103, 63, 63, 57, 86, 139, 81, 84, 94, 108, 169, 177, 153, 110, 23, 41, - 38, 108, 165, 119, 81, 137, 35, 38, 26, 127, 71, 86, 43, 169, 143, 141, - 98, 117, 35, 35, 49, 55, 60, 23, 15, 18, 23, 23, 18, 26, 76, 68, - 57, 41, 38, 63, 86, 169, 155, 86, 35, 114, 184, 101, 9, 20, 9, 18, - 147, 125, 103, 149, 213, 212, 213, 213, 35, 20, 18, 18, 79, 26, 32, 71, - 91, 101, 103, 119, 121, 117, 127, 123, 125, 129, 143, 143, 149, 149, 155, 162, - 156, 160, 162, 181, 169, 172, 174, 172, 174, 165, 158, 167, 158, 153, 141, 125, - 127, 125, 127, 125, 119, 112, 108, 112, 121, 121, 153, 174, 206, 224, 225, 210, - 167, 167, 156, 156, 141, 143, 133, 125, 125, 119, 119, 114, 91, 49, 29, 18, - 41, 38, 41, 49, 81, 26, 15, 23, 98, 167, 158, 158, 145, 68, 23, 29, - 41, 41, 26, 29, 103, 139, 141, 141, 143, 164, 172, 172, 169, 164, 165, 162, - 167, 158, 160, 160, 164, 158, 156, 156, 155, 153, 155, 155, 151, 153, 155, 151, - 153, 149, 149, 143, 151, 139, 137, 137, 153, 181, 198, 203, 207, 204, 203, 200, - 200, 203, 201, 203, 204, 207, 212, 212, 216, 218, 216, 215, 215, 209, 209, 207, - 74, 63, 66, 71, 74, 71, 68, 66, 49, 57, 41, 29, 26, 41, 71, 114, - 135, 145, 160, 171, 176, 177, 176, 176, 177, 177, 176, 174, 167, 156, 139, 123, - 89, 57, 57, 52, 71, 155, 103, 89, 147, 171, 127, 112, 143, 79, 23, 35, - 91, 133, 137, 76, 131, 46, 46, 49, 46, 123, 76, 112, 76, 162, 105, 156, - 55, 165, 49, 57, 57, 38, 46, 26, 15, 20, 12, 9, 41, 66, 108, 76, - 66, 26, 74, 60, 135, 172, 185, 141, 20, 71, 145, 84, 9, 6, 6, 89, - 169, 110, 110, 172, 207, 210, 216, 68, 15, 12, 18, 23, 86, 43, 35, 68, - 94, 94, 108, 117, 125, 121, 117, 121, 125, 133, 137, 141, 153, 155, 149, 153, - 164, 160, 158, 169, 164, 171, 167, 171, 167, 165, 162, 160, 153, 149, 137, 127, - 125, 123, 127, 121, 114, 112, 108, 114, 114, 131, 151, 172, 195, 216, 230, 221, - 160, 164, 155, 153, 145, 141, 135, 127, 121, 127, 121, 108, 81, 57, 23, 29, - 38, 38, 52, 74, 81, 18, 18, 15, 79, 167, 167, 151, 143, 79, 6, 18, - 46, 38, 15, 41, 114, 147, 137, 145, 149, 162, 167, 169, 164, 164, 162, 160, - 158, 160, 160, 158, 158, 165, 156, 160, 153, 158, 158, 153, 155, 151, 149, 147, - 145, 147, 145, 145, 145, 135, 135, 141, 167, 192, 200, 204, 206, 204, 201, 200, - 203, 201, 203, 206, 209, 212, 215, 215, 216, 216, 218, 215, 215, 209, 209, 209, - 68, 68, 66, 66, 60, 57, 63, 60, 60, 43, 38, 38, 20, 32, 71, 121, - 135, 153, 162, 172, 171, 181, 176, 176, 171, 179, 184, 172, 164, 158, 135, 121, - 86, 68, 46, 55, 55, 101, 162, 133, 139, 103, 105, 135, 119, 76, 41, 71, - 156, 114, 60, 117, 79, 112, 57, 41, 114, 71, 133, 71, 91, 131, 103, 165, - 84, 156, 68, 43, 32, 41, 43, 35, 15, 20, 18, 46, 35, 46, 117, 108, - 41, 41, 60, 123, 119, 189, 192, 160, 23, 26, 121, 12, 12, 9, 15, 139, - 121, 121, 117, 206, 213, 215, 153, 20, 18, 6, 20, 20, 89, 32, 49, 57, - 84, 94, 103, 123, 112, 117, 127, 123, 129, 129, 129, 149, 139, 147, 149, 160, - 160, 158, 158, 162, 162, 169, 164, 169, 165, 169, 167, 158, 153, 141, 131, 133, - 123, 121, 125, 121, 112, 108, 108, 112, 112, 129, 145, 162, 187, 216, 233, 225, - 172, 162, 153, 149, 145, 141, 133, 135, 119, 121, 117, 98, 76, 26, 18, 23, - 32, 43, 57, 68, 57, 29, 12, 12, 60, 158, 172, 133, 147, 86, 9, 29, - 26, 29, 20, 76, 129, 149, 143, 139, 158, 169, 165, 164, 165, 165, 153, 160, - 164, 164, 164, 160, 160, 162, 160, 153, 156, 153, 158, 156, 153, 155, 151, 145, - 145, 145, 147, 149, 139, 141, 139, 153, 184, 197, 203, 204, 204, 203, 201, 203, - 200, 203, 203, 209, 213, 215, 216, 216, 216, 216, 216, 216, 215, 212, 212, 212, - 68, 79, 79, 63, 68, 55, 63, 66, 55, 55, 35, 29, 32, 20, 66, 112, - 131, 151, 158, 169, 176, 177, 174, 181, 181, 181, 181, 177, 167, 158, 141, 121, - 96, 66, 57, 49, 60, 81, 105, 114, 117, 123, 108, 125, 129, 96, 29, 32, - 123, 105, 71, 79, 79, 68, 41, 86, 86, 96, 131, 79, 94, 101, 121, 176, - 89, 71, 81, 29, 26, 18, 32, 32, 26, 29, 12, 38, 43, 68, 76, 91, - 32, 108, 135, 110, 74, 71, 176, 156, 29, 15, 43, 26, 9, 6, 60, 164, - 108, 110, 176, 213, 213, 197, 23, 26, 20, 12, 12, 23, 96, 41, 60, 66, - 86, 94, 108, 110, 117, 119, 117, 125, 125, 131, 149, 139, 137, 149, 149, 149, - 151, 156, 153, 151, 156, 162, 167, 162, 156, 160, 158, 156, 145, 141, 129, 125, - 123, 117, 123, 127, 112, 110, 119, 103, 121, 131, 145, 162, 179, 215, 233, 225, - 192, 156, 155, 149, 147, 155, 133, 137, 129, 123, 114, 91, 57, 26, 26, 23, - 35, 49, 49, 66, 71, 32, 9, 9, 63, 158, 177, 131, 151, 112, 18, 26, - 18, 18, 46, 96, 147, 141, 143, 141, 165, 171, 167, 165, 162, 164, 155, 164, - 153, 160, 158, 160, 165, 156, 156, 158, 158, 156, 160, 156, 151, 149, 147, 151, - 153, 145, 153, 143, 135, 139, 149, 176, 192, 201, 206, 204, 201, 201, 200, 203, - 201, 204, 207, 210, 216, 216, 218, 215, 215, 213, 216, 216, 215, 215, 213, 213, - 74, 71, 71, 60, 63, 68, 68, 71, 49, 46, 38, 26, 26, 26, 74, 108, - 131, 149, 164, 169, 177, 177, 182, 177, 176, 181, 182, 176, 165, 160, 143, 119, - 89, 74, 57, 57, 71, 79, 81, 101, 129, 103, 135, 147, 123, 84, 41, 60, - 81, 74, 103, 98, 105, 43, 98, 84, 52, 135, 66, 74, 98, 81, 114, 165, - 110, 38, 139, 18, 29, 35, 23, 23, 26, 49, 35, 26, 35, 108, 49, 71, - 71, 137, 110, 94, 49, 60, 98, 49, 26, 32, 43, 6, 15, 74, 110, 117, - 129, 125, 207, 210, 167, 55, 9, 18, 23, 18, 12, 26, 110, 41, 49, 66, - 68, 96, 105, 108, 117, 119, 119, 125, 133, 117, 129, 131, 141, 145, 149, 147, - 149, 143, 151, 156, 156, 156, 164, 156, 165, 155, 156, 149, 145, 139, 133, 114, - 101, 114, 127, 133, 123, 114, 112, 114, 117, 127, 141, 160, 177, 209, 233, 228, - 200, 153, 151, 151, 151, 141, 129, 129, 119, 119, 125, 101, 32, 20, 26, 23, - 20, 43, 52, 76, 52, 57, 15, 9, 55, 141, 171, 141, 158, 137, 23, 32, - 20, 15, 55, 105, 145, 151, 141, 145, 162, 165, 162, 164, 162, 158, 162, 160, - 158, 156, 153, 160, 164, 160, 156, 156, 155, 155, 158, 153, 155, 151, 153, 151, - 153, 149, 143, 135, 137, 135, 160, 181, 198, 206, 204, 203, 204, 201, 203, 203, - 204, 209, 212, 216, 216, 216, 216, 213, 215, 215, 215, 216, 215, 216, 215, 215, - 74, 63, 66, 63, 71, 71, 66, 55, 49, 38, 32, 26, 15, 23, 66, 112, - 125, 149, 162, 169, 177, 176, 172, 177, 181, 179, 184, 176, 167, 158, 141, 117, - 98, 63, 49, 55, 71, 94, 121, 125, 101, 105, 103, 108, 105, 35, 55, 84, - 79, 66, 137, 98, 55, 94, 60, 52, 68, 160, 35, 49, 127, 81, 105, 155, - 141, 46, 151, 26, 18, 35, 23, 76, 52, 20, 12, 18, 43, 89, 41, 114, - 68, 179, 167, 112, 94, 110, 91, 32, 15, 18, 20, 6, 74, 137, 121, 101, - 108, 151, 185, 147, 165, 86, 26, 15, 12, 20, 9, 29, 114, 49, 55, 63, - 84, 91, 103, 105, 117, 110, 112, 121, 123, 131, 127, 137, 141, 137, 153, 147, - 149, 151, 147, 155, 156, 162, 153, 158, 162, 160, 153, 149, 143, 135, 119, 101, - 101, 119, 125, 129, 131, 133, 123, 112, 117, 127, 133, 158, 177, 209, 233, 227, - 200, 147, 143, 147, 149, 139, 131, 129, 127, 121, 110, 89, 29, 29, 23, 49, - 26, 57, 60, 66, 60, 32, 9, 12, 23, 135, 179, 165, 165, 143, 18, 23, - 15, 26, 76, 121, 151, 155, 143, 145, 164, 165, 164, 162, 162, 160, 156, 155, - 160, 162, 155, 155, 160, 153, 158, 162, 160, 160, 158, 155, 153, 151, 162, 149, - 149, 145, 147, 139, 143, 141, 167, 195, 201, 207, 204, 203, 203, 204, 203, 204, - 206, 210, 213, 215, 216, 215, 215, 212, 213, 216, 212, 213, 215, 215, 215, 215, - 79, 76, 68, 68, 68, 71, 63, 57, 49, 43, 32, 20, 20, 18, 63, 114, - 129, 149, 162, 169, 174, 174, 179, 179, 179, 181, 179, 179, 172, 158, 145, 117, - 86, 63, 41, 68, 103, 139, 129, 98, 98, 98, 108, 110, 101, 55, 49, 91, - 60, 127, 141, 52, 96, 68, 81, 29, 133, 98, 32, 43, 123, 101, 68, 165, - 156, 32, 89, 63, 35, 49, 74, 41, 20, 43, 15, 12, 38, 76, 176, 167, - 46, 52, 81, 112, 49, 26, 23, 12, 15, 32, 12, 29, 185, 171, 160, 156, - 133, 121, 172, 198, 153, 26, 12, 20, 35, 12, 18, 23, 117, 86, 52, 55, - 74, 98, 105, 114, 105, 119, 114, 125, 121, 125, 131, 139, 137, 139, 143, 147, - 147, 145, 162, 156, 155, 156, 158, 162, 156, 155, 158, 147, 141, 135, 117, 86, - 103, 125, 135, 135, 131, 135, 137, 123, 108, 114, 133, 153, 182, 203, 225, 225, - 197, 139, 149, 141, 139, 129, 129, 121, 123, 119, 112, 49, 15, 23, 18, 26, - 32, 49, 52, 60, 63, 26, 20, 9, 12, 123, 181, 165, 149, 143, 52, 32, - 15, 15, 89, 129, 149, 149, 145, 151, 167, 167, 164, 165, 165, 162, 158, 160, - 162, 155, 155, 156, 158, 160, 155, 155, 155, 155, 151, 158, 153, 155, 155, 153, - 149, 143, 139, 135, 137, 151, 174, 198, 203, 206, 206, 204, 203, 204, 200, 204, - 209, 213, 215, 215, 216, 213, 213, 213, 216, 213, 216, 216, 216, 216, 216, 213, - 84, 76, 71, 63, 68, 60, 66, 57, 49, 49, 49, 20, 18, 35, 74, 110, - 127, 149, 164, 171, 174, 172, 179, 174, 181, 181, 185, 177, 179, 156, 139, 121, - 105, 79, 108, 129, 129, 96, 81, 91, 91, 108, 114, 112, 81, 71, 55, 86, - 94, 108, 117, 81, 66, 38, 46, 57, 160, 74, 38, 32, 117, 105, 55, 143, - 176, 43, 60, 153, 35, 46, 43, 35, 35, 74, 20, 12, 26, 68, 43, 32, - 20, 20, 57, 139, 119, 26, 15, 20, 32, 9, 3, 103, 165, 179, 184, 179, - 181, 187, 197, 145, 68, 23, 18, 23, 20, 38, 12, 35, 108, 79, 32, 68, - 79, 98, 105, 114, 117, 114, 117, 119, 123, 119, 139, 125, 135, 135, 147, 145, - 141, 145, 147, 151, 153, 151, 155, 156, 156, 155, 153, 147, 143, 135, 119, 91, - 112, 125, 127, 129, 121, 135, 123, 123, 105, 101, 123, 145, 176, 200, 209, 215, - 174, 145, 143, 143, 139, 141, 131, 121, 121, 114, 79, 32, 23, 29, 23, 46, - 32, 49, 66, 46, 68, 18, 26, 15, 12, 105, 172, 174, 149, 127, 71, 29, - 23, 15, 89, 149, 149, 149, 149, 164, 165, 165, 164, 162, 160, 162, 164, 160, - 162, 158, 158, 155, 164, 158, 160, 156, 155, 158, 155, 158, 155, 156, 151, 149, - 147, 145, 145, 135, 137, 169, 185, 200, 207, 203, 203, 203, 201, 201, 204, 209, - 213, 213, 213, 215, 216, 213, 215, 215, 213, 213, 215, 218, 216, 218, 216, 215, - 79, 86, 68, 74, 71, 66, 66, 71, 49, 49, 38, 32, 29, 38, 84, 110, - 139, 149, 162, 169, 172, 176, 174, 176, 179, 181, 184, 177, 169, 155, 135, 123, - 98, 98, 68, 63, 79, 81, 84, 94, 89, 101, 112, 151, 89, 60, 46, 81, - 94, 119, 125, 74, 60, 9, 46, 162, 117, 76, 79, 23, 94, 117, 81, 125, - 197, 91, 46, 181, 43, 38, 26, 71, 43, 96, 20, 18, 46, 46, 71, 35, - 26, 81, 151, 60, 15, 18, 18, 29, 18, 6, 6, 179, 182, 182, 187, 192, - 192, 187, 174, 46, 15, 6, 9, 23, 32, 15, 18, 29, 114, 86, 66, 74, - 86, 94, 105, 108, 112, 112, 117, 112, 121, 129, 131, 129, 137, 137, 143, 141, - 151, 147, 155, 151, 153, 156, 156, 156, 156, 155, 158, 155, 141, 135, 129, 105, - 127, 125, 133, 68, 29, 52, 89, 101, 119, 110, 117, 121, 158, 190, 204, 197, - 156, 149, 141, 143, 135, 131, 125, 119, 123, 110, 41, 20, 18, 38, 29, 49, - 35, 55, 74, 35, 71, 26, 35, 12, 15, 86, 160, 174, 147, 149, 96, 23, - 23, 26, 110, 151, 153, 147, 149, 164, 169, 167, 162, 162, 165, 164, 155, 153, - 158, 158, 156, 156, 158, 158, 156, 147, 155, 156, 153, 151, 153, 153, 155, 153, - 147, 143, 141, 135, 143, 172, 192, 201, 206, 206, 204, 204, 203, 204, 209, 213, - 213, 213, 213, 215, 213, 213, 215, 215, 215, 218, 218, 218, 218, 216, 215, 215, - 71, 71, 76, 74, 60, 66, 68, 57, 52, 52, 52, 38, 38, 49, 94, 123, - 137, 153, 162, 167, 174, 174, 176, 177, 177, 184, 185, 174, 171, 160, 143, 121, - 105, 81, 57, 63, 76, 84, 81, 94, 96, 103, 108, 105, 41, 81, 38, 94, - 79, 149, 119, 71, 52, 9, 49, 176, 79, 35, 117, 26, 71, 117, 101, 123, - 176, 127, 41, 167, 46, 26, 18, 60, 89, 63, 29, 15, 20, 15, 29, 68, - 68, 101, 177, 46, 29, 26, 26, 38, 12, 6, 35, 177, 179, 189, 190, 200, - 200, 185, 38, 9, 20, 15, 18, 23, 32, 29, 12, 26, 114, 103, 57, 79, - 86, 94, 105, 112, 108, 114, 117, 119, 119, 125, 125, 133, 141, 143, 143, 149, - 145, 141, 147, 143, 153, 156, 155, 153, 155, 155, 158, 147, 149, 145, 131, 112, - 110, 121, 123, 74, 38, 66, 79, 68, 74, 103, 105, 114, 145, 184, 203, 174, - 169, 145, 147, 145, 129, 135, 129, 121, 119, 86, 23, 32, 23, 26, 32, 35, - 35, 55, 63, 57, 74, 32, 29, 35, 9, 46, 153, 181, 127, 160, 94, 12, - 49, 52, 127, 153, 149, 145, 155, 164, 165, 164, 160, 162, 164, 160, 155, 158, - 158, 155, 158, 160, 156, 156, 156, 153, 155, 153, 153, 147, 153, 153, 155, 151, - 145, 145, 141, 143, 153, 174, 197, 203, 207, 204, 206, 203, 206, 206, 212, 213, - 213, 215, 213, 215, 213, 215, 215, 218, 218, 218, 218, 219, 218, 218, 216, 213, - 68, 76, 68, 63, 66, 66, 60, 57, 46, 66, 55, 43, 46, 68, 103, 125, - 147, 155, 169, 171, 171, 177, 172, 176, 177, 177, 181, 179, 172, 164, 137, 125, - 96, 74, 57, 71, 68, 81, 86, 94, 103, 103, 110, 103, 63, 91, 52, 91, - 79, 71, 86, 79, 15, 43, 156, 121, 49, 68, 121, 29, 74, 129, 112, 129, - 131, 167, 49, 158, 94, 12, 12, 26, 26, 86, 127, 32, 26, 23, 9, 20, - 89, 141, 79, 23, 35, 52, 38, 18, 29, 43, 112, 141, 158, 179, 184, 201, - 200, 139, 15, 12, 20, 23, 41, 20, 26, 15, 23, 29, 114, 96, 63, 91, - 89, 108, 98, 105, 112, 114, 119, 119, 125, 127, 123, 135, 137, 131, 135, 143, - 147, 145, 155, 151, 155, 151, 151, 156, 160, 155, 156, 155, 149, 147, 139, 121, - 101, 112, 117, 119, 112, 121, 119, 110, 98, 81, 112, 110, 125, 179, 184, 176, - 165, 151, 145, 135, 137, 141, 119, 129, 108, 49, 29, 35, 46, 26, 23, 32, - 46, 57, 79, 41, 68, 23, 23, 52, 18, 32, 155, 177, 151, 162, 114, 32, - 20, 81, 139, 153, 155, 151, 151, 167, 165, 162, 164, 162, 162, 156, 156, 158, - 158, 155, 156, 156, 156, 155, 156, 156, 156, 153, 155, 149, 147, 147, 143, 149, - 149, 141, 137, 139, 160, 182, 201, 203, 204, 206, 204, 200, 207, 207, 215, 215, - 215, 215, 216, 216, 213, 215, 218, 218, 218, 218, 219, 216, 218, 215, 213, 213, - 60, 68, 57, 71, 66, 55, 57, 63, 52, 43, 49, 49, 63, 74, 103, 129, - 141, 153, 165, 169, 172, 171, 176, 176, 176, 179, 184, 182, 172, 156, 141, 127, - 101, 71, 57, 66, 71, 76, 89, 91, 86, 119, 108, 91, 101, 35, 49, 91, - 84, 76, 63, 18, 23, 119, 123, 74, 96, 91, 79, 52, 66, 145, 66, 108, - 121, 185, 86, 139, 135, 9, 26, 41, 12, 108, 169, 68, 38, 12, 20, 18, - 123, 114, 26, 15, 71, 55, 101, 96, 112, 112, 105, 125, 133, 123, 162, 193, - 108, 20, 15, 15, 55, 79, 71, 26, 23, 15, 52, 23, 114, 101, 71, 79, - 91, 98, 105, 105, 114, 114, 117, 127, 125, 123, 125, 131, 133, 141, 139, 149, - 143, 143, 145, 141, 155, 141, 149, 155, 155, 162, 155, 156, 147, 147, 143, 135, - 129, 119, 108, 114, 117, 123, 125, 112, 105, 110, 129, 156, 184, 197, 185, 171, - 162, 156, 145, 137, 133, 129, 131, 121, 101, 26, 32, 32, 41, 35, 32, 32, - 38, 71, 66, 38, 79, 32, 20, 26, 15, 20, 151, 184, 149, 153, 101, 46, - 20, 112, 145, 153, 153, 147, 162, 165, 167, 164, 160, 164, 160, 158, 158, 158, - 155, 155, 160, 158, 158, 160, 160, 151, 155, 153, 155, 151, 149, 153, 147, 153, - 147, 145, 137, 147, 165, 192, 201, 204, 204, 203, 204, 204, 210, 210, 216, 216, - 213, 213, 216, 215, 213, 218, 218, 219, 216, 216, 219, 216, 215, 215, 216, 215, - 57, 71, 74, 68, 57, 74, 74, 57, 49, 43, 60, 63, 76, 79, 121, 135, - 149, 155, 165, 171, 171, 172, 174, 174, 181, 179, 184, 177, 172, 158, 141, 127, - 103, 68, 60, 63, 74, 84, 86, 86, 94, 117, 105, 103, 52, 20, 32, 98, - 89, 71, 49, 15, 89, 131, 68, 32, 68, 94, 63, 112, 68, 123, 81, 129, - 108, 147, 127, 145, 153, 38, 18, 52, 18, 108, 164, 169, 35, 9, 9, 52, - 101, 38, 63, 35, 91, 108, 101, 129, 169, 184, 98, 98, 105, 137, 219, 204, - 18, 26, 15, 20, 32, 52, 41, 29, 29, 15, 15, 26, 123, 89, 55, 74, - 91, 105, 103, 103, 110, 114, 119, 121, 114, 123, 123, 127, 131, 133, 137, 139, - 139, 141, 147, 141, 151, 149, 151, 151, 151, 156, 162, 149, 151, 155, 156, 141, - 137, 135, 125, 133, 117, 125, 139, 139, 125, 160, 190, 204, 198, 193, 176, 167, - 156, 149, 145, 143, 135, 131, 123, 114, 46, 35, 32, 41, 26, 29, 38, 43, - 52, 76, 71, 74, 52, 43, 29, 20, 18, 9, 139, 181, 145, 151, 81, 46, - 29, 129, 149, 149, 149, 151, 165, 167, 162, 167, 165, 160, 153, 160, 160, 164, - 155, 156, 153, 155, 153, 158, 155, 155, 155, 158, 155, 155, 153, 149, 149, 143, - 143, 143, 139, 143, 169, 195, 203, 204, 204, 204, 204, 207, 212, 212, 215, 216, - 215, 213, 216, 213, 215, 216, 218, 216, 218, 218, 225, 216, 216, 215, 216, 216, - 60, 66, 60, 60, 74, 66, 71, 66, 52, 57, 52, 60, 79, 91, 119, 133, - 155, 156, 164, 167, 172, 174, 171, 177, 172, 181, 181, 177, 171, 162, 147, 129, - 103, 84, 57, 60, 74, 94, 86, 89, 89, 91, 112, 145, 81, 15, 35, 91, - 52, 60, 46, 76, 156, 79, 26, 32, 74, 81, 55, 127, 123, 110, 114, 133, - 81, 86, 158, 143, 153, 91, 29, 41, 18, 74, 137, 108, 60, 23, 38, 91, - 35, 71, 101, 101, 117, 110, 145, 185, 197, 84, 114, 103, 125, 179, 221, 46, - 29, 41, 46, 32, 46, 57, 43, 32, 38, 29, 32, 41, 123, 91, 66, 79, - 98, 103, 112, 108, 110, 114, 110, 114, 127, 119, 123, 137, 131, 133, 137, 135, - 135, 137, 145, 141, 149, 151, 153, 158, 155, 160, 155, 156, 153, 155, 149, 149, - 147, 139, 137, 135, 131, 139, 165, 187, 153, 162, 193, 203, 200, 198, 184, 165, - 158, 149, 141, 137, 127, 127, 127, 114, 43, 41, 38, 32, 23, 38, 26, 55, - 38, 91, 55, 79, 71, 38, 49, 18, 26, 6, 117, 174, 155, 149, 79, 60, - 63, 133, 151, 147, 147, 151, 169, 162, 158, 156, 164, 164, 156, 158, 162, 153, - 156, 158, 155, 156, 155, 162, 155, 153, 151, 153, 156, 153, 153, 155, 153, 151, - 145, 145, 139, 151, 179, 193, 203, 204, 203, 203, 204, 209, 212, 215, 218, 215, - 216, 215, 213, 215, 216, 216, 218, 218, 218, 216, 218, 216, 218, 218, 218, 216, - 76, 66, 63, 55, 68, 74, 66, 55, 49, 49, 43, 55, 81, 94, 119, 135, - 145, 158, 164, 169, 172, 174, 171, 177, 179, 179, 184, 177, 174, 160, 147, 133, - 98, 71, 57, 60, 74, 94, 89, 86, 96, 110, 139, 149, 79, 32, 43, 103, - 71, 81, 96, 164, 94, 52, 41, 43, 71, 86, 66, 79, 114, 112, 121, 139, - 112, 76, 176, 96, 164, 139, 71, 60, 71, 66, 108, 110, 46, 55, 79, 29, - 23, 46, 137, 139, 139, 164, 182, 195, 155, 96, 81, 119, 165, 216, 129, 43, - 41, 60, 57, 43, 43, 38, 52, 38, 20, 29, 26, 35, 117, 89, 74, 81, - 96, 105, 112, 108, 121, 117, 117, 121, 123, 121, 133, 129, 133, 137, 129, 137, - 135, 139, 147, 153, 153, 149, 149, 151, 153, 153, 155, 155, 151, 145, 151, 149, - 145, 149, 143, 141, 145, 158, 190, 203, 171, 167, 192, 204, 200, 198, 182, 164, - 151, 141, 139, 139, 129, 133, 129, 52, 41, 41, 41, 43, 43, 41, 41, 66, - 35, 91, 66, 66, 52, 49, 63, 41, 23, 12, 84, 169, 160, 151, 76, 86, - 103, 143, 153, 149, 153, 151, 165, 164, 167, 162, 162, 162, 158, 156, 158, 160, - 156, 156, 156, 158, 156, 151, 155, 158, 155, 153, 156, 153, 155, 149, 151, 149, - 143, 141, 135, 162, 181, 198, 204, 204, 203, 206, 207, 212, 215, 216, 218, 215, - 212, 212, 213, 216, 215, 215, 215, 216, 218, 219, 218, 218, 216, 219, 218, 216, - 63, 66, 52, 57, 60, 55, 66, 60, 52, 49, 41, 49, 76, 94, 125, 135, - 153, 160, 164, 172, 169, 172, 174, 176, 177, 184, 184, 179, 171, 158, 145, 125, - 98, 79, 66, 60, 79, 76, 79, 81, 98, 143, 143, 105, 81, 35, 46, 86, - 52, 123, 137, 103, 46, 20, 35, 35, 74, 57, 74, 49, 98, 66, 89, 98, - 127, 76, 147, 91, 167, 129, 81, 57, 94, 81, 98, 91, 52, 32, 55, 23, - 38, 135, 184, 145, 176, 179, 182, 185, 76, 108, 79, 98, 206, 164, 29, 18, - 38, 38, 26, 35, 26, 41, 55, 52, 26, 26, 20, 12, 117, 114, 94, 86, - 98, 103, 108, 110, 123, 114, 114, 108, 121, 123, 123, 129, 141, 135, 137, 129, - 133, 131, 139, 141, 145, 147, 147, 153, 145, 155, 153, 156, 151, 147, 155, 147, - 143, 145, 141, 145, 147, 171, 203, 206, 185, 171, 197, 204, 200, 204, 177, 164, - 151, 143, 149, 135, 129, 133, 114, 41, 43, 38, 29, 35, 29, 32, 41, 60, - 43, 86, 60, 66, 52, 35, 55, 26, 18, 9, 55, 162, 171, 143, 81, 114, - 108, 145, 153, 143, 155, 158, 165, 162, 162, 160, 158, 158, 156, 164, 155, 156, - 155, 155, 155, 151, 149, 149, 151, 158, 155, 151, 153, 158, 149, 149, 151, 147, - 147, 137, 141, 164, 182, 200, 203, 204, 204, 207, 210, 213, 215, 218, 216, 213, - 215, 213, 213, 215, 216, 216, 216, 216, 218, 218, 218, 224, 216, 219, 218, 218, - 68, 71, 55, 63, 55, 55, 66, 57, 49, 43, 35, 49, 84, 101, 127, 135, - 151, 160, 162, 169, 174, 174, 169, 174, 176, 179, 185, 181, 174, 162, 151, 131, - 96, 81, 52, 60, 68, 74, 81, 94, 137, 139, 103, 125, 71, 38, 52, 63, - 123, 149, 35, 35, 71, 35, 49, 41, 79, 49, 76, 49, 91, 63, 94, 129, - 74, 76, 98, 137, 151, 127, 103, 38, 123, 110, 66, 46, 15, 6, 49, 57, - 81, 160, 160, 151, 176, 190, 203, 143, 110, 84, 81, 151, 195, 32, 15, 23, - 35, 32, 26, 32, 26, 32, 68, 41, 29, 35, 15, 29, 121, 110, 112, 81, - 94, 101, 110, 108, 117, 114, 125, 123, 112, 123, 131, 125, 133, 127, 137, 131, - 133, 131, 135, 137, 143, 145, 143, 149, 149, 149, 149, 158, 151, 147, 137, 149, - 155, 139, 151, 155, 160, 172, 210, 210, 192, 176, 201, 210, 203, 200, 182, 162, - 147, 141, 143, 133, 129, 129, 57, 38, 35, 43, 35, 43, 32, 43, 52, 63, - 49, 68, 60, 55, 57, 57, 41, 35, 9, 9, 41, 155, 172, 135, 98, 105, - 119, 147, 151, 149, 153, 158, 165, 162, 162, 164, 162, 158, 158, 160, 156, 156, - 151, 162, 162, 158, 155, 147, 151, 151, 153, 153, 153, 151, 151, 149, 151, 151, - 143, 139, 135, 165, 189, 201, 203, 204, 203, 209, 212, 218, 216, 216, 215, 213, - 215, 215, 216, 215, 216, 215, 215, 216, 218, 219, 219, 218, 219, 218, 216, 219, - 60, 55, 57, 57, 52, 46, 49, 52, 46, 55, 52, 52, 68, 94, 121, 141, - 149, 156, 167, 165, 174, 176, 177, 177, 174, 179, 181, 181, 172, 164, 149, 125, - 101, 71, 55, 63, 76, 63, 68, 119, 147, 105, 117, 117, 43, 52, 57, 114, - 131, 121, 23, 35, 49, 52, 60, 49, 68, 52, 96, 55, 63, 63, 52, 135, - 43, 71, 127, 145, 119, 131, 147, 38, 169, 71, 41, 18, 52, 29, 52, 103, - 96, 117, 151, 169, 184, 204, 190, 89, 79, 81, 117, 206, 52, 20, 26, 32, - 38, 43, 32, 35, 20, 49, 66, 49, 20, 38, 23, 18, 98, 103, 127, 63, - 96, 98, 110, 108, 114, 117, 119, 129, 114, 121, 131, 125, 129, 133, 131, 127, - 131, 129, 135, 133, 135, 145, 141, 145, 145, 147, 143, 155, 141, 151, 139, 141, - 147, 156, 153, 153, 164, 177, 215, 210, 203, 169, 187, 207, 201, 198, 179, 155, - 139, 143, 135, 131, 133, 121, 26, 46, 38, 26, 29, 46, 35, 35, 60, 41, - 79, 86, 60, 57, 41, 63, 29, 29, 18, 18, 60, 145, 182, 119, 101, 121, - 131, 147, 145, 151, 153, 167, 162, 162, 158, 162, 164, 160, 156, 155, 153, 158, - 155, 156, 158, 158, 155, 155, 151, 153, 156, 149, 158, 151, 145, 151, 141, 141, - 139, 143, 133, 172, 190, 204, 206, 203, 206, 212, 213, 218, 218, 215, 215, 215, - 215, 218, 216, 215, 216, 213, 215, 218, 219, 221, 219, 219, 216, 219, 216, 219, - 68, 60, 55, 46, 46, 52, 52, 57, 46, 46, 49, 68, 71, 86, 114, 129, - 151, 160, 165, 167, 174, 169, 176, 177, 182, 179, 185, 182, 176, 160, 145, 127, - 110, 71, 49, 66, 74, 76, 105, 160, 96, 91, 133, 119, 38, 55, 101, 96, - 133, 89, 23, 46, 38, 89, 55, 74, 66, 52, 60, 71, 68, 74, 57, 101, - 103, 46, 41, 125, 147, 114, 131, 133, 164, 18, 29, 20, 20, 121, 108, 91, - 91, 135, 155, 165, 200, 203, 74, 94, 76, 96, 200, 55, 26, 23, 29, 76, - 35, 35, 32, 38, 41, 41, 57, 79, 41, 26, 12, 15, 110, 103, 114, 68, - 86, 91, 96, 123, 108, 121, 121, 119, 114, 123, 129, 125, 127, 135, 129, 129, - 131, 127, 131, 129, 133, 131, 137, 141, 143, 143, 135, 147, 139, 143, 147, 141, - 147, 149, 151, 153, 156, 177, 212, 212, 195, 177, 204, 215, 209, 197, 182, 153, - 133, 139, 137, 135, 125, 66, 23, 29, 32, 52, 38, 35, 29, 63, 52, 46, - 63, 66, 60, 66, 35, 55, 43, 20, 23, 12, 41, 131, 182, 119, 121, 114, - 129, 141, 143, 153, 165, 164, 162, 165, 171, 164, 156, 162, 158, 156, 155, 158, - 158, 156, 158, 160, 155, 151, 153, 151, 153, 155, 153, 153, 155, 147, 145, 141, - 141, 139, 139, 171, 195, 204, 204, 203, 210, 212, 216, 216, 216, 215, 216, 215, - 218, 218, 216, 213, 215, 215, 216, 218, 219, 219, 221, 219, 218, 218, 219, 219, - 66, 46, 38, 43, 43, 46, 52, 63, 49, 46, 55, 46, 68, 86, 121, 133, - 149, 156, 165, 171, 167, 172, 176, 176, 181, 182, 187, 182, 177, 165, 149, 127, - 110, 66, 52, 55, 66, 84, 147, 108, 86, 86, 133, 103, 46, 84, 32, 81, - 110, 63, 43, 38, 71, 57, 57, 84, 46, 81, 76, 94, 74, 49, 68, 86, - 86, 96, 26, 46, 141, 141, 135, 172, 91, 12, 23, 32, 110, 133, 171, 156, - 141, 143, 193, 193, 206, 103, 110, 79, 105, 151, 172, 26, 29, 18, 52, 98, - 41, 35, 23, 52, 29, 35, 57, 79, 63, 32, 20, 15, 98, 98, 114, 86, - 68, 89, 96, 108, 117, 121, 117, 127, 119, 123, 127, 129, 127, 125, 131, 131, - 127, 129, 133, 135, 137, 135, 135, 139, 137, 131, 133, 135, 143, 141, 135, 135, - 145, 153, 158, 164, 165, 171, 182, 193, 209, 212, 195, 177, 174, 189, 185, 137, - 127, 127, 131, 141, 117, 52, 26, 18, 29, 43, 41, 32, 38, 43, 49, 60, - 68, 74, 55, 60, 57, 57, 60, 23, 15, 12, 26, 129, 184, 125, 131, 133, - 145, 149, 143, 153, 160, 164, 165, 162, 162, 158, 158, 160, 160, 162, 151, 156, - 156, 164, 158, 155, 153, 156, 145, 153, 153, 149, 151, 153, 151, 149, 145, 141, - 139, 133, 141, 177, 193, 201, 204, 210, 212, 215, 216, 218, 218, 216, 215, 215, - 216, 218, 216, 216, 215, 215, 218, 218, 222, 221, 219, 219, 221, 218, 218, 218, - 57, 41, 41, 43, 52, 43, 52, 55, 55, 43, 46, 49, 74, 91, 123, 137, - 149, 162, 164, 174, 176, 172, 167, 179, 181, 184, 184, 182, 179, 164, 153, 127, - 96, 68, 60, 57, 68, 133, 117, 86, 79, 86, 129, 103, 60, 43, 20, 123, - 135, 63, 49, 35, 55, 57, 41, 79, 57, 57, 125, 79, 96, 86, 79, 76, - 55, 119, 84, 49, 60, 91, 119, 141, 143, 32, 12, 79, 86, 105, 167, 206, - 204, 198, 209, 209, 135, 91, 84, 86, 133, 209, 23, 23, 18, 23, 49, 117, - 38, 20, 20, 43, 35, 38, 46, 63, 52, 26, 20, 18, 81, 71, 108, 81, - 68, 84, 101, 112, 114, 110, 119, 125, 117, 125, 121, 129, 129, 129, 135, 131, - 135, 131, 127, 135, 129, 125, 129, 121, 125, 131, 131, 135, 137, 141, 143, 145, - 143, 137, 139, 129, 135, 127, 133, 137, 147, 160, 149, 137, 133, 149, 158, 121, - 119, 131, 137, 137, 79, 35, 23, 35, 41, 38, 35, 41, 43, 38, 57, 63, - 46, 66, 60, 57, 71, 49, 60, 35, 15, 12, 26, 133, 172, 119, 139, 127, - 143, 155, 147, 151, 155, 165, 160, 165, 162, 160, 156, 164, 160, 158, 156, 153, - 155, 160, 153, 155, 158, 158, 155, 153, 158, 153, 153, 149, 147, 149, 147, 143, - 139, 131, 147, 171, 197, 203, 206, 210, 213, 216, 218, 216, 218, 215, 215, 216, - 218, 218, 216, 215, 216, 218, 219, 219, 221, 221, 221, 221, 218, 221, 221, 218, - 49, 52, 41, 41, 46, 43, 52, 49, 49, 35, 38, 55, 68, 86, 121, 139, - 156, 165, 165, 172, 172, 179, 179, 177, 181, 184, 185, 182, 174, 162, 147, 129, - 103, 74, 55, 63, 105, 145, 79, 71, 96, 108, 147, 96, 38, 26, 35, 84, - 119, 71, 41, 57, 57, 57, 49, 43, 46, 60, 141, 84, 114, 105, 86, 66, - 63, 60, 133, 74, 52, 117, 103, 141, 98, 133, 86, 143, 135, 121, 165, 195, - 216, 206, 212, 174, 89, 110, 79, 121, 201, 57, 15, 12, 32, 29, 26, 81, - 26, 26, 26, 38, 26, 46, 46, 46, 68, 18, 20, 20, 96, 68, 89, 71, - 68, 84, 101, 103, 105, 119, 117, 117, 117, 114, 123, 123, 123, 123, 129, 137, - 139, 133, 131, 149, 131, 105, 91, 110, 119, 125, 125, 133, 127, 129, 125, 121, - 114, 110, 125, 121, 105, 108, 105, 125, 141, 137, 119, 84, 101, 112, 84, 86, - 112, 135, 145, 129, 32, 35, 26, 26, 43, 32, 29, 29, 46, 32, 79, 38, - 55, 49, 55, 76, 43, 29, 60, 55, 18, 20, 20, 117, 169, 127, 143, 133, - 153, 147, 153, 145, 164, 167, 164, 162, 160, 156, 164, 156, 160, 160, 155, 155, - 155, 155, 153, 156, 156, 156, 153, 156, 155, 151, 153, 151, 155, 151, 147, 145, - 137, 127, 151, 177, 193, 203, 210, 215, 215, 219, 215, 216, 218, 216, 218, 215, - 215, 218, 215, 216, 218, 218, 221, 219, 221, 221, 221, 219, 219, 221, 219, 222, - 38, 41, 43, 41, 46, 46, 60, 46, 38, 38, 52, 66, 74, 91, 125, 143, - 153, 156, 165, 176, 177, 174, 177, 182, 181, 182, 181, 184, 176, 162, 147, 123, - 98, 68, 46, 105, 156, 101, 71, 68, 105, 145, 169, 86, 49, 41, 101, 38, - 41, 63, 49, 63, 71, 79, 52, 35, 49, 79, 160, 133, 117, 96, 110, 91, - 74, 55, 74, 131, 103, 133, 46, 108, 101, 43, 141, 160, 129, 145, 190, 195, - 215, 216, 193, 66, 110, 91, 96, 177, 190, 15, 35, 35, 49, 18, 23, 71, - 46, 15, 35, 20, 26, 41, 32, 55, 74, 18, 15, 23, 81, 43, 84, 84, - 49, 74, 96, 110, 108, 123, 123, 123, 114, 114, 121, 117, 131, 131, 129, 133, - 133, 137, 135, 141, 121, 74, 68, 52, 49, 68, 81, 89, 89, 89, 98, 84, - 76, 79, 76, 57, 68, 79, 96, 103, 114, 103, 76, 66, 86, 101, 103, 105, - 137, 141, 137, 96, 23, 29, 18, 32, 55, 26, 38, 29, 46, 49, 66, 38, - 71, 49, 57, 81, 57, 18, 52, 60, 29, 18, 23, 101, 165, 137, 151, 129, - 149, 143, 151, 155, 162, 160, 174, 162, 162, 156, 162, 158, 158, 158, 156, 160, - 153, 156, 160, 153, 153, 155, 156, 153, 153, 147, 155, 151, 155, 147, 143, 141, - 135, 135, 153, 182, 197, 204, 213, 215, 218, 219, 218, 219, 216, 216, 216, 215, - 215, 218, 218, 218, 218, 218, 219, 218, 218, 224, 221, 221, 221, 221, 221, 218, - 41, 38, 32, 32, 41, 46, 55, 46, 46, 38, 41, 74, 76, 96, 119, 143, - 151, 162, 167, 176, 177, 181, 185, 182, 181, 182, 185, 185, 177, 160, 143, 125, - 103, 63, 71, 162, 114, 74, 66, 74, 137, 158, 133, 79, 26, 79, 52, 29, - 20, 49, 76, 98, 63, 66, 41, 55, 43, 63, 156, 151, 101, 91, 108, 105, - 110, 86, 81, 89, 156, 129, 41, 79, 29, 60, 121, 135, 131, 129, 197, 222, - 218, 210, 143, 86, 76, 86, 158, 209, 41, 35, 26, 35, 35, 26, 26, 41, - 55, 23, 43, 29, 35, 41, 32, 49, 79, 38, 20, 12, 84, 55, 76, 89, - 66, 79, 86, 103, 110, 117, 119, 119, 114, 114, 121, 123, 127, 131, 127, 135, - 137, 141, 143, 141, 121, 112, 114, 103, 94, 76, 74, 79, 91, 98, 101, 91, - 101, 91, 89, 94, 98, 91, 96, 112, 123, 119, 119, 112, 110, 127, 127, 125, - 143, 145, 133, 35, 29, 29, 26, 38, 46, 26, 26, 29, 26, 63, 55, 35, - 84, 60, 46, 79, 55, 18, 38, 74, 32, 15, 23, 76, 160, 149, 145, 139, - 156, 147, 156, 153, 165, 164, 165, 160, 160, 162, 162, 160, 158, 155, 162, 158, - 153, 158, 158, 158, 162, 156, 156, 153, 153, 156, 155, 153, 155, 147, 145, 139, - 135, 135, 156, 182, 200, 209, 215, 218, 221, 219, 219, 218, 218, 216, 218, 216, - 216, 218, 221, 218, 219, 216, 219, 219, 221, 222, 222, 221, 221, 219, 219, 218, - 41, 35, 35, 43, 41, 38, 49, 52, 38, 35, 52, 89, 94, 105, 123, 141, - 153, 162, 169, 174, 181, 179, 177, 181, 179, 185, 181, 181, 171, 158, 147, 123, - 94, 91, 162, 119, 68, 57, 76, 105, 147, 117, 125, 91, 43, 66, 57, 41, - 26, 43, 43, 32, 57, 60, 49, 103, 46, 52, 182, 155, 68, 103, 103, 98, - 108, 112, 108, 98, 86, 84, 105, 57, 68, 103, 151, 141, 121, 117, 145, 231, - 219, 176, 81, 110, 86, 147, 209, 86, 26, 38, 38, 41, 32, 29, 23, 43, - 43, 26, 29, 32, 41, 38, 49, 46, 71, 55, 23, 20, 76, 55, 74, 81, - 66, 71, 86, 101, 105, 110, 114, 110, 112, 117, 119, 117, 123, 125, 131, 127, - 141, 145, 143, 141, 137, 129, 114, 117, 119, 108, 105, 101, 101, 110, 121, 125, - 112, 127, 133, 129, 141, 141, 151, 162, 172, 179, 158, 125, 119, 141, 147, 139, - 147, 141, 66, 29, 32, 32, 26, 43, 26, 38, 35, 35, 52, 76, 32, 43, - 98, 55, 76, 76, 71, 23, 46, 98, 32, 35, 20, 74, 156, 158, 137, 141, - 158, 145, 151, 156, 165, 164, 165, 162, 155, 165, 164, 160, 162, 156, 160, 156, - 156, 156, 153, 153, 153, 155, 156, 156, 155, 156, 153, 149, 160, 147, 151, 141, - 135, 129, 158, 185, 203, 210, 216, 219, 219, 221, 219, 216, 216, 218, 218, 216, - 218, 219, 219, 218, 219, 221, 219, 221, 219, 221, 218, 219, 219, 218, 219, 218, - 43, 49, 49, 41, 43, 43, 49, 46, 41, 32, 49, 81, 94, 96, 119, 139, - 153, 156, 165, 174, 176, 179, 182, 182, 185, 184, 189, 184, 174, 162, 149, 119, - 110, 151, 129, 66, 57, 63, 79, 131, 141, 108, 108, 94, 60, 55, 81, 71, - 60, 23, 38, 23, 66, 68, 49, 103, 29, 57, 197, 147, 71, 49, 101, 119, - 117, 91, 74, 108, 52, 52, 123, 81, 121, 137, 145, 149, 125, 112, 117, 222, - 198, 108, 105, 108, 131, 195, 174, 46, 46, 26, 43, 46, 29, 18, 18, 32, - 35, 35, 20, 35, 52, 29, 52, 38, 52, 43, 20, 32, 76, 68, 81, 68, - 66, 63, 86, 96, 103, 105, 105, 105, 108, 125, 121, 112, 119, 121, 127, 131, - 141, 145, 141, 139, 145, 135, 123, 123, 112, 117, 110, 110, 101, 103, 108, 125, - 123, 145, 169, 187, 174, 195, 187, 200, 206, 198, 158, 123, 127, 141, 141, 137, - 135, 119, 26, 23, 23, 29, 35, 38, 26, 23, 20, 35, 32, 35, 32, 52, - 103, 52, 71, 74, 32, 23, 57, 91, 35, 20, 20, 74, 164, 165, 143, 151, - 155, 145, 155, 156, 162, 165, 169, 165, 156, 164, 162, 156, 158, 162, 158, 158, - 158, 165, 160, 156, 164, 155, 155, 156, 156, 158, 151, 155, 149, 153, 141, 143, - 137, 135, 160, 190, 206, 213, 219, 221, 218, 218, 218, 218, 218, 218, 218, 216, - 218, 219, 219, 219, 219, 219, 221, 219, 221, 219, 219, 219, 218, 218, 218, 216, - 35, 41, 38, 41, 41, 35, 38, 46, 49, 32, 55, 81, 86, 96, 117, 141, - 155, 160, 165, 171, 177, 179, 185, 174, 187, 182, 182, 177, 172, 164, 153, 123, - 145, 123, 60, 55, 60, 71, 101, 153, 98, 96, 91, 79, 63, 38, 155, 63, - 26, 20, 35, 23, 108, 60, 43, 86, 49, 66, 193, 139, 74, 26, 79, 91, - 119, 131, 96, 101, 52, 49, 89, 94, 153, 139, 153, 143, 127, 103, 160, 219, - 108, 108, 110, 169, 189, 172, 35, 41, 26, 41, 32, 41, 35, 26, 20, 23, - 46, 38, 35, 20, 38, 41, 52, 49, 63, 60, 23, 18, 55, 57, 89, 86, - 41, 66, 76, 94, 98, 108, 108, 108, 108, 110, 105, 108, 114, 127, 119, 129, - 129, 127, 139, 141, 145, 143, 131, 131, 114, 110, 103, 117, 117, 121, 105, 108, - 112, 137, 141, 149, 156, 156, 147, 153, 162, 158, 135, 127, 141, 151, 149, 141, - 139, 41, 23, 20, 23, 26, 60, 23, 23, 23, 20, 23, 66, 26, 18, 41, - 117, 52, 71, 79, 63, 41, 43, 89, 38, 32, 23, 74, 156, 164, 145, 156, - 164, 145, 158, 155, 167, 169, 164, 162, 164, 165, 165, 162, 156, 158, 162, 160, - 156, 164, 155, 160, 155, 151, 155, 153, 155, 151, 147, 153, 149, 149, 147, 137, - 143, 129, 164, 190, 209, 216, 222, 221, 219, 219, 219, 216, 218, 218, 218, 219, - 219, 219, 219, 221, 221, 219, 221, 221, 221, 218, 216, 218, 216, 216, 216, 215, - 43, 41, 32, 29, 38, 26, 43, 46, 32, 32, 57, 68, 91, 89, 117, 137, - 151, 156, 162, 172, 176, 181, 181, 184, 184, 184, 187, 182, 177, 169, 185, 158, - 117, 68, 43, 49, 66, 76, 143, 137, 98, 98, 110, 38, 52, 63, 165, 66, - 38, 41, 32, 32, 114, 43, 98, 41, 96, 105, 187, 119, 143, 41, 71, 94, - 57, 94, 141, 91, 121, 98, 108, 103, 151, 158, 137, 156, 105, 119, 222, 200, - 89, 125, 181, 206, 158, 41, 29, 35, 29, 32, 41, 43, 49, 32, 26, 38, - 43, 49, 41, 29, 32, 68, 46, 43, 57, 66, 26, 26, 71, 84, 68, 81, - 41, 60, 79, 89, 98, 101, 110, 103, 108, 112, 110, 119, 119, 125, 121, 123, - 121, 133, 135, 139, 143, 139, 133, 129, 125, 129, 114, 112, 110, 114, 117, 112, - 108, 127, 125, 127, 137, 139, 133, 131, 129, 137, 125, 137, 147, 153, 143, 137, - 101, 29, 32, 32, 32, 32, 49, 32, 35, 26, 38, 20, 60, 26, 26, 49, - 110, 43, 60, 79, 52, 55, 46, 81, 43, 32, 38, 66, 153, 169, 156, 160, - 164, 149, 156, 158, 162, 164, 165, 164, 164, 164, 165, 164, 160, 160, 165, 158, - 164, 158, 160, 162, 158, 156, 155, 158, 153, 155, 153, 155, 155, 149, 147, 141, - 131, 131, 164, 197, 213, 219, 222, 222, 219, 221, 219, 219, 216, 218, 221, 219, - 221, 219, 221, 222, 222, 222, 219, 218, 218, 216, 215, 215, 216, 213, 213, 213, - 35, 26, 32, 38, 35, 43, 41, 38, 35, 38, 63, 68, 94, 84, 110, 135, - 149, 158, 164, 171, 179, 184, 184, 185, 185, 182, 190, 184, 169, 156, 153, 125, - 96, 60, 57, 57, 66, 137, 164, 98, 89, 110, 105, 43, 32, 105, 153, 35, - 18, 43, 23, 63, 121, 26, 94, 68, 94, 153, 156, 112, 153, 86, 74, 121, - 76, 49, 89, 139, 121, 149, 149, 129, 117, 160, 174, 153, 98, 121, 200, 149, - 127, 162, 174, 197, 108, 35, 49, 29, 43, 35, 52, 38, 63, 49, 38, 49, - 35, 32, 38, 35, 43, 35, 57, 46, 63, 60, 38, 23, 57, 84, 57, 60, - 43, 49, 63, 79, 91, 94, 96, 98, 105, 105, 112, 123, 114, 125, 127, 125, - 127, 127, 125, 131, 135, 139, 137, 129, 131, 123, 123, 117, 121, 117, 108, 112, - 110, 114, 123, 121, 131, 133, 129, 121, 119, 117, 131, 151, 143, 143, 139, 125, - 63, 18, 32, 29, 38, 38, 43, 43, 55, 32, 43, 29, 55, 41, 23, 57, - 103, 41, 60, 84, 71, 57, 38, 91, 38, 41, 35, 55, 151, 167, 153, 164, - 160, 155, 162, 171, 162, 169, 160, 165, 158, 162, 164, 162, 162, 164, 165, 164, - 162, 158, 160, 156, 160, 155, 156, 155, 156, 153, 149, 145, 153, 149, 141, 141, - 129, 129, 162, 200, 212, 221, 222, 222, 221, 221, 221, 219, 221, 221, 222, 222, - 222, 221, 224, 221, 222, 219, 216, 213, 215, 212, 213, 212, 213, 213, 212, 212, - 60, 38, 23, 32, 38, 49, 38, 46, 32, 29, 60, 94, 81, 74, 108, 127, - 145, 155, 164, 171, 182, 185, 182, 181, 181, 185, 187, 182, 177, 160, 149, 125, - 96, 68, 52, 43, 79, 160, 103, 89, 94, 123, 66, 38, 38, 131, 155, 15, - 35, 29, 12, 101, 101, 41, 35, 76, 79, 185, 145, 101, 94, 153, 114, 135, - 103, 71, 57, 108, 147, 155, 114, 143, 103, 143, 147, 149, 105, 145, 213, 151, - 162, 143, 224, 96, 49, 41, 46, 55, 41, 52, 52, 60, 55, 38, 43, 55, - 43, 38, 43, 49, 60, 43, 66, 46, 52, 55, 43, 32, 49, 74, 43, 81, - 55, 60, 57, 68, 84, 101, 89, 94, 103, 101, 110, 105, 112, 117, 123, 119, - 129, 125, 125, 137, 133, 137, 131, 131, 123, 125, 119, 121, 125, 119, 123, 105, - 108, 98, 108, 105, 108, 105, 103, 94, 119, 149, 149, 147, 139, 139, 129, 38, - 49, 29, 29, 26, 18, 32, 23, 29, 43, 46, 32, 38, 49, 32, 26, 74, - 84, 63, 49, 81, 74, 43, 38, 74, 46, 26, 26, 52, 141, 176, 143, 160, - 158, 155, 158, 169, 164, 162, 164, 165, 160, 162, 162, 158, 164, 164, 160, 165, - 160, 160, 158, 164, 158, 158, 153, 155, 153, 153, 151, 151, 145, 145, 139, 141, - 125, 133, 162, 204, 215, 222, 222, 222, 221, 221, 221, 221, 221, 221, 221, 224, - 222, 224, 222, 219, 218, 216, 215, 215, 213, 213, 213, 213, 215, 216, 216, 216, - 35, 32, 32, 38, 26, 41, 29, 26, 29, 35, 74, 94, 86, 79, 105, 127, - 149, 149, 158, 172, 179, 181, 182, 182, 184, 187, 187, 179, 176, 162, 145, 127, - 101, 66, 41, 46, 94, 167, 96, 94, 108, 105, 32, 41, 46, 123, 127, 29, - 29, 32, 26, 105, 55, 41, 23, 57, 98, 201, 151, 103, 52, 160, 123, 133, - 117, 74, 81, 76, 155, 156, 129, 98, 101, 119, 127, 127, 108, 171, 215, 133, - 187, 210, 151, 35, 32, 35, 23, 43, 32, 32, 46, 38, 46, 29, 20, 43, - 35, 43, 76, 43, 43, 63, 32, 46, 46, 55, 43, 41, 38, 68, 46, 89, - 52, 43, 63, 63, 66, 86, 94, 94, 103, 91, 108, 108, 108, 114, 121, 123, - 123, 127, 135, 131, 133, 137, 135, 129, 125, 127, 125, 119, 125, 119, 127, 121, - 121, 114, 108, 114, 117, 119, 119, 139, 151, 155, 151, 133, 137, 139, 89, 38, - 43, 23, 29, 20, 23, 29, 29, 46, 38, 60, 38, 41, 43, 52, 23, 68, - 86, 55, 49, 103, 60, 46, 46, 71, 55, 43, 35, 49, 141, 185, 153, 169, - 160, 155, 156, 167, 162, 167, 162, 171, 165, 162, 162, 164, 162, 158, 167, 164, - 167, 162, 158, 164, 160, 156, 158, 153, 158, 155, 151, 149, 149, 147, 143, 133, - 127, 123, 164, 206, 218, 224, 225, 224, 221, 221, 222, 221, 221, 222, 224, 224, - 224, 221, 221, 218, 218, 215, 215, 216, 216, 218, 216, 218, 216, 218, 216, 216, - 23, 26, 32, 35, 32, 32, 32, 29, 20, 43, 117, 94, 94, 96, 110, 125, - 137, 149, 158, 174, 181, 177, 182, 181, 181, 184, 185, 179, 174, 160, 149, 129, - 101, 55, 41, 46, 91, 169, 86, 89, 91, 68, 71, 38, 68, 133, 55, 38, - 35, 18, 38, 89, 43, 57, 49, 18, 117, 203, 137, 145, 79, 114, 151, 153, - 125, 103, 123, 125, 86, 129, 127, 110, 68, 129, 145, 105, 101, 156, 213, 172, - 192, 172, 43, 41, 38, 43, 41, 43, 38, 49, 43, 49, 52, 43, 43, 43, - 41, 43, 38, 32, 49, 52, 46, 55, 57, 49, 60, 46, 41, 55, 35, 74, - 66, 43, 63, 74, 76, 81, 89, 96, 101, 98, 103, 114, 117, 117, 121, 119, - 125, 129, 129, 133, 127, 131, 133, 133, 127, 125, 133, 129, 129, 127, 129, 137, - 135, 137, 141, 149, 141, 143, 145, 151, 149, 156, 131, 135, 137, 135, 15, 49, - 41, 32, 26, 29, 32, 32, 43, 43, 41, 60, 38, 32, 20, 43, 20, 60, - 84, 66, 57, 96, 52, 43, 43, 71, 76, 23, 35, 32, 143, 176, 160, 171, - 158, 151, 164, 158, 164, 165, 162, 165, 160, 162, 165, 167, 162, 160, 164, 164, - 164, 160, 162, 162, 156, 155, 153, 156, 153, 155, 153, 151, 153, 149, 137, 133, - 133, 127, 164, 201, 218, 225, 227, 225, 222, 221, 222, 222, 224, 222, 222, 224, - 221, 221, 218, 216, 218, 216, 216, 216, 216, 216, 216, 218, 218, 219, 218, 218, - 38, 38, 26, 41, 26, 29, 29, 32, 15, 60, 96, 108, 98, 98, 105, 131, - 133, 141, 155, 164, 176, 179, 182, 185, 181, 181, 181, 182, 174, 165, 149, 131, - 101, 63, 41, 46, 76, 145, 103, 91, 81, 86, 55, 63, 68, 110, 26, 43, - 32, 20, 43, 103, 41, 57, 38, 68, 117, 203, 143, 96, 149, 86, 179, 145, - 110, 108, 145, 63, 86, 139, 125, 119, 38, 98, 133, 119, 125, 181, 224, 185, - 203, 74, 29, 20, 29, 52, 29, 43, 29, 29, 43, 26, 43, 35, 35, 57, - 23, 38, 43, 32, 32, 43, 46, 41, 38, 43, 46, 41, 23, 38, 49, 55, - 68, 46, 43, 60, 49, 71, 79, 86, 91, 98, 101, 103, 110, 114, 119, 123, - 131, 129, 135, 129, 125, 133, 133, 129, 139, 131, 131, 135, 137, 137, 143, 151, - 149, 158, 160, 162, 156, 155, 156, 155, 155, 147, 141, 141, 143, 81, 23, 81, - 38, 12, 23, 35, 26, 38, 43, 60, 43, 52, 35, 38, 23, 49, 26, 76, - 96, 66, 49, 84, 66, 55, 55, 71, 66, 35, 41, 18, 147, 181, 169, 167, - 155, 149, 165, 162, 169, 165, 169, 165, 164, 158, 165, 162, 164, 162, 162, 164, - 162, 162, 158, 160, 158, 158, 158, 155, 156, 155, 153, 155, 153, 141, 137, 137, - 123, 125, 167, 204, 218, 224, 225, 225, 222, 224, 222, 222, 221, 221, 221, 227, - 219, 219, 216, 216, 216, 218, 219, 219, 219, 218, 218, 218, 218, 218, 218, 215, - 32, 35, 23, 32, 38, 35, 26, 35, 32, 68, 98, 96, 98, 101, 117, 121, - 139, 141, 156, 169, 176, 177, 181, 181, 179, 182, 182, 177, 165, 164, 151, 125, - 101, 79, 55, 46, 76, 121, 121, 103, 84, 71, 57, 96, 89, 98, 41, 38, - 23, 23, 57, 94, 23, 35, 49, 35, 71, 181, 119, 103, 108, 127, 131, 158, - 114, 131, 110, 74, 91, 91, 145, 127, 86, 123, 112, 108, 89, 177, 224, 219, - 79, 32, 29, 41, 43, 55, 55, 43, 26, 38, 43, 43, 41, 29, 29, 57, - 35, 38, 49, 29, 29, 23, 46, 43, 35, 41, 66, 38, 29, 32, 49, 46, - 68, 41, 29, 55, 41, 46, 74, 84, 86, 94, 98, 103, 98, 114, 114, 117, - 123, 133, 131, 127, 135, 133, 137, 137, 135, 133, 141, 147, 145, 141, 139, 151, - 160, 165, 169, 169, 160, 158, 153, 158, 153, 149, 143, 151, 145, 18, 18, 60, - 41, 26, 29, 38, 32, 35, 43, 57, 57, 43, 29, 41, 29, 35, 26, 96, - 94, 63, 63, 66, 66, 55, 68, 84, 55, 38, 43, 29, 139, 185, 172, 172, - 155, 155, 167, 171, 167, 165, 165, 169, 165, 164, 169, 162, 160, 162, 158, 162, - 165, 162, 158, 156, 162, 158, 153, 156, 151, 155, 149, 149, 149, 141, 139, 129, - 129, 121, 172, 207, 221, 227, 227, 225, 225, 221, 221, 221, 221, 218, 218, 219, - 219, 219, 222, 219, 219, 221, 221, 219, 216, 218, 216, 216, 216, 213, 212, 215, - 26, 32, 32, 26, 46, 41, 29, 35, 38, 68, 101, 98, 94, 96, 117, 129, - 139, 153, 158, 167, 177, 177, 181, 179, 182, 181, 181, 184, 171, 167, 149, 127, - 103, 71, 43, 52, 68, 101, 105, 91, 98, 66, 57, 94, 96, 89, 41, 41, - 23, 23, 71, 91, 26, 32, 46, 55, 60, 185, 98, 84, 123, 129, 112, 158, - 133, 131, 119, 117, 76, 74, 149, 127, 81, 125, 105, 81, 105, 125, 197, 129, - 43, 49, 35, 38, 49, 35, 29, 32, 26, 41, 57, 35, 43, 29, 32, 52, - 29, 35, 46, 29, 26, 32, 29, 38, 38, 43, 57, 38, 29, 32, 46, 38, - 43, 35, 26, 57, 55, 23, 49, 57, 79, 81, 91, 96, 96, 105, 114, 121, - 123, 123, 129, 131, 133, 135, 135, 139, 135, 145, 145, 155, 156, 155, 153, 158, - 169, 169, 171, 169, 167, 156, 165, 164, 160, 147, 149, 149, 114, 20, 18, 68, - 29, 35, 29, 26, 32, 46, 55, 49, 46, 29, 43, 66, 26, 32, 20, 89, - 98, 74, 71, 79, 68, 55, 66, 89, 32, 49, 35, 26, 149, 182, 169, 171, - 147, 155, 162, 174, 169, 171, 160, 165, 164, 167, 167, 162, 162, 164, 162, 162, - 164, 162, 155, 162, 156, 160, 158, 153, 155, 151, 149, 153, 143, 149, 137, 131, - 129, 131, 179, 213, 222, 225, 225, 225, 224, 222, 224, 219, 221, 219, 219, 219, - 221, 219, 221, 221, 219, 219, 218, 218, 215, 216, 216, 213, 215, 212, 216, 210, - 32, 29, 23, 23, 32, 26, 41, 32, 32, 79, 98, 105, 101, 89, 110, 133, - 135, 147, 158, 165, 179, 179, 177, 184, 177, 179, 184, 182, 172, 162, 153, 125, - 101, 66, 46, 49, 71, 101, 105, 103, 79, 43, 79, 38, 101, 96, 32, 43, - 41, 18, 60, 81, 23, 29, 43, 68, 74, 169, 119, 66, 60, 68, 135, 131, - 147, 137, 131, 131, 112, 63, 127, 147, 74, 141, 110, 49, 89, 129, 209, 81, - 46, 55, 29, 41, 46, 43, 35, 46, 29, 43, 57, 46, 41, 18, 32, 41, - 38, 29, 38, 38, 35, 32, 35, 32, 35, 49, 49, 52, 35, 38, 60, 43, - 57, 49, 23, 60, 66, 29, 29, 35, 52, 71, 91, 84, 89, 98, 105, 117, - 114, 119, 123, 123, 135, 137, 141, 141, 139, 149, 147, 162, 167, 169, 162, 162, - 164, 167, 162, 160, 169, 165, 165, 169, 158, 139, 156, 147, 43, 26, 35, 55, - 35, 35, 43, 32, 43, 41, 66, 46, 57, 20, 41, 49, 35, 35, 35, 94, - 108, 91, 66, 74, 57, 68, 57, 68, 35, 84, 26, 29, 155, 185, 164, 165, - 145, 162, 156, 167, 167, 169, 167, 164, 156, 160, 158, 162, 158, 158, 160, 160, - 162, 160, 162, 164, 156, 158, 153, 153, 153, 149, 153, 143, 139, 145, 139, 135, - 123, 135, 190, 213, 225, 230, 224, 225, 222, 219, 219, 219, 221, 218, 221, 221, - 221, 222, 221, 219, 216, 215, 218, 215, 213, 213, 213, 215, 213, 213, 212, 212, - 29, 26, 35, 35, 26, 23, 26, 38, 35, 79, 79, 89, 91, 94, 119, 129, - 133, 149, 155, 172, 177, 181, 181, 179, 181, 181, 185, 179, 174, 165, 145, 129, - 105, 71, 55, 57, 71, 91, 91, 76, 66, 52, 63, 29, 131, 81, 43, 55, - 38, 35, 63, 81, 26, 43, 43, 46, 94, 167, 108, 66, 38, 41, 71, 121, - 151, 156, 112, 139, 143, 110, 105, 156, 114, 145, 127, 91, 68, 89, 94, 46, - 119, 38, 43, 41, 57, 38, 29, 46, 43, 43, 46, 49, 52, 32, 29, 52, - 32, 46, 26, 49, 35, 32, 41, 38, 49, 35, 43, 38, 38, 43, 46, 46, - 43, 55, 38, 46, 63, 49, 38, 20, 26, 46, 66, 68, 76, 91, 108, 110, - 119, 123, 127, 127, 133, 127, 139, 139, 141, 143, 155, 156, 169, 179, 167, 165, - 167, 165, 167, 165, 169, 176, 179, 165, 156, 145, 156, 135, 26, 26, 38, 41, - 43, 52, 43, 38, 43, 38, 55, 68, 35, 20, 41, 43, 29, 35, 35, 86, - 105, 68, 71, 68, 66, 74, 63, 84, 26, 81, 43, 18, 139, 184, 165, 171, - 149, 156, 165, 171, 169, 169, 169, 165, 162, 158, 162, 162, 167, 165, 164, 160, - 160, 164, 164, 160, 160, 158, 155, 153, 151, 149, 151, 151, 143, 141, 147, 133, - 127, 137, 195, 216, 225, 228, 227, 222, 219, 219, 218, 218, 219, 221, 221, 222, - 221, 222, 219, 218, 216, 213, 210, 218, 212, 210, 210, 212, 210, 209, 206, 201, - 32, 23, 29, 38, 35, 29, 29, 26, 52, 66, 74, 86, 96, 94, 117, 131, - 141, 145, 160, 174, 176, 184, 181, 181, 182, 181, 182, 182, 172, 162, 149, 125, - 96, 63, 49, 55, 68, 89, 123, 38, 38, 43, 41, 41, 141, 103, 23, 49, - 60, 38, 46, 63, 38, 35, 26, 20, 105, 164, 137, 86, 38, 63, 57, 98, - 112, 141, 131, 139, 147, 121, 119, 135, 143, 147, 101, 105, 86, 133, 49, 63, - 43, 43, 35, 43, 46, 52, 38, 41, 32, 35, 43, 52, 32, 26, 49, 66, - 38, 38, 41, 60, 41, 32, 32, 29, 38, 41, 49, 26, 57, 35, 43, 43, - 38, 63, 41, 35, 55, 55, 20, 29, 23, 26, 41, 66, 71, 79, 96, 110, - 112, 114, 125, 127, 127, 129, 131, 147, 133, 141, 147, 147, 153, 167, 160, 169, - 169, 172, 171, 165, 171, 171, 171, 156, 141, 145, 139, 110, 18, 23, 60, 32, - 46, 49, 52, 46, 41, 49, 49, 74, 38, 32, 41, 41, 35, 23, 46, 108, - 105, 60, 68, 57, 55, 74, 68, 66, 38, 84, 32, 26, 141, 184, 167, 164, - 151, 155, 160, 165, 165, 165, 167, 160, 155, 160, 162, 158, 162, 165, 162, 155, - 164, 156, 160, 156, 153, 153, 153, 153, 147, 147, 149, 145, 145, 137, 133, 131, - 127, 143, 200, 219, 231, 228, 225, 221, 219, 218, 221, 219, 221, 222, 222, 222, - 221, 219, 219, 215, 215, 210, 213, 215, 212, 209, 207, 206, 201, 192, 187, 167, - 38, 38, 29, 32, 26, 20, 26, 46, 35, 43, 74, 86, 91, 105, 127, 125, - 137, 151, 158, 172, 172, 177, 176, 176, 179, 179, 182, 181, 177, 165, 151, 133, - 101, 68, 38, 55, 46, 103, 94, 52, 32, 35, 60, 49, 112, 96, 32, 55, - 66, 43, 71, 60, 38, 35, 41, 23, 74, 165, 133, 125, 46, 74, 71, 108, - 103, 91, 133, 135, 164, 147, 156, 117, 143, 145, 174, 76, 71, 96, 94, 57, - 49, 57, 46, 49, 49, 46, 43, 41, 52, 52, 55, 68, 35, 26, 26, 60, - 29, 35, 49, 35, 43, 29, 29, 38, 29, 35, 52, 38, 49, 63, 38, 49, - 49, 60, 41, 49, 74, 63, 46, 41, 38, 26, 26, 29, 66, 74, 86, 91, - 98, 103, 119, 117, 127, 121, 133, 131, 135, 145, 141, 149, 155, 156, 165, 165, - 164, 174, 164, 165, 165, 165, 158, 151, 143, 147, 141, 101, 26, 32, 55, 43, - 52, 55, 55, 57, 49, 49, 41, 74, 43, 43, 29, 32, 43, 41, 55, 101, - 103, 84, 68, 63, 66, 71, 79, 81, 52, 96, 46, 26, 139, 181, 160, 167, - 147, 151, 149, 156, 155, 156, 156, 156, 162, 160, 156, 160, 162, 160, 160, 155, - 155, 160, 156, 160, 158, 153, 156, 151, 149, 151, 147, 147, 147, 141, 135, 131, - 127, 156, 206, 219, 228, 228, 225, 221, 218, 218, 221, 221, 221, 222, 221, 221, - 219, 219, 216, 216, 212, 213, 212, 210, 209, 203, 190, 182, 158, 135, 98, 46, - 23, 26, 32, 32, 41, 32, 20, 43, 29, 41, 63, 91, 96, 103, 117, 123, - 137, 155, 160, 169, 174, 176, 179, 172, 181, 177, 181, 177, 177, 165, 145, 125, - 94, 71, 32, 49, 98, 133, 81, 86, 35, 26, 63, 98, 74, 71, 52, 46, - 66, 52, 86, 46, 38, 26, 43, 12, 38, 181, 129, 143, 55, 57, 74, 63, - 86, 129, 139, 91, 110, 167, 121, 133, 131, 160, 169, 121, 129, 125, 139, 63, - 43, 35, 41, 57, 41, 38, 43, 38, 41, 41, 52, 74, 29, 35, 35, 71, - 41, 35, 35, 43, 43, 38, 35, 41, 23, 35, 46, 41, 49, 49, 38, 49, - 55, 57, 41, 41, 49, 63, 60, 43, 29, 20, 20, 41, 43, 49, 52, 55, - 46, 60, 84, 84, 108, 117, 117, 114, 131, 129, 137, 145, 147, 149, 155, 162, - 167, 164, 164, 149, 153, 153, 158, 143, 139, 137, 135, 84, 23, 29, 46, 41, - 52, 43, 46, 52, 41, 32, 43, 52, 35, 41, 38, 29, 41, 57, 46, 96, - 103, 81, 68, 71, 63, 81, 76, 86, 35, 89, 43, 26, 153, 179, 158, 162, - 151, 141, 135, 139, 147, 149, 149, 151, 151, 153, 158, 164, 160, 160, 167, 155, - 164, 158, 156, 158, 160, 158, 155, 151, 149, 151, 151, 145, 147, 137, 133, 127, - 129, 174, 209, 221, 227, 227, 222, 221, 218, 219, 219, 219, 221, 219, 221, 218, - 218, 215, 215, 213, 212, 209, 204, 200, 193, 176, 149, 105, 49, 35, 35, 23, - 32, 32, 26, 35, 23, 20, 29, 43, 18, 52, 52, 91, 94, 81, 112, 127, - 135, 149, 160, 167, 176, 179, 177, 174, 177, 179, 184, 179, 169, 162, 145, 123, - 94, 46, 55, 108, 185, 153, 98, 172, 32, 26, 35, 76, 66, 49, 57, 49, - 35, 68, 49, 32, 43, 35, 29, 18, 29, 176, 151, 169, 91, 76, 101, 57, - 57, 125, 123, 114, 74, 149, 94, 141, 155, 179, 156, 149, 164, 185, 165, 143, - 49, 35, 35, 38, 49, 41, 49, 46, 38, 63, 57, 68, 38, 26, 29, 89, - 35, 32, 38, 32, 43, 41, 35, 38, 32, 32, 41, 29, 43, 52, 52, 57, - 49, 49, 52, 38, 38, 57, 71, 60, 57, 41, 38, 49, 38, 49, 52, 66, - 91, 74, 89, 96, 96, 105, 114, 110, 123, 121, 125, 133, 145, 143, 145, 153, - 162, 162, 158, 145, 137, 149, 145, 133, 133, 133, 123, 84, 52, 41, 43, 41, - 49, 52, 49, 60, 43, 49, 43, 55, 46, 41, 26, 41, 29, 57, 46, 89, - 112, 74, 81, 79, 68, 63, 71, 96, 52, 63, 57, 41, 149, 185, 158, 153, - 145, 133, 114, 125, 127, 141, 139, 137, 147, 143, 153, 151, 156, 155, 153, 155, - 158, 160, 156, 160, 156, 156, 155, 149, 153, 145, 143, 143, 139, 131, 129, 123, - 129, 190, 213, 221, 227, 224, 221, 218, 218, 219, 219, 218, 219, 219, 216, 216, - 216, 215, 212, 209, 206, 198, 185, 165, 139, 91, 43, 20, 12, 23, 26, 20, - 26, 29, 32, 26, 20, 20, 26, 23, 18, 32, 63, 79, 89, 89, 94, 121, - 141, 149, 164, 169, 177, 181, 174, 176, 176, 181, 179, 174, 169, 162, 141, 114, - 81, 57, 123, 210, 172, 63, 60, 162, 41, 23, 20, 68, 91, 35, 38, 63, - 43, 68, 49, 41, 29, 32, 26, 20, 32, 165, 145, 164, 151, 81, 84, 60, - 38, 91, 155, 131, 57, 114, 141, 79, 156, 162, 158, 129, 68, 117, 162, 174, - 117, 57, 35, 23, 32, 43, 35, 35, 35, 76, 63, 68, 35, 23, 35, 63, - 41, 35, 38, 29, 43, 46, 23, 38, 35, 20, 38, 35, 41, 46, 49, 52, - 57, 43, 46, 46, 35, 57, 76, 71, 52, 60, 76, 108, 105, 105, 112, 129, - 117, 131, 129, 141, 131, 131, 135, 143, 133, 147, 143, 169, 156, 165, 160, 164, - 167, 171, 172, 174, 177, 177, 177, 162, 165, 171, 153, 112, 66, 57, 46, 46, - 66, 55, 55, 43, 49, 43, 46, 55, 46, 38, 29, 29, 26, 66, 43, 91, - 121, 74, 84, 76, 74, 71, 81, 79, 55, 63, 49, 46, 158, 182, 164, 145, - 127, 133, 114, 112, 119, 125, 127, 129, 131, 151, 135, 139, 147, 145, 149, 149, - 151, 156, 162, 160, 155, 155, 155, 149, 155, 147, 143, 145, 141, 135, 123, 125, - 143, 198, 216, 224, 227, 222, 218, 218, 219, 218, 218, 216, 215, 216, 216, 213, - 216, 212, 207, 200, 190, 176, 143, 94, 49, 38, 23, 23, 23, 23, 29, 35, - 35, 52, 43, 35, 32, 18, 26, 20, 26, 35, 55, 66, 71, 63, 96, 125, - 137, 153, 160, 169, 172, 174, 176, 176, 174, 177, 177, 181, 169, 156, 139, 110, - 94, 137, 215, 171, 91, 49, 94, 155, 60, 66, 18, 63, 91, 63, 60, 60, - 63, 38, 38, 55, 35, 35, 32, 35, 43, 158, 129, 121, 167, 98, 74, 76, - 46, 57, 91, 91, 81, 153, 171, 96, 86, 167, 179, 151, 66, 55, 55, 176, - 172, 160, 68, 26, 29, 29, 29, 41, 38, 63, 74, 57, 29, 20, 41, 74, - 35, 26, 23, 29, 35, 38, 26, 32, 32, 26, 35, 35, 38, 43, 49, 38, - 52, 43, 35, 29, 32, 32, 57, 74, 81, 79, 101, 103, 117, 117, 125, 125, - 123, 129, 143, 135, 135, 137, 135, 139, 135, 137, 135, 151, 155, 160, 155, 153, - 151, 158, 156, 160, 164, 160, 172, 176, 185, 195, 203, 203, 190, 155, 96, 66, - 57, 49, 41, 60, 41, 38, 49, 52, 38, 41, 20, 43, 32, 68, 43, 86, - 112, 79, 84, 74, 66, 76, 74, 94, 66, 71, 55, 57, 164, 164, 169, 135, - 117, 125, 119, 101, 114, 110, 114, 127, 125, 125, 114, 129, 129, 133, 135, 141, - 143, 145, 153, 151, 149, 149, 151, 153, 147, 147, 147, 137, 139, 133, 131, 123, - 155, 201, 219, 224, 224, 216, 215, 216, 216, 215, 221, 216, 215, 215, 215, 212, - 212, 207, 200, 184, 176, 145, 98, 41, 23, 38, 32, 55, 23, 32, 57, 52, - 43, 38, 41, 68, 49, 35, 26, 26, 20, 43, 46, 60, 63, 60, 91, 125, - 135, 151, 156, 169, 174, 176, 177, 179, 174, 182, 182, 177, 171, 155, 135, 123, - 160, 222, 167, 52, 76, 57, 84, 89, 20, 29, 23, 52, 101, 71, 43, 55, - 84, 43, 46, 94, 49, 35, 32, 38, 52, 141, 133, 119, 151, 158, 96, 68, - 23, 26, 79, 137, 119, 172, 123, 86, 101, 137, 169, 125, 147, 89, 43, 89, - 182, 185, 165, 60, 38, 41, 43, 41, 43, 57, 84, 49, 41, 38, 49, 96, - 29, 35, 38, 41, 35, 43, 35, 23, 26, 29, 41, 35, 41, 43, 46, 35, - 29, 55, 38, 23, 38, 23, 55, 71, 74, 96, 105, 112, 125, 123, 123, 117, - 125, 125, 127, 131, 131, 137, 135, 133, 139, 139, 147, 151, 151, 156, 155, 149, - 151, 149, 149, 149, 151, 162, 172, 179, 185, 200, 198, 204, 206, 204, 206, 177, - 114, 66, 43, 49, 41, 29, 35, 46, 29, 29, 23, 32, 38, 38, 49, 86, - 119, 66, 81, 71, 60, 71, 71, 86, 63, 74, 60, 49, 169, 158, 165, 127, - 121, 123, 123, 112, 112, 117, 112, 121, 110, 117, 117, 121, 117, 125, 121, 125, - 131, 139, 137, 141, 143, 147, 149, 147, 143, 151, 143, 135, 137, 133, 125, 123, - 165, 207, 218, 224, 221, 215, 215, 215, 215, 218, 216, 215, 215, 213, 210, 212, - 206, 201, 193, 181, 155, 117, 57, 29, 20, 18, 18, 35, 46, 57, 71, 71, - 55, 52, 71, 60, 43, 32, 35, 29, 23, 23, 43, 66, 57, 63, 81, 114, - 127, 139, 155, 164, 174, 176, 176, 174, 171, 172, 179, 171, 167, 160, 141, 160, - 212, 108, 32, 71, 66, 32, 171, 35, 20, 26, 12, 46, 91, 66, 60, 52, - 63, 29, 41, 63, 89, 52, 26, 38, 49, 86, 143, 143, 108, 147, 149, 74, - 32, 52, 91, 141, 162, 177, 60, 105, 86, 103, 129, 143, 79, 119, 71, 74, - 145, 141, 177, 167, 43, 29, 32, 43, 71, 57, 96, 43, 35, 26, 46, 79, - 41, 32, 43, 41, 29, 35, 46, 46, 26, 41, 43, 52, 46, 35, 49, 55, - 43, 41, 35, 52, 26, 38, 66, 79, 74, 94, 114, 114, 127, 127, 123, 114, - 121, 125, 135, 127, 129, 133, 135, 131, 129, 137, 139, 145, 153, 149, 141, 143, - 145, 141, 139, 143, 149, 162, 177, 177, 190, 200, 203, 204, 204, 204, 210, 212, - 212, 187, 121, 71, 57, 49, 43, 46, 52, 38, 46, 55, 41, 55, 86, 89, - 123, 66, 74, 81, 60, 79, 68, 86, 66, 76, 79, 63, 185, 151, 153, 133, - 133, 139, 129, 137, 119, 125, 114, 117, 119, 117, 114, 117, 114, 114, 112, 114, - 114, 114, 125, 123, 127, 133, 127, 133, 141, 141, 139, 137, 133, 133, 125, 121, - 174, 206, 216, 222, 219, 213, 213, 213, 215, 218, 215, 213, 215, 216, 210, 206, - 198, 197, 182, 165, 123, 66, 26, 15, 29, 35, 43, 46, 63, 79, 79, 66, - 94, 79, 63, 68, 46, 32, 41, 41, 35, 32, 55, 63, 38, 38, 71, 98, - 121, 141, 156, 167, 177, 176, 171, 171, 176, 174, 179, 176, 171, 160, 185, 212, - 117, 57, 38, 63, 38, 105, 179, 38, 23, 26, 15, 43, 91, 71, 26, 41, - 52, 41, 49, 60, 108, 63, 52, 57, 43, 41, 71, 143, 135, 79, 145, 147, - 133, 129, 129, 171, 185, 98, 79, 79, 133, 89, 96, 141, 137, 60, 101, 121, - 174, 125, 86, 184, 139, 57, 32, 41, 43, 52, 74, 32, 20, 23, 49, 94, - 41, 29, 46, 32, 32, 26, 43, 35, 29, 46, 41, 23, 43, 32, 52, 49, - 43, 41, 46, 35, 43, 32, 55, 76, 84, 96, 101, 121, 121, 121, 114, 121, - 114, 119, 119, 127, 127, 131, 129, 135, 135, 137, 137, 147, 141, 135, 143, 139, - 141, 143, 141, 151, 151, 169, 176, 184, 193, 198, 200, 204, 206, 204, 207, 209, - 209, 209, 207, 193, 131, 60, 41, 26, 41, 20, 41, 23, 35, 38, 79, 68, - 125, 57, 68, 76, 66, 74, 76, 74, 57, 74, 68, 68, 189, 155, 151, 131, - 137, 143, 137, 139, 137, 131, 131, 125, 129, 114, 114, 105, 110, 103, 112, 108, - 105, 110, 112, 119, 117, 125, 123, 123, 125, 121, 125, 123, 131, 121, 117, 123, - 172, 207, 215, 218, 213, 212, 213, 213, 215, 216, 218, 215, 216, 215, 212, 204, - 193, 182, 155, 114, 60, 12, 18, 26, 41, 49, 49, 60, 74, 81, 81, 91, - 131, 125, 101, 94, 76, 66, 55, 41, 35, 35, 41, 35, 32, 29, 49, 81, - 110, 133, 155, 165, 171, 171, 172, 169, 176, 177, 172, 179, 184, 193, 176, 125, - 101, 63, 57, 91, 81, 165, 84, 29, 35, 38, 23, 23, 46, 84, 49, 66, - 26, 29, 41, 49, 112, 79, 68, 52, 79, 29, 18, 125, 147, 125, 89, 57, - 96, 133, 135, 176, 147, 52, 79, 112, 71, 123, 119, 112, 127, 103, 127, 160, - 207, 129, 91, 63, 193, 89, 23, 26, 29, 49, 81, 41, 29, 41, 43, 91, - 29, 32, 38, 23, 35, 23, 32, 38, 35, 26, 41, 29, 38, 38, 52, 52, - 43, 43, 35, 41, 46, 32, 46, 63, 74, 103, 117, 119, 103, 121, 117, 121, - 121, 117, 119, 123, 139, 135, 129, 129, 135, 133, 133, 139, 133, 139, 135, 135, - 139, 141, 141, 147, 153, 169, 176, 187, 192, 195, 203, 203, 206, 206, 207, 207, - 209, 207, 209, 212, 212, 193, 129, 57, 38, 23, 26, 18, 23, 32, 76, 68, - 123, 52, 76, 71, 63, 71, 76, 66, 49, 66, 63, 76, 187, 156, 151, 131, - 139, 145, 137, 139, 151, 133, 133, 131, 131, 119, 117, 110, 112, 105, 105, 94, - 96, 101, 96, 89, 98, 105, 105, 105, 103, 110, 110, 112, 110, 101, 108, 98, - 169, 201, 213, 216, 213, 210, 209, 213, 215, 215, 215, 215, 215, 215, 212, 201, - 187, 160, 94, 32, 26, 29, 32, 46, 46, 55, 55, 76, 71, 68, 79, 79, - 139, 137, 137, 117, 94, 84, 76, 60, 46, 55, 46, 29, 29, 29, 52, 76, - 103, 133, 151, 162, 172, 172, 176, 179, 177, 172, 177, 193, 195, 165, 155, 125, - 103, 66, 71, 121, 193, 96, 29, 18, 23, 23, 20, 29, 26, 57, 101, 121, - 6, 18, 35, 41, 127, 101, 74, 57, 117, 15, 12, 46, 145, 143, 129, 89, - 74, 101, 84, 155, 46, 110, 103, 103, 103, 105, 137, 121, 121, 121, 119, 101, - 189, 79, 86, 76, 76, 164, 38, 32, 35, 46, 86, 38, 32, 15, 46, 96, - 29, 29, 32, 23, 38, 32, 38, 41, 43, 35, 32, 26, 35, 46, 38, 52, - 38, 63, 52, 32, 41, 29, 35, 68, 86, 101, 103, 108, 114, 121, 114, 119, - 117, 121, 125, 123, 129, 131, 125, 127, 133, 137, 139, 131, 145, 139, 137, 137, - 147, 141, 147, 153, 160, 176, 182, 190, 193, 200, 200, 203, 201, 203, 207, 206, - 209, 209, 207, 210, 209, 213, 215, 185, 98, 49, 23, 18, 18, 38, 66, 91, - 114, 55, 68, 68, 66, 66, 71, 66, 55, 63, 74, 91, 182, 153, 153, 135, - 151, 147, 143, 145, 143, 143, 143, 141, 139, 131, 139, 131, 123, 112, 117, 105, - 108, 96, 98, 96, 96, 101, 96, 86, 98, 94, 114, 119, 105, 91, 71, 86, - 149, 201, 213, 215, 213, 210, 212, 215, 216, 213, 215, 212, 213, 209, 203, 189, - 165, 105, 20, 23, 23, 55, 49, 57, 55, 71, 74, 79, 74, 71, 74, 74, - 153, 145, 139, 149, 123, 112, 89, 79, 63, 71, 63, 41, 35, 26, 52, 84, - 103, 135, 155, 162, 167, 171, 171, 172, 172, 169, 181, 181, 176, 164, 147, 123, - 96, 76, 131, 81, 218, 41, 32, 29, 23, 35, 29, 26, 23, 43, 79, 137, - 15, 18, 20, 35, 131, 117, 68, 76, 131, 41, 32, 20, 52, 137, 143, 153, - 110, 94, 127, 162, 60, 46, 135, 119, 110, 131, 68, 167, 125, 131, 143, 135, - 149, 179, 76, 26, 108, 108, 137, 38, 35, 49, 76, 41, 26, 18, 49, 71, - 41, 35, 52, 26, 41, 26, 43, 46, 43, 49, 49, 35, 41, 41, 43, 41, - 60, 66, 55, 35, 46, 35, 43, 66, 101, 98, 105, 105, 110, 117, 114, 121, - 125, 123, 131, 129, 125, 135, 127, 135, 129, 139, 135, 131, 135, 137, 135, 139, - 139, 147, 151, 164, 164, 171, 177, 190, 193, 197, 200, 197, 197, 200, 206, 204, - 206, 207, 207, 207, 209, 212, 215, 215, 210, 149, 49, 26, 20, 46, 57, 89, - 105, 55, 63, 63, 66, 63, 60, 43, 68, 55, 60, 103, 172, 149, 141, 143, - 153, 156, 145, 151, 147, 151, 145, 141, 137, 141, 141, 137, 129, 129, 127, 117, - 114, 112, 101, 96, 101, 96, 98, 89, 89, 98, 123, 121, 117, 94, 68, 76, - 151, 203, 213, 215, 213, 209, 213, 218, 216, 213, 215, 212, 210, 200, 187, 162, - 117, 55, 23, 41, 57, 71, 71, 66, 71, 63, 76, 84, 74, 74, 84, 84, - 153, 149, 155, 149, 143, 129, 114, 96, 84, 81, 74, 60, 29, 20, 49, 74, - 103, 133, 156, 165, 169, 174, 176, 174, 172, 176, 177, 177, 172, 165, 149, 125, - 105, 114, 169, 108, 167, 32, 20, 32, 23, 29, 26, 26, 55, 98, 89, 110, - 20, 15, 15, 55, 149, 101, 66, 119, 66, 38, 32, 26, 105, 94, 43, 91, - 117, 131, 149, 76, 57, 84, 57, 143, 125, 121, 96, 119, 179, 125, 143, 129, - 103, 141, 165, 38, 35, 101, 179, 63, 46, 55, 46, 43, 29, 32, 41, 66, - 29, 38, 46, 41, 49, 38, 35, 41, 52, 68, 38, 38, 26, 43, 38, 41, - 49, 60, 79, 43, 41, 35, 41, 81, 84, 91, 117, 114, 105, 108, 110, 114, - 117, 125, 117, 119, 131, 129, 131, 137, 135, 139, 141, 135, 135, 127, 135, 141, - 141, 145, 155, 158, 171, 179, 182, 187, 192, 198, 197, 197, 193, 201, 203, 201, - 204, 206, 207, 210, 209, 212, 213, 213, 218, 216, 177, 68, 35, 23, 43, 43, - 101, 63, 74, 76, 66, 76, 89, 63, 66, 43, 57, 121, 167, 153, 137, 147, - 153, 153, 155, 155, 149, 149, 141, 149, 141, 141, 141, 139, 137, 135, 133, 127, - 129, 121, 117, 105, 103, 114, 94, 79, 108, 103, 135, 131, 112, 108, 63, 74, - 160, 203, 215, 215, 213, 212, 218, 219, 218, 216, 215, 213, 203, 176, 141, 84, - 26, 18, 38, 55, 71, 74, 71, 79, 79, 79, 79, 79, 91, 79, 74, 68, - 149, 139, 155, 155, 156, 145, 135, 119, 96, 98, 79, 68, 26, 18, 41, 74, - 110, 131, 149, 164, 169, 176, 172, 172, 174, 174, 179, 174, 171, 158, 141, 121, - 149, 153, 105, 129, 84, 23, 32, 32, 32, 20, 15, 18, 26, 105, 143, 135, - 114, 91, 108, 147, 114, 49, 57, 60, 81, 32, 29, 98, 127, 46, 46, 84, - 145, 121, 79, 52, 84, 76, 84, 79, 127, 133, 121, 145, 151, 153, 137, 158, - 46, 43, 135, 135, 35, 38, 105, 158, 35, 49, 57, 46, 43, 29, 57, 66, - 46, 46, 52, 41, 41, 29, 52, 49, 46, 60, 46, 43, 38, 35, 52, 55, - 60, 38, 74, 60, 38, 49, 29, 86, 89, 94, 105, 108, 112, 108, 110, 125, - 121, 117, 121, 123, 127, 133, 135, 141, 143, 141, 133, 127, 129, 133, 137, 141, - 145, 151, 160, 165, 167, 172, 177, 184, 189, 197, 193, 195, 197, 197, 198, 201, - 201, 204, 209, 209, 209, 210, 212, 210, 213, 216, 219, 195, 79, 35, 32, 29, - 96, 52, 63, 60, 43, 57, 68, 63, 55, 29, 66, 141, 155, 149, 143, 158, - 155, 156, 156, 155, 155, 149, 147, 153, 151, 145, 145, 143, 145, 139, 145, 135, - 133, 123, 123, 125, 119, 110, 108, 96, 91, 110, 129, 139, 119, 94, 68, 94, - 165, 207, 215, 218, 216, 218, 218, 219, 218, 216, 215, 212, 193, 149, 76, 60, - 15, 35, 71, 76, 84, 71, 68, 63, 71, 81, 81, 98, 79, 79, 63, 74, - 141, 139, 155, 160, 167, 162, 151, 137, 121, 110, 86, 63, 38, 20, 35, 76, - 112, 137, 153, 165, 169, 176, 176, 174, 176, 177, 177, 179, 172, 160, 141, 125, - 200, 207, 55, 94, 79, 43, 38, 23, 20, 23, 35, 20, 23, 52, 63, 68, - 96, 127, 133, 101, 68, 81, 52, 52, 66, 49, 108, 143, 52, 29, 52, 137, - 89, 46, 68, 43, 46, 79, 105, 76, 105, 125, 137, 147, 145, 143, 155, 156, - 112, 23, 49, 192, 101, 26, 89, 192, 60, 52, 41, 32, 38, 38, 41, 66, - 60, 32, 38, 41, 41, 26, 32, 38, 55, 49, 49, 46, 35, 38, 49, 43, - 68, 49, 81, 91, 46, 26, 32, 84, 68, 105, 108, 108, 110, 119, 114, 123, - 119, 119, 131, 133, 127, 129, 137, 137, 135, 135, 143, 135, 137, 137, 137, 141, - 147, 156, 160, 167, 165, 172, 172, 181, 185, 190, 190, 190, 198, 198, 197, 197, - 198, 203, 204, 209, 207, 209, 210, 213, 215, 216, 218, 219, 201, 79, 32, 29, - 86, 49, 43, 66, 49, 63, 76, 49, 49, 18, 35, 141, 155, 155, 139, 155, - 153, 158, 155, 153, 153, 147, 155, 155, 155, 153, 145, 145, 147, 141, 143, 135, - 139, 135, 131, 129, 121, 127, 137, 105, 117, 121, 137, 141, 123, 96, 74, 121, - 185, 212, 219, 218, 218, 218, 219, 219, 216, 215, 210, 206, 172, 123, 43, 20, - 52, 74, 84, 89, 84, 76, 74, 71, 96, 98, 98, 94, 91, 76, 76, 86, - 135, 147, 151, 158, 167, 165, 164, 153, 141, 123, 103, 60, 46, 20, 38, 74, - 105, 131, 158, 167, 176, 174, 179, 174, 179, 176, 181, 177, 169, 160, 137, 137, - 219, 179, 84, 57, 46, 52, 46, 29, 23, 26, 20, 23, 38, 81, 43, 20, - 38, 76, 52, 55, 49, 38, 46, 81, 110, 123, 114, 68, 29, 15, 84, 172, - 38, 41, 55, 86, 57, 55, 108, 110, 89, 91, 123, 145, 145, 143, 181, 147, - 176, 35, 18, 151, 203, 46, 96, 103, 135, 41, 29, 32, 38, 35, 46, 76, - 46, 41, 41, 41, 46, 49, 35, 29, 46, 55, 43, 35, 38, 38, 46, 55, - 41, 60, 84, 89, 55, 26, 38, 68, 60, 110, 110, 105, 114, 127, 123, 103, - 110, 127, 131, 135, 129, 131, 127, 131, 129, 137, 137, 133, 131, 135, 137, 145, - 155, 153, 162, 167, 162, 169, 172, 177, 182, 187, 185, 192, 192, 192, 195, 195, - 198, 203, 203, 203, 206, 210, 212, 209, 213, 213, 218, 219, 221, 201, 76, 41, - 76, 57, 60, 63, 52, 74, 81, 68, 52, 26, 43, 153, 149, 158, 145, 158, - 164, 160, 153, 153, 151, 151, 162, 153, 156, 151, 147, 149, 143, 143, 149, 147, - 139, 137, 141, 135, 129, 129, 131, 117, 121, 129, 137, 139, 117, 112, 89, 143, - 198, 210, 219, 219, 218, 218, 221, 218, 218, 212, 204, 193, 155, 81, 23, 23, - 63, 74, 91, 81, 76, 71, 71, 89, 103, 101, 98, 91, 86, 91, 79, 98, - 141, 133, 139, 156, 167, 169, 167, 162, 143, 145, 119, 84, 52, 15, 38, 71, - 105, 131, 153, 165, 176, 182, 182, 177, 174, 181, 184, 172, 167, 164, 147, 156, - 222, 137, 149, 174, 15, 20, 18, 35, 49, 46, 38, 41, 52, 74, 55, 29, - 43, 101, 57, 41, 55, 57, 60, 41, 52, 41, 35, 35, 35, 26, 89, 160, - 76, 23, 46, 86, 76, 68, 63, 119, 91, 79, 94, 137, 160, 139, 156, 151, - 164, 121, 38, 60, 171, 160, 129, 55, 198, 43, 41, 32, 46, 43, 52, 66, - 41, 43, 41, 52, 52, 43, 52, 55, 55, 60, 46, 43, 46, 49, 55, 68, - 46, 66, 91, 98, 81, 41, 23, 49, 68, 112, 108, 114, 108, 114, 108, 105, - 129, 123, 127, 131, 131, 131, 129, 133, 137, 137, 133, 135, 133, 143, 145, 145, - 155, 156, 165, 165, 165, 174, 171, 171, 181, 182, 185, 182, 187, 193, 195, 197, - 200, 200, 201, 206, 209, 207, 212, 213, 215, 216, 215, 218, 221, 222, 193, 49, - 43, 52, 29, 49, 35, 55, 57, 68, 71, 23, 43, 171, 143, 155, 143, 156, - 155, 156, 156, 156, 155, 149, 155, 149, 149, 151, 147, 145, 145, 149, 149, 143, - 139, 141, 139, 137, 135, 137, 129, 131, 125, 131, 133, 137, 131, 110, 108, 165, - 204, 216, 219, 221, 218, 219, 216, 221, 215, 210, 198, 176, 139, 57, 38, 41, - 79, 81, 79, 86, 94, 84, 76, 96, 103, 112, 103, 89, 89, 76, 81, 89, - 108, 114, 135, 149, 155, 160, 167, 169, 158, 160, 137, 103, 55, 20, 32, 81, - 105, 131, 153, 167, 182, 176, 181, 182, 182, 177, 184, 177, 171, 162, 145, 137, - 215, 103, 74, 207, 15, 20, 26, 32, 41, 43, 26, 38, 79, 63, 60, 41, - 41, 46, 38, 32, 66, 94, 68, 49, 38, 26, 26, 57, 43, 29, 41, 86, - 127, 38, 41, 66, 57, 63, 68, 76, 127, 98, 76, 127, 156, 143, 145, 137, - 112, 141, 125, 96, 129, 165, 94, 35, 185, 86, 35, 41, 32, 29, 46, 63, - 60, 46, 38, 49, 41, 29, 29, 43, 52, 63, 35, 52, 35, 38, 41, 60, - 55, 66, 101, 103, 86, 46, 18, 49, 57, 119, 110, 112, 110, 108, 123, 125, - 127, 123, 129, 131, 131, 135, 133, 135, 145, 129, 137, 141, 137, 141, 149, 147, - 151, 162, 164, 162, 167, 169, 171, 172, 182, 176, 179, 182, 184, 184, 190, 189, - 195, 198, 198, 203, 206, 210, 209, 209, 210, 215, 218, 218, 219, 222, 224, 177, - 32, 41, 18, 29, 41, 68, 43, 57, 63, 29, 57, 179, 143, 143, 149, 160, - 156, 160, 158, 160, 155, 151, 151, 149, 155, 153, 147, 151, 147, 149, 147, 141, - 141, 141, 131, 139, 133, 135, 131, 135, 127, 131, 141, 139, 127, 114, 127, 184, - 209, 219, 219, 219, 218, 221, 221, 221, 215, 206, 187, 155, 119, 57, 46, 74, - 94, 94, 79, 86, 86, 81, 89, 103, 114, 110, 101, 94, 86, 81, 96, 101, - 66, 76, 117, 137, 151, 167, 176, 177, 174, 171, 147, 117, 63, 18, 38, 79, - 105, 135, 158, 167, 181, 181, 181, 179, 176, 182, 187, 174, 172, 160, 145, 137, - 169, 114, 55, 91, 20, 18, 38, 32, 26, 38, 35, 29, 66, 41, 46, 55, - 23, 41, 29, 26, 76, 105, 57, 57, 43, 20, 29, 49, 94, 32, 23, 55, - 121, 110, 32, 49, 76, 74, 66, 66, 108, 127, 86, 123, 167, 137, 143, 151, - 123, 158, 108, 108, 71, 110, 190, 26, 121, 172, 15, 20, 29, 20, 49, 63, - 46, 41, 41, 26, 46, 32, 35, 35, 55, 68, 43, 38, 32, 23, 43, 68, - 66, 68, 98, 117, 103, 46, 32, 29, 79, 103, 101, 105, 101, 117, 129, 125, - 119, 131, 131, 135, 137, 133, 139, 133, 131, 131, 129, 133, 143, 139, 141, 149, - 149, 151, 164, 160, 160, 165, 167, 172, 177, 182, 176, 184, 184, 185, 189, 190, - 193, 197, 201, 203, 207, 209, 209, 212, 213, 215, 215, 218, 221, 221, 222, 224, - 137, 46, 26, 20, 29, 57, 29, 43, 43, 18, 49, 182, 143, 149, 153, 156, - 156, 156, 158, 156, 156, 153, 155, 149, 147, 155, 151, 149, 147, 149, 149, 145, - 141, 145, 139, 143, 133, 135, 133, 135, 129, 135, 143, 139, 131, 121, 135, 198, - 213, 219, 221, 219, 221, 219, 218, 218, 212, 200, 167, 133, 81, 55, 68, 79, - 94, 84, 79, 84, 84, 94, 103, 108, 110, 110, 94, 86, 81, 79, 94, 101, - 38, 43, 101, 127, 147, 162, 179, 177, 177, 167, 149, 131, 84, 18, 35, 74, - 101, 137, 158, 169, 182, 181, 177, 179, 182, 182, 184, 177, 174, 156, 160, 141, - 203, 131, 68, 52, 23, 23, 23, 23, 26, 43, 32, 55, 76, 35, 52, 41, - 41, 26, 32, 35, 98, 112, 35, 76, 60, 20, 26, 43, 129, 38, 35, 35, - 96, 86, 105, 35, 63, 74, 71, 71, 60, 127, 94, 131, 131, 127, 129, 164, - 135, 179, 155, 145, 46, 52, 207, 86, 81, 216, 32, 18, 29, 32, 41, 57, - 55, 46, 41, 41, 46, 29, 41, 49, 55, 60, 41, 52, 41, 23, 43, 66, - 49, 71, 103, 114, 96, 60, 23, 35, 79, 89, 89, 89, 125, 125, 135, 125, - 121, 127, 135, 129, 135, 127, 137, 131, 137, 131, 133, 137, 137, 141, 141, 147, - 153, 153, 158, 164, 158, 162, 165, 167, 171, 179, 174, 182, 187, 184, 187, 197, - 193, 197, 195, 201, 203, 203, 209, 207, 212, 213, 212, 218, 218, 218, 224, 225, - 218, 81, 35, 26, 29, 52, 23, 41, 52, 20, 71, 177, 139, 143, 149, 155, - 153, 156, 158, 155, 153, 153, 153, 158, 156, 151, 155, 149, 151, 155, 149, 143, - 137, 147, 143, 137, 137, 137, 139, 133, 133, 139, 145, 147, 143, 135, 156, 201, - 216, 224, 221, 218, 219, 219, 219, 216, 212, 197, 155, 103, 57, 57, 76, 96, - 86, 81, 98, 86, 96, 105, 110, 119, 112, 96, 89, 91, 84, 101, 96, 103, - 18, 29, 76, 121, 139, 167, 179, 179, 182, 172, 158, 137, 84, 20, 29, 76, - 105, 139, 160, 169, 174, 181, 185, 182, 181, 184, 184, 176, 171, 165, 147, 137, - 219, 112, 60, 101, 18, 15, 35, 23, 23, 46, 32, 84, 41, 41, 32, 71, - 38, 38, 20, 35, 105, 112, 35, 55, 52, 26, 23, 20, 103, 81, 32, 26, - 114, 52, 84, 98, 32, 101, 98, 86, 57, 94, 103, 129, 94, 112, 119, 149, - 131, 181, 174, 123, 26, 20, 86, 153, 79, 219, 29, 15, 15, 18, 43, 49, - 57, 55, 32, 38, 35, 26, 23, 32, 66, 60, 43, 43, 57, 26, 23, 41, - 35, 86, 110, 123, 110, 71, 9, 15, 63, 98, 96, 110, 112, 123, 131, 127, - 133, 127, 133, 129, 127, 131, 135, 137, 139, 137, 139, 133, 133, 137, 141, 147, - 153, 153, 156, 158, 160, 165, 164, 167, 172, 171, 182, 179, 184, 181, 189, 190, - 193, 197, 195, 203, 203, 206, 204, 209, 209, 213, 212, 215, 218, 219, 219, 227, - 227, 192, 35, 18, 23, 49, 23, 32, 32, 15, 91, 171, 145, 147, 151, 158, - 162, 151, 156, 153, 153, 153, 153, 147, 151, 155, 149, 147, 153, 147, 147, 145, - 143, 153, 143, 145, 135, 143, 133, 133, 131, 135, 135, 141, 141, 139, 176, 206, - 218, 222, 221, 218, 221, 218, 218, 215, 210, 189, 139, 76, 60, 68, 76, 91, - 79, 89, 96, 86, 96, 108, 110, 108, 91, 84, 94, 89, 91, 96, 101, 98, - 12, 20, 35, 76, 123, 164, 185, 184, 184, 176, 160, 145, 96, 18, 23, 66, - 105, 139, 156, 169, 177, 182, 181, 179, 181, 185, 184, 182, 172, 167, 147, 129, - 135, 162, 68, 129, 15, 15, 46, 32, 26, 35, 41, 84, 43, 26, 38, 41, - 35, 35, 23, 35, 119, 123, 23, 41, 49, 29, 23, 15, 49, 98, 66, 18, - 105, 60, 46, 105, 86, 74, 105, 110, 94, 55, 84, 127, 94, 119, 143, 112, - 141, 158, 182, 129, 43, 12, 23, 149, 76, 227, 38, 41, 29, 20, 49, 60, - 46, 63, 32, 35, 26, 26, 38, 41, 38, 91, 32, 41, 35, 29, 41, 41, - 55, 94, 114, 112, 96, 71, 18, 20, 55, 103, 110, 101, 121, 125, 131, 121, - 129, 125, 123, 129, 135, 139, 135, 129, 135, 137, 137, 147, 137, 143, 141, 149, - 143, 147, 151, 156, 165, 164, 169, 171, 167, 172, 179, 181, 185, 182, 189, 187, - 192, 198, 200, 200, 203, 203, 207, 209, 209, 212, 213, 215, 213, 218, 222, 227, - 227, 222, 108, 26, 18, 29, 15, 41, 18, 12, 105, 158, 139, 145, 156, 162, - 153, 155, 153, 153, 153, 151, 153, 151, 145, 149, 147, 145, 151, 147, 149, 147, - 147, 149, 145, 143, 139, 135, 137, 129, 123, 135, 145, 156, 169, 171, 190, 206, - 219, 222, 219, 222, 221, 216, 215, 215, 206, 171, 108, 66, 71, 76, 86, 76, - 91, 89, 103, 105, 101, 112, 98, 98, 76, 79, 86, 98, 94, 101, 105, 108, - 6, 9, 32, 46, 112, 160, 182, 182, 184, 176, 167, 139, 103, 15, 15, 52, - 114, 139, 156, 165, 177, 184, 182, 179, 177, 179, 182, 185, 172, 167, 151, 135, - 98, 212, 63, 52, 23, 26, 29, 20, 38, 43, 74, 41, 26, 29, 41, 35, - 29, 35, 32, 29, 125, 123, 26, 35, 84, 52, 23, 12, 29, 26, 98, 89, - 57, 71, 29, 79, 91, 86, 98, 127, 125, 119, 57, 94, 89, 110, 160, 129, - 164, 165, 158, 52, 74, 12, 38, 145, 133, 225, 71, 12, 26, 20, 46, 63, - 43, 71, 43, 26, 38, 29, 41, 41, 49, 60, 38, 43, 41, 26, 32, 32, - 79, 84, 94, 110, 101, 86, 32, 18, 63, 94, 114, 114, 119, 119, 123, 119, - 127, 131, 121, 119, 131, 129, 145, 135, 143, 135, 139, 133, 149, 147, 149, 149, - 143, 149, 155, 155, 158, 167, 167, 162, 171, 174, 179, 177, 179, 184, 189, 185, - 192, 197, 197, 200, 204, 203, 207, 207, 210, 212, 215, 213, 216, 219, 222, 221, - 224, 227, 200, 26, 18, 26, 12, 29, 9, 18, 139, 158, 133, 149, 156, 156, - 151, 153, 153, 155, 156, 153, 156, 155, 147, 153, 149, 147, 145, 141, 149, 149, - 145, 141, 143, 141, 133, 139, 127, 127, 135, 137, 158, 171, 185, 195, 207, 213, - 219, 221, 221, 219, 219, 219, 215, 212, 195, 153, 94, 68, 81, 91, 86, 79, - 84, 96, 101, 108, 110, 114, 101, 84, 81, 86, 76, 98, 98, 103, 101, 96, - 20, 20, 26, 43, 117, 164, 181, 185, 187, 184, 174, 153, 89, 12, 20, 46, - 103, 143, 155, 167, 182, 182, 182, 184, 179, 182, 184, 181, 177, 167, 156, 133, - 96, 127, 121, 29, 23, 29, 38, 26, 35, 52, 52, 49, 35, 41, 41, 43, - 23, 35, 26, 43, 143, 125, 23, 32, 98, 41, 18, 23, 68, 26, 55, 94, - 98, 98, 26, 74, 49, 112, 68, 123, 121, 114, 76, 79, 79, 91, 162, 176, - 158, 169, 164, 49, 26, 81, 29, 114, 182, 219, 41, 12, 15, 12, 63, 46, - 38, 86, 32, 32, 41, 20, 26, 43, 38, 60, 38, 32, 49, 57, 41, 38, - 81, 103, 108, 94, 86, 81, 35, 41, 74, 89, 117, 114, 123, 119, 119, 112, - 127, 123, 129, 129, 139, 133, 137, 131, 135, 137, 133, 139, 139, 149, 141, 139, - 151, 149, 151, 155, 151, 160, 160, 162, 167, 169, 176, 176, 179, 187, 181, 189, - 193, 193, 197, 198, 204, 203, 207, 209, 209, 215, 213, 218, 215, 216, 218, 222, - 224, 225, 224, 98, 18, 23, 18, 20, 9, 18, 156, 155, 137, 147, 162, 156, - 153, 149, 160, 156, 153, 156, 158, 149, 149, 149, 155, 151, 141, 147, 141, 147, - 145, 137, 141, 141, 135, 129, 129, 125, 131, 160, 177, 190, 198, 204, 210, 216, - 222, 224, 222, 221, 222, 215, 218, 206, 182, 127, 81, 86, 84, 94, 86, 81, - 94, 94, 103, 110, 110, 108, 98, 86, 81, 94, 94, 110, 103, 98, 91, 105, - 12, 20, 26, 41, 101, 160, 177, 187, 189, 187, 174, 147, 79, 20, 15, 57, - 108, 141, 156, 164, 177, 187, 185, 184, 181, 182, 184, 179, 177, 169, 156, 143, - 110, 103, 190, 32, 38, 35, 35, 35, 52, 60, 32, 43, 32, 32, 43, 35, - 32, 41, 18, 76, 164, 117, 18, 20, 68, 63, 12, 20, 49, 12, 49, 43, - 43, 74, 26, 79, 49, 89, 86, 110, 108, 105, 66, 98, 68, 103, 158, 160, - 162, 133, 182, 108, 15, 63, 20, 108, 200, 207, 32, 15, 26, 18, 71, 71, - 43, 105, 38, 43, 43, 41, 20, 29, 52, 46, 29, 20, 43, 26, 49, 55, - 89, 108, 89, 89, 101, 91, 29, 32, 76, 76, 108, 114, 131, 129, 125, 119, - 127, 129, 133, 135, 131, 131, 133, 129, 135, 137, 139, 135, 139, 137, 143, 145, - 147, 153, 153, 158, 155, 156, 162, 164, 165, 165, 181, 176, 184, 181, 182, 192, - 189, 193, 195, 197, 200, 206, 207, 209, 209, 213, 212, 215, 216, 218, 219, 222, - 224, 225, 225, 189, 12, 12, 9, 18, 6, 26, 155, 160, 153, 155, 158, 160, - 160, 164, 149, 156, 155, 155, 155, 151, 153, 153, 145, 147, 147, 145, 147, 145, - 143, 141, 137, 141, 133, 129, 129, 127, 155, 181, 195, 204, 201, 209, 213, 219, - 221, 221, 222, 219, 219, 215, 210, 197, 156, 96, 86, 89, 84, 89, 86, 96, - 103, 103, 108, 110, 110, 96, 81, 76, 79, 86, 91, 108, 105, 89, 105, 96, - 12, 12, 32, 57, 101, 155, 171, 185, 187, 182, 169, 143, 79, 9, 9, 43, - 103, 143, 155, 171, 179, 182, 181, 179, 182, 187, 189, 185, 177, 167, 156, 135, - 151, 135, 114, 41, 41, 32, 20, 35, 60, 32, 35, 41, 23, 18, 26, 41, - 35, 38, 38, 112, 162, 103, 15, 18, 57, 74, 23, 38, 57, 38, 55, 49, - 18, 35, 57, 41, 86, 63, 117, 94, 129, 94, 94, 84, 52, 105, 153, 158, - 114, 143, 174, 125, 41, 35, 20, 84, 200, 172, 29, 12, 20, 23, 86, 81, - 46, 81, 26, 43, 38, 43, 35, 32, 60, 55, 41, 23, 26, 46, 29, 76, - 84, 79, 86, 112, 117, 89, 35, 32, 101, 89, 108, 121, 123, 121, 117, 121, - 131, 129, 129, 133, 131, 135, 125, 129, 129, 135, 129, 131, 143, 151, 145, 145, - 143, 147, 149, 155, 151, 153, 160, 164, 167, 171, 174, 177, 172, 181, 185, 187, - 187, 192, 197, 198, 200, 203, 203, 204, 210, 212, 212, 215, 218, 216, 218, 221, - 222, 225, 227, 221, 55, 15, 12, 12, 9, 35, 151, 156, 149, 147, 158, 153, - 156, 162, 156, 158, 151, 153, 151, 149, 151, 151, 149, 149, 141, 141, 143, 141, - 141, 143, 135, 135, 127, 137, 123, 141, 184, 203, 209, 209, 209, 210, 213, 221, - 225, 224, 222, 221, 219, 213, 206, 177, 137, 86, 81, 86, 81, 91, 84, 96, - 101, 108, 105, 117, 108, 86, 89, 84, 89, 94, 91, 105, 101, 96, 121, 114, - 12, 12, 6, 29, 94, 151, 167, 179, 182, 185, 172, 149, 94, 15, 15, 43, - 101, 133, 155, 169, 181, 185, 181, 185, 184, 182, 185, 184, 184, 172, 153, 135, - 160, 117, 123, 26, 49, 32, 23, 60, 38, 32, 29, 41, 35, 23, 49, 20, - 20, 23, 46, 137, 151, 84, 18, 35, 26, 63, 26, 52, 46, 41, 43, 52, - 29, 35, 35, 29, 74, 38, 112, 101, 125, 103, 81, 91, 35, 103, 167, 143, - 114, 171, 174, 137, 127, 38, 29, 108, 189, 86, 117, 23, 26, 20, 76, 68, - 57, 68, 38, 43, 23, 35, 35, 29, 43, 41, 49, 38, 32, 49, 35, 66, - 84, 96, 112, 114, 114, 91, 20, 23, 91, 101, 103, 125, 127, 125, 125, 129, - 131, 127, 129, 133, 129, 131, 133, 125, 129, 127, 127, 135, 141, 141, 139, 145, - 139, 147, 149, 151, 156, 153, 160, 162, 164, 169, 167, 172, 177, 181, 181, 181, - 189, 195, 193, 193, 200, 203, 203, 207, 210, 212, 212, 215, 216, 216, 218, 219, - 219, 224, 224, 227, 167, 23, 12, 6, 6, 43, 153, 143, 143, 158, 160, 158, - 158, 158, 156, 156, 158, 158, 151, 153, 147, 149, 149, 143, 145, 139, 145, 143, - 135, 137, 139, 139, 139, 125, 125, 164, 201, 213, 219, 216, 210, 210, 213, 219, - 225, 222, 222, 221, 219, 210, 195, 158, 110, 86, 86, 86, 81, 79, 96, 94, - 101, 110, 105, 110, 98, 91, 84, 84, 94, 103, 101, 105, 101, 91, 105, 103, - 9, 18, 12, 23, 89, 145, 167, 179, 187, 185, 176, 153, 89, 12, 15, 35, - 103, 131, 158, 171, 179, 182, 185, 185, 182, 187, 190, 181, 174, 169, 153, 135, - 143, 141, 29, 20, 43, 20, 38, 49, 29, 20, 23, 29, 20, 15, 32, 20, - 20, 20, 125, 143, 149, 105, 20, 18, 23, 43, 46, 63, 38, 46, 18, 35, - 29, 43, 29, 35, 68, 41, 103, 76, 149, 127, 49, 49, 43, 74, 176, 151, - 149, 171, 108, 57, 167, 121, 112, 182, 164, 84, 209, 60, 20, 29, 68, 63, - 55, 43, 41, 49, 35, 52, 35, 32, 38, 35, 38, 46, 49, 41, 60, 84, - 105, 110, 114, 129, 108, 94, 20, 35, 76, 98, 105, 125, 123, 127, 131, 131, - 129, 131, 135, 127, 127, 131, 129, 133, 133, 127, 129, 135, 137, 141, 143, 141, - 143, 145, 149, 151, 153, 155, 160, 165, 164, 167, 167, 165, 176, 179, 182, 185, - 185, 193, 193, 195, 198, 201, 204, 207, 209, 210, 215, 216, 213, 219, 218, 221, - 219, 221, 227, 227, 209, 15, 6, 6, 6, 74, 147, 145, 139, 171, 158, 160, - 155, 153, 156, 151, 160, 149, 153, 153, 145, 147, 147, 151, 145, 143, 141, 141, - 135, 135, 139, 127, 135, 125, 131, 182, 212, 219, 222, 222, 216, 212, 215, 221, - 224, 222, 224, 221, 216, 206, 184, 137, 98, 86, 84, 84, 79, 89, 86, 103, - 105, 105, 110, 110, 91, 81, 79, 79, 96, 101, 110, 108, 101, 103, 101, 101, - 9, 15, 9, 23, 71, 135, 167, 181, 187, 184, 174, 156, 98, 15, 12, 32, - 105, 135, 158, 167, 182, 184, 184, 184, 182, 184, 187, 187, 177, 167, 158, 137, - 123, 129, 32, 29, 35, 46, 55, 20, 26, 18, 23, 23, 29, 38, 32, 23, - 26, 81, 156, 76, 127, 55, 15, 23, 29, 29, 49, 74, 18, 49, 9, 20, - 32, 43, 46, 23, 57, 55, 41, 41, 119, 147, 60, 60, 84, 101, 153, 155, - 158, 169, 165, 63, 149, 55, 121, 181, 172, 165, 190, 32, 32, 32, 68, 38, - 46, 29, 60, 46, 43, 66, 29, 41, 35, 29, 43, 55, 57, 43, 74, 105, - 114, 117, 117, 112, 117, 79, 26, 68, 91, 105, 110, 114, 127, 119, 133, 135, - 137, 125, 133, 131, 131, 129, 129, 133, 131, 129, 131, 131, 133, 137, 139, 141, - 143, 143, 147, 149, 156, 158, 160, 162, 165, 171, 164, 167, 179, 181, 174, 187, - 187, 192, 193, 195, 198, 200, 201, 206, 209, 213, 212, 215, 213, 218, 216, 219, - 219, 221, 222, 227, 222, 71, 15, 6, 9, 89, 139, 145, 145, 169, 153, 160, - 155, 156, 145, 151, 155, 153, 151, 153, 147, 147, 149, 149, 141, 139, 149, 137, - 141, 135, 131, 133, 123, 123, 133, 193, 216, 224, 225, 222, 216, 216, 219, 222, - 224, 224, 224, 219, 213, 197, 162, 119, 91, 86, 84, 86, 68, 96, 84, 105, - 110, 114, 108, 96, 94, 86, 81, 94, 108, 101, 103, 105, 110, 98, 112, 81, - 6, 9, 6, 26, 71, 133, 169, 184, 192, 189, 172, 156, 110, 23, 15, 35, - 96, 137, 151, 172, 181, 179, 181, 177, 184, 182, 182, 185, 177, 171, 155, 139, - 123, 119, 41, 38, 63, 38, 38, 26, 35, 57, 26, 23, 32, 26, 18, 26, - 98, 133, 60, 57, 117, 55, 35, 29, 23, 41, 66, 66, 20, 41, 20, 35, - 32, 46, 49, 18, 35, 68, 35, 55, 135, 125, 117, 81, 114, 101, 149, 147, - 164, 143, 155, 149, 141, 131, 203, 179, 57, 23, 23, 20, 74, 46, 71, 32, - 49, 43, 43, 32, 35, 46, 32, 57, 35, 35, 32, 38, 71, 63, 76, 114, - 114, 119, 117, 108, 108, 84, 23, 79, 86, 98, 112, 114, 121, 125, 129, 131, - 131, 131, 131, 129, 133, 135, 133, 133, 137, 141, 135, 129, 139, 139, 143, 141, - 143, 143, 147, 149, 156, 153, 158, 160, 160, 162, 164, 167, 169, 177, 177, 185, - 189, 187, 192, 197, 203, 203, 203, 206, 209, 212, 212, 212, 212, 213, 215, 216, - 221, 218, 221, 224, 224, 164, 9, 6, 18, 121, 131, 145, 151, 167, 155, 153, - 156, 153, 155, 149, 155, 151, 143, 149, 147, 149, 151, 145, 147, 145, 141, 141, - 139, 139, 131, 133, 123, 123, 145, 201, 218, 222, 222, 221, 213, 215, 221, 222, - 222, 221, 219, 215, 206, 184, 147, 108, 98, 96, 94, 86, 81, 89, 96, 101, - 114, 110, 101, 91, 81, 86, 89, 103, 101, 108, 108, 108, 91, 103, 84, 91, - 9, 15, 6, 20, 79, 139, 165, 181, 190, 184, 174, 158, 121, 20, 12, 26, - 91, 135, 162, 171, 182, 182, 181, 182, 181, 184, 184, 184, 177, 165, 156, 145, - 117, 110, 57, 49, 63, 26, 26, 26, 32, 29, 29, 29, 32, 29, 46, 49, - 94, 32, 23, 98, 84, 86, 43, 35, 41, 35, 84, 63, 35, 26, 35, 29, - 23, 43, 74, 18, 29, 101, 32, 38, 79, 81, 123, 139, 141, 121, 143, 156, - 160, 74, 84, 141, 145, 172, 195, 147, 89, 29, 26, 94, 35, 60, 46, 35, - 74, 23, 49, 52, 46, 46, 20, 52, 32, 35, 32, 32, 55, 71, 91, 112, - 117, 112, 117, 121, 110, 57, 20, 81, 81, 96, 110, 121, 119, 125, 119, 125, - 135, 133, 133, 141, 127, 127, 137, 133, 133, 129, 131, 131, 129, 133, 139, 131, - 141, 143, 141, 143, 151, 151, 160, 158, 160, 164, 164, 169, 174, 174, 179, 182, - 182, 185, 195, 197, 198, 201, 201, 203, 207, 213, 212, 213, 212, 215, 216, 216, - 218, 219, 221, 222, 225, 204, 3, 9, 9, 125, 131, 137, 156, 153, 160, 153, - 158, 158, 153, 156, 151, 145, 155, 151, 145, 149, 151, 149, 147, 147, 143, 141, - 141, 135, 137, 129, 127, 133, 153, 204, 218, 222, 221, 215, 212, 215, 219, 224, - 224, 224, 219, 212, 195, 162, 137, 108, 98, 98, 103, 94, 96, 91, 89, 112, - 112, 112, 101, 105, 94, 84, 86, 91, 101, 96, 103, 98, 89, 94, 84, 79, - 12, 15, 15, 20, 57, 141, 165, 181, 187, 184, 176, 160, 127, 41, 12, 43, - 94, 129, 153, 174, 177, 177, 174, 174, 176, 174, 174, 176, 172, 164, 153, 139, - 129, 133, 66, 26, 49, 29, 35, 35, 20, 23, 41, 38, 32, 49, 98, 49, - 41, 20, 49, 105, 74, 96, 46, 49, 18, 43, 84, 60, 43, 26, 32, 18, - 29, 55, 35, 35, 32, 98, 55, 32, 29, 41, 63, 129, 155, 139, 139, 145, - 135, 112, 81, 108, 123, 169, 129, 182, 193, 153, 119, 119, 41, 79, 41, 35, - 52, 38, 43, 84, 38, 43, 29, 46, 35, 35, 29, 52, 49, 71, 94, 112, - 121, 110, 114, 117, 119, 38, 26, 76, 94, 105, 117, 119, 127, 125, 123, 125, - 133, 131, 141, 139, 137, 127, 133, 127, 121, 127, 127, 131, 135, 137, 137, 141, - 139, 141, 141, 143, 145, 153, 151, 158, 164, 158, 162, 165, 169, 174, 176, 172, - 181, 190, 195, 200, 198, 200, 203, 204, 207, 210, 209, 212, 213, 215, 215, 216, - 219, 219, 219, 221, 224, 218, 52, 6, 12, 133, 147, 143, 153, 160, 167, 155, - 149, 155, 149, 149, 151, 145, 158, 151, 149, 149, 149, 149, 149, 141, 149, 135, - 137, 141, 127, 131, 125, 133, 158, 209, 219, 222, 218, 213, 210, 213, 221, 224, - 222, 221, 216, 209, 181, 145, 117, 112, 112, 96, 89, 91, 86, 98, 91, 105, - 110, 112, 96, 84, 79, 84, 96, 103, 98, 108, 91, 94, 101, 86, 81, 74, - 9, 6, 18, 15, 60, 119, 164, 182, 185, 185, 177, 160, 129, 35, 9, 35, - 86, 129, 155, 171, 177, 182, 177, 177, 176, 177, 181, 181, 174, 164, 155, 133, - 137, 153, 49, 76, 35, 23, 29, 23, 26, 26, 29, 35, 26, 46, 68, 23, - 35, 35, 38, 98, 91, 86, 46, 43, 38, 52, 23, 43, 46, 46, 29, 32, - 38, 32, 71, 46, 63, 105, 35, 43, 15, 26, 57, 127, 156, 149, 141, 156, - 133, 101, 121, 18, 20, 43, 89, 52, 84, 66, 149, 151, 149, 141, 117, 110, - 103, 91, 105, 46, 46, 26, 26, 46, 32, 29, 26, 57, 66, 79, 103, 117, - 112, 114, 121, 114, 117, 63, 32, 76, 105, 110, 112, 117, 127, 129, 125, 119, - 125, 133, 139, 133, 129, 137, 131, 131, 121, 127, 129, 131, 135, 139, 141, 137, - 137, 137, 145, 153, 147, 155, 156, 156, 158, 164, 162, 165, 169, 174, 171, 176, - 189, 192, 189, 197, 197, 200, 201, 204, 204, 209, 212, 210, 209, 215, 216, 216, - 218, 219, 221, 222, 221, 222, 125, 9, 12, 133, 145, 145, 149, 158, 162, 155, - 153, 151, 149, 151, 155, 149, 145, 151, 149, 147, 153, 149, 155, 149, 147, 137, - 131, 127, 131, 135, 131, 131, 169, 210, 218, 221, 216, 213, 210, 215, 221, 224, - 224, 219, 216, 198, 162, 127, 114, 114, 112, 101, 94, 96, 89, 89, 101, 110, - 105, 105, 79, 79, 81, 91, 86, 108, 103, 96, 96, 89, 94, 79, 96, 91, - 12, 9, 9, 20, 66, 119, 165, 176, 190, 189, 181, 167, 131, 43, 23, 41, - 94, 129, 156, 167, 177, 177, 185, 181, 182, 182, 185, 179, 181, 171, 155, 137, - 153, 108, 46, 60, 29, 41, 20, 55, 29, 38, 41, 35, 29, 35, 38, 41, - 55, 43, 32, 76, 86, 68, 38, 41, 63, 35, 20, 32, 55, 46, 35, 26, - 18, 46, 52, 23, 86, 112, 20, 71, 12, 49, 57, 103, 151, 86, 155, 117, - 114, 145, 105, 76, 12, 23, 135, 18, 29, 76, 18, 15, 74, 96, 57, 129, - 182, 119, 108, 49, 60, 41, 57, 41, 23, 41, 41, 60, 74, 84, 105, 117, - 112, 123, 119, 123, 110, 60, 43, 79, 101, 108, 127, 117, 127, 131, 129, 127, - 135, 131, 137, 133, 133, 127, 129, 131, 129, 127, 129, 131, 131, 125, 137, 139, - 141, 139, 145, 141, 147, 153, 153, 153, 158, 156, 158, 164, 169, 176, 171, 176, - 187, 187, 189, 192, 195, 198, 200, 203, 203, 207, 210, 210, 212, 215, 213, 215, - 216, 218, 218, 221, 221, 224, 189, 6, 26, 137, 145, 147, 149, 156, 156, 164, - 155, 153, 149, 153, 151, 145, 149, 145, 145, 151, 151, 149, 145, 149, 143, 133, - 133, 139, 141, 139, 129, 131, 177, 207, 218, 224, 216, 210, 210, 213, 222, 225, - 224, 216, 207, 189, 143, 117, 105, 110, 110, 98, 98, 81, 86, 98, 101, 108, - 101, 98, 84, 79, 71, 91, 101, 105, 105, 86, 91, 96, 81, 81, 94, 89, - 9, 12, 18, 18, 29, 105, 158, 174, 187, 187, 187, 169, 125, 63, 18, 60, - 86, 135, 153, 169, 174, 182, 177, 184, 184, 184, 185, 182, 181, 171, 158, 137, - 158, 108, 38, 26, 29, 41, 32, 32, 32, 32, 38, 32, 32, 46, 38, 60, - 41, 35, 49, 66, 68, 46, 38, 43, 55, 32, 38, 43, 66, 26, 20, 20, - 18, 52, 23, 26, 94, 105, 18, 32, 86, 57, 84, 101, 133, 101, 143, 143, - 105, 133, 133, 153, 23, 26, 135, 18, 18, 63, 15, 20, 55, 49, 46, 71, - 79, 43, 108, 137, 57, 43, 41, 43, 23, 23, 66, 63, 76, 96, 112, 112, - 123, 121, 125, 129, 96, 43, 66, 94, 94, 121, 127, 125, 129, 121, 133, 133, - 131, 133, 127, 135, 139, 137, 141, 129, 123, 125, 127, 133, 135, 131, 135, 135, - 135, 133, 145, 141, 147, 149, 147, 160, 160, 158, 158, 167, 165, 172, 176, 177, - 179, 181, 189, 192, 198, 198, 198, 201, 204, 207, 210, 215, 212, 212, 215, 213, - 216, 218, 218, 218, 219, 221, 212, 12, 29, 129, 149, 141, 147, 156, 156, 167, - 151, 151, 151, 153, 149, 153, 145, 147, 145, 147, 151, 149, 145, 147, 143, 137, - 141, 133, 135, 135, 131, 133, 172, 200, 215, 221, 213, 209, 207, 216, 224, 225, - 221, 215, 204, 176, 129, 117, 119, 110, 110, 98, 101, 89, 74, 94, 98, 101, - 91, 79, 81, 76, 86, 96, 105, 105, 98, 94, 101, 94, 89, 81, 96, 96, - 20, 12, 20, 23, 32, 114, 153, 169, 182, 185, 182, 169, 131, 35, 29, 57, - 91, 129, 153, 169, 177, 181, 184, 184, 182, 182, 185, 181, 181, 167, 155, 133, - 171, 108, 32, 43, 38, 41, 23, 38, 26, 29, 46, 20, 35, 38, 71, 63, - 35, 41, 38, 57, 57, 52, 43, 60, 26, 29, 26, 46, 74, 29, 23, 32, - 26, 74, 20, 49, 98, 57, 96, 20, 94, 84, 79, 123, 117, 129, 137, 114, - 101, 125, 131, 156, 110, 26, 119, 23, 32, 20, 23, 52, 46, 57, 29, 71, - 26, 55, 52, 71, 60, 41, 32, 18, 23, 41, 60, 76, 86, 94, 112, 123, - 117, 127, 127, 123, 74, 38, 74, 101, 98, 121, 125, 127, 127, 131, 131, 131, - 131, 135, 137, 137, 141, 137, 129, 123, 127, 129, 127, 137, 129, 133, 135, 135, - 137, 137, 143, 143, 139, 153, 151, 149, 160, 158, 158, 164, 167, 172, 171, 172, - 181, 181, 184, 192, 192, 200, 197, 200, 206, 204, 206, 210, 212, 212, 213, 215, - 213, 218, 218, 216, 218, 221, 219, 52, 41, 121, 153, 151, 156, 165, 160, 153, - 156, 151, 151, 149, 160, 149, 155, 151, 151, 147, 151, 147, 143, 149, 145, 141, - 133, 139, 143, 137, 137, 131, 156, 189, 209, 212, 210, 209, 206, 216, 225, 225, - 221, 212, 200, 167, 117, 114, 114, 108, 105, 108, 101, 81, 89, 91, 101, 86, - 89, 63, 79, 101, 98, 103, 96, 96, 91, 89, 101, 91, 86, 94, 91, 96, - 12, 15, 12, 9, 38, 98, 151, 167, 182, 185, 177, 169, 133, 71, 29, 41, - 79, 123, 151, 169, 172, 184, 182, 182, 181, 182, 185, 185, 182, 171, 151, 151, - 162, 123, 41, 41, 23, 46, 35, 29, 18, 32, 52, 23, 52, 76, 66, 49, - 32, 41, 29, 66, 49, 41, 63, 43, 38, 41, 38, 35, 57, 43, 18, 29, - 26, 66, 26, 81, 84, 49, 105, 79, 32, 101, 110, 68, 86, 101, 158, 125, - 103, 49, 110, 141, 162, 74, 94, 46, 38, 15, 26, 66, 55, 26, 15, 68, - 63, 32, 41, 38, 43, 41, 29, 20, 29, 35, 68, 71, 98, 89, 110, 105, - 125, 123, 121, 119, 63, 26, 71, 94, 108, 125, 127, 123, 131, 135, 133, 133, - 131, 131, 139, 137, 137, 131, 133, 133, 131, 133, 125, 129, 139, 135, 129, 137, - 137, 135, 145, 143, 147, 141, 147, 155, 158, 158, 160, 164, 164, 171, 171, 172, - 174, 177, 190, 187, 193, 197, 201, 200, 206, 207, 207, 207, 209, 210, 212, 216, - 216, 218, 218, 218, 218, 219, 221, 153, 68, 119, 151, 149, 149, 162, 160, 153, - 151, 151, 151, 153, 147, 153, 155, 155, 151, 153, 149, 149, 149, 151, 151, 141, - 139, 141, 143, 141, 137, 137, 139, 162, 193, 198, 200, 201, 209, 218, 225, 224, - 218, 213, 198, 156, 123, 110, 103, 110, 101, 98, 81, 86, 79, 98, 96, 81, - 55, 63, 86, 101, 101, 101, 103, 103, 89, 91, 91, 81, 98, 103, 94, 96, - 29, 23, 23, 18, 32, 89, 143, 169, 184, 182, 184, 167, 137, 86, 35, 52, - 81, 131, 151, 167, 176, 181, 181, 181, 177, 182, 181, 187, 174, 167, 156, 135, - 165, 131, 41, 84, 43, 52, 23, 35, 29, 32, 32, 68, 103, 68, 35, 41, - 26, 29, 49, 63, 55, 46, 43, 32, 52, 43, 49, 32, 49, 110, 26, 35, - 41, 52, 43, 91, 52, 46, 74, 123, 23, 20, 149, 165, 143, 158, 96, 141, - 114, 91, 60, 125, 117, 143, 112, 49, 143, 23, 26, 49, 41, 49, 32, 46, - 60, 41, 32, 41, 41, 38, 15, 26, 43, 63, 79, 79, 103, 101, 110, 117, - 119, 114, 119, 112, 55, 49, 84, 96, 114, 123, 125, 125, 133, 135, 141, 133, - 133, 137, 133, 129, 131, 135, 129, 131, 131, 127, 133, 135, 127, 133, 133, 135, - 137, 141, 143, 145, 147, 153, 153, 153, 155, 156, 156, 162, 160, 165, 167, 171, - 177, 176, 181, 182, 193, 190, 200, 198, 201, 204, 203, 210, 209, 212, 210, 216, - 215, 218, 218, 216, 218, 218, 219, 201, 81, 131, 149, 151, 131, 147, 153, 155, - 149, 153, 153, 162, 156, 155, 155, 153, 156, 149, 151, 151, 153, 147, 145, 141, - 145, 143, 141, 141, 143, 141, 145, 143, 158, 172, 181, 187, 209, 221, 230, 222, - 218, 207, 189, 141, 117, 103, 101, 96, 103, 91, 76, 86, 96, 91, 89, 84, - 68, 74, 94, 112, 105, 94, 98, 84, 81, 98, 94, 94, 84, 98, 108, 89, - 26, 18, 15, 9, 18, 79, 139, 172, 179, 185, 181, 169, 149, 98, 46, 55, - 81, 133, 151, 165, 174, 177, 179, 181, 182, 176, 184, 184, 174, 165, 153, 141, - 167, 133, 49, 96, 46, 38, 23, 26, 26, 76, 91, 76, 63, 32, 38, 29, - 23, 26, 60, 38, 68, 32, 32, 41, 63, 60, 74, 41, 29, 68, 38, 52, - 29, 29, 101, 49, 35, 41, 43, 114, 94, 15, 32, 114, 89, 153, 123, 145, - 86, 49, 55, 101, 137, 171, 131, 123, 187, 18, 43, 29, 35, 32, 32, 43, - 26, 32, 35, 29, 23, 35, 29, 26, 38, 60, 81, 86, 101, 110, 114, 121, - 114, 114, 117, 89, 35, 52, 89, 110, 114, 127, 129, 129, 131, 139, 137, 127, - 139, 141, 141, 135, 133, 133, 133, 131, 133, 125, 133, 127, 125, 131, 125, 133, - 141, 133, 139, 147, 143, 153, 143, 153, 155, 156, 156, 164, 160, 169, 165, 169, - 172, 177, 181, 189, 190, 192, 197, 197, 201, 204, 206, 206, 209, 212, 212, 213, - 216, 216, 215, 216, 216, 218, 219, 210, 101, 139, 149, 143, 119, 125, 137, 137, - 141, 141, 147, 149, 158, 158, 156, 153, 153, 158, 155, 155, 156, 153, 145, 145, - 153, 139, 145, 147, 153, 141, 141, 145, 133, 145, 151, 182, 210, 224, 227, 222, - 216, 206, 177, 135, 112, 103, 101, 91, 84, 76, 81, 84, 86, 94, 76, 66, - 71, 76, 101, 108, 103, 94, 91, 84, 84, 86, 91, 98, 94, 98, 91, 76, - 20, 18, 9, 32, 23, 66, 127, 167, 179, 177, 182, 171, 143, 108, 32, 46, - 74, 125, 147, 165, 177, 181, 177, 179, 181, 181, 182, 184, 174, 167, 153, 131, - 149, 149, 43, 91, 35, 41, 26, 29, 41, 52, 49, 41, 52, 32, 26, 43, - 29, 41, 60, 41, 68, 43, 38, 55, 55, 43, 43, 55, 35, 63, 60, 29, - 20, 57, 123, 41, 23, 26, 41, 117, 98, 63, 26, 35, 32, 46, 105, 167, - 119, 49, 32, 52, 71, 133, 193, 197, 119, 29, 32, 49, 29, 29, 52, 46, - 38, 35, 43, 20, 26, 29, 18, 23, 49, 68, 74, 103, 101, 110, 117, 121, - 114, 117, 114, 71, 26, 79, 76, 110, 123, 129, 125, 127, 135, 135, 135, 137, - 133, 137, 149, 141, 127, 129, 135, 133, 139, 131, 129, 127, 129, 137, 131, 133, - 139, 135, 139, 145, 145, 147, 147, 151, 155, 155, 158, 160, 160, 160, 162, 165, - 167, 179, 179, 185, 189, 192, 195, 200, 200, 203, 206, 207, 207, 212, 215, 215, - 213, 215, 216, 218, 218, 218, 219, 221, 153, 145, 143, 123, 98, 114, 108, 117, - 123, 135, 135, 141, 145, 149, 153, 155, 156, 155, 155, 149, 156, 153, 147, 153, - 145, 153, 153, 149, 149, 149, 145, 147, 137, 137, 149, 192, 213, 227, 227, 222, - 215, 200, 167, 129, 105, 108, 103, 103, 81, 66, 81, 96, 98, 76, 79, 63, - 76, 86, 101, 105, 98, 91, 94, 74, 94, 81, 94, 94, 89, 101, 94, 63, - 23, 20, 20, 15, 18, 74, 143, 167, 177, 181, 172, 165, 149, 103, 57, 43, - 71, 119, 145, 162, 171, 177, 179, 182, 179, 179, 181, 181, 179, 165, 155, 135, - 135, 153, 43, 91, 29, 41, 26, 23, 29, 29, 26, 41, 35, 26, 29, 57, - 26, 55, 41, 60, 49, 46, 49, 76, 63, 32, 41, 32, 57, 46, 29, 20, - 23, 68, 81, 38, 38, 26, 66, 135, 131, 63, 98, 26, 55, 23, 15, 103, - 165, 35, 46, 89, 63, 57, 143, 143, 18, 35, 29, 38, 18, 23, 55, 38, - 38, 23, 32, 26, 32, 32, 26, 29, 60, 71, 96, 101, 101, 108, 110, 125, - 117, 123, 98, 49, 32, 86, 101, 119, 125, 137, 133, 127, 133, 131, 131, 131, - 137, 141, 135, 141, 137, 137, 135, 135, 135, 133, 131, 131, 129, 133, 135, 135, - 141, 145, 137, 139, 145, 145, 141, 149, 151, 149, 151, 156, 158, 162, 165, 165, - 174, 177, 176, 189, 184, 190, 195, 197, 201, 203, 206, 209, 209, 209, 212, 213, - 215, 218, 216, 219, 218, 216, 219, 222, 195, 139, 114, 108, 68, 98, 86, 94, - 103, 105, 112, 125, 133, 137, 139, 149, 145, 149, 151, 151, 149, 155, 153, 151, - 145, 149, 158, 151, 153, 153, 149, 143, 139, 139, 153, 200, 215, 227, 227, 221, - 210, 190, 153, 112, 103, 103, 89, 86, 76, 84, 89, 94, 91, 68, 74, 74, - 81, 101, 103, 98, 96, 96, 84, 79, 86, 96, 103, 96, 98, 89, 74, 35, - 18, 23, 15, 15, 23, 63, 125, 162, 177, 190, 184, 177, 153, 96, 46, 49, - 81, 127, 149, 165, 179, 177, 181, 181, 177, 182, 182, 184, 181, 164, 158, 135, - 119, 141, 63, 98, 46, 20, 26, 38, 38, 38, 41, 46, 35, 26, 29, 32, - 41, 68, 38, 71, 43, 32, 52, 81, 71, 32, 26, 23, 35, 46, 29, 20, - 18, 81, 29, 38, 57, 35, 49, 133, 131, 149, 41, 74, 29, 12, 32, 57, - 103, 63, 20, 94, 137, 89, 86, 139, 12, 32, 49, 35, 46, 38, 23, 38, - 35, 26, 23, 18, 18, 35, 49, 60, 55, 74, 98, 103, 112, 105, 114, 121, - 117, 117, 74, 38, 43, 84, 103, 135, 125, 131, 127, 125, 135, 137, 135, 139, - 141, 139, 141, 145, 141, 133, 135, 137, 131, 131, 135, 139, 137, 129, 133, 127, - 135, 137, 147, 143, 149, 147, 145, 151, 156, 156, 156, 155, 162, 167, 162, 165, - 171, 172, 177, 179, 187, 189, 195, 193, 197, 201, 203, 206, 207, 212, 212, 215, - 213, 219, 218, 221, 218, 218, 218, 224, 216, 131, 81, 71, 60, 68, 68, 76, - 81, 101, 98, 103, 108, 119, 123, 127, 129, 133, 141, 143, 145, 149, 149, 155, - 156, 151, 164, 164, 151, 145, 141, 137, 137, 145, 172, 207, 219, 225, 225, 215, - 207, 182, 139, 112, 98, 96, 74, 66, 63, 81, 98, 91, 74, 52, 63, 68, - 94, 96, 94, 91, 96, 91, 94, 94, 96, 103, 101, 94, 81, 76, 52, 57, - 20, 20, 15, 15, 20, 49, 114, 167, 187, 190, 187, 182, 160, 114, 55, 38, - 68, 117, 139, 162, 172, 174, 181, 177, 181, 182, 182, 187, 177, 174, 162, 145, - 121, 110, 71, 76, 79, 26, 20, 38, 46, 38, 26, 26, 32, 32, 32, 55, - 63, 41, 52, 60, 35, 38, 49, 46, 86, 41, 35, 29, 23, 18, 41, 26, - 23, 52, 46, 46, 63, 101, 98, 84, 145, 164, 84, 29, 60, 68, 23, 60, - 52, 29, 46, 84, 79, 89, 105, 81, 18, 29, 29, 26, 20, 38, 41, 38, - 26, 18, 35, 15, 32, 29, 66, 60, 68, 81, 103, 105, 114, 103, 110, 121, - 117, 103, 20, 32, 74, 84, 121, 125, 125, 127, 129, 127, 133, 137, 135, 139, - 141, 143, 133, 133, 131, 137, 141, 133, 139, 137, 129, 125, 133, 129, 129, 133, - 137, 131, 137, 145, 141, 143, 151, 151, 153, 147, 153, 156, 160, 160, 162, 169, - 171, 174, 174, 182, 177, 187, 195, 195, 200, 197, 200, 207, 209, 212, 213, 215, - 215, 216, 215, 218, 216, 221, 219, 224, 222, 135, 63, 71, 63, 79, 52, 60, - 68, 68, 89, 81, 84, 94, 96, 112, 108, 114, 125, 125, 137, 133, 143, 143, - 153, 160, 169, 165, 158, 155, 129, 131, 137, 151, 190, 213, 222, 225, 221, 215, - 195, 158, 127, 103, 89, 76, 68, 74, 74, 101, 96, 81, 60, 57, 74, 94, - 101, 94, 94, 98, 89, 84, 86, 89, 101, 110, 98, 94, 94, 71, 41, 46, - 12, 9, 9, 15, 41, 38, 105, 172, 181, 192, 190, 184, 158, 129, 41, 43, - 71, 119, 141, 158, 174, 177, 179, 182, 184, 182, 181, 185, 177, 171, 160, 143, - 121, 114, 91, 68, 96, 18, 26, 29, 60, 35, 32, 29, 29, 32, 26, 57, - 43, 41, 63, 52, 29, 46, 52, 55, 68, 49, 38, 26, 35, 32, 41, 41, - 38, 29, 32, 131, 12, 76, 129, 101, 133, 112, 176, 86, 38, 71, 63, 60, - 63, 71, 63, 167, 55, 52, 86, 35, 20, 35, 35, 15, 38, 29, 26, 23, - 35, 20, 18, 18, 43, 35, 60, 66, 74, 96, 105, 114, 114, 114, 112, 114, - 123, 57, 15, 49, 79, 108, 121, 127, 121, 133, 123, 123, 131, 145, 137, 137, - 135, 137, 137, 131, 137, 141, 137, 131, 131, 129, 127, 129, 135, 135, 131, 129, - 137, 137, 137, 137, 133, 141, 139, 145, 145, 151, 155, 156, 156, 160, 162, 165, - 171, 177, 172, 176, 179, 181, 195, 195, 197, 198, 201, 206, 207, 210, 212, 210, - 212, 215, 216, 218, 216, 218, 221, 222, 224, 174, 60, 79, 60, 94, 63, 74, - 71, 74, 79, 63, 76, 86, 79, 76, 89, 89, 94, 98, 103, 105, 117, 129, - 143, 155, 167, 171, 160, 149, 155, 156, 145, 155, 197, 218, 224, 227, 219, 204, - 176, 139, 117, 86, 74, 71, 66, 63, 81, 96, 91, 74, 57, 71, 94, 94, - 108, 89, 91, 98, 91, 89, 94, 103, 108, 103, 89, 96, 68, 66, 41, 35, - 20, 18, 15, 6, 15, 29, 121, 165, 184, 189, 190, 184, 164, 137, 57, 49, - 76, 114, 145, 160, 171, 176, 177, 181, 179, 177, 184, 184, 179, 167, 164, 141, - 105, 114, 91, 91, 96, 23, 18, 38, 26, 23, 29, 23, 29, 32, 60, 66, - 41, 32, 52, 60, 41, 35, 57, 55, 66, 43, 41, 49, 26, 18, 29, 32, - 38, 35, 38, 91, 12, 23, 110, 68, 105, 137, 160, 165, 123, 26, 46, 105, - 114, 121, 55, 89, 29, 38, 35, 43, 29, 32, 26, 18, 32, 35, 29, 26, - 23, 18, 43, 20, 26, 41, 60, 63, 81, 108, 117, 117, 108, 108, 110, 110, - 94, 23, 15, 55, 105, 117, 123, 127, 127, 127, 125, 131, 123, 131, 143, 133, - 135, 139, 133, 127, 133, 137, 135, 137, 133, 135, 131, 133, 137, 129, 123, 131, - 127, 133, 139, 133, 143, 131, 141, 145, 149, 143, 151, 153, 153, 162, 160, 165, - 169, 176, 174, 172, 172, 182, 187, 189, 193, 197, 200, 204, 209, 207, 212, 212, - 213, 216, 216, 215, 218, 218, 221, 221, 224, 206, 68, 81, 74, 96, 86, 84, - 84, 79, 84, 74, 63, 71, 66, 49, 60, 66, 63, 66, 79, 71, 86, 105, - 125, 143, 147, 151, 156, 169, 172, 162, 156, 172, 206, 218, 227, 224, 215, 193, - 156, 123, 89, 66, 52, 43, 55, 66, 81, 81, 81, 57, 63, 89, 96, 110, - 79, 86, 96, 94, 91, 86, 86, 101, 108, 84, 101, 94, 79, 52, 43, 32, - 20, 12, 12, 9, 12, 32, 110, 171, 184, 190, 195, 182, 174, 137, 63, 43, - 68, 112, 137, 162, 172, 177, 179, 182, 182, 181, 187, 185, 177, 172, 162, 139, - 57, 127, 98, 76, 89, 18, 38, 49, 23, 26, 23, 18, 32, 52, 55, 49, - 23, 29, 81, 43, 41, 29, 57, 49, 66, 57, 63, 35, 41, 23, 43, 23, - 41, 41, 32, 18, 18, 38, 23, 103, 91, 131, 121, 143, 158, 105, 119, 84, - 84, 135, 94, 32, 20, 26, 32, 41, 49, 23, 20, 32, 29, 26, 18, 29, - 26, 20, 20, 29, 38, 43, 84, 74, 96, 112, 105, 110, 110, 114, 114, 101, - 26, 12, 32, 79, 108, 125, 129, 133, 133, 127, 125, 129, 133, 131, 133, 135, - 133, 135, 129, 137, 141, 139, 143, 129, 135, 133, 133, 139, 133, 129, 131, 133, - 127, 137, 139, 133, 141, 143, 141, 141, 143, 145, 151, 151, 151, 155, 165, 162, - 167, 167, 172, 171, 174, 181, 187, 190, 193, 195, 200, 206, 204, 207, 215, 212, - 213, 212, 216, 216, 216, 216, 219, 221, 222, 218, 76, 68, 86, 91, 98, 96, - 91, 98, 81, 86, 81, 68, 68, 52, 55, 49, 46, 43, 35, 38, 49, 68, - 91, 108, 117, 139, 184, 197, 193, 169, 160, 185, 209, 218, 224, 219, 212, 184, - 141, 98, 71, 55, 41, 41, 79, 71, 84, 60, 57, 66, 89, 110, 114, 101, - 91, 94, 89, 89, 84, 89, 91, 103, 112, 98, 94, 89, 57, 52, 43, 38, - 35, 32, 29, 38, 41, 35, 114, 171, 182, 190, 193, 187, 179, 155, 71, 46, - 76, 121, 145, 162, 169, 176, 182, 177, 179, 179, 189, 185, 179, 174, 164, 139, - 60, 127, 86, 57, 60, 26, 43, 35, 20, 29, 29, 23, 43, 66, 46, 41, - 43, 38, 60, 41, 29, 35, 81, 57, 49, 41, 49, 43, 52, 41, 41, 32, - 23, 49, 55, 23, 38, 35, 15, 32, 105, 117, 151, 162, 108, 160, 112, 117, - 89, 43, 119, 86, 26, 23, 35, 43, 32, 23, 35, 35, 29, 26, 29, 23, - 9, 23, 23, 20, 41, 55, 74, 84, 98, 105, 110, 112, 108, 114, 103, 52, - 23, 20, 71, 101, 117, 127, 125, 129, 143, 129, 131, 133, 133, 133, 133, 135, - 129, 137, 139, 139, 135, 141, 137, 137, 135, 137, 137, 137, 133, 131, 131, 131, - 131, 135, 135, 129, 135, 141, 139, 147, 149, 153, 153, 155, 156, 156, 162, 164, - 167, 167, 165, 174, 177, 182, 179, 190, 193, 195, 195, 203, 203, 204, 207, 210, - 212, 212, 215, 216, 218, 216, 219, 219, 221, 222, 143, 71, 94, 96, 103, 103, - 108, 81, 86, 86, 84, 74, 68, 55, 49, 43, 35, 29, 29, 35, 29, 35, - 49, 94, 114, 174, 203, 203, 200, 179, 169, 192, 212, 221, 222, 218, 201, 167, - 121, 76, 60, 41, 35, 43, 68, 71, 66, 63, 66, 91, 103, 114, 117, 101, - 89, 84, 86, 76, 89, 86, 101, 108, 98, 103, 86, 71, 52, 46, 32, 26, - 26, 41, 57, 57, 55, 60, 108, 158, 181, 192, 197, 190, 189, 145, 86, 52, - 81, 114, 145, 158, 169, 176, 182, 184, 179, 182, 184, 190, 184, 176, 165, 125, - 86, 133, 103, 55, 32, 23, 35, 18, 20, 23, 32, 55, 26, 38, 38, 46, - 26, 29, 35, 52, 26, 41, 63, 49, 57, 46, 41, 57, 38, 63, 32, 23, - 15, 20, 60, 46, 23, 49, 32, 32, 18, 101, 110, 174, 160, 123, 156, 68, - 98, 129, 131, 84, 20, 20, 35, 43, 20, 15, 20, 18, 26, 20, 15, 20, - 20, 18, 32, 41, 66, 63, 81, 96, 103, 105, 110, 108, 125, 117, 71, 23, - 26, 43, 86, 110, 123, 125, 129, 135, 131, 129, 131, 127, 129, 131, 129, 133, - 127, 135, 137, 139, 137, 137, 141, 139, 137, 135, 131, 133, 129, 129, 131, 127, - 131, 135, 133, 135, 133, 141, 137, 143, 149, 147, 147, 155, 149, 155, 156, 160, - 160, 165, 169, 174, 176, 182, 182, 189, 190, 193, 198, 201, 200, 204, 210, 210, - 212, 215, 212, 215, 219, 218, 219, 219, 221, 221, 192, 76, 89, 103, 110, 103, - 98, 103, 103, 94, 89, 86, 71, 76, 68, 49, 41, 41, 29, 20, 12, 18, - 29, 52, 145, 200, 210, 210, 198, 167, 165, 201, 215, 221, 221, 212, 193, 147, - 89, 52, 38, 49, 49, 68, 76, 76, 57, 52, 76, 84, 98, 108, 103, 89, - 81, 74, 74, 71, 96, 94, 108, 103, 105, 91, 89, 63, 43, 38, 46, 35, - 63, 81, 71, 74, 74, 81, 108, 151, 181, 192, 198, 195, 185, 153, 105, 57, - 76, 110, 141, 162, 169, 177, 182, 184, 179, 181, 184, 187, 181, 174, 158, 98, - 94, 141, 117, 60, 43, 18, 41, 32, 43, 66, 68, 29, 23, 29, 32, 57, - 46, 35, 43, 55, 38, 55, 55, 43, 71, 43, 46, 49, 38, 32, 23, 26, - 41, 20, 29, 49, 32, 94, 41, 41, 32, 18, 79, 143, 131, 156, 149, 108, - 98, 101, 94, 125, 29, 32, 38, 26, 43, 35, 32, 26, 26, 29, 15, 26, - 32, 18, 23, 66, 68, 84, 96, 105, 105, 110, 108, 112, 110, 89, 29, 32, - 23, 74, 105, 123, 125, 127, 127, 133, 127, 131, 133, 131, 133, 137, 133, 131, - 135, 135, 135, 135, 133, 137, 139, 139, 135, 141, 137, 131, 131, 133, 131, 127, - 131, 135, 129, 129, 131, 135, 137, 137, 149, 145, 145, 147, 156, 158, 160, 156, - 158, 162, 165, 169, 172, 177, 176, 187, 184, 189, 197, 200, 203, 204, 206, 207, - 212, 213, 215, 213, 216, 216, 219, 218, 219, 224, 212, 79, 86, 98, 96, 110, - 105, 114, 117, 103, 96, 101, 81, 84, 76, 63, 49, 41, 18, 35, 35, 18, - 15, 55, 160, 206, 213, 215, 192, 158, 182, 207, 216, 221, 216, 203, 164, 91, - 60, 52, 26, 46, 60, 68, 66, 74, 55, 66, 84, 101, 114, 121, 86, 89, - 81, 84, 79, 79, 84, 101, 110, 119, 103, 84, 86, 66, 60, 55, 38, 46, - 96, 91, 86, 79, 91, 89, 123, 149, 181, 192, 195, 193, 182, 158, 114, 57, - 79, 112, 141, 160, 172, 174, 182, 182, 182, 182, 185, 192, 181, 176, 165, 103, - 91, 135, 91, 84, 18, 23, 35, 52, 57, 52, 35, 29, 41, 29, 41, 41, - 38, 43, 49, 43, 46, 68, 29, 55, 74, 49, 52, 52, 35, 35, 35, 26, - 46, 43, 18, 46, 63, 52, 46, 35, 26, 32, 63, 63, 141, 143, 189, 145, - 96, 84, 123, 151, 43, 32, 23, 23, 29, 20, 32, 29, 32, 20, 9, 18, - 20, 20, 46, 71, 60, 74, 96, 108, 103, 105, 110, 117, 96, 20, 23, 23, - 71, 91, 114, 123, 127, 129, 127, 129, 127, 131, 139, 137, 129, 129, 129, 137, - 131, 133, 125, 143, 133, 139, 139, 137, 135, 139, 135, 131, 135, 141, 131, 135, - 129, 133, 135, 137, 141, 127, 133, 139, 147, 149, 141, 143, 155, 156, 158, 158, - 153, 165, 158, 171, 177, 172, 179, 181, 187, 193, 197, 200, 201, 204, 204, 210, - 212, 215, 213, 215, 212, 218, 216, 219, 221, 221, 222, 119, 79, 84, 108, 112, - 101, 108, 110, 105, 98, 96, 76, 94, 84, 63, 66, 49, 52, 29, 20, 20, - 29, 52, 158, 204, 212, 212, 184, 165, 192, 206, 213, 215, 204, 176, 114, 46, - 46, 35, 49, 63, 63, 66, 55, 57, 66, 84, 101, 110, 101, 91, 84, 76, - 66, 76, 68, 86, 86, 108, 119, 114, 108, 98, 76, 63, 63, 52, 43, 49, - 79, 86, 86, 89, 103, 101, 135, 156, 181, 190, 195, 195, 187, 165, 127, 60, - 94, 105, 141, 156, 172, 181, 182, 182, 184, 182, 189, 190, 185, 176, 164, 96, - 91, 129, 91, 76, 26, 26, 43, 32, 23, 32, 43, 26, 32, 26, 46, 41, - 57, 41, 41, 29, 32, 32, 35, 57, 76, 41, 43, 52, 52, 26, 35, 35, - 32, 57, 43, 15, 55, 49, 57, 52, 43, 55, 49, 68, 57, 74, 141, 158, - 137, 105, 98, 66, 32, 38, 23, 23, 23, 29, 29, 38, 15, 18, 15, 26, - 23, 35, 57, 66, 68, 98, 96, 117, 108, 101, 110, 91, 20, 15, 23, 63, - 91, 117, 117, 121, 125, 125, 131, 127, 127, 133, 131, 137, 129, 133, 129, 135, - 131, 127, 135, 141, 139, 135, 141, 135, 145, 141, 133, 139, 137, 135, 133, 129, - 133, 133, 135, 137, 135, 131, 133, 139, 143, 141, 143, 149, 155, 153, 149, 158, - 160, 164, 165, 169, 169, 172, 174, 181, 185, 189, 195, 198, 200, 203, 206, 206, - 209, 213, 213, 213, 213, 216, 219, 216, 216, 218, 221, 172, 66, 86, 96, 112, - 112, 108, 112, 108, 105, 98, 103, 96, 81, 74, 76, 63, 63, 41, 26, 43, - 46, 57, 149, 193, 207, 209, 197, 195, 195, 210, 207, 204, 172, 123, 46, 38, - 32, 35, 41, 60, 68, 57, 49, 68, 76, 94, 103, 108, 91, 76, 63, 66, - 71, 66, 79, 94, 96, 110, 117, 110, 96, 81, 81, 86, 74, 49, 43, 60, - 86, 94, 81, 101, 103, 114, 143, 155, 182, 190, 193, 197, 190, 169, 131, 63, - 86, 110, 137, 156, 176, 179, 179, 182, 184, 187, 190, 189, 184, 177, 171, 81, - 110, 119, 91, 68, 29, 29, 35, 26, 29, 29, 49, 29, 32, 29, 43, 49, - 46, 29, 41, 46, 32, 26, 35, 52, 63, 46, 32, 68, 79, 43, 38, 35, - 20, 63, 86, 43, 32, 43, 86, 41, 32, 68, 94, 29, 86, 66, 131, 71, - 131, 158, 119, 26, 29, 41, 23, 38, 35, 26, 23, 26, 23, 12, 20, 26, - 35, 52, 66, 49, 84, 96, 101, 114, 105, 110, 76, 20, 15, 35, 66, 89, - 108, 117, 119, 123, 127, 119, 131, 131, 131, 139, 127, 133, 135, 133, 135, 135, - 131, 133, 133, 135, 137, 141, 139, 133, 143, 147, 133, 137, 137, 135, 133, 131, - 127, 133, 129, 139, 135, 137, 133, 135, 145, 139, 143, 145, 151, 147, 149, 160, - 156, 164, 165, 172, 165, 167, 174, 185, 184, 185, 190, 198, 197, 200, 204, 207, - 209, 213, 212, 215, 215, 218, 215, 215, 218, 219, 221, 209, 68, 84, 86, 103, - 110, 114, 112, 105, 103, 98, 98, 86, 84, 86, 76, 74, 68, 57, 52, 43, - 41, 60, 129, 190, 207, 209, 209, 201, 200, 198, 184, 165, 121, 71, 52, 38, - 46, 43, 60, 68, 46, 52, 57, 76, 96, 101, 101, 96, 96, 84, 60, 66, - 74, 81, 79, 96, 105, 119, 112, 96, 94, 84, 79, 79, 63, 43, 68, 66, - 66, 84, 101, 110, 114, 129, 143, 155, 182, 189, 195, 190, 185, 169, 135, 68, - 94, 110, 137, 160, 171, 179, 179, 181, 185, 189, 189, 189, 184, 176, 164, 76, - 127, 119, 91, 35, 23, 43, 41, 43, 29, 32, 20, 29, 46, 26, 49, 41, - 43, 32, 41, 29, 35, 38, 57, 57, 86, 26, 38, 81, 89, 35, 35, 38, - 23, 38, 91, 94, 38, 35, 84, 23, 49, 55, 121, 38, 60, 125, 153, 46, - 81, 103, 112, 49, 32, 29, 32, 35, 23, 38, 23, 23, 18, 38, 32, 32, - 52, 66, 71, 89, 91, 84, 98, 110, 94, 35, 18, 9, 32, 79, 96, 96, - 117, 114, 125, 114, 121, 123, 129, 131, 129, 139, 131, 135, 139, 133, 135, 129, - 133, 135, 133, 137, 141, 139, 141, 141, 137, 141, 139, 137, 137, 135, 143, 137, - 131, 137, 135, 143, 137, 133, 131, 131, 141, 143, 143, 149, 147, 147, 153, 153, - 155, 160, 164, 165, 165, 172, 177, 172, 179, 177, 190, 192, 197, 200, 203, 206, - 206, 209, 212, 215, 213, 218, 219, 215, 215, 216, 221, 219, 103, 84, 94, 98, - 101, 108, 110, 108, 101, 96, 91, 103, 89, 91, 81, 76, 81, 63, 68, 74, - 66, 81, 131, 192, 210, 216, 219, 207, 195, 167, 151, 114, 66, 60, 35, 35, - 63, 57, 60, 63, 49, 57, 74, 84, 108, 112, 105, 96, 81, 81, 63, 66, - 68, 74, 101, 108, 119, 114, 105, 94, 96, 91, 76, 74, 55, 57, 66, 43, - 55, 81, 91, 119, 125, 123, 139, 155, 181, 185, 190, 190, 187, 167, 129, 74, - 94, 110, 135, 160, 171, 182, 179, 179, 182, 185, 187, 189, 179, 172, 162, 98, - 108, 125, 105, 23, 35, 38, 23, 63, 26, 57, 29, 49, 38, 26, 35, 43, - 52, 38, 35, 29, 35, 46, 91, 55, 105, 38, 55, 66, 89, 84, 26, 29, - 26, 26, 94, 68, 68, 52, 41, 103, 35, 66, 41, 79, 66, 96, 171, 110, - 86, 18, 79, 60, 43, 26, 32, 29, 41, 20, 20, 29, 12, 15, 15, 32, - 63, 63, 74, 91, 105, 91, 68, 35, 12, 9, 23, 60, 81, 94, 103, 110, - 117, 112, 125, 127, 127, 125, 125, 129, 127, 133, 133, 133, 133, 133, 145, 133, - 131, 135, 137, 135, 137, 137, 139, 145, 135, 141, 139, 137, 135, 139, 137, 141, - 129, 139, 133, 139, 135, 131, 131, 133, 137, 141, 141, 149, 145, 147, 149, 151, - 156, 164, 160, 165, 162, 171, 176, 172, 176, 181, 184, 192, 193, 197, 201, 203, - 207, 206, 209, 210, 215, 215, 216, 218, 216, 221, 218, 221, 149, 81, 89, 94, - 105, 98, 108, 103, 110, 101, 105, 101, 91, 98, 86, 79, 81, 86, 89, 86, - 74, 86, 143, 190, 213, 219, 216, 201, 169, 133, 86, 68, 52, 46, 41, 35, - 60, 66, 66, 55, 52, 81, 81, 98, 105, 108, 96, 81, 68, 63, 68, 76, - 71, 94, 91, 117, 121, 110, 108, 94, 94, 89, 84, 43, 57, 66, 74, 57, - 41, 74, 94, 121, 123, 114, 121, 147, 176, 187, 190, 189, 184, 164, 129, 84, - 91, 105, 143, 158, 171, 179, 182, 184, 184, 184, 189, 187, 185, 177, 171, 108, - 81, 112, 98, 29, 20, 32, 32, 38, 32, 57, 29, 49, 46, 26, 29, 26, - 74, 66, 38, 29, 32, 43, 79, 55, 101, 35, 43, 79, 105, 81, 52, 26, - 32, 29, 98, 66, 29, 32, 32, 137, 55, 52, 57, 94, 84, 66, 156, 141, - 79, 20, 71, 84, 23, 18, 20, 32, 32, 15, 15, 29, 23, 20, 23, 63, - 71, 76, 89, 66, 38, 74, 20, 18, 32, 49, 84, 89, 96, 105, 112, 108, - 119, 117, 114, 125, 125, 125, 129, 129, 131, 127, 127, 125, 127, 141, 133, 137, - 133, 129, 143, 137, 135, 139, 137, 143, 149, 143, 149, 143, 143, 137, 139, 137, - 139, 133, 135, 137, 129, 135, 137, 133, 137, 141, 143, 145, 147, 145, 149, 153, - 156, 156, 160, 164, 160, 171, 176, 177, 174, 181, 185, 192, 193, 197, 203, 201, - 206, 206, 212, 212, 215, 216, 218, 218, 215, 219, 218, 219, 189, 68, 81, 101, - 96, 108, 103, 98, 101, 105, 98, 108, 98, 108, 103, 86, 86, 84, 91, 94, - 86, 81, 139, 184, 209, 212, 203, 177, 121, 89, 66, 71, 52, 41, 55, 63, - 81, 66, 63, 66, 86, 96, 110, 112, 108, 105, 86, 66, 66, 57, 52, 71, - 84, 94, 110, 119, 108, 114, 105, 98, 96, 71, 55, 46, 68, 60, 68, 46, - 23, 49, 79, 98, 105, 98, 110, 139, 171, 184, 193, 193, 190, 169, 145, 89, - 91, 110, 133, 149, 171, 179, 179, 182, 182, 185, 187, 192, 181, 172, 165, 119, - 76, 94, 89, 23, 32, 23, 41, 41, 32, 46, 23, 68, 55, 29, 43, 35, - 76, 43, 35, 35, 32, 35, 84, 55, 103, 23, 49, 84, 117, 79, 94, 32, - 32, 26, 41, 108, 20, 32, 55, 71, 149, 35, 32, 46, 68, 108, 121, 181, - 135, 20, 63, 43, 32, 15, 29, 29, 23, 38, 18, 26, 20, 32, 38, 41, - 32, 35, 26, 20, 18, 23, 32, 74, 76, 81, 91, 98, 105, 110, 125, 117, - 114, 114, 125, 123, 125, 121, 125, 131, 131, 135, 135, 143, 127, 133, 135, 135, - 131, 133, 143, 139, 137, 141, 141, 143, 145, 139, 141, 151, 139, 141, 139, 139, - 141, 141, 131, 131, 137, 139, 137, 135, 139, 139, 149, 141, 143, 149, 149, 151, - 149, 156, 162, 165, 162, 169, 174, 171, 181, 181, 185, 185, 190, 195, 197, 201, - 207, 206, 207, 210, 213, 213, 216, 215, 216, 219, 218, 218, 213, 84, 84, 89, - 94, 103, 105, 103, 112, 114, 103, 112, 110, 103, 98, 94, 108, 105, 112, 101, - 96, 86, 123, 167, 187, 190, 177, 129, 79, 79, 81, 71, 55, 66, 74, 68, - 63, 66, 57, 60, 94, 105, 121, 108, 96, 89, 76, 84, 66, 55, 49, 71, - 98, 108, 114, 117, 119, 110, 108, 103, 89, 57, 46, 63, 71, 55, 55, 49, - 26, 43, 55, 76, 96, 108, 112, 137, 165, 189, 192, 192, 187, 174, 139, 101, - 91, 103, 131, 153, 167, 176, 181, 181, 187, 185, 185, 190, 185, 181, 169, 137, - 57, 89, 43, 41, 41, 20, 32, 35, 35, 43, 49, 66, 66, 32, 35, 41, - 81, 41, 20, 41, 32, 43, 60, 74, 76, 23, 38, 101, 114, 129, 125, 66, - 55, 52, 29, 114, 60, 79, 29, 46, 133, 71, 89, 38, 81, 131, 117, 145, - 160, 103, 49, 29, 41, 15, 32, 32, 23, 41, 41, 26, 23, 23, 12, 29, - 20, 26, 43, 41, 55, 81, 68, 84, 84, 105, 110, 117, 125, 121, 125, 119, - 127, 121, 125, 123, 125, 129, 131, 131, 125, 141, 127, 127, 137, 137, 135, 135, - 129, 131, 133, 135, 131, 135, 145, 145, 139, 143, 141, 143, 141, 139, 147, 135, - 137, 139, 143, 127, 133, 135, 141, 139, 135, 137, 141, 147, 143, 143, 149, 149, - 158, 158, 160, 160, 164, 167, 167, 172, 181, 184, 184, 189, 190, 193, 198, 198, - 203, 206, 206, 210, 210, 215, 216, 216, 216, 218, 219, 219, 216, 112, 79, 89, - 91, 91, 96, 101, 105, 108, 103, 112, 110, 105, 105, 101, 108, 108, 114, 112, - 98, 101, 105, 141, 155, 147, 121, 84, 81, 63, 63, 74, 66, 79, 79, 63, - 66, 63, 74, 74, 89, 110, 117, 103, 91, 57, 57, 57, 55, 55, 63, 96, - 105, 110, 119, 129, 119, 108, 103, 91, 66, 63, 57, 49, 52, 52, 43, 32, - 41, 35, 55, 63, 91, 91, 91, 125, 160, 181, 189, 190, 187, 172, 143, 127, - 98, 112, 131, 153, 169, 181, 181, 187, 185, 184, 189, 190, 187, 167, 165, 153, - 46, 76, 29, 32, 23, 18, 38, 38, 29, 35, 49, 52, 52, 55, 32, 41, - 89, 52, 32, 43, 38, 68, 68, 105, 60, 15, 29, 94, 112, 127, 105, 76, - 29, 15, 94, 84, 137, 12, 9, 52, 35, 123, 49, 74, 41, 141, 114, 105, - 110, 117, 110, 23, 23, 35, 35, 29, 29, 20, 15, 23, 20, 15, 29, 29, - 52, 41, 71, 68, 79, 74, 86, 98, 114, 110, 117, 110, 112, 112, 117, 121, - 125, 121, 121, 125, 125, 119, 129, 127, 119, 129, 127, 133, 135, 131, 129, 135, - 129, 135, 137, 141, 139, 133, 143, 141, 143, 145, 143, 147, 143, 139, 137, 137, - 145, 135, 145, 141, 131, 137, 135, 141, 139, 137, 141, 139, 141, 149, 149, 151, - 153, 155, 160, 162, 156, 167, 169, 169, 177, 181, 182, 190, 192, 198, 197, 200, - 203, 204, 206, 207, 210, 212, 215, 218, 216, 218, 216, 219, 221, 169, 63, 79, - 86, 96, 103, 101, 103, 110, 108, 110, 119, 110, 108, 101, 117, 121, 114, 114, - 108, 114, 108, 108, 119, 112, 98, 86, 81, 76, 79, 76, 89, 76, 79, 68, - 49, 55, 76, 91, 98, 112, 86, 81, 66, 63, 55, 46, 49, 55, 74, 110, - 105, 112, 117, 129, 125, 114, 110, 86, 63, 63, 52, 55, 52, 49, 41, 38, - 35, 49, 41, 57, 74, 89, 84, 129, 149, 179, 189, 193, 189, 176, 147, 131, - 98, 112, 129, 149, 165, 176, 177, 184, 185, 185, 182, 189, 182, 174, 167, 149, - 43, 79, 35, 49, 29, 32, 46, 43, 23, 32, 46, 63, 74, 60, 46, 49, - 60, 94, 20, 32, 32, 46, 86, 101, 46, 29, 23, 71, 121, 71, 135, 110, - 18, 15, 38, 94, 127, 76, 12, 57, 89, 49, 129, 38, 71, 110, 103, 135, - 49, 121, 103, 43, 32, 29, 32, 23, 20, 9, 18, 26, 41, 41, 55, 63, - 74, 79, 89, 94, 89, 98, 110, 114, 110, 110, 114, 117, 119, 121, 119, 125, - 127, 127, 119, 125, 119, 121, 117, 133, 131, 133, 127, 129, 127, 125, 131, 141, - 137, 129, 133, 135, 137, 137, 133, 137, 135, 143, 139, 139, 141, 133, 145, 137, - 141, 137, 149, 139, 133, 137, 133, 139, 135, 139, 135, 137, 141, 149, 143, 151, - 145, 153, 156, 156, 162, 164, 169, 172, 171, 182, 181, 184, 185, 193, 197, 195, - 198, 201, 207, 206, 209, 210, 215, 215, 216, 216, 219, 221, 218, 198, 74, 68, - 86, 81, 96, 103, 103, 112, 114, 123, 117, 112, 114, 119, 123, 119, 112, 108, - 114, 117, 103, 110, 98, 101, 94, 89, 86, 96, 91, 101, 91, 76, 84, 71, - 76, 71, 86, 105, 103, 101, 81, 94, 76, 66, 66, 57, 49, 74, 91, 108, - 112, 125, 129, 121, 112, 108, 105, 81, 71, 57, 41, 49, 57, 43, 49, 46, - 38, 63, 55, 57, 63, 76, 76, 121, 155, 181, 192, 203, 200, 185, 151, 133, - 94, 105, 131, 153, 169, 177, 185, 181, 184, 182, 190, 189, 185, 176, 165, 117, - 60, 66, 55, 74, 35, 20, 43, 35, 35, 43, 41, 60, 46, 49, 55, 55, - 38, 108, 41, 32, 32, 32, 66, 101, 35, 32, 20, 66, 119, 52, 129, 137, - 41, 23, 15, 103, 108, 117, 32, 15, 26, 98, 127, 68, 41, 66, 121, 127, - 127, 84, 66, 66, 23, 18, 18, 32, 23, 32, 52, 20, 35, 41, 49, 63, - 71, 89, 101, 103, 103, 103, 101, 110, 112, 117, 121, 125, 117, 123, 117, 125, - 117, 121, 125, 117, 121, 121, 133, 127, 131, 135, 129, 135, 133, 129, 131, 133, - 137, 135, 137, 133, 133, 135, 139, 141, 135, 147, 141, 143, 141, 139, 143, 147, - 143, 137, 141, 145, 137, 137, 145, 147, 137, 143, 145, 145, 141, 147, 147, 153, - 147, 153, 156, 160, 160, 164, 165, 165, 172, 172, 176, 184, 181, 184, 192, 195, - 195, 203, 203, 204, 209, 207, 213, 216, 215, 215, 216, 218, 221, 213, 79, 66, - 81, 94, 94, 103, 108, 110, 117, 112, 114, 117, 117, 121, 121, 125, 119, 112, - 114, 110, 103, 103, 105, 96, 98, 91, 89, 105, 103, 98, 94, 79, 74, 74, - 79, 76, 96, 101, 79, 86, 79, 55, 68, 68, 81, 68, 55, 81, 98, 117, - 119, 129, 127, 112, 119, 98, 81, 63, 46, 43, 41, 49, 35, 32, 38, 26, - 41, 46, 49, 41, 60, 49, 63, 110, 155, 192, 207, 209, 207, 206, 177, 137, - 105, 119, 133, 156, 167, 181, 181, 185, 185, 185, 187, 192, 185, 177, 131, 57, - 32, 46, 43, 49, 38, 49, 52, 32, 29, 46, 43, 60, 46, 46, 43, 63, - 32, 84, 84, 20, 35, 18, 91, 119, 66, 43, 32, 46, 114, 52, 84, 143, - 105, 49, 23, 89, 108, 127, 74, 15, 15, 60, 76, 145, 26, 26, 89, 98, - 129, 57, 29, 55, 23, 43, 20, 20, 41, 29, 29, 26, 38, 68, 68, 81, - 89, 103, 101, 108, 110, 105, 108, 112, 114, 119, 117, 119, 112, 117, 123, 123, - 127, 121, 125, 125, 117, 123, 131, 121, 131, 133, 127, 133, 131, 133, 131, 131, - 133, 131, 127, 139, 133, 137, 141, 137, 137, 141, 135, 137, 141, 139, 145, 143, - 139, 141, 145, 145, 141, 143, 139, 141, 141, 143, 141, 145, 145, 145, 147, 149, - 153, 149, 156, 162, 158, 169, 167, 169, 171, 176, 182, 182, 187, 190, 193, 192, - 192, 200, 206, 206, 207, 207, 212, 215, 215, 215, 213, 219, 216, 216, 123, 55, - 86, 89, 96, 108, 110, 110, 117, 117, 114, 121, 123, 125, 121, 123, 108, 117, - 110, 110, 110, 103, 101, 98, 89, 91, 108, 108, 110, 101, 84, 81, 76, 68, - 89, 98, 96, 94, 84, 68, 60, 49, 63, 57, 84, 63, 68, 103, 117, 125, - 127, 121, 123, 108, 98, 94, 84, 63, 57, 41, 49, 60, 38, 43, 35, 32, - 35, 49, 55, 38, 55, 52, 71, 114, 156, 203, 209, 212, 209, 209, 197, 153, - 103, 114, 129, 155, 167, 176, 184, 184, 187, 182, 189, 189, 185, 174, 143, 105, - 52, 46, 46, 38, 55, 26, 35, 38, 32, 43, 43, 52, 49, 38, 46, 60, - 38, 52, 117, 18, 26, 35, 125, 103, 35, 38, 41, 52, 110, 68, 55, 156, - 147, 55, 23, 20, 79, 129, 32, 60, 12, 32, 71, 123, 105, 18, 43, 60, - 112, 123, 76, 46, 38, 29, 23, 15, 32, 35, 29, 35, 63, 76, 86, 91, - 91, 105, 105, 110, 114, 110, 105, 110, 112, 119, 119, 121, 119, 123, 121, 117, - 123, 125, 125, 123, 129, 123, 123, 123, 123, 127, 127, 129, 133, 133, 127, 127, - 131, 133, 137, 129, 129, 129, 131, 133, 139, 145, 133, 141, 147, 147, 143, 145, - 143, 147, 153, 141, 147, 147, 141, 149, 145, 139, 145, 143, 151, 147, 147, 147, - 153, 149, 155, 158, 156, 162, 167, 167, 172, 174, 176, 185, 189, 185, 189, 195, - 192, 197, 203, 206, 206, 207, 210, 212, 213, 215, 213, 216, 218, 218, 171, 71, - 76, 84, 84, 94, 84, 108, 117, 105, 110, 127, 129, 125, 127, 117, 121, 119, - 112, 114, 114, 112, 101, 101, 98, 108, 114, 114, 110, 103, 91, 89, 79, 89, - 91, 98, 103, 89, 81, 57, 68, 57, 55, 66, 60, 74, 86, 108, 121, 129, - 129, 127, 112, 110, 91, 71, 63, 46, 38, 46, 46, 41, 38, 41, 41, 60, - 35, 41, 43, 41, 52, 46, 49, 112, 165, 204, 209, 212, 213, 209, 200, 179, - 98, 112, 127, 153, 167, 176, 181, 184, 185, 182, 189, 187, 181, 174, 149, 137, - 79, 46, 29, 32, 60, 35, 57, 35, 57, 91, 49, 38, 41, 38, 52, 55, - 55, 35, 94, 52, 35, 23, 155, 79, 35, 32, 32, 84, 123, 43, 81, 114, - 162, 81, 23, 23, 35, 110, 71, 55, 49, 20, 76, 60, 121, 43, 35, 63, - 91, 110, 103, 121, 26, 20, 6, 15, 20, 26, 41, 60, 66, 71, 91, 103, - 101, 105, 98, 103, 112, 119, 110, 103, 117, 121, 125, 121, 119, 123, 117, 121, - 119, 121, 125, 121, 125, 123, 119, 129, 125, 127, 127, 123, 133, 133, 127, 131, - 131, 135, 131, 131, 137, 135, 137, 129, 141, 135, 137, 141, 137, 139, 151, 141, - 141, 143, 139, 147, 147, 143, 137, 147, 143, 141, 145, 151, 143, 149, 149, 153, - 155, 147, 149, 160, 158, 164, 169, 167, 172, 171, 182, 184, 181, 184, 190, 193, - 198, 197, 198, 203, 212, 210, 210, 212, 212, 215, 216, 216, 218, 219, 200, 55, - 68, 76, 96, 114, 105, 114, 96, 117, 110, 129, 123, 127, 117, 121, 121, 112, - 112, 110, 103, 108, 105, 108, 110, 112, 121, 123, 112, 98, 89, 84, 94, 105, - 101, 101, 91, 81, 79, 84, 71, 79, 68, 57, 81, 86, 108, 125, 131, 131, - 133, 123, 112, 96, 84, 71, 46, 38, 41, 35, 46, 52, 43, 49, 63, 63, - 38, 49, 41, 35, 55, 43, 55, 112, 171, 206, 209, 210, 210, 207, 201, 182, - 108, 117, 131, 151, 165, 179, 182, 182, 184, 182, 184, 182, 181, 182, 129, 131, - 91, 35, 32, 26, 46, 20, 49, 26, 43, 41, 46, 46, 41, 46, 84, 84, - 79, 52, 49, 74, 43, 46, 151, 71, 38, 32, 43, 79, 112, 15, 94, 76, - 149, 139, 35, 15, 46, 133, 139, 38, 71, 43, 49, 91, 60, 91, 18, 71, - 79, 133, 84, 129, 127, 38, 18, 15, 18, 32, 41, 57, 76, 79, 84, 91, - 98, 103, 108, 108, 114, 112, 112, 108, 112, 117, 123, 121, 119, 117, 121, 125, - 121, 125, 123, 125, 129, 123, 119, 114, 137, 127, 131, 129, 125, 129, 127, 129, - 135, 137, 129, 131, 131, 133, 135, 139, 137, 141, 143, 149, 145, 145, 133, 139, - 145, 139, 141, 139, 147, 147, 147, 147, 155, 147, 141, 145, 145, 155, 149, 155, - 156, 156, 155, 155, 164, 164, 167, 165, 162, 172, 172, 182, 177, 185, 192, 192, - 190, 197, 200, 204, 206, 207, 207, 210, 212, 213, 216, 216, 216, 218, 213, 89, - 76, 79, 86, 86, 94, 110, 103, 108, 121, 117, 123, 123, 121, 123, 129, 112, - 112, 114, 108, 117, 114, 105, 117, 121, 121, 119, 108, 101, 86, 89, 91, 96, - 81, 84, 74, 89, 79, 84, 89, 66, 68, 71, 89, 108, 121, 135, 133, 133, - 125, 114, 98, 89, 68, 55, 60, 26, 32, 43, 43, 63, 43, 63, 96, 76, - 32, 38, 41, 35, 46, 46, 46, 89, 169, 206, 206, 209, 209, 204, 197, 184, - 98, 108, 133, 155, 164, 176, 181, 182, 182, 185, 185, 185, 184, 177, 112, 98, - 74, 41, 57, 20, 18, 29, 55, 35, 52, 49, 79, 43, 41, 55, 71, 96, - 71, 35, 43, 55, 60, 79, 149, 35, 52, 38, 52, 79, 129, 23, 71, 68, - 76, 135, 105, 23, 46, 145, 137, 49, 15, 26, 49, 91, 68, 41, 29, 26, - 41, 103, 71, 86, 143, 139, 35, 43, 32, 57, 66, 68, 76, 79, 96, 101, - 103, 105, 110, 103, 108, 121, 114, 114, 123, 114, 123, 119, 121, 119, 127, 117, - 121, 125, 119, 119, 127, 123, 119, 127, 131, 127, 127, 127, 131, 133, 125, 125, - 131, 131, 137, 133, 131, 139, 135, 137, 143, 139, 141, 137, 141, 147, 137, 147, - 143, 145, 147, 141, 147, 149, 147, 143, 153, 147, 153, 139, 145, 153, 147, 149, - 153, 155, 156, 158, 160, 162, 171, 165, 169, 169, 172, 174, 179, 184, 185, 192, - 193, 197, 200, 200, 203, 207, 206, 210, 212, 212, 213, 210, 216, 221, 221, 127, - 71, 81, 94, 96, 89, 98, 94, 117, 110, 121, 119, 121, 129, 129, 123, 123, - 121, 114, 114, 119, 125, 129, 135, 129, 121, 110, 110, 86, 94, 91, 76, 84, - 79, 81, 68, 91, 86, 84, 84, 81, 71, 81, 91, 114, 133, 139, 137, 131, - 131, 105, 89, 76, 49, 43, 41, 38, 41, 41, 43, 52, 68, 84, 94, 91, - 32, 46, 43, 38, 52, 29, 38, 79, 156, 206, 206, 206, 209, 204, 197, 174, - 108, 121, 133, 155, 167, 169, 176, 185, 184, 182, 185, 185, 179, 182, 129, 94, - 66, 38, 32, 18, 18, 43, 68, 15, 46, 23, 71, 55, 41, 55, 63, 63, - 63, 55, 38, 68, 96, 149, 96, 38, 71, 18, 46, 66, 123, 35, 35, 76, - 60, 55, 151, 91, 35, 137, 98, 29, 38, 35, 32, 57, 79, 63, 66, 23, - 38, 74, 98, 18, 103, 71, 129, 35, 60, 66, 68, 84, 79, 81, 89, 96, - 103, 101, 101, 108, 110, 114, 112, 117, 114, 119, 127, 127, 119, 123, 119, 123, - 119, 121, 123, 129, 125, 127, 123, 123, 123, 121, 129, 131, 133, 129, 125, 125, - 127, 125, 131, 133, 133, 137, 133, 131, 137, 139, 141, 139, 137, 141, 137, 137, - 141, 139, 141, 141, 145, 145, 147, 149, 147, 147, 147, 147, 153, 151, 149, 149, - 162, 167, 158, 155, 160, 165, 164, 171, 165, 167, 174, 172, 177, 181, 184, 192, - 192, 198, 198, 203, 200, 203, 206, 207, 210, 212, 213, 212, 216, 215, 218, 160, - 108, 101, 98, 96, 94, 94, 96, 101, 108, 108, 125, 133, 133, 135, 129, 123, - 117, 121, 123, 121, 131, 137, 139, 133, 119, 117, 91, 76, 84, 76, 74, 71, - 68, 60, 84, 89, 91, 91, 81, 76, 79, 96, 101, 125, 133, 139, 137, 131, - 121, 101, 71, 49, 49, 38, 26, 20, 26, 35, 60, 74, 94, 94, 91, 96 }; - -/* Define image 'milla' of size 211x242x1x3 and type 'const unsigned char' */ -const unsigned char data_milla[] = { - 93, 92, 92, 91, 91, 90, 90, 90, 92, 90, 92, 91, 91, 92, 92, 92, - 93, 99, 97, 95, 101, 95, 89, 93, 92, 92, 94, 96, 97, 95, 95, 94, - 96, 96, 96, 96, 96, 96, 96, 96, 93, 94, 95, 96, 97, 98, 98, 98, - 94, 98, 98, 95, 96, 99, 99, 97, 99, 98, 98, 97, 97, 98, 98, 100, - 103, 103, 103, 102, 102, 103, 102, 102, 100, 101, 102, 101, 101, 101, 101, 100, - 102, 103, 103, 104, 103, 104, 104, 104, 104, 102, 104, 103, 103, 104, 104, 104, - 103, 103, 105, 104, 106, 105, 107, 105, 110, 107, 108, 105, 108, 107, 111, 110, - 108, 111, 108, 104, 112, 109, 108, 112, 112, 111, 115, 113, 113, 111, 115, 114, - 109, 108, 109, 110, 110, 110, 110, 109, 104, 111, 109, 105, 111, 108, 106, 112, - 107, 105, 104, 103, 104, 106, 109, 110, 110, 112, 108, 116, 112, 106, 108, 84, - 14, 31, 62, 66, 85, 85, 103, 106, 107, 109, 103, 105, 116, 114, 105, 109, - 112, 110, 110, 113, 113, 111, 112, 115, 116, 115, 113, 113, 115, 115, 113, 112, - 111, 112, 112, 112, 112, 111, 110, 109, 113, 113, 113, 112, 112, 111, 111, 111, - 114, 113, 113, 94, 94, 94, 93, 92, 91, 91, 91, 85, 85, 88, 88, 89, - 90, 88, 89, 93, 94, 94, 93, 92, 93, 95, 97, 93, 94, 96, 94, 93, - 92, 94, 94, 95, 95, 96, 95, 94, 92, 89, 88, 93, 93, 93, 93, 93, - 94, 96, 96, 96, 96, 96, 97, 97, 98, 98, 98, 100, 99, 99, 98, 98, - 99, 99, 100, 98, 100, 102, 100, 99, 98, 98, 99, 100, 103, 104, 100, 100, - 103, 102, 99, 101, 101, 101, 102, 102, 103, 103, 103, 105, 104, 105, 105, 105, - 106, 106, 106, 102, 105, 106, 102, 104, 106, 107, 104, 104, 103, 104, 104, 105, - 105, 106, 105, 105, 106, 109, 108, 108, 106, 108, 108, 106, 109, 110, 106, 108, - 110, 111, 108, 112, 110, 106, 107, 111, 112, 109, 107, 110, 109, 107, 105, 106, - 106, 109, 110, 106, 109, 109, 106, 106, 109, 109, 106, 114, 109, 111, 110, 116, - 99, 108, 78, 9, 30, 59, 64, 90, 88, 99, 105, 107, 111, 104, 104, 114, - 112, 104, 104, 109, 107, 107, 110, 111, 108, 108, 112, 113, 113, 113, 113, 113, - 113, 113, 113, 110, 112, 114, 114, 112, 111, 111, 112, 114, 114, 112, 111, 111, - 111, 111, 111, 109, 116, 113, 93, 94, 92, 92, 91, 90, 90, 88, 89, 88, - 89, 90, 89, 89, 89, 91, 92, 94, 94, 93, 92, 93, 94, 97, 91, 92, - 92, 92, 90, 90, 91, 92, 93, 93, 94, 94, 94, 93, 92, 92, 96, 95, - 94, 93, 93, 93, 94, 94, 96, 96, 96, 97, 97, 98, 98, 98, 100, 99, - 99, 98, 98, 99, 99, 100, 98, 99, 101, 101, 100, 98, 99, 100, 100, 104, - 104, 101, 101, 104, 103, 99, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, - 105, 106, 106, 107, 107, 106, 102, 105, 105, 102, 103, 106, 106, 104, 103, 103, - 104, 104, 104, 105, 105, 105, 104, 107, 109, 109, 108, 107, 108, 109, 106, 109, - 109, 106, 107, 110, 111, 108, 111, 110, 107, 108, 110, 111, 109, 108, 109, 109, - 107, 106, 106, 107, 108, 108, 108, 111, 111, 108, 108, 111, 111, 108, 113, 109, - 111, 109, 116, 100, 109, 78, 9, 30, 58, 62, 90, 88, 99, 105, 107, 109, - 103, 103, 114, 113, 104, 107, 110, 108, 108, 112, 112, 109, 110, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 110, 112, 114, 114, 112, 111, 111, 112, 114, 113, - 112, 111, 111, 111, 111, 112, 109, 116, 113, 92, 91, 91, 91, 90, 89, 87, - 87, 91, 91, 89, 89, 87, 89, 91, 92, 92, 94, 94, 94, 93, 93, 94, - 96, 91, 93, 92, 92, 91, 90, 91, 92, 92, 92, 92, 92, 93, 93, 94, - 95, 97, 96, 95, 94, 93, 93, 93, 93, 96, 96, 96, 97, 97, 98, 98, - 98, 100, 99, 99, 98, 98, 99, 99, 100, 98, 100, 102, 102, 100, 99, 100, - 101, 101, 104, 105, 102, 101, 103, 102, 98, 101, 102, 102, 102, 103, 103, 103, - 103, 105, 105, 105, 106, 106, 107, 107, 106, 102, 105, 105, 102, 103, 106, 106, - 104, 103, 104, 104, 104, 105, 105, 105, 105, 105, 108, 110, 110, 109, 108, 109, - 110, 106, 109, 109, 107, 107, 110, 111, 108, 109, 110, 110, 109, 109, 108, 109, - 110, 109, 109, 107, 107, 107, 107, 108, 108, 109, 112, 112, 109, 109, 112, 112, - 109, 111, 108, 110, 108, 116, 102, 110, 77, 10, 30, 59, 63, 90, 88, 99, - 105, 105, 108, 102, 102, 115, 114, 106, 108, 111, 109, 109, 113, 113, 110, 111, - 114, 113, 113, 113, 113, 113, 113, 113, 113, 110, 112, 114, 114, 112, 111, 111, - 112, 114, 113, 112, 111, 111, 111, 112, 112, 109, 116, 113, 92, 92, 91, 91, - 90, 90, 88, 88, 91, 90, 87, 86, 84, 86, 89, 91, 92, 94, 95, 94, - 93, 93, 94, 96, 94, 95, 95, 94, 93, 93, 94, 95, 94, 93, 92, 91, - 91, 93, 95, 96, 96, 96, 95, 94, 94, 94, 95, 95, 96, 96, 96, 97, - 97, 98, 98, 98, 100, 99, 99, 98, 98, 99, 99, 100, 99, 101, 103, 103, - 101, 100, 101, 102, 102, 105, 105, 102, 101, 103, 102, 98, 102, 102, 102, 103, - 103, 103, 104, 104, 105, 105, 105, 106, 106, 107, 107, 106, 102, 105, 105, 102, - 103, 106, 106, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 110, 111, - 109, 109, 109, 111, 106, 109, 110, 107, 107, 111, 111, 108, 108, 111, 111, 110, - 108, 107, 108, 111, 109, 109, 108, 107, 107, 108, 108, 108, 108, 111, 111, 108, - 108, 111, 111, 108, 110, 108, 109, 107, 116, 103, 111, 75, 11, 31, 60, 63, - 90, 88, 99, 105, 106, 109, 103, 102, 114, 113, 105, 107, 110, 108, 109, 112, - 112, 110, 110, 113, 114, 114, 113, 113, 113, 113, 112, 112, 110, 112, 114, 114, - 112, 111, 111, 112, 113, 113, 112, 111, 111, 111, 112, 113, 109, 116, 113, 92, - 92, 92, 92, 92, 92, 90, 90, 92, 91, 88, 86, 87, 88, 89, 90, 91, - 93, 95, 95, 94, 93, 93, 95, 94, 96, 95, 95, 94, 94, 94, 96, 96, - 95, 93, 91, 91, 92, 93, 94, 93, 93, 93, 94, 95, 96, 98, 99, 96, - 96, 96, 97, 97, 98, 98, 98, 100, 99, 99, 98, 98, 99, 99, 100, 99, - 101, 103, 103, 101, 100, 101, 102, 101, 104, 105, 102, 101, 103, 102, 98, 102, - 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 107, 107, 106, 102, - 105, 105, 102, 103, 106, 106, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, - 108, 110, 111, 109, 109, 109, 111, 107, 110, 110, 108, 108, 111, 112, 109, 108, - 111, 111, 110, 108, 107, 108, 111, 109, 109, 108, 109, 109, 108, 108, 108, 107, - 110, 110, 107, 107, 110, 110, 107, 109, 108, 110, 106, 116, 105, 110, 72, 12, - 32, 60, 64, 91, 88, 98, 105, 108, 111, 104, 103, 114, 112, 103, 105, 109, - 107, 107, 111, 111, 108, 109, 112, 114, 114, 114, 113, 113, 112, 112, 112, 110, - 112, 114, 114, 112, 111, 111, 112, 113, 112, 111, 111, 111, 112, 113, 113, 109, - 116, 113, 91, 92, 92, 92, 92, 93, 91, 91, 94, 93, 91, 90, 90, 91, - 93, 93, 91, 93, 95, 95, 94, 94, 93, 94, 92, 94, 93, 93, 92, 92, - 92, 94, 95, 94, 93, 93, 92, 92, 92, 92, 92, 93, 93, 94, 96, 98, - 99, 100, 96, 96, 96, 97, 97, 98, 98, 98, 100, 99, 99, 98, 98, 99, - 99, 100, 98, 100, 102, 102, 100, 99, 100, 101, 100, 103, 104, 101, 101, 104, - 103, 100, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 106, 106, 107, - 107, 106, 102, 105, 105, 102, 103, 106, 106, 104, 105, 105, 105, 105, 106, 106, - 106, 107, 105, 108, 110, 110, 109, 108, 109, 110, 107, 110, 111, 108, 108, 112, - 112, 109, 109, 110, 110, 109, 109, 108, 109, 110, 109, 109, 109, 109, 109, 109, - 108, 108, 106, 109, 109, 106, 106, 109, 109, 106, 110, 109, 110, 105, 115, 105, - 110, 68, 13, 33, 61, 64, 91, 88, 98, 105, 109, 111, 105, 103, 114, 111, - 102, 104, 108, 106, 107, 110, 110, 108, 108, 111, 115, 115, 114, 113, 113, 112, - 111, 111, 110, 112, 114, 114, 112, 111, 111, 112, 112, 112, 111, 111, 111, 112, - 113, 114, 109, 116, 113, 90, 90, 91, 89, 89, 90, 90, 90, 93, 93, 93, - 93, 93, 92, 92, 92, 90, 93, 95, 96, 95, 94, 93, 94, 93, 94, 94, - 93, 92, 92, 92, 94, 92, 92, 93, 94, 94, 94, 93, 93, 94, 94, 94, - 95, 96, 97, 98, 99, 96, 96, 96, 97, 97, 98, 98, 98, 100, 99, 99, - 98, 98, 99, 99, 100, 98, 99, 101, 101, 100, 98, 99, 100, 98, 102, 103, - 101, 102, 105, 105, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, - 106, 106, 107, 107, 106, 102, 105, 105, 102, 103, 106, 106, 104, 105, 105, 105, - 106, 106, 106, 107, 107, 104, 107, 109, 109, 108, 107, 108, 109, 107, 110, 111, - 108, 109, 112, 112, 109, 111, 110, 107, 108, 110, 111, 109, 108, 109, 109, 109, - 110, 110, 109, 108, 108, 107, 110, 110, 107, 107, 110, 110, 107, 111, 111, 111, - 104, 115, 106, 108, 64, 13, 34, 62, 65, 91, 88, 98, 104, 108, 110, 104, - 103, 114, 112, 103, 106, 109, 107, 108, 111, 111, 109, 109, 112, 115, 115, 114, - 113, 113, 112, 111, 111, 110, 112, 114, 114, 112, 111, 111, 112, 112, 111, 111, - 111, 111, 112, 113, 114, 109, 116, 113, 87, 87, 87, 88, 88, 89, 89, 89, - 90, 91, 91, 92, 92, 91, 90, 90, 90, 93, 95, 96, 95, 94, 93, 94, - 95, 97, 96, 96, 95, 94, 95, 96, 88, 89, 92, 94, 95, 96, 95, 95, - 96, 96, 95, 95, 95, 96, 97, 97, 96, 96, 96, 97, 97, 98, 98, 98, - 100, 99, 99, 98, 98, 99, 99, 100, 97, 99, 101, 100, 99, 98, 98, 99, - 97, 101, 102, 101, 102, 106, 106, 103, 103, 103, 103, 104, 104, 105, 105, 105, - 105, 105, 105, 106, 106, 107, 107, 106, 102, 105, 105, 102, 103, 106, 106, 104, - 105, 105, 105, 106, 106, 107, 107, 107, 104, 106, 108, 108, 107, 106, 107, 108, - 107, 111, 111, 108, 109, 112, 112, 110, 112, 110, 106, 107, 111, 112, 109, 107, - 108, 109, 110, 111, 111, 110, 108, 107, 109, 112, 112, 109, 109, 112, 112, 109, - 111, 112, 112, 104, 115, 106, 108, 62, 14, 34, 62, 65, 91, 88, 98, 104, - 105, 108, 102, 102, 114, 113, 105, 108, 110, 109, 109, 112, 113, 110, 110, 114, - 115, 115, 114, 113, 113, 112, 111, 111, 110, 112, 114, 114, 112, 111, 111, 112, - 111, 111, 111, 111, 111, 112, 114, 114, 109, 116, 113, 91, 91, 92, 92, 92, - 91, 90, 90, 92, 91, 90, 91, 93, 94, 93, 92, 94, 94, 94, 94, 94, - 94, 93, 93, 95, 96, 94, 95, 95, 94, 93, 92, 94, 91, 91, 94, 94, - 91, 91, 94, 97, 96, 96, 96, 96, 97, 98, 99, 101, 100, 98, 96, 95, - 95, 96, 96, 99, 100, 101, 102, 102, 100, 99, 98, 100, 99, 99, 99, 99, - 100, 101, 102, 106, 105, 103, 102, 101, 101, 102, 103, 104, 104, 104, 105, 105, - 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 107, 107, 105, 104, 104, 106, - 106, 105, 104, 110, 104, 107, 109, 103, 106, 111, 106, 108, 108, 108, 109, 109, - 110, 110, 110, 111, 110, 110, 110, 110, 110, 109, 109, 115, 114, 110, 110, 110, - 110, 111, 112, 110, 110, 109, 109, 109, 109, 109, 109, 110, 112, 111, 107, 107, - 111, 112, 110, 117, 109, 114, 111, 113, 102, 107, 58, 13, 37, 65, 65, 92, - 92, 102, 106, 113, 106, 104, 108, 113, 111, 106, 106, 110, 109, 110, 112, 111, - 107, 108, 112, 116, 115, 113, 111, 109, 108, 108, 107, 110, 114, 115, 112, 112, - 114, 112, 108, 117, 115, 111, 108, 108, 110, 113, 115, 108, 117, 115, 90, 90, - 91, 92, 91, 91, 91, 90, 92, 91, 90, 91, 93, 94, 95, 94, 94, 94, - 94, 94, 94, 94, 93, 93, 95, 96, 94, 95, 95, 94, 93, 92, 95, 92, - 92, 95, 95, 92, 92, 95, 97, 96, 96, 96, 96, 97, 98, 99, 96, 96, - 96, 96, 97, 98, 99, 100, 99, 100, 100, 101, 101, 100, 100, 99, 100, 100, - 99, 99, 100, 100, 101, 102, 104, 103, 102, 102, 102, 103, 104, 105, 104, 104, - 104, 105, 105, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 106, 104, - 102, 103, 105, 105, 104, 103, 109, 103, 107, 109, 103, 106, 110, 105, 108, 108, - 108, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 112, 111, - 108, 108, 108, 108, 108, 109, 110, 110, 109, 109, 109, 109, 109, 109, 109, 112, - 111, 108, 108, 111, 112, 109, 113, 107, 112, 109, 114, 104, 109, 60, 14, 37, - 65, 65, 92, 92, 102, 106, 113, 106, 104, 108, 113, 111, 106, 106, 110, 109, - 110, 112, 111, 107, 108, 113, 114, 114, 113, 112, 111, 111, 112, 112, 111, 114, - 114, 111, 111, 113, 112, 109, 116, 114, 111, 109, 109, 110, 112, 114, 112, 116, - 112, 90, 88, 90, 90, 90, 90, 91, 91, 92, 91, 92, 93, 95, 96, 96, - 94, 94, 94, 94, 94, 94, 95, 94, 94, 95, 96, 94, 95, 95, 94, 93, - 92, 95, 92, 92, 95, 95, 92, 92, 95, 97, 96, 96, 96, 96, 97, 98, - 99, 95, 95, 96, 98, 99, 99, 99, 99, 100, 100, 100, 99, 99, 100, 100, - 101, 100, 100, 99, 99, 100, 101, 102, 102, 102, 102, 101, 102, 103, 104, 105, - 106, 104, 104, 104, 105, 105, 106, 106, 106, 105, 105, 105, 106, 106, 107, 107, - 106, 105, 103, 102, 102, 104, 105, 103, 102, 109, 103, 106, 108, 102, 105, 110, - 105, 108, 108, 108, 109, 109, 110, 110, 110, 109, 109, 109, 110, 111, 111, 112, - 112, 112, 111, 109, 108, 108, 109, 108, 109, 110, 110, 109, 109, 109, 109, 109, - 109, 108, 111, 112, 109, 109, 112, 111, 108, 110, 105, 110, 108, 114, 107, 112, - 60, 14, 38, 66, 66, 92, 92, 102, 105, 113, 106, 104, 108, 113, 111, 106, - 106, 110, 109, 110, 113, 111, 108, 109, 113, 112, 112, 112, 112, 113, 114, 115, - 116, 112, 115, 114, 110, 110, 113, 113, 110, 114, 113, 112, 111, 111, 111, 112, - 112, 114, 116, 109, 90, 88, 89, 89, 90, 90, 92, 92, 92, 91, 92, 93, - 95, 96, 96, 94, 96, 94, 94, 95, 95, 95, 94, 95, 95, 96, 94, 95, - 95, 94, 93, 92, 95, 92, 92, 95, 95, 92, 92, 95, 97, 96, 96, 96, - 96, 97, 98, 99, 97, 98, 99, 100, 99, 98, 96, 95, 101, 100, 99, 98, - 98, 100, 101, 102, 101, 100, 100, 100, 100, 101, 102, 103, 102, 102, 102, 102, - 103, 104, 104, 105, 104, 104, 104, 105, 105, 106, 106, 106, 105, 105, 105, 105, - 106, 106, 107, 106, 106, 104, 103, 103, 105, 105, 104, 103, 108, 103, 106, 108, - 102, 105, 109, 105, 108, 108, 108, 109, 109, 110, 110, 110, 108, 109, 109, 110, - 111, 112, 113, 113, 113, 113, 111, 111, 111, 111, 110, 110, 111, 111, 110, 110, - 110, 110, 110, 110, 107, 111, 112, 110, 110, 112, 111, 107, 109, 105, 110, 107, - 114, 108, 112, 57, 15, 38, 66, 66, 93, 92, 102, 105, 113, 106, 104, 108, - 113, 111, 106, 106, 109, 109, 110, 113, 112, 108, 110, 114, 112, 112, 111, 112, - 112, 113, 115, 115, 113, 115, 113, 109, 109, 112, 113, 111, 112, 113, 113, 113, - 112, 112, 111, 110, 113, 116, 110, 90, 87, 87, 87, 89, 90, 93, 93, 92, - 91, 92, 93, 96, 97, 96, 94, 96, 94, 94, 95, 95, 96, 95, 96, 95, - 96, 94, 95, 95, 94, 93, 92, 96, 93, 93, 96, 96, 93, 93, 96, 97, - 96, 96, 96, 96, 97, 98, 99, 97, 98, 99, 100, 100, 99, 97, 96, 100, - 100, 99, 98, 99, 100, 102, 103, 101, 101, 100, 100, 101, 101, 102, 103, 104, - 104, 104, 104, 103, 102, 102, 101, 104, 104, 104, 105, 105, 106, 106, 106, 105, - 105, 105, 106, 106, 107, 107, 106, 108, 106, 105, 105, 107, 107, 106, 105, 109, - 103, 106, 108, 102, 105, 110, 105, 108, 108, 108, 109, 109, 110, 110, 110, 109, - 109, 110, 111, 112, 113, 113, 114, 113, 113, 111, 111, 111, 111, 110, 110, 111, - 111, 110, 110, 110, 110, 110, 110, 107, 111, 112, 110, 110, 112, 111, 107, 111, - 108, 112, 106, 113, 108, 109, 52, 16, 39, 67, 67, 93, 92, 102, 105, 113, - 106, 104, 108, 113, 111, 106, 106, 109, 109, 110, 113, 112, 109, 111, 115, 113, - 112, 111, 111, 110, 111, 111, 111, 113, 115, 113, 109, 109, 112, 113, 111, 112, - 112, 113, 113, 113, 112, 111, 110, 109, 117, 114, 88, 87, 86, 86, 89, 90, - 93, 95, 92, 91, 92, 93, 96, 97, 96, 95, 96, 94, 95, 95, 96, 97, - 96, 96, 95, 96, 94, 95, 95, 94, 93, 92, 96, 93, 93, 96, 96, 93, - 93, 96, 97, 96, 96, 96, 96, 97, 98, 99, 94, 95, 97, 99, 100, 101, - 102, 102, 99, 99, 99, 99, 100, 101, 102, 103, 101, 101, 101, 101, 101, 102, - 103, 103, 104, 104, 105, 104, 103, 102, 101, 100, 104, 104, 104, 105, 105, 106, - 106, 106, 106, 106, 107, 107, 107, 108, 108, 107, 109, 107, 105, 106, 108, 108, - 107, 106, 110, 104, 107, 109, 103, 106, 111, 106, 108, 108, 108, 109, 109, 110, - 110, 110, 110, 110, 111, 111, 112, 113, 113, 113, 110, 111, 109, 110, 110, 109, - 108, 107, 112, 112, 111, 111, 111, 111, 111, 111, 108, 111, 112, 109, 109, 112, - 111, 108, 112, 110, 113, 106, 113, 108, 108, 47, 17, 40, 68, 67, 93, 92, - 102, 105, 113, 106, 104, 108, 113, 111, 106, 106, 109, 109, 110, 114, 113, 110, - 111, 116, 114, 113, 112, 110, 109, 109, 109, 109, 112, 115, 114, 110, 110, 113, - 113, 110, 112, 113, 113, 113, 113, 112, 111, 110, 108, 117, 116, 88, 86, 86, - 85, 88, 90, 93, 95, 92, 93, 92, 93, 96, 97, 97, 95, 96, 94, 95, - 95, 96, 97, 97, 97, 95, 96, 94, 95, 95, 94, 93, 92, 96, 93, 93, - 96, 96, 93, 93, 96, 97, 96, 96, 96, 96, 97, 98, 99, 95, 96, 96, - 97, 99, 101, 103, 104, 97, 98, 99, 100, 101, 102, 102, 102, 102, 101, 101, - 101, 101, 102, 103, 104, 102, 103, 104, 104, 104, 103, 102, 101, 104, 104, 104, - 105, 105, 106, 106, 106, 107, 107, 108, 108, 109, 109, 109, 108, 108, 106, 105, - 105, 107, 108, 106, 105, 111, 105, 109, 110, 105, 107, 112, 107, 108, 108, 108, - 109, 109, 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 110, 110, 109, - 110, 110, 109, 107, 107, 112, 112, 111, 111, 111, 111, 111, 111, 109, 112, 111, - 108, 108, 111, 112, 109, 112, 110, 113, 105, 113, 109, 108, 45, 18, 41, 68, - 68, 93, 92, 102, 105, 113, 106, 104, 108, 113, 111, 106, 106, 109, 109, 110, - 114, 113, 110, 112, 117, 115, 114, 113, 111, 111, 110, 110, 110, 111, 114, 114, - 111, 111, 113, 112, 109, 113, 113, 113, 112, 112, 111, 111, 111, 110, 117, 113, - 90, 87, 88, 87, 88, 90, 93, 96, 92, 93, 92, 93, 95, 96, 96, 94, - 94, 94, 95, 96, 97, 97, 97, 98, 95, 96, 94, 95, 95, 94, 94, 92, - 97, 94, 94, 97, 97, 94, 94, 97, 97, 96, 96, 97, 97, 98, 99, 100, - 100, 99, 98, 97, 97, 99, 100, 101, 96, 97, 99, 101, 102, 102, 101, 101, - 102, 101, 101, 100, 101, 101, 103, 103, 99, 100, 102, 103, 104, 104, 103, 103, - 105, 105, 105, 106, 106, 107, 107, 106, 108, 108, 108, 108, 108, 109, 109, 107, - 107, 106, 105, 104, 107, 106, 105, 104, 112, 106, 110, 111, 105, 108, 113, 108, - 108, 108, 108, 109, 109, 110, 111, 111, 114, 114, 113, 113, 113, 112, 112, 111, - 112, 112, 112, 113, 113, 112, 109, 109, 112, 112, 111, 111, 111, 111, 111, 111, - 110, 112, 111, 107, 107, 111, 112, 110, 110, 109, 112, 104, 113, 111, 109, 45, - 17, 41, 69, 70, 94, 93, 104, 106, 113, 105, 104, 108, 111, 111, 108, 108, - 110, 109, 111, 114, 113, 111, 112, 117, 115, 114, 113, 112, 112, 112, 113, 113, - 110, 114, 115, 112, 112, 114, 112, 108, 114, 113, 112, 111, 111, 111, 112, 112, - 114, 116, 109, 91, 91, 89, 90, 90, 91, 91, 91, 92, 91, 91, 91, 91, - 92, 92, 93, 92, 92, 92, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, - 98, 98, 96, 92, 93, 94, 95, 95, 95, 96, 95, 95, 96, 98, 100, 98, - 98, 100, 101, 99, 98, 98, 99, 99, 100, 100, 100, 102, 102, 102, 101, 101, - 100, 100, 100, 99, 106, 103, 98, 104, 99, 98, 103, 98, 102, 100, 96, 96, - 103, 105, 105, 109, 112, 112, 113, 111, 110, 109, 106, 106, 113, 108, 104, 106, - 103, 98, 108, 103, 108, 109, 105, 108, 110, 106, 98, 114, 110, 108, 110, 110, - 107, 107, 111, 109, 108, 107, 109, 110, 112, 113, 113, 113, 114, 114, 114, 115, - 112, 112, 111, 112, 112, 113, 113, 111, 111, 111, 112, 110, 111, 111, 110, 109, - 110, 112, 115, 107, 110, 112, 111, 108, 106, 107, 109, 112, 104, 112, 107, 108, - 105, 108, 41, 16, 44, 67, 77, 94, 102, 105, 109, 115, 104, 100, 108, 113, - 110, 107, 110, 112, 110, 110, 113, 114, 111, 111, 115, 112, 114, 116, 115, 113, - 112, 114, 116, 111, 115, 115, 112, 111, 113, 112, 108, 114, 113, 112, 111, 111, - 111, 111, 112, 110, 111, 112, 92, 92, 92, 92, 92, 93, 91, 91, 93, 93, - 91, 91, 92, 93, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, - 96, 97, 97, 98, 98, 96, 93, 91, 93, 94, 94, 95, 96, 96, 95, 97, - 100, 100, 100, 99, 101, 101, 99, 98, 98, 99, 99, 100, 100, 100, 102, 102, - 102, 101, 101, 100, 100, 100, 100, 107, 103, 100, 104, 101, 98, 105, 98, 101, - 100, 97, 98, 103, 104, 104, 109, 110, 110, 109, 109, 107, 107, 106, 99, 105, - 102, 98, 102, 99, 96, 105, 101, 104, 104, 100, 103, 106, 105, 100, 108, 104, - 101, 103, 102, 98, 98, 101, 105, 105, 106, 108, 111, 111, 112, 110, 115, 115, - 115, 113, 114, 113, 113, 114, 109, 110, 111, 110, 107, 107, 108, 109, 110, 111, - 111, 110, 110, 111, 113, 116, 108, 111, 113, 112, 109, 107, 108, 109, 114, 107, - 114, 108, 108, 104, 106, 37, 17, 44, 67, 78, 96, 104, 106, 109, 114, 103, - 99, 106, 112, 109, 108, 110, 112, 110, 110, 113, 114, 111, 111, 115, 112, 114, - 116, 115, 113, 112, 114, 116, 110, 114, 114, 111, 111, 113, 113, 109, 114, 113, - 112, 111, 111, 111, 111, 112, 112, 113, 113, 92, 93, 92, 92, 93, 93, 91, - 91, 94, 94, 93, 93, 93, 94, 93, 93, 92, 93, 93, 93, 94, 94, 94, - 94, 96, 96, 96, 97, 97, 98, 98, 96, 94, 92, 93, 92, 93, 94, 97, - 98, 95, 97, 100, 100, 100, 100, 101, 102, 99, 98, 98, 99, 99, 100, 100, - 100, 102, 102, 101, 101, 101, 101, 100, 100, 103, 110, 107, 104, 108, 105, 100, - 107, 101, 104, 105, 103, 103, 106, 106, 103, 107, 104, 102, 100, 100, 101, 103, - 104, 97, 104, 102, 98, 103, 101, 98, 105, 106, 106, 104, 101, 104, 108, 108, - 106, 110, 107, 106, 108, 108, 105, 106, 108, 102, 104, 105, 107, 108, 109, 108, - 108, 113, 113, 111, 108, 108, 107, 108, 108, 111, 111, 111, 110, 108, 109, 112, - 112, 109, 110, 111, 112, 113, 114, 116, 118, 111, 112, 113, 113, 111, 109, 110, - 110, 117, 109, 116, 110, 109, 104, 105, 35, 17, 44, 67, 79, 96, 104, 106, - 109, 112, 101, 98, 105, 112, 109, 107, 110, 112, 110, 110, 113, 114, 111, 111, - 115, 113, 114, 115, 115, 113, 113, 114, 115, 109, 113, 113, 111, 111, 114, 114, - 110, 114, 113, 112, 111, 111, 111, 111, 112, 114, 114, 114, 93, 93, 92, 93, - 93, 93, 92, 92, 94, 94, 93, 92, 93, 94, 93, 93, 93, 93, 93, 94, - 94, 94, 95, 95, 96, 96, 96, 97, 97, 98, 98, 96, 95, 92, 92, 91, - 92, 94, 97, 99, 96, 97, 101, 100, 100, 100, 101, 102, 99, 98, 98, 99, - 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 102, 103, 111, 108, 105, - 109, 106, 103, 109, 104, 104, 108, 107, 107, 108, 107, 103, 103, 99, 97, 95, - 95, 97, 100, 102, 101, 108, 104, 101, 106, 105, 101, 106, 102, 99, 100, 100, - 103, 105, 105, 104, 108, 105, 105, 108, 109, 108, 111, 113, 111, 112, 114, 114, - 114, 115, 116, 117, 118, 117, 115, 113, 111, 110, 111, 111, 113, 114, 113, 111, - 108, 108, 112, 115, 106, 108, 112, 112, 114, 116, 119, 120, 112, 112, 113, 113, - 112, 112, 111, 111, 116, 109, 116, 110, 109, 105, 106, 35, 18, 45, 68, 79, - 96, 104, 106, 109, 111, 100, 97, 105, 111, 108, 107, 110, 112, 110, 110, 113, - 114, 111, 111, 115, 114, 114, 114, 114, 114, 114, 114, 114, 108, 112, 113, 111, - 112, 115, 115, 111, 114, 113, 112, 111, 111, 111, 111, 112, 114, 114, 113, 93, - 93, 93, 93, 93, 94, 92, 92, 93, 93, 92, 92, 92, 93, 92, 92, 93, - 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 98, 98, 96, 96, - 94, 92, 91, 93, 95, 97, 99, 96, 98, 101, 101, 100, 99, 101, 102, 99, - 98, 98, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 102, 104, - 113, 110, 107, 111, 108, 105, 110, 107, 106, 109, 110, 111, 109, 108, 104, 99, - 93, 91, 90, 92, 95, 99, 102, 101, 107, 104, 102, 110, 109, 104, 110, 112, - 112, 115, 118, 120, 119, 117, 116, 121, 117, 118, 121, 121, 118, 119, 123, 122, - 122, 123, 121, 120, 121, 125, 128, 123, 123, 121, 122, 122, 123, 124, 124, 120, - 120, 117, 112, 108, 106, 107, 108, 104, 107, 112, 113, 115, 116, 119, 120, 115, - 112, 112, 113, 113, 113, 112, 111, 113, 106, 115, 110, 110, 106, 106, 36, 19, - 46, 69, 80, 97, 104, 106, 109, 111, 100, 97, 104, 111, 109, 107, 110, 112, - 110, 110, 113, 114, 111, 111, 115, 114, 114, 114, 114, 114, 114, 114, 114, 108, - 112, 113, 111, 112, 115, 115, 111, 114, 113, 112, 111, 111, 111, 111, 112, 112, - 112, 112, 94, 94, 93, 93, 94, 94, 92, 93, 93, 93, 91, 91, 92, 93, - 92, 92, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 97, 97, 98, - 98, 96, 95, 94, 93, 92, 94, 95, 97, 98, 96, 98, 101, 101, 100, 100, - 101, 101, 98, 98, 98, 99, 99, 100, 100, 100, 100, 100, 101, 101, 101, 101, - 102, 103, 103, 110, 108, 105, 109, 106, 103, 110, 109, 107, 107, 111, 111, 108, - 107, 105, 98, 94, 92, 93, 94, 98, 101, 105, 107, 112, 110, 110, 119, 119, - 116, 123, 125, 126, 128, 133, 135, 131, 130, 130, 132, 130, 128, 130, 129, 124, - 123, 126, 123, 124, 124, 121, 120, 121, 125, 128, 121, 122, 123, 126, 127, 129, - 131, 129, 133, 132, 128, 125, 117, 112, 108, 106, 105, 107, 111, 112, 114, 117, - 118, 118, 113, 111, 111, 112, 114, 114, 113, 111, 111, 105, 114, 110, 110, 105, - 105, 35, 20, 47, 70, 80, 97, 104, 106, 109, 111, 100, 97, 105, 112, 110, - 108, 112, 112, 110, 110, 113, 114, 111, 111, 115, 115, 114, 113, 113, 115, 115, - 114, 113, 109, 113, 113, 111, 111, 114, 114, 110, 114, 113, 112, 111, 111, 111, - 111, 112, 112, 111, 111, 94, 94, 93, 94, 94, 94, 93, 93, 94, 94, 93, - 93, 93, 94, 93, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, - 97, 97, 98, 98, 96, 94, 94, 94, 95, 95, 96, 97, 97, 97, 98, 100, - 99, 98, 98, 99, 101, 98, 98, 98, 99, 99, 100, 100, 100, 100, 100, 100, - 101, 101, 102, 102, 102, 100, 106, 104, 101, 105, 102, 99, 106, 110, 105, 105, - 108, 108, 105, 105, 107, 102, 100, 102, 103, 105, 107, 110, 113, 117, 123, 118, - 117, 126, 125, 120, 126, 124, 123, 122, 127, 130, 126, 125, 127, 132, 130, 129, - 131, 130, 127, 128, 131, 131, 137, 141, 140, 136, 134, 136, 139, 134, 135, 136, - 138, 138, 137, 134, 128, 137, 134, 134, 133, 126, 120, 116, 112, 106, 107, 111, - 112, 112, 114, 115, 115, 112, 110, 109, 111, 114, 114, 113, 110, 111, 105, 114, - 109, 109, 103, 102, 31, 21, 47, 70, 81, 97, 105, 105, 109, 111, 101, 98, - 106, 113, 111, 110, 113, 112, 110, 110, 113, 114, 111, 111, 115, 116, 114, 112, - 113, 115, 116, 114, 112, 110, 114, 114, 111, 111, 113, 113, 109, 114, 113, 112, - 111, 111, 111, 111, 112, 114, 113, 112, 94, 94, 93, 94, 94, 95, 93, 93, - 96, 96, 94, 94, 94, 95, 94, 95, 94, 94, 94, 95, 95, 96, 96, 96, - 96, 96, 96, 97, 97, 98, 98, 98, 94, 94, 95, 96, 96, 96, 97, 96, - 97, 98, 100, 100, 98, 98, 100, 101, 98, 98, 98, 99, 99, 100, 100, 100, - 100, 100, 100, 101, 101, 102, 102, 101, 96, 101, 98, 97, 101, 99, 96, 105, - 109, 105, 103, 107, 106, 103, 104, 111, 109, 112, 113, 117, 118, 120, 123, 125, - 127, 131, 123, 120, 126, 121, 114, 121, 139, 137, 134, 138, 139, 137, 136, 140, - 149, 148, 149, 155, 156, 155, 157, 161, 152, 159, 165, 166, 164, 158, 158, 158, - 157, 157, 157, 156, 152, 147, 142, 133, 130, 127, 132, 133, 131, 126, 122, 118, - 111, 111, 111, 112, 111, 110, 111, 112, 111, 109, 108, 110, 113, 114, 112, 109, - 113, 106, 115, 109, 107, 101, 99, 28, 21, 48, 70, 81, 97, 105, 105, 109, - 112, 101, 98, 106, 114, 112, 111, 114, 112, 110, 110, 113, 114, 111, 111, 115, - 116, 114, 112, 113, 115, 116, 114, 112, 111, 115, 115, 112, 111, 113, 112, 108, - 114, 113, 112, 111, 111, 111, 111, 112, 116, 115, 113, 95, 97, 97, 96, 94, - 93, 92, 94, 92, 93, 94, 96, 96, 96, 93, 92, 93, 92, 90, 90, 91, - 93, 96, 98, 99, 98, 97, 95, 95, 96, 97, 98, 99, 97, 95, 96, 100, - 101, 99, 97, 97, 98, 99, 99, 97, 97, 99, 100, 100, 101, 101, 102, 102, - 101, 101, 100, 96, 99, 102, 102, 99, 98, 99, 99, 98, 94, 94, 96, 97, - 99, 100, 103, 97, 103, 107, 106, 103, 101, 102, 110, 120, 121, 127, 129, 122, - 125, 131, 128, 119, 121, 117, 119, 128, 124, 123, 137, 147, 148, 152, 155, 150, - 158, 164, 155, 172, 171, 169, 172, 173, 169, 169, 173, 166, 179, 177, 184, 178, - 167, 183, 188, 186, 178, 179, 160, 170, 157, 161, 144, 139, 138, 133, 122, 121, - 134, 138, 133, 121, 122, 112, 106, 108, 106, 103, 113, 109, 110, 111, 112, 112, - 113, 114, 114, 114, 108, 115, 107, 108, 107, 106, 32, 20, 53, 67, 84, 101, - 101, 110, 107, 113, 96, 97, 109, 111, 112, 115, 112, 111, 114, 107, 116, 116, - 107, 114, 111, 113, 113, 114, 114, 114, 113, 112, 112, 112, 113, 113, 114, 114, - 113, 113, 112, 114, 113, 113, 112, 112, 113, 113, 114, 109, 111, 112, 92, 94, - 94, 93, 91, 91, 90, 91, 94, 95, 94, 94, 94, 93, 91, 90, 95, 94, - 93, 93, 94, 96, 98, 99, 98, 97, 97, 96, 96, 97, 97, 98, 99, 97, - 95, 97, 99, 101, 99, 97, 97, 98, 99, 99, 97, 97, 99, 100, 100, 100, - 101, 101, 101, 101, 100, 100, 102, 104, 105, 104, 101, 100, 101, 100, 95, 92, - 93, 95, 96, 97, 99, 102, 100, 103, 110, 113, 112, 111, 111, 118, 136, 133, - 130, 126, 118, 119, 127, 125, 125, 133, 134, 139, 148, 145, 143, 157, 157, 157, - 162, 162, 158, 164, 169, 161, 181, 178, 177, 180, 181, 178, 178, 182, 175, 180, - 173, 182, 181, 173, 185, 185, 178, 173, 176, 161, 172, 162, 169, 157, 151, 147, - 141, 137, 130, 127, 130, 132, 138, 132, 117, 111, 116, 111, 104, 108, 112, 112, - 112, 112, 112, 112, 112, 112, 115, 110, 117, 109, 108, 105, 103, 28, 21, 53, - 68, 84, 101, 101, 110, 107, 113, 96, 98, 109, 111, 112, 115, 112, 111, 114, - 107, 116, 116, 107, 114, 111, 112, 113, 113, 114, 114, 113, 113, 112, 112, 113, - 113, 114, 114, 113, 113, 112, 114, 113, 113, 112, 112, 113, 113, 114, 110, 112, - 113, 92, 93, 93, 93, 91, 91, 90, 92, 96, 95, 93, 92, 91, 91, 89, - 89, 94, 94, 94, 95, 96, 97, 97, 98, 96, 97, 97, 98, 98, 97, 97, - 97, 100, 99, 98, 99, 101, 102, 99, 98, 96, 97, 99, 99, 96, 96, 98, - 99, 99, 99, 100, 100, 100, 100, 99, 99, 105, 105, 105, 104, 101, 101, 102, - 100, 95, 94, 96, 98, 101, 103, 105, 108, 114, 116, 117, 117, 117, 112, 107, - 113, 137, 135, 133, 133, 128, 134, 140, 137, 135, 144, 147, 153, 161, 157, 156, - 167, 159, 156, 160, 159, 155, 160, 165, 158, 168, 166, 166, 169, 169, 168, 169, - 172, 172, 171, 158, 168, 174, 168, 176, 170, 163, 164, 169, 156, 163, 156, 164, - 159, 163, 153, 150, 151, 140, 124, 124, 131, 141, 139, 130, 122, 120, 111, 104, - 111, 114, 114, 114, 113, 112, 111, 111, 110, 115, 111, 119, 111, 109, 105, 100, - 23, 22, 54, 68, 84, 100, 101, 110, 107, 112, 97, 99, 110, 111, 111, 114, - 111, 111, 114, 107, 116, 116, 107, 114, 111, 112, 112, 113, 114, 114, 113, 113, - 112, 112, 113, 113, 114, 114, 113, 113, 112, 114, 113, 113, 112, 112, 113, 113, - 114, 111, 113, 114, 95, 96, 97, 96, 95, 95, 94, 96, 95, 94, 91, 90, - 90, 91, 90, 91, 91, 92, 93, 94, 95, 95, 94, 94, 95, 96, 97, 99, - 99, 98, 97, 96, 99, 99, 99, 100, 100, 101, 99, 99, 96, 97, 99, 99, - 96, 96, 98, 99, 98, 99, 99, 100, 100, 99, 99, 98, 102, 102, 101, 100, - 100, 100, 101, 102, 102, 103, 106, 109, 112, 113, 115, 118, 121, 119, 117, 116, - 114, 113, 107, 112, 137, 139, 142, 151, 151, 156, 157, 148, 149, 154, 150, 153, - 162, 158, 156, 163, 156, 153, 157, 156, 148, 153, 158, 150, 155, 152, 152, 155, - 156, 154, 155, 158, 165, 163, 149, 159, 163, 159, 167, 162, 159, 162, 165, 156, - 154, 153, 155, 157, 167, 163, 159, 158, 152, 140, 135, 132, 127, 139, 141, 133, - 122, 109, 107, 119, 114, 114, 113, 113, 113, 112, 112, 112, 113, 110, 119, 112, - 111, 105, 99, 21, 23, 55, 68, 84, 100, 101, 110, 108, 112, 97, 100, 111, - 111, 110, 113, 111, 111, 114, 107, 116, 116, 107, 114, 111, 111, 112, 113, 114, - 114, 114, 113, 113, 112, 113, 113, 114, 114, 113, 113, 112, 114, 113, 113, 112, - 112, 113, 113, 114, 112, 114, 114, 95, 97, 98, 97, 96, 96, 96, 97, 92, - 91, 90, 90, 91, 93, 93, 94, 92, 93, 94, 95, 95, 95, 94, 94, 94, - 95, 97, 98, 99, 98, 97, 97, 100, 100, 101, 101, 100, 100, 99, 99, 96, - 97, 98, 98, 96, 96, 96, 99, 98, 99, 99, 100, 100, 99, 99, 98, 100, - 100, 99, 100, 101, 102, 102, 105, 112, 116, 116, 116, 117, 117, 119, 122, 119, - 117, 115, 117, 122, 125, 128, 134, 156, 155, 157, 162, 159, 161, 159, 147, 162, - 157, 147, 148, 161, 160, 155, 158, 154, 150, 155, 153, 144, 150, 155, 149, 151, - 148, 149, 151, 152, 149, 150, 154, 153, 156, 148, 155, 155, 147, 158, 157, 158, - 163, 162, 158, 150, 153, 151, 154, 164, 168, 163, 158, 159, 162, 155, 139, 127, - 135, 137, 134, 132, 123, 117, 123, 113, 112, 113, 113, 113, 114, 114, 114, 111, - 108, 118, 112, 111, 105, 99, 21, 25, 56, 69, 84, 100, 101, 111, 108, 111, - 98, 102, 112, 111, 109, 112, 111, 111, 114, 107, 116, 116, 107, 114, 111, 111, - 112, 113, 114, 114, 114, 114, 114, 112, 113, 113, 114, 114, 113, 113, 112, 114, - 113, 113, 112, 112, 113, 113, 114, 112, 114, 114, 93, 94, 95, 95, 94, 94, - 94, 96, 90, 90, 90, 91, 93, 95, 94, 95, 97, 97, 97, 97, 97, 97, - 97, 97, 94, 95, 96, 97, 98, 98, 98, 98, 99, 100, 102, 102, 99, 99, - 99, 100, 96, 97, 98, 98, 96, 96, 96, 97, 99, 99, 100, 100, 100, 100, - 99, 99, 101, 101, 101, 102, 104, 104, 103, 107, 117, 120, 119, 117, 114, 115, - 116, 119, 126, 127, 126, 129, 133, 140, 145, 151, 173, 168, 167, 167, 161, 165, - 168, 161, 166, 159, 147, 147, 159, 159, 156, 162, 156, 155, 161, 159, 149, 153, - 159, 154, 155, 152, 151, 153, 153, 150, 151, 154, 150, 156, 151, 158, 157, 146, - 159, 160, 158, 165, 159, 162, 153, 162, 157, 160, 157, 165, 165, 159, 164, 174, - 168, 150, 146, 139, 126, 127, 142, 143, 129, 121, 115, 112, 112, 113, 114, 115, - 115, 116, 111, 108, 118, 111, 110, 105, 99, 21, 26, 57, 69, 84, 99, 101, - 111, 109, 110, 98, 103, 114, 111, 108, 111, 110, 111, 114, 107, 116, 116, 107, - 114, 111, 110, 111, 112, 113, 114, 114, 114, 114, 112, 113, 113, 114, 114, 113, - 113, 112, 114, 113, 113, 112, 112, 113, 113, 114, 111, 113, 114, 90, 92, 93, - 93, 92, 93, 92, 94, 91, 92, 92, 94, 95, 95, 93, 93, 99, 98, 96, - 96, 95, 96, 97, 98, 95, 95, 95, 96, 97, 98, 99, 100, 98, 101, 102, - 102, 99, 99, 98, 101, 96, 97, 98, 98, 96, 96, 96, 97, 100, 100, 101, - 101, 101, 101, 100, 100, 102, 101, 101, 103, 104, 103, 98, 102, 113, 118, 116, - 114, 113, 116, 122, 126, 136, 143, 147, 149, 153, 155, 160, 164, 175, 170, 171, - 173, 167, 170, 176, 172, 159, 159, 152, 151, 155, 151, 152, 165, 158, 162, 169, - 167, 157, 161, 166, 161, 163, 160, 159, 160, 160, 157, 156, 159, 156, 163, 159, - 168, 167, 156, 167, 169, 166, 172, 161, 169, 159, 172, 164, 164, 157, 160, 166, - 167, 168, 170, 171, 167, 161, 149, 129, 125, 138, 141, 134, 129, 119, 114, 114, - 114, 114, 114, 114, 114, 114, 110, 119, 110, 109, 103, 97, 19, 27, 58, 70, - 84, 99, 101, 111, 109, 109, 98, 104, 114, 111, 108, 111, 110, 111, 114, 107, - 116, 116, 107, 114, 111, 110, 111, 112, 113, 114, 115, 115, 114, 112, 113, 113, - 114, 114, 113, 113, 112, 114, 113, 113, 112, 112, 113, 113, 114, 110, 112, 113, - 89, 91, 93, 93, 93, 91, 93, 95, 93, 93, 94, 96, 96, 93, 92, 91, - 98, 96, 94, 92, 92, 94, 96, 97, 96, 96, 95, 95, 96, 98, 100, 101, - 97, 101, 103, 102, 100, 98, 100, 103, 97, 98, 99, 98, 96, 94, 96, 97, - 100, 102, 102, 103, 102, 101, 100, 99, 100, 100, 101, 105, 108, 106, 101, 106, - 112, 119, 116, 117, 120, 126, 133, 140, 134, 144, 155, 161, 164, 168, 172, 177, - 171, 170, 178, 179, 171, 169, 168, 162, 156, 161, 160, 156, 153, 145, 146, 163, - 159, 161, 169, 167, 158, 162, 170, 165, 174, 170, 168, 169, 169, 164, 164, 167, - 162, 168, 164, 175, 175, 167, 175, 172, 171, 175, 163, 173, 162, 177, 168, 165, - 161, 161, 170, 177, 172, 163, 169, 181, 165, 161, 144, 131, 131, 133, 140, 147, - 127, 119, 116, 115, 114, 113, 111, 111, 117, 112, 120, 110, 108, 102, 96, 18, - 27, 59, 69, 84, 99, 101, 111, 111, 109, 99, 105, 115, 111, 107, 110, 110, - 111, 114, 107, 116, 116, 107, 114, 111, 110, 111, 112, 113, 114, 115, 115, 115, - 112, 113, 113, 114, 114, 113, 113, 112, 114, 113, 113, 112, 112, 113, 113, 114, - 109, 111, 112, 92, 92, 92, 92, 93, 94, 95, 94, 94, 94, 94, 91, 90, - 92, 96, 98, 94, 94, 94, 95, 95, 96, 96, 96, 92, 93, 94, 94, 95, - 96, 97, 97, 99, 101, 102, 103, 103, 104, 103, 103, 105, 103, 99, 97, 96, - 95, 95, 97, 97, 100, 101, 102, 101, 99, 97, 95, 105, 93, 102, 117, 118, - 112, 110, 110, 127, 131, 131, 133, 137, 137, 137, 136, 141, 148, 156, 160, 163, - 166, 173, 181, 176, 175, 179, 198, 170, 178, 176, 176, 166, 173, 159, 163, 167, - 154, 161, 166, 156, 171, 174, 164, 161, 168, 169, 161, 177, 172, 175, 175, 167, - 164, 168, 163, 173, 180, 176, 173, 177, 175, 171, 178, 181, 177, 173, 172, 174, - 176, 178, 174, 158, 167, 173, 169, 167, 170, 172, 167, 160, 159, 158, 150, 139, - 136, 150, 154, 142, 116, 110, 115, 119, 116, 110, 109, 112, 109, 110, 112, 104, - 111, 98, 24, 30, 60, 70, 85, 101, 103, 112, 109, 111, 93, 106, 112, 110, - 115, 108, 112, 111, 107, 114, 116, 109, 111, 116, 112, 114, 114, 115, 115, 115, - 114, 113, 113, 113, 114, 114, 114, 114, 113, 112, 111, 115, 115, 115, 114, 114, - 113, 113, 113, 111, 111, 112, 92, 92, 91, 90, 90, 90, 90, 90, 94, 94, - 93, 92, 91, 92, 94, 96, 94, 94, 94, 95, 95, 96, 96, 96, 93, 93, - 94, 95, 96, 96, 97, 97, 99, 99, 101, 101, 101, 103, 103, 104, 106, 104, - 100, 98, 97, 95, 93, 97, 102, 104, 105, 105, 103, 101, 99, 98, 98, 96, - 106, 116, 114, 112, 118, 120, 136, 140, 138, 140, 143, 146, 146, 145, 151, 153, - 157, 160, 165, 167, 170, 172, 177, 173, 181, 183, 177, 173, 180, 182, 169, 177, - 164, 167, 170, 157, 161, 165, 155, 163, 167, 164, 168, 175, 176, 172, 172, 168, - 175, 176, 168, 170, 175, 171, 176, 183, 179, 176, 180, 176, 173, 179, 177, 173, - 169, 171, 174, 176, 172, 167, 173, 174, 174, 173, 174, 177, 174, 166, 162, 162, - 161, 157, 147, 142, 152, 150, 138, 130, 129, 121, 117, 118, 118, 110, 110, 109, - 109, 113, 104, 112, 100, 23, 30, 57, 69, 84, 101, 104, 113, 110, 114, 95, - 107, 113, 110, 114, 106, 109, 111, 108, 114, 116, 109, 111, 116, 112, 111, 112, - 112, 113, 113, 112, 111, 111, 114, 115, 115, 115, 115, 114, 113, 112, 115, 115, - 115, 114, 114, 113, 113, 113, 111, 111, 112, 94, 93, 92, 91, 90, 90, 89, - 89, 94, 95, 94, 94, 92, 92, 92, 94, 94, 94, 94, 95, 95, 96, 96, - 96, 94, 94, 94, 95, 96, 96, 97, 97, 98, 97, 97, 98, 99, 100, 102, - 103, 102, 102, 101, 99, 97, 96, 93, 95, 104, 105, 104, 103, 103, 102, 101, - 102, 98, 103, 112, 111, 103, 107, 121, 125, 137, 140, 139, 140, 145, 149, 152, - 154, 156, 156, 157, 162, 169, 170, 167, 165, 176, 174, 181, 167, 184, 168, 180, - 187, 168, 177, 166, 170, 173, 159, 163, 166, 159, 160, 163, 167, 173, 177, 179, - 178, 172, 168, 174, 176, 169, 171, 178, 175, 176, 183, 179, 175, 179, 175, 171, - 178, 173, 171, 169, 172, 176, 175, 170, 163, 181, 176, 172, 172, 178, 180, 173, - 162, 165, 161, 160, 158, 151, 143, 144, 139, 125, 134, 142, 125, 115, 117, 117, - 108, 110, 109, 109, 113, 105, 110, 98, 22, 29, 57, 69, 84, 102, 105, 114, - 111, 115, 96, 108, 113, 110, 113, 105, 108, 112, 108, 114, 117, 110, 111, 116, - 112, 111, 111, 112, 113, 113, 112, 112, 111, 115, 116, 116, 116, 116, 115, 114, - 113, 115, 115, 115, 114, 114, 113, 113, 113, 111, 111, 112, 95, 95, 94, 93, - 93, 93, 93, 93, 93, 95, 95, 95, 93, 92, 91, 92, 94, 94, 94, 95, - 95, 96, 96, 96, 94, 95, 95, 96, 96, 97, 97, 97, 98, 97, 96, 95, - 97, 99, 102, 103, 100, 99, 100, 100, 99, 97, 94, 95, 99, 100, 100, 101, - 103, 102, 103, 104, 107, 111, 114, 104, 98, 110, 129, 131, 139, 143, 142, 142, - 146, 150, 155, 158, 157, 158, 160, 165, 168, 168, 164, 163, 174, 179, 176, 164, - 183, 168, 172, 185, 165, 174, 164, 170, 175, 162, 166, 169, 165, 160, 159, 167, - 172, 172, 172, 174, 175, 170, 176, 176, 168, 170, 177, 173, 173, 180, 176, 172, - 175, 171, 167, 174, 170, 172, 174, 175, 176, 175, 174, 172, 179, 174, 171, 170, - 175, 176, 170, 162, 168, 162, 160, 158, 153, 146, 143, 134, 118, 130, 142, 133, - 122, 121, 117, 110, 110, 107, 108, 113, 105, 109, 96, 19, 29, 57, 69, 85, - 102, 105, 115, 112, 115, 95, 108, 113, 110, 113, 106, 109, 112, 109, 115, 117, - 110, 111, 116, 111, 113, 113, 114, 115, 115, 115, 114, 114, 115, 115, 116, 116, - 115, 114, 113, 113, 115, 115, 115, 114, 114, 113, 113, 113, 112, 112, 112, 93, - 93, 93, 93, 94, 95, 96, 97, 93, 95, 95, 95, 93, 92, 91, 92, 94, - 94, 94, 95, 95, 96, 96, 96, 95, 96, 96, 96, 96, 97, 97, 97, 98, - 96, 95, 95, 96, 98, 102, 102, 98, 98, 100, 101, 99, 98, 95, 94, 95, - 96, 98, 101, 105, 106, 109, 111, 116, 111, 108, 98, 99, 118, 137, 137, 143, - 146, 145, 145, 146, 150, 154, 159, 152, 158, 165, 167, 166, 166, 165, 167, 172, - 183, 169, 174, 175, 174, 162, 179, 168, 177, 166, 172, 175, 160, 163, 166, 169, - 162, 161, 166, 171, 170, 169, 170, 177, 171, 175, 175, 168, 170, 177, 174, 172, - 179, 175, 172, 175, 171, 168, 174, 167, 173, 178, 177, 173, 173, 178, 183, 175, - 171, 172, 172, 172, 172, 171, 171, 174, 165, 159, 158, 157, 151, 147, 140, 128, - 128, 138, 145, 141, 129, 122, 116, 111, 107, 108, 111, 101, 105, 92, 16, 28, - 58, 70, 85, 103, 105, 115, 112, 112, 93, 106, 112, 110, 114, 108, 111, 113, - 110, 116, 118, 110, 111, 116, 111, 112, 113, 114, 115, 115, 115, 115, 115, 114, - 114, 114, 114, 114, 113, 112, 111, 115, 115, 115, 114, 114, 113, 113, 113, 112, - 112, 113, 89, 89, 90, 91, 92, 94, 95, 96, 94, 95, 94, 94, 92, 92, - 92, 94, 94, 94, 94, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, - 97, 96, 97, 96, 96, 96, 97, 99, 101, 101, 98, 98, 99, 98, 99, 98, - 98, 96, 94, 96, 101, 106, 110, 112, 115, 117, 117, 105, 101, 101, 105, 125, - 141, 141, 147, 148, 150, 150, 150, 150, 155, 159, 153, 161, 167, 168, 167, 165, - 167, 170, 170, 179, 166, 179, 168, 174, 159, 170, 171, 179, 167, 169, 172, 158, - 161, 164, 167, 166, 165, 166, 169, 171, 172, 171, 173, 168, 172, 173, 167, 171, - 179, 177, 172, 179, 176, 172, 176, 173, 170, 177, 164, 171, 177, 175, 170, 170, - 177, 183, 172, 171, 176, 176, 173, 170, 174, 180, 176, 167, 160, 159, 159, 155, - 152, 148, 137, 128, 130, 142, 147, 137, 126, 120, 114, 109, 107, 109, 97, 103, - 90, 13, 30, 59, 71, 86, 103, 105, 114, 111, 111, 93, 106, 112, 111, 115, - 109, 112, 114, 111, 116, 118, 111, 111, 116, 111, 109, 110, 111, 112, 113, 113, - 113, 113, 113, 113, 114, 114, 113, 113, 112, 111, 115, 115, 115, 114, 114, 113, - 113, 113, 113, 113, 113, 91, 91, 91, 91, 92, 94, 94, 95, 94, 94, 93, - 92, 91, 92, 94, 96, 94, 94, 94, 95, 95, 96, 96, 96, 97, 97, 97, - 97, 97, 97, 97, 96, 96, 94, 97, 98, 99, 100, 101, 101, 98, 98, 98, - 97, 98, 98, 99, 98, 94, 98, 104, 109, 112, 115, 116, 117, 113, 101, 103, - 113, 120, 133, 145, 146, 149, 151, 154, 154, 155, 156, 158, 161, 161, 164, 167, - 169, 170, 169, 169, 169, 173, 166, 167, 175, 168, 168, 167, 164, 168, 176, 164, - 167, 171, 158, 163, 167, 162, 168, 170, 163, 162, 168, 172, 168, 171, 165, 171, - 171, 164, 168, 176, 174, 169, 176, 173, 170, 175, 172, 169, 176, 166, 169, 172, - 173, 172, 171, 172, 173, 175, 174, 176, 178, 174, 170, 174, 183, 175, 168, 163, - 164, 162, 157, 154, 153, 144, 138, 133, 133, 138, 140, 134, 122, 119, 112, 107, - 107, 94, 100, 86, 12, 31, 61, 73, 86, 103, 104, 113, 110, 113, 94, 107, - 113, 110, 114, 107, 110, 115, 111, 117, 119, 111, 111, 116, 111, 109, 110, 111, - 112, 113, 113, 113, 113, 114, 114, 115, 115, 114, 113, 113, 112, 115, 115, 115, - 114, 114, 113, 113, 113, 113, 113, 113, 95, 95, 94, 94, 94, 95, 95, 96, - 94, 94, 92, 91, 90, 92, 95, 98, 94, 94, 94, 95, 95, 96, 96, 96, - 97, 97, 97, 97, 97, 97, 97, 96, 96, 95, 98, 100, 101, 101, 101, 101, - 99, 99, 96, 96, 97, 99, 101, 101, 95, 98, 106, 112, 116, 116, 115, 117, - 112, 102, 111, 128, 134, 139, 149, 152, 150, 154, 158, 159, 158, 158, 162, 164, - 171, 169, 168, 169, 173, 173, 171, 167, 176, 156, 172, 167, 170, 160, 175, 162, - 161, 168, 157, 163, 170, 161, 170, 175, 158, 170, 170, 157, 155, 163, 166, 160, - 175, 169, 170, 169, 162, 165, 172, 169, 164, 171, 169, 166, 172, 169, 168, 174, - 171, 169, 171, 174, 178, 176, 170, 163, 177, 173, 174, 176, 174, 169, 172, 179, - 174, 169, 168, 168, 166, 158, 153, 154, 155, 158, 147, 132, 134, 149, 148, 130, - 125, 116, 109, 107, 95, 97, 83, 11, 32, 62, 73, 87, 103, 104, 112, 109, - 115, 96, 108, 113, 110, 113, 105, 108, 115, 112, 117, 119, 111, 111, 116, 111, - 111, 112, 113, 114, 115, 116, 116, 116, 115, 116, 116, 116, 116, 115, 114, 113, - 115, 115, 115, 114, 114, 113, 113, 113, 113, 113, 113, 89, 94, 95, 92, 91, - 94, 94, 93, 95, 95, 93, 94, 94, 95, 94, 94, 97, 96, 95, 94, 94, - 94, 95, 95, 91, 96, 99, 99, 100, 102, 101, 95, 97, 95, 95, 98, 99, - 96, 94, 98, 99, 97, 96, 96, 98, 99, 98, 97, 102, 107, 110, 111, 119, - 125, 119, 105, 109, 113, 118, 125, 135, 144, 151, 155, 158, 156, 154, 154, 158, - 160, 162, 162, 166, 172, 176, 170, 167, 168, 168, 164, 179, 170, 164, 165, 169, - 166, 164, 163, 165, 162, 163, 164, 164, 161, 165, 171, 169, 165, 169, 169, 160, - 158, 163, 161, 170, 166, 166, 169, 168, 164, 166, 172, 166, 171, 173, 165, 164, - 165, 173, 173, 167, 170, 174, 171, 174, 175, 176, 171, 175, 178, 166, 175, 181, - 178, 183, 174, 168, 174, 171, 165, 165, 159, 153, 161, 161, 156, 148, 140, 136, - 137, 140, 140, 135, 119, 111, 124, 96, 98, 71, 11, 33, 60, 72, 88, 104, - 102, 111, 110, 112, 98, 111, 113, 109, 115, 109, 110, 113, 114, 116, 115, 113, - 111, 111, 112, 116, 116, 115, 114, 114, 113, 112, 112, 115, 115, 115, 114, 114, - 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 116, 115, 115, 89, 94, - 95, 92, 91, 94, 94, 93, 95, 95, 93, 94, 94, 95, 94, 94, 94, 94, - 94, 94, 94, 95, 97, 97, 93, 97, 99, 98, 98, 101, 101, 97, 99, 95, - 95, 98, 99, 96, 95, 98, 96, 97, 98, 101, 103, 104, 104, 103, 100, 108, - 117, 121, 123, 121, 112, 103, 116, 121, 124, 129, 137, 144, 151, 153, 156, 156, - 155, 155, 157, 158, 162, 163, 157, 164, 169, 167, 166, 170, 170, 168, 174, 166, - 162, 163, 165, 162, 161, 160, 167, 163, 162, 164, 164, 163, 165, 168, 168, 165, - 171, 173, 163, 160, 163, 158, 163, 161, 164, 168, 167, 162, 164, 169, 164, 167, - 167, 165, 167, 171, 171, 168, 168, 171, 172, 170, 170, 173, 172, 169, 175, 177, - 167, 174, 178, 173, 179, 169, 176, 179, 171, 168, 172, 168, 161, 166, 157, 158, - 155, 148, 138, 135, 136, 136, 146, 132, 119, 125, 100, 107, 74, 11, 33, 60, - 72, 89, 105, 103, 110, 110, 111, 97, 111, 113, 109, 115, 109, 111, 112, 113, - 115, 115, 113, 112, 112, 113, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, - 115, 114, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, - 114, 90, 94, 96, 92, 91, 94, 95, 93, 95, 95, 93, 94, 94, 95, 94, - 94, 93, 93, 93, 94, 95, 96, 98, 99, 95, 98, 98, 96, 97, 101, 101, - 98, 100, 96, 96, 100, 99, 96, 97, 100, 94, 97, 102, 105, 106, 105, 106, - 108, 107, 112, 118, 122, 119, 111, 107, 112, 123, 126, 128, 132, 136, 143, 148, - 151, 153, 156, 158, 157, 156, 156, 160, 163, 154, 160, 165, 165, 165, 168, 170, - 170, 168, 164, 164, 165, 165, 161, 161, 162, 167, 161, 159, 160, 162, 158, 158, - 160, 163, 162, 171, 175, 166, 163, 165, 156, 157, 158, 163, 167, 166, 162, 162, - 165, 162, 163, 162, 163, 169, 174, 171, 164, 168, 171, 170, 166, 165, 168, 169, - 166, 172, 175, 165, 172, 174, 169, 174, 165, 175, 174, 166, 164, 172, 169, 160, - 161, 154, 159, 162, 154, 142, 134, 133, 131, 150, 139, 129, 126, 102, 115, 74, - 13, 33, 61, 73, 90, 106, 103, 110, 109, 110, 95, 110, 112, 109, 115, 110, - 112, 110, 112, 114, 114, 113, 112, 113, 114, 112, 112, 113, 114, 114, 115, 116, - 116, 115, 115, 114, 114, 114, 114, 113, 113, 114, 114, 114, 114, 114, 114, 114, - 114, 113, 113, 114, 90, 95, 96, 93, 92, 94, 95, 93, 95, 95, 93, 94, - 94, 95, 94, 94, 94, 93, 93, 94, 95, 96, 97, 98, 96, 99, 98, 95, - 96, 100, 101, 99, 100, 97, 98, 100, 100, 97, 97, 100, 96, 100, 103, 105, - 104, 104, 106, 110, 125, 118, 113, 114, 112, 108, 116, 129, 129, 130, 131, 134, - 136, 142, 144, 147, 150, 156, 160, 159, 156, 156, 160, 165, 162, 165, 168, 168, - 168, 167, 168, 168, 165, 164, 166, 168, 167, 161, 162, 165, 168, 161, 158, 158, - 159, 156, 155, 157, 157, 157, 166, 169, 163, 164, 166, 157, 154, 156, 159, 160, - 160, 161, 162, 164, 161, 163, 163, 162, 165, 170, 168, 163, 164, 166, 165, 161, - 161, 165, 166, 164, 167, 171, 161, 167, 169, 164, 171, 163, 165, 169, 162, 160, - 167, 166, 159, 163, 158, 162, 163, 157, 148, 142, 138, 134, 142, 143, 139, 128, - 105, 116, 67, 12, 33, 61, 74, 91, 107, 103, 110, 108, 108, 94, 109, 112, - 109, 116, 110, 112, 109, 112, 114, 114, 113, 113, 114, 115, 113, 113, 113, 114, - 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 112, 113, 113, 91, 95, 97, 93, 92, 95, 95, 94, 95, - 95, 93, 94, 94, 95, 94, 94, 96, 95, 95, 94, 94, 95, 95, 96, 97, - 99, 99, 95, 96, 100, 100, 98, 103, 100, 100, 102, 102, 98, 99, 102, 100, - 102, 103, 104, 106, 107, 111, 117, 130, 119, 110, 111, 116, 117, 127, 140, 132, - 132, 135, 135, 138, 140, 143, 145, 150, 156, 161, 160, 157, 156, 160, 165, 165, - 166, 168, 169, 169, 163, 165, 166, 166, 166, 167, 170, 168, 162, 163, 166, 171, - 165, 162, 161, 161, 157, 157, 157, 154, 154, 160, 161, 157, 164, 169, 158, 154, - 157, 157, 155, 155, 158, 162, 165, 161, 165, 165, 159, 157, 160, 164, 164, 158, - 160, 159, 156, 157, 162, 164, 162, 161, 166, 158, 165, 167, 162, 171, 164, 162, - 170, 167, 163, 168, 166, 165, 172, 163, 158, 156, 153, 153, 150, 146, 140, 136, - 142, 148, 135, 111, 117, 59, 16, 35, 62, 75, 91, 106, 103, 110, 108, 108, - 94, 108, 111, 108, 115, 110, 112, 109, 112, 114, 114, 113, 113, 114, 115, 115, - 115, 115, 114, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 112, 113, 113, 91, 95, 97, 94, 93, 95, - 96, 94, 95, 95, 93, 94, 94, 95, 94, 94, 97, 96, 95, 94, 94, 94, - 94, 95, 96, 99, 99, 97, 97, 100, 100, 99, 104, 101, 102, 104, 104, 100, - 100, 102, 102, 102, 102, 105, 110, 114, 114, 119, 118, 117, 115, 119, 127, 132, - 137, 140, 135, 135, 135, 137, 138, 140, 142, 145, 150, 157, 161, 162, 161, 160, - 163, 165, 164, 164, 166, 169, 167, 163, 163, 166, 168, 166, 165, 167, 166, 163, - 161, 164, 166, 163, 160, 159, 156, 152, 152, 156, 155, 151, 157, 153, 152, 163, - 168, 158, 156, 157, 157, 151, 151, 156, 163, 164, 161, 165, 165, 157, 153, 155, - 160, 163, 154, 157, 158, 155, 157, 161, 163, 161, 156, 163, 155, 163, 164, 160, - 169, 164, 160, 170, 168, 165, 168, 166, 166, 176, 162, 154, 149, 149, 153, 155, - 150, 144, 136, 139, 151, 140, 119, 120, 53, 23, 37, 64, 75, 90, 105, 102, - 111, 110, 108, 94, 108, 111, 108, 114, 109, 111, 110, 112, 114, 114, 113, 112, - 113, 114, 116, 116, 115, 114, 114, 113, 112, 112, 113, 113, 114, 114, 114, 114, - 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 114, 91, 96, 97, - 94, 93, 96, 96, 95, 95, 95, 93, 94, 94, 95, 94, 94, 95, 95, 94, - 94, 94, 95, 96, 96, 95, 99, 100, 98, 98, 100, 99, 97, 106, 103, 102, - 104, 105, 100, 100, 103, 105, 102, 103, 106, 113, 112, 107, 107, 101, 113, 121, - 125, 132, 137, 142, 140, 137, 135, 137, 138, 139, 140, 141, 145, 152, 157, 159, - 162, 163, 164, 164, 164, 165, 164, 166, 170, 169, 163, 163, 168, 175, 168, 164, - 167, 167, 165, 163, 164, 163, 164, 163, 161, 155, 148, 152, 160, 156, 154, 157, - 152, 149, 160, 163, 152, 155, 158, 158, 153, 151, 156, 161, 160, 156, 159, 159, - 154, 153, 157, 158, 156, 154, 157, 158, 156, 157, 160, 160, 157, 156, 163, 156, - 162, 163, 157, 167, 162, 162, 167, 164, 160, 165, 163, 162, 168, 157, 153, 151, - 152, 155, 155, 153, 147, 142, 134, 141, 135, 123, 121, 47, 26, 40, 65, 74, - 89, 103, 102, 111, 112, 109, 95, 109, 111, 107, 113, 107, 109, 112, 113, 115, - 115, 113, 112, 112, 113, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, - 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 114, - 91, 95, 97, 93, 93, 95, 96, 95, 95, 95, 93, 94, 94, 95, 94, 94, - 92, 93, 93, 94, 95, 96, 98, 99, 94, 99, 101, 99, 99, 99, 97, 96, - 106, 105, 102, 102, 102, 98, 96, 100, 103, 102, 103, 109, 118, 116, 104, 99, - 102, 124, 132, 127, 126, 134, 139, 139, 133, 134, 136, 137, 141, 143, 144, 149, - 154, 157, 159, 162, 166, 167, 166, 164, 172, 169, 171, 175, 172, 165, 164, 169, - 182, 173, 167, 169, 172, 169, 167, 166, 170, 170, 172, 169, 159, 154, 160, 169, - 159, 157, 160, 154, 150, 160, 161, 145, 154, 159, 160, 155, 154, 158, 159, 155, - 152, 151, 152, 152, 156, 160, 157, 150, 156, 160, 161, 158, 158, 160, 158, 154, - 155, 162, 154, 160, 159, 153, 164, 161, 169, 170, 163, 160, 169, 168, 164, 164, - 155, 154, 159, 158, 157, 155, 154, 152, 147, 131, 134, 133, 129, 132, 54, 36, - 49, 73, 78, 92, 103, 101, 110, 110, 108, 94, 107, 110, 107, 113, 107, 109, - 113, 114, 116, 115, 113, 111, 111, 112, 112, 112, 113, 114, 114, 115, 116, 116, - 113, 113, 113, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, - 116, 115, 115, 92, 89, 91, 89, 92, 92, 94, 95, 96, 92, 90, 94, 95, - 93, 91, 92, 92, 98, 94, 92, 98, 96, 93, 99, 98, 101, 101, 98, 99, - 101, 102, 101, 102, 104, 103, 100, 94, 89, 86, 88, 96, 99, 105, 117, 125, - 122, 118, 120, 137, 143, 143, 136, 133, 131, 130, 130, 132, 128, 134, 139, 140, - 150, 158, 154, 157, 169, 168, 164, 170, 173, 171, 176, 175, 177, 176, 175, 176, - 177, 170, 162, 194, 174, 178, 185, 173, 169, 174, 166, 181, 169, 161, 164, 166, - 165, 162, 165, 170, 159, 154, 155, 163, 165, 163, 162, 169, 165, 159, 157, 158, - 160, 159, 156, 150, 149, 151, 148, 145, 145, 148, 153, 159, 159, 160, 152, 150, - 164, 167, 149, 155, 146, 155, 164, 155, 147, 152, 157, 168, 166, 166, 166, 169, - 171, 173, 170, 168, 160, 154, 153, 157, 159, 155, 151, 156, 140, 133, 132, 131, - 124, 98, 53, 74, 88, 99, 98, 104, 105, 100, 102, 103, 87, 102, 106, 106, - 112, 109, 113, 112, 112, 115, 115, 113, 113, 117, 118, 113, 113, 113, 114, 113, - 114, 114, 114, 116, 115, 113, 111, 110, 110, 110, 111, 113, 113, 113, 113, 113, - 113, 113, 113, 115, 115, 114, 93, 92, 92, 91, 92, 94, 95, 96, 96, 91, - 90, 94, 95, 93, 92, 93, 92, 97, 94, 92, 98, 96, 94, 98, 94, 97, - 98, 94, 94, 96, 96, 96, 104, 106, 102, 97, 92, 87, 86, 90, 91, 103, - 114, 117, 114, 114, 125, 146, 153, 155, 148, 140, 134, 131, 129, 127, 133, 126, - 133, 139, 139, 144, 149, 145, 160, 168, 163, 156, 162, 165, 167, 173, 161, 162, - 162, 162, 165, 168, 165, 159, 168, 154, 159, 165, 159, 163, 172, 164, 154, 153, - 156, 165, 165, 160, 158, 161, 157, 155, 154, 154, 150, 146, 149, 155, 148, 146, - 145, 146, 149, 150, 148, 145, 143, 144, 145, 144, 144, 144, 149, 153, 135, 139, - 149, 152, 149, 155, 152, 134, 150, 140, 146, 157, 151, 148, 156, 160, 157, 156, - 158, 159, 162, 163, 163, 159, 152, 152, 155, 159, 164, 164, 160, 156, 153, 148, - 148, 141, 127, 125, 122, 102, 95, 98, 103, 108, 116, 111, 103, 104, 98, 86, - 105, 110, 108, 113, 111, 116, 112, 112, 115, 115, 113, 113, 115, 116, 113, 113, - 113, 114, 113, 114, 113, 113, 116, 115, 113, 112, 111, 111, 111, 112, 113, 113, - 113, 113, 113, 113, 113, 113, 115, 114, 113, 94, 93, 93, 92, 92, 93, 94, - 94, 96, 91, 90, 94, 96, 93, 92, 94, 92, 98, 94, 92, 99, 97, 93, - 98, 93, 95, 96, 91, 91, 94, 94, 92, 104, 102, 99, 95, 92, 91, 92, - 97, 101, 107, 112, 111, 107, 112, 131, 154, 149, 146, 140, 135, 135, 133, 132, - 129, 139, 127, 128, 136, 134, 137, 148, 147, 141, 153, 158, 158, 163, 159, 150, - 149, 152, 153, 153, 153, 156, 160, 157, 152, 165, 158, 156, 150, 140, 143, 146, - 134, 142, 147, 155, 162, 163, 158, 160, 161, 157, 152, 153, 152, 147, 141, 142, - 147, 161, 160, 158, 156, 154, 148, 141, 137, 131, 134, 135, 134, 134, 135, 137, - 139, 136, 130, 133, 136, 131, 136, 139, 135, 137, 127, 128, 136, 132, 133, 141, - 142, 137, 141, 148, 154, 156, 152, 145, 140, 153, 152, 151, 152, 152, 154, 155, - 156, 154, 153, 156, 147, 130, 129, 139, 130, 111, 106, 108, 116, 128, 122, 113, - 115, 99, 89, 109, 112, 107, 112, 109, 113, 111, 111, 114, 114, 112, 112, 114, - 115, 112, 112, 113, 113, 113, 113, 114, 114, 116, 115, 114, 113, 112, 112, 112, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 113, 92, 91, 91, 91, - 90, 90, 91, 91, 96, 91, 90, 94, 96, 94, 93, 95, 93, 98, 95, 93, - 99, 97, 93, 98, 95, 96, 96, 93, 93, 97, 97, 94, 99, 96, 92, 91, - 92, 95, 99, 104, 116, 108, 103, 109, 121, 132, 142, 148, 143, 138, 135, 136, - 139, 137, 136, 134, 139, 122, 122, 133, 134, 143, 162, 171, 177, 190, 197, 199, - 205, 200, 189, 187, 189, 191, 191, 190, 191, 192, 186, 178, 185, 188, 186, 176, - 173, 182, 185, 177, 185, 186, 185, 184, 184, 187, 194, 199, 193, 183, 181, 183, - 186, 180, 176, 173, 177, 176, 179, 179, 180, 177, 175, 173, 178, 179, 181, 179, - 178, 175, 175, 175, 179, 166, 166, 166, 159, 158, 164, 168, 168, 156, 153, 156, - 155, 155, 159, 157, 169, 158, 144, 131, 126, 127, 132, 139, 148, 151, 150, 149, - 148, 150, 154, 155, 161, 153, 155, 154, 148, 148, 148, 130, 120, 121, 119, 118, - 128, 130, 127, 127, 110, 97, 110, 109, 105, 112, 108, 109, 110, 111, 113, 113, - 112, 112, 114, 115, 113, 113, 113, 113, 113, 113, 113, 113, 116, 115, 115, 114, - 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 91, - 91, 91, 91, 91, 91, 90, 90, 96, 91, 91, 95, 97, 95, 94, 96, 94, - 100, 96, 94, 99, 97, 93, 96, 94, 96, 97, 94, 95, 96, 96, 93, 94, - 91, 90, 92, 98, 103, 109, 115, 117, 108, 106, 118, 137, 148, 148, 142, 141, - 134, 135, 142, 144, 140, 138, 136, 137, 125, 131, 143, 147, 158, 176, 183, 174, - 178, 171, 165, 172, 178, 182, 190, 198, 201, 203, 203, 204, 202, 193, 183, 195, - 204, 201, 191, 193, 201, 201, 199, 201, 198, 191, 187, 189, 194, 201, 204, 193, - 190, 193, 195, 193, 186, 186, 189, 192, 190, 189, 186, 184, 181, 181, 180, 176, - 174, 173, 172, 171, 170, 171, 170, 184, 177, 186, 191, 183, 175, 173, 172, 197, - 184, 180, 180, 179, 181, 184, 178, 178, 173, 164, 154, 142, 131, 119, 118, 123, - 134, 141, 148, 153, 155, 155, 155, 162, 152, 155, 160, 159, 159, 156, 138, 125, - 137, 134, 121, 125, 137, 138, 136, 127, 108, 114, 109, 105, 115, 107, 104, 108, - 109, 111, 111, 111, 111, 113, 114, 112, 112, 113, 113, 113, 113, 114, 114, 115, - 115, 115, 115, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, - 112, 111, 92, 92, 93, 94, 94, 94, 93, 93, 95, 91, 91, 95, 97, 96, - 95, 97, 95, 100, 96, 94, 100, 97, 91, 96, 92, 95, 95, 92, 91, 94, - 94, 91, 91, 89, 91, 98, 107, 113, 115, 119, 107, 113, 123, 135, 144, 145, - 147, 145, 134, 128, 133, 140, 138, 132, 129, 131, 136, 137, 151, 163, 163, 169, - 178, 173, 169, 174, 168, 162, 170, 176, 180, 189, 176, 180, 183, 184, 187, 187, - 179, 169, 187, 196, 190, 182, 186, 185, 182, 186, 185, 186, 185, 182, 182, 187, - 189, 187, 175, 186, 197, 196, 182, 173, 182, 197, 199, 197, 193, 188, 184, 183, - 185, 184, 179, 174, 172, 173, 175, 177, 178, 178, 174, 170, 176, 176, 168, 168, - 171, 169, 185, 175, 175, 176, 176, 179, 182, 174, 171, 177, 186, 189, 183, 167, - 146, 139, 128, 130, 123, 121, 126, 134, 142, 146, 151, 149, 155, 161, 154, 155, - 164, 160, 135, 148, 143, 128, 129, 137, 139, 139, 136, 119, 125, 115, 109, 118, - 110, 106, 108, 109, 111, 111, 109, 109, 113, 114, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 114, 114, 114, 114, 113, 112, 113, 113, 113, 113, 113, 113, - 113, 113, 111, 111, 111, 90, 91, 93, 94, 95, 95, 94, 93, 95, 91, 91, - 95, 98, 96, 96, 97, 97, 102, 97, 95, 100, 97, 91, 96, 91, 92, 92, - 89, 92, 95, 96, 90, 89, 87, 92, 100, 111, 116, 116, 117, 113, 126, 138, - 149, 150, 145, 146, 147, 129, 122, 127, 133, 131, 123, 127, 133, 145, 153, 167, - 169, 163, 170, 173, 159, 161, 173, 176, 175, 182, 182, 177, 180, 179, 181, 182, - 183, 187, 190, 186, 179, 179, 189, 187, 189, 200, 196, 193, 208, 192, 199, 202, - 197, 194, 196, 197, 195, 198, 204, 211, 211, 202, 196, 201, 212, 189, 191, 193, - 195, 198, 203, 211, 215, 187, 182, 178, 178, 181, 184, 187, 188, 191, 188, 188, - 177, 167, 178, 191, 185, 178, 171, 174, 176, 175, 179, 182, 174, 189, 183, 174, - 169, 171, 177, 182, 192, 169, 157, 136, 124, 124, 127, 131, 134, 139, 139, 149, - 158, 153, 154, 165, 167, 153, 153, 147, 144, 146, 137, 131, 139, 132, 122, 136, - 126, 112, 116, 111, 108, 110, 111, 113, 113, 109, 109, 111, 112, 111, 111, 113, - 112, 113, 112, 113, 113, 111, 112, 113, 114, 114, 113, 112, 111, 113, 113, 113, - 113, 113, 113, 113, 113, 111, 110, 110, 87, 88, 90, 92, 93, 93, 92, 92, - 95, 91, 91, 95, 98, 96, 96, 98, 97, 103, 97, 94, 100, 95, 91, 96, - 90, 93, 93, 92, 93, 97, 97, 94, 89, 88, 95, 105, 114, 117, 115, 115, - 133, 137, 146, 154, 156, 151, 147, 144, 130, 123, 127, 133, 127, 121, 129, 142, - 152, 158, 168, 159, 153, 164, 170, 157, 168, 178, 174, 169, 175, 178, 178, 184, - 185, 185, 182, 181, 185, 190, 189, 184, 193, 199, 193, 192, 199, 183, 174, 192, - 194, 203, 206, 195, 185, 185, 191, 194, 209, 199, 193, 198, 206, 205, 200, 196, - 208, 208, 206, 200, 194, 191, 192, 193, 200, 192, 188, 186, 188, 191, 193, 194, - 186, 195, 201, 191, 179, 186, 190, 174, 172, 168, 173, 176, 172, 177, 179, 169, - 168, 169, 171, 173, 175, 172, 166, 166, 190, 184, 174, 168, 165, 155, 138, 127, - 130, 125, 134, 149, 153, 155, 155, 151, 167, 152, 144, 160, 163, 136, 126, 140, - 125, 125, 147, 134, 115, 116, 111, 111, 112, 113, 114, 113, 111, 109, 111, 112, - 111, 111, 113, 112, 113, 112, 113, 113, 110, 111, 112, 113, 114, 113, 112, 111, - 113, 113, 113, 113, 113, 113, 113, 113, 110, 110, 110, 90, 94, 94, 91, 92, - 95, 95, 93, 96, 96, 97, 97, 97, 98, 98, 98, 102, 101, 98, 96, 95, - 91, 91, 90, 96, 94, 92, 92, 94, 97, 100, 101, 93, 97, 110, 113, 107, - 111, 129, 137, 138, 152, 161, 157, 150, 147, 139, 130, 126, 134, 136, 124, 115, - 123, 142, 156, 164, 160, 163, 165, 166, 165, 168, 170, 166, 170, 176, 183, 184, - 181, 181, 185, 190, 182, 177, 181, 192, 199, 199, 195, 194, 193, 194, 192, 190, - 191, 196, 198, 198, 199, 201, 203, 205, 206, 208, 205, 203, 194, 190, 194, 199, - 199, 197, 195, 208, 201, 208, 203, 184, 191, 205, 200, 197, 206, 209, 203, 198, - 197, 195, 192, 194, 204, 203, 190, 184, 191, 198, 193, 182, 169, 167, 169, 168, - 176, 184, 180, 180, 175, 168, 170, 180, 184, 177, 168, 166, 164, 164, 172, 178, - 175, 160, 149, 129, 121, 120, 131, 138, 134, 138, 153, 155, 160, 158, 153, 149, - 147, 145, 142, 136, 117, 114, 132, 135, 122, 114, 117, 119, 120, 116, 108, 107, - 110, 111, 110, 110, 111, 113, 112, 111, 111, 114, 116, 113, 114, 114, 114, 114, - 113, 112, 111, 114, 114, 114, 113, 113, 112, 112, 112, 113, 113, 113, 91, 94, - 94, 91, 92, 95, 96, 93, 94, 94, 94, 95, 95, 96, 96, 96, 99, 99, - 96, 95, 94, 93, 93, 94, 89, 94, 99, 101, 100, 101, 102, 102, 104, 99, - 105, 108, 105, 115, 130, 134, 146, 153, 153, 148, 143, 140, 136, 129, 129, 128, - 128, 130, 139, 149, 153, 148, 156, 155, 160, 163, 168, 170, 174, 176, 172, 171, - 176, 182, 187, 183, 185, 185, 185, 179, 179, 181, 191, 194, 194, 188, 194, 195, - 197, 196, 194, 192, 194, 195, 196, 198, 200, 202, 205, 207, 211, 207, 196, 195, - 197, 200, 201, 200, 199, 199, 201, 196, 204, 205, 195, 201, 208, 198, 202, 208, - 207, 201, 199, 204, 206, 204, 183, 199, 210, 204, 200, 197, 190, 178, 187, 176, - 178, 174, 162, 164, 173, 172, 187, 183, 179, 179, 180, 179, 173, 162, 155, 151, - 151, 157, 166, 171, 168, 165, 177, 150, 126, 120, 126, 127, 124, 130, 145, 148, - 147, 152, 158, 158, 147, 135, 139, 129, 124, 131, 136, 135, 129, 124, 119, 121, - 121, 115, 111, 110, 112, 110, 110, 111, 113, 112, 111, 111, 114, 116, 113, 114, - 114, 114, 114, 113, 112, 111, 114, 114, 114, 113, 113, 112, 112, 112, 113, 113, - 113, 91, 94, 94, 92, 92, 95, 96, 93, 94, 94, 95, 95, 95, 96, 96, - 96, 96, 96, 95, 95, 95, 95, 96, 97, 91, 97, 102, 105, 106, 105, 108, - 111, 116, 107, 106, 110, 115, 130, 143, 144, 156, 157, 154, 146, 139, 135, 128, - 120, 121, 123, 129, 140, 154, 163, 157, 143, 149, 151, 155, 161, 167, 171, 176, - 177, 175, 169, 173, 177, 183, 180, 182, 182, 179, 177, 181, 182, 187, 186, 187, - 182, 188, 191, 193, 193, 190, 187, 188, 187, 190, 192, 193, 196, 199, 203, 207, - 207, 191, 195, 202, 203, 199, 196, 195, 196, 209, 203, 204, 202, 196, 200, 202, - 190, 204, 209, 211, 212, 213, 214, 210, 204, 187, 195, 199, 190, 189, 194, 196, - 194, 183, 182, 187, 180, 164, 164, 178, 183, 176, 177, 178, 179, 179, 177, 174, - 168, 162, 155, 153, 154, 160, 162, 163, 162, 166, 175, 174, 156, 129, 109, 108, - 121, 142, 142, 138, 138, 145, 148, 144, 138, 139, 138, 133, 127, 132, 143, 143, - 134, 122, 126, 127, 122, 115, 113, 112, 112, 110, 111, 111, 112, 111, 111, 114, - 116, 113, 114, 114, 114, 114, 113, 112, 111, 114, 114, 114, 113, 113, 112, 112, - 112, 113, 113, 113, 91, 94, 95, 92, 92, 96, 96, 93, 97, 97, 97, 98, - 98, 98, 99, 99, 97, 95, 94, 94, 96, 96, 96, 98, 101, 101, 102, 104, - 106, 110, 113, 117, 117, 110, 112, 120, 126, 143, 159, 160, 159, 159, 154, 145, - 133, 123, 114, 108, 116, 131, 147, 154, 154, 154, 150, 145, 149, 150, 156, 162, - 167, 171, 175, 176, 173, 169, 173, 174, 175, 170, 175, 178, 179, 178, 182, 180, - 182, 180, 182, 183, 183, 185, 187, 187, 185, 184, 183, 184, 188, 188, 189, 191, - 193, 197, 199, 201, 194, 199, 203, 201, 197, 195, 194, 193, 217, 212, 206, 198, - 194, 199, 204, 201, 198, 195, 195, 192, 196, 195, 194, 188, 202, 200, 190, 177, - 173, 182, 193, 200, 187, 187, 192, 187, 171, 173, 187, 192, 177, 174, 174, 177, - 179, 178, 177, 175, 165, 162, 162, 161, 159, 155, 152, 150, 160, 165, 169, 166, - 158, 144, 121, 107, 121, 130, 131, 132, 134, 138, 143, 146, 140, 142, 141, 131, - 129, 137, 145, 144, 132, 130, 131, 126, 120, 119, 116, 110, 112, 111, 111, 110, - 111, 111, 114, 116, 113, 114, 114, 114, 114, 113, 112, 111, 114, 114, 114, 113, - 113, 112, 112, 112, 113, 113, 113, 92, 95, 95, 93, 93, 96, 97, 94, 97, - 97, 98, 98, 99, 99, 99, 99, 98, 97, 96, 95, 96, 95, 96, 96, 105, - 103, 103, 108, 114, 116, 112, 112, 112, 113, 122, 129, 133, 147, 161, 164, 152, - 150, 144, 133, 120, 110, 110, 111, 129, 143, 159, 164, 157, 154, 155, 153, 157, - 160, 164, 168, 171, 174, 176, 176, 172, 173, 178, 178, 171, 165, 170, 179, 179, - 179, 179, 176, 175, 174, 179, 182, 182, 183, 184, 183, 181, 182, 185, 188, 188, - 188, 188, 188, 190, 191, 192, 194, 202, 207, 207, 203, 203, 207, 207, 203, 209, - 215, 212, 205, 205, 211, 218, 224, 227, 214, 202, 196, 199, 204, 212, 215, 203, - 203, 198, 189, 183, 181, 179, 178, 199, 197, 198, 194, 181, 182, 188, 188, 195, - 184, 176, 179, 181, 179, 175, 175, 169, 168, 167, 167, 162, 159, 159, 158, 159, - 159, 156, 156, 160, 160, 147, 137, 102, 109, 115, 125, 137, 143, 144, 144, 144, - 144, 144, 140, 130, 127, 140, 149, 142, 135, 133, 128, 126, 124, 117, 109, 113, - 113, 111, 110, 111, 111, 114, 116, 113, 114, 114, 114, 114, 113, 112, 111, 114, - 114, 114, 113, 113, 112, 112, 112, 113, 113, 113, 92, 95, 96, 93, 93, 97, - 97, 94, 95, 96, 96, 96, 97, 97, 97, 98, 100, 99, 98, 96, 96, 94, - 95, 97, 100, 101, 106, 114, 119, 115, 103, 101, 117, 126, 138, 143, 142, 148, - 162, 161, 154, 144, 134, 126, 119, 121, 133, 139, 146, 145, 151, 156, 160, 166, - 163, 155, 162, 165, 169, 171, 171, 172, 174, 175, 174, 176, 184, 183, 178, 170, - 176, 183, 182, 179, 178, 174, 174, 173, 178, 181, 185, 187, 188, 185, 186, 188, - 193, 197, 189, 189, 189, 190, 189, 188, 187, 188, 196, 202, 202, 198, 201, 209, - 211, 206, 195, 211, 212, 207, 210, 208, 207, 214, 201, 195, 196, 197, 201, 197, - 197, 199, 198, 197, 197, 195, 192, 188, 184, 184, 197, 191, 195, 193, 186, 189, - 194, 189, 192, 180, 173, 178, 183, 180, 177, 179, 184, 180, 174, 167, 164, 163, - 165, 167, 153, 161, 167, 164, 156, 151, 154, 165, 138, 122, 105, 105, 123, 139, - 142, 140, 146, 147, 148, 147, 137, 128, 136, 144, 139, 135, 135, 132, 129, 126, - 120, 111, 113, 113, 111, 110, 110, 111, 114, 116, 113, 114, 114, 114, 114, 113, - 112, 111, 114, 114, 114, 113, 113, 112, 112, 112, 113, 113, 113, 92, 95, 96, - 93, 94, 97, 97, 94, 96, 96, 96, 97, 97, 97, 98, 98, 100, 99, 98, - 96, 96, 95, 97, 99, 99, 103, 108, 109, 107, 101, 97, 101, 131, 140, 151, - 156, 151, 156, 164, 162, 154, 140, 131, 133, 141, 149, 159, 160, 146, 139, 142, - 147, 159, 168, 167, 160, 169, 171, 172, 174, 172, 170, 169, 171, 177, 177, 182, - 186, 188, 183, 184, 187, 187, 184, 184, 182, 183, 182, 184, 184, 190, 192, 194, - 194, 194, 193, 196, 198, 193, 194, 196, 197, 196, 194, 190, 186, 187, 196, 200, - 194, 193, 199, 201, 197, 192, 208, 205, 199, 205, 201, 192, 200, 202, 204, 212, - 219, 218, 208, 202, 202, 204, 199, 196, 196, 197, 198, 200, 201, 192, 188, 195, - 197, 191, 193, 199, 194, 179, 170, 171, 180, 182, 176, 175, 185, 196, 193, 183, - 175, 170, 168, 166, 163, 172, 159, 152, 163, 173, 167, 155, 149, 171, 151, 124, - 111, 116, 127, 139, 145, 147, 152, 151, 146, 143, 143, 142, 132, 124, 127, 139, - 137, 130, 125, 118, 114, 114, 113, 111, 110, 110, 110, 113, 115, 113, 114, 114, - 114, 114, 113, 112, 111, 114, 114, 114, 113, 113, 112, 112, 112, 113, 113, 113, - 91, 95, 95, 92, 94, 97, 99, 97, 100, 100, 101, 101, 101, 100, 100, 100, - 99, 97, 97, 96, 94, 95, 98, 101, 103, 110, 111, 106, 97, 95, 101, 116, - 140, 144, 153, 156, 153, 158, 164, 155, 144, 128, 123, 136, 153, 161, 162, 153, - 144, 143, 149, 151, 155, 164, 169, 171, 175, 177, 180, 180, 179, 176, 174, 177, - 175, 172, 173, 183, 191, 191, 187, 184, 189, 188, 188, 189, 190, 190, 188, 186, - 188, 191, 195, 195, 195, 194, 194, 194, 193, 195, 197, 199, 199, 196, 193, 187, - 190, 205, 213, 204, 195, 196, 198, 195, 200, 212, 202, 195, 210, 211, 203, 211, - 218, 212, 206, 203, 198, 194, 200, 211, 209, 208, 205, 206, 204, 199, 193, 191, - 199, 197, 203, 203, 189, 187, 191, 187, 181, 179, 183, 191, 187, 174, 172, 183, - 184, 185, 180, 178, 179, 175, 167, 161, 168, 164, 166, 168, 156, 143, 149, 168, - 152, 155, 152, 140, 124, 118, 126, 139, 134, 146, 143, 137, 144, 159, 153, 125, - 115, 129, 149, 147, 134, 123, 120, 119, 117, 117, 114, 112, 108, 108, 109, 111, - 112, 113, 113, 113, 113, 112, 111, 110, 113, 113, 113, 112, 112, 111, 111, 111, - 113, 113, 113, 90, 90, 90, 92, 94, 96, 99, 100, 101, 101, 100, 101, 99, - 99, 97, 97, 100, 100, 99, 97, 94, 97, 99, 104, 114, 110, 105, 104, 112, - 121, 128, 132, 137, 145, 157, 157, 150, 153, 152, 136, 125, 125, 129, 144, 163, - 160, 147, 144, 147, 148, 154, 158, 161, 165, 169, 171, 173, 173, 174, 175, 177, - 179, 182, 181, 170, 175, 181, 182, 180, 179, 182, 186, 193, 185, 187, 189, 184, - 184, 183, 173, 181, 186, 192, 191, 187, 185, 189, 193, 185, 198, 206, 199, 187, - 186, 193, 197, 197, 198, 195, 192, 195, 203, 207, 206, 206, 202, 199, 200, 206, - 209, 208, 206, 203, 199, 201, 208, 205, 196, 195, 202, 207, 211, 211, 205, 200, - 200, 200, 198, 204, 203, 202, 199, 192, 187, 193, 203, 188, 189, 186, 180, 178, - 181, 182, 182, 187, 180, 171, 167, 169, 171, 167, 163, 169, 168, 165, 164, 162, - 158, 156, 153, 156, 159, 157, 153, 151, 141, 118, 99, 106, 122, 130, 131, 140, - 152, 153, 136, 143, 131, 134, 142, 144, 135, 125, 123, 121, 120, 118, 114, 110, - 106, 101, 104, 107, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, - 109, 109, 109, 113, 113, 113, 89, 89, 90, 92, 94, 97, 100, 101, 103, 103, - 103, 102, 101, 100, 98, 97, 101, 98, 96, 97, 100, 102, 106, 110, 108, 108, - 107, 110, 120, 130, 137, 141, 153, 150, 153, 151, 145, 146, 147, 133, 120, 130, - 137, 146, 155, 152, 143, 145, 148, 150, 152, 156, 160, 163, 165, 166, 175, 175, - 176, 177, 179, 180, 180, 180, 173, 175, 178, 179, 180, 180, 183, 186, 182, 174, - 176, 182, 181, 185, 186, 177, 183, 185, 186, 186, 185, 184, 184, 184, 184, 191, - 193, 189, 185, 188, 192, 194, 195, 200, 205, 205, 207, 207, 203, 196, 203, 205, - 209, 215, 220, 221, 217, 213, 198, 198, 203, 210, 211, 208, 209, 212, 199, 207, - 210, 206, 202, 203, 205, 206, 204, 197, 193, 198, 201, 196, 190, 186, 190, 193, - 192, 185, 183, 184, 185, 184, 181, 175, 170, 170, 173, 173, 168, 162, 171, 168, - 165, 164, 164, 162, 156, 153, 150, 152, 151, 149, 148, 144, 134, 124, 106, 105, - 111, 129, 139, 138, 141, 146, 138, 130, 127, 133, 138, 136, 133, 126, 123, 120, - 119, 114, 110, 105, 101, 103, 107, 110, 110, 110, 110, 110, 110, 110, 111, 111, - 111, 110, 110, 109, 109, 109, 112, 112, 112, 90, 89, 90, 93, 94, 97, 99, - 100, 104, 103, 101, 100, 99, 98, 98, 96, 96, 93, 93, 97, 104, 109, 110, - 114, 103, 107, 109, 117, 128, 138, 144, 147, 152, 148, 156, 162, 156, 146, 137, - 119, 123, 146, 158, 156, 155, 151, 146, 148, 155, 153, 153, 157, 163, 166, 166, - 164, 174, 175, 177, 178, 178, 177, 176, 174, 177, 176, 177, 178, 179, 181, 183, - 184, 181, 171, 173, 180, 182, 189, 191, 181, 191, 189, 187, 188, 189, 189, 186, - 183, 193, 193, 191, 188, 191, 197, 197, 193, 197, 199, 198, 195, 195, 199, 201, - 199, 201, 205, 209, 211, 209, 207, 204, 202, 212, 214, 214, 207, 201, 196, 192, - 187, 200, 208, 212, 207, 202, 202, 203, 203, 204, 197, 194, 198, 203, 198, 189, - 184, 186, 193, 195, 188, 184, 183, 184, 184, 179, 175, 173, 175, 178, 176, 169, - 162, 172, 168, 164, 165, 167, 167, 161, 156, 152, 153, 151, 150, 152, 155, 157, - 157, 136, 115, 104, 114, 130, 134, 133, 136, 132, 129, 123, 121, 126, 133, 134, - 128, 121, 117, 114, 112, 110, 109, 108, 108, 112, 112, 112, 112, 112, 112, 113, - 113, 114, 114, 114, 113, 114, 113, 113, 112, 111, 111, 111, 91, 91, 93, 94, - 95, 97, 98, 98, 100, 100, 100, 97, 98, 97, 95, 93, 90, 87, 92, 100, - 106, 110, 108, 110, 107, 112, 120, 127, 138, 146, 151, 153, 166, 154, 152, 152, - 140, 134, 136, 131, 130, 158, 170, 161, 156, 153, 149, 149, 161, 158, 156, 160, - 168, 172, 171, 168, 170, 171, 174, 176, 176, 175, 173, 171, 177, 174, 173, 174, - 177, 180, 181, 181, 191, 180, 179, 184, 185, 191, 191, 180, 190, 190, 190, 190, - 189, 189, 187, 185, 195, 195, 193, 192, 195, 200, 197, 191, 190, 193, 193, 190, - 191, 197, 201, 202, 202, 204, 204, 200, 195, 194, 198, 203, 203, 209, 210, 204, - 204, 212, 214, 210, 198, 201, 203, 201, 201, 203, 201, 197, 201, 200, 201, 198, - 193, 187, 192, 201, 177, 187, 192, 187, 181, 180, 181, 182, 177, 175, 174, 176, - 178, 177, 170, 165, 172, 167, 163, 164, 168, 169, 164, 158, 161, 158, 156, 151, - 149, 150, 155, 161, 149, 147, 129, 108, 106, 121, 126, 124, 135, 139, 130, 119, - 119, 127, 133, 130, 119, 113, 110, 109, 110, 112, 115, 114, 114, 113, 113, 113, - 113, 114, 114, 116, 117, 117, 117, 116, 117, 116, 116, 115, 112, 111, 111, 93, - 93, 94, 94, 95, 95, 97, 97, 96, 96, 96, 93, 94, 93, 91, 90, 87, - 88, 94, 103, 109, 111, 109, 109, 118, 125, 133, 139, 146, 150, 152, 153, 153, - 149, 156, 153, 135, 125, 125, 121, 137, 159, 166, 158, 158, 159, 153, 153, 162, - 159, 156, 160, 168, 172, 172, 169, 166, 168, 171, 174, 176, 176, 175, 173, 178, - 176, 174, 175, 178, 180, 181, 181, 196, 185, 185, 188, 187, 190, 189, 178, 184, - 188, 191, 190, 186, 184, 186, 189, 183, 189, 193, 192, 194, 196, 194, 190, 178, - 190, 202, 207, 206, 204, 198, 191, 199, 203, 205, 204, 201, 204, 212, 220, 221, - 224, 217, 202, 194, 197, 197, 192, 197, 196, 195, 197, 205, 211, 207, 199, 198, - 199, 203, 201, 195, 190, 196, 205, 172, 182, 191, 188, 181, 180, 183, 184, 178, - 176, 173, 173, 175, 175, 172, 169, 169, 165, 161, 162, 166, 168, 165, 160, 161, - 157, 156, 152, 147, 144, 146, 152, 145, 163, 160, 129, 102, 96, 105, 116, 134, - 144, 139, 127, 117, 121, 130, 133, 119, 110, 106, 105, 110, 115, 122, 121, 117, - 114, 114, 114, 114, 116, 116, 117, 118, 118, 120, 119, 120, 119, 119, 116, 114, - 111, 111, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 93, 92, 91, 91, - 90, 90, 90, 94, 102, 107, 111, 111, 112, 116, 126, 134, 139, 144, 147, 148, - 147, 147, 136, 137, 144, 138, 122, 121, 127, 117, 145, 157, 157, 153, 161, 164, - 159, 160, 158, 156, 154, 156, 160, 164, 165, 164, 165, 167, 170, 173, 176, 177, - 178, 178, 179, 177, 178, 178, 179, 180, 181, 182, 189, 181, 185, 189, 186, 188, - 188, 179, 186, 192, 197, 195, 190, 187, 190, 195, 178, 186, 193, 194, 194, 197, - 198, 197, 184, 194, 201, 201, 198, 197, 195, 191, 193, 199, 205, 207, 204, 203, - 205, 208, 194, 196, 196, 194, 197, 207, 216, 220, 210, 206, 200, 198, 204, 209, - 203, 194, 199, 194, 195, 202, 207, 202, 195, 189, 176, 184, 192, 188, 184, 184, - 187, 186, 179, 176, 173, 172, 173, 174, 174, 174, 166, 164, 162, 162, 164, 165, - 164, 163, 157, 153, 153, 156, 152, 149, 149, 155, 159, 151, 147, 148, 134, 108, - 90, 97, 126, 136, 137, 130, 121, 117, 126, 134, 122, 111, 105, 103, 110, 117, - 125, 125, 117, 113, 113, 114, 114, 116, 116, 117, 118, 120, 120, 120, 120, 120, - 120, 118, 114, 111, 111, 96, 96, 96, 95, 95, 94, 94, 92, 94, 93, 93, - 91, 92, 92, 93, 93, 97, 102, 106, 107, 108, 110, 118, 127, 134, 140, 143, - 144, 144, 141, 140, 139, 148, 140, 128, 111, 110, 142, 170, 167, 160, 162, 157, - 156, 163, 163, 158, 163, 156, 155, 153, 152, 152, 154, 155, 156, 163, 164, 166, - 168, 171, 173, 175, 176, 175, 177, 180, 180, 178, 177, 179, 182, 179, 177, 185, - 191, 186, 187, 189, 182, 192, 194, 196, 195, 192, 190, 190, 192, 186, 191, 193, - 192, 192, 197, 199, 198, 194, 197, 194, 186, 183, 189, 197, 202, 194, 197, 199, - 198, 194, 191, 191, 192, 219, 216, 214, 213, 210, 208, 211, 217, 214, 213, 208, - 201, 200, 203, 201, 196, 202, 196, 195, 201, 205, 199, 190, 184, 185, 190, 192, - 189, 187, 188, 187, 185, 178, 176, 175, 174, 175, 175, 175, 175, 163, 164, 164, - 163, 161, 161, 163, 166, 159, 155, 156, 160, 159, 155, 154, 157, 165, 145, 136, - 147, 154, 135, 103, 94, 119, 123, 127, 134, 132, 122, 123, 130, 130, 116, 107, - 105, 109, 116, 125, 125, 116, 112, 112, 113, 113, 114, 114, 116, 117, 118, 118, - 119, 119, 119, 119, 116, 113, 110, 110, 98, 98, 96, 95, 94, 92, 92, 92, - 94, 94, 94, 95, 95, 97, 97, 100, 104, 109, 110, 108, 104, 108, 120, 133, - 138, 140, 141, 140, 136, 133, 130, 127, 117, 127, 141, 150, 163, 195, 201, 176, - 171, 167, 159, 158, 163, 157, 153, 163, 158, 157, 155, 152, 148, 148, 150, 152, - 160, 160, 161, 163, 165, 167, 169, 171, 168, 173, 178, 177, 173, 171, 173, 177, - 178, 176, 188, 193, 187, 186, 190, 184, 191, 189, 187, 186, 187, 185, 182, 179, - 195, 194, 189, 184, 185, 190, 192, 189, 188, 195, 198, 195, 192, 196, 202, 204, - 198, 197, 194, 191, 191, 193, 199, 203, 203, 198, 200, 206, 206, 199, 201, 210, - 198, 203, 205, 200, 198, 204, 210, 214, 200, 201, 202, 199, 191, 183, 185, 192, - 190, 193, 192, 187, 186, 187, 185, 181, 177, 177, 177, 177, 178, 178, 177, 176, - 163, 166, 167, 165, 160, 159, 164, 168, 166, 160, 159, 163, 163, 156, 152, 155, - 145, 157, 158, 146, 138, 135, 124, 119, 116, 110, 115, 133, 139, 127, 124, 129, - 139, 125, 112, 107, 109, 114, 122, 123, 113, 110, 110, 110, 112, 112, 113, 113, - 115, 115, 117, 116, 117, 116, 118, 115, 112, 109, 109, 99, 98, 96, 95, 94, - 92, 92, 90, 90, 91, 94, 99, 102, 101, 99, 100, 119, 113, 106, 105, 111, - 120, 128, 136, 136, 137, 135, 128, 127, 132, 139, 138, 167, 171, 181, 185, 183, - 180, 180, 179, 164, 161, 160, 160, 162, 163, 165, 166, 163, 164, 163, 160, 155, - 151, 149, 150, 143, 147, 152, 154, 155, 158, 162, 166, 170, 164, 165, 173, 178, - 175, 178, 185, 182, 178, 175, 180, 188, 191, 187, 182, 206, 202, 198, 193, 190, - 190, 191, 193, 193, 194, 196, 197, 192, 186, 189, 195, 184, 190, 197, 201, 199, - 195, 191, 189, 192, 195, 197, 197, 195, 195, 197, 200, 199, 204, 204, 202, 212, - 225, 224, 213, 203, 195, 191, 200, 210, 210, 203, 198, 211, 194, 184, 189, 194, - 190, 189, 193, 191, 189, 182, 182, 188, 181, 175, 184, 159, 174, 180, 171, 166, - 171, 173, 168, 176, 171, 167, 169, 172, 169, 157, 146, 161, 158, 162, 170, 170, - 163, 158, 159, 155, 155, 153, 152, 149, 146, 145, 148, 134, 104, 105, 132, 139, - 127, 129, 137, 139, 139, 124, 105, 105, 112, 117, 119, 111, 109, 107, 105, 109, - 113, 113, 107, 112, 112, 112, 112, 113, 114, 114, 114, 106, 113, 111, 98, 98, - 98, 95, 94, 92, 91, 91, 95, 97, 101, 102, 101, 101, 106, 119, 118, 115, - 109, 115, 123, 128, 129, 130, 122, 133, 143, 148, 152, 164, 175, 178, 179, 179, - 183, 182, 174, 169, 164, 164, 157, 155, 154, 156, 157, 158, 159, 159, 161, 159, - 157, 157, 158, 156, 152, 148, 143, 145, 145, 143, 142, 143, 148, 151, 158, 163, - 173, 179, 175, 168, 172, 181, 181, 179, 179, 184, 190, 193, 192, 189, 189, 189, - 189, 190, 191, 192, 194, 195, 193, 194, 197, 199, 196, 191, 193, 199, 198, 196, - 193, 190, 188, 191, 197, 201, 195, 198, 200, 200, 198, 197, 198, 200, 203, 210, - 210, 202, 201, 208, 210, 204, 194, 192, 195, 203, 206, 203, 199, 198, 196, 189, - 191, 200, 202, 193, 190, 192, 203, 197, 186, 181, 186, 183, 178, 181, 179, 172, - 175, 185, 182, 167, 159, 162, 164, 165, 163, 159, 154, 154, 159, 164, 165, 163, - 165, 170, 170, 163, 161, 164, 166, 156, 147, 145, 150, 149, 142, 134, 141, 137, - 134, 120, 116, 129, 136, 117, 133, 144, 138, 124, 118, 113, 107, 104, 106, 110, - 111, 107, 106, 108, 106, 103, 108, 108, 109, 109, 109, 109, 110, 110, 109, 116, - 112, 96, 97, 97, 95, 94, 93, 92, 94, 99, 99, 101, 105, 108, 110, 111, - 116, 112, 117, 116, 117, 120, 122, 133, 141, 169, 181, 191, 189, 181, 180, 184, - 183, 172, 172, 174, 171, 166, 159, 158, 160, 161, 161, 160, 160, 160, 161, 163, - 163, 166, 161, 159, 162, 167, 167, 161, 154, 153, 151, 148, 142, 138, 137, 139, - 142, 153, 152, 154, 158, 164, 171, 176, 181, 179, 180, 182, 186, 188, 190, 191, - 191, 186, 187, 189, 190, 190, 190, 189, 188, 191, 192, 196, 200, 198, 194, 195, - 200, 194, 202, 212, 218, 216, 209, 201, 196, 197, 199, 201, 201, 199, 198, 197, - 197, 197, 208, 213, 205, 198, 203, 209, 211, 212, 208, 204, 199, 193, 189, 194, - 202, 205, 196, 190, 189, 185, 176, 176, 182, 185, 182, 177, 174, 179, 183, 180, - 175, 190, 171, 162, 167, 166, 156, 149, 151, 158, 163, 168, 168, 163, 158, 157, - 160, 163, 165, 167, 169, 166, 160, 162, 168, 171, 163, 154, 150, 152, 149, 142, - 135, 142, 154, 152, 125, 113, 132, 136, 108, 120, 134, 133, 125, 123, 119, 118, - 121, 105, 111, 116, 113, 108, 110, 110, 109, 109, 109, 109, 109, 109, 109, 111, - 111, 111, 117, 114, 95, 96, 95, 94, 95, 93, 94, 95, 98, 96, 98, 111, - 123, 122, 106, 98, 116, 128, 130, 123, 113, 120, 147, 172, 173, 181, 188, 185, - 177, 172, 172, 165, 161, 160, 162, 161, 158, 157, 158, 160, 166, 168, 166, 166, - 166, 166, 168, 168, 167, 164, 164, 167, 170, 170, 165, 159, 161, 159, 155, 149, - 143, 139, 137, 137, 133, 138, 145, 152, 158, 162, 168, 173, 173, 177, 180, 183, - 182, 182, 184, 187, 190, 190, 191, 191, 190, 189, 188, 187, 189, 190, 194, 198, - 196, 192, 192, 196, 198, 198, 198, 196, 194, 194, 196, 198, 196, 198, 199, 199, - 198, 195, 194, 192, 191, 203, 211, 207, 203, 205, 210, 213, 194, 201, 212, 218, - 211, 195, 184, 181, 197, 191, 188, 191, 195, 195, 199, 205, 202, 204, 209, 208, - 205, 209, 209, 197, 187, 188, 183, 174, 176, 185, 181, 169, 166, 162, 161, 166, - 172, 170, 160, 151, 156, 161, 165, 164, 160, 157, 159, 164, 162, 168, 172, 164, - 152, 142, 144, 147, 143, 141, 149, 148, 137, 133, 126, 108, 122, 131, 129, 121, - 121, 117, 113, 113, 108, 112, 115, 113, 111, 113, 115, 112, 113, 112, 112, 111, - 111, 111, 111, 112, 110, 117, 115, 95, 96, 95, 94, 95, 93, 94, 98, 97, - 100, 109, 118, 123, 120, 105, 99, 131, 135, 134, 129, 124, 135, 160, 181, 166, - 167, 167, 166, 166, 168, 165, 158, 169, 166, 166, 163, 159, 158, 157, 158, 164, - 164, 164, 164, 164, 165, 166, 167, 162, 164, 166, 166, 164, 162, 160, 159, 160, - 159, 157, 153, 148, 142, 135, 132, 117, 128, 144, 154, 152, 145, 150, 160, 163, - 169, 174, 177, 177, 178, 180, 186, 185, 185, 185, 187, 189, 191, 194, 195, 192, - 191, 193, 196, 195, 191, 190, 194, 193, 193, 193, 191, 189, 190, 192, 195, 198, - 197, 197, 197, 197, 195, 193, 191, 194, 201, 207, 208, 206, 205, 203, 200, 217, - 204, 190, 185, 187, 194, 208, 220, 202, 200, 203, 212, 215, 206, 193, 183, 175, - 170, 173, 165, 147, 146, 150, 139, 136, 151, 163, 165, 172, 182, 182, 174, 174, - 163, 152, 150, 157, 162, 162, 159, 152, 160, 165, 164, 159, 157, 158, 160, 154, - 164, 172, 168, 156, 145, 146, 149, 148, 137, 145, 159, 151, 135, 122, 112, 99, - 111, 113, 115, 125, 124, 118, 118, 117, 117, 114, 111, 113, 118, 117, 111, 113, - 112, 109, 109, 107, 107, 106, 107, 109, 116, 115, 94, 95, 94, 94, 92, 93, - 95, 98, 97, 110, 121, 118, 109, 105, 111, 125, 135, 129, 124, 133, 144, 155, - 161, 160, 173, 168, 164, 160, 163, 167, 165, 158, 167, 166, 165, 165, 164, 164, - 163, 162, 165, 165, 165, 165, 164, 165, 165, 166, 166, 168, 169, 167, 163, 161, - 161, 162, 160, 160, 159, 158, 155, 148, 139, 133, 137, 109, 93, 108, 132, 142, - 148, 159, 153, 158, 164, 170, 173, 177, 181, 185, 183, 183, 183, 183, 184, 186, - 189, 190, 195, 192, 192, 195, 195, 192, 192, 195, 186, 193, 202, 207, 206, 200, - 194, 191, 200, 198, 196, 196, 196, 196, 195, 193, 188, 192, 197, 201, 204, 203, - 199, 194, 191, 192, 202, 215, 219, 208, 192, 182, 193, 186, 179, 175, 170, 156, - 137, 122, 132, 111, 107, 98, 74, 72, 85, 81, 74, 70, 79, 94, 101, 107, - 126, 149, 166, 169, 170, 166, 159, 155, 157, 159, 152, 160, 164, 162, 160, 159, - 161, 159, 156, 156, 158, 158, 161, 154, 146, 142, 147, 141, 144, 148, 144, 147, - 144, 131, 110, 115, 106, 101, 112, 119, 124, 133, 132, 130, 125, 122, 123, 127, - 124, 115, 119, 117, 116, 113, 113, 111, 110, 111, 112, 118, 115, 96, 96, 95, - 94, 92, 92, 94, 96, 103, 111, 115, 109, 101, 104, 119, 136, 133, 130, 129, - 141, 156, 161, 158, 151, 148, 146, 146, 144, 150, 159, 165, 165, 161, 162, 165, - 167, 171, 172, 173, 171, 173, 171, 170, 168, 166, 166, 165, 166, 173, 172, 169, - 168, 167, 167, 167, 166, 165, 163, 162, 161, 158, 153, 144, 139, 145, 83, 40, - 54, 90, 110, 128, 148, 147, 150, 155, 162, 166, 171, 173, 175, 181, 182, 183, - 183, 184, 184, 183, 183, 194, 190, 188, 191, 192, 191, 193, 197, 195, 192, 187, - 183, 183, 188, 196, 203, 200, 197, 193, 192, 194, 195, 195, 194, 188, 189, 191, - 195, 197, 196, 194, 193, 194, 189, 187, 189, 186, 176, 165, 159, 148, 142, 135, - 130, 131, 130, 126, 121, 89, 54, 50, 54, 35, 33, 47, 42, 46, 36, 33, - 38, 42, 51, 76, 104, 129, 141, 158, 167, 167, 161, 155, 152, 154, 157, 159, - 156, 157, 161, 161, 157, 159, 156, 154, 154, 158, 155, 149, 145, 148, 145, 145, - 141, 136, 142, 149, 143, 155, 157, 142, 121, 110, 103, 103, 116, 133, 135, 136, - 135, 136, 136, 132, 126, 127, 125, 123, 121, 120, 119, 117, 117, 113, 119, 116, - 93, 91, 91, 91, 91, 94, 96, 100, 110, 107, 103, 103, 111, 121, 130, 133, - 138, 142, 146, 151, 152, 152, 161, 167, 161, 162, 160, 152, 150, 153, 160, 163, - 169, 170, 170, 172, 175, 176, 174, 171, 172, 170, 169, 169, 167, 165, 165, 164, - 175, 168, 162, 162, 167, 170, 168, 164, 166, 163, 159, 157, 155, 151, 144, 140, - 110, 69, 42, 51, 55, 52, 81, 124, 147, 149, 153, 157, 162, 165, 164, 167, - 170, 174, 181, 186, 192, 193, 192, 192, 192, 187, 184, 187, 190, 191, 194, 199, - 191, 195, 200, 203, 203, 202, 201, 201, 200, 195, 190, 189, 192, 194, 195, 194, - 201, 200, 198, 195, 189, 183, 182, 184, 176, 166, 156, 150, 145, 139, 137, 140, - 141, 145, 149, 149, 148, 145, 141, 137, 80, 38, 38, 55, 42, 35, 41, 29, - 29, 38, 40, 31, 30, 41, 48, 46, 86, 91, 105, 128, 152, 166, 166, 160, - 156, 157, 155, 150, 153, 160, 160, 156, 159, 162, 164, 159, 153, 148, 151, 158, - 160, 148, 148, 151, 135, 126, 130, 137, 137, 157, 163, 153, 136, 112, 99, 106, - 116, 127, 139, 142, 144, 143, 140, 135, 129, 127, 123, 120, 120, 119, 118, 120, - 115, 122, 119, 80, 84, 89, 89, 89, 94, 99, 104, 119, 108, 101, 109, 126, - 138, 145, 145, 135, 145, 143, 138, 147, 156, 163, 171, 157, 160, 161, 159, 155, - 158, 169, 174, 180, 176, 173, 170, 170, 169, 170, 170, 167, 172, 167, 163, 170, - 169, 167, 171, 172, 168, 163, 161, 161, 163, 163, 163, 159, 165, 157, 149, 162, - 139, 159, 133, 65, 31, 38, 43, 41, 37, 35, 75, 107, 128, 149, 157, 160, - 166, 173, 175, 183, 176, 185, 192, 188, 187, 192, 190, 197, 190, 202, 202, 174, - 171, 193, 204, 207, 194, 187, 192, 198, 194, 188, 186, 189, 188, 187, 185, 183, - 180, 178, 177, 169, 168, 166, 164, 163, 162, 161, 161, 161, 159, 156, 155, 156, - 157, 156, 155, 154, 177, 135, 157, 160, 133, 158, 114, 32, 32, 33, 33, 32, - 30, 28, 27, 29, 32, 35, 33, 28, 28, 33, 39, 47, 52, 70, 88, 124, - 153, 154, 169, 159, 169, 165, 154, 153, 153, 156, 166, 157, 163, 170, 164, 160, - 156, 156, 156, 152, 151, 154, 156, 151, 143, 138, 141, 146, 157, 151, 147, 150, - 136, 103, 84, 90, 93, 115, 140, 149, 152, 150, 140, 137, 123, 124, 127, 118, - 114, 123, 125, 121, 121, 120, 79, 80, 83, 90, 96, 100, 104, 107, 100, 103, - 112, 126, 138, 144, 147, 146, 148, 156, 151, 144, 148, 151, 155, 162, 170, 169, - 166, 163, 164, 168, 176, 179, 179, 176, 173, 171, 169, 168, 168, 168, 168, 173, - 168, 165, 171, 170, 168, 173, 168, 165, 161, 160, 160, 161, 160, 160, 162, 143, - 177, 149, 146, 147, 144, 64, 42, 28, 40, 38, 36, 35, 27, 45, 46, 75, - 115, 143, 161, 168, 165, 158, 159, 158, 170, 179, 173, 174, 182, 185, 192, 177, - 181, 187, 175, 173, 171, 156, 163, 165, 169, 171, 171, 173, 177, 182, 173, 173, - 173, 172, 171, 170, 169, 167, 166, 166, 165, 164, 164, 164, 164, 165, 170, 167, - 165, 164, 165, 166, 165, 165, 167, 155, 169, 154, 161, 143, 156, 52, 36, 36, - 36, 35, 34, 32, 30, 30, 33, 33, 32, 31, 30, 30, 32, 33, 37, 42, - 52, 53, 84, 121, 133, 153, 159, 168, 164, 161, 167, 164, 152, 148, 155, 161, - 164, 162, 159, 159, 158, 155, 157, 153, 152, 151, 150, 144, 144, 150, 139, 150, - 149, 147, 151, 146, 131, 130, 121, 104, 102, 119, 135, 150, 155, 145, 145, 124, - 117, 114, 106, 112, 123, 123, 133, 129, 125, 84, 85, 90, 101, 109, 111, 104, - 100, 91, 104, 120, 134, 141, 140, 145, 146, 142, 151, 151, 152, 158, 159, 161, - 167, 176, 172, 164, 161, 164, 168, 174, 174, 176, 174, 172, 170, 169, 168, 168, - 168, 168, 173, 167, 164, 169, 167, 163, 169, 163, 161, 159, 159, 159, 158, 157, - 155, 159, 142, 160, 154, 129, 150, 85, 25, 33, 37, 47, 35, 33, 40, 31, - 28, 38, 43, 52, 62, 80, 102, 119, 126, 122, 121, 132, 136, 122, 119, 128, - 133, 136, 111, 93, 87, 86, 101, 106, 93, 69, 105, 141, 155, 155, 158, 162, - 163, 170, 170, 170, 171, 171, 171, 172, 172, 178, 177, 176, 175, 174, 174, 174, - 174, 177, 175, 173, 173, 174, 175, 174, 173, 174, 161, 163, 168, 153, 159, 104, - 22, 37, 36, 35, 33, 32, 31, 30, 30, 35, 32, 29, 28, 30, 31, 29, - 27, 31, 37, 42, 31, 50, 84, 101, 128, 150, 160, 160, 160, 169, 169, 162, - 161, 154, 157, 158, 157, 159, 161, 157, 152, 157, 152, 151, 151, 150, 148, 147, - 151, 144, 156, 153, 147, 148, 149, 148, 159, 156, 133, 118, 113, 113, 124, 132, - 127, 131, 123, 125, 127, 124, 129, 131, 121, 120, 118, 116, 97, 98, 104, 113, - 117, 111, 102, 99, 109, 117, 126, 134, 137, 136, 144, 148, 132, 141, 147, 152, - 161, 162, 165, 174, 175, 173, 165, 161, 161, 164, 169, 171, 174, 173, 172, 171, - 170, 170, 169, 169, 167, 172, 166, 162, 167, 163, 158, 163, 160, 159, 158, 158, - 158, 157, 154, 151, 155, 150, 139, 135, 142, 101, 32, 42, 39, 44, 44, 32, - 30, 38, 37, 32, 30, 31, 34, 36, 40, 45, 50, 51, 57, 52, 59, 61, - 47, 42, 48, 49, 52, 52, 52, 49, 47, 54, 55, 46, 46, 99, 152, 168, - 170, 174, 178, 173, 182, 180, 181, 181, 182, 182, 184, 183, 192, 191, 189, 186, - 184, 182, 181, 181, 179, 178, 176, 176, 177, 178, 177, 175, 175, 178, 147, 164, - 166, 123, 46, 40, 32, 30, 29, 27, 27, 28, 29, 30, 32, 31, 30, 29, - 30, 30, 29, 28, 32, 33, 40, 34, 42, 56, 67, 102, 122, 144, 156, 159, - 164, 163, 162, 168, 158, 158, 156, 155, 159, 161, 156, 148, 152, 150, 153, 157, - 157, 152, 147, 148, 150, 159, 153, 144, 143, 143, 146, 163, 159, 157, 156, 140, - 112, 100, 106, 106, 105, 105, 117, 121, 119, 126, 131, 119, 128, 129, 128, 119, - 117, 115, 114, 111, 104, 105, 111, 126, 127, 129, 133, 136, 136, 142, 141, 140, - 144, 145, 149, 156, 155, 158, 169, 175, 177, 174, 168, 161, 160, 167, 174, 171, - 171, 171, 172, 172, 171, 171, 171, 168, 173, 167, 163, 167, 162, 156, 161, 158, - 157, 156, 157, 157, 156, 152, 149, 149, 148, 144, 121, 137, 37, 34, 53, 40, - 38, 32, 31, 30, 28, 34, 33, 24, 31, 41, 45, 42, 34, 27, 25, 43, - 34, 36, 43, 40, 41, 45, 42, 31, 41, 43, 41, 42, 44, 45, 48, 85, - 126, 163, 166, 167, 176, 186, 180, 187, 184, 185, 182, 184, 182, 185, 186, 192, - 191, 188, 186, 184, 182, 182, 181, 181, 179, 178, 178, 179, 178, 176, 174, 175, - 173, 169, 145, 169, 49, 43, 43, 26, 26, 25, 25, 25, 27, 29, 30, 26, - 30, 33, 32, 29, 28, 30, 34, 34, 25, 34, 39, 42, 37, 42, 86, 100, - 124, 140, 150, 161, 159, 151, 151, 163, 161, 157, 155, 159, 161, 155, 146, 151, - 148, 151, 156, 158, 153, 149, 150, 151, 154, 147, 144, 148, 148, 149, 160, 147, - 159, 172, 162, 126, 105, 101, 95, 78, 75, 78, 77, 74, 86, 107, 109, 112, - 119, 126, 132, 123, 112, 106, 102, 101, 114, 130, 129, 128, 131, 137, 141, 140, - 140, 134, 143, 142, 141, 145, 152, 150, 156, 171, 170, 175, 174, 167, 159, 156, - 164, 171, 169, 170, 171, 172, 173, 173, 172, 172, 171, 176, 171, 167, 170, 165, - 159, 162, 156, 155, 154, 155, 155, 153, 150, 147, 139, 153, 138, 148, 63, 31, - 46, 40, 34, 33, 25, 38, 39, 25, 31, 29, 37, 34, 33, 30, 28, 27, - 34, 44, 32, 20, 20, 29, 29, 33, 35, 30, 40, 37, 22, 18, 28, 31, - 35, 50, 106, 138, 163, 166, 167, 177, 179, 173, 186, 185, 183, 181, 180, 181, - 182, 182, 187, 187, 186, 185, 185, 186, 187, 187, 184, 183, 181, 181, 181, 179, - 176, 175, 169, 171, 180, 157, 100, 26, 52, 24, 26, 26, 26, 27, 28, 29, - 31, 32, 24, 29, 34, 33, 29, 27, 31, 36, 37, 24, 31, 38, 42, 35, - 37, 78, 108, 114, 113, 120, 145, 160, 162, 164, 165, 164, 160, 156, 158, 160, - 155, 147, 159, 151, 148, 149, 152, 151, 152, 155, 151, 153, 145, 145, 150, 145, - 139, 148, 151, 157, 164, 163, 143, 126, 109, 87, 63, 56, 61, 65, 59, 63, - 79, 84, 72, 84, 97, 122, 113, 106, 109, 113, 113, 124, 138, 136, 136, 137, - 141, 142, 140, 141, 136, 134, 133, 133, 140, 151, 150, 157, 174, 169, 171, 169, - 165, 160, 158, 161, 164, 166, 167, 169, 171, 172, 172, 172, 171, 169, 175, 170, - 166, 170, 164, 157, 161, 154, 152, 151, 151, 151, 150, 147, 145, 137, 153, 128, - 137, 15, 48, 39, 34, 35, 39, 28, 42, 43, 28, 34, 25, 29, 26, 29, - 34, 33, 27, 24, 26, 41, 30, 32, 37, 31, 32, 36, 32, 23, 27, 26, - 36, 48, 37, 33, 53, 131, 153, 175, 181, 184, 189, 187, 180, 187, 186, 184, - 182, 182, 183, 184, 186, 189, 188, 188, 188, 189, 190, 191, 192, 187, 185, 183, - 182, 182, 179, 175, 173, 168, 180, 165, 155, 32, 46, 36, 26, 31, 31, 32, - 32, 32, 32, 31, 29, 26, 29, 32, 32, 30, 28, 29, 30, 37, 33, 39, - 37, 43, 43, 36, 58, 113, 118, 110, 107, 124, 143, 158, 173, 163, 163, 160, - 156, 157, 159, 156, 149, 161, 151, 145, 147, 150, 151, 151, 153, 151, 153, 147, - 148, 149, 139, 132, 141, 153, 150, 156, 160, 156, 149, 126, 94, 70, 55, 62, - 77, 76, 71, 72, 72, 76, 79, 82, 106, 101, 104, 119, 132, 131, 131, 138, - 151, 149, 145, 142, 137, 137, 144, 143, 134, 130, 132, 138, 146, 145, 151, 169, - 175, 175, 171, 168, 168, 165, 166, 163, 165, 167, 169, 171, 172, 173, 172, 172, - 167, 173, 168, 165, 168, 163, 156, 160, 152, 150, 148, 147, 148, 147, 145, 144, - 146, 136, 141, 70, 42, 33, 33, 40, 35, 44, 27, 33, 33, 26, 36, 21, - 40, 30, 27, 32, 36, 33, 30, 30, 30, 23, 27, 31, 22, 22, 29, 29, - 28, 32, 27, 31, 40, 33, 52, 99, 159, 168, 173, 171, 170, 176, 182, 184, - 187, 186, 184, 183, 183, 185, 187, 189, 191, 190, 189, 188, 188, 188, 188, 189, - 187, 185, 183, 182, 181, 177, 173, 170, 175, 178, 158, 109, 28, 49, 15, 44, - 32, 33, 33, 33, 32, 30, 28, 26, 30, 28, 28, 29, 30, 29, 26, 23, - 28, 37, 46, 34, 40, 47, 28, 28, 98, 123, 134, 125, 116, 112, 123, 143, - 159, 161, 159, 156, 156, 158, 156, 152, 155, 148, 147, 152, 155, 152, 148, 145, - 146, 150, 149, 151, 152, 142, 138, 150, 136, 138, 150, 161, 163, 163, 148, 119, - 89, 59, 55, 73, 77, 74, 77, 80, 80, 75, 71, 113, 119, 123, 128, 134, - 139, 146, 149, 154, 153, 151, 148, 141, 136, 138, 137, 148, 144, 135, 133, 148, - 159, 166, 174, 176, 179, 175, 170, 171, 170, 167, 162, 157, 158, 162, 168, 173, - 176, 175, 173, 171, 168, 166, 165, 164, 162, 156, 151, 155, 148, 151, 154, 146, - 145, 146, 140, 162, 119, 125, 48, 34, 46, 28, 35, 38, 36, 35, 38, 41, - 40, 33, 26, 22, 31, 32, 30, 31, 26, 26, 38, 30, 31, 30, 28, 26, - 27, 27, 30, 30, 26, 25, 40, 57, 67, 100, 148, 172, 175, 179, 181, 182, - 183, 184, 186, 187, 187, 187, 187, 187, 187, 186, 186, 192, 192, 191, 190, 190, - 189, 188, 188, 188, 191, 189, 182, 176, 176, 175, 174, 186, 160, 164, 58, 44, - 33, 31, 32, 32, 30, 38, 42, 32, 30, 32, 26, 33, 25, 32, 32, 23, - 34, 42, 27, 34, 36, 38, 40, 41, 40, 38, 36, 81, 126, 122, 130, 134, - 130, 103, 129, 136, 154, 166, 163, 157, 157, 163, 165, 160, 154, 152, 155, 154, - 148, 147, 150, 152, 150, 148, 149, 148, 144, 141, 141, 130, 139, 143, 141, 147, - 151, 146, 136, 81, 53, 66, 89, 81, 80, 84, 70, 78, 74, 71, 118, 121, - 124, 128, 133, 139, 146, 148, 154, 154, 152, 150, 143, 138, 141, 140, 140, 148, - 147, 142, 144, 145, 154, 167, 187, 186, 175, 167, 164, 168, 171, 169, 171, 170, - 167, 166, 168, 170, 171, 171, 170, 168, 166, 166, 166, 163, 158, 154, 149, 143, - 147, 150, 145, 146, 149, 143, 145, 139, 97, 38, 39, 39, 32, 35, 34, 32, - 31, 33, 36, 35, 28, 23, 26, 31, 28, 26, 28, 23, 21, 31, 27, 29, - 31, 32, 32, 32, 29, 29, 34, 27, 35, 79, 132, 153, 156, 166, 168, 171, - 175, 178, 179, 180, 182, 183, 190, 190, 190, 190, 189, 189, 189, 190, 190, 190, - 189, 189, 189, 188, 188, 188, 185, 185, 181, 177, 177, 179, 176, 172, 174, 164, - 132, 31, 31, 31, 27, 37, 28, 28, 30, 26, 20, 28, 37, 36, 19, 26, - 40, 40, 30, 30, 31, 24, 32, 34, 36, 38, 39, 39, 38, 37, 60, 119, - 123, 128, 132, 129, 124, 122, 125, 137, 147, 151, 153, 159, 162, 161, 156, 149, - 146, 149, 150, 147, 146, 148, 148, 150, 151, 149, 145, 140, 140, 143, 137, 139, - 140, 142, 146, 149, 142, 135, 123, 90, 80, 83, 73, 72, 81, 81, 83, 80, - 77, 125, 128, 131, 133, 137, 143, 149, 151, 148, 147, 147, 146, 141, 137, 142, - 142, 170, 175, 171, 162, 163, 161, 164, 172, 178, 182, 181, 178, 174, 171, 167, - 157, 165, 164, 164, 166, 170, 173, 174, 174, 166, 165, 164, 164, 164, 161, 156, - 153, 148, 142, 145, 148, 144, 147, 149, 141, 135, 153, 62, 34, 45, 36, 40, - 36, 31, 31, 31, 33, 33, 32, 27, 23, 29, 29, 21, 22, 28, 22, 18, - 26, 41, 37, 32, 29, 27, 29, 31, 33, 28, 47, 75, 115, 157, 169, 164, - 166, 170, 174, 179, 182, 183, 184, 186, 188, 191, 191, 191, 191, 191, 191, 191, - 191, 188, 188, 188, 188, 188, 187, 187, 187, 184, 181, 177, 175, 180, 184, 179, - 172, 174, 170, 99, 24, 31, 37, 25, 36, 42, 42, 35, 28, 35, 46, 41, - 23, 26, 32, 28, 26, 33, 36, 34, 35, 32, 33, 36, 38, 40, 40, 40, - 37, 37, 99, 127, 126, 131, 130, 144, 118, 126, 131, 137, 145, 155, 164, 165, - 162, 162, 154, 149, 151, 155, 154, 152, 151, 146, 152, 155, 151, 143, 139, 141, - 146, 142, 137, 136, 141, 147, 144, 137, 134, 123, 98, 77, 74, 71, 67, 69, - 75, 67, 67, 66, 128, 133, 136, 140, 145, 147, 149, 151, 148, 144, 145, 146, - 142, 139, 143, 144, 163, 174, 172, 160, 152, 149, 155, 169, 168, 175, 178, 179, - 174, 171, 164, 154, 156, 159, 166, 172, 177, 176, 171, 167, 165, 165, 165, 164, - 162, 158, 153, 150, 153, 147, 149, 149, 144, 147, 147, 136, 140, 129, 34, 36, - 41, 37, 40, 31, 32, 33, 32, 34, 33, 33, 29, 26, 27, 26, 19, 23, - 32, 26, 21, 29, 29, 29, 31, 35, 39, 42, 42, 41, 73, 110, 139, 152, - 159, 159, 164, 177, 174, 175, 182, 183, 187, 186, 190, 190, 190, 189, 191, 189, - 191, 190, 192, 192, 191, 190, 190, 189, 188, 187, 186, 186, 184, 184, 181, 179, - 182, 185, 181, 175, 167, 144, 61, 33, 34, 42, 29, 33, 18, 38, 40, 29, - 32, 40, 34, 22, 32, 43, 34, 27, 36, 34, 31, 44, 32, 33, 35, 38, - 40, 41, 41, 39, 30, 66, 131, 127, 132, 137, 147, 125, 137, 137, 139, 143, - 152, 160, 163, 164, 166, 159, 154, 153, 158, 158, 157, 152, 149, 154, 155, 151, - 146, 145, 145, 145, 143, 134, 130, 140, 145, 139, 133, 135, 133, 111, 82, 75, - 83, 80, 72, 79, 67, 70, 70, 126, 130, 137, 141, 144, 144, 141, 142, 150, - 147, 146, 148, 147, 144, 146, 145, 150, 174, 181, 171, 159, 153, 166, 188, 173, - 173, 168, 160, 160, 165, 172, 173, 173, 173, 175, 177, 176, 170, 161, 155, 168, - 169, 170, 169, 165, 159, 154, 151, 156, 152, 154, 153, 148, 151, 148, 132, 144, - 78, 23, 42, 30, 38, 32, 25, 33, 34, 33, 34, 35, 34, 30, 28, 26, - 25, 19, 26, 32, 25, 22, 34, 34, 47, 68, 89, 103, 106, 101, 96, 133, - 154, 162, 163, 168, 172, 172, 180, 171, 175, 180, 182, 185, 185, 188, 189, 190, - 190, 191, 191, 192, 192, 193, 192, 195, 194, 192, 191, 189, 187, 186, 185, 183, - 186, 186, 182, 179, 180, 178, 175, 162, 108, 33, 39, 29, 40, 39, 48, 87, - 111, 97, 51, 25, 22, 32, 46, 19, 44, 51, 47, 45, 29, 21, 38, 33, - 34, 36, 38, 40, 41, 42, 41, 37, 37, 126, 128, 134, 144, 137, 139, 140, - 140, 139, 139, 140, 145, 153, 161, 165, 160, 156, 153, 157, 158, 156, 150, 152, - 153, 151, 147, 148, 151, 147, 141, 143, 134, 132, 140, 146, 140, 134, 138, 155, - 126, 84, 66, 74, 73, 67, 73, 71, 74, 72, 132, 135, 140, 145, 144, 143, - 140, 137, 144, 140, 139, 142, 143, 141, 141, 143, 133, 138, 133, 134, 149, 154, - 152, 152, 165, 167, 164, 160, 160, 166, 175, 175, 185, 181, 176, 173, 170, 168, - 165, 162, 171, 173, 175, 174, 169, 163, 159, 156, 156, 154, 158, 157, 153, 156, - 149, 129, 131, 43, 31, 48, 31, 40, 32, 28, 31, 32, 32, 32, 32, 32, - 29, 28, 26, 26, 22, 26, 29, 21, 27, 49, 91, 101, 116, 130, 142, 151, - 157, 161, 154, 164, 164, 162, 168, 169, 167, 173, 175, 179, 183, 185, 186, 187, - 188, 190, 191, 191, 192, 193, 193, 194, 195, 195, 195, 194, 193, 191, 189, 187, - 186, 185, 181, 186, 187, 182, 177, 175, 174, 172, 184, 122, 53, 45, 30, 38, - 43, 82, 130, 167, 177, 164, 148, 104, 45, 18, 43, 39, 32, 35, 45, 42, - 32, 32, 35, 35, 36, 38, 39, 41, 42, 40, 43, 29, 103, 127, 136, 146, - 133, 149, 141, 141, 142, 140, 136, 136, 146, 159, 162, 163, 161, 158, 158, 160, - 158, 154, 151, 151, 146, 142, 146, 152, 147, 136, 144, 142, 140, 144, 145, 140, - 138, 140, 144, 117, 90, 76, 74, 70, 65, 60, 68, 72, 72, 139, 139, 142, - 142, 142, 140, 140, 137, 135, 132, 132, 137, 142, 140, 141, 144, 152, 138, 110, - 109, 133, 149, 147, 142, 150, 159, 163, 163, 164, 167, 169, 167, 175, 171, 168, - 168, 169, 171, 172, 172, 167, 171, 175, 175, 171, 166, 162, 161, 159, 159, 163, - 161, 155, 156, 146, 121, 89, 37, 41, 41, 37, 34, 33, 34, 30, 32, 31, - 31, 31, 30, 29, 29, 27, 28, 24, 26, 26, 23, 44, 80, 129, 132, 134, - 134, 135, 143, 158, 170, 165, 176, 178, 177, 176, 169, 169, 184, 180, 184, 188, - 190, 190, 190, 191, 192, 191, 191, 192, 192, 193, 194, 195, 194, 191, 191, 190, - 190, 189, 188, 188, 187, 182, 185, 184, 180, 179, 178, 174, 169, 191, 163, 98, - 43, 39, 41, 37, 121, 161, 172, 159, 156, 178, 164, 126, 114, 110, 78, 55, - 49, 48, 49, 45, 36, 36, 36, 37, 37, 38, 40, 41, 40, 39, 42, 69, - 123, 137, 140, 144, 149, 146, 145, 147, 147, 140, 135, 139, 150, 157, 164, 167, - 164, 162, 164, 164, 159, 150, 154, 151, 145, 147, 153, 149, 141, 144, 150, 148, - 144, 140, 139, 138, 139, 139, 121, 118, 111, 92, 84, 82, 71, 85, 87, 88, - 141, 138, 136, 134, 134, 135, 136, 137, 138, 135, 136, 142, 146, 145, 146, 148, - 137, 137, 115, 93, 91, 105, 131, 157, 163, 166, 162, 154, 153, 158, 165, 168, - 165, 164, 166, 169, 172, 172, 169, 167, 162, 167, 172, 174, 170, 166, 163, 163, - 164, 164, 167, 163, 155, 154, 140, 112, 45, 38, 40, 25, 37, 20, 28, 31, - 29, 30, 31, 31, 30, 29, 29, 30, 26, 29, 26, 27, 28, 30, 63, 110, - 136, 146, 158, 161, 157, 155, 160, 165, 175, 174, 171, 175, 185, 181, 177, 187, - 179, 182, 185, 187, 186, 186, 187, 188, 186, 187, 187, 188, 189, 190, 191, 191, - 188, 188, 188, 188, 189, 189, 189, 189, 186, 185, 182, 180, 184, 185, 178, 169, - 159, 173, 114, 25, 41, 43, 27, 145, 149, 175, 174, 171, 185, 173, 159, 178, - 162, 147, 140, 114, 60, 32, 38, 40, 36, 36, 36, 36, 36, 36, 39, 36, - 30, 56, 41, 117, 134, 132, 157, 145, 148, 146, 147, 149, 142, 132, 129, 135, - 143, 154, 163, 160, 158, 160, 159, 158, 149, 156, 157, 149, 147, 154, 153, 147, - 142, 152, 152, 142, 135, 137, 137, 134, 145, 125, 123, 109, 74, 72, 87, 82, - 93, 93, 89, 141, 138, 132, 133, 137, 142, 143, 140, 137, 131, 137, 140, 137, - 141, 146, 138, 143, 136, 122, 112, 98, 84, 98, 129, 174, 168, 161, 158, 154, - 149, 149, 154, 169, 168, 164, 165, 168, 171, 171, 169, 166, 168, 170, 169, 168, - 167, 172, 173, 172, 167, 160, 152, 157, 166, 134, 79, 33, 38, 36, 28, 28, - 34, 34, 29, 30, 26, 23, 22, 25, 30, 35, 37, 34, 32, 29, 31, 51, - 82, 112, 123, 142, 146, 150, 154, 155, 159, 166, 172, 173, 181, 186, 182, 181, - 183, 182, 177, 185, 190, 188, 184, 183, 188, 190, 190, 184, 188, 188, 187, 185, - 186, 188, 190, 190, 189, 186, 186, 190, 190, 189, 187, 187, 181, 183, 186, 180, - 181, 179, 173, 163, 112, 81, 44, 40, 33, 32, 121, 164, 163, 170, 182, 188, - 184, 186, 194, 173, 185, 183, 171, 145, 84, 36, 33, 34, 34, 43, 47, 37, - 31, 39, 36, 38, 33, 47, 94, 135, 136, 137, 151, 143, 151, 156, 151, 142, - 138, 135, 132, 133, 146, 160, 163, 161, 159, 158, 155, 149, 148, 149, 146, 144, - 142, 143, 142, 148, 143, 144, 149, 148, 143, 139, 141, 147, 131, 128, 93, 81, - 87, 78, 93, 94, 92, 91, 142, 145, 145, 145, 142, 140, 140, 140, 144, 137, - 140, 143, 138, 141, 144, 137, 128, 133, 133, 133, 125, 103, 89, 94, 121, 152, - 166, 147, 139, 154, 155, 141, 159, 163, 163, 161, 160, 160, 163, 166, 165, 169, - 170, 167, 162, 161, 169, 173, 179, 172, 168, 162, 157, 147, 100, 40, 47, 45, - 44, 42, 37, 29, 28, 32, 28, 26, 28, 30, 32, 29, 23, 19, 41, 30, - 43, 80, 111, 121, 130, 141, 142, 148, 158, 164, 164, 166, 168, 170, 176, 181, - 183, 180, 181, 183, 185, 183, 183, 186, 184, 182, 185, 189, 189, 184, 193, 184, - 177, 174, 176, 180, 178, 176, 190, 189, 185, 185, 187, 189, 188, 187, 188, 181, - 183, 184, 178, 179, 178, 170, 174, 128, 86, 33, 32, 39, 36, 99, 164, 153, - 156, 174, 182, 173, 169, 174, 164, 174, 179, 184, 183, 149, 85, 38, 57, 37, - 26, 31, 38, 36, 36, 37, 37, 23, 41, 67, 121, 136, 137, 141, 142, 148, - 152, 147, 142, 139, 135, 130, 137, 127, 142, 165, 167, 160, 160, 159, 151, 149, - 148, 147, 149, 149, 150, 149, 147, 143, 145, 150, 150, 145, 141, 141, 147, 136, - 123, 90, 63, 80, 77, 97, 100, 99, 97, 138, 146, 151, 151, 144, 139, 138, - 139, 145, 138, 139, 142, 138, 141, 144, 136, 131, 136, 130, 126, 126, 116, 101, - 95, 91, 114, 143, 160, 161, 155, 147, 139, 151, 156, 160, 156, 152, 152, 158, - 165, 158, 162, 165, 161, 156, 156, 164, 172, 157, 165, 172, 157, 128, 112, 102, - 86, 47, 46, 38, 30, 35, 45, 37, 19, 33, 27, 23, 23, 29, 35, 40, - 43, 40, 44, 73, 115, 140, 139, 140, 145, 150, 156, 163, 169, 170, 172, 175, - 178, 178, 181, 182, 178, 178, 181, 185, 186, 186, 188, 187, 186, 189, 190, 187, - 181, 176, 177, 181, 184, 186, 184, 179, 176, 188, 187, 183, 183, 185, 188, 188, - 187, 189, 181, 182, 182, 176, 177, 176, 168, 168, 129, 82, 26, 33, 47, 24, - 40, 105, 152, 174, 152, 149, 175, 184, 167, 185, 182, 177, 169, 170, 165, 113, - 42, 27, 45, 45, 32, 37, 44, 38, 26, 38, 18, 38, 40, 97, 138, 140, - 136, 144, 147, 149, 146, 145, 144, 139, 132, 137, 118, 131, 155, 160, 165, 168, - 154, 157, 152, 148, 149, 151, 154, 155, 152, 148, 144, 145, 149, 150, 145, 141, - 141, 144, 144, 124, 97, 45, 65, 60, 76, 81, 87, 89, 135, 142, 147, 148, - 144, 141, 139, 139, 142, 135, 137, 140, 136, 140, 143, 136, 135, 140, 128, 117, - 124, 126, 120, 116, 88, 83, 97, 126, 146, 148, 144, 143, 151, 152, 156, 153, - 149, 148, 153, 157, 153, 153, 156, 156, 155, 157, 164, 168, 176, 157, 149, 151, - 156, 163, 160, 145, 148, 117, 78, 48, 33, 31, 38, 46, 32, 34, 38, 37, - 34, 31, 31, 31, 58, 89, 120, 127, 128, 136, 145, 146, 154, 156, 158, 158, - 161, 166, 178, 185, 180, 180, 181, 180, 178, 180, 184, 186, 187, 189, 189, 185, - 184, 185, 183, 179, 181, 182, 181, 177, 171, 171, 183, 196, 185, 185, 184, 186, - 187, 188, 186, 186, 189, 181, 181, 181, 174, 175, 174, 167, 176, 158, 123, 64, - 48, 50, 32, 40, 54, 79, 124, 160, 164, 149, 151, 169, 167, 166, 170, 165, - 163, 182, 172, 127, 36, 52, 51, 41, 45, 41, 33, 30, 38, 24, 35, 30, - 65, 139, 142, 141, 149, 149, 149, 148, 151, 152, 146, 137, 133, 129, 135, 135, - 137, 165, 177, 148, 159, 153, 148, 147, 151, 154, 152, 147, 145, 141, 142, 147, - 148, 144, 142, 142, 134, 145, 128, 114, 44, 62, 54, 64, 66, 76, 82, 141, - 140, 139, 141, 143, 144, 140, 138, 139, 133, 135, 139, 136, 141, 144, 136, 125, - 140, 138, 126, 128, 126, 115, 109, 100, 101, 90, 80, 102, 144, 167, 160, 153, - 149, 150, 148, 146, 144, 142, 142, 148, 147, 146, 148, 154, 156, 155, 153, 163, - 153, 158, 171, 176, 178, 173, 158, 155, 138, 145, 156, 120, 51, 19, 30, 29, - 32, 36, 34, 35, 47, 69, 86, 115, 139, 154, 144, 134, 140, 152, 156, 151, - 152, 154, 152, 153, 156, 166, 173, 172, 175, 178, 180, 181, 181, 184, 185, 179, - 185, 186, 180, 176, 177, 180, 180, 179, 182, 189, 194, 191, 180, 176, 176, 178, - 182, 185, 189, 189, 188, 185, 184, 188, 181, 181, 181, 174, 175, 174, 165, 161, - 165, 149, 89, 37, 16, 20, 47, 39, 43, 78, 133, 168, 164, 152, 150, 167, - 167, 180, 180, 167, 170, 166, 141, 123, 78, 41, 40, 47, 35, 33, 45, 31, - 33, 31, 34, 36, 128, 142, 151, 151, 150, 150, 149, 153, 155, 149, 140, 139, - 137, 139, 130, 128, 153, 171, 157, 163, 156, 150, 149, 152, 152, 149, 144, 141, - 138, 139, 145, 147, 144, 143, 144, 129, 141, 128, 128, 54, 65, 65, 68, 67, - 75, 77, 149, 144, 140, 140, 143, 144, 141, 137, 141, 133, 137, 141, 137, 141, - 144, 137, 123, 138, 138, 129, 128, 126, 119, 117, 119, 119, 111, 100, 97, 114, - 138, 149, 153, 146, 149, 151, 148, 144, 141, 137, 149, 145, 143, 143, 145, 145, - 145, 143, 139, 158, 182, 182, 159, 150, 160, 165, 152, 152, 149, 144, 132, 106, - 68, 37, 41, 51, 64, 74, 89, 113, 145, 168, 160, 154, 155, 159, 158, 152, - 153, 159, 157, 161, 166, 166, 163, 159, 160, 160, 163, 164, 168, 175, 177, 177, - 181, 185, 177, 180, 182, 179, 177, 182, 184, 184, 181, 173, 176, 193, 204, 198, - 183, 173, 175, 179, 183, 187, 188, 186, 183, 183, 186, 179, 181, 183, 176, 176, - 174, 165, 174, 175, 167, 139, 100, 68, 51, 43, 34, 57, 63, 63, 97, 152, - 175, 162, 147, 145, 155, 166, 169, 172, 171, 162, 160, 137, 100, 55, 27, 39, - 50, 35, 26, 36, 27, 38, 25, 101, 144, 156, 151, 150, 150, 148, 151, 154, - 149, 141, 146, 140, 137, 143, 140, 132, 143, 167, 164, 161, 158, 157, 157, 153, - 147, 143, 142, 138, 139, 144, 147, 144, 143, 145, 142, 140, 125, 128, 57, 51, - 61, 58, 52, 60, 63, 144, 143, 141, 141, 140, 141, 140, 139, 141, 134, 137, - 139, 135, 137, 140, 132, 130, 136, 131, 124, 127, 129, 129, 139, 123, 114, 119, - 126, 111, 88, 91, 105, 132, 131, 143, 149, 148, 145, 144, 145, 148, 147, 146, - 142, 139, 140, 147, 153, 178, 170, 168, 168, 170, 179, 178, 160, 155, 172, 167, - 150, 155, 160, 118, 55, 94, 113, 138, 157, 164, 161, 157, 154, 166, 157, 155, - 161, 167, 164, 160, 161, 167, 171, 176, 176, 173, 169, 167, 167, 163, 160, 163, - 168, 169, 169, 172, 178, 177, 178, 179, 180, 184, 186, 179, 170, 170, 145, 127, - 127, 141, 157, 180, 195, 175, 176, 179, 181, 181, 181, 182, 184, 184, 178, 182, - 185, 179, 178, 175, 165, 164, 160, 152, 150, 144, 125, 86, 39, 52, 32, 26, - 39, 46, 59, 106, 159, 171, 173, 164, 158, 163, 162, 156, 156, 150, 162, 162, - 99, 29, 42, 64, 30, 26, 33, 29, 36, 35, 69, 153, 157, 152, 153, 153, - 150, 152, 154, 150, 143, 145, 149, 144, 149, 149, 117, 108, 147, 163, 163, 164, - 163, 160, 154, 147, 144, 145, 143, 143, 146, 147, 144, 142, 144, 152, 135, 125, - 132, 70, 41, 56, 43, 39, 46, 51, 131, 136, 140, 141, 138, 137, 140, 141, - 142, 134, 135, 137, 131, 132, 134, 126, 131, 133, 129, 127, 133, 128, 124, 131, - 137, 142, 137, 125, 120, 122, 120, 103, 104, 112, 132, 142, 142, 142, 148, 153, - 147, 151, 151, 145, 139, 142, 158, 172, 168, 166, 167, 164, 162, 172, 170, 152, - 152, 148, 154, 163, 158, 144, 144, 157, 165, 162, 157, 155, 158, 162, 166, 167, - 157, 174, 178, 165, 163, 176, 180, 171, 171, 173, 175, 173, 172, 172, 175, 177, - 168, 162, 160, 162, 162, 158, 163, 170, 176, 172, 170, 173, 181, 181, 164, 147, - 99, 95, 95, 99, 96, 100, 122, 145, 175, 175, 175, 175, 175, 177, 181, 185, - 182, 177, 182, 187, 181, 180, 176, 165, 165, 172, 165, 156, 149, 150, 137, 96, - 64, 47, 43, 52, 48, 39, 53, 83, 123, 148, 151, 145, 158, 161, 157, 163, - 170, 138, 149, 135, 61, 36, 57, 49, 31, 30, 34, 33, 51, 50, 162, 156, - 155, 157, 157, 154, 154, 155, 152, 147, 135, 162, 155, 145, 147, 112, 87, 112, - 161, 165, 168, 168, 161, 153, 147, 145, 150, 148, 146, 149, 148, 144, 142, 143, - 147, 124, 126, 143, 94, 51, 67, 47, 45, 53, 59, 137, 139, 139, 136, 136, - 141, 141, 139, 138, 137, 137, 136, 134, 133, 131, 131, 132, 132, 133, 131, 132, - 132, 134, 137, 138, 140, 140, 136, 135, 133, 126, 108, 104, 73, 117, 161, 139, - 139, 162, 152, 151, 159, 147, 135, 148, 167, 170, 165, 166, 161, 157, 159, 161, - 161, 152, 145, 161, 152, 145, 145, 146, 147, 156, 168, 160, 159, 158, 157, 158, - 161, 165, 167, 171, 173, 178, 179, 178, 174, 171, 168, 189, 181, 176, 177, 184, - 188, 184, 178, 181, 177, 170, 168, 167, 164, 162, 158, 158, 161, 155, 148, 161, - 169, 130, 79, 87, 99, 70, 79, 89, 102, 111, 117, 154, 173, 174, 165, 168, - 174, 177, 183, 177, 175, 174, 177, 182, 183, 175, 169, 171, 172, 168, 157, 151, - 151, 148, 142, 121, 92, 58, 42, 44, 48, 43, 37, 49, 108, 160, 159, 145, - 143, 153, 155, 155, 160, 170, 137, 123, 57, 30, 60, 41, 27, 34, 44, 32, - 73, 153, 167, 150, 162, 163, 151, 149, 158, 157, 146, 139, 149, 148, 145, 149, - 137, 108, 92, 132, 179, 178, 179, 170, 157, 155, 141, 149, 150, 146, 141, 141, - 143, 140, 135, 135, 129, 127, 139, 102, 56, 64, 78, 62, 72, 92, 138, 140, - 139, 136, 136, 138, 140, 138, 136, 136, 136, 136, 134, 133, 132, 129, 132, 131, - 132, 130, 131, 133, 137, 140, 136, 140, 143, 143, 145, 146, 144, 129, 121, 89, - 105, 131, 138, 160, 172, 143, 132, 121, 115, 138, 165, 171, 176, 192, 149, 145, - 145, 151, 155, 158, 157, 153, 154, 152, 154, 158, 158, 153, 152, 158, 162, 164, - 167, 168, 169, 170, 171, 171, 174, 175, 179, 179, 178, 176, 174, 172, 183, 178, - 174, 176, 184, 185, 183, 179, 183, 180, 177, 175, 175, 172, 166, 162, 160, 157, - 152, 142, 133, 122, 105, 88, 75, 92, 95, 83, 79, 89, 95, 100, 107, 137, - 160, 169, 179, 180, 172, 171, 183, 182, 180, 177, 175, 173, 170, 170, 169, 172, - 170, 162, 159, 160, 157, 152, 143, 144, 131, 96, 57, 34, 37, 48, 33, 50, - 81, 120, 153, 164, 153, 138, 170, 159, 158, 152, 164, 113, 41, 24, 31, 30, - 32, 39, 46, 95, 163, 169, 151, 158, 162, 156, 154, 158, 155, 146, 141, 146, - 143, 141, 144, 134, 107, 91, 55, 133, 163, 166, 159, 155, 164, 155, 145, 148, - 147, 143, 144, 145, 141, 135, 147, 133, 122, 135, 111, 76, 76, 75, 89, 92, - 100, 139, 142, 139, 135, 134, 138, 138, 135, 135, 135, 135, 135, 135, 134, 133, - 131, 132, 131, 131, 130, 131, 134, 139, 144, 138, 143, 145, 145, 149, 153, 153, - 143, 135, 122, 112, 98, 92, 106, 107, 80, 57, 81, 123, 169, 187, 164, 141, - 144, 148, 150, 154, 160, 165, 167, 169, 169, 157, 158, 163, 167, 166, 160, 156, - 156, 162, 166, 170, 173, 175, 174, 171, 169, 173, 174, 174, 174, 174, 173, 172, - 171, 175, 176, 174, 176, 180, 181, 181, 179, 181, 182, 184, 186, 186, 183, 176, - 172, 168, 160, 159, 156, 134, 101, 83, 82, 77, 79, 54, 70, 69, 90, 79, - 116, 123, 148, 165, 173, 184, 188, 185, 187, 184, 185, 183, 179, 173, 173, 175, - 181, 171, 173, 173, 169, 167, 167, 164, 159, 151, 156, 156, 140, 118, 102, 100, - 105, 92, 64, 50, 70, 98, 118, 139, 161, 149, 148, 145, 151, 159, 134, 59, - 34, 26, 36, 30, 41, 77, 128, 174, 171, 154, 154, 157, 159, 160, 157, 151, - 147, 146, 144, 140, 139, 140, 132, 112, 97, 71, 92, 116, 159, 183, 162, 162, - 166, 144, 148, 148, 145, 145, 145, 142, 136, 134, 126, 118, 130, 116, 94, 98, - 91, 103, 100, 94, 140, 143, 140, 136, 135, 137, 136, 132, 134, 134, 134, 135, - 135, 135, 134, 132, 131, 131, 131, 130, 132, 135, 142, 147, 142, 146, 147, 145, - 149, 153, 152, 145, 141, 145, 132, 105, 95, 97, 87, 73, 59, 120, 163, 164, - 158, 154, 150, 148, 160, 165, 171, 174, 173, 171, 171, 171, 167, 165, 166, 165, - 167, 166, 167, 169, 167, 171, 174, 177, 178, 177, 174, 172, 176, 177, 177, 176, - 176, 177, 178, 178, 175, 176, 178, 178, 178, 178, 178, 180, 178, 180, 185, 188, - 190, 189, 185, 183, 181, 167, 164, 165, 156, 129, 108, 99, 82, 100, 87, 60, - 76, 79, 118, 102, 142, 156, 160, 159, 167, 174, 178, 188, 189, 190, 188, 184, - 179, 177, 179, 183, 176, 178, 179, 178, 175, 172, 168, 165, 171, 164, 159, 159, - 162, 159, 149, 139, 141, 121, 107, 104, 97, 92, 108, 132, 145, 157, 156, 159, - 145, 133, 66, 43, 29, 38, 28, 58, 121, 160, 177, 172, 159, 150, 151, 158, - 160, 153, 147, 147, 148, 144, 144, 145, 139, 133, 125, 115, 112, 80, 78, 120, - 171, 153, 145, 153, 148, 150, 149, 145, 143, 143, 142, 138, 135, 139, 134, 133, - 104, 81, 88, 84, 94, 98, 94, 140, 141, 140, 136, 135, 137, 135, 131, 133, - 133, 134, 135, 133, 133, 132, 132, 130, 131, 131, 130, 132, 137, 142, 147, 146, - 149, 149, 146, 149, 153, 153, 148, 156, 155, 139, 127, 130, 115, 91, 77, 92, - 149, 172, 144, 135, 154, 166, 165, 159, 166, 172, 173, 169, 162, 159, 157, 167, - 166, 167, 165, 168, 172, 176, 178, 178, 179, 180, 181, 181, 183, 182, 182, 184, - 184, 183, 183, 183, 186, 187, 188, 180, 182, 184, 182, 180, 178, 179, 179, 178, - 179, 181, 182, 183, 184, 183, 183, 184, 175, 164, 159, 162, 165, 158, 148, 117, - 115, 52, 126, 65, 77, 121, 135, 135, 150, 157, 161, 170, 172, 171, 178, 196, - 194, 191, 189, 185, 182, 176, 174, 182, 183, 185, 187, 186, 182, 178, 176, 170, - 170, 169, 165, 160, 157, 158, 159, 159, 153, 148, 144, 136, 126, 114, 107, 121, - 126, 126, 140, 142, 143, 72, 28, 31, 36, 32, 85, 159, 177, 175, 174, 164, - 150, 146, 153, 157, 150, 145, 147, 145, 140, 147, 149, 137, 134, 138, 136, 105, - 103, 103, 91, 130, 143, 154, 151, 151, 153, 150, 143, 139, 140, 140, 138, 126, - 133, 130, 129, 102, 83, 90, 84, 89, 96, 96, 137, 140, 140, 137, 136, 137, - 135, 131, 134, 134, 135, 135, 133, 132, 131, 131, 130, 131, 132, 133, 134, 136, - 141, 144, 145, 148, 149, 149, 151, 158, 158, 155, 157, 157, 150, 142, 131, 104, - 87, 89, 117, 146, 160, 157, 160, 162, 154, 147, 159, 165, 169, 171, 166, 161, - 157, 156, 159, 164, 169, 171, 173, 178, 178, 178, 183, 182, 181, 181, 181, 183, - 183, 184, 182, 184, 184, 184, 185, 187, 188, 189, 188, 187, 188, 187, 185, 183, - 182, 181, 180, 181, 182, 180, 179, 176, 176, 177, 172, 182, 181, 169, 165, 172, - 172, 163, 170, 156, 179, 255, 90, 69, 131, 126, 148, 160, 163, 167, 176, 177, - 176, 185, 186, 187, 188, 191, 191, 190, 184, 181, 186, 186, 189, 194, 195, 192, - 190, 191, 175, 175, 172, 167, 163, 163, 167, 171, 164, 163, 159, 147, 144, 149, - 146, 138, 139, 130, 131, 137, 145, 151, 96, 54, 37, 45, 54, 116, 177, 176, - 172, 176, 169, 154, 146, 149, 154, 150, 145, 143, 143, 133, 144, 151, 137, 136, - 150, 149, 114, 108, 123, 104, 140, 139, 146, 148, 148, 151, 150, 143, 139, 139, - 139, 138, 128, 126, 118, 125, 108, 89, 90, 77, 71, 78, 77, 136, 139, 140, - 137, 136, 137, 136, 132, 135, 135, 135, 135, 132, 131, 130, 129, 129, 132, 134, - 135, 135, 136, 138, 142, 142, 146, 147, 148, 152, 156, 157, 155, 148, 155, 158, - 151, 133, 125, 138, 154, 169, 168, 161, 158, 168, 167, 161, 165, 162, 166, 165, - 164, 162, 161, 163, 165, 160, 168, 173, 174, 179, 184, 184, 181, 181, 181, 181, - 181, 180, 183, 183, 183, 182, 183, 184, 185, 186, 188, 189, 188, 191, 190, 190, - 190, 190, 189, 187, 184, 182, 185, 189, 188, 186, 181, 180, 180, 175, 188, 193, - 183, 175, 174, 167, 158, 159, 186, 150, 72, 167, 157, 169, 162, 159, 164, 158, - 158, 167, 172, 177, 191, 183, 189, 194, 196, 195, 193, 192, 193, 189, 187, 190, - 196, 197, 193, 190, 193, 201, 190, 177, 173, 175, 175, 168, 161, 153, 165, 172, - 166, 157, 157, 156, 154, 156, 138, 143, 121, 112, 97, 60, 27, 53, 76, 99, - 147, 176, 166, 170, 175, 170, 159, 150, 150, 155, 155, 146, 137, 148, 129, 140, - 152, 141, 144, 158, 151, 128, 91, 114, 120, 171, 144, 124, 128, 140, 145, 149, - 145, 141, 140, 139, 137, 146, 140, 128, 131, 102, 69, 63, 54, 60, 65, 73, - 135, 139, 140, 137, 136, 138, 136, 131, 136, 136, 136, 133, 132, 131, 129, 129, - 130, 133, 136, 138, 138, 137, 138, 141, 141, 145, 146, 147, 150, 153, 153, 149, - 169, 156, 143, 136, 132, 148, 169, 171, 158, 165, 161, 153, 160, 165, 165, 172, - 161, 158, 155, 152, 152, 154, 160, 162, 171, 176, 177, 174, 178, 187, 191, 188, - 183, 184, 187, 188, 187, 187, 185, 185, 188, 189, 190, 192, 194, 195, 195, 194, - 190, 188, 189, 190, 192, 192, 190, 185, 180, 187, 195, 198, 198, 194, 191, 192, - 195, 192, 183, 177, 179, 181, 180, 174, 180, 139, 166, 175, 155, 175, 157, 163, - 157, 164, 166, 172, 184, 189, 192, 205, 200, 206, 211, 205, 194, 185, 187, 192, - 189, 188, 189, 194, 194, 188, 185, 189, 182, 180, 178, 179, 183, 185, 184, 181, - 180, 174, 167, 163, 164, 164, 165, 168, 170, 150, 171, 155, 158, 130, 92, 49, - 71, 108, 139, 167, 169, 157, 169, 172, 171, 162, 155, 153, 158, 159, 147, 133, - 154, 128, 137, 155, 147, 154, 163, 149, 119, 99, 132, 128, 185, 171, 149, 133, - 133, 141, 149, 149, 145, 143, 140, 135, 118, 121, 126, 133, 100, 61, 69, 75, - 90, 89, 95, 138, 138, 138, 137, 136, 135, 134, 133, 133, 133, 134, 132, 129, - 128, 128, 128, 133, 136, 138, 140, 140, 140, 141, 144, 144, 151, 155, 151, 149, - 152, 152, 147, 145, 147, 123, 129, 144, 174, 164, 156, 161, 166, 156, 167, 150, - 137, 112, 126, 130, 138, 144, 145, 148, 159, 168, 173, 166, 171, 178, 181, 185, - 186, 188, 190, 182, 182, 184, 184, 185, 187, 189, 190, 185, 191, 194, 193, 193, - 195, 196, 193, 194, 193, 196, 192, 189, 188, 187, 188, 190, 197, 196, 195, 198, - 194, 190, 195, 200, 196, 190, 185, 182, 178, 175, 172, 171, 169, 167, 167, 170, - 170, 167, 164, 173, 176, 178, 172, 167, 169, 178, 188, 205, 211, 207, 191, 182, - 183, 185, 180, 174, 178, 184, 188, 184, 179, 182, 189, 187, 185, 182, 177, 177, - 176, 176, 177, 174, 184, 186, 177, 175, 183, 186, 184, 174, 169, 172, 172, 161, - 149, 127, 96, 116, 136, 158, 168, 172, 173, 170, 165, 179, 163, 153, 157, 165, - 161, 148, 137, 144, 150, 141, 130, 152, 185, 177, 142, 127, 70, 105, 147, 166, - 157, 168, 174, 146, 131, 144, 155, 144, 140, 139, 127, 126, 121, 125, 133, 84, - 89, 91, 85, 92, 102, 105, 137, 137, 137, 137, 137, 137, 136, 136, 130, 132, - 132, 131, 129, 128, 127, 130, 135, 139, 141, 142, 141, 141, 142, 143, 148, 153, - 154, 150, 149, 150, 149, 144, 157, 143, 133, 164, 162, 163, 148, 154, 138, 160, - 171, 129, 101, 72, 48, 67, 71, 95, 126, 147, 159, 166, 167, 164, 175, 178, - 183, 184, 185, 184, 184, 186, 185, 186, 186, 187, 188, 190, 191, 192, 191, 196, - 198, 196, 194, 196, 196, 193, 194, 194, 196, 196, 194, 191, 192, 191, 187, 193, - 193, 191, 197, 192, 188, 194, 192, 190, 188, 186, 183, 181, 175, 172, 171, 170, - 169, 171, 176, 177, 179, 178, 178, 179, 180, 179, 178, 175, 174, 174, 182, 195, - 200, 193, 187, 185, 181, 173, 178, 176, 180, 186, 188, 184, 181, 182, 185, 184, - 182, 181, 180, 180, 181, 181, 177, 186, 188, 180, 177, 183, 183, 178, 193, 185, - 183, 180, 172, 172, 165, 146, 146, 158, 169, 170, 170, 170, 170, 167, 177, 168, - 165, 169, 171, 164, 150, 139, 131, 142, 154, 155, 159, 162, 154, 142, 120, 74, - 113, 148, 165, 157, 165, 168, 187, 151, 137, 144, 147, 152, 146, 125, 122, 116, - 122, 134, 88, 87, 92, 91, 112, 116, 118, 136, 136, 137, 138, 137, 138, 138, - 138, 131, 132, 133, 133, 131, 131, 130, 134, 135, 140, 142, 142, 142, 142, 142, - 144, 147, 149, 150, 146, 146, 148, 149, 145, 155, 136, 146, 187, 172, 167, 158, - 160, 161, 167, 152, 62, 54, 54, 76, 120, 116, 135, 157, 165, 168, 168, 169, - 167, 174, 177, 180, 181, 181, 179, 180, 180, 188, 189, 190, 190, 192, 193, 195, - 196, 194, 199, 201, 198, 197, 199, 200, 197, 193, 195, 199, 200, 199, 195, 194, - 193, 186, 193, 191, 189, 194, 191, 187, 193, 185, 185, 185, 186, 186, 183, 176, - 172, 172, 170, 170, 173, 179, 184, 189, 191, 190, 184, 181, 180, 184, 183, 177, - 170, 170, 183, 191, 189, 187, 185, 181, 171, 179, 172, 172, 181, 190, 190, 185, - 180, 182, 182, 182, 183, 183, 183, 184, 184, 180, 188, 190, 184, 181, 184, 182, - 176, 187, 180, 178, 173, 167, 174, 179, 168, 166, 171, 176, 174, 172, 170, 168, - 166, 171, 168, 171, 176, 175, 164, 150, 141, 130, 137, 156, 169, 165, 149, 142, - 148, 111, 92, 139, 157, 160, 150, 164, 172, 186, 150, 129, 130, 139, 146, 139, - 119, 122, 118, 125, 131, 87, 80, 89, 93, 98, 101, 103, 138, 138, 138, 138, - 137, 138, 137, 137, 133, 134, 135, 135, 134, 134, 135, 139, 135, 140, 142, 143, - 144, 143, 145, 146, 142, 142, 143, 143, 146, 150, 152, 148, 149, 140, 156, 187, - 164, 177, 173, 156, 161, 160, 107, 49, 60, 59, 81, 106, 141, 153, 164, 164, - 163, 168, 177, 182, 170, 173, 177, 179, 181, 181, 183, 187, 191, 191, 192, 192, - 194, 195, 197, 198, 195, 200, 202, 199, 198, 201, 203, 201, 194, 196, 199, 200, - 199, 196, 192, 191, 191, 198, 195, 191, 195, 190, 187, 192, 186, 184, 186, 187, - 187, 185, 178, 174, 171, 170, 170, 173, 178, 185, 192, 195, 198, 189, 180, 177, - 180, 183, 182, 179, 180, 184, 186, 181, 179, 180, 181, 177, 177, 168, 166, 175, - 185, 187, 186, 183, 180, 181, 182, 182, 183, 183, 183, 183, 183, 189, 192, 189, - 188, 189, 185, 179, 188, 185, 188, 185, 177, 181, 186, 177, 166, 170, 177, 180, - 181, 178, 174, 170, 170, 166, 170, 177, 178, 168, 155, 145, 145, 137, 144, 161, - 167, 159, 153, 154, 119, 106, 143, 147, 156, 154, 161, 162, 143, 130, 125, 127, - 130, 131, 125, 117, 122, 126, 128, 110, 74, 71, 82, 81, 88, 95, 100, 139, - 139, 138, 137, 136, 135, 134, 133, 132, 133, 134, 134, 132, 134, 136, 139, 134, - 138, 141, 143, 144, 145, 148, 149, 142, 139, 140, 142, 147, 149, 151, 149, 151, - 142, 159, 188, 167, 179, 173, 152, 150, 140, 54, 55, 66, 58, 76, 85, 133, - 148, 162, 166, 167, 168, 172, 172, 175, 178, 182, 186, 188, 189, 192, 196, 192, - 193, 193, 194, 195, 197, 198, 199, 200, 204, 205, 200, 198, 201, 202, 199, 198, - 200, 203, 202, 201, 196, 193, 190, 194, 200, 196, 191, 194, 188, 186, 190, 188, - 185, 184, 182, 182, 180, 177, 174, 173, 172, 171, 172, 174, 180, 186, 191, 195, - 189, 183, 177, 177, 179, 180, 181, 185, 186, 183, 177, 176, 178, 181, 180, 177, - 171, 169, 173, 177, 179, 180, 184, 180, 180, 180, 180, 180, 180, 181, 181, 181, - 186, 189, 191, 192, 192, 188, 183, 188, 187, 192, 189, 179, 182, 186, 177, 167, - 166, 171, 177, 183, 183, 180, 179, 174, 165, 164, 171, 177, 173, 162, 152, 148, - 144, 146, 151, 162, 166, 161, 152, 130, 112, 134, 135, 160, 162, 150, 131, 116, - 123, 127, 129, 132, 129, 124, 124, 119, 131, 126, 87, 64, 71, 84, 76, 88, - 102, 113, 140, 139, 138, 137, 135, 134, 131, 131, 130, 131, 131, 130, 129, 130, - 133, 137, 134, 139, 141, 143, 144, 144, 147, 148, 146, 140, 140, 145, 149, 146, - 145, 142, 136, 126, 143, 186, 172, 173, 164, 161, 159, 119, 29, 54, 58, 69, - 107, 132, 151, 161, 169, 171, 171, 170, 170, 167, 180, 183, 187, 187, 188, 188, - 190, 194, 193, 194, 194, 195, 196, 198, 199, 200, 205, 208, 207, 201, 197, 198, - 199, 197, 203, 204, 206, 205, 202, 199, 195, 194, 193, 197, 194, 189, 192, 188, - 184, 188, 189, 185, 182, 181, 180, 178, 175, 173, 174, 173, 172, 171, 170, 172, - 179, 182, 188, 190, 192, 188, 184, 180, 180, 180, 179, 178, 178, 178, 179, 180, - 178, 177, 180, 175, 174, 173, 172, 170, 173, 179, 179, 178, 177, 176, 177, 178, - 180, 181, 178, 180, 184, 188, 191, 191, 188, 184, 183, 179, 181, 177, 169, 175, - 182, 174, 169, 161, 157, 162, 169, 172, 174, 177, 171, 160, 155, 160, 168, 167, - 160, 152, 138, 150, 157, 156, 156, 157, 153, 144, 115, 122, 155, 145, 153, 139, - 129, 125, 126, 130, 123, 123, 134, 134, 126, 127, 126, 134, 124, 80, 76, 86, - 102, 91, 89, 105, 116, 137, 136, 135, 134, 133, 132, 131, 131, 133, 134, 132, - 130, 129, 131, 134, 137, 137, 139, 143, 143, 143, 142, 143, 144, 149, 142, 138, - 145, 150, 147, 144, 137, 124, 130, 141, 169, 160, 166, 159, 167, 153, 89, 60, - 77, 89, 103, 120, 139, 152, 156, 159, 161, 169, 178, 184, 183, 182, 183, 186, - 185, 185, 185, 189, 190, 194, 195, 196, 196, 197, 199, 201, 202, 204, 208, 207, - 201, 199, 201, 202, 201, 202, 204, 205, 204, 201, 199, 199, 197, 190, 196, 193, - 189, 194, 191, 189, 193, 189, 186, 186, 186, 185, 182, 178, 175, 175, 176, 175, - 173, 170, 170, 174, 177, 179, 181, 185, 184, 184, 183, 186, 187, 179, 177, 178, - 178, 180, 179, 179, 179, 181, 175, 176, 177, 177, 173, 173, 177, 177, 175, 174, - 173, 175, 178, 183, 185, 180, 179, 181, 187, 191, 191, 188, 185, 188, 184, 186, - 184, 178, 184, 189, 179, 169, 157, 152, 156, 163, 164, 165, 167, 170, 161, 157, - 159, 162, 160, 156, 153, 143, 151, 158, 158, 153, 149, 145, 139, 107, 127, 165, - 147, 141, 121, 123, 140, 136, 144, 130, 121, 132, 132, 124, 130, 134, 128, 117, - 87, 101, 100, 113, 107, 105, 117, 125, 133, 133, 133, 133, 133, 132, 132, 132, - 137, 138, 135, 133, 132, 133, 137, 140, 140, 141, 144, 143, 141, 139, 140, 140, - 145, 139, 137, 145, 151, 149, 146, 137, 134, 162, 160, 151, 138, 160, 159, 161, - 152, 61, 87, 91, 127, 162, 161, 174, 168, 170, 173, 175, 181, 185, 182, 176, - 184, 186, 188, 188, 188, 189, 193, 196, 197, 197, 197, 198, 199, 201, 202, 203, - 199, 203, 204, 201, 201, 206, 209, 209, 200, 201, 201, 200, 199, 198, 199, 200, - 191, 196, 193, 192, 197, 197, 196, 202, 190, 189, 192, 194, 194, 190, 184, 180, - 177, 178, 179, 174, 171, 170, 172, 175, 170, 167, 165, 167, 174, 181, 189, 193, - 191, 183, 178, 176, 177, 177, 183, 183, 177, 172, 174, 181, 184, 181, 178, 178, - 177, 174, 172, 171, 174, 180, 186, 190, 184, 182, 183, 188, 192, 192, 189, 187, - 182, 180, 186, 188, 182, 185, 183, 168, 170, 160, 158, 167, 174, 170, 165, 163, - 175, 170, 169, 169, 166, 161, 160, 160, 157, 150, 148, 151, 156, 152, 144, 138, - 127, 122, 140, 125, 142, 135, 132, 141, 136, 153, 148, 131, 133, 127, 124, 139, - 135, 115, 103, 87, 111, 96, 104, 106, 112, 119, 121, 131, 133, 134, 132, 132, - 134, 135, 131, 136, 132, 130, 132, 137, 141, 140, 138, 142, 137, 136, 137, 143, - 144, 142, 137, 149, 147, 157, 149, 143, 145, 140, 140, 153, 168, 157, 146, 141, - 136, 151, 154, 145, 81, 100, 134, 142, 155, 156, 168, 167, 171, 176, 182, 186, - 186, 185, 183, 186, 188, 190, 191, 195, 196, 197, 198, 203, 207, 208, 207, 205, - 204, 205, 206, 210, 207, 205, 204, 205, 205, 204, 202, 210, 207, 203, 197, 194, - 192, 192, 191, 194, 195, 196, 195, 193, 192, 197, 200, 192, 195, 194, 194, 171, - 190, 180, 177, 175, 178, 181, 178, 176, 179, 186, 188, 183, 183, 174, 168, 172, - 170, 174, 186, 185, 188, 189, 183, 176, 173, 179, 183, 178, 185, 188, 180, 175, - 178, 181, 180, 173, 175, 175, 174, 174, 176, 177, 181, 182, 183, 186, 189, 192, - 192, 189, 186, 190, 187, 184, 181, 177, 175, 176, 178, 166, 158, 161, 175, 183, - 177, 174, 178, 163, 167, 173, 174, 171, 168, 167, 165, 159, 146, 152, 159, 154, - 147, 144, 136, 130, 116, 139, 137, 136, 149, 142, 147, 152, 154, 148, 133, 127, - 131, 134, 133, 129, 112, 102, 90, 97, 104, 99, 114, 107, 119, 125, 129, 133, - 134, 132, 132, 134, 135, 131, 136, 136, 136, 135, 136, 138, 142, 144, 143, 141, - 140, 138, 140, 140, 142, 142, 154, 147, 156, 146, 142, 147, 141, 139, 165, 175, - 159, 148, 142, 135, 145, 146, 145, 103, 123, 140, 142, 162, 167, 168, 172, 174, - 178, 182, 185, 184, 183, 182, 188, 188, 190, 192, 195, 196, 197, 198, 199, 202, - 204, 204, 203, 203, 205, 207, 207, 205, 203, 203, 204, 204, 203, 202, 209, 207, - 203, 198, 195, 193, 193, 193, 196, 193, 192, 194, 196, 197, 198, 196, 187, 189, - 185, 189, 175, 190, 174, 173, 180, 170, 172, 178, 182, 188, 187, 174, 171, 179, - 180, 180, 184, 176, 164, 167, 176, 180, 183, 182, 179, 176, 178, 180, 180, 185, - 189, 184, 181, 181, 183, 182, 178, 178, 176, 175, 175, 175, 175, 177, 178, 182, - 188, 194, 197, 198, 197, 197, 183, 184, 185, 184, 181, 176, 173, 170, 168, 159, - 162, 176, 183, 174, 164, 161, 173, 175, 178, 174, 168, 162, 159, 156, 156, 150, - 157, 163, 154, 145, 145, 140, 121, 116, 142, 145, 144, 155, 147, 153, 146, 149, - 145, 133, 130, 136, 138, 135, 131, 103, 95, 90, 96, 105, 100, 109, 110, 119, - 124, 129, 132, 133, 130, 131, 134, 133, 130, 137, 139, 142, 139, 136, 137, 143, - 148, 139, 140, 141, 139, 138, 140, 147, 152, 150, 142, 149, 141, 139, 146, 139, - 137, 175, 178, 159, 148, 145, 140, 145, 140, 135, 121, 139, 142, 140, 164, 173, - 167, 177, 180, 181, 183, 184, 183, 182, 181, 188, 189, 191, 192, 195, 196, 198, - 199, 197, 201, 203, 203, 204, 205, 208, 211, 206, 204, 203, 203, 205, 205, 204, - 203, 206, 205, 200, 198, 196, 194, 195, 194, 197, 192, 190, 194, 197, 200, 198, - 192, 184, 191, 182, 187, 183, 185, 169, 170, 172, 164, 176, 179, 166, 174, 192, - 190, 181, 186, 183, 181, 187, 181, 173, 175, 169, 172, 177, 181, 183, 182, 180, - 176, 181, 185, 189, 188, 185, 185, 184, 183, 184, 181, 177, 176, 174, 174, 174, - 173, 174, 180, 187, 190, 188, 185, 184, 184, 184, 184, 183, 181, 177, 174, 171, - 166, 167, 159, 163, 178, 188, 183, 174, 170, 169, 170, 172, 169, 165, 162, 160, - 160, 157, 155, 164, 168, 153, 144, 142, 137, 112, 121, 147, 152, 151, 157, 152, - 157, 146, 147, 144, 135, 132, 138, 138, 136, 132, 91, 90, 96, 95, 105, 105, - 108, 121, 126, 125, 128, 132, 132, 130, 131, 134, 134, 131, 137, 139, 142, 142, - 140, 140, 142, 143, 133, 133, 136, 140, 143, 149, 154, 157, 146, 141, 148, 141, - 138, 145, 142, 142, 172, 175, 154, 147, 151, 149, 152, 144, 133, 131, 142, 146, - 147, 165, 175, 167, 177, 179, 179, 180, 181, 181, 182, 182, 189, 189, 191, 192, - 195, 197, 198, 200, 204, 206, 208, 208, 208, 210, 212, 215, 205, 204, 204, 205, - 207, 207, 206, 204, 202, 199, 198, 196, 195, 194, 195, 193, 196, 194, 194, 195, - 197, 197, 194, 190, 187, 200, 186, 187, 188, 177, 169, 168, 175, 167, 184, 188, - 166, 165, 178, 172, 185, 190, 184, 179, 187, 189, 185, 187, 172, 172, 175, 180, - 184, 185, 182, 176, 179, 183, 188, 188, 187, 186, 185, 183, 187, 183, 178, 176, - 175, 176, 174, 173, 185, 192, 199, 200, 195, 189, 188, 189, 193, 189, 181, 172, - 168, 169, 169, 165, 152, 150, 156, 169, 179, 177, 174, 174, 163, 163, 165, 163, - 162, 161, 160, 160, 164, 160, 166, 167, 153, 144, 138, 128, 109, 130, 149, 153, - 153, 152, 149, 157, 149, 150, 145, 134, 133, 138, 136, 133, 128, 83, 93, 104, - 95, 103, 113, 113, 104, 108, 106, 128, 129, 132, 129, 129, 133, 135, 132, 136, - 136, 139, 142, 145, 144, 140, 135, 133, 131, 133, 142, 150, 155, 154, 150, 148, - 146, 155, 143, 136, 143, 140, 144, 168, 171, 155, 153, 160, 159, 161, 153, 149, - 143, 141, 155, 161, 165, 170, 168, 174, 176, 176, 177, 179, 181, 183, 183, 189, - 191, 193, 195, 197, 198, 199, 200, 209, 212, 214, 214, 213, 212, 213, 214, 204, - 203, 203, 204, 206, 206, 204, 201, 197, 196, 196, 196, 196, 196, 197, 196, 197, - 199, 202, 199, 196, 192, 191, 191, 187, 201, 190, 188, 188, 174, 178, 163, 124, - 115, 134, 165, 180, 187, 183, 164, 172, 183, 186, 185, 193, 192, 181, 178, 179, - 176, 173, 175, 180, 182, 181, 176, 177, 179, 184, 187, 186, 185, 183, 182, 186, - 183, 179, 178, 176, 177, 176, 177, 180, 187, 196, 198, 195, 192, 192, 194, 195, - 192, 182, 171, 167, 169, 167, 159, 155, 160, 174, 185, 188, 182, 177, 177, 169, - 167, 167, 164, 161, 159, 156, 156, 164, 157, 159, 160, 153, 148, 139, 123, 109, - 139, 149, 151, 156, 151, 152, 159, 150, 150, 144, 133, 132, 137, 135, 129, 116, - 81, 99, 107, 94, 101, 115, 120, 118, 123, 123, 129, 129, 131, 128, 129, 133, - 135, 133, 137, 135, 137, 140, 145, 144, 138, 131, 139, 136, 136, 143, 150, 153, - 148, 141, 148, 144, 152, 140, 131, 135, 130, 130, 165, 174, 164, 164, 166, 160, - 165, 158, 160, 152, 138, 158, 169, 158, 163, 165, 172, 174, 176, 177, 180, 182, - 184, 187, 190, 191, 194, 195, 197, 198, 199, 201, 208, 212, 215, 215, 213, 210, - 209, 208, 200, 200, 200, 201, 203, 202, 200, 196, 195, 195, 196, 197, 198, 198, - 199, 199, 199, 201, 203, 200, 194, 190, 191, 194, 184, 194, 187, 186, 186, 175, - 188, 143, 57, 60, 75, 105, 137, 154, 167, 178, 174, 188, 187, 180, 185, 187, - 183, 184, 183, 178, 173, 172, 175, 177, 177, 174, 176, 175, 178, 185, 186, 183, - 182, 184, 183, 183, 183, 180, 176, 176, 178, 180, 178, 182, 187, 187, 184, 181, - 180, 181, 188, 190, 187, 179, 175, 175, 165, 151, 153, 164, 182, 196, 202, 196, - 188, 184, 167, 166, 166, 166, 166, 165, 162, 160, 161, 153, 153, 153, 150, 151, - 144, 124, 108, 146, 148, 150, 160, 153, 156, 162, 146, 148, 143, 133, 131, 133, - 127, 117, 99, 81, 100, 102, 92, 102, 113, 122, 116, 120, 120, 129, 129, 131, - 128, 129, 133, 136, 134, 138, 138, 139, 139, 141, 140, 138, 135, 141, 140, 140, - 144, 146, 147, 144, 142, 146, 137, 142, 133, 131, 135, 126, 119, 158, 173, 169, - 167, 167, 157, 162, 158, 158, 159, 140, 157, 168, 159, 167, 168, 173, 176, 179, - 181, 184, 185, 187, 187, 191, 191, 194, 195, 197, 199, 200, 201, 204, 210, 214, - 216, 214, 210, 207, 205, 202, 201, 201, 203, 203, 202, 199, 195, 197, 197, 198, - 201, 203, 203, 204, 204, 202, 201, 200, 198, 197, 195, 196, 197, 190, 190, 187, - 188, 189, 181, 194, 108, 53, 69, 64, 64, 77, 77, 95, 140, 174, 188, 185, - 172, 174, 181, 186, 193, 183, 180, 177, 175, 176, 177, 178, 176, 178, 174, 175, - 183, 185, 182, 182, 186, 183, 185, 187, 183, 175, 174, 177, 183, 195, 195, 194, - 192, 189, 186, 183, 182, 184, 189, 187, 180, 179, 180, 170, 153, 148, 150, 158, - 170, 182, 186, 183, 177, 162, 161, 163, 165, 168, 167, 163, 161, 160, 155, 155, - 152, 147, 147, 143, 126, 108, 152, 147, 150, 163, 152, 153, 155, 143, 146, 145, - 137, 132, 125, 112, 94, 90, 87, 97, 94, 97, 112, 115, 124, 128, 134, 134, - 126, 128, 128, 125, 126, 131, 135, 134, 137, 139, 141, 138, 135, 134, 138, 141, - 140, 140, 141, 143, 141, 142, 143, 145, 148, 133, 135, 131, 140, 148, 133, 122, - 147, 168, 169, 168, 165, 154, 158, 157, 153, 165, 147, 158, 173, 168, 182, 181, - 175, 177, 181, 183, 186, 187, 186, 187, 190, 191, 194, 195, 198, 199, 200, 201, - 203, 209, 215, 218, 217, 212, 208, 206, 205, 205, 205, 206, 207, 205, 201, 197, - 197, 198, 199, 202, 204, 206, 207, 206, 203, 199, 195, 195, 199, 202, 201, 199, - 199, 191, 189, 191, 191, 187, 195, 80, 52, 70, 57, 56, 78, 65, 59, 96, - 147, 172, 182, 177, 180, 181, 179, 181, 184, 183, 182, 181, 180, 180, 180, 179, - 179, 173, 175, 182, 185, 182, 183, 186, 183, 187, 189, 185, 174, 171, 177, 185, - 187, 186, 184, 185, 186, 186, 185, 183, 187, 189, 184, 175, 176, 182, 177, 162, - 179, 168, 157, 158, 171, 183, 186, 181, 167, 165, 165, 165, 164, 159, 152, 147, - 165, 161, 162, 154, 140, 140, 138, 124, 109, 158, 149, 151, 166, 149, 146, 145, - 149, 156, 156, 147, 138, 124, 100, 78, 92, 96, 101, 90, 104, 121, 116, 123, - 121, 129, 133, 124, 124, 127, 129, 132, 132, 133, 132, 138, 137, 135, 133, 134, - 136, 139, 141, 139, 138, 140, 140, 141, 141, 142, 142, 138, 138, 136, 132, 129, - 127, 126, 117, 135, 170, 168, 157, 157, 152, 160, 162, 156, 156, 148, 149, 167, - 177, 180, 189, 178, 179, 182, 182, 181, 182, 184, 186, 191, 186, 187, 194, 199, - 200, 200, 204, 212, 211, 210, 209, 209, 208, 205, 203, 196, 196, 197, 199, 203, - 203, 201, 197, 192, 192, 195, 198, 200, 201, 201, 199, 209, 204, 198, 194, 193, - 195, 196, 196, 201, 183, 189, 184, 186, 181, 169, 51, 53, 75, 60, 57, 53, - 65, 52, 65, 119, 176, 185, 171, 171, 188, 166, 183, 180, 186, 184, 178, 178, - 185, 180, 168, 185, 183, 178, 174, 177, 183, 188, 189, 192, 189, 185, 181, 178, - 179, 183, 186, 186, 190, 194, 193, 188, 183, 181, 180, 187, 184, 181, 182, 183, - 179, 171, 164, 160, 171, 169, 146, 174, 171, 179, 181, 165, 161, 166, 167, 158, - 159, 163, 159, 168, 156, 155, 150, 135, 139, 140, 120, 121, 156, 154, 145, 158, - 155, 141, 153, 162, 159, 145, 126, 114, 109, 104, 99, 107, 105, 101, 101, 106, - 113, 122, 127, 131, 125, 121, 124, 125, 128, 129, 130, 131, 131, 132, 135, 137, - 137, 137, 138, 139, 142, 140, 135, 134, 135, 135, 135, 136, 137, 137, 136, 135, - 133, 129, 124, 121, 122, 113, 132, 165, 167, 159, 157, 155, 164, 167, 165, 164, - 155, 155, 169, 176, 178, 185, 181, 184, 187, 189, 187, 183, 184, 183, 192, 188, - 188, 192, 195, 195, 194, 196, 207, 205, 207, 205, 207, 204, 204, 200, 203, 203, - 206, 203, 201, 197, 199, 198, 197, 195, 195, 196, 197, 198, 199, 200, 202, 201, - 200, 200, 200, 198, 194, 190, 189, 180, 184, 183, 188, 178, 155, 52, 67, 65, - 50, 65, 66, 70, 48, 54, 95, 177, 187, 179, 178, 185, 166, 181, 181, 187, - 187, 183, 184, 189, 184, 172, 180, 177, 176, 174, 177, 181, 185, 184, 183, 181, - 179, 176, 174, 177, 186, 192, 195, 196, 196, 193, 188, 184, 184, 185, 191, 187, - 184, 184, 184, 181, 174, 167, 161, 168, 159, 145, 169, 177, 180, 181, 167, 161, - 163, 162, 153, 155, 161, 160, 168, 157, 155, 148, 134, 135, 136, 117, 119, 156, - 162, 156, 167, 156, 135, 142, 118, 121, 116, 107, 105, 108, 109, 107, 112, 109, - 105, 104, 108, 116, 127, 132, 134, 129, 126, 133, 131, 131, 131, 131, 132, 133, - 133, 133, 134, 136, 139, 140, 140, 139, 136, 133, 132, 133, 133, 133, 133, 132, - 131, 127, 126, 125, 122, 118, 116, 118, 110, 123, 152, 158, 157, 153, 149, 160, - 162, 166, 168, 161, 161, 173, 177, 176, 180, 182, 188, 193, 194, 192, 185, 182, - 179, 185, 181, 183, 191, 197, 199, 201, 204, 203, 202, 204, 204, 204, 201, 201, - 198, 193, 197, 202, 199, 196, 195, 202, 207, 200, 198, 196, 196, 196, 197, 199, - 200, 201, 200, 200, 200, 200, 198, 194, 190, 185, 184, 187, 188, 197, 178, 140, - 59, 75, 58, 52, 79, 70, 68, 54, 60, 80, 186, 184, 178, 177, 173, 167, - 180, 181, 186, 186, 184, 187, 193, 186, 175, 176, 174, 175, 175, 177, 179, 183, - 183, 179, 179, 178, 175, 173, 177, 188, 197, 201, 199, 195, 190, 185, 183, 185, - 187, 192, 188, 184, 183, 183, 181, 175, 171, 165, 167, 148, 145, 157, 178, 175, - 179, 169, 161, 161, 157, 148, 151, 160, 160, 166, 158, 154, 147, 134, 133, 131, - 118, 119, 146, 149, 140, 142, 128, 106, 107, 102, 108, 107, 102, 105, 110, 113, - 112, 111, 109, 105, 105, 110, 119, 129, 133, 132, 128, 126, 139, 137, 135, 134, - 134, 134, 135, 136, 135, 134, 135, 135, 136, 134, 133, 131, 130, 129, 128, 128, - 127, 126, 123, 121, 123, 122, 121, 119, 117, 116, 118, 113, 112, 138, 149, 157, - 152, 146, 157, 156, 157, 161, 159, 162, 174, 176, 174, 179, 183, 187, 192, 194, - 190, 187, 183, 180, 178, 178, 181, 188, 195, 197, 201, 206, 203, 204, 206, 204, - 202, 198, 197, 196, 190, 193, 196, 195, 195, 197, 205, 208, 197, 196, 196, 197, - 197, 198, 198, 198, 203, 199, 195, 192, 193, 194, 195, 195, 185, 189, 186, 187, - 198, 175, 121, 65, 73, 60, 65, 87, 60, 63, 66, 75, 89, 196, 174, 166, - 167, 161, 168, 181, 180, 182, 180, 179, 183, 188, 184, 177, 180, 176, 176, 175, - 177, 177, 182, 186, 184, 185, 184, 179, 176, 179, 191, 200, 196, 194, 190, 185, - 182, 181, 182, 184, 187, 184, 181, 180, 180, 179, 177, 174, 170, 170, 147, 149, - 145, 171, 169, 176, 169, 161, 161, 158, 148, 151, 159, 158, 160, 155, 150, 144, - 136, 131, 128, 124, 108, 124, 119, 106, 105, 95, 84, 87, 97, 103, 103, 100, - 101, 104, 106, 104, 107, 108, 108, 110, 114, 119, 125, 126, 126, 125, 124, 145, - 142, 139, 138, 136, 135, 136, 137, 138, 136, 133, 131, 130, 129, 129, 127, 117, - 117, 118, 120, 118, 118, 117, 113, 124, 123, 122, 121, 118, 116, 118, 114, 99, - 119, 137, 156, 154, 148, 161, 154, 150, 158, 160, 163, 174, 176, 173, 179, 183, - 186, 191, 192, 190, 187, 187, 187, 185, 182, 185, 188, 190, 188, 190, 194, 203, - 204, 206, 200, 196, 190, 191, 190, 202, 198, 199, 196, 199, 198, 201, 197, 190, - 192, 195, 198, 200, 199, 197, 195, 198, 195, 191, 189, 190, 192, 193, 193, 185, - 189, 183, 181, 188, 170, 103, 61, 67, 66, 76, 91, 64, 69, 69, 69, 107, - 196, 165, 162, 163, 162, 173, 182, 183, 181, 176, 174, 178, 184, 184, 181, 185, - 177, 175, 173, 172, 172, 180, 188, 187, 187, 186, 183, 180, 184, 195, 203, 189, - 188, 186, 185, 184, 183, 182, 181, 181, 180, 179, 179, 180, 180, 180, 179, 170, - 169, 152, 155, 139, 162, 168, 178, 166, 161, 163, 163, 153, 154, 160, 156, 154, - 153, 144, 140, 138, 133, 129, 133, 92, 99, 97, 92, 93, 93, 93, 98, 94, - 102, 104, 101, 102, 105, 109, 108, 104, 106, 111, 117, 122, 124, 126, 124, 123, - 122, 123, 140, 138, 137, 136, 135, 133, 131, 131, 129, 125, 122, 120, 118, 117, - 118, 115, 108, 107, 113, 115, 119, 120, 120, 119, 118, 118, 116, 113, 109, 108, - 107, 105, 91, 101, 120, 148, 149, 146, 160, 151, 153, 160, 163, 167, 177, 175, - 171, 176, 184, 188, 189, 189, 188, 189, 192, 194, 189, 187, 189, 194, 196, 193, - 199, 205, 205, 205, 203, 196, 189, 184, 186, 187, 196, 195, 196, 198, 202, 202, - 200, 195, 189, 192, 197, 201, 202, 201, 197, 195, 190, 191, 193, 195, 197, 195, - 190, 187, 189, 190, 184, 180, 180, 173, 103, 59, 68, 69, 72, 90, 78, 83, - 64, 53, 124, 182, 163, 169, 169, 175, 178, 183, 188, 184, 179, 176, 179, 183, - 183, 181, 183, 175, 171, 170, 169, 167, 178, 190, 186, 185, 184, 183, 185, 189, - 197, 202, 187, 187, 186, 187, 188, 187, 183, 181, 179, 180, 181, 182, 182, 182, - 182, 181, 167, 160, 155, 156, 141, 156, 172, 179, 163, 160, 165, 166, 157, 157, - 161, 156, 150, 151, 140, 135, 139, 133, 131, 144, 87, 92, 98, 99, 100, 101, - 100, 100, 99, 107, 109, 105, 104, 107, 111, 111, 109, 112, 118, 125, 132, 133, - 131, 128, 125, 125, 127, 127, 127, 128, 128, 126, 124, 121, 119, 113, 111, 110, - 110, 108, 107, 107, 104, 102, 102, 108, 112, 116, 116, 116, 115, 105, 105, 105, - 103, 100, 98, 100, 101, 102, 101, 114, 143, 144, 142, 157, 145, 153, 163, 165, - 168, 177, 173, 169, 176, 184, 186, 188, 188, 188, 188, 190, 192, 186, 187, 192, - 198, 202, 203, 210, 218, 206, 206, 204, 194, 188, 184, 189, 191, 192, 195, 204, - 207, 211, 207, 206, 203, 195, 196, 200, 202, 203, 201, 199, 197, 190, 191, 194, - 197, 199, 197, 192, 188, 194, 191, 189, 185, 178, 185, 110, 61, 67, 70, 65, - 88, 85, 80, 58, 69, 149, 173, 170, 180, 172, 185, 182, 188, 191, 185, 182, - 182, 184, 183, 179, 177, 179, 171, 170, 172, 172, 169, 180, 193, 190, 187, 184, - 185, 189, 193, 197, 197, 190, 188, 187, 187, 188, 187, 183, 180, 178, 180, 182, - 183, 182, 180, 178, 177, 169, 153, 158, 152, 148, 152, 173, 170, 162, 158, 164, - 166, 158, 158, 162, 158, 151, 152, 138, 133, 139, 132, 132, 153, 92, 92, 100, - 106, 102, 102, 101, 95, 95, 103, 105, 100, 97, 102, 107, 107, 121, 123, 127, - 131, 134, 134, 133, 130, 128, 130, 131, 113, 113, 115, 114, 113, 111, 107, 104, - 102, 102, 105, 106, 107, 106, 103, 100, 92, 91, 95, 98, 100, 99, 97, 95, - 93, 95, 95, 97, 98, 100, 102, 105, 124, 116, 121, 148, 146, 145, 161, 146, - 150, 160, 163, 166, 175, 174, 168, 176, 180, 183, 186, 186, 185, 185, 185, 186, - 187, 188, 191, 196, 198, 197, 203, 210, 210, 209, 206, 197, 190, 187, 194, 199, - 205, 213, 224, 225, 221, 212, 209, 208, 201, 202, 202, 203, 202, 201, 200, 199, - 197, 195, 193, 193, 195, 196, 197, 196, 189, 185, 187, 185, 173, 189, 113, 57, - 65, 68, 61, 85, 80, 67, 58, 101, 173, 173, 178, 185, 167, 186, 183, 196, - 189, 185, 183, 185, 186, 182, 175, 171, 176, 169, 172, 177, 177, 174, 184, 198, - 199, 193, 188, 189, 193, 195, 194, 191, 193, 189, 185, 184, 185, 184, 181, 178, - 176, 178, 181, 181, 179, 175, 172, 171, 175, 150, 159, 149, 152, 149, 171, 159, - 161, 157, 162, 163, 156, 158, 163, 160, 151, 153, 136, 131, 139, 131, 132, 156, - 92, 90, 97, 104, 101, 103, 109, 104, 100, 107, 113, 112, 112, 120, 128, 130, - 133, 133, 133, 131, 130, 129, 128, 126, 130, 131, 132, 104, 105, 106, 105, 103, - 97, 92, 88, 93, 100, 94, 84, 81, 74, 70, 75, 63, 71, 77, 82, 89, - 83, 82, 96, 97, 95, 94, 100, 109, 115, 118, 121, 138, 135, 135, 140, 143, - 144, 145, 149, 155, 159, 164, 167, 169, 168, 167, 169, 176, 179, 181, 183, 185, - 186, 187, 187, 190, 188, 189, 194, 196, 194, 196, 200, 202, 202, 204, 204, 207, - 206, 208, 207, 208, 208, 212, 213, 216, 216, 216, 215, 208, 204, 201, 198, 199, - 201, 205, 207, 202, 197, 191, 187, 187, 189, 191, 194, 198, 191, 176, 185, 186, - 188, 159, 58, 78, 59, 68, 85, 76, 67, 92, 126, 168, 176, 183, 187, 188, - 189, 191, 193, 182, 187, 191, 190, 184, 178, 175, 174, 179, 176, 177, 176, 179, - 179, 180, 178, 197, 191, 186, 186, 192, 197, 199, 198, 189, 187, 184, 182, 182, - 182, 180, 178, 178, 172, 175, 179, 175, 177, 180, 172, 166, 168, 166, 157, 159, - 140, 166, 170, 161, 161, 160, 158, 160, 162, 158, 149, 149, 142, 141, 137, 140, - 116, 149, 161, 99, 95, 111, 107, 100, 107, 102, 101, 113, 117, 123, 129, 134, - 136, 137, 135, 140, 139, 135, 130, 125, 122, 124, 127, 129, 129, 129, 86, 85, - 82, 78, 77, 76, 75, 75, 66, 74, 74, 69, 66, 57, 52, 54, 60, 65, - 66, 79, 96, 96, 91, 97, 97, 105, 115, 121, 122, 121, 120, 124, 126, 127, - 129, 133, 137, 139, 144, 151, 150, 154, 160, 164, 167, 167, 168, 170, 172, 174, - 179, 182, 184, 186, 188, 188, 187, 185, 187, 192, 194, 192, 192, 196, 197, 199, - 201, 203, 203, 202, 200, 199, 203, 204, 206, 208, 209, 211, 211, 211, 213, 211, - 208, 205, 204, 205, 207, 208, 210, 209, 206, 201, 196, 192, 189, 190, 187, 187, - 183, 195, 192, 190, 167, 87, 68, 70, 81, 75, 57, 72, 126, 171, 177, 182, - 187, 189, 188, 189, 192, 195, 190, 191, 191, 189, 183, 177, 173, 172, 176, 176, - 177, 175, 175, 178, 187, 192, 192, 188, 187, 190, 196, 199, 199, 196, 189, 186, - 184, 183, 182, 182, 180, 178, 179, 172, 176, 179, 174, 175, 177, 169, 171, 169, - 163, 154, 159, 145, 175, 180, 166, 166, 164, 161, 162, 164, 159, 150, 148, 146, - 136, 135, 134, 123, 148, 156, 101, 97, 115, 117, 120, 137, 137, 137, 147, 145, - 146, 146, 144, 141, 138, 136, 136, 136, 133, 130, 127, 126, 129, 131, 135, 136, - 135, 77, 76, 72, 68, 67, 64, 62, 62, 56, 58, 63, 62, 61, 56, 56, - 58, 73, 80, 83, 89, 100, 96, 91, 99, 93, 104, 116, 115, 107, 98, 100, - 108, 123, 124, 127, 130, 132, 134, 142, 151, 146, 150, 157, 162, 165, 167, 169, - 172, 171, 173, 176, 178, 180, 182, 182, 183, 183, 181, 185, 190, 192, 189, 189, - 192, 192, 194, 198, 200, 199, 196, 192, 190, 199, 199, 200, 201, 203, 204, 206, - 207, 216, 214, 212, 210, 208, 207, 207, 207, 204, 207, 209, 206, 197, 188, 182, - 182, 190, 191, 193, 201, 192, 188, 180, 131, 105, 100, 91, 76, 81, 120, 164, - 180, 181, 189, 193, 198, 199, 199, 199, 199, 201, 198, 191, 186, 181, 177, 173, - 169, 185, 184, 183, 174, 170, 172, 184, 192, 186, 186, 188, 194, 199, 200, 197, - 193, 188, 186, 184, 183, 183, 182, 180, 178, 179, 172, 176, 178, 173, 174, 174, - 166, 173, 170, 165, 158, 166, 151, 177, 178, 164, 164, 161, 158, 159, 160, 154, - 145, 145, 150, 131, 134, 125, 132, 148, 153, 106, 97, 112, 119, 129, 147, 145, - 144, 138, 136, 135, 134, 132, 130, 127, 126, 130, 129, 129, 127, 126, 125, 128, - 132, 134, 135, 134, 56, 58, 59, 61, 61, 61, 58, 57, 72, 65, 68, 71, - 67, 71, 82, 87, 93, 105, 106, 99, 93, 81, 78, 90, 82, 89, 95, 91, - 83, 83, 91, 103, 127, 130, 132, 133, 131, 131, 139, 149, 144, 149, 155, 160, - 163, 165, 168, 170, 173, 173, 174, 176, 176, 177, 176, 176, 180, 179, 183, 188, - 190, 188, 187, 189, 190, 190, 192, 193, 193, 192, 190, 188, 197, 197, 196, 197, - 198, 201, 204, 205, 211, 210, 210, 209, 208, 206, 205, 204, 213, 220, 226, 225, - 218, 210, 207, 209, 207, 200, 197, 197, 187, 185, 186, 170, 169, 151, 134, 127, - 144, 180, 189, 172, 183, 191, 197, 205, 209, 209, 207, 206, 204, 198, 187, 182, - 179, 177, 173, 169, 189, 184, 179, 172, 170, 173, 183, 189, 187, 187, 190, 195, - 198, 198, 194, 190, 188, 186, 184, 184, 183, 182, 180, 177, 178, 172, 176, 179, - 173, 174, 174, 166, 172, 172, 171, 168, 175, 153, 169, 162, 161, 161, 159, 156, - 156, 157, 152, 142, 138, 153, 131, 135, 118, 138, 152, 155, 105, 90, 105, 116, - 127, 142, 134, 128, 130, 127, 126, 125, 125, 126, 126, 126, 121, 122, 122, 121, - 119, 120, 122, 125, 121, 125, 127, 83, 82, 85, 89, 95, 100, 106, 109, 90, - 76, 80, 86, 81, 85, 99, 101, 96, 102, 97, 89, 90, 86, 83, 92, 86, - 90, 93, 95, 99, 106, 120, 130, 132, 132, 134, 135, 132, 131, 138, 148, 147, - 151, 156, 160, 161, 163, 166, 169, 171, 171, 172, 173, 173, 174, 173, 174, 181, - 179, 182, 188, 189, 188, 188, 190, 188, 188, 188, 188, 189, 190, 192, 193, 197, - 197, 196, 197, 198, 201, 204, 204, 203, 203, 204, 205, 205, 204, 203, 203, 197, - 203, 209, 209, 204, 200, 201, 207, 214, 204, 201, 196, 188, 189, 189, 190, 196, - 193, 198, 199, 194, 199, 203, 197, 194, 196, 197, 199, 201, 206, 209, 211, 200, - 194, 187, 182, 179, 178, 175, 171, 177, 170, 166, 166, 174, 182, 190, 191, 192, - 192, 192, 194, 194, 193, 191, 189, 187, 186, 184, 184, 184, 183, 179, 177, 177, - 171, 176, 180, 174, 175, 175, 166, 169, 170, 170, 168, 174, 150, 164, 155, 163, - 163, 161, 158, 159, 160, 155, 145, 132, 154, 135, 136, 119, 141, 156, 159, 99, - 83, 98, 114, 129, 143, 131, 123, 128, 123, 120, 116, 114, 112, 114, 114, 115, - 115, 115, 114, 112, 111, 112, 114, 113, 119, 121, 98, 92, 86, 82, 84, 91, - 100, 104, 94, 77, 86, 98, 86, 86, 94, 86, 86, 82, 72, 76, 98, 110, - 106, 103, 104, 108, 113, 119, 125, 129, 135, 136, 130, 129, 131, 134, 133, 132, - 137, 144, 148, 151, 155, 158, 159, 161, 164, 166, 165, 166, 168, 171, 172, 174, - 176, 176, 182, 180, 181, 185, 188, 186, 188, 190, 188, 186, 185, 185, 186, 189, - 192, 194, 194, 194, 195, 196, 198, 200, 201, 202, 199, 199, 201, 202, 203, 204, - 204, 204, 208, 211, 212, 211, 208, 207, 209, 213, 208, 201, 206, 200, 198, 200, - 190, 197, 195, 195, 210, 218, 207, 202, 209, 214, 207, 201, 191, 185, 185, 193, - 202, 208, 194, 191, 188, 185, 181, 179, 177, 174, 176, 167, 163, 164, 175, 183, - 187, 184, 195, 194, 194, 193, 191, 190, 189, 188, 187, 186, 185, 185, 185, 183, - 179, 176, 176, 171, 176, 179, 173, 173, 172, 163, 164, 164, 163, 158, 165, 146, - 166, 164, 162, 162, 159, 156, 156, 157, 151, 143, 133, 149, 136, 134, 129, 141, - 159, 157, 103, 84, 100, 116, 128, 137, 124, 117, 113, 111, 107, 104, 102, 100, - 101, 101, 108, 109, 111, 110, 107, 108, 108, 110, 112, 115, 117, 121, 114, 105, - 98, 95, 95, 97, 98, 97, 75, 86, 101, 86, 85, 94, 83, 83, 87, 83, - 88, 110, 122, 118, 117, 117, 122, 128, 133, 134, 134, 135, 132, 134, 129, 131, - 135, 136, 132, 133, 136, 145, 148, 152, 155, 157, 160, 162, 164, 163, 164, 166, - 170, 173, 175, 177, 177, 182, 179, 179, 184, 185, 184, 188, 191, 189, 186, 186, - 186, 187, 188, 189, 190, 190, 191, 193, 195, 197, 198, 198, 197, 197, 196, 197, - 198, 199, 201, 202, 203, 200, 199, 197, 196, 194, 194, 194, 196, 203, 203, 215, - 203, 203, 207, 191, 203, 197, 189, 195, 202, 204, 207, 208, 201, 206, 201, 191, - 185, 187, 192, 195, 197, 191, 193, 193, 191, 185, 181, 179, 176, 181, 172, 167, - 165, 170, 176, 181, 180, 193, 193, 194, 194, 192, 189, 189, 188, 186, 185, 185, - 185, 185, 183, 179, 175, 178, 172, 176, 178, 170, 168, 165, 155, 155, 158, 160, - 156, 162, 144, 167, 168, 163, 162, 158, 153, 152, 151, 144, 136, 141, 144, 132, - 129, 141, 140, 157, 148, 109, 86, 97, 109, 117, 124, 110, 107, 107, 106, 105, - 104, 103, 103, 104, 104, 101, 103, 105, 106, 104, 104, 106, 107, 108, 108, 109, - 117, 115, 116, 114, 112, 106, 102, 97, 105, 79, 89, 103, 88, 90, 105, 96, - 97, 114, 120, 116, 119, 119, 120, 126, 121, 125, 132, 134, 134, 135, 140, 142, - 141, 134, 133, 136, 137, 132, 129, 128, 141, 145, 149, 152, 155, 159, 163, 165, - 166, 166, 168, 171, 172, 172, 175, 175, 180, 177, 177, 181, 181, 182, 185, 190, - 187, 186, 187, 187, 187, 186, 185, 184, 186, 187, 190, 192, 194, 194, 195, 193, - 197, 194, 194, 195, 196, 197, 199, 200, 205, 203, 201, 200, 200, 200, 199, 199, - 207, 210, 221, 200, 197, 204, 191, 208, 201, 198, 202, 202, 199, 208, 208, 194, - 196, 196, 195, 196, 198, 196, 192, 187, 189, 194, 197, 194, 189, 182, 178, 178, - 174, 170, 167, 164, 168, 174, 185, 190, 188, 191, 194, 193, 194, 191, 188, 187, - 186, 185, 185, 185, 185, 183, 179, 175, 179, 172, 175, 176, 167, 163, 160, 149, - 146, 154, 162, 161, 166, 143, 164, 163, 169, 168, 163, 157, 154, 151, 144, 135, - 150, 139, 130, 125, 149, 139, 155, 137, 104, 79, 87, 98, 104, 113, 103, 103, - 99, 98, 97, 95, 93, 90, 89, 88, 89, 92, 96, 97, 97, 98, 99, 101, - 96, 97, 98, 131, 128, 126, 124, 123, 121, 122, 120, 124, 110, 108, 137, 124, - 138, 131, 122, 126, 124, 124, 125, 129, 135, 135, 134, 135, 138, 135, 131, 131, - 138, 140, 139, 139, 136, 133, 133, 136, 135, 134, 131, 130, 141, 148, 148, 152, - 159, 163, 161, 165, 160, 162, 165, 169, 169, 172, 172, 176, 177, 176, 176, 178, - 182, 186, 188, 189, 188, 187, 186, 185, 185, 184, 184, 188, 189, 190, 190, 192, - 192, 193, 192, 199, 199, 199, 199, 199, 197, 196, 195, 201, 200, 198, 198, 199, - 201, 204, 207, 211, 208, 203, 204, 206, 205, 201, 195, 204, 200, 197, 203, 211, - 213, 205, 197, 192, 191, 189, 192, 197, 198, 197, 193, 188, 186, 184, 181, 178, - 176, 172, 171, 180, 166, 159, 161, 166, 167, 176, 185, 184, 188, 193, 192, 188, - 183, 183, 187, 187, 186, 185, 184, 183, 181, 177, 173, 177, 176, 179, 176, 163, - 157, 150, 135, 144, 152, 149, 148, 160, 164, 163, 164, 169, 162, 156, 153, 150, - 147, 147, 147, 141, 160, 102, 143, 138, 157, 158, 151, 96, 83, 77, 85, 86, - 78, 78, 90, 88, 86, 88, 79, 85, 85, 70, 78, 79, 75, 83, 90, 86, - 88, 89, 82, 90, 91, 95, 126, 125, 127, 129, 130, 130, 129, 127, 124, 123, - 124, 130, 119, 127, 130, 131, 130, 128, 128, 129, 132, 135, 137, 136, 141, 141, - 140, 134, 132, 134, 133, 127, 133, 134, 137, 141, 144, 141, 134, 128, 130, 143, - 151, 147, 144, 152, 163, 170, 169, 165, 166, 168, 171, 171, 171, 172, 175, 174, - 174, 174, 176, 179, 184, 186, 187, 187, 186, 185, 185, 186, 185, 186, 186, 186, - 187, 189, 190, 191, 191, 192, 197, 198, 199, 200, 201, 201, 201, 200, 199, 199, - 199, 201, 204, 208, 212, 214, 213, 210, 206, 207, 209, 209, 203, 199, 203, 200, - 198, 203, 209, 211, 207, 201, 200, 198, 195, 196, 197, 198, 194, 192, 191, 190, - 188, 186, 181, 179, 177, 176, 173, 164, 160, 160, 165, 170, 181, 187, 187, 189, - 192, 191, 186, 183, 184, 186, 188, 186, 185, 184, 183, 181, 177, 173, 174, 170, - 173, 170, 160, 158, 155, 140, 143, 152, 151, 146, 152, 154, 156, 161, 165, 158, - 153, 151, 150, 147, 141, 137, 138, 146, 119, 145, 154, 153, 153, 143, 88, 73, - 69, 81, 82, 71, 62, 67, 74, 75, 89, 82, 76, 77, 69, 74, 77, 69, - 70, 71, 68, 76, 87, 87, 85, 87, 92, 128, 131, 134, 135, 136, 134, 132, - 128, 126, 131, 126, 109, 117, 121, 129, 131, 131, 131, 131, 131, 131, 130, 132, - 132, 129, 132, 134, 131, 131, 134, 133, 130, 131, 135, 139, 143, 145, 143, 137, - 132, 132, 140, 146, 146, 147, 154, 163, 166, 165, 165, 167, 168, 172, 173, 173, - 173, 173, 172, 173, 172, 173, 175, 179, 181, 182, 182, 182, 183, 184, 185, 186, - 187, 184, 185, 187, 189, 190, 191, 191, 191, 192, 193, 195, 197, 200, 201, 202, - 202, 200, 200, 200, 202, 205, 209, 212, 214, 211, 208, 206, 207, 209, 210, 205, - 202, 201, 200, 199, 202, 206, 208, 207, 206, 208, 204, 202, 201, 199, 198, 193, - 191, 190, 189, 187, 184, 180, 178, 175, 174, 170, 170, 168, 162, 166, 175, 184, - 188, 190, 190, 191, 189, 186, 184, 186, 188, 189, 187, 186, 185, 184, 181, 177, - 173, 170, 168, 173, 172, 163, 161, 156, 139, 137, 148, 148, 143, 149, 153, 159, - 169, 164, 160, 156, 155, 154, 150, 142, 134, 141, 132, 134, 141, 160, 148, 147, - 140, 79, 65, 63, 77, 87, 80, 71, 73, 68, 65, 93, 90, 72, 74, 73, - 74, 79, 69, 67, 66, 64, 74, 88, 92, 91, 91, 92, 123, 124, 127, 130, - 132, 131, 132, 130, 129, 131, 118, 87, 121, 126, 131, 122, 130, 130, 132, 133, - 131, 126, 127, 130, 127, 129, 130, 129, 131, 134, 134, 131, 134, 133, 133, 133, - 135, 137, 138, 139, 131, 131, 136, 143, 155, 162, 159, 154, 158, 160, 164, 165, - 169, 173, 174, 170, 172, 172, 171, 172, 172, 174, 176, 178, 176, 176, 177, 178, - 180, 183, 185, 186, 187, 187, 188, 189, 190, 189, 189, 189, 188, 190, 192, 195, - 197, 198, 199, 200, 203, 203, 202, 202, 202, 203, 205, 205, 206, 204, 203, 204, - 206, 207, 203, 201, 200, 201, 201, 201, 202, 205, 207, 209, 209, 207, 205, 202, - 199, 197, 193, 190, 191, 189, 187, 181, 178, 175, 172, 170, 172, 178, 176, 167, - 168, 179, 187, 186, 192, 191, 190, 187, 185, 185, 187, 189, 189, 188, 186, 185, - 184, 181, 176, 173, 170, 170, 177, 178, 169, 164, 153, 132, 142, 150, 148, 144, - 153, 159, 165, 172, 160, 161, 160, 155, 151, 149, 144, 138, 147, 127, 137, 139, - 148, 148, 146, 147, 81, 70, 66, 78, 84, 82, 79, 82, 73, 62, 93, 93, - 67, 73, 75, 69, 74, 68, 72, 75, 71, 76, 86, 87, 94, 95, 93, 103, - 102, 104, 108, 114, 119, 123, 124, 121, 128, 113, 80, 110, 114, 118, 109, 116, - 116, 121, 128, 129, 125, 125, 127, 134, 134, 130, 124, 122, 124, 124, 123, 131, - 132, 132, 132, 133, 135, 137, 139, 129, 128, 133, 140, 149, 155, 157, 158, 156, - 160, 163, 162, 167, 172, 171, 166, 171, 172, 171, 171, 171, 173, 174, 176, 174, - 174, 175, 177, 180, 183, 185, 187, 192, 192, 192, 192, 191, 190, 188, 188, 190, - 191, 193, 195, 197, 197, 198, 198, 205, 205, 204, 203, 202, 202, 201, 201, 203, - 202, 202, 202, 202, 202, 202, 201, 199, 200, 201, 201, 200, 202, 206, 210, 206, - 205, 203, 200, 196, 194, 192, 191, 196, 193, 190, 184, 180, 175, 172, 171, 172, - 178, 177, 168, 171, 182, 189, 186, 193, 191, 188, 186, 185, 185, 187, 189, 189, - 187, 185, 184, 183, 179, 175, 171, 172, 169, 172, 172, 165, 163, 156, 136, 152, - 155, 148, 145, 159, 165, 164, 165, 152, 157, 157, 148, 140, 140, 142, 141, 143, - 127, 134, 145, 138, 153, 146, 144, 85, 81, 84, 88, 86, 78, 76, 78, 86, - 66, 89, 87, 66, 74, 74, 63, 66, 63, 69, 71, 65, 67, 76, 77, 91, - 93, 93, 105, 104, 102, 101, 103, 106, 108, 110, 110, 123, 118, 87, 86, 88, - 97, 99, 97, 97, 104, 119, 126, 123, 120, 122, 119, 120, 117, 112, 110, 115, - 118, 117, 127, 133, 136, 139, 139, 137, 136, 135, 127, 132, 139, 138, 134, 134, - 148, 165, 158, 164, 166, 163, 167, 172, 169, 162, 170, 170, 169, 170, 169, 170, - 170, 173, 173, 174, 176, 178, 181, 184, 187, 189, 192, 192, 192, 192, 191, 189, - 188, 187, 193, 194, 196, 197, 198, 198, 198, 198, 203, 203, 203, 204, 204, 205, - 205, 205, 204, 204, 204, 204, 202, 203, 203, 203, 200, 201, 201, 201, 200, 201, - 204, 205, 201, 201, 199, 195, 192, 189, 190, 192, 192, 190, 186, 183, 178, 175, - 172, 171, 170, 169, 168, 169, 174, 185, 190, 189, 191, 189, 186, 185, 185, 185, - 186, 186, 188, 186, 184, 183, 181, 178, 173, 169, 173, 164, 161, 159, 156, 163, - 165, 151, 144, 147, 143, 146, 165, 173, 169, 167, 155, 160, 157, 144, 137, 140, - 144, 143, 131, 129, 135, 154, 143, 158, 151, 124, 79, 87, 101, 112, 109, 97, - 87, 85, 96, 76, 87, 82, 71, 77, 72, 63, 63, 58, 61, 60, 52, 57, - 68, 72, 93, 94, 95, 120, 117, 114, 111, 109, 107, 104, 104, 111, 117, 112, - 95, 68, 76, 86, 92, 92, 91, 99, 117, 127, 121, 114, 111, 103, 107, 108, - 107, 110, 117, 119, 121, 128, 135, 140, 142, 139, 137, 136, 136, 131, 131, 136, - 139, 136, 131, 138, 149, 150, 160, 162, 160, 164, 172, 170, 162, 167, 168, 167, - 167, 166, 167, 167, 166, 170, 170, 173, 175, 178, 181, 183, 185, 187, 188, 190, - 190, 190, 190, 189, 189, 190, 191, 192, 194, 195, 196, 196, 196, 197, 198, 200, - 202, 203, 204, 205, 205, 203, 204, 204, 203, 203, 202, 201, 202, 202, 201, 200, - 200, 201, 202, 201, 201, 199, 198, 197, 193, 189, 186, 188, 191, 186, 185, 182, - 180, 178, 176, 173, 172, 175, 168, 165, 172, 182, 187, 190, 192, 189, 188, 185, - 184, 185, 185, 186, 186, 187, 185, 183, 181, 179, 176, 171, 167, 168, 160, 158, - 159, 160, 170, 174, 160, 137, 145, 146, 151, 168, 175, 170, 169, 164, 164, 157, - 143, 140, 146, 144, 136, 127, 133, 142, 151, 153, 150, 161, 102, 75, 88, 105, - 123, 128, 121, 112, 104, 104, 93, 96, 87, 85, 88, 76, 74, 70, 66, 67, - 66, 58, 65, 78, 84, 99, 97, 94, 114, 115, 116, 118, 117, 118, 116, 115, - 119, 111, 98, 98, 64, 84, 88, 87, 99, 95, 101, 120, 129, 120, 107, 102, - 112, 117, 119, 119, 121, 125, 123, 123, 133, 137, 137, 133, 131, 132, 137, 139, - 136, 126, 127, 140, 150, 143, 128, 120, 139, 150, 155, 155, 161, 173, 173, 164, - 164, 165, 164, 164, 163, 162, 161, 162, 164, 164, 165, 169, 172, 175, 178, 180, - 183, 184, 187, 188, 189, 190, 190, 189, 184, 185, 187, 190, 191, 193, 193, 194, - 195, 196, 197, 199, 200, 201, 201, 201, 202, 203, 204, 203, 201, 200, 200, 201, - 203, 201, 199, 200, 202, 203, 199, 197, 198, 198, 197, 190, 186, 184, 186, 188, - 186, 184, 184, 183, 183, 183, 181, 181, 187, 172, 167, 177, 189, 190, 189, 191, - 188, 186, 184, 184, 185, 185, 185, 184, 186, 184, 182, 180, 178, 175, 170, 166, - 164, 159, 164, 170, 172, 179, 177, 159, 147, 158, 160, 160, 168, 167, 159, 158, - 166, 162, 150, 138, 140, 146, 138, 122, 131, 137, 148, 141, 158, 139, 171, 91, - 85, 91, 105, 120, 130, 128, 118, 111, 111, 108, 111, 99, 102, 101, 83, 89, - 81, 79, 85, 88, 80, 84, 93, 96, 100, 96, 93, 120, 117, 109, 104, 104, - 110, 110, 105, 110, 104, 101, 115, 99, 78, 87, 91, 100, 113, 116, 117, 121, - 115, 108, 113, 113, 115, 119, 118, 117, 119, 125, 131, 134, 133, 141, 142, 132, - 131, 135, 128, 130, 126, 129, 137, 146, 147, 144, 142, 124, 139, 143, 147, 163, - 172, 166, 164, 162, 167, 172, 174, 172, 170, 170, 172, 167, 169, 168, 168, 168, - 170, 175, 181, 178, 180, 184, 187, 189, 189, 188, 187, 195, 190, 188, 189, 189, - 188, 190, 194, 191, 189, 193, 199, 199, 194, 195, 201, 201, 202, 204, 204, 202, - 200, 197, 195, 199, 200, 200, 198, 198, 197, 196, 196, 191, 192, 190, 190, 189, - 190, 193, 195, 195, 192, 186, 179, 181, 184, 179, 170, 173, 165, 166, 177, 188, - 190, 188, 187, 188, 188, 189, 189, 189, 186, 185, 184, 182, 183, 184, 181, 175, - 171, 170, 171, 163, 169, 174, 180, 163, 160, 168, 137, 156, 156, 157, 161, 168, - 173, 173, 168, 160, 150, 149, 133, 134, 144, 131, 126, 141, 148, 140, 152, 171, - 129, 173, 92, 90, 95, 115, 132, 130, 127, 125, 116, 109, 112, 113, 112, 113, - 112, 106, 97, 97, 94, 93, 94, 97, 98, 97, 97, 95, 94, 93, 126, 124, - 116, 108, 103, 102, 96, 88, 98, 92, 85, 96, 88, 79, 97, 98, 101, 104, - 98, 95, 104, 105, 102, 108, 102, 104, 109, 112, 115, 119, 124, 128, 130, 128, - 135, 135, 129, 128, 133, 128, 132, 131, 126, 125, 133, 145, 147, 145, 143, 146, - 136, 128, 136, 144, 151, 163, 170, 172, 173, 171, 168, 166, 167, 170, 169, 170, - 170, 167, 165, 166, 172, 175, 172, 173, 178, 181, 183, 185, 186, 186, 190, 186, - 186, 188, 189, 187, 189, 193, 194, 192, 195, 200, 200, 196, 197, 203, 199, 201, - 203, 203, 201, 199, 197, 194, 199, 200, 198, 197, 197, 195, 194, 192, 191, 192, - 190, 189, 187, 188, 190, 193, 189, 188, 182, 175, 178, 184, 185, 180, 167, 165, - 173, 184, 187, 186, 184, 188, 185, 186, 187, 187, 187, 184, 184, 182, 181, 179, - 177, 175, 174, 172, 169, 166, 167, 187, 165, 170, 188, 160, 147, 161, 163, 160, - 161, 167, 172, 173, 171, 167, 164, 151, 149, 134, 131, 138, 127, 129, 142, 140, - 143, 145, 134, 146, 151, 79, 90, 99, 121, 135, 132, 128, 124, 119, 118, 121, - 121, 117, 116, 116, 110, 101, 97, 95, 92, 93, 96, 95, 95, 93, 94, 92, - 93, 123, 125, 122, 118, 114, 112, 104, 96, 96, 94, 86, 94, 91, 89, 104, - 94, 100, 99, 90, 88, 100, 103, 103, 108, 108, 108, 112, 117, 122, 126, 128, - 128, 129, 125, 130, 130, 124, 125, 131, 127, 122, 129, 129, 126, 131, 144, 149, - 145, 149, 151, 144, 138, 140, 136, 137, 149, 149, 156, 166, 174, 175, 174, 171, - 169, 167, 167, 168, 165, 163, 163, 166, 169, 168, 168, 171, 172, 174, 179, 181, - 182, 185, 182, 183, 187, 188, 186, 187, 191, 194, 193, 195, 197, 197, 195, 198, - 203, 198, 199, 200, 200, 199, 198, 195, 193, 198, 196, 196, 196, 194, 192, 191, - 190, 190, 189, 189, 187, 185, 185, 187, 189, 181, 183, 182, 177, 178, 180, 181, - 178, 163, 169, 181, 189, 188, 183, 183, 188, 186, 186, 187, 186, 186, 186, 184, - 182, 187, 182, 177, 175, 175, 174, 168, 163, 171, 178, 179, 187, 174, 159, 170, - 164, 170, 164, 167, 176, 179, 172, 167, 167, 167, 151, 149, 134, 128, 131, 124, - 135, 152, 154, 151, 151, 139, 171, 110, 89, 90, 107, 130, 139, 136, 130, 126, - 124, 119, 121, 118, 114, 113, 113, 109, 101, 98, 94, 93, 93, 96, 95, 95, - 92, 89, 86, 87, 118, 123, 124, 123, 124, 124, 120, 113, 107, 111, 106, 113, - 109, 106, 108, 80, 101, 107, 106, 108, 116, 115, 111, 114, 122, 122, 122, 125, - 129, 129, 126, 122, 130, 123, 126, 126, 119, 122, 129, 125, 121, 125, 126, 124, - 123, 131, 144, 157, 155, 158, 155, 155, 156, 144, 136, 144, 138, 143, 149, 155, - 160, 161, 164, 164, 162, 162, 164, 162, 162, 162, 167, 170, 167, 167, 166, 168, - 169, 172, 175, 177, 180, 179, 180, 186, 187, 186, 186, 189, 192, 192, 192, 192, - 191, 192, 195, 199, 196, 197, 197, 197, 197, 196, 193, 193, 192, 193, 193, 193, - 192, 191, 191, 190, 187, 188, 187, 185, 183, 182, 184, 185, 175, 178, 181, 181, - 177, 173, 169, 166, 166, 174, 183, 188, 186, 182, 183, 187, 188, 188, 188, 188, - 189, 188, 186, 185, 187, 184, 179, 175, 171, 168, 164, 161, 162, 182, 197, 188, - 155, 163, 192, 163, 173, 166, 170, 181, 182, 171, 166, 168, 166, 149, 147, 132, - 124, 127, 126, 145, 149, 158, 132, 144, 161, 156, 65, 91, 90, 116, 135, 142, - 141, 134, 129, 133, 129, 130, 125, 121, 119, 122, 118, 113, 115, 112, 111, 112, - 115, 116, 116, 112, 106, 102, 102, 121, 125, 125, 120, 119, 120, 117, 114, 120, - 125, 120, 126, 124, 120, 116, 81, 107, 120, 125, 125, 130, 124, 120, 127, 129, - 128, 126, 127, 128, 126, 122, 114, 124, 115, 117, 118, 114, 119, 126, 122, 129, - 122, 119, 117, 109, 108, 129, 155, 168, 165, 152, 147, 151, 148, 146, 155, 157, - 150, 139, 132, 131, 134, 144, 150, 153, 155, 157, 157, 158, 160, 166, 170, 168, - 167, 165, 165, 165, 168, 171, 172, 176, 174, 176, 182, 184, 182, 183, 186, 187, - 189, 189, 187, 186, 188, 191, 195, 194, 194, 195, 195, 193, 193, 192, 192, 189, - 189, 190, 191, 191, 192, 191, 191, 186, 187, 185, 184, 182, 181, 183, 183, 179, - 179, 178, 178, 174, 170, 169, 168, 176, 179, 181, 182, 184, 185, 185, 186, 187, - 187, 187, 186, 188, 186, 186, 185, 177, 179, 179, 173, 165, 161, 162, 165, 170, - 205, 179, 157, 170, 172, 174, 174, 170, 167, 172, 182, 183, 173, 168, 168, 162, - 147, 145, 129, 122, 129, 133, 153, 158, 153, 130, 147, 160, 134, 95, 88, 86, - 120, 138, 140, 143, 136, 129, 136, 124, 122, 118, 112, 108, 109, 105, 99, 107, - 104, 103, 102, 107, 110, 111, 107, 103, 101, 101, 120, 125, 125, 120, 117, 120, - 121, 120, 125, 124, 117, 124, 125, 126, 128, 100, 115, 126, 127, 123, 125, 120, - 123, 135, 127, 126, 127, 129, 129, 127, 124, 118, 114, 103, 108, 112, 110, 117, - 125, 121, 119, 117, 122, 125, 116, 103, 102, 109, 150, 159, 155, 151, 157, 159, - 156, 160, 160, 156, 151, 146, 144, 142, 139, 137, 139, 141, 145, 147, 147, 150, - 155, 160, 163, 163, 162, 162, 162, 164, 166, 167, 173, 172, 173, 177, 179, 178, - 179, 183, 186, 189, 190, 187, 186, 189, 191, 191, 192, 192, 192, 192, 191, 191, - 191, 191, 188, 189, 189, 190, 191, 191, 191, 191, 185, 185, 184, 183, 180, 181, - 181, 184, 186, 179, 172, 170, 170, 173, 179, 185, 185, 181, 178, 177, 181, 186, - 186, 183, 184, 183, 182, 181, 183, 182, 182, 182, 173, 178, 181, 176, 167, 164, - 170, 177, 204, 184, 151, 161, 178, 171, 173, 168, 168, 170, 176, 180, 180, 175, - 172, 168, 158, 148, 145, 124, 120, 136, 141, 156, 174, 150, 148, 156, 136, 129, - 164, 89, 86, 123, 136, 134, 141, 135, 126, 134, 117, 116, 109, 102, 97, 95, - 90, 83, 89, 85, 83, 84, 86, 91, 92, 89, 83, 83, 85, 119, 125, 128, - 126, 125, 128, 130, 130, 128, 123, 114, 125, 126, 127, 137, 116, 118, 124, 124, - 119, 121, 118, 120, 131, 124, 126, 129, 131, 131, 130, 130, 128, 116, 104, 108, - 111, 109, 115, 122, 116, 109, 119, 127, 127, 128, 121, 95, 67, 93, 130, 155, - 160, 167, 168, 158, 154, 150, 153, 159, 165, 167, 161, 152, 144, 139, 141, 143, - 143, 142, 144, 146, 149, 155, 155, 155, 157, 157, 160, 162, 164, 171, 169, 169, - 172, 173, 173, 175, 179, 182, 187, 189, 186, 184, 188, 188, 186, 191, 191, 189, - 189, 189, 189, 188, 188, 191, 192, 191, 191, 190, 189, 188, 188, 184, 184, 184, - 183, 181, 182, 183, 185, 186, 176, 168, 170, 175, 178, 183, 187, 185, 184, 180, - 176, 180, 185, 185, 181, 180, 180, 180, 179, 181, 180, 180, 180, 176, 178, 179, - 175, 169, 167, 171, 176, 192, 153, 152, 188, 181, 172, 185, 159, 168, 177, 182, - 178, 176, 178, 175, 166, 156, 151, 147, 121, 119, 143, 147, 155, 160, 145, 144, - 148, 131, 133, 168, 101, 94, 132, 138, 131, 143, 137, 124, 132, 129, 129, 123, - 117, 114, 111, 106, 99, 101, 98, 95, 94, 95, 98, 99, 97, 91, 90, 92, - 123, 129, 133, 129, 126, 126, 126, 124, 132, 125, 120, 132, 132, 128, 135, 118, - 117, 123, 122, 120, 125, 121, 116, 121, 117, 123, 127, 127, 126, 126, 129, 129, - 126, 114, 115, 117, 112, 117, 119, 111, 122, 130, 121, 105, 117, 133, 109, 64, - 47, 102, 141, 150, 157, 164, 159, 156, 161, 157, 153, 151, 154, 158, 160, 159, - 153, 154, 154, 152, 149, 147, 149, 151, 145, 146, 148, 150, 152, 155, 157, 160, - 168, 164, 162, 165, 168, 168, 171, 176, 176, 184, 187, 183, 181, 184, 184, 180, - 189, 189, 186, 186, 186, 187, 186, 187, 194, 193, 193, 190, 190, 186, 186, 183, - 183, 183, 183, 182, 181, 180, 184, 185, 179, 169, 168, 175, 182, 180, 179, 177, - 180, 185, 184, 179, 179, 183, 184, 181, 184, 183, 182, 181, 181, 181, 182, 182, - 176, 174, 171, 166, 162, 160, 161, 162, 131, 162, 171, 188, 202, 179, 168, 169, - 169, 183, 187, 177, 174, 180, 178, 164, 156, 154, 149, 119, 118, 147, 151, 152, - 147, 162, 144, 148, 170, 154, 139, 135, 100, 136, 139, 130, 143, 138, 125, 134, - 125, 126, 125, 120, 120, 119, 117, 110, 109, 106, 101, 99, 99, 100, 100, 98, - 98, 96, 96, 121, 123, 125, 126, 125, 124, 123, 124, 123, 121, 123, 121, 121, - 121, 121, 120, 110, 119, 118, 117, 120, 116, 113, 120, 105, 111, 114, 112, 114, - 122, 125, 124, 120, 120, 122, 121, 117, 116, 117, 120, 119, 122, 121, 108, 119, - 115, 115, 67, 35, 56, 90, 124, 148, 157, 153, 149, 157, 157, 157, 157, 159, - 160, 160, 159, 149, 148, 148, 151, 156, 158, 157, 157, 159, 161, 160, 155, 146, - 140, 137, 137, 151, 154, 158, 162, 166, 164, 160, 156, 170, 174, 178, 184, 183, - 181, 183, 186, 183, 183, 181, 177, 178, 184, 187, 187, 184, 185, 188, 188, 188, - 183, 179, 175, 183, 180, 178, 177, 180, 180, 178, 175, 151, 163, 176, 179, 177, - 176, 180, 185, 183, 181, 180, 182, 184, 185, 186, 185, 188, 185, 181, 179, 181, - 181, 180, 179, 180, 176, 169, 163, 161, 158, 150, 143, 164, 157, 177, 187, 175, - 179, 179, 154, 170, 182, 192, 189, 180, 172, 168, 164, 142, 149, 154, 139, 116, - 151, 151, 154, 164, 148, 145, 158, 162, 152, 144, 149, 104, 125, 120, 128, 133, - 122, 130, 129, 132, 130, 136, 134, 122, 121, 120, 105, 115, 110, 108, 107, 108, - 106, 103, 102, 101, 104, 102, 126, 127, 127, 125, 122, 120, 120, 120, 121, 120, - 119, 117, 116, 116, 116, 117, 116, 124, 123, 119, 123, 120, 116, 122, 116, 118, - 116, 108, 104, 107, 109, 108, 110, 113, 115, 115, 112, 112, 115, 117, 117, 116, - 115, 111, 121, 110, 117, 85, 37, 45, 54, 67, 86, 115, 145, 167, 166, 164, - 158, 154, 153, 156, 156, 152, 157, 156, 156, 157, 161, 164, 167, 167, 161, 161, - 159, 155, 152, 150, 150, 151, 152, 150, 146, 145, 150, 156, 159, 163, 159, 162, - 167, 176, 179, 180, 184, 190, 183, 183, 182, 177, 179, 182, 185, 182, 190, 189, - 188, 184, 181, 178, 178, 177, 176, 176, 178, 179, 181, 176, 169, 161, 169, 174, - 179, 181, 180, 179, 180, 180, 186, 185, 186, 188, 190, 190, 187, 184, 188, 185, - 182, 180, 180, 180, 179, 178, 167, 171, 172, 166, 159, 159, 164, 170, 160, 176, - 184, 185, 184, 179, 172, 170, 190, 195, 196, 187, 178, 174, 174, 171, 160, 155, - 145, 127, 111, 155, 163, 169, 150, 145, 151, 166, 173, 162, 151, 146, 125, 109, - 125, 112, 135, 126, 130, 130, 128, 124, 128, 128, 124, 128, 126, 112, 120, 115, - 107, 100, 96, 95, 101, 104, 95, 100, 102, 126, 126, 125, 124, 122, 119, 121, - 122, 125, 122, 119, 117, 116, 114, 115, 116, 115, 122, 120, 118, 123, 119, 116, - 121, 116, 118, 114, 106, 103, 106, 110, 111, 119, 121, 123, 123, 121, 122, 124, - 125, 119, 113, 115, 117, 127, 112, 123, 101, 32, 38, 41, 41, 44, 65, 98, - 123, 136, 145, 155, 161, 166, 169, 164, 156, 162, 161, 160, 158, 158, 160, 165, - 168, 163, 163, 163, 164, 164, 163, 160, 159, 157, 153, 146, 143, 145, 152, 157, - 161, 158, 157, 160, 165, 167, 169, 173, 178, 179, 178, 180, 174, 176, 177, 179, - 173, 182, 182, 184, 180, 178, 175, 178, 179, 180, 174, 168, 165, 166, 169, 170, - 170, 184, 182, 180, 180, 182, 181, 181, 180, 187, 188, 190, 192, 193, 191, 186, - 182, 187, 185, 182, 180, 180, 180, 178, 176, 169, 169, 167, 161, 156, 156, 161, - 168, 163, 193, 192, 182, 189, 179, 168, 186, 192, 193, 190, 182, 176, 174, 173, - 168, 157, 152, 147, 137, 125, 164, 158, 155, 142, 145, 153, 163, 171, 166, 154, - 143, 149, 99, 125, 104, 134, 127, 127, 127, 134, 125, 125, 122, 117, 120, 117, - 103, 95, 104, 113, 113, 109, 101, 95, 93, 95, 98, 101, 115, 116, 122, 122, - 123, 124, 125, 126, 127, 125, 122, 117, 117, 118, 121, 121, 117, 122, 120, 117, - 123, 120, 116, 122, 116, 115, 115, 114, 114, 116, 121, 124, 130, 131, 131, 131, - 128, 128, 128, 129, 121, 120, 120, 118, 129, 118, 125, 92, 27, 39, 49, 49, - 42, 41, 50, 60, 136, 143, 145, 142, 145, 159, 170, 174, 166, 167, 167, 164, - 159, 157, 160, 163, 165, 166, 169, 173, 174, 170, 160, 152, 162, 161, 158, 157, - 157, 156, 154, 154, 158, 155, 156, 159, 161, 162, 167, 172, 183, 186, 187, 184, - 184, 187, 185, 181, 177, 182, 185, 184, 178, 173, 172, 172, 172, 167, 161, 159, - 162, 168, 177, 182, 182, 179, 178, 176, 178, 181, 184, 184, 186, 186, 187, 190, - 191, 190, 186, 183, 186, 183, 181, 179, 179, 178, 176, 174, 178, 165, 154, 154, - 160, 162, 157, 155, 178, 196, 193, 181, 180, 176, 174, 187, 179, 181, 182, 179, - 179, 178, 172, 163, 151, 150, 152, 147, 132, 160, 146, 138, 164, 168, 169, 167, - 172, 175, 169, 157, 157, 110, 111, 112, 131, 123, 128, 123, 134, 128, 126, 120, - 112, 114, 112, 100, 108, 105, 99, 90, 86, 90, 95, 97, 95, 96, 96, 103, - 107, 115, 119, 121, 121, 121, 120, 120, 118, 116, 114, 114, 117, 120, 121, 119, - 123, 119, 116, 123, 120, 116, 121, 118, 118, 119, 120, 118, 113, 115, 117, 121, - 122, 122, 123, 121, 122, 121, 121, 119, 126, 123, 110, 123, 121, 117, 64, 32, - 38, 41, 43, 41, 40, 41, 44, 50, 85, 121, 144, 155, 160, 155, 147, 169, - 173, 175, 174, 169, 166, 166, 167, 168, 167, 167, 168, 169, 167, 160, 154, 165, - 166, 165, 167, 166, 163, 158, 155, 151, 149, 149, 154, 160, 163, 169, 173, 169, - 171, 174, 173, 174, 176, 175, 171, 184, 185, 183, 178, 171, 166, 165, 165, 155, - 160, 167, 172, 176, 177, 177, 175, 178, 179, 180, 177, 176, 177, 183, 189, 186, - 185, 184, 186, 188, 190, 189, 188, 183, 181, 179, 178, 177, 175, 172, 170, 168, - 157, 152, 159, 168, 170, 168, 169, 200, 191, 192, 186, 169, 176, 188, 180, 180, - 181, 181, 180, 182, 183, 178, 169, 162, 156, 150, 136, 114, 147, 148, 156, 166, - 171, 169, 162, 164, 170, 167, 156, 153, 139, 96, 132, 131, 121, 133, 123, 125, - 123, 127, 125, 118, 121, 124, 117, 121, 115, 104, 96, 94, 97, 91, 84, 87, - 84, 82, 102, 106, 112, 115, 115, 112, 111, 111, 111, 109, 108, 108, 109, 111, - 113, 115, 113, 117, 111, 107, 115, 114, 110, 114, 110, 111, 114, 115, 114, 109, - 108, 112, 115, 116, 116, 119, 120, 122, 123, 122, 114, 124, 120, 102, 115, 116, - 107, 44, 36, 38, 37, 40, 43, 44, 42, 41, 34, 47, 55, 61, 82, 120, - 150, 162, 160, 166, 171, 174, 174, 173, 172, 172, 171, 166, 161, 158, 159, 162, - 165, 166, 167, 165, 163, 163, 165, 166, 167, 165, 151, 145, 143, 146, 151, 151, - 154, 156, 165, 168, 172, 170, 172, 174, 175, 170, 171, 166, 161, 156, 158, 162, - 169, 172, 164, 167, 172, 176, 177, 177, 178, 178, 180, 181, 183, 181, 177, 177, - 180, 185, 186, 185, 184, 185, 188, 190, 191, 190, 180, 178, 176, 175, 174, 172, - 169, 166, 154, 155, 161, 166, 163, 160, 168, 183, 210, 189, 192, 190, 170, 183, - 197, 177, 190, 188, 183, 177, 177, 179, 179, 173, 163, 157, 151, 136, 111, 144, - 154, 170, 153, 160, 163, 162, 164, 166, 161, 150, 151, 164, 92, 140, 137, 128, - 137, 129, 128, 128, 134, 132, 126, 129, 130, 118, 69, 73, 78, 82, 86, 81, - 62, 40, 80, 72, 67, 110, 109, 111, 111, 110, 109, 110, 110, 110, 108, 108, - 108, 109, 108, 109, 110, 108, 111, 104, 102, 111, 110, 105, 109, 105, 102, 105, - 111, 111, 107, 108, 115, 116, 116, 116, 119, 121, 124, 124, 123, 110, 116, 113, - 101, 113, 109, 103, 49, 36, 38, 42, 45, 45, 42, 36, 31, 40, 42, 37, - 37, 61, 103, 128, 131, 154, 155, 158, 162, 167, 169, 169, 168, 166, 164, 161, - 158, 157, 160, 165, 169, 165, 164, 162, 163, 167, 168, 168, 168, 159, 152, 147, - 147, 147, 144, 143, 144, 136, 137, 140, 136, 139, 140, 142, 137, 153, 148, 148, - 151, 162, 170, 178, 177, 178, 175, 173, 171, 170, 174, 182, 186, 181, 180, 181, - 180, 180, 180, 179, 178, 184, 183, 184, 185, 188, 188, 186, 184, 177, 176, 174, - 173, 172, 170, 166, 162, 159, 160, 166, 168, 160, 154, 166, 186, 199, 194, 192, - 188, 184, 190, 191, 183, 190, 190, 186, 179, 176, 176, 176, 171, 156, 154, 155, - 145, 121, 148, 152, 165, 163, 168, 173, 177, 180, 176, 171, 164, 153, 169, 100, - 122, 143, 138, 133, 135, 140, 134, 135, 136, 130, 129, 119, 98, 95, 92, 84, - 75, 78, 87, 88, 77, 75, 65, 58, 117, 115, 114, 112, 110, 112, 114, 118, - 114, 114, 114, 114, 112, 112, 112, 112, 114, 116, 109, 107, 115, 115, 111, 115, - 112, 108, 108, 112, 109, 105, 107, 115, 113, 112, 111, 112, 114, 115, 114, 112, - 110, 110, 110, 105, 116, 104, 105, 63, 38, 40, 41, 41, 39, 39, 38, 38, - 38, 34, 28, 36, 79, 133, 160, 160, 156, 154, 154, 157, 163, 167, 168, 166, - 161, 165, 169, 169, 166, 162, 162, 163, 164, 165, 168, 170, 171, 169, 164, 162, - 162, 156, 153, 155, 157, 155, 153, 154, 155, 158, 157, 154, 154, 156, 156, 153, - 156, 155, 159, 169, 180, 184, 179, 172, 169, 173, 178, 180, 180, 177, 179, 181, - 178, 176, 174, 178, 183, 184, 179, 173, 180, 180, 182, 185, 186, 184, 180, 176, - 176, 174, 173, 172, 171, 168, 164, 160, 172, 163, 161, 166, 169, 169, 177, 193, - 181, 199, 190, 183, 197, 193, 180, 188, 184, 190, 193, 190, 185, 181, 176, 169, - 163, 156, 153, 142, 118, 146, 149, 162, 164, 163, 166, 169, 171, 166, 164, 163, - 156, 161, 109, 100, 146, 145, 127, 137, 143, 131, 129, 131, 130, 129, 111, 82, - 93, 94, 88, 73, 68, 73, 69, 59, 66, 57, 53, 109, 110, 109, 105, 103, - 108, 110, 110, 109, 112, 116, 118, 116, 115, 115, 115, 117, 120, 112, 107, 112, - 113, 113, 121, 113, 114, 112, 106, 104, 106, 107, 105, 109, 110, 109, 110, 111, - 112, 111, 110, 106, 120, 120, 110, 110, 117, 103, 78, 37, 38, 42, 44, 38, - 30, 32, 42, 38, 37, 33, 43, 84, 136, 164, 166, 171, 172, 171, 167, 162, - 159, 158, 158, 160, 161, 162, 163, 163, 165, 167, 169, 169, 168, 168, 167, 167, - 167, 168, 169, 165, 160, 152, 149, 152, 155, 156, 155, 159, 159, 159, 160, 161, - 161, 162, 162, 164, 164, 166, 169, 172, 176, 179, 181, 175, 173, 173, 173, 174, - 176, 178, 179, 180, 180, 178, 178, 178, 179, 180, 181, 181, 181, 182, 184, 185, - 184, 181, 178, 177, 177, 173, 167, 161, 159, 163, 167, 163, 166, 167, 165, 170, - 181, 187, 190, 191, 179, 180, 187, 189, 193, 190, 175, 191, 185, 180, 179, 181, - 180, 176, 171, 174, 162, 153, 141, 121, 154, 154, 162, 167, 164, 166, 170, 172, - 167, 167, 168, 156, 148, 119, 95, 128, 127, 137, 135, 139, 133, 128, 123, 121, - 116, 106, 96, 106, 90, 77, 75, 80, 78, 62, 46, 78, 104, 65, 106, 106, - 106, 102, 101, 106, 109, 108, 106, 109, 113, 115, 115, 113, 116, 118, 126, 129, - 122, 116, 118, 112, 106, 110, 110, 110, 110, 106, 106, 108, 109, 107, 115, 116, - 114, 115, 115, 116, 115, 114, 111, 120, 119, 113, 116, 123, 116, 100, 45, 40, - 37, 37, 36, 41, 55, 71, 80, 83, 81, 82, 105, 143, 164, 165, 177, 180, - 181, 179, 176, 173, 173, 173, 169, 174, 177, 175, 171, 169, 173, 176, 180, 178, - 178, 178, 179, 181, 183, 184, 181, 177, 170, 162, 156, 155, 157, 161, 153, 155, - 159, 162, 164, 163, 162, 160, 164, 165, 168, 172, 176, 179, 182, 184, 182, 181, - 179, 178, 177, 178, 177, 178, 181, 181, 181, 180, 182, 181, 183, 183, 181, 181, - 182, 184, 186, 186, 184, 182, 174, 172, 170, 166, 163, 162, 164, 167, 167, 168, - 168, 170, 180, 191, 193, 191, 192, 196, 206, 204, 185, 181, 190, 192, 187, 185, - 184, 181, 177, 174, 175, 174, 166, 167, 167, 149, 115, 139, 148, 168, 167, 165, - 166, 171, 173, 169, 167, 167, 153, 143, 116, 94, 132, 135, 139, 132, 128, 127, - 125, 127, 128, 127, 121, 114, 95, 87, 76, 74, 76, 74, 68, 59, 39, 62, - 63, 103, 106, 106, 103, 102, 105, 108, 108, 104, 108, 112, 111, 109, 108, 113, - 118, 111, 118, 116, 113, 118, 113, 105, 108, 106, 109, 111, 107, 109, 112, 113, - 112, 120, 120, 118, 118, 117, 118, 117, 116, 113, 113, 110, 110, 114, 118, 116, - 111, 79, 72, 66, 66, 69, 81, 100, 115, 117, 126, 127, 120, 127, 147, 162, - 163, 177, 180, 183, 184, 183, 181, 180, 180, 177, 184, 189, 187, 178, 173, 176, - 182, 183, 182, 182, 182, 184, 187, 190, 192, 188, 186, 181, 170, 159, 153, 153, - 157, 156, 157, 159, 161, 163, 165, 165, 166, 162, 164, 166, 170, 173, 175, 177, - 177, 180, 179, 177, 175, 174, 174, 175, 176, 178, 178, 179, 179, 180, 179, 180, - 179, 180, 179, 178, 179, 180, 181, 179, 178, 172, 170, 167, 166, 167, 168, 169, - 168, 167, 168, 170, 177, 189, 200, 198, 192, 201, 196, 200, 199, 186, 185, 190, - 186, 180, 182, 183, 178, 171, 166, 170, 172, 167, 161, 156, 143, 118, 145, 146, - 155, 166, 164, 166, 171, 174, 169, 167, 166, 159, 143, 115, 89, 131, 141, 144, - 139, 143, 142, 141, 135, 129, 121, 112, 108, 108, 103, 96, 88, 81, 78, 76, - 74, 58, 60, 84, 108, 109, 111, 106, 104, 108, 110, 107, 106, 110, 111, 107, - 102, 101, 106, 111, 99, 107, 108, 109, 117, 113, 108, 112, 108, 111, 113, 113, - 114, 116, 117, 114, 120, 120, 117, 116, 115, 116, 116, 115, 115, 110, 105, 108, - 110, 109, 109, 110, 114, 112, 111, 114, 117, 123, 131, 137, 134, 144, 146, 140, - 142, 155, 165, 167, 175, 179, 183, 185, 185, 183, 182, 181, 181, 186, 190, 189, - 183, 179, 179, 181, 183, 182, 180, 180, 181, 184, 187, 190, 185, 185, 182, 176, - 167, 160, 156, 157, 163, 160, 157, 154, 155, 159, 164, 167, 162, 164, 165, 167, - 168, 169, 169, 168, 173, 172, 171, 171, 171, 172, 174, 175, 175, 176, 177, 178, - 178, 178, 177, 177, 181, 179, 177, 176, 176, 177, 176, 174, 175, 171, 169, 169, - 172, 174, 173, 170, 164, 170, 177, 184, 194, 202, 199, 193, 200, 188, 187, 189, - 186, 191, 193, 184, 183, 184, 184, 178, 172, 168, 171, 173, 167, 157, 152, 143, - 124, 154, 151, 157, 165, 162, 163, 170, 174, 169, 165, 163, 167, 148, 122, 85, - 124, 142, 147, 150, 136, 137, 140, 138, 134, 130, 124, 122, 123, 119, 115, 106, - 98, 94, 91, 88, 91, 70, 79, 116, 117, 119, 112, 110, 112, 113, 110, 111, - 113, 114, 108, 104, 104, 109, 114, 115, 120, 118, 115, 121, 116, 110, 115, 115, - 117, 119, 118, 118, 120, 120, 116, 123, 120, 117, 116, 114, 116, 116, 115, 119, - 113, 110, 114, 115, 111, 110, 114, 123, 126, 130, 133, 136, 137, 135, 133, 143, - 150, 152, 150, 152, 164, 173, 176, 180, 183, 187, 189, 188, 186, 185, 184, 184, - 184, 185, 186, 186, 185, 181, 178, 187, 186, 184, 182, 182, 184, 184, 186, 181, - 181, 181, 183, 183, 179, 171, 167, 164, 163, 160, 157, 156, 156, 158, 159, 163, - 163, 165, 166, 167, 167, 168, 167, 172, 171, 170, 170, 170, 172, 176, 177, 176, - 176, 177, 178, 178, 178, 178, 176, 178, 177, 175, 175, 177, 178, 178, 177, 175, - 172, 169, 170, 173, 175, 173, 171, 166, 177, 188, 193, 196, 200, 199, 198, 193, - 191, 197, 196, 183, 186, 196, 197, 192, 190, 186, 181, 178, 176, 176, 176, 160, - 165, 172, 157, 123, 147, 155, 175, 164, 160, 160, 167, 172, 168, 164, 161, 163, - 148, 132, 87, 119, 139, 140, 149, 135, 136, 139, 140, 138, 136, 135, 133, 126, - 123, 121, 120, 118, 117, 114, 108, 99, 92, 82, 118, 122, 122, 118, 116, 115, - 116, 114, 115, 115, 115, 114, 115, 115, 120, 123, 122, 127, 122, 119, 124, 120, - 115, 119, 120, 123, 124, 119, 119, 122, 122, 118, 125, 121, 118, 117, 116, 118, - 119, 119, 115, 113, 112, 115, 116, 115, 116, 119, 127, 134, 139, 139, 140, 143, - 143, 141, 149, 154, 155, 155, 157, 167, 172, 172, 181, 184, 187, 188, 187, 185, - 185, 185, 186, 183, 181, 184, 188, 188, 184, 179, 186, 185, 183, 182, 181, 180, - 179, 178, 177, 176, 178, 183, 188, 188, 182, 176, 173, 175, 176, 175, 172, 167, - 162, 158, 159, 159, 159, 160, 161, 163, 165, 166, 171, 168, 166, 165, 165, 165, - 169, 170, 169, 169, 168, 168, 168, 169, 172, 171, 168, 166, 167, 170, 174, 176, - 177, 176, 174, 172, 170, 170, 171, 173, 174, 174, 176, 189, 199, 200, 198, 200, - 200, 201, 201, 192, 192, 193, 187, 191, 195, 188, 192, 188, 183, 179, 176, 174, - 174, 173, 166, 166, 168, 154, 123, 148, 152, 167, 167, 160, 159, 164, 171, 168, - 164, 161, 153, 142, 139, 92, 120, 138, 129, 137, 142, 142, 141, 141, 139, 138, - 135, 134, 137, 134, 131, 133, 136, 133, 129, 121, 109, 125, 113, 116, 120, 122, - 119, 118, 120, 121, 117, 118, 117, 116, 117, 121, 125, 126, 126, 119, 125, 122, - 119, 126, 124, 119, 123, 122, 123, 123, 120, 121, 125, 125, 123, 125, 121, 118, - 117, 117, 120, 121, 122, 113, 115, 113, 111, 113, 117, 120, 121, 131, 141, 149, - 148, 147, 152, 157, 158, 154, 160, 164, 164, 161, 164, 166, 167, 178, 181, 183, - 184, 184, 183, 184, 186, 186, 184, 183, 183, 184, 184, 183, 181, 182, 184, 184, - 183, 180, 178, 176, 174, 177, 177, 178, 180, 182, 183, 182, 183, 190, 191, 189, - 187, 183, 179, 175, 173, 168, 166, 163, 161, 161, 162, 164, 165, 165, 164, 163, - 162, 163, 164, 166, 167, 167, 165, 163, 162, 163, 165, 169, 169, 166, 165, 166, - 169, 173, 174, 173, 172, 173, 173, 173, 172, 173, 176, 180, 184, 188, 196, 202, - 201, 199, 200, 199, 198, 205, 190, 185, 189, 189, 194, 192, 178, 188, 187, 185, - 178, 171, 167, 171, 174, 172, 163, 157, 147, 126, 155, 153, 159, 171, 163, 159, - 164, 171, 169, 167, 164, 156, 141, 139, 89, 120, 143, 129, 137, 129, 126, 126, - 131, 138, 144, 146, 146, 147, 144, 141, 140, 140, 138, 135, 130, 122, 138, 129, - 111, 116, 119, 117, 118, 121, 122, 121, 124, 120, 117, 119, 122, 126, 124, 121, - 122, 129, 127, 126, 129, 124, 117, 121, 122, 123, 122, 119, 121, 126, 128, 126, - 124, 121, 117, 117, 119, 121, 124, 124, 122, 124, 122, 115, 114, 122, 128, 126, - 128, 141, 153, 153, 152, 155, 159, 160, 161, 170, 177, 176, 171, 165, 166, 170, - 179, 181, 185, 185, 186, 186, 189, 191, 184, 185, 186, 182, 180, 178, 180, 182, - 182, 185, 186, 187, 184, 181, 178, 177, 182, 184, 184, 181, 177, 178, 183, 189, - 202, 196, 188, 179, 177, 177, 182, 184, 188, 183, 178, 171, 169, 167, 168, 168, - 162, 160, 163, 162, 164, 167, 171, 172, 172, 170, 167, 164, 165, 168, 171, 174, - 176, 176, 177, 178, 179, 178, 174, 171, 175, 176, 177, 176, 176, 180, 188, 194, - 195, 198, 199, 197, 197, 200, 196, 191, 191, 193, 202, 200, 185, 181, 194, 196, - 190, 194, 194, 185, 175, 170, 175, 183, 163, 168, 172, 157, 124, 150, 159, 180, - 174, 165, 160, 164, 170, 170, 167, 165, 167, 145, 135, 81, 114, 148, 136, 146, - 142, 135, 129, 127, 130, 131, 130, 126, 135, 134, 133, 133, 134, 136, 138, 139, - 142, 142, 134, 122, 119, 119, 117, 114, 115, 119, 122, 126, 126, 124, 123, 124, - 126, 128, 128, 125, 123, 123, 122, 122, 123, 124, 124, 132, 124, 119, 119, 123, - 125, 123, 120, 122, 124, 125, 125, 128, 130, 126, 118, 122, 128, 131, 112, 114, - 125, 122, 136, 143, 147, 154, 158, 159, 159, 163, 165, 174, 174, 176, 177, 177, - 175, 170, 166, 171, 175, 181, 183, 186, 185, 188, 188, 183, 183, 189, 192, 198, - 195, 191, 183, 186, 183, 180, 177, 176, 176, 178, 180, 174, 179, 185, 186, 183, - 180, 178, 178, 181, 188, 192, 181, 173, 172, 181, 185, 189, 190, 195, 192, 189, - 181, 178, 173, 176, 174, 173, 169, 167, 165, 163, 163, 161, 162, 164, 168, 174, - 180, 185, 188, 193, 188, 185, 185, 182, 174, 168, 167, 174, 178, 183, 185, 186, - 187, 189, 192, 194, 198, 202, 200, 198, 198, 196, 192, 187, 194, 194, 189, 191, - 199, 199, 190, 198, 196, 189, 181, 181, 184, 185, 182, 171, 169, 167, 154, 137, - 143, 155, 154, 170, 165, 163, 162, 165, 166, 166, 166, 157, 146, 140, 94, 107, - 128, 142, 135, 138, 134, 133, 127, 127, 125, 127, 127, 129, 130, 133, 136, 139, - 140, 141, 141, 131, 133, 135, 132, 128, 128, 125, 122, 120, 122, 124, 122, 121, - 121, 121, 125, 127, 130, 130, 124, 122, 121, 121, 122, 123, 124, 124, 120, 118, - 116, 117, 119, 120, 116, 113, 124, 123, 119, 113, 114, 121, 125, 124, 126, 120, - 122, 120, 127, 129, 118, 133, 145, 150, 157, 160, 161, 162, 164, 167, 165, 166, - 169, 173, 173, 170, 165, 161, 166, 171, 176, 180, 184, 185, 184, 183, 183, 184, - 186, 190, 194, 194, 191, 187, 190, 188, 185, 183, 181, 181, 182, 182, 181, 180, - 178, 174, 172, 174, 179, 184, 181, 186, 187, 182, 179, 182, 186, 187, 191, 190, - 188, 184, 180, 179, 181, 183, 182, 181, 179, 178, 178, 180, 183, 185, 183, 182, - 182, 182, 182, 184, 186, 188, 195, 190, 189, 191, 191, 187, 185, 185, 186, 188, - 190, 190, 189, 190, 194, 197, 196, 201, 202, 198, 196, 197, 197, 195, 197, 202, - 200, 193, 193, 199, 198, 189, 195, 195, 190, 183, 181, 183, 181, 176, 169, 165, - 161, 146, 130, 137, 152, 153, 167, 163, 162, 162, 164, 165, 164, 163, 158, 150, - 142, 104, 109, 134, 143, 139, 137, 136, 136, 134, 132, 130, 127, 126, 129, 129, - 128, 128, 129, 131, 133, 134, 132, 133, 134, 128, 127, 130, 126, 124, 121, 121, - 121, 124, 124, 124, 124, 125, 126, 128, 130, 122, 121, 121, 122, 123, 124, 126, - 127, 127, 127, 128, 128, 126, 123, 118, 115, 116, 116, 113, 105, 104, 111, 118, - 120, 114, 109, 118, 119, 116, 105, 102, 135, 148, 153, 160, 163, 163, 164, 165, - 167, 165, 167, 171, 176, 178, 176, 170, 166, 158, 161, 166, 175, 184, 189, 189, - 187, 185, 185, 185, 187, 191, 193, 193, 192, 188, 187, 186, 184, 182, 181, 179, - 179, 183, 180, 176, 171, 169, 171, 177, 182, 178, 181, 182, 182, 184, 189, 189, - 185, 190, 189, 186, 182, 180, 180, 184, 187, 189, 187, 186, 186, 188, 193, 197, - 201, 196, 194, 192, 190, 187, 187, 187, 187, 193, 188, 186, 190, 192, 191, 192, - 194, 197, 197, 196, 194, 192, 193, 196, 199, 199, 202, 201, 196, 193, 196, 197, - 196, 200, 203, 200, 192, 193, 198, 197, 191, 192, 193, 190, 185, 183, 183, 179, - 173, 173, 166, 160, 145, 129, 137, 156, 160, 163, 160, 160, 162, 164, 165, 164, - 163, 156, 154, 142, 114, 106, 139, 140, 140, 142, 143, 144, 144, 142, 138, 134, - 132, 136, 134, 131, 129, 128, 130, 132, 133, 132, 131, 131, 120, 122, 127, 127, - 126, 123, 122, 123, 128, 126, 126, 124, 123, 122, 122, 122, 121, 122, 122, 123, - 125, 127, 129, 130, 125, 127, 127, 125, 119, 114, 110, 107, 113, 117, 122, 118, - 115, 117, 118, 118, 119, 114, 117, 111, 109, 106, 104, 133, 149, 154, 160, 164, - 164, 164, 164, 166, 170, 171, 173, 178, 182, 182, 178, 176, 165, 165, 165, 172, - 182, 190, 191, 189, 187, 186, 185, 186, 188, 192, 195, 196, 187, 187, 187, 186, - 184, 182, 179, 177, 180, 180, 180, 178, 176, 173, 172, 171, 171, 176, 179, 179, - 182, 186, 186, 182, 185, 187, 189, 189, 187, 184, 184, 184, 190, 190, 189, 189, - 190, 193, 196, 198, 193, 192, 190, 189, 187, 188, 189, 191, 194, 188, 185, 187, - 188, 188, 190, 193, 198, 198, 197, 196, 195, 195, 195, 196, 197, 200, 200, 194, - 192, 194, 195, 193, 193, 194, 191, 187, 189, 196, 197, 194, 191, 191, 189, 184, - 183, 185, 182, 176, 174, 166, 160, 148, 133, 139, 157, 163, 160, 158, 159, 162, - 165, 166, 164, 162, 159, 161, 144, 121, 103, 142, 139, 144, 143, 144, 145, 145, - 144, 141, 138, 135, 139, 137, 135, 133, 132, 132, 134, 135, 132, 128, 126, 124, - 128, 134, 134, 133, 131, 130, 128, 125, 125, 123, 121, 120, 119, 119, 118, 124, - 125, 125, 127, 129, 131, 133, 134, 131, 132, 132, 129, 125, 121, 120, 119, 124, - 130, 137, 135, 132, 131, 130, 127, 121, 120, 119, 110, 118, 129, 119, 127, 147, - 153, 160, 164, 163, 163, 164, 166, 170, 170, 170, 173, 177, 179, 179, 178, 182, - 177, 171, 171, 177, 182, 183, 182, 185, 184, 184, 183, 185, 188, 192, 195, 191, - 191, 192, 191, 190, 187, 184, 182, 180, 180, 181, 180, 178, 173, 167, 163, 161, - 169, 176, 176, 177, 181, 185, 186, 188, 190, 191, 191, 188, 186, 185, 185, 189, - 190, 190, 192, 193, 193, 192, 192, 192, 192, 189, 189, 190, 192, 194, 195, 198, - 191, 187, 189, 190, 190, 192, 195, 194, 195, 197, 199, 199, 198, 196, 194, 191, - 196, 197, 193, 191, 192, 191, 189, 189, 188, 186, 184, 187, 193, 195, 193, 188, - 188, 184, 179, 180, 183, 183, 179, 169, 161, 159, 150, 135, 137, 153, 158, 159, - 158, 159, 162, 165, 166, 165, 163, 165, 168, 149, 123, 102, 140, 140, 147, 140, - 140, 140, 140, 139, 138, 137, 137, 135, 136, 136, 136, 136, 135, 134, 134, 133, - 131, 128, 132, 135, 138, 138, 134, 132, 131, 130, 126, 127, 126, 126, 127, 126, - 126, 127, 125, 128, 128, 129, 131, 133, 135, 137, 139, 139, 139, 139, 140, 140, - 140, 138, 132, 136, 136, 133, 132, 134, 135, 133, 86, 108, 126, 110, 107, 114, - 110, 129, 144, 151, 159, 163, 163, 162, 163, 165, 171, 171, 171, 173, 176, 178, - 177, 176, 179, 174, 169, 168, 173, 179, 184, 185, 180, 181, 182, 182, 181, 183, - 186, 189, 189, 189, 190, 190, 189, 187, 184, 183, 185, 181, 177, 174, 173, 171, - 169, 168, 156, 164, 170, 170, 171, 178, 186, 190, 193, 192, 189, 186, 183, 184, - 188, 191, 187, 189, 191, 194, 195, 195, 194, 192, 191, 190, 187, 187, 187, 189, - 191, 192, 194, 188, 185, 187, 190, 190, 193, 196, 194, 195, 198, 201, 203, 201, - 197, 193, 187, 192, 194, 191, 190, 191, 190, 188, 192, 190, 187, 186, 187, 189, - 189, 188, 185, 184, 181, 176, 176, 180, 181, 177, 170, 162, 161, 156, 140, 139, - 152, 157, 161, 159, 159, 162, 165, 166, 166, 164, 161, 163, 151, 117, 99, 128, - 132, 138, 139, 139, 139, 140, 141, 141, 141, 142, 138, 139, 140, 141, 141, 140, - 139, 138, 136, 135, 133, 132, 134, 136, 136, 134, 130, 130, 130, 130, 131, 131, - 132, 130, 129, 130, 130, 126, 126, 126, 127, 129, 130, 132, 133, 126, 125, 126, - 129, 133, 133, 129, 125, 130, 133, 130, 128, 129, 133, 134, 130, 82, 98, 116, - 104, 96, 93, 97, 129, 142, 149, 158, 163, 164, 164, 164, 166, 172, 172, 175, - 179, 181, 180, 175, 171, 171, 170, 170, 171, 174, 179, 184, 187, 179, 182, 185, - 185, 183, 182, 183, 185, 186, 186, 186, 186, 185, 185, 184, 183, 188, 183, 177, - 175, 176, 178, 178, 177, 163, 165, 164, 162, 166, 175, 181, 182, 189, 189, 188, - 187, 186, 187, 190, 193, 185, 187, 188, 190, 192, 191, 191, 191, 189, 188, 187, - 186, 184, 185, 186, 187, 188, 183, 181, 184, 187, 187, 188, 192, 196, 196, 196, - 199, 201, 200, 196, 192, 188, 192, 192, 188, 187, 190, 192, 192, 193, 190, 188, - 187, 187, 185, 183, 182, 186, 187, 184, 180, 180, 181, 179, 173, 174, 164, 163, - 158, 142, 139, 152, 158, 165, 161, 160, 161, 164, 166, 166, 166, 156, 157, 156, - 113, 103, 118, 126, 126, 134, 136, 140, 143, 145, 145, 144, 143, 145, 145, 144, - 144, 143, 143, 143, 141, 136, 136, 136, 128, 130, 133, 136, 136, 134, 135, 136, - 129, 128, 128, 127, 124, 123, 122, 121, 123, 122, 123, 123, 125, 126, 128, 128, - 128, 125, 127, 130, 134, 131, 124, 116, 128, 131, 132, 131, 135, 138, 135, 128, - 132, 104, 91, 92, 112, 116, 104, 122, 142, 149, 158, 164, 165, 165, 166, 167, - 168, 171, 175, 180, 182, 178, 169, 164, 179, 180, 180, 178, 176, 174, 175, 176, - 181, 185, 189, 190, 187, 185, 185, 185, 188, 188, 188, 188, 188, 188, 188, 188, - 186, 184, 182, 183, 186, 187, 185, 183, 172, 167, 158, 153, 158, 168, 170, 167, - 177, 182, 188, 192, 192, 190, 188, 187, 187, 184, 183, 183, 183, 184, 184, 185, - 192, 190, 189, 188, 186, 187, 189, 190, 191, 186, 183, 186, 187, 186, 186, 189, - 198, 196, 194, 194, 196, 196, 193, 190, 190, 192, 191, 186, 185, 191, 195, 196, - 190, 187, 185, 186, 186, 183, 180, 179, 190, 192, 191, 187, 186, 185, 179, 171, - 172, 160, 158, 153, 136, 133, 147, 154, 167, 163, 161, 161, 164, 166, 167, 167, - 159, 160, 168, 119, 115, 120, 130, 125, 121, 126, 132, 137, 140, 139, 136, 134, - 145, 143, 140, 137, 135, 136, 138, 139, 134, 135, 137, 131, 133, 134, 136, 135, - 133, 131, 128, 138, 132, 116, 129, 117, 122, 115, 123, 116, 104, 97, 97, 104, - 107, 106, 101, 113, 120, 124, 116, 111, 112, 116, 118, 126, 127, 128, 129, 132, - 132, 132, 133, 140, 140, 132, 120, 107, 91, 94, 116, 140, 152, 156, 161, 167, - 163, 159, 166, 167, 172, 178, 181, 178, 175, 171, 170, 177, 178, 178, 177, 175, - 175, 177, 179, 178, 183, 189, 194, 195, 191, 186, 182, 181, 182, 184, 188, 190, - 188, 183, 179, 179, 186, 191, 188, 179, 173, 173, 176, 181, 177, 163, 159, 164, - 161, 158, 167, 172, 178, 187, 193, 190, 182, 178, 178, 180, 182, 188, 194, 188, - 179, 178, 182, 192, 187, 181, 181, 186, 190, 191, 191, 192, 187, 183, 183, 187, - 192, 194, 194, 198, 199, 198, 196, 193, 191, 192, 194, 192, 192, 191, 190, 190, - 189, 188, 188, 190, 189, 189, 190, 189, 186, 180, 176, 185, 181, 179, 182, 183, - 179, 176, 177, 171, 168, 163, 155, 142, 135, 140, 149, 161, 158, 158, 160, 163, - 165, 166, 166, 153, 154, 163, 98, 132, 121, 121, 133, 127, 128, 129, 133, 135, - 135, 133, 130, 133, 130, 127, 126, 127, 131, 135, 139, 131, 133, 135, 129, 128, - 128, 129, 130, 128, 126, 123, 122, 127, 116, 119, 105, 113, 103, 100, 113, 108, - 100, 91, 84, 83, 88, 93, 85, 90, 92, 91, 94, 100, 101, 98, 101, 109, - 121, 136, 140, 134, 133, 137, 119, 135, 138, 134, 135, 131, 125, 130, 140, 151, - 155, 159, 164, 161, 158, 165, 167, 171, 177, 179, 177, 174, 172, 172, 176, 178, - 179, 179, 178, 178, 179, 181, 175, 178, 183, 187, 190, 190, 189, 188, 187, 183, - 178, 177, 179, 182, 185, 186, 183, 177, 174, 178, 186, 187, 180, 172, 172, 180, - 180, 172, 163, 149, 144, 152, 163, 176, 179, 172, 179, 196, 194, 178, 182, 185, - 190, 192, 183, 179, 186, 198, 184, 184, 185, 184, 185, 187, 190, 192, 199, 194, - 187, 185, 186, 189, 190, 191, 192, 193, 194, 193, 192, 192, 194, 195, 192, 192, - 191, 190, 190, 189, 188, 188, 191, 190, 189, 187, 185, 180, 173, 168, 177, 173, - 173, 177, 178, 175, 172, 173, 175, 170, 163, 152, 141, 136, 144, 155, 160, 159, - 161, 164, 166, 166, 164, 162, 156, 158, 153, 110, 136, 124, 122, 130, 130, 129, - 128, 130, 132, 132, 131, 129, 132, 133, 134, 134, 132, 130, 128, 127, 131, 132, - 134, 124, 122, 123, 124, 125, 125, 126, 126, 119, 141, 137, 127, 96, 105, 101, - 103, 82, 77, 77, 77, 79, 83, 90, 95, 100, 99, 95, 93, 95, 96, 90, - 85, 104, 102, 109, 121, 123, 119, 124, 136, 138, 151, 145, 129, 131, 131, 124, - 120, 140, 153, 157, 159, 165, 163, 158, 165, 167, 171, 174, 177, 177, 176, 176, - 176, 176, 178, 181, 182, 181, 180, 180, 181, 177, 178, 179, 181, 183, 186, 188, - 190, 189, 184, 177, 173, 174, 178, 181, 183, 175, 179, 183, 183, 181, 180, 182, - 185, 183, 180, 175, 173, 173, 166, 152, 140, 146, 149, 160, 175, 180, 179, 188, - 202, 190, 182, 177, 179, 182, 181, 177, 177, 179, 183, 188, 189, 187, 188, 192, - 196, 201, 196, 189, 185, 185, 187, 190, 191, 191, 193, 194, 194, 193, 192, 194, - 196, 192, 192, 191, 190, 190, 189, 188, 188, 194, 193, 191, 189, 186, 181, 175, - 171, 176, 174, 175, 180, 182, 179, 176, 176, 182, 175, 164, 151, 138, 135, 145, - 158, 159, 160, 165, 168, 169, 166, 162, 160, 159, 162, 136, 127, 141, 129, 127, - 129, 130, 129, 126, 126, 129, 131, 132, 133, 130, 132, 134, 136, 137, 137, 136, - 134, 132, 134, 136, 114, 112, 113, 114, 117, 121, 126, 127, 122, 129, 116, 115, - 92, 98, 92, 93, 85, 75, 72, 80, 92, 95, 84, 72, 80, 81, 83, 89, - 96, 101, 100, 98, 114, 106, 108, 119, 125, 118, 121, 132, 132, 141, 133, 124, - 123, 119, 113, 116, 140, 155, 158, 158, 164, 164, 160, 167, 167, 170, 172, 174, - 175, 176, 178, 179, 177, 180, 183, 184, 182, 180, 179, 179, 184, 183, 182, 181, - 181, 182, 182, 183, 185, 184, 182, 181, 180, 178, 174, 172, 172, 180, 186, 182, - 172, 168, 174, 184, 185, 174, 167, 165, 168, 173, 162, 141, 133, 131, 142, 162, - 171, 169, 175, 190, 194, 189, 187, 189, 191, 189, 183, 179, 181, 184, 187, 188, - 190, 193, 197, 201, 197, 193, 187, 184, 184, 188, 193, 196, 196, 198, 199, 198, - 195, 193, 194, 194, 191, 191, 191, 190, 190, 189, 189, 189, 189, 188, 188, 188, - 188, 186, 182, 179, 181, 178, 179, 184, 186, 182, 179, 179, 185, 178, 166, 152, - 138, 133, 142, 155, 161, 163, 167, 169, 168, 165, 162, 160, 160, 163, 121, 141, - 143, 136, 136, 135, 132, 128, 125, 124, 127, 131, 134, 136, 133, 132, 130, 129, - 130, 134, 137, 140, 133, 135, 138, 99, 96, 97, 98, 100, 105, 109, 111, 125, - 106, 87, 111, 112, 114, 91, 82, 93, 84, 82, 90, 100, 102, 91, 80, 78, - 80, 85, 91, 96, 99, 101, 104, 104, 101, 113, 136, 145, 135, 125, 122, 127, - 132, 135, 139, 131, 104, 87, 96, 134, 152, 157, 155, 159, 162, 162, 169, 167, - 170, 173, 175, 175, 176, 179, 181, 179, 181, 184, 184, 181, 178, 176, 176, 187, - 187, 186, 185, 184, 181, 179, 178, 181, 181, 182, 184, 184, 181, 176, 172, 180, - 174, 169, 169, 174, 174, 169, 165, 169, 175, 182, 170, 147, 145, 144, 127, 130, - 147, 146, 132, 150, 187, 193, 169, 176, 185, 193, 191, 183, 182, 188, 195, 184, - 182, 181, 184, 191, 197, 200, 201, 194, 191, 187, 184, 184, 187, 192, 196, 196, - 198, 199, 199, 196, 195, 194, 195, 191, 191, 190, 190, 190, 190, 189, 189, 183, - 182, 182, 183, 184, 183, 181, 178, 180, 177, 177, 181, 181, 177, 173, 173, 179, - 173, 164, 152, 139, 133, 141, 152, 163, 164, 167, 168, 165, 163, 162, 163, 159, - 159, 118, 149, 144, 145, 146, 146, 139, 135, 130, 127, 128, 130, 132, 132, 140, - 138, 134, 131, 128, 128, 129, 130, 134, 136, 137, 86, 84, 83, 84, 84, 88, - 93, 94, 103, 97, 99, 133, 124, 112, 93, 99, 85, 86, 89, 89, 88, 91, - 98, 105, 101, 99, 99, 101, 100, 96, 97, 101, 98, 97, 105, 119, 129, 124, - 115, 110, 139, 136, 134, 137, 125, 94, 80, 96, 127, 147, 153, 150, 154, 159, - 161, 168, 168, 171, 175, 177, 176, 177, 179, 181, 180, 182, 184, 183, 180, 178, - 177, 177, 183, 184, 186, 187, 186, 184, 182, 180, 181, 179, 178, 178, 181, 183, - 184, 184, 177, 178, 178, 179, 178, 178, 177, 178, 180, 181, 188, 176, 149, 139, - 118, 75, 86, 106, 111, 98, 99, 128, 160, 174, 185, 182, 176, 175, 181, 187, - 185, 178, 183, 180, 178, 183, 192, 198, 200, 199, 198, 196, 193, 188, 185, 185, - 188, 191, 189, 192, 195, 196, 196, 195, 196, 197, 190, 190, 190, 190, 190, 190, - 190, 190, 188, 186, 184, 184, 184, 182, 179, 177, 182, 177, 176, 178, 179, 175, - 172, 173, 171, 167, 161, 152, 140, 135, 142, 152, 162, 164, 167, 167, 164, 161, - 162, 164, 155, 151, 130, 153, 145, 153, 152, 156, 150, 145, 139, 135, 132, 130, - 128, 126, 136, 139, 142, 144, 144, 141, 138, 135, 133, 134, 135, 84, 84, 84, - 86, 90, 94, 98, 99, 87, 101, 111, 131, 107, 97, 87, 100, 98, 98, 98, - 91, 81, 80, 88, 97, 84, 79, 79, 87, 96, 99, 103, 107, 98, 101, 105, - 104, 106, 113, 117, 118, 130, 128, 122, 124, 126, 117, 115, 133, 125, 146, 153, - 149, 154, 161, 164, 171, 172, 175, 177, 179, 178, 178, 179, 180, 180, 182, 183, - 182, 181, 180, 181, 183, 182, 183, 184, 185, 186, 185, 184, 183, 183, 180, 177, - 176, 179, 182, 184, 185, 175, 186, 196, 194, 184, 179, 185, 195, 195, 182, 183, - 180, 164, 157, 116, 43, 52, 46, 54, 64, 53, 46, 82, 133, 178, 179, 180, - 184, 191, 195, 186, 173, 179, 182, 187, 193, 197, 200, 200, 200, 202, 202, 199, - 194, 188, 185, 186, 188, 188, 191, 195, 197, 197, 196, 196, 197, 190, 190, 190, - 190, 190, 190, 190, 190, 193, 191, 188, 186, 185, 183, 179, 177, 184, 179, 176, - 179, 180, 178, 177, 179, 173, 169, 162, 152, 139, 133, 140, 151, 157, 161, 167, - 168, 165, 161, 161, 162, 150, 143, 150, 157, 148, 159, 153, 158, 153, 151, 147, - 143, 140, 136, 131, 127, 129, 133, 140, 146, 150, 151, 150, 149, 136, 137, 137, - 96, 96, 99, 103, 109, 114, 119, 121, 129, 126, 111, 124, 118, 126, 104, 95, - 91, 90, 92, 96, 104, 109, 112, 114, 104, 91, 85, 92, 103, 106, 105, 103, - 94, 113, 128, 128, 129, 138, 143, 142, 134, 141, 138, 136, 144, 139, 129, 127, - 126, 148, 156, 151, 157, 165, 170, 175, 172, 176, 180, 181, 181, 179, 179, 180, - 179, 181, 182, 182, 182, 183, 186, 189, 184, 184, 183, 183, 183, 183, 183, 183, - 186, 182, 183, 180, 182, 180, 180, 176, 187, 184, 187, 188, 194, 191, 188, 183, - 182, 175, 185, 181, 159, 155, 121, 50, 89, 64, 49, 54, 60, 57, 58, 66, - 105, 147, 187, 190, 171, 162, 171, 181, 177, 186, 197, 203, 204, 201, 201, 202, - 203, 204, 202, 198, 191, 187, 187, 189, 194, 197, 200, 200, 199, 196, 195, 195, - 192, 190, 190, 190, 190, 190, 190, 190, 189, 187, 184, 182, 181, 180, 177, 176, - 182, 177, 174, 176, 178, 177, 178, 182, 182, 175, 165, 152, 137, 129, 136, 146, - 149, 158, 167, 171, 167, 162, 161, 161, 147, 140, 166, 160, 150, 161, 148, 153, - 146, 145, 144, 143, 141, 136, 132, 128, 125, 127, 128, 131, 135, 138, 144, 144, - 141, 141, 140, 127, 126, 126, 125, 126, 126, 126, 126, 131, 128, 125, 120, 120, - 121, 126, 127, 121, 120, 112, 109, 119, 123, 125, 135, 127, 121, 114, 109, 108, - 108, 111, 115, 137, 136, 133, 131, 127, 129, 138, 148, 143, 135, 132, 141, 142, - 132, 128, 128, 129, 150, 153, 144, 151, 162, 166, 167, 171, 176, 182, 183, 179, - 174, 175, 177, 177, 181, 185, 187, 186, 185, 185, 186, 184, 185, 186, 186, 187, - 187, 186, 186, 183, 182, 182, 179, 180, 180, 182, 182, 180, 185, 192, 192, 189, - 183, 179, 177, 186, 166, 167, 160, 157, 144, 99, 69, 116, 101, 76, 55, 43, - 40, 42, 48, 48, 83, 88, 143, 158, 180, 189, 183, 190, 195, 199, 196, 196, - 197, 197, 195, 207, 207, 206, 201, 192, 186, 191, 200, 191, 192, 193, 195, 196, - 197, 198, 198, 192, 193, 194, 194, 192, 192, 193, 195, 197, 189, 182, 184, 186, - 183, 180, 179, 181, 184, 178, 179, 184, 178, 172, 179, 177, 164, 171, 150, 145, - 129, 150, 145, 146, 152, 161, 159, 156, 169, 173, 158, 138, 156, 163, 148, 140, - 150, 153, 145, 149, 151, 149, 141, 129, 122, 122, 125, 125, 124, 125, 131, 135, - 135, 144, 152, 137, 160, 140, 129, 130, 129, 129, 128, 127, 126, 125, 120, 121, - 124, 125, 126, 127, 128, 126, 116, 120, 120, 119, 128, 129, 131, 140, 127, 133, - 139, 141, 139, 133, 129, 132, 133, 132, 136, 140, 144, 137, 133, 132, 132, 130, - 133, 141, 141, 135, 139, 147, 130, 149, 153, 145, 152, 162, 165, 167, 173, 177, - 183, 183, 179, 174, 175, 176, 176, 179, 183, 185, 185, 184, 185, 186, 187, 188, - 188, 188, 187, 186, 185, 184, 186, 185, 183, 182, 181, 182, 183, 183, 180, 183, - 187, 187, 184, 182, 181, 182, 188, 166, 166, 154, 153, 142, 122, 65, 97, 100, - 105, 107, 100, 84, 62, 51, 44, 48, 56, 142, 184, 195, 196, 197, 194, 200, - 202, 200, 198, 201, 201, 201, 201, 204, 206, 205, 198, 190, 191, 198, 191, 191, - 192, 192, 192, 192, 192, 192, 190, 192, 193, 192, 191, 190, 191, 193, 196, 189, - 184, 186, 188, 185, 181, 180, 174, 180, 177, 176, 178, 170, 168, 178, 176, 163, - 167, 144, 135, 123, 144, 146, 170, 169, 171, 165, 156, 159, 160, 148, 161, 154, - 157, 165, 158, 142, 141, 153, 148, 118, 97, 96, 102, 102, 105, 111, 125, 119, - 116, 120, 126, 131, 141, 147, 138, 156, 147, 129, 130, 131, 131, 128, 127, 125, - 124, 128, 128, 126, 124, 123, 122, 121, 117, 115, 108, 100, 105, 127, 134, 127, - 125, 123, 128, 131, 127, 119, 116, 120, 125, 141, 131, 125, 129, 137, 137, 134, - 132, 138, 140, 144, 142, 127, 110, 109, 118, 129, 148, 151, 144, 151, 160, 163, - 165, 172, 177, 181, 180, 178, 175, 176, 176, 175, 178, 182, 184, 184, 184, 185, - 186, 190, 190, 190, 189, 188, 186, 185, 184, 187, 186, 184, 182, 181, 181, 182, - 182, 181, 181, 182, 181, 180, 180, 183, 185, 183, 168, 174, 161, 161, 147, 122, - 48, 110, 101, 93, 90, 93, 97, 97, 98, 122, 96, 84, 143, 173, 173, 168, - 173, 190, 195, 198, 196, 194, 198, 199, 198, 195, 200, 207, 210, 204, 194, 192, - 195, 196, 196, 196, 195, 194, 193, 191, 190, 189, 190, 191, 190, 189, 188, 189, - 191, 194, 188, 186, 189, 190, 186, 181, 180, 179, 185, 183, 180, 178, 168, 167, - 179, 178, 169, 169, 145, 131, 126, 152, 158, 151, 150, 160, 167, 160, 156, 153, - 142, 151, 158, 160, 154, 152, 155, 150, 143, 126, 91, 74, 85, 96, 89, 87, - 95, 110, 111, 113, 123, 129, 130, 132, 133, 134, 139, 139, 129, 130, 133, 132, - 132, 128, 126, 125, 134, 127, 120, 112, 111, 113, 116, 115, 99, 112, 114, 108, - 107, 108, 118, 137, 125, 128, 126, 121, 117, 120, 125, 127, 123, 113, 104, 106, - 112, 113, 113, 114, 114, 121, 129, 132, 122, 110, 109, 114, 125, 144, 148, 144, - 151, 158, 160, 165, 171, 172, 177, 179, 179, 177, 179, 180, 176, 179, 182, 184, - 184, 185, 187, 188, 190, 191, 191, 190, 189, 188, 187, 186, 187, 186, 184, 182, - 180, 180, 181, 181, 183, 182, 181, 179, 179, 179, 181, 183, 179, 175, 177, 164, - 161, 157, 96, 69, 113, 105, 99, 97, 102, 106, 107, 106, 105, 102, 104, 138, - 165, 183, 197, 207, 185, 190, 193, 191, 189, 193, 195, 196, 196, 200, 206, 210, - 205, 195, 191, 193, 197, 197, 198, 197, 196, 193, 191, 190, 188, 190, 191, 190, - 188, 187, 188, 189, 191, 187, 187, 191, 192, 186, 181, 180, 187, 191, 185, 181, - 180, 171, 166, 176, 176, 172, 170, 149, 129, 132, 157, 168, 169, 160, 165, 169, - 157, 149, 146, 140, 142, 153, 152, 140, 139, 147, 142, 121, 104, 89, 85, 89, - 84, 75, 77, 89, 91, 98, 106, 112, 116, 117, 121, 123, 123, 120, 125, 132, - 133, 136, 134, 133, 132, 129, 128, 120, 115, 107, 105, 109, 115, 120, 121, 118, - 119, 112, 112, 124, 126, 122, 125, 111, 119, 124, 129, 135, 139, 131, 120, 126, - 125, 129, 133, 133, 126, 122, 121, 113, 114, 116, 119, 119, 117, 121, 125, 121, - 139, 145, 143, 151, 157, 159, 163, 166, 169, 174, 176, 179, 179, 181, 183, 177, - 179, 182, 183, 183, 184, 186, 188, 186, 187, 188, 188, 188, 188, 187, 187, 188, - 187, 185, 183, 182, 182, 183, 183, 185, 184, 182, 181, 180, 178, 176, 176, 177, - 181, 172, 157, 153, 160, 69, 118, 109, 105, 104, 106, 105, 102, 94, 88, 107, - 110, 132, 153, 170, 170, 174, 181, 190, 195, 196, 194, 193, 197, 199, 199, 201, - 201, 205, 206, 201, 193, 190, 192, 191, 192, 193, 193, 193, 191, 189, 187, 189, - 190, 191, 190, 188, 187, 188, 189, 188, 186, 187, 192, 192, 186, 182, 181, 189, - 187, 178, 176, 182, 175, 168, 173, 169, 170, 166, 149, 122, 129, 148, 157, 172, - 156, 150, 147, 139, 141, 152, 154, 154, 135, 129, 140, 138, 119, 111, 112, 99, - 96, 90, 73, 59, 61, 71, 80, 80, 87, 91, 87, 85, 88, 100, 110, 111, - 114, 119, 136, 136, 136, 136, 134, 133, 131, 130, 120, 117, 116, 118, 123, 124, - 121, 118, 127, 122, 114, 120, 141, 141, 122, 110, 120, 123, 122, 119, 125, 131, - 122, 109, 114, 114, 117, 117, 113, 108, 110, 117, 135, 128, 118, 111, 109, 110, - 112, 112, 117, 135, 141, 143, 151, 157, 157, 165, 166, 167, 171, 175, 177, 181, - 183, 184, 180, 182, 183, 184, 184, 184, 186, 188, 185, 186, 187, 188, 188, 188, - 188, 187, 191, 190, 188, 187, 186, 187, 188, 189, 187, 185, 183, 182, 180, 177, - 172, 169, 163, 175, 171, 157, 149, 135, 45, 111, 105, 99, 93, 88, 90, 95, - 101, 106, 109, 92, 124, 152, 182, 177, 177, 194, 194, 198, 198, 195, 194, 197, - 200, 199, 204, 201, 201, 201, 197, 191, 190, 193, 190, 191, 193, 195, 194, 193, - 191, 189, 189, 190, 191, 190, 187, 186, 187, 188, 188, 186, 189, 193, 193, 187, - 184, 185, 189, 185, 175, 176, 186, 183, 175, 179, 170, 173, 164, 149, 117, 128, - 139, 144, 142, 138, 143, 146, 143, 147, 153, 148, 132, 123, 118, 122, 122, 114, - 110, 108, 94, 93, 85, 71, 66, 72, 69, 60, 67, 81, 92, 90, 83, 80, - 82, 84, 93, 108, 114, 137, 137, 134, 133, 131, 131, 131, 131, 133, 130, 129, - 130, 132, 130, 124, 119, 106, 130, 141, 133, 120, 109, 116, 137, 136, 137, 128, - 115, 116, 124, 125, 114, 118, 113, 109, 105, 101, 102, 114, 127, 118, 116, 113, - 111, 114, 116, 115, 112, 114, 131, 139, 142, 150, 155, 158, 167, 169, 169, 171, - 173, 177, 181, 182, 183, 181, 183, 184, 183, 182, 182, 184, 186, 186, 187, 187, - 187, 187, 186, 186, 185, 189, 188, 187, 186, 187, 188, 189, 190, 188, 184, 181, - 179, 178, 175, 170, 167, 154, 164, 164, 147, 138, 97, 67, 88, 93, 96, 100, - 102, 104, 105, 107, 111, 124, 107, 138, 147, 176, 177, 179, 195, 192, 196, 198, - 193, 192, 195, 198, 197, 201, 198, 197, 198, 196, 191, 190, 194, 192, 194, 196, - 197, 197, 195, 192, 190, 188, 189, 189, 188, 185, 184, 184, 186, 190, 189, 191, - 195, 194, 189, 188, 190, 191, 188, 179, 179, 186, 182, 178, 184, 175, 177, 163, - 151, 117, 134, 143, 146, 154, 158, 167, 163, 151, 147, 138, 117, 104, 112, 108, - 97, 97, 107, 108, 95, 84, 83, 81, 81, 82, 81, 73, 63, 70, 80, 88, - 90, 88, 88, 82, 74, 83, 91, 90, 137, 136, 132, 131, 129, 130, 131, 132, - 133, 125, 121, 122, 127, 131, 129, 126, 139, 130, 112, 110, 127, 132, 125, 124, - 107, 116, 121, 116, 116, 122, 120, 108, 95, 91, 95, 98, 98, 95, 98, 105, - 105, 112, 121, 126, 126, 120, 109, 102, 110, 129, 137, 142, 151, 155, 158, 168, - 172, 172, 173, 173, 177, 180, 180, 180, 182, 183, 183, 182, 180, 180, 182, 184, - 188, 188, 188, 187, 186, 185, 183, 182, 185, 184, 183, 183, 184, 185, 187, 189, - 187, 183, 178, 175, 174, 173, 170, 168, 166, 159, 149, 122, 116, 72, 126, 106, - 98, 98, 94, 88, 82, 81, 87, 94, 98, 115, 164, 150, 172, 183, 185, 183, - 195, 199, 200, 194, 193, 195, 198, 197, 198, 195, 195, 197, 196, 192, 191, 194, - 190, 192, 194, 195, 193, 191, 187, 185, 186, 187, 188, 186, 184, 182, 182, 184, - 193, 192, 194, 197, 196, 191, 191, 194, 189, 189, 181, 177, 179, 171, 168, 178, - 172, 174, 156, 149, 117, 140, 148, 150, 146, 145, 144, 130, 121, 128, 130, 114, - 112, 94, 88, 94, 90, 74, 74, 87, 86, 79, 77, 77, 75, 72, 82, 95, - 90, 84, 73, 65, 72, 87, 94, 95, 84, 77, 66, 137, 138, 137, 137, 135, - 134, 132, 130, 131, 128, 125, 113, 98, 103, 108, 102, 96, 112, 118, 119, 119, - 113, 111, 118, 127, 120, 121, 125, 119, 101, 89, 90, 103, 97, 94, 90, 91, - 95, 102, 108, 102, 108, 115, 119, 121, 122, 127, 132, 118, 127, 138, 147, 152, - 156, 157, 160, 173, 173, 175, 176, 178, 182, 185, 189, 186, 185, 184, 183, 183, - 184, 185, 186, 185, 185, 186, 187, 188, 190, 191, 192, 184, 181, 187, 188, 179, - 181, 188, 187, 183, 186, 186, 180, 176, 174, 170, 165, 168, 133, 144, 124, 90, - 111, 123, 98, 111, 105, 101, 96, 93, 90, 92, 94, 84, 126, 154, 162, 172, - 177, 180, 186, 193, 196, 199, 198, 195, 194, 196, 199, 207, 202, 196, 194, 194, - 193, 190, 186, 187, 189, 192, 194, 194, 193, 191, 190, 194, 190, 186, 186, 189, - 191, 189, 187, 198, 197, 196, 197, 197, 194, 188, 183, 192, 189, 185, 179, 174, - 172, 173, 174, 174, 156, 165, 139, 95, 150, 150, 160, 145, 143, 142, 137, 126, - 116, 110, 107, 107, 102, 97, 92, 86, 79, 81, 88, 82, 79, 75, 75, 80, - 83, 82, 79, 86, 89, 92, 89, 77, 70, 79, 92, 80, 73, 68, 138, 138, - 137, 135, 133, 131, 129, 128, 129, 125, 124, 117, 107, 114, 119, 112, 104, 111, - 107, 105, 114, 117, 121, 132, 116, 118, 117, 115, 114, 115, 114, 108, 92, 97, - 104, 105, 102, 96, 93, 93, 104, 114, 130, 136, 130, 115, 99, 91, 130, 125, - 128, 137, 144, 145, 150, 156, 166, 169, 174, 176, 178, 180, 182, 184, 188, 187, - 187, 185, 186, 186, 188, 188, 187, 187, 188, 187, 187, 184, 183, 182, 193, 186, - 192, 192, 190, 190, 196, 188, 191, 187, 182, 173, 173, 172, 169, 161, 149, 145, - 144, 118, 105, 114, 111, 114, 110, 109, 108, 106, 102, 100, 98, 98, 97, 133, - 159, 166, 175, 181, 182, 188, 192, 194, 198, 199, 199, 198, 198, 199, 197, 196, - 195, 195, 195, 192, 189, 186, 190, 189, 188, 187, 187, 188, 190, 191, 192, 186, - 179, 177, 180, 188, 196, 200, 200, 200, 199, 195, 190, 187, 186, 186, 188, 183, - 177, 175, 175, 176, 176, 174, 191, 171, 170, 126, 102, 149, 145, 146, 136, 130, - 126, 120, 118, 125, 135, 142, 121, 112, 107, 104, 102, 94, 90, 93, 91, 90, - 88, 89, 92, 97, 101, 105, 110, 109, 110, 107, 96, 80, 73, 70, 80, 98, - 91, 138, 137, 137, 136, 135, 133, 131, 130, 132, 125, 125, 123, 118, 124, 129, - 121, 116, 113, 98, 91, 97, 97, 95, 101, 108, 119, 123, 116, 115, 120, 114, - 100, 108, 101, 89, 78, 78, 88, 108, 121, 132, 124, 112, 102, 104, 115, 132, - 146, 123, 117, 121, 133, 143, 148, 157, 166, 164, 169, 177, 180, 182, 182, 181, - 181, 188, 187, 189, 186, 188, 187, 189, 188, 185, 184, 189, 188, 190, 186, 186, - 185, 191, 182, 185, 188, 187, 190, 191, 180, 186, 185, 183, 180, 181, 176, 164, - 148, 145, 156, 134, 103, 121, 124, 103, 126, 121, 122, 124, 123, 123, 119, 115, - 113, 110, 142, 160, 167, 178, 185, 184, 188, 191, 192, 197, 200, 203, 202, 199, - 196, 187, 191, 195, 196, 195, 191, 188, 187, 190, 190, 188, 187, 187, 188, 189, - 189, 182, 185, 189, 192, 193, 195, 197, 198, 204, 205, 203, 197, 190, 188, 191, - 196, 189, 181, 174, 173, 178, 180, 177, 173, 171, 162, 160, 108, 124, 160, 156, - 149, 143, 135, 126, 113, 100, 91, 87, 84, 112, 106, 102, 107, 111, 107, 103, - 104, 105, 111, 113, 114, 113, 116, 119, 125, 100, 97, 98, 104, 105, 97, 88, - 78, 75, 103, 98, 137, 135, 136, 136, 136, 136, 135, 133, 136, 128, 128, 129, - 125, 127, 130, 120, 126, 125, 115, 107, 109, 103, 95, 98, 83, 91, 97, 100, - 107, 117, 123, 117, 119, 115, 111, 108, 105, 101, 95, 93, 102, 111, 122, 128, - 128, 119, 108, 101, 104, 113, 122, 123, 130, 142, 152, 154, 161, 166, 175, 179, - 181, 179, 181, 181, 187, 187, 187, 187, 187, 187, 187, 188, 184, 185, 186, 186, - 186, 186, 185, 185, 191, 184, 188, 192, 188, 190, 192, 184, 198, 193, 183, 175, - 174, 180, 181, 177, 158, 153, 123, 96, 125, 135, 111, 126, 128, 130, 132, 134, - 133, 130, 126, 125, 122, 145, 160, 168, 181, 186, 184, 188, 192, 192, 195, 200, - 204, 202, 196, 190, 187, 191, 195, 196, 192, 189, 189, 190, 189, 191, 193, 194, - 194, 192, 190, 188, 183, 189, 196, 199, 197, 194, 193, 194, 205, 204, 201, 197, - 194, 193, 195, 197, 191, 186, 181, 178, 179, 179, 177, 177, 171, 172, 168, 103, - 144, 155, 147, 131, 123, 122, 124, 125, 123, 119, 116, 112, 98, 94, 93, 98, - 103, 101, 102, 106, 107, 113, 117, 119, 119, 115, 112, 109, 119, 113, 109, 112, - 113, 110, 102, 93, 84, 94, 93, 132, 132, 133, 134, 136, 136, 138, 136, 137, - 128, 130, 131, 127, 128, 129, 120, 107, 114, 114, 112, 117, 114, 111, 118, 128, - 114, 102, 95, 89, 84, 88, 96, 109, 113, 122, 135, 142, 133, 112, 94, 125, - 122, 116, 113, 114, 119, 124, 128, 127, 146, 148, 127, 122, 140, 151, 144, 157, - 161, 167, 171, 173, 175, 178, 180, 186, 186, 186, 187, 187, 186, 186, 186, 188, - 187, 184, 182, 181, 180, 179, 180, 183, 180, 187, 189, 181, 183, 188, 185, 186, - 195, 200, 196, 190, 185, 179, 174, 156, 140, 133, 120, 128, 142, 132, 133, 131, - 131, 132, 132, 132, 131, 130, 129, 130, 149, 162, 172, 187, 191, 191, 194, 196, - 194, 195, 199, 201, 199, 192, 187, 194, 196, 196, 193, 189, 188, 190, 194, 193, - 193, 193, 193, 193, 192, 192, 192, 195, 193, 189, 184, 181, 185, 194, 202, 206, - 201, 197, 196, 198, 197, 191, 185, 185, 186, 185, 181, 178, 175, 178, 183, 170, - 176, 166, 101, 151, 152, 154, 142, 155, 146, 136, 124, 113, 106, 102, 97, 107, - 105, 103, 103, 101, 98, 102, 108, 120, 117, 115, 115, 119, 118, 113, 108, 114, - 115, 118, 119, 119, 118, 114, 107, 96, 90, 82, 129, 128, 130, 132, 133, 133, - 134, 135, 134, 125, 128, 134, 128, 128, 132, 127, 106, 109, 104, 98, 100, 99, - 98, 107, 106, 100, 105, 119, 123, 115, 114, 123, 116, 108, 104, 108, 121, 127, - 125, 120, 98, 103, 112, 125, 137, 145, 149, 149, 144, 159, 153, 124, 116, 135, - 149, 144, 157, 158, 163, 167, 171, 174, 179, 183, 185, 186, 186, 187, 187, 186, - 186, 185, 184, 184, 183, 183, 183, 184, 184, 186, 179, 177, 186, 185, 179, 179, - 190, 187, 181, 192, 203, 195, 181, 162, 149, 137, 143, 133, 157, 154, 136, 144, - 148, 147, 139, 138, 138, 137, 136, 137, 137, 137, 136, 154, 167, 179, 194, 195, - 195, 202, 199, 199, 199, 197, 198, 196, 192, 189, 201, 199, 195, 191, 188, 189, - 192, 195, 197, 194, 189, 186, 186, 190, 196, 200, 193, 192, 190, 189, 190, 194, - 199, 204, 212, 205, 200, 201, 205, 202, 191, 180, 175, 180, 183, 181, 176, 174, - 182, 188, 164, 166, 147, 92, 141, 144, 160, 158, 152, 150, 149, 147, 146, 141, - 136, 131, 121, 119, 120, 121, 118, 117, 123, 132, 112, 102, 92, 89, 95, 101, - 103, 102, 108, 119, 129, 134, 136, 134, 129, 122, 121, 118, 102, 132, 131, 131, - 132, 133, 133, 134, 133, 134, 126, 131, 137, 131, 130, 137, 135, 134, 133, 120, - 109, 110, 104, 98, 102, 113, 118, 131, 141, 142, 133, 123, 117, 133, 128, 123, - 117, 115, 108, 100, 93, 100, 103, 108, 118, 127, 132, 132, 131, 133, 135, 130, - 119, 118, 127, 135, 135, 148, 152, 157, 163, 168, 171, 176, 179, 179, 180, 181, - 182, 182, 181, 180, 180, 174, 175, 177, 178, 177, 175, 171, 169, 173, 167, 172, - 173, 170, 174, 184, 181, 184, 179, 166, 147, 138, 141, 150, 155, 149, 142, 164, - 161, 148, 151, 150, 153, 150, 149, 149, 150, 149, 149, 148, 147, 140, 156, 171, - 183, 195, 195, 195, 204, 202, 201, 201, 199, 195, 195, 196, 198, 202, 198, 192, - 189, 189, 191, 193, 194, 194, 193, 191, 191, 192, 194, 198, 200, 188, 191, 197, - 203, 207, 207, 203, 200, 206, 203, 200, 202, 204, 201, 193, 186, 173, 176, 181, - 180, 178, 178, 184, 187, 182, 172, 143, 101, 133, 129, 143, 135, 132, 135, 139, - 143, 144, 140, 129, 122, 129, 127, 130, 136, 140, 142, 147, 151, 145, 135, 129, - 126, 129, 134, 140, 142, 151, 158, 161, 158, 154, 147, 136, 125, 148, 155, 140, - 139, 136, 137, 135, 136, 135, 134, 134, 138, 130, 135, 140, 132, 129, 138, 138, - 135, 132, 122, 121, 129, 126, 115, 115, 121, 129, 131, 124, 126, 135, 138, 132, - 138, 139, 137, 132, 125, 122, 121, 123, 122, 120, 119, 124, 132, 139, 143, 143, - 149, 139, 137, 148, 154, 149, 144, 144, 136, 140, 148, 155, 160, 165, 167, 170, - 175, 176, 178, 179, 179, 178, 176, 176, 172, 173, 173, 170, 162, 151, 139, 132, - 135, 127, 127, 130, 131, 137, 146, 139, 129, 137, 146, 153, 161, 168, 169, 165, - 171, 158, 154, 147, 154, 161, 145, 151, 154, 154, 155, 156, 154, 153, 151, 148, - 140, 158, 174, 184, 194, 191, 191, 203, 203, 203, 202, 197, 194, 194, 199, 204, - 201, 196, 191, 189, 192, 195, 195, 193, 186, 191, 198, 204, 205, 203, 198, 195, - 197, 195, 193, 195, 200, 204, 205, 204, 190, 190, 191, 193, 194, 193, 191, 189, - 181, 181, 181, 181, 181, 182, 182, 181, 177, 162, 137, 118, 146, 144, 150, 138, - 148, 144, 138, 137, 138, 140, 141, 140, 139, 134, 134, 142, 149, 148, 147, 144, - 144, 143, 145, 144, 143, 142, 142, 146, 150, 152, 151, 147, 148, 151, 145, 137, - 134, 142, 138, 138, 129, 128, 130, 136, 134, 133, 133, 139, 136, 135, 138, 140, - 135, 138, 138, 136, 135, 134, 130, 127, 126, 129, 133, 137, 138, 135, 134, 135, - 140, 142, 144, 141, 144, 148, 150, 148, 144, 138, 134, 127, 135, 134, 130, 136, - 139, 145, 157, 148, 149, 151, 153, 154, 155, 155, 153, 160, 154, 147, 142, 144, - 152, 161, 168, 172, 172, 170, 165, 161, 163, 171, 179, 168, 161, 146, 130, 126, - 133, 142, 148, 161, 164, 167, 167, 164, 161, 164, 165, 170, 170, 170, 171, 169, - 169, 170, 170, 166, 166, 166, 166, 165, 164, 162, 161, 163, 158, 156, 157, 157, - 154, 156, 158, 151, 161, 173, 180, 188, 200, 203, 201, 199, 195, 195, 200, 200, - 196, 194, 201, 205, 198, 189, 187, 192, 195, 193, 188, 191, 197, 199, 195, 194, - 197, 195, 189, 187, 196, 203, 202, 196, 194, 200, 207, 201, 194, 188, 191, 198, - 200, 194, 187, 180, 180, 180, 182, 183, 181, 179, 175, 165, 172, 101, 150, 140, - 142, 152, 155, 153, 151, 150, 148, 147, 144, 143, 140, 145, 143, 141, 141, 143, - 148, 154, 156, 150, 149, 150, 150, 150, 149, 147, 147, 149, 150, 158, 162, 158, - 157, 147, 125, 122, 130, 153, 136, 134, 136, 140, 139, 135, 134, 138, 139, 136, - 137, 139, 139, 136, 136, 137, 132, 134, 136, 138, 136, 136, 138, 139, 143, 143, - 143, 143, 144, 148, 150, 150, 145, 146, 148, 149, 148, 147, 148, 147, 138, 149, - 151, 149, 152, 148, 146, 154, 154, 154, 154, 155, 156, 158, 160, 161, 159, 159, - 159, 159, 159, 159, 159, 159, 150, 152, 153, 149, 145, 145, 150, 154, 143, 152, - 161, 166, 172, 176, 174, 169, 171, 172, 173, 173, 170, 170, 172, 173, 173, 173, - 172, 171, 170, 169, 168, 168, 168, 167, 166, 165, 163, 162, 159, 159, 166, 163, - 162, 165, 162, 158, 158, 160, 157, 157, 169, 186, 198, 200, 203, 208, 199, 195, - 194, 197, 197, 192, 192, 198, 199, 196, 190, 187, 189, 193, 196, 198, 195, 199, - 200, 197, 197, 200, 199, 194, 191, 195, 198, 199, 198, 198, 201, 205, 203, 197, - 191, 190, 192, 191, 185, 179, 179, 179, 180, 179, 179, 177, 173, 171, 171, 159, - 112, 149, 145, 148, 154, 149, 153, 153, 151, 152, 154, 155, 155, 155, 152, 150, - 145, 142, 142, 144, 146, 148, 152, 150, 152, 149, 150, 149, 153, 153, 168, 157, - 153, 144, 141, 149, 158, 148, 107, 136, 159, 128, 129, 135, 139, 135, 129, 130, - 137, 138, 135, 135, 139, 141, 138, 139, 141, 133, 137, 142, 145, 143, 140, 140, - 139, 142, 143, 146, 147, 148, 150, 151, 152, 144, 143, 142, 142, 144, 147, 149, - 151, 145, 156, 157, 156, 158, 152, 147, 153, 156, 155, 154, 153, 155, 157, 160, - 162, 162, 164, 167, 170, 170, 167, 164, 162, 173, 176, 179, 178, 175, 172, 173, - 174, 173, 178, 180, 178, 177, 176, 172, 166, 180, 179, 175, 175, 177, 179, 178, - 178, 181, 180, 178, 176, 174, 173, 169, 169, 177, 175, 172, 170, 166, 165, 164, - 164, 166, 164, 166, 170, 168, 163, 161, 162, 162, 153, 163, 187, 200, 195, 197, - 208, 199, 195, 193, 194, 194, 191, 192, 196, 194, 194, 192, 188, 185, 188, 195, - 201, 196, 199, 198, 195, 196, 200, 200, 199, 199, 198, 197, 197, 198, 199, 200, - 199, 205, 202, 197, 194, 192, 188, 184, 181, 181, 179, 180, 181, 181, 180, 176, - 172, 166, 135, 126, 145, 149, 155, 160, 148, 155, 155, 154, 154, 156, 158, 160, - 161, 160, 158, 154, 151, 150, 150, 149, 150, 157, 157, 158, 154, 152, 152, 158, - 161, 153, 152, 161, 162, 155, 152, 150, 135, 142, 104, 137, 124, 125, 129, 134, - 134, 131, 132, 136, 136, 133, 135, 140, 143, 141, 142, 145, 139, 142, 145, 145, - 144, 140, 138, 137, 138, 140, 143, 147, 148, 149, 149, 149, 146, 145, 143, 143, - 146, 149, 152, 154, 151, 159, 157, 154, 159, 158, 156, 165, 159, 159, 160, 160, - 161, 163, 165, 166, 172, 171, 170, 170, 172, 174, 176, 178, 170, 173, 175, 175, - 172, 170, 169, 169, 180, 180, 177, 171, 172, 178, 182, 182, 187, 182, 177, 177, - 179, 181, 180, 179, 183, 181, 180, 179, 177, 176, 172, 172, 182, 180, 177, 174, - 170, 171, 172, 173, 166, 164, 165, 169, 167, 163, 161, 163, 166, 157, 161, 178, - 189, 190, 193, 201, 201, 197, 195, 192, 192, 190, 191, 193, 194, 195, 193, 190, - 187, 188, 192, 195, 194, 194, 192, 191, 192, 195, 198, 198, 203, 201, 199, 197, - 196, 196, 195, 195, 199, 199, 197, 195, 191, 188, 187, 187, 179, 178, 178, 178, - 180, 179, 175, 173, 160, 117, 142, 142, 148, 155, 157, 145, 159, 158, 156, 154, - 153, 154, 155, 157, 161, 161, 159, 159, 159, 159, 158, 158, 159, 161, 161, 157, - 152, 152, 155, 160, 161, 157, 159, 157, 146, 145, 148, 139, 135, 127, 120, 133, - 128, 127, 133, 138, 140, 142, 144, 140, 137, 138, 143, 144, 141, 140, 143, 142, - 143, 143, 142, 140, 139, 139, 140, 137, 139, 143, 145, 147, 147, 146, 147, 153, - 152, 152, 153, 153, 154, 156, 157, 156, 163, 160, 159, 167, 166, 164, 171, 163, - 165, 168, 171, 172, 172, 171, 170, 176, 174, 171, 170, 171, 174, 178, 181, 180, - 181, 181, 180, 179, 178, 178, 179, 167, 173, 178, 180, 183, 186, 184, 181, 189, - 184, 179, 176, 177, 179, 177, 174, 175, 175, 175, 173, 172, 172, 171, 171, 176, - 174, 170, 168, 168, 169, 170, 172, 169, 165, 162, 164, 165, 162, 164, 168, 165, - 164, 163, 166, 177, 190, 197, 198, 200, 200, 198, 194, 193, 193, 192, 192, 192, - 191, 189, 190, 192, 193, 190, 189, 193, 191, 189, 189, 190, 192, 194, 197, 196, - 199, 200, 198, 194, 192, 195, 198, 189, 191, 191, 189, 186, 184, 184, 186, 179, - 178, 176, 173, 173, 170, 166, 164, 161, 121, 160, 145, 147, 147, 149, 143, 160, - 161, 159, 156, 153, 152, 153, 155, 155, 156, 155, 156, 157, 158, 157, 157, 152, - 154, 156, 156, 153, 151, 153, 154, 160, 154, 157, 157, 148, 147, 151, 145, 138, - 131, 162, 140, 132, 128, 134, 141, 144, 146, 146, 145, 142, 142, 144, 142, 137, - 134, 136, 139, 139, 139, 137, 137, 138, 141, 145, 140, 142, 145, 147, 148, 148, - 147, 147, 153, 153, 154, 155, 155, 155, 155, 155, 152, 161, 162, 164, 171, 166, - 158, 161, 160, 163, 167, 171, 172, 171, 168, 166, 173, 173, 173, 173, 172, 171, - 170, 169, 172, 171, 169, 168, 168, 170, 171, 172, 176, 180, 182, 180, 178, 177, - 174, 168, 186, 183, 179, 177, 177, 175, 174, 173, 174, 173, 173, 173, 174, 174, - 175, 175, 171, 173, 170, 169, 169, 171, 171, 172, 173, 168, 164, 166, 167, 165, - 168, 172, 166, 170, 169, 162, 169, 186, 197, 197, 197, 198, 197, 194, 193, 194, - 191, 188, 185, 184, 184, 188, 193, 196, 193, 191, 196, 192, 189, 191, 192, 191, - 193, 197, 187, 192, 197, 197, 194, 194, 197, 200, 190, 190, 190, 188, 185, 182, - 182, 183, 186, 185, 180, 175, 170, 164, 158, 154, 150, 126, 161, 149, 153, 152, - 157, 157, 157, 160, 162, 161, 157, 156, 157, 160, 157, 157, 155, 155, 155, 156, - 155, 155, 149, 150, 152, 155, 156, 156, 155, 155, 148, 143, 151, 159, 154, 150, - 150, 139, 134, 126, 139, 137, 133, 132, 136, 138, 136, 138, 142, 142, 140, 141, - 143, 141, 135, 132, 133, 138, 138, 140, 137, 138, 138, 141, 145, 144, 145, 145, - 146, 146, 146, 146, 146, 148, 148, 148, 149, 151, 152, 152, 152, 150, 157, 159, - 160, 167, 163, 154, 157, 158, 160, 163, 165, 167, 166, 165, 164, 171, 172, 173, - 173, 172, 170, 168, 167, 173, 172, 171, 172, 174, 175, 175, 175, 172, 173, 171, - 167, 170, 178, 183, 184, 181, 181, 182, 179, 177, 176, 176, 175, 176, 176, 176, - 176, 176, 177, 177, 177, 175, 175, 175, 175, 173, 173, 173, 173, 170, 166, 166, - 170, 169, 167, 168, 172, 171, 171, 170, 167, 168, 171, 182, 191, 190, 195, 197, - 193, 192, 193, 191, 184, 183, 182, 183, 184, 185, 188, 193, 197, 197, 192, 191, - 194, 194, 191, 192, 197, 188, 190, 194, 196, 197, 197, 195, 194, 192, 191, 189, - 188, 187, 185, 183, 183, 184, 181, 175, 169, 163, 156, 152, 148, 144, 139, 152, - 148, 157, 156, 160, 165, 155, 160, 163, 164, 160, 158, 159, 161, 161, 160, 158, - 157, 157, 158, 158, 156, 152, 147, 144, 145, 149, 150, 148, 144, 155, 137, 130, - 130, 127, 132, 142, 140, 135, 57, 89, 136, 136, 139, 140, 136, 131, 133, 137, - 135, 134, 136, 140, 140, 136, 134, 136, 142, 143, 142, 141, 138, 138, 138, 140, - 144, 144, 144, 144, 144, 144, 144, 144, 150, 150, 149, 149, 152, 154, 156, 158, - 158, 161, 157, 155, 164, 165, 163, 169, 164, 164, 166, 167, 168, 169, 170, 170, - 174, 173, 171, 170, 170, 173, 175, 177, 169, 169, 170, 172, 175, 175, 174, 173, - 176, 179, 179, 176, 176, 179, 179, 176, 176, 179, 182, 182, 179, 176, 178, 180, - 175, 174, 174, 174, 174, 172, 172, 172, 176, 177, 177, 176, 174, 173, 172, 171, - 166, 164, 167, 171, 171, 167, 166, 169, 178, 171, 170, 176, 169, 156, 163, 180, - 187, 192, 195, 192, 192, 193, 191, 182, 183, 184, 187, 181, 177, 178, 190, 198, - 198, 191, 193, 194, 194, 189, 190, 195, 196, 193, 193, 196, 200, 198, 191, 184, - 187, 185, 183, 183, 184, 184, 182, 182, 170, 168, 163, 158, 153, 149, 144, 140, - 154, 156, 151, 149, 156, 151, 149, 152, 154, 159, 164, 164, 160, 156, 156, 158, - 159, 158, 156, 156, 157, 159, 160, 159, 151, 142, 133, 131, 134, 135, 131, 126, - 131, 120, 126, 137, 132, 124, 116, 102, 117, 84, 109, 134, 134, 136, 136, 137, - 135, 130, 123, 126, 128, 132, 135, 137, 137, 136, 136, 140, 141, 141, 142, 141, - 141, 142, 142, 137, 142, 146, 147, 144, 144, 147, 150, 148, 148, 149, 150, 150, - 151, 154, 154, 154, 152, 151, 150, 152, 155, 161, 164, 158, 162, 166, 168, 167, - 166, 166, 167, 166, 167, 167, 168, 170, 171, 172, 172, 168, 169, 170, 170, 170, - 172, 176, 179, 179, 175, 171, 172, 176, 178, 176, 173, 179, 170, 174, 178, 170, - 168, 175, 176, 180, 176, 172, 170, 169, 169, 171, 173, 171, 172, 173, 173, 172, - 170, 166, 164, 165, 163, 165, 170, 172, 169, 168, 172, 172, 172, 171, 172, 175, - 172, 168, 163, 182, 177, 175, 176, 182, 186, 186, 183, 180, 179, 180, 169, 166, - 181, 189, 171, 184, 191, 191, 187, 190, 186, 187, 196, 195, 194, 192, 190, 188, - 187, 187, 187, 187, 185, 183, 181, 179, 177, 175, 174, 172, 166, 155, 147, 146, - 149, 157, 162, 161, 161, 161, 157, 155, 155, 160, 164, 160, 158, 156, 160, 164, - 164, 157, 151, 155, 156, 157, 160, 160, 153, 140, 128, 114, 115, 115, 116, 120, - 125, 122, 116, 120, 118, 120, 126, 134, 134, 127, 117, 107, 93, 88, 138, 135, - 133, 132, 133, 134, 133, 130, 140, 138, 135, 131, 133, 134, 136, 139, 141, 142, - 143, 144, 143, 144, 144, 144, 141, 141, 142, 144, 146, 146, 146, 145, 148, 148, - 149, 150, 151, 151, 154, 154, 152, 152, 153, 154, 155, 157, 161, 162, 158, 161, - 165, 166, 167, 167, 168, 169, 170, 170, 170, 170, 170, 171, 171, 171, 170, 171, - 172, 172, 171, 172, 174, 176, 177, 174, 170, 172, 175, 177, 175, 172, 180, 169, - 172, 179, 175, 173, 174, 168, 172, 171, 168, 166, 166, 168, 170, 172, 173, 175, - 174, 173, 172, 171, 169, 169, 169, 166, 168, 172, 172, 169, 167, 170, 174, 176, - 177, 179, 181, 181, 177, 175, 174, 165, 155, 153, 158, 166, 172, 175, 179, 173, - 169, 161, 159, 175, 186, 177, 185, 193, 193, 190, 194, 190, 185, 190, 188, 188, - 188, 189, 189, 190, 190, 190, 185, 181, 178, 180, 186, 188, 185, 181, 162, 161, - 156, 152, 151, 155, 160, 162, 164, 165, 164, 161, 157, 154, 155, 157, 161, 159, - 158, 162, 167, 168, 164, 159, 163, 161, 157, 156, 157, 158, 157, 154, 131, 126, - 119, 114, 116, 123, 126, 124, 136, 135, 137, 140, 141, 132, 116, 102, 116, 118, - 116, 133, 129, 128, 129, 130, 130, 130, 129, 138, 135, 132, 129, 129, 130, 131, - 135, 138, 140, 141, 142, 143, 144, 145, 145, 146, 143, 141, 144, 148, 148, 147, - 141, 148, 148, 148, 149, 151, 152, 152, 152, 151, 153, 155, 157, 159, 159, 159, - 158, 159, 161, 164, 165, 165, 166, 169, 171, 171, 171, 170, 169, 168, 168, 169, - 169, 171, 173, 175, 174, 173, 171, 172, 173, 176, 173, 171, 172, 175, 176, 174, - 171, 179, 167, 170, 178, 177, 175, 172, 162, 167, 165, 163, 163, 164, 165, 168, - 171, 175, 176, 174, 172, 169, 170, 171, 171, 173, 170, 171, 173, 172, 168, 167, - 170, 168, 173, 177, 179, 179, 178, 178, 179, 181, 177, 174, 173, 175, 174, 171, - 165, 173, 161, 159, 159, 156, 161, 170, 168, 167, 175, 177, 181, 192, 191, 184, - 186, 183, 184, 186, 187, 188, 188, 187, 186, 184, 176, 170, 171, 176, 177, 170, - 163, 156, 157, 158, 161, 163, 164, 166, 166, 166, 168, 169, 167, 164, 161, 157, - 157, 157, 156, 154, 158, 163, 166, 164, 162, 165, 164, 160, 158, 158, 161, 166, - 167, 162, 157, 149, 142, 142, 147, 149, 148, 145, 137, 128, 123, 122, 120, 115, - 110, 120, 129, 125, 116, 114, 116, 121, 124, 121, 119, 118, 119, 121, 125, 128, - 129, 130, 128, 128, 135, 136, 139, 140, 141, 142, 143, 143, 147, 146, 145, 147, - 149, 149, 147, 143, 149, 148, 149, 149, 151, 152, 153, 153, 153, 154, 156, 158, - 160, 160, 160, 159, 162, 163, 164, 164, 164, 165, 167, 170, 167, 167, 165, 165, - 165, 165, 166, 167, 170, 172, 175, 175, 174, 172, 172, 172, 175, 173, 172, 173, - 175, 176, 174, 171, 177, 169, 172, 177, 173, 173, 172, 161, 164, 163, 162, 161, - 161, 163, 166, 167, 172, 174, 173, 173, 170, 170, 170, 169, 174, 171, 170, 173, - 173, 169, 169, 171, 167, 173, 178, 177, 175, 175, 177, 180, 176, 177, 180, 183, - 182, 178, 170, 164, 172, 161, 165, 171, 164, 159, 160, 157, 160, 165, 166, 171, - 185, 184, 177, 178, 182, 183, 184, 183, 182, 179, 175, 173, 179, 173, 167, 165, - 165, 163, 157, 152, 159, 163, 166, 169, 171, 172, 172, 173, 169, 170, 171, 169, - 168, 166, 166, 164, 158, 156, 154, 156, 160, 163, 163, 163, 164, 168, 170, 170, - 167, 165, 165, 163, 157, 158, 160, 156, 155, 153, 150, 143, 143, 132, 121, 112, - 112, 114, 116, 114, 109, 115, 117, 108, 101, 102, 107, 110, 108, 109, 114, 113, - 115, 122, 127, 130, 131, 131, 132, 136, 136, 138, 139, 140, 140, 143, 143, 147, - 150, 152, 153, 150, 149, 149, 149, 149, 148, 149, 150, 151, 151, 153, 153, 155, - 154, 156, 156, 157, 158, 160, 161, 164, 165, 166, 165, 163, 163, 165, 167, 165, - 164, 163, 163, 164, 166, 168, 170, 167, 169, 172, 173, 172, 171, 171, 172, 173, - 173, 173, 174, 175, 175, 173, 171, 174, 168, 173, 173, 166, 167, 170, 164, 165, - 163, 162, 161, 161, 160, 161, 164, 169, 171, 173, 175, 175, 173, 169, 167, 172, - 169, 169, 172, 173, 171, 170, 175, 176, 179, 182, 181, 178, 177, 179, 182, 176, - 174, 171, 171, 174, 178, 181, 183, 196, 185, 191, 200, 192, 183, 184, 184, 176, - 177, 172, 169, 177, 174, 165, 167, 174, 175, 175, 174, 171, 167, 163, 161, 164, - 165, 166, 166, 166, 165, 167, 170, 168, 169, 170, 172, 175, 176, 175, 176, 171, - 170, 169, 167, 166, 166, 166, 167, 165, 163, 160, 160, 162, 164, 165, 165, 165, - 170, 174, 175, 172, 167, 165, 163, 151, 155, 161, 160, 159, 156, 151, 143, 148, - 145, 143, 139, 136, 126, 117, 108, 106, 105, 113, 114, 102, 96, 99, 103, 104, - 111, 120, 121, 122, 122, 125, 127, 132, 137, 142, 140, 141, 141, 142, 143, 143, - 146, 146, 146, 151, 156, 156, 152, 149, 152, 154, 150, 149, 149, 150, 151, 152, - 153, 154, 155, 155, 156, 155, 156, 157, 160, 161, 163, 165, 166, 166, 164, 164, - 165, 166, 167, 166, 165, 165, 166, 169, 172, 172, 166, 167, 170, 170, 170, 170, - 171, 172, 171, 172, 173, 174, 174, 173, 172, 171, 169, 168, 174, 171, 162, 164, - 169, 162, 163, 163, 162, 162, 160, 160, 160, 163, 167, 171, 175, 178, 178, 175, - 169, 166, 169, 166, 166, 170, 171, 171, 171, 177, 179, 180, 181, 180, 178, 177, - 177, 178, 180, 180, 180, 180, 180, 179, 177, 178, 172, 161, 164, 169, 162, 160, - 167, 171, 176, 178, 171, 165, 173, 168, 165, 169, 173, 174, 175, 174, 173, 171, - 169, 168, 162, 166, 171, 171, 169, 170, 175, 179, 172, 172, 170, 171, 172, 173, - 173, 174, 174, 171, 168, 165, 164, 163, 161, 160, 165, 164, 161, 160, 160, 161, - 161, 162, 162, 163, 163, 164, 163, 163, 163, 165, 161, 165, 168, 164, 164, 164, - 166, 162, 163, 160, 158, 153, 149, 141, 134, 127, 125, 110, 107, 104, 92, 89, - 96, 99, 96, 101, 110, 118, 118, 119, 121, 126, 130, 136, 140, 141, 143, 143, - 143, 143, 144, 146, 146, 147, 151, 153, 153, 154, 153, 155, 152, 150, 148, 149, - 149, 151, 152, 154, 154, 153, 153, 156, 157, 157, 157, 157, 157, 159, 162, 165, - 167, 166, 166, 167, 168, 170, 169, 167, 165, 166, 168, 171, 171, 168, 168, 169, - 168, 166, 166, 168, 170, 167, 169, 172, 173, 172, 170, 169, 168, 167, 166, 171, - 170, 162, 166, 167, 155, 160, 160, 158, 159, 159, 160, 161, 163, 165, 168, 171, - 173, 173, 171, 167, 165, 167, 163, 164, 167, 167, 166, 169, 175, 175, 174, 172, - 171, 172, 172, 171, 170, 168, 172, 178, 179, 176, 168, 159, 155, 180, 174, 177, - 178, 171, 171, 180, 181, 168, 174, 170, 167, 173, 171, 170, 178, 175, 175, 175, - 175, 175, 175, 175, 175, 169, 171, 173, 172, 171, 171, 173, 174, 171, 170, 171, - 170, 170, 170, 171, 173, 174, 170, 168, 167, 167, 165, 161, 158, 161, 161, 160, - 160, 159, 159, 159, 160, 160, 159, 157, 158, 161, 163, 162, 162, 159, 164, 166, - 159, 159, 160, 166, 164, 172, 165, 160, 152, 151, 148, 150, 147, 136, 127, 117, - 77, 71, 77, 88, 90, 80, 78, 82, 98, 103, 110, 117, 122, 126, 126, 127, - 138, 140, 139, 139, 139, 140, 140, 141, 148, 146, 145, 149, 154, 155, 152, 148, - 150, 148, 150, 151, 152, 155, 156, 156, 153, 155, 158, 160, 160, 158, 155, 153, - 153, 157, 162, 165, 166, 166, 167, 168, 171, 169, 166, 164, 164, 165, 168, 169, - 171, 170, 169, 166, 164, 163, 165, 167, 164, 167, 170, 171, 170, 168, 167, 166, - 168, 165, 169, 171, 169, 171, 166, 148, 157, 156, 157, 157, 159, 160, 162, 164, - 163, 166, 167, 166, 168, 165, 164, 163, 168, 163, 163, 166, 167, 164, 167, 173, - 174, 171, 167, 167, 170, 172, 170, 168, 172, 172, 171, 170, 169, 170, 173, 177, - 175, 177, 183, 183, 173, 175, 177, 171, 177, 185, 181, 178, 180, 176, 173, 181, - 174, 173, 173, 172, 172, 172, 172, 173, 176, 174, 173, 176, 179, 182, 181, 179, - 172, 172, 172, 173, 173, 171, 171, 170, 170, 168, 170, 172, 174, 172, 167, 162, - 164, 164, 165, 164, 164, 163, 164, 165, 166, 166, 166, 170, 174, 173, 166, 163, - 161, 167, 171, 166, 165, 165, 168, 166, 166, 166, 167, 164, 160, 152, 144, 138, - 130, 143, 145, 86, 83, 84, 85, 84, 86, 72, 45, 91, 100, 104, 104, 104, - 107, 111, 113, 116, 129, 129, 129, 134, 132, 133, 143, 135, 144, 152, 153, 149, - 147, 147, 150, 151, 147, 148, 155, 156, 154, 156, 160, 161, 163, 166, 166, 163, - 161, 160, 158, 161, 160, 158, 159, 160, 160, 158, 157, 163, 164, 165, 167, 168, - 170, 173, 173, 167, 166, 164, 163, 163, 164, 165, 166, 166, 168, 167, 163, 163, - 168, 170, 168, 169, 175, 179, 175, 169, 168, 171, 177, 168, 167, 165, 162, 159, - 159, 160, 165, 166, 171, 172, 169, 170, 170, 166, 159, 163, 165, 168, 167, 165, - 166, 170, 175, 176, 174, 173, 175, 177, 176, 172, 169, 165, 168, 172, 175, 177, - 177, 175, 175, 178, 180, 180, 180, 179, 180, 182, 184, 184, 184, 183, 182, 180, - 179, 179, 176, 179, 179, 179, 178, 176, 174, 172, 171, 173, 171, 170, 172, 175, - 178, 179, 179, 177, 175, 173, 171, 170, 170, 171, 172, 173, 171, 169, 167, 166, - 165, 166, 166, 169, 172, 168, 159, 160, 164, 166, 163, 168, 165, 163, 165, 169, - 171, 169, 166, 167, 168, 170, 165, 164, 161, 166, 167, 161, 160, 163, 160, 158, - 149, 143, 138, 141, 144, 149, 79, 76, 82, 83, 78, 73, 62, 40, 88, 98, - 104, 102, 98, 101, 105, 109, 121, 130, 127, 127, 138, 138, 135, 139, 146, 147, - 149, 147, 146, 144, 144, 144, 152, 149, 150, 156, 159, 156, 157, 161, 159, 160, - 162, 161, 158, 156, 154, 155, 155, 154, 153, 155, 157, 158, 159, 158, 158, 159, - 161, 162, 163, 164, 167, 167, 170, 169, 167, 166, 165, 166, 166, 167, 164, 167, - 168, 165, 166, 169, 169, 168, 170, 173, 176, 173, 169, 168, 171, 173, 166, 165, - 165, 162, 160, 158, 161, 165, 165, 175, 175, 171, 168, 170, 171, 171, 171, 170, - 168, 168, 168, 170, 170, 170, 171, 170, 170, 171, 174, 174, 172, 169, 169, 170, - 173, 174, 175, 175, 174, 174, 178, 181, 183, 182, 181, 179, 178, 178, 180, 180, - 181, 181, 181, 180, 179, 179, 176, 176, 176, 175, 175, 175, 175, 175, 184, 181, - 178, 177, 178, 178, 177, 176, 178, 178, 178, 177, 175, 173, 170, 169, 169, 168, - 167, 166, 165, 166, 167, 168, 165, 168, 169, 165, 165, 169, 169, 165, 166, 165, - 164, 165, 167, 169, 169, 166, 170, 171, 172, 170, 167, 165, 167, 169, 173, 168, - 165, 165, 166, 163, 155, 150, 153, 152, 149, 81, 78, 89, 96, 87, 79, 74, - 67, 84, 95, 106, 107, 107, 112, 118, 125, 130, 136, 132, 134, 148, 149, 145, - 149, 145, 142, 141, 144, 151, 157, 160, 160, 157, 155, 156, 160, 161, 160, 161, - 163, 157, 158, 159, 158, 155, 154, 153, 155, 151, 150, 150, 152, 156, 158, 158, - 157, 161, 161, 162, 163, 163, 164, 164, 164, 166, 165, 164, 163, 163, 163, 163, - 163, 162, 167, 169, 168, 168, 170, 168, 164, 172, 172, 172, 171, 170, 169, 169, - 170, 166, 165, 165, 163, 161, 160, 163, 168, 166, 176, 178, 172, 168, 170, 175, - 179, 178, 173, 168, 169, 171, 172, 170, 166, 173, 172, 172, 174, 177, 177, 176, - 175, 174, 174, 174, 174, 174, 174, 173, 173, 174, 176, 180, 181, 180, 178, 174, - 172, 176, 177, 179, 180, 181, 180, 179, 178, 176, 175, 175, 175, 176, 178, 180, - 182, 188, 185, 182, 180, 179, 178, 176, 174, 173, 175, 177, 178, 176, 172, 167, - 164, 164, 163, 163, 163, 163, 164, 165, 166, 160, 165, 171, 169, 170, 171, 169, - 165, 166, 167, 166, 165, 165, 166, 168, 169, 163, 164, 165, 164, 162, 160, 160, - 160, 170, 162, 155, 155, 160, 160, 153, 146, 149, 145, 140, 94, 90, 101, 108, - 95, 82, 85, 88, 97, 103, 104, 99, 93, 90, 87, 87, 93, 101, 99, 102, - 115, 118, 116, 120, 117, 119, 121, 126, 134, 142, 149, 152, 156, 155, 155, 157, - 159, 158, 160, 161, 159, 160, 161, 158, 156, 154, 156, 157, 153, 152, 151, 153, - 157, 159, 158, 157, 164, 164, 165, 165, 165, 165, 164, 164, 163, 163, 163, 163, - 163, 164, 164, 165, 165, 169, 171, 169, 169, 172, 171, 167, 175, 172, 170, 170, - 172, 172, 172, 169, 167, 166, 165, 164, 164, 164, 167, 171, 169, 176, 176, 173, - 170, 173, 176, 176, 177, 174, 170, 170, 170, 171, 170, 168, 175, 175, 175, 176, - 177, 177, 177, 177, 177, 176, 175, 174, 174, 175, 176, 177, 171, 172, 173, 175, - 178, 177, 175, 173, 175, 176, 178, 181, 181, 180, 178, 177, 178, 177, 176, 176, - 177, 180, 183, 185, 181, 179, 177, 177, 178, 178, 177, 174, 168, 168, 171, 172, - 171, 168, 165, 163, 162, 162, 161, 161, 161, 161, 161, 162, 163, 166, 169, 170, - 170, 168, 167, 165, 164, 165, 167, 166, 165, 164, 167, 170, 167, 168, 169, 169, - 167, 165, 163, 162, 167, 162, 157, 157, 158, 157, 152, 146, 147, 146, 145, 103, - 97, 103, 103, 85, 74, 80, 86, 77, 82, 88, 96, 106, 117, 122, 121, 115, - 127, 128, 128, 135, 134, 135, 143, 139, 145, 150, 151, 150, 151, 156, 160, 148, - 148, 148, 149, 150, 152, 154, 153, 159, 159, 159, 157, 155, 155, 157, 159, 157, - 155, 154, 155, 158, 159, 158, 157, 161, 161, 162, 162, 162, 162, 161, 161, 163, - 164, 165, 167, 169, 170, 171, 171, 169, 171, 171, 167, 168, 172, 173, 171, 176, - 172, 169, 169, 172, 171, 171, 166, 163, 163, 164, 163, 163, 164, 167, 171, 171, - 173, 173, 172, 174, 177, 173, 166, 170, 172, 172, 171, 169, 169, 171, 174, 173, - 173, 173, 172, 171, 171, 171, 172, 177, 176, 175, 175, 175, 177, 180, 180, 174, - 171, 169, 169, 173, 174, 175, 174, 174, 174, 175, 176, 175, 173, 171, 172, 178, - 179, 177, 177, 177, 179, 182, 184, 178, 177, 177, 178, 179, 180, 179, 174, 167, - 166, 166, 167, 167, 168, 168, 168, 165, 164, 164, 163, 161, 160, 158, 160, 167, - 168, 167, 167, 167, 165, 164, 165, 161, 163, 166, 166, 164, 163, 165, 166, 163, - 162, 162, 162, 161, 159, 156, 154, 154, 155, 157, 155, 151, 147, 143, 143, 139, - 139, 140, 99, 92, 97, 98, 85, 83, 92, 94, 116, 119, 120, 119, 121, 125, - 123, 119, 128, 141, 141, 138, 141, 137, 137, 146, 135, 143, 149, 149, 143, 140, - 143, 146, 147, 148, 150, 148, 150, 155, 156, 153, 154, 156, 156, 156, 155, 153, - 156, 156, 159, 158, 157, 158, 160, 161, 160, 159, 163, 163, 165, 165, 165, 165, - 165, 164, 162, 163, 165, 167, 169, 170, 171, 171, 171, 173, 171, 167, 167, 172, - 174, 173, 172, 169, 166, 165, 167, 168, 166, 163, 160, 161, 161, 160, 161, 162, - 164, 169, 171, 171, 170, 171, 175, 179, 172, 162, 167, 171, 173, 172, 169, 168, - 173, 177, 174, 175, 175, 173, 170, 170, 171, 172, 175, 175, 174, 174, 175, 177, - 179, 179, 179, 173, 168, 167, 171, 171, 171, 168, 170, 170, 170, 168, 168, 167, - 166, 168, 175, 176, 175, 174, 174, 175, 176, 177, 180, 179, 179, 179, 180, 180, - 177, 172, 171, 166, 167, 164, 166, 166, 171, 171, 167, 165, 167, 163, 163, 159, - 159, 159, 172, 170, 165, 166, 164, 163, 164, 167, 164, 166, 170, 172, 172, 169, - 169, 166, 159, 156, 154, 153, 153, 152, 149, 147, 146, 151, 156, 154, 148, 143, - 142, 143, 143, 144, 143, 89, 88, 93, 94, 92, 99, 106, 100, 91, 102, 109, - 110, 112, 118, 123, 127, 131, 141, 138, 136, 143, 140, 136, 144, 144, 148, 151, - 153, 151, 150, 152, 151, 145, 148, 150, 147, 149, 154, 157, 153, 149, 151, 156, - 157, 155, 152, 154, 153, 156, 155, 154, 156, 161, 162, 162, 161, 164, 164, 165, - 166, 166, 166, 166, 166, 161, 162, 163, 165, 166, 166, 165, 165, 167, 170, 170, - 167, 168, 171, 172, 170, 172, 169, 167, 165, 165, 165, 164, 164, 162, 162, 163, - 162, 161, 162, 166, 169, 169, 170, 169, 169, 173, 177, 172, 166, 172, 172, 173, - 173, 173, 174, 176, 177, 174, 175, 175, 174, 171, 171, 174, 176, 174, 173, 173, - 173, 173, 173, 174, 173, 179, 173, 171, 171, 174, 174, 172, 167, 170, 169, 168, - 166, 167, 168, 169, 171, 172, 172, 173, 173, 173, 174, 174, 175, 178, 177, 177, - 177, 178, 177, 175, 171, 172, 170, 168, 165, 166, 166, 169, 169, 169, 168, 169, - 167, 167, 164, 162, 162, 172, 169, 165, 168, 167, 165, 166, 171, 166, 168, 171, - 174, 176, 173, 169, 165, 163, 158, 155, 154, 154, 154, 152, 149, 150, 151, 153, - 153, 151, 150, 151, 152, 156, 157, 157, 87, 87, 90, 88, 86, 96, 95, 79, - 83, 97, 109, 107, 105, 107, 118, 125, 128, 134, 129, 131, 144, 144, 139, 141, - 145, 143, 142, 141, 143, 143, 141, 136, 137, 139, 142, 139, 142, 148, 150, 146, - 147, 150, 155, 156, 155, 155, 154, 154, 153, 152, 153, 155, 159, 164, 164, 163, - 160, 160, 160, 162, 162, 163, 163, 163, 166, 166, 167, 168, 168, 166, 165, 164, - 163, 168, 170, 168, 169, 171, 169, 163, 172, 172, 170, 166, 165, 164, 164, 165, - 164, 167, 166, 165, 165, 165, 169, 171, 167, 170, 171, 169, 170, 175, 176, 175, - 178, 174, 171, 172, 176, 178, 177, 174, 167, 169, 170, 169, 167, 168, 171, 175, - 173, 173, 172, 171, 170, 169, 169, 167, 174, 171, 171, 174, 180, 180, 175, 169, - 172, 171, 170, 168, 169, 172, 175, 177, 172, 172, 175, 175, 177, 177, 178, 177, - 174, 172, 174, 174, 177, 176, 175, 172, 172, 170, 169, 165, 165, 163, 164, 163, - 168, 168, 170, 169, 170, 167, 166, 167, 170, 166, 166, 170, 171, 169, 168, 173, - 159, 160, 162, 168, 171, 169, 163, 154, 147, 142, 137, 135, 136, 137, 135, 133, - 131, 128, 126, 127, 131, 135, 136, 136, 132, 137, 142, 85, 88, 92, 100, 105, - 107, 102, 99, 78, 106, 120, 106, 100, 109, 116, 111, 126, 128, 130, 131, 134, - 134, 134, 134, 137, 141, 141, 136, 134, 138, 137, 131, 132, 133, 135, 134, 132, - 131, 137, 141, 141, 144, 148, 149, 150, 152, 153, 154, 153, 153, 152, 153, 154, - 158, 160, 162, 161, 165, 164, 158, 156, 162, 165, 164, 162, 160, 159, 163, 169, - 171, 170, 167, 173, 167, 166, 171, 173, 169, 168, 172, 169, 168, 165, 162, 161, - 158, 156, 154, 163, 163, 164, 163, 162, 164, 171, 176, 171, 171, 172, 172, 172, - 170, 168, 167, 170, 171, 174, 175, 175, 174, 172, 169, 168, 172, 175, 174, 169, - 167, 170, 174, 171, 172, 173, 174, 174, 173, 171, 170, 175, 175, 176, 177, 177, - 176, 176, 174, 175, 174, 174, 174, 175, 180, 183, 184, 176, 173, 174, 175, 180, - 179, 178, 173, 179, 172, 169, 168, 173, 173, 173, 167, 171, 168, 169, 167, 171, - 170, 172, 170, 172, 171, 175, 173, 173, 166, 163, 159, 169, 162, 166, 168, 159, - 159, 166, 168, 166, 164, 153, 139, 133, 142, 151, 152, 146, 143, 141, 139, 135, - 132, 135, 140, 132, 132, 132, 132, 131, 131, 131, 131, 131, 129, 129, 90, 90, - 91, 92, 93, 88, 82, 76, 83, 102, 110, 105, 104, 114, 117, 113, 118, 120, - 122, 124, 125, 126, 128, 127, 119, 124, 126, 124, 126, 132, 133, 127, 122, 122, - 124, 124, 125, 126, 130, 132, 132, 135, 138, 141, 142, 145, 149, 153, 153, 152, - 152, 151, 152, 153, 156, 157, 161, 165, 165, 159, 158, 160, 160, 157, 161, 163, - 165, 166, 167, 168, 169, 170, 172, 167, 166, 170, 172, 169, 168, 170, 168, 167, - 164, 161, 159, 157, 156, 155, 157, 159, 162, 162, 164, 166, 169, 173, 168, 168, - 169, 169, 168, 166, 164, 163, 171, 171, 174, 174, 174, 173, 171, 170, 166, 170, - 175, 175, 171, 168, 168, 170, 165, 166, 167, 169, 169, 170, 170, 170, 173, 173, - 176, 177, 177, 177, 178, 177, 174, 174, 173, 172, 173, 175, 179, 179, 176, 174, - 172, 173, 175, 176, 173, 171, 169, 167, 165, 168, 173, 174, 171, 168, 168, 172, - 173, 170, 166, 165, 167, 170, 169, 171, 173, 175, 175, 173, 171, 169, 177, 169, - 171, 171, 160, 158, 165, 163, 148, 152, 160, 160, 147, 134, 138, 148, 143, 137, - 136, 140, 145, 143, 136, 129, 131, 131, 130, 129, 128, 127, 126, 126, 130, 130, - 131, 102, 103, 104, 106, 104, 101, 97, 93, 96, 100, 103, 105, 110, 117, 116, - 111, 118, 118, 119, 121, 121, 121, 123, 121, 116, 119, 121, 120, 120, 122, 121, - 115, 118, 117, 116, 117, 120, 122, 124, 124, 132, 134, 136, 138, 142, 146, 151, - 156, 155, 155, 154, 153, 153, 154, 157, 157, 158, 162, 164, 161, 161, 161, 160, - 157, 160, 165, 168, 167, 164, 164, 167, 171, 167, 163, 161, 165, 166, 164, 163, - 164, 169, 167, 163, 159, 156, 153, 153, 152, 153, 155, 159, 161, 161, 162, 164, - 165, 163, 162, 163, 164, 165, 165, 165, 165, 173, 173, 174, 174, 174, 173, 172, - 170, 167, 171, 177, 178, 175, 172, 170, 171, 170, 170, 170, 170, 170, 171, 172, - 173, 172, 172, 176, 175, 175, 176, 175, 175, 177, 178, 176, 175, 175, 176, 178, - 177, 180, 177, 175, 175, 175, 176, 175, 173, 174, 173, 172, 174, 176, 175, 170, - 165, 170, 174, 176, 171, 164, 161, 164, 169, 163, 164, 166, 167, 168, 168, 168, - 168, 171, 161, 163, 164, 154, 150, 156, 152, 156, 147, 150, 158, 152, 136, 141, - 156, 157, 150, 144, 141, 143, 143, 140, 136, 140, 139, 138, 137, 135, 134, 132, - 132, 125, 127, 129, 99, 101, 103, 104, 106, 106, 105, 104, 108, 103, 101, 107, - 112, 111, 111, 110, 116, 116, 116, 116, 115, 114, 113, 112, 114, 114, 116, 114, - 114, 111, 110, 106, 118, 114, 111, 112, 115, 117, 117, 115, 132, 135, 140, 141, - 145, 148, 151, 155, 155, 155, 155, 155, 156, 156, 159, 159, 158, 161, 163, 162, - 163, 164, 165, 165, 163, 165, 166, 165, 163, 163, 165, 168, 167, 164, 163, 164, - 165, 165, 163, 163, 169, 168, 164, 159, 152, 148, 147, 146, 148, 152, 156, 158, - 158, 156, 156, 155, 158, 159, 161, 163, 165, 167, 170, 170, 171, 171, 172, 172, - 174, 174, 174, 173, 168, 170, 174, 175, 173, 171, 171, 171, 176, 175, 173, 172, - 171, 172, 173, 174, 173, 174, 174, 174, 173, 172, 172, 172, 176, 175, 174, 173, - 172, 172, 173, 171, 174, 172, 170, 169, 169, 170, 171, 172, 171, 170, 169, 170, - 171, 171, 169, 167, 173, 174, 176, 171, 168, 165, 167, 169, 166, 164, 164, 162, - 162, 161, 162, 161, 168, 159, 162, 164, 158, 156, 161, 160, 164, 141, 130, 138, - 147, 149, 149, 151, 147, 151, 154, 147, 143, 142, 146, 146, 149, 147, 148, 146, - 146, 144, 144, 144, 144, 146, 147, 105, 104, 104, 103, 102, 99, 98, 98, 107, - 104, 105, 111, 111, 108, 108, 113, 106, 104, 105, 105, 105, 105, 104, 104, 104, - 103, 106, 108, 109, 108, 108, 108, 112, 110, 107, 109, 111, 114, 115, 113, 128, - 134, 141, 144, 146, 146, 148, 148, 147, 148, 149, 151, 152, 153, 155, 155, 160, - 159, 159, 158, 158, 159, 162, 168, 166, 163, 160, 161, 163, 165, 164, 163, 170, - 169, 168, 167, 168, 169, 168, 166, 168, 169, 166, 161, 154, 150, 149, 150, 145, - 147, 151, 155, 158, 158, 156, 155, 159, 160, 160, 162, 164, 166, 168, 169, 168, - 168, 170, 172, 173, 175, 178, 177, 168, 168, 168, 167, 167, 168, 169, 171, 172, - 171, 170, 169, 169, 171, 172, 173, 176, 175, 173, 171, 168, 166, 165, 164, 165, - 164, 162, 161, 159, 159, 159, 160, 160, 161, 160, 160, 160, 162, 165, 167, 161, - 159, 158, 159, 162, 167, 170, 171, 168, 165, 164, 162, 167, 166, 166, 162, 166, - 163, 163, 159, 159, 157, 158, 157, 158, 147, 151, 155, 151, 152, 155, 153, 141, - 134, 127, 128, 141, 150, 147, 139, 126, 135, 145, 147, 150, 152, 150, 142, 148, - 147, 148, 147, 148, 147, 148, 149, 152, 154, 155, 109, 107, 108, 105, 103, 101, - 102, 103, 100, 101, 106, 109, 110, 109, 112, 117, 99, 98, 100, 102, 104, 105, - 105, 106, 106, 104, 103, 106, 106, 103, 103, 107, 110, 109, 109, 110, 114, 117, - 119, 120, 126, 132, 141, 146, 148, 148, 148, 149, 149, 150, 152, 154, 155, 156, - 158, 158, 165, 161, 158, 157, 155, 152, 155, 160, 165, 162, 158, 158, 163, 165, - 164, 161, 166, 166, 165, 162, 163, 165, 164, 160, 165, 168, 170, 166, 160, 156, - 156, 158, 144, 144, 147, 152, 158, 161, 162, 162, 164, 163, 162, 161, 161, 161, - 162, 163, 168, 168, 169, 171, 172, 175, 179, 178, 173, 171, 170, 169, 169, 172, - 174, 176, 169, 169, 170, 171, 172, 174, 176, 176, 174, 172, 169, 166, 162, 159, - 158, 157, 156, 155, 155, 152, 151, 150, 150, 150, 152, 156, 158, 158, 159, 159, - 163, 164, 168, 165, 161, 157, 157, 158, 162, 163, 160, 152, 150, 150, 158, 159, - 158, 152, 154, 151, 152, 150, 152, 150, 152, 151, 150, 139, 141, 146, 141, 141, - 145, 139, 133, 138, 136, 125, 122, 134, 147, 152, 150, 145, 137, 132, 144, 154, - 154, 141, 148, 146, 149, 147, 150, 149, 151, 152, 146, 146, 147, 96, 95, 96, - 94, 93, 93, 97, 99, 96, 101, 104, 106, 107, 112, 114, 113, 103, 103, 104, - 106, 105, 106, 106, 106, 105, 99, 95, 97, 96, 93, 94, 101, 107, 110, 111, - 109, 109, 110, 112, 116, 123, 129, 138, 142, 146, 149, 151, 154, 154, 155, 158, - 160, 161, 161, 162, 161, 164, 160, 161, 161, 157, 151, 152, 158, 163, 162, 160, - 160, 161, 164, 165, 166, 161, 163, 161, 157, 158, 161, 160, 155, 165, 170, 173, - 169, 161, 156, 154, 155, 148, 146, 144, 147, 154, 158, 159, 160, 163, 164, 163, - 162, 162, 163, 165, 166, 170, 170, 170, 170, 171, 173, 176, 176, 175, 173, 172, - 172, 174, 176, 177, 177, 172, 172, 173, 173, 174, 173, 173, 172, 167, 164, 162, - 159, 156, 153, 152, 150, 149, 148, 146, 145, 143, 142, 141, 143, 146, 152, 157, - 155, 156, 153, 157, 157, 168, 164, 162, 155, 152, 148, 150, 149, 147, 143, 141, - 141, 146, 147, 147, 144, 138, 138, 139, 139, 141, 140, 141, 142, 152, 141, 143, - 148, 143, 143, 145, 139, 138, 138, 134, 124, 115, 119, 138, 157, 161, 159, 149, - 134, 136, 147, 152, 147, 150, 149, 150, 149, 151, 150, 151, 151, 153, 151, 153, - 100, 98, 99, 95, 92, 91, 93, 97, 99, 103, 105, 102, 106, 112, 112, 103, - 108, 106, 106, 103, 100, 96, 93, 91, 76, 71, 69, 74, 78, 80, 85, 94, - 100, 104, 104, 98, 93, 90, 91, 95, 110, 115, 122, 129, 135, 141, 148, 152, - 155, 156, 159, 160, 160, 159, 159, 158, 163, 160, 162, 165, 164, 155, 156, 162, - 162, 165, 166, 164, 161, 162, 167, 172, 166, 168, 166, 162, 162, 166, 165, 158, - 164, 169, 171, 169, 158, 150, 147, 146, 155, 150, 145, 144, 147, 150, 151, 153, - 161, 163, 163, 164, 167, 169, 172, 175, 172, 170, 169, 168, 166, 167, 168, 169, - 165, 163, 164, 166, 168, 169, 167, 166, 170, 169, 168, 167, 164, 161, 157, 153, - 158, 156, 154, 152, 148, 147, 147, 145, 137, 136, 135, 136, 135, 133, 132, 134, - 136, 141, 145, 145, 142, 141, 141, 143, 141, 141, 142, 141, 140, 140, 141, 141, - 138, 138, 138, 137, 136, 136, 138, 139, 133, 134, 135, 133, 136, 133, 134, 134, - 130, 119, 120, 127, 124, 124, 126, 121, 126, 118, 119, 128, 125, 110, 109, 123, - 115, 145, 163, 157, 143, 141, 144, 146, 147, 147, 146, 146, 145, 145, 145, 145, - 149, 149, 147, 104, 98, 96, 98, 98, 93, 91, 94, 104, 98, 100, 108, 112, - 109, 105, 106, 102, 95, 104, 91, 87, 78, 54, 72, 62, 61, 61, 60, 60, - 61, 62, 67, 89, 84, 84, 88, 85, 78, 80, 87, 92, 89, 95, 112, 129, - 136, 140, 145, 150, 155, 158, 158, 156, 156, 160, 163, 167, 166, 164, 161, 161, - 160, 161, 163, 165, 167, 168, 168, 168, 168, 169, 169, 162, 161, 161, 165, 169, - 170, 167, 161, 168, 167, 164, 163, 162, 161, 161, 162, 153, 156, 158, 157, 153, - 152, 159, 165, 171, 168, 167, 164, 163, 164, 167, 169, 163, 162, 164, 164, 163, - 162, 158, 157, 153, 155, 157, 157, 155, 156, 159, 162, 159, 154, 151, 151, 153, - 154, 149, 145, 145, 140, 141, 144, 142, 136, 135, 137, 133, 131, 129, 130, 132, - 131, 129, 128, 136, 143, 143, 139, 139, 144, 143, 140, 144, 137, 134, 135, 133, - 128, 126, 132, 131, 132, 132, 132, 128, 126, 123, 122, 122, 120, 118, 115, 117, - 116, 120, 121, 118, 128, 110, 102, 116, 87, 113, 129, 123, 129, 129, 118, 112, - 107, 91, 78, 89, 108, 139, 170, 151, 146, 122, 143, 140, 137, 142, 151, 152, - 144, 144, 148, 151, 151, 151, 58, 59, 59, 58, 58, 57, 57, 57, 59, 60, - 59, 61, 61, 62, 62, 62, 60, 66, 64, 62, 68, 64, 58, 62, 61, 63, - 65, 67, 68, 68, 68, 68, 70, 70, 70, 70, 70, 70, 70, 70, 67, 68, - 69, 70, 71, 72, 72, 72, 69, 73, 73, 70, 71, 74, 74, 72, 74, 73, - 73, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 77, 78, 78, 77, 78, - 79, 81, 81, 81, 81, 80, 79, 79, 78, 79, 80, 81, 81, 81, 81, 82, - 81, 83, 83, 84, 84, 84, 82, 82, 82, 83, 83, 84, 84, 84, 87, 86, - 85, 84, 85, 86, 88, 89, 85, 91, 85, 84, 89, 89, 85, 92, 89, 91, - 92, 93, 90, 91, 92, 93, 90, 92, 93, 94, 94, 94, 94, 93, 88, 95, - 93, 90, 95, 93, 90, 97, 92, 90, 88, 88, 88, 91, 93, 95, 94, 97, - 92, 101, 96, 91, 92, 69, 4, 24, 59, 67, 90, 92, 108, 108, 103, 102, - 91, 92, 102, 102, 97, 101, 104, 101, 101, 104, 104, 102, 103, 106, 107, 106, - 104, 104, 106, 106, 104, 103, 103, 104, 104, 104, 104, 103, 102, 101, 105, 105, - 105, 104, 104, 103, 103, 103, 104, 103, 103, 59, 59, 59, 58, 59, 58, 58, - 58, 55, 56, 58, 59, 60, 62, 62, 60, 62, 63, 63, 62, 61, 62, 64, - 68, 64, 65, 67, 67, 66, 65, 67, 69, 70, 71, 71, 71, 69, 68, 64, - 64, 68, 69, 68, 69, 68, 70, 71, 71, 71, 71, 71, 72, 72, 73, 73, - 73, 75, 74, 74, 73, 73, 74, 74, 75, 71, 73, 75, 75, 74, 73, 73, - 74, 75, 78, 79, 77, 77, 80, 79, 76, 77, 77, 77, 78, 78, 79, 79, - 79, 80, 81, 80, 82, 82, 83, 83, 83, 81, 86, 85, 83, 83, 87, 86, - 85, 83, 84, 83, 85, 84, 86, 85, 86, 84, 87, 88, 89, 87, 87, 87, - 89, 85, 90, 89, 87, 87, 91, 90, 89, 93, 91, 89, 90, 94, 95, 94, - 92, 95, 94, 92, 92, 91, 93, 94, 95, 91, 94, 94, 91, 91, 94, 94, - 91, 99, 94, 96, 95, 101, 84, 93, 66, 1, 25, 58, 67, 97, 95, 105, - 107, 103, 101, 92, 90, 102, 102, 98, 101, 102, 100, 100, 103, 104, 101, 101, - 105, 106, 106, 106, 106, 106, 106, 106, 106, 102, 104, 106, 106, 104, 103, 103, - 104, 106, 106, 104, 103, 103, 103, 103, 103, 101, 108, 105, 58, 58, 57, 57, - 58, 57, 57, 58, 59, 59, 60, 61, 63, 63, 65, 65, 63, 63, 63, 62, - 61, 62, 65, 68, 62, 63, 65, 65, 63, 63, 65, 67, 68, 68, 69, 69, - 69, 68, 67, 67, 71, 70, 69, 68, 68, 68, 69, 69, 71, 71, 71, 72, - 72, 73, 73, 73, 75, 74, 74, 73, 73, 74, 74, 75, 73, 74, 76, 76, - 75, 73, 74, 75, 75, 79, 79, 76, 76, 79, 78, 75, 77, 77, 78, 78, - 78, 79, 79, 79, 80, 80, 80, 81, 81, 82, 82, 83, 81, 86, 86, 83, - 84, 87, 87, 85, 84, 84, 85, 85, 85, 86, 86, 86, 85, 88, 90, 90, - 89, 88, 89, 90, 87, 90, 90, 87, 88, 91, 92, 89, 92, 91, 90, 91, - 93, 94, 94, 93, 94, 94, 94, 93, 93, 94, 95, 95, 93, 96, 96, 93, - 93, 96, 96, 93, 98, 94, 96, 94, 101, 85, 94, 66, 1, 27, 59, 67, - 98, 96, 105, 107, 100, 99, 90, 90, 102, 105, 101, 104, 104, 101, 101, 105, - 105, 102, 103, 106, 106, 106, 106, 106, 106, 106, 106, 106, 102, 104, 106, 106, - 104, 103, 103, 104, 106, 105, 104, 103, 103, 103, 103, 104, 101, 108, 105, 57, - 56, 56, 56, 57, 56, 57, 57, 61, 61, 60, 60, 61, 63, 65, 66, 63, - 64, 63, 63, 62, 62, 65, 67, 62, 64, 65, 65, 64, 63, 66, 67, 67, - 67, 67, 67, 68, 68, 69, 70, 72, 71, 70, 69, 68, 68, 68, 68, 71, - 71, 71, 72, 72, 73, 73, 73, 75, 74, 74, 73, 73, 74, 74, 75, 73, - 75, 77, 77, 75, 74, 75, 76, 76, 79, 80, 77, 76, 78, 77, 74, 77, - 78, 78, 78, 79, 79, 79, 79, 80, 80, 80, 81, 81, 82, 82, 83, 81, - 86, 86, 83, 84, 87, 87, 85, 84, 85, 85, 85, 86, 86, 86, 86, 86, - 89, 91, 91, 90, 89, 90, 91, 87, 90, 90, 88, 88, 91, 92, 89, 90, - 91, 93, 92, 92, 91, 94, 95, 94, 94, 94, 94, 94, 94, 95, 95, 94, - 97, 97, 94, 94, 97, 97, 94, 96, 93, 95, 93, 101, 87, 95, 65, 2, - 27, 60, 68, 98, 96, 105, 107, 98, 98, 89, 89, 103, 106, 103, 105, 105, - 102, 102, 106, 106, 103, 104, 107, 106, 106, 106, 106, 106, 106, 106, 106, 102, - 104, 106, 106, 104, 103, 103, 104, 106, 105, 104, 103, 103, 103, 104, 104, 101, - 108, 105, 57, 57, 56, 56, 57, 57, 58, 58, 61, 60, 58, 57, 58, 60, - 63, 65, 62, 64, 64, 63, 62, 62, 65, 67, 65, 66, 68, 67, 66, 66, - 69, 70, 69, 68, 67, 66, 66, 68, 70, 71, 71, 71, 70, 69, 69, 69, - 70, 70, 71, 71, 71, 72, 72, 73, 73, 73, 75, 74, 74, 73, 73, 74, - 74, 75, 74, 76, 78, 78, 76, 75, 76, 77, 77, 80, 80, 77, 76, 78, - 77, 74, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 81, 81, 82, - 82, 83, 81, 86, 86, 83, 84, 87, 87, 85, 85, 85, 85, 86, 86, 86, - 87, 87, 87, 89, 91, 92, 90, 90, 90, 92, 87, 90, 91, 88, 88, 92, - 92, 89, 89, 92, 94, 93, 91, 90, 93, 96, 94, 94, 95, 94, 94, 95, - 95, 95, 93, 96, 96, 93, 93, 96, 96, 93, 95, 93, 94, 92, 101, 88, - 96, 63, 3, 28, 61, 68, 98, 96, 105, 107, 99, 99, 90, 89, 102, 105, - 102, 104, 104, 101, 102, 105, 105, 103, 103, 106, 107, 107, 106, 106, 106, 106, - 105, 105, 102, 104, 106, 106, 104, 103, 103, 104, 105, 105, 104, 103, 103, 103, - 104, 105, 101, 108, 105, 57, 57, 59, 59, 59, 59, 60, 60, 62, 61, 59, - 57, 58, 59, 63, 64, 61, 63, 65, 65, 63, 62, 64, 66, 65, 67, 68, - 68, 67, 67, 69, 71, 71, 70, 68, 66, 66, 67, 68, 69, 68, 68, 68, - 69, 70, 71, 73, 74, 71, 71, 71, 72, 72, 73, 73, 73, 75, 74, 74, - 73, 73, 74, 74, 75, 74, 76, 78, 78, 76, 75, 76, 77, 76, 79, 80, - 77, 76, 78, 77, 74, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, - 81, 81, 82, 82, 83, 81, 86, 86, 83, 84, 87, 87, 85, 85, 85, 86, - 86, 86, 87, 87, 87, 87, 89, 91, 92, 90, 90, 90, 92, 88, 91, 91, - 89, 89, 92, 93, 90, 89, 92, 94, 93, 91, 90, 93, 96, 94, 94, 95, - 96, 96, 95, 95, 95, 92, 95, 95, 92, 92, 95, 95, 92, 94, 93, 95, - 91, 101, 90, 95, 60, 4, 29, 61, 69, 99, 96, 104, 107, 101, 101, 91, - 90, 102, 104, 100, 102, 103, 100, 100, 104, 104, 101, 102, 105, 107, 107, 107, - 106, 106, 105, 105, 105, 102, 104, 106, 106, 104, 103, 103, 104, 105, 104, 103, - 103, 103, 104, 105, 105, 101, 108, 105, 58, 59, 59, 59, 59, 60, 61, 61, - 64, 63, 62, 61, 61, 62, 64, 64, 61, 63, 65, 65, 63, 63, 64, 65, - 63, 65, 66, 66, 65, 65, 67, 69, 70, 69, 68, 68, 67, 67, 67, 67, - 67, 68, 68, 69, 71, 73, 74, 75, 71, 71, 71, 72, 72, 73, 73, 73, - 75, 74, 74, 73, 73, 74, 74, 75, 73, 75, 77, 77, 75, 74, 75, 76, - 75, 78, 79, 76, 76, 79, 78, 76, 79, 79, 79, 79, 80, 80, 80, 81, - 80, 80, 80, 81, 81, 82, 82, 83, 81, 86, 86, 83, 84, 87, 87, 85, - 86, 86, 86, 86, 87, 87, 87, 88, 86, 89, 91, 91, 90, 89, 90, 91, - 88, 91, 92, 89, 89, 93, 93, 90, 90, 91, 93, 92, 92, 91, 94, 95, - 94, 94, 96, 96, 96, 96, 95, 95, 91, 94, 94, 91, 91, 94, 94, 91, - 95, 94, 95, 90, 100, 90, 95, 56, 5, 30, 62, 69, 99, 96, 104, 107, - 102, 101, 92, 90, 102, 103, 99, 101, 102, 99, 100, 103, 103, 101, 101, 104, - 108, 108, 107, 106, 106, 105, 104, 104, 102, 104, 106, 106, 104, 103, 103, 104, - 104, 104, 103, 103, 103, 104, 105, 106, 101, 108, 105, 57, 57, 58, 59, 59, - 60, 60, 60, 63, 63, 63, 63, 63, 63, 63, 63, 60, 63, 65, 66, 65, - 64, 64, 65, 64, 65, 67, 66, 65, 65, 67, 69, 67, 67, 68, 69, 69, - 69, 68, 68, 69, 69, 69, 70, 71, 72, 73, 74, 71, 71, 71, 72, 72, - 73, 73, 73, 75, 74, 74, 73, 73, 74, 74, 75, 73, 74, 76, 76, 75, - 73, 74, 75, 73, 77, 78, 76, 77, 80, 80, 78, 79, 79, 79, 80, 80, - 80, 81, 81, 80, 80, 80, 81, 81, 82, 82, 83, 81, 86, 86, 83, 84, - 87, 87, 85, 86, 86, 86, 87, 87, 87, 88, 88, 85, 88, 90, 90, 89, - 88, 89, 90, 88, 91, 92, 89, 90, 93, 93, 90, 92, 91, 90, 91, 93, - 94, 94, 93, 94, 94, 96, 97, 97, 96, 95, 95, 92, 95, 95, 92, 92, - 95, 95, 92, 96, 96, 96, 89, 100, 91, 93, 52, 5, 31, 63, 70, 99, - 96, 104, 106, 101, 100, 91, 90, 102, 104, 100, 103, 103, 100, 101, 104, 104, - 102, 102, 105, 108, 108, 107, 106, 106, 105, 104, 104, 102, 104, 106, 106, 104, - 103, 103, 104, 104, 103, 103, 103, 103, 104, 105, 106, 101, 108, 105, 57, 57, - 57, 58, 58, 59, 59, 59, 60, 61, 61, 62, 62, 61, 60, 60, 60, 63, - 65, 66, 65, 64, 64, 65, 66, 68, 69, 69, 68, 67, 70, 71, 63, 64, - 67, 69, 70, 71, 70, 70, 71, 71, 70, 70, 70, 71, 72, 72, 71, 71, - 71, 72, 72, 73, 73, 73, 75, 74, 74, 73, 73, 74, 74, 75, 72, 74, - 76, 75, 74, 73, 73, 74, 72, 76, 77, 76, 77, 81, 81, 79, 79, 79, - 79, 80, 80, 81, 81, 81, 80, 80, 80, 81, 81, 82, 82, 83, 81, 86, - 86, 83, 84, 87, 87, 85, 86, 86, 86, 87, 87, 88, 88, 88, 85, 87, - 89, 89, 88, 87, 88, 89, 88, 92, 92, 89, 90, 93, 93, 91, 93, 91, - 89, 90, 94, 95, 94, 92, 93, 94, 97, 98, 98, 97, 95, 94, 94, 97, - 97, 94, 94, 97, 97, 94, 96, 97, 97, 89, 100, 91, 93, 50, 6, 31, - 63, 70, 99, 96, 104, 106, 98, 98, 89, 89, 102, 105, 102, 105, 104, 102, - 102, 105, 106, 103, 103, 107, 108, 108, 107, 106, 106, 105, 104, 104, 102, 104, - 106, 106, 104, 103, 103, 104, 103, 103, 103, 103, 103, 104, 106, 106, 101, 108, - 105, 61, 61, 62, 62, 62, 61, 60, 60, 62, 61, 60, 61, 63, 64, 63, - 62, 64, 64, 64, 64, 64, 64, 64, 64, 66, 67, 68, 69, 68, 67, 68, - 67, 69, 66, 66, 69, 69, 66, 66, 69, 72, 71, 71, 71, 71, 72, 73, - 74, 76, 75, 73, 71, 70, 70, 71, 71, 74, 75, 76, 77, 77, 75, 74, - 73, 75, 74, 74, 74, 74, 75, 76, 77, 81, 80, 78, 77, 76, 76, 77, - 79, 80, 80, 80, 81, 81, 82, 82, 82, 81, 81, 82, 82, 82, 83, 83, - 84, 86, 86, 85, 85, 87, 87, 86, 85, 91, 85, 88, 90, 84, 87, 92, - 87, 89, 89, 89, 90, 90, 91, 91, 91, 92, 91, 91, 91, 91, 91, 90, - 90, 96, 95, 93, 93, 93, 93, 96, 97, 95, 95, 96, 96, 96, 96, 96, - 96, 95, 97, 96, 92, 92, 96, 97, 95, 102, 94, 99, 96, 98, 87, 92, - 46, 5, 34, 66, 70, 100, 100, 108, 108, 106, 96, 91, 95, 101, 103, 103, - 103, 104, 102, 103, 105, 104, 100, 101, 105, 109, 108, 106, 104, 102, 101, 101, - 100, 102, 106, 107, 104, 104, 106, 104, 100, 109, 107, 103, 100, 100, 102, 105, - 107, 100, 109, 107, 61, 61, 61, 62, 61, 61, 61, 60, 62, 61, 60, 61, - 63, 64, 62, 61, 64, 64, 64, 64, 64, 64, 64, 64, 66, 67, 68, 69, - 68, 67, 68, 67, 70, 67, 67, 70, 70, 67, 67, 70, 72, 71, 71, 71, - 71, 72, 73, 74, 71, 71, 71, 71, 72, 73, 74, 75, 74, 75, 75, 76, - 76, 75, 75, 74, 75, 75, 74, 74, 75, 75, 76, 77, 79, 78, 77, 77, - 77, 78, 79, 81, 80, 80, 80, 81, 81, 82, 82, 82, 81, 81, 81, 81, - 82, 82, 82, 84, 85, 85, 83, 84, 86, 86, 85, 84, 90, 84, 88, 90, - 84, 87, 91, 86, 89, 89, 89, 90, 90, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 92, 93, 92, 91, 91, 91, 91, 93, 94, 95, 95, 96, 96, - 96, 96, 96, 96, 94, 97, 96, 93, 93, 96, 97, 94, 98, 92, 97, 94, - 99, 89, 94, 48, 6, 34, 66, 70, 100, 100, 108, 108, 106, 96, 91, 95, - 101, 103, 103, 103, 104, 102, 103, 105, 104, 100, 101, 106, 107, 107, 106, 105, - 104, 104, 105, 105, 103, 106, 106, 103, 103, 105, 104, 101, 108, 106, 103, 101, - 101, 102, 104, 106, 104, 108, 104, 61, 62, 61, 61, 61, 61, 61, 61, 62, - 61, 59, 60, 62, 63, 61, 61, 64, 64, 64, 64, 64, 65, 66, 66, 66, - 67, 68, 69, 69, 68, 69, 68, 70, 67, 67, 70, 70, 67, 67, 70, 72, - 71, 71, 71, 71, 72, 73, 74, 70, 70, 71, 73, 74, 74, 74, 74, 75, - 75, 75, 74, 74, 75, 75, 76, 75, 75, 74, 74, 75, 76, 77, 77, 77, - 77, 76, 77, 78, 79, 80, 82, 80, 80, 80, 81, 81, 82, 82, 82, 80, - 80, 80, 81, 81, 82, 82, 83, 84, 84, 83, 83, 85, 86, 84, 83, 90, - 84, 87, 89, 83, 86, 91, 86, 89, 89, 89, 90, 90, 91, 91, 91, 90, - 90, 90, 91, 92, 92, 93, 93, 93, 92, 92, 91, 91, 92, 93, 94, 95, - 95, 96, 96, 96, 96, 96, 96, 93, 96, 97, 94, 94, 97, 96, 93, 95, - 90, 95, 93, 99, 92, 97, 48, 6, 35, 67, 71, 100, 100, 108, 107, 106, - 96, 91, 95, 101, 103, 103, 103, 104, 102, 103, 106, 104, 101, 102, 106, 105, - 105, 105, 105, 106, 107, 108, 109, 104, 107, 106, 102, 102, 105, 105, 102, 106, - 105, 104, 103, 103, 103, 104, 104, 106, 108, 101, 61, 62, 60, 60, 61, 61, - 62, 62, 62, 61, 59, 60, 62, 63, 61, 61, 63, 64, 64, 65, 65, 65, - 66, 67, 66, 67, 68, 69, 69, 68, 69, 68, 70, 67, 67, 70, 70, 67, - 67, 70, 72, 71, 71, 71, 71, 72, 73, 74, 72, 73, 74, 75, 74, 73, - 71, 70, 76, 75, 74, 73, 73, 75, 76, 77, 76, 75, 75, 75, 75, 76, - 77, 78, 77, 77, 77, 77, 78, 79, 79, 81, 80, 80, 80, 81, 81, 82, - 82, 82, 80, 80, 80, 80, 81, 81, 82, 83, 85, 85, 84, 84, 86, 86, - 85, 84, 89, 84, 87, 89, 83, 86, 90, 86, 89, 89, 89, 90, 90, 91, - 91, 91, 89, 90, 90, 91, 92, 93, 94, 94, 94, 94, 94, 94, 94, 94, - 95, 95, 96, 96, 97, 97, 97, 97, 97, 97, 92, 96, 97, 95, 95, 97, - 96, 92, 94, 90, 95, 92, 99, 93, 97, 45, 7, 35, 67, 71, 101, 100, - 108, 107, 106, 96, 91, 95, 101, 103, 103, 103, 103, 102, 103, 106, 105, 101, - 103, 107, 105, 105, 104, 105, 105, 106, 108, 108, 105, 107, 105, 101, 101, 104, - 105, 103, 104, 105, 105, 105, 104, 104, 103, 102, 105, 108, 102, 61, 61, 61, - 61, 60, 61, 63, 63, 62, 61, 59, 60, 61, 62, 61, 61, 63, 64, 64, - 65, 65, 66, 67, 68, 66, 67, 68, 69, 69, 68, 69, 68, 71, 68, 68, - 71, 71, 68, 68, 71, 72, 71, 71, 71, 71, 72, 73, 74, 72, 73, 74, - 75, 75, 74, 72, 71, 75, 75, 74, 73, 74, 75, 77, 78, 76, 76, 75, - 75, 76, 76, 77, 78, 79, 79, 79, 79, 78, 77, 77, 77, 80, 80, 80, - 81, 81, 82, 82, 82, 80, 80, 80, 81, 81, 82, 82, 83, 87, 87, 86, - 86, 88, 88, 87, 86, 90, 84, 87, 89, 83, 86, 91, 86, 89, 89, 89, - 90, 90, 91, 91, 91, 90, 90, 91, 92, 93, 94, 94, 95, 94, 94, 94, - 94, 94, 94, 95, 95, 96, 96, 97, 97, 97, 97, 97, 97, 92, 96, 97, - 95, 95, 97, 96, 92, 96, 93, 97, 91, 98, 93, 94, 40, 8, 36, 68, - 72, 101, 100, 108, 107, 106, 96, 91, 95, 101, 103, 103, 103, 103, 102, 103, - 106, 105, 102, 104, 108, 106, 105, 104, 104, 103, 104, 104, 104, 105, 107, 105, - 101, 101, 104, 105, 103, 104, 104, 105, 105, 105, 104, 103, 102, 101, 109, 106, - 62, 61, 60, 60, 60, 61, 63, 65, 62, 61, 59, 60, 61, 62, 61, 61, - 63, 64, 65, 65, 66, 67, 68, 68, 66, 67, 68, 69, 69, 68, 69, 68, - 71, 68, 68, 71, 71, 68, 68, 71, 72, 71, 71, 71, 71, 72, 73, 74, - 69, 70, 72, 74, 75, 76, 77, 77, 74, 74, 74, 74, 75, 76, 77, 78, - 76, 76, 76, 76, 76, 77, 78, 78, 79, 79, 80, 79, 78, 77, 76, 76, - 80, 80, 80, 81, 81, 82, 82, 82, 81, 81, 82, 82, 82, 83, 83, 84, - 88, 88, 86, 87, 89, 89, 88, 87, 91, 85, 88, 90, 84, 87, 92, 87, - 89, 89, 89, 90, 90, 91, 91, 91, 91, 91, 92, 92, 93, 94, 94, 94, - 91, 92, 92, 93, 93, 92, 93, 92, 97, 97, 98, 98, 98, 98, 98, 98, - 93, 96, 97, 94, 94, 97, 96, 93, 97, 95, 98, 91, 98, 93, 93, 35, - 9, 37, 69, 72, 101, 100, 108, 107, 106, 96, 91, 95, 101, 103, 103, 103, - 103, 102, 103, 107, 106, 103, 104, 109, 107, 106, 105, 103, 102, 102, 102, 102, - 104, 107, 106, 102, 102, 105, 105, 102, 104, 105, 105, 105, 105, 104, 103, 102, - 100, 109, 108, 62, 62, 60, 59, 59, 61, 64, 65, 62, 60, 59, 60, 61, - 62, 61, 61, 63, 64, 65, 65, 66, 67, 69, 69, 67, 68, 68, 69, 69, - 68, 69, 68, 71, 68, 68, 71, 71, 68, 68, 71, 72, 71, 71, 71, 71, - 72, 73, 74, 70, 71, 71, 72, 74, 76, 78, 79, 72, 73, 74, 75, 76, - 77, 77, 77, 77, 76, 76, 76, 76, 77, 78, 79, 77, 78, 79, 79, 79, - 78, 77, 77, 80, 80, 80, 81, 81, 82, 82, 82, 82, 82, 83, 83, 84, - 84, 84, 85, 87, 87, 86, 86, 88, 89, 87, 86, 92, 86, 90, 91, 86, - 88, 93, 88, 89, 89, 89, 90, 90, 91, 91, 91, 92, 93, 93, 93, 93, - 93, 93, 93, 91, 91, 92, 93, 93, 92, 92, 92, 97, 97, 98, 98, 98, - 98, 98, 98, 94, 97, 96, 93, 93, 96, 97, 94, 97, 95, 98, 90, 98, - 94, 93, 33, 10, 38, 69, 73, 101, 100, 108, 107, 106, 96, 91, 95, 101, - 103, 103, 103, 103, 102, 103, 107, 106, 103, 105, 110, 108, 107, 106, 104, 104, - 103, 103, 103, 103, 106, 106, 103, 103, 105, 104, 101, 105, 105, 105, 104, 104, - 103, 103, 103, 102, 109, 105, 61, 61, 59, 58, 59, 61, 64, 66, 62, 60, - 59, 60, 62, 63, 61, 61, 64, 64, 65, 66, 67, 67, 69, 70, 67, 68, - 68, 69, 69, 68, 68, 68, 73, 69, 69, 72, 72, 69, 69, 72, 72, 71, - 71, 70, 70, 71, 72, 73, 75, 74, 73, 72, 72, 74, 75, 76, 71, 72, - 74, 76, 77, 77, 76, 76, 77, 76, 76, 77, 76, 78, 78, 80, 76, 77, - 79, 80, 81, 81, 80, 78, 79, 79, 79, 80, 80, 81, 81, 82, 83, 83, - 85, 85, 85, 86, 86, 86, 86, 85, 84, 85, 86, 87, 86, 85, 93, 87, - 91, 92, 86, 89, 94, 89, 89, 89, 89, 90, 90, 91, 90, 90, 93, 93, - 92, 92, 92, 93, 93, 92, 93, 93, 95, 96, 96, 95, 94, 94, 97, 97, - 98, 98, 98, 98, 97, 98, 95, 97, 96, 92, 92, 96, 97, 95, 95, 94, - 97, 89, 98, 96, 94, 33, 11, 38, 70, 73, 100, 99, 107, 106, 106, 97, - 91, 95, 101, 103, 102, 102, 103, 102, 104, 107, 106, 104, 105, 110, 108, 107, - 106, 105, 105, 105, 106, 106, 102, 106, 107, 104, 104, 106, 104, 100, 106, 105, - 104, 103, 103, 103, 104, 104, 106, 108, 101, 58, 58, 58, 59, 59, 60, 60, - 60, 61, 60, 60, 60, 60, 61, 63, 64, 64, 64, 64, 65, 65, 66, 66, - 66, 68, 68, 68, 69, 69, 70, 70, 70, 69, 70, 71, 72, 72, 72, 72, - 71, 69, 70, 72, 71, 69, 69, 71, 72, 72, 73, 73, 74, 74, 75, 75, - 75, 77, 77, 77, 76, 76, 75, 75, 75, 76, 83, 80, 78, 81, 79, 75, - 83, 78, 82, 81, 77, 77, 84, 86, 82, 78, 79, 79, 80, 80, 79, 80, - 79, 81, 90, 87, 83, 87, 84, 81, 89, 80, 85, 86, 84, 85, 89, 85, - 77, 93, 89, 89, 91, 91, 88, 88, 92, 93, 93, 91, 91, 92, 92, 90, - 90, 88, 89, 91, 91, 91, 91, 91, 92, 93, 96, 97, 97, 94, 94, 96, - 97, 95, 96, 96, 95, 94, 95, 96, 100, 92, 95, 97, 96, 93, 91, 92, - 94, 97, 89, 97, 92, 92, 89, 92, 29, 12, 43, 67, 79, 94, 103, 103, - 106, 109, 96, 92, 98, 103, 100, 99, 102, 102, 101, 101, 104, 105, 102, 102, - 106, 103, 105, 107, 106, 104, 103, 105, 107, 103, 107, 107, 104, 103, 105, 104, - 100, 106, 105, 104, 103, 103, 103, 103, 104, 102, 104, 104, 57, 57, 59, 59, - 59, 60, 60, 60, 62, 62, 62, 62, 63, 64, 66, 66, 63, 64, 65, 65, - 65, 66, 66, 66, 68, 68, 68, 69, 69, 70, 70, 70, 70, 71, 70, 71, - 71, 72, 72, 72, 69, 71, 71, 71, 69, 68, 70, 72, 72, 73, 73, 74, - 74, 75, 75, 75, 77, 77, 77, 76, 76, 75, 75, 75, 75, 82, 80, 77, - 81, 78, 75, 82, 78, 81, 81, 78, 79, 84, 85, 81, 80, 79, 79, 80, - 80, 81, 80, 81, 76, 85, 83, 82, 85, 82, 81, 88, 82, 83, 83, 81, - 82, 87, 86, 81, 89, 85, 85, 87, 86, 82, 82, 85, 91, 92, 92, 93, - 93, 91, 89, 87, 90, 90, 92, 92, 93, 94, 94, 95, 93, 94, 95, 94, - 92, 92, 93, 96, 95, 96, 96, 95, 93, 94, 96, 99, 93, 96, 98, 97, - 94, 92, 93, 94, 99, 92, 98, 92, 92, 88, 90, 26, 13, 45, 67, 78, - 94, 102, 103, 106, 108, 97, 91, 98, 102, 99, 98, 100, 102, 101, 101, 104, - 105, 102, 102, 106, 103, 105, 107, 106, 104, 103, 105, 107, 102, 106, 106, 103, - 103, 105, 105, 101, 106, 105, 104, 103, 103, 103, 103, 104, 105, 106, 106, 57, - 58, 59, 59, 60, 60, 60, 60, 63, 63, 64, 64, 64, 65, 67, 67, 63, - 65, 65, 65, 66, 66, 66, 66, 68, 68, 68, 69, 69, 70, 70, 70, 71, - 72, 70, 69, 70, 71, 73, 74, 69, 71, 71, 71, 69, 69, 70, 73, 72, - 73, 73, 74, 74, 75, 75, 75, 77, 77, 76, 76, 76, 76, 75, 75, 74, - 81, 78, 75, 79, 76, 73, 80, 76, 79, 80, 78, 80, 83, 83, 80, 84, - 84, 82, 82, 82, 83, 84, 85, 81, 88, 86, 83, 88, 86, 83, 90, 91, - 91, 89, 88, 89, 95, 95, 93, 95, 92, 91, 93, 93, 90, 91, 95, 90, - 92, 93, 93, 93, 91, 90, 88, 93, 93, 92, 92, 91, 92, 93, 93, 95, - 95, 96, 95, 95, 96, 99, 101, 96, 97, 96, 95, 93, 92, 94, 97, 94, - 97, 98, 98, 96, 94, 95, 95, 102, 94, 100, 94, 93, 88, 89, 24, 13, - 45, 67, 79, 94, 102, 103, 106, 106, 95, 90, 97, 102, 99, 97, 100, 102, - 101, 101, 104, 105, 102, 102, 106, 104, 105, 106, 106, 104, 104, 105, 106, 101, - 105, 105, 103, 103, 106, 106, 102, 106, 105, 104, 103, 103, 103, 103, 104, 107, - 107, 107, 58, 58, 59, 60, 60, 60, 61, 61, 63, 63, 64, 63, 64, 65, - 67, 67, 64, 65, 65, 66, 66, 66, 67, 67, 68, 68, 68, 69, 69, 70, - 70, 70, 72, 72, 69, 68, 69, 71, 73, 75, 70, 71, 72, 71, 69, 69, - 70, 73, 72, 73, 73, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, - 76, 75, 74, 80, 77, 74, 78, 75, 72, 80, 75, 77, 79, 80, 80, 81, - 80, 80, 87, 87, 85, 83, 83, 85, 86, 88, 87, 92, 88, 85, 90, 86, - 82, 87, 83, 83, 81, 81, 84, 86, 86, 85, 87, 84, 84, 87, 88, 87, - 88, 93, 91, 93, 92, 92, 90, 89, 90, 91, 91, 90, 90, 90, 90, 91, - 92, 92, 92, 93, 94, 95, 95, 98, 101, 104, 95, 97, 97, 95, 92, 92, - 93, 96, 95, 97, 98, 98, 97, 97, 96, 96, 101, 94, 100, 94, 93, 89, - 90, 24, 14, 46, 68, 79, 94, 102, 103, 106, 105, 94, 89, 97, 101, 98, - 97, 100, 102, 101, 101, 104, 105, 102, 102, 106, 105, 105, 105, 105, 105, 105, - 105, 105, 100, 104, 105, 103, 104, 107, 107, 103, 106, 105, 104, 103, 103, 103, - 103, 104, 107, 107, 106, 58, 58, 60, 60, 60, 61, 61, 61, 62, 62, 63, - 63, 63, 64, 66, 66, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, - 68, 68, 69, 69, 70, 72, 71, 69, 68, 69, 71, 73, 75, 70, 72, 72, - 72, 71, 70, 72, 73, 72, 73, 73, 74, 74, 75, 75, 75, 76, 76, 76, - 76, 76, 76, 76, 75, 73, 79, 76, 73, 77, 74, 71, 79, 76, 77, 78, - 81, 82, 80, 79, 81, 90, 90, 88, 85, 84, 86, 87, 88, 85, 88, 84, - 82, 87, 84, 79, 83, 81, 81, 81, 84, 86, 85, 81, 80, 84, 80, 78, - 81, 81, 78, 77, 81, 81, 81, 79, 77, 74, 75, 79, 82, 77, 79, 79, - 82, 85, 87, 88, 90, 89, 91, 92, 92, 92, 93, 97, 100, 95, 96, 97, - 96, 94, 92, 91, 94, 96, 97, 97, 98, 98, 98, 97, 96, 98, 91, 99, - 94, 94, 90, 90, 25, 15, 47, 69, 80, 95, 102, 103, 106, 105, 94, 89, - 96, 101, 99, 97, 100, 102, 101, 101, 104, 105, 102, 102, 106, 105, 105, 105, - 105, 105, 105, 105, 105, 100, 104, 105, 103, 104, 107, 107, 103, 106, 105, 104, - 103, 103, 103, 103, 104, 105, 105, 105, 59, 59, 60, 60, 61, 61, 61, 62, - 62, 62, 62, 62, 63, 64, 66, 66, 65, 65, 65, 65, 66, 66, 66, 67, - 67, 67, 67, 68, 68, 69, 69, 70, 71, 71, 70, 69, 70, 71, 73, 74, - 70, 72, 72, 72, 71, 71, 72, 75, 73, 73, 73, 74, 74, 75, 75, 75, - 75, 75, 76, 76, 76, 76, 77, 76, 74, 81, 77, 74, 78, 75, 72, 79, - 80, 78, 78, 82, 82, 79, 78, 82, 89, 89, 87, 86, 85, 84, 85, 85, - 82, 85, 79, 76, 83, 82, 76, 78, 73, 69, 71, 76, 76, 72, 69, 67, - 69, 64, 62, 63, 60, 55, 54, 57, 52, 53, 51, 48, 44, 45, 49, 55, - 48, 50, 54, 59, 64, 68, 70, 72, 85, 88, 91, 91, 90, 91, 93, 96, - 94, 96, 97, 97, 94, 93, 92, 94, 96, 96, 96, 97, 99, 99, 98, 96, - 96, 90, 98, 94, 94, 89, 89, 24, 16, 48, 70, 80, 95, 102, 103, 106, - 105, 94, 89, 97, 102, 100, 98, 102, 102, 101, 101, 104, 105, 102, 102, 106, - 106, 105, 104, 104, 106, 106, 105, 104, 101, 105, 105, 103, 103, 106, 106, 102, - 106, 105, 104, 103, 103, 103, 103, 104, 105, 104, 104, 59, 59, 60, 61, 61, - 61, 62, 62, 63, 63, 64, 64, 64, 65, 67, 68, 65, 65, 65, 66, 66, - 66, 67, 67, 67, 67, 67, 68, 68, 69, 69, 70, 70, 70, 70, 71, 71, - 72, 71, 71, 71, 72, 74, 73, 72, 72, 73, 75, 73, 73, 73, 74, 74, - 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 75, 83, 79, 76, 80, - 77, 74, 81, 83, 78, 78, 81, 81, 78, 78, 84, 84, 85, 84, 83, 83, - 81, 79, 78, 78, 79, 70, 65, 71, 67, 59, 59, 40, 33, 32, 37, 37, - 32, 28, 30, 33, 28, 26, 28, 25, 22, 20, 23, 22, 25, 28, 27, 23, - 21, 24, 27, 22, 26, 31, 35, 39, 40, 40, 41, 64, 71, 77, 83, 86, - 89, 93, 96, 93, 97, 98, 99, 97, 94, 94, 95, 95, 95, 94, 96, 99, - 99, 98, 95, 96, 90, 98, 93, 93, 87, 86, 20, 17, 48, 70, 81, 95, - 103, 102, 106, 105, 95, 90, 98, 103, 101, 100, 103, 102, 101, 101, 104, 105, - 102, 102, 106, 107, 105, 103, 104, 106, 107, 105, 103, 102, 106, 106, 103, 103, - 105, 105, 101, 106, 105, 104, 103, 103, 103, 103, 104, 106, 105, 104, 59, 59, - 60, 61, 61, 62, 62, 62, 65, 65, 65, 65, 65, 66, 68, 69, 65, 65, - 65, 66, 66, 67, 67, 67, 67, 67, 67, 68, 68, 69, 69, 69, 68, 70, - 71, 72, 72, 72, 71, 70, 71, 72, 74, 74, 72, 72, 74, 75, 73, 73, - 73, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 78, 77, 85, - 82, 78, 82, 79, 76, 82, 86, 80, 78, 82, 81, 78, 79, 85, 79, 79, - 78, 78, 77, 75, 73, 71, 66, 66, 54, 47, 48, 42, 32, 28, 30, 19, - 16, 20, 19, 14, 13, 16, 23, 19, 18, 22, 23, 20, 22, 24, 13, 18, - 24, 25, 21, 17, 17, 19, 18, 20, 24, 25, 26, 23, 19, 19, 33, 43, - 54, 64, 73, 80, 86, 91, 90, 95, 98, 99, 97, 96, 96, 97, 96, 94, - 93, 95, 98, 99, 97, 94, 98, 91, 99, 93, 91, 85, 83, 17, 17, 49, - 70, 81, 95, 103, 102, 106, 106, 95, 90, 98, 104, 102, 101, 104, 102, 101, - 101, 104, 105, 102, 102, 106, 107, 105, 103, 104, 106, 107, 105, 103, 103, 107, - 107, 104, 103, 105, 104, 100, 106, 105, 104, 103, 103, 103, 103, 104, 108, 107, - 105, 60, 62, 64, 63, 61, 60, 61, 63, 61, 62, 65, 67, 67, 67, 67, - 66, 64, 63, 61, 61, 62, 64, 67, 69, 70, 69, 68, 66, 66, 67, 68, - 69, 73, 71, 69, 70, 74, 75, 73, 71, 71, 72, 75, 75, 73, 73, 75, - 76, 76, 77, 77, 78, 78, 77, 77, 76, 72, 75, 78, 78, 75, 74, 75, - 79, 84, 84, 84, 83, 83, 83, 84, 84, 77, 80, 82, 81, 76, 74, 75, - 75, 70, 64, 67, 67, 56, 54, 56, 49, 33, 31, 23, 21, 25, 19, 15, - 21, 19, 12, 16, 16, 11, 17, 21, 10, 25, 21, 19, 21, 19, 15, 15, - 17, 8, 18, 16, 23, 16, 6, 22, 27, 28, 22, 28, 10, 25, 14, 20, - 11, 19, 29, 32, 30, 42, 67, 86, 91, 90, 99, 96, 93, 97, 97, 97, - 104, 96, 95, 96, 97, 97, 98, 99, 99, 99, 93, 99, 91, 92, 91, 90, - 21, 16, 54, 67, 84, 99, 99, 107, 104, 107, 90, 89, 101, 101, 102, 105, - 102, 101, 105, 98, 107, 107, 98, 105, 102, 104, 104, 105, 105, 105, 104, 103, - 103, 104, 105, 105, 106, 106, 105, 105, 104, 106, 105, 105, 104, 104, 105, 105, - 106, 101, 103, 104, 57, 59, 61, 60, 58, 58, 59, 60, 63, 64, 65, 65, - 65, 64, 65, 64, 66, 65, 64, 64, 65, 67, 69, 70, 69, 68, 68, 67, - 67, 68, 68, 69, 73, 71, 69, 71, 73, 75, 73, 71, 71, 72, 75, 75, - 73, 73, 75, 76, 76, 76, 77, 77, 77, 77, 76, 76, 78, 80, 81, 80, - 77, 76, 77, 80, 82, 84, 83, 82, 82, 81, 80, 79, 75, 76, 79, 79, - 78, 76, 74, 71, 65, 50, 44, 39, 26, 26, 29, 22, 18, 21, 19, 19, - 24, 19, 17, 26, 18, 14, 17, 17, 11, 17, 19, 10, 27, 22, 21, 23, - 21, 18, 18, 20, 10, 15, 6, 15, 14, 6, 18, 18, 13, 11, 19, 5, - 18, 12, 19, 14, 16, 19, 21, 25, 31, 40, 58, 74, 92, 96, 92, 92, - 103, 105, 100, 102, 99, 97, 97, 97, 97, 97, 97, 97, 100, 95, 101, 93, - 92, 89, 87, 17, 17, 54, 68, 84, 99, 99, 107, 104, 107, 90, 90, 101, - 101, 102, 105, 102, 101, 105, 98, 107, 107, 98, 105, 102, 103, 104, 104, 105, - 105, 104, 104, 103, 104, 105, 105, 106, 106, 105, 105, 104, 106, 105, 105, 104, - 104, 105, 105, 106, 102, 104, 105, 57, 58, 60, 60, 58, 58, 59, 61, 65, - 64, 64, 63, 62, 62, 63, 63, 65, 65, 65, 66, 67, 68, 68, 69, 67, - 68, 68, 69, 69, 68, 68, 68, 71, 70, 69, 70, 72, 73, 73, 72, 72, - 73, 75, 75, 73, 73, 75, 76, 75, 75, 76, 76, 76, 76, 75, 75, 81, - 81, 81, 80, 77, 77, 78, 80, 79, 81, 82, 82, 81, 80, 78, 77, 79, - 76, 73, 71, 67, 62, 55, 46, 44, 27, 22, 21, 13, 17, 21, 14, 7, - 14, 14, 17, 22, 16, 15, 26, 18, 15, 19, 18, 12, 17, 20, 11, 21, - 16, 16, 18, 18, 14, 15, 18, 16, 13, 0, 10, 13, 7, 15, 12, 6, - 8, 15, 5, 14, 11, 19, 16, 18, 13, 14, 23, 22, 19, 31, 52, 76, - 87, 90, 92, 101, 101, 98, 105, 101, 99, 99, 98, 97, 96, 96, 95, 100, - 96, 103, 95, 93, 89, 84, 12, 18, 55, 68, 84, 98, 99, 107, 104, 106, - 91, 91, 102, 101, 101, 104, 101, 101, 105, 98, 107, 107, 98, 105, 102, 103, - 103, 104, 105, 105, 104, 104, 103, 104, 105, 105, 106, 106, 105, 105, 104, 106, - 105, 105, 104, 104, 105, 105, 106, 103, 105, 106, 60, 61, 64, 63, 62, 62, - 63, 65, 64, 63, 62, 61, 61, 62, 64, 65, 62, 63, 64, 65, 66, 66, - 65, 65, 66, 67, 68, 70, 70, 69, 68, 67, 70, 70, 70, 71, 71, 72, - 73, 73, 72, 73, 75, 75, 73, 73, 75, 76, 74, 75, 75, 76, 76, 75, - 75, 74, 78, 78, 77, 76, 76, 76, 77, 78, 79, 78, 79, 80, 78, 76, - 73, 72, 69, 62, 54, 49, 45, 40, 34, 24, 22, 10, 13, 19, 19, 22, - 21, 10, 9, 11, 7, 8, 15, 11, 6, 16, 15, 14, 18, 17, 9, 12, - 17, 9, 12, 9, 7, 10, 9, 7, 8, 11, 15, 13, 0, 7, 11, 4, - 13, 8, 8, 12, 15, 9, 9, 10, 15, 14, 20, 14, 14, 19, 19, 18, - 23, 33, 43, 67, 84, 88, 91, 88, 92, 108, 99, 99, 98, 98, 98, 97, - 97, 97, 98, 95, 103, 96, 95, 89, 83, 10, 19, 56, 68, 84, 98, 99, - 107, 105, 106, 91, 92, 103, 101, 100, 103, 101, 101, 105, 98, 107, 107, 98, - 105, 102, 102, 103, 104, 105, 105, 105, 104, 104, 104, 105, 105, 106, 106, 105, - 105, 104, 106, 105, 105, 104, 104, 105, 105, 106, 104, 106, 106, 60, 62, 65, - 64, 63, 63, 65, 66, 61, 60, 61, 61, 62, 64, 67, 68, 63, 64, 65, - 66, 66, 66, 65, 65, 65, 66, 68, 69, 70, 69, 68, 68, 69, 69, 70, - 70, 71, 71, 73, 73, 72, 73, 75, 75, 73, 73, 76, 76, 74, 75, 75, - 76, 76, 75, 75, 74, 76, 76, 75, 76, 77, 78, 78, 76, 77, 74, 72, - 68, 65, 60, 56, 53, 43, 35, 27, 24, 25, 26, 25, 21, 22, 11, 13, - 18, 15, 17, 14, 2, 15, 10, 0, 1, 11, 10, 5, 11, 14, 14, 19, - 17, 8, 11, 16, 10, 12, 9, 9, 11, 12, 9, 10, 13, 12, 14, 3, - 10, 9, 0, 11, 10, 11, 18, 17, 15, 10, 14, 15, 16, 17, 19, 16, - 13, 18, 27, 27, 21, 22, 45, 61, 73, 84, 87, 90, 102, 96, 97, 98, - 98, 98, 99, 99, 99, 96, 93, 102, 96, 95, 89, 83, 10, 21, 57, 69, - 84, 98, 99, 108, 105, 105, 92, 94, 104, 101, 99, 102, 101, 101, 105, 98, - 107, 107, 98, 105, 102, 102, 103, 104, 105, 105, 105, 105, 105, 104, 105, 105, - 106, 106, 105, 105, 104, 106, 105, 105, 104, 104, 105, 105, 106, 104, 106, 106, - 58, 59, 62, 62, 61, 61, 63, 65, 59, 59, 61, 62, 64, 66, 68, 69, - 68, 68, 68, 68, 68, 68, 68, 68, 65, 66, 67, 68, 69, 69, 69, 69, - 68, 69, 71, 71, 70, 70, 73, 74, 72, 73, 75, 75, 73, 73, 76, 77, - 75, 75, 76, 76, 76, 76, 75, 75, 77, 77, 77, 78, 80, 80, 79, 74, - 69, 63, 58, 52, 45, 39, 34, 31, 29, 24, 17, 13, 13, 16, 16, 16, - 27, 15, 14, 14, 11, 15, 19, 12, 17, 12, 0, 0, 12, 14, 9, 17, - 13, 15, 21, 19, 9, 13, 19, 14, 15, 12, 11, 13, 13, 10, 11, 13, - 10, 16, 9, 16, 11, 0, 12, 13, 11, 18, 14, 19, 10, 22, 19, 20, - 14, 20, 18, 12, 17, 29, 27, 17, 23, 30, 33, 49, 79, 92, 89, 91, - 94, 97, 97, 98, 99, 100, 100, 101, 96, 93, 102, 95, 94, 89, 83, 10, - 22, 58, 69, 84, 97, 99, 108, 106, 104, 92, 95, 106, 101, 98, 101, 100, - 101, 105, 98, 107, 107, 98, 105, 102, 101, 102, 103, 104, 105, 105, 105, 105, - 104, 105, 105, 106, 106, 105, 105, 104, 106, 105, 105, 104, 104, 105, 105, 106, - 103, 105, 106, 55, 57, 60, 60, 59, 60, 61, 63, 60, 61, 63, 65, 66, - 66, 67, 67, 70, 69, 67, 67, 66, 67, 68, 69, 66, 66, 66, 67, 68, - 69, 70, 71, 67, 70, 71, 71, 70, 70, 72, 75, 72, 73, 75, 75, 73, - 73, 76, 77, 76, 76, 77, 77, 77, 77, 76, 76, 78, 77, 77, 79, 80, - 79, 74, 66, 52, 45, 38, 32, 26, 23, 20, 18, 20, 19, 16, 12, 9, - 9, 10, 10, 20, 14, 16, 18, 14, 20, 27, 23, 13, 14, 9, 8, 15, - 12, 11, 22, 11, 13, 20, 18, 8, 12, 19, 14, 16, 13, 12, 13, 13, - 10, 11, 14, 12, 18, 13, 22, 17, 6, 15, 15, 12, 18, 10, 18, 10, - 25, 18, 19, 17, 21, 23, 20, 19, 19, 21, 24, 26, 26, 21, 32, 62, - 78, 82, 89, 95, 99, 99, 99, 99, 99, 99, 99, 99, 95, 103, 94, 93, - 87, 81, 8, 23, 59, 70, 84, 97, 99, 108, 106, 103, 92, 96, 106, 101, - 98, 101, 100, 101, 105, 98, 107, 107, 98, 105, 102, 101, 102, 103, 104, 105, - 106, 106, 105, 104, 105, 105, 106, 106, 105, 105, 104, 106, 105, 105, 104, 104, - 105, 105, 106, 102, 103, 104, 56, 58, 60, 60, 60, 60, 62, 64, 62, 64, - 65, 67, 67, 67, 66, 65, 69, 67, 65, 63, 63, 65, 67, 68, 67, 67, - 66, 65, 66, 68, 70, 71, 68, 70, 72, 71, 69, 69, 71, 74, 71, 72, - 75, 75, 73, 74, 76, 77, 75, 75, 76, 77, 78, 77, 78, 77, 78, 78, - 75, 76, 75, 69, 62, 52, 33, 26, 22, 18, 15, 17, 17, 17, 3, 7, - 11, 14, 12, 12, 14, 17, 11, 11, 19, 23, 16, 16, 17, 11, 7, 15, - 15, 13, 13, 5, 5, 20, 10, 10, 18, 16, 7, 11, 19, 14, 23, 19, - 17, 19, 18, 14, 14, 17, 15, 20, 14, 25, 23, 13, 19, 16, 15, 19, - 7, 17, 8, 26, 14, 16, 20, 20, 27, 30, 21, 9, 15, 31, 21, 28, - 24, 23, 36, 50, 66, 90, 95, 99, 99, 98, 99, 98, 97, 97, 103, 98, - 104, 94, 90, 84, 78, 5, 24, 60, 70, 84, 97, 99, 107, 105, 103, 92, - 97, 107, 101, 97, 100, 100, 101, 105, 98, 107, 107, 98, 105, 102, 101, 102, - 102, 103, 104, 105, 105, 105, 104, 105, 105, 106, 106, 105, 105, 104, 106, 105, - 105, 104, 104, 105, 105, 106, 101, 103, 103, 61, 61, 61, 61, 62, 63, 64, - 65, 65, 65, 65, 65, 64, 66, 70, 74, 68, 68, 68, 69, 69, 70, 70, - 69, 65, 66, 67, 67, 68, 69, 69, 70, 72, 72, 73, 72, 73, 71, 70, - 70, 75, 74, 73, 73, 73, 75, 76, 76, 69, 70, 71, 73, 75, 77, 78, - 78, 88, 74, 74, 81, 68, 51, 38, 23, 22, 15, 12, 13, 14, 12, 8, - 3, 5, 7, 13, 15, 13, 17, 22, 26, 16, 14, 18, 38, 10, 21, 21, - 21, 12, 22, 8, 13, 17, 7, 14, 19, 10, 22, 25, 15, 12, 19, 20, - 12, 26, 21, 24, 23, 13, 12, 16, 11, 19, 26, 22, 19, 23, 19, 15, - 22, 25, 21, 17, 16, 18, 22, 22, 22, 10, 19, 23, 17, 13, 14, 16, - 16, 13, 18, 24, 25, 22, 27, 47, 73, 95, 90, 86, 94, 102, 102, 99, - 98, 101, 98, 96, 96, 83, 89, 75, 6, 27, 62, 71, 84, 98, 99, 106, - 101, 103, 83, 96, 102, 102, 107, 100, 104, 101, 98, 105, 107, 99, 101, 106, - 102, 104, 104, 105, 105, 105, 104, 103, 103, 103, 104, 104, 104, 104, 103, 102, - 101, 105, 105, 105, 104, 104, 103, 103, 103, 101, 101, 102, 61, 61, 60, 59, - 59, 59, 61, 61, 65, 65, 67, 66, 65, 66, 70, 72, 68, 69, 69, 70, - 69, 70, 70, 70, 66, 66, 67, 68, 68, 68, 69, 69, 72, 72, 72, 72, - 71, 70, 70, 71, 73, 74, 74, 74, 74, 77, 77, 76, 74, 73, 75, 75, - 77, 79, 80, 81, 81, 75, 76, 72, 52, 36, 27, 16, 15, 11, 9, 9, - 12, 12, 11, 8, 10, 10, 12, 15, 18, 20, 21, 19, 18, 12, 20, 22, - 17, 13, 23, 25, 14, 23, 10, 16, 19, 6, 11, 16, 9, 17, 21, 18, - 19, 26, 27, 23, 21, 17, 21, 22, 13, 15, 20, 17, 21, 28, 24, 21, - 25, 21, 17, 23, 21, 17, 13, 15, 18, 20, 16, 12, 21, 24, 22, 19, - 18, 21, 18, 12, 12, 16, 21, 23, 20, 21, 32, 54, 80, 93, 97, 93, - 96, 103, 105, 101, 101, 100, 97, 99, 86, 89, 74, 5, 27, 62, 70, 85, - 98, 100, 106, 102, 104, 85, 97, 103, 102, 106, 98, 101, 101, 99, 105, 107, - 99, 101, 106, 102, 101, 102, 102, 103, 103, 102, 101, 101, 104, 105, 105, 105, - 105, 104, 103, 102, 105, 105, 105, 104, 104, 103, 103, 103, 101, 101, 102, 63, - 62, 61, 60, 59, 59, 60, 60, 65, 66, 68, 68, 66, 66, 68, 70, 68, - 69, 68, 69, 69, 70, 70, 70, 67, 67, 67, 68, 68, 68, 69, 69, 72, - 72, 70, 69, 69, 70, 72, 73, 72, 74, 75, 77, 77, 78, 77, 76, 78, - 77, 76, 76, 77, 78, 79, 81, 77, 75, 76, 61, 34, 25, 23, 15, 14, - 9, 8, 9, 11, 14, 15, 15, 15, 13, 12, 15, 20, 21, 16, 12, 17, - 13, 20, 6, 25, 9, 23, 30, 13, 24, 12, 19, 22, 10, 13, 17, 10, - 11, 14, 18, 24, 28, 28, 27, 21, 17, 20, 22, 15, 17, 22, 19, 21, - 28, 24, 20, 24, 20, 16, 23, 17, 15, 13, 16, 20, 19, 14, 8, 29, - 26, 20, 18, 22, 24, 17, 8, 14, 15, 19, 22, 21, 19, 23, 36, 56, - 85, 96, 88, 85, 96, 102, 97, 101, 100, 99, 101, 88, 92, 75, 4, 26, - 62, 70, 85, 99, 101, 107, 103, 105, 86, 98, 103, 102, 105, 97, 100, 102, - 99, 105, 108, 101, 102, 106, 102, 101, 101, 102, 103, 103, 102, 102, 101, 105, - 106, 106, 106, 106, 105, 104, 103, 105, 105, 105, 104, 104, 103, 103, 103, 101, - 101, 102, 64, 64, 63, 62, 62, 62, 64, 64, 64, 66, 69, 69, 67, 66, - 67, 68, 68, 69, 68, 69, 69, 70, 70, 70, 67, 68, 68, 69, 68, 69, - 69, 69, 72, 72, 69, 69, 68, 70, 72, 75, 72, 73, 76, 78, 79, 79, - 78, 76, 77, 76, 74, 74, 74, 76, 78, 79, 78, 75, 69, 46, 20, 19, - 23, 14, 12, 9, 8, 8, 11, 13, 16, 17, 14, 13, 13, 15, 19, 17, - 13, 8, 15, 18, 15, 5, 24, 12, 15, 30, 12, 23, 13, 21, 26, 13, - 17, 20, 16, 11, 10, 18, 23, 23, 21, 23, 24, 19, 22, 22, 14, 16, - 21, 17, 18, 25, 21, 17, 20, 16, 12, 19, 15, 16, 18, 19, 20, 19, - 18, 18, 27, 22, 17, 16, 19, 21, 15, 8, 17, 15, 16, 21, 22, 19, - 19, 25, 37, 66, 84, 84, 84, 91, 98, 97, 101, 101, 101, 103, 90, 92, - 75, 3, 26, 62, 70, 86, 99, 101, 108, 104, 105, 85, 98, 103, 102, 105, - 98, 101, 103, 100, 106, 108, 101, 102, 106, 101, 103, 103, 104, 105, 105, 105, - 104, 104, 105, 105, 106, 106, 105, 104, 103, 103, 105, 105, 105, 104, 104, 103, - 103, 103, 102, 102, 102, 62, 62, 62, 62, 63, 64, 67, 68, 64, 66, 69, - 69, 67, 66, 67, 68, 68, 68, 68, 69, 69, 70, 70, 70, 68, 69, 69, - 69, 69, 70, 69, 69, 72, 73, 70, 69, 70, 72, 74, 76, 72, 74, 76, - 79, 79, 80, 79, 77, 75, 75, 74, 74, 74, 76, 77, 77, 78, 66, 52, - 30, 10, 16, 20, 12, 12, 11, 10, 8, 9, 10, 13, 15, 7, 11, 15, - 16, 15, 12, 11, 12, 13, 25, 11, 15, 16, 18, 6, 24, 15, 27, 15, - 23, 26, 14, 17, 20, 20, 13, 12, 17, 21, 20, 18, 19, 24, 18, 21, - 21, 13, 14, 21, 19, 16, 23, 19, 16, 19, 15, 11, 17, 10, 16, 21, - 20, 16, 16, 21, 27, 21, 20, 18, 18, 17, 15, 14, 16, 21, 16, 14, - 19, 22, 21, 20, 23, 30, 45, 63, 81, 90, 91, 95, 99, 100, 101, 101, - 104, 91, 93, 75, 2, 28, 63, 71, 86, 100, 101, 108, 104, 102, 83, 96, - 102, 102, 106, 100, 103, 104, 101, 107, 109, 101, 102, 106, 101, 102, 103, 104, - 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 103, 102, 101, 105, 105, 105, - 104, 104, 103, 103, 103, 102, 102, 103, 58, 58, 59, 60, 61, 63, 66, 67, - 65, 66, 68, 68, 66, 66, 68, 70, 68, 68, 68, 69, 69, 70, 70, 70, - 69, 69, 69, 70, 70, 70, 69, 70, 74, 73, 71, 72, 73, 75, 75, 77, - 74, 76, 77, 78, 79, 80, 79, 79, 77, 76, 77, 77, 77, 76, 74, 74, - 68, 49, 34, 19, 8, 12, 15, 7, 11, 11, 10, 10, 9, 9, 11, 13, - 6, 11, 16, 17, 13, 11, 12, 15, 14, 21, 8, 23, 12, 20, 4, 17, - 21, 30, 18, 23, 26, 12, 15, 18, 18, 17, 16, 17, 19, 21, 21, 20, - 20, 15, 18, 19, 12, 16, 23, 22, 16, 23, 20, 16, 20, 17, 13, 20, - 7, 14, 20, 18, 13, 13, 20, 28, 18, 20, 22, 23, 18, 13, 17, 25, - 23, 18, 15, 18, 22, 21, 21, 25, 24, 25, 39, 63, 81, 86, 90, 96, - 99, 100, 100, 102, 90, 93, 75, 4, 30, 64, 72, 87, 100, 101, 107, 103, - 101, 83, 96, 102, 103, 107, 101, 104, 105, 102, 107, 109, 102, 102, 106, 101, - 99, 100, 101, 102, 103, 103, 103, 103, 103, 103, 104, 104, 103, 103, 102, 101, - 105, 105, 105, 104, 104, 103, 103, 103, 103, 103, 103, 60, 60, 60, 60, 61, - 63, 65, 66, 65, 65, 67, 66, 65, 66, 70, 72, 68, 68, 68, 69, 69, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 73, 74, 74, 75, 77, - 78, 77, 79, 76, 76, 76, 77, 78, 80, 80, 82, 77, 79, 79, 78, 75, - 71, 66, 63, 53, 33, 24, 20, 12, 10, 10, 6, 9, 11, 13, 13, 11, - 10, 12, 14, 14, 14, 16, 15, 15, 14, 14, 14, 17, 10, 11, 19, 12, - 14, 14, 14, 18, 27, 15, 21, 25, 13, 18, 22, 16, 22, 21, 14, 13, - 19, 21, 17, 20, 14, 18, 18, 10, 14, 22, 20, 14, 21, 18, 15, 20, - 17, 14, 21, 11, 14, 17, 18, 17, 16, 17, 18, 21, 20, 22, 25, 19, - 15, 19, 28, 22, 17, 16, 21, 23, 20, 19, 22, 17, 18, 24, 38, 60, - 78, 88, 91, 98, 99, 98, 100, 87, 90, 75, 5, 32, 66, 74, 87, 100, - 100, 106, 102, 103, 84, 97, 103, 102, 106, 99, 102, 106, 102, 108, 110, 102, - 102, 107, 102, 99, 100, 101, 102, 103, 103, 103, 103, 104, 104, 105, 105, 104, - 103, 103, 102, 105, 105, 105, 104, 104, 103, 103, 103, 103, 103, 103, 64, 64, - 63, 63, 63, 64, 66, 67, 65, 65, 66, 65, 64, 66, 71, 74, 68, 68, - 68, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 73, 75, - 75, 77, 79, 79, 79, 79, 77, 77, 76, 76, 77, 79, 80, 82, 76, 77, - 76, 75, 70, 64, 57, 52, 41, 23, 21, 26, 18, 9, 8, 7, 5, 10, - 14, 15, 12, 12, 15, 17, 21, 18, 14, 15, 18, 18, 16, 12, 20, 0, - 16, 13, 16, 8, 25, 14, 12, 22, 11, 19, 25, 16, 25, 30, 13, 24, - 23, 11, 6, 14, 17, 11, 24, 18, 19, 18, 8, 11, 18, 15, 11, 18, - 14, 13, 17, 16, 13, 21, 16, 16, 16, 21, 23, 23, 15, 10, 23, 19, - 21, 23, 19, 14, 17, 26, 21, 19, 19, 23, 22, 19, 16, 17, 17, 24, - 23, 24, 43, 75, 91, 88, 95, 97, 95, 98, 85, 90, 75, 6, 33, 67, - 74, 88, 100, 100, 105, 101, 105, 86, 98, 103, 102, 105, 97, 100, 106, 103, - 108, 110, 102, 102, 107, 102, 101, 102, 103, 104, 105, 106, 106, 106, 105, 106, - 106, 106, 106, 105, 104, 103, 105, 105, 105, 104, 104, 103, 103, 103, 103, 103, - 103, 58, 63, 64, 61, 60, 63, 65, 64, 66, 66, 67, 68, 68, 69, 70, - 70, 71, 70, 69, 68, 68, 68, 68, 68, 64, 69, 72, 72, 73, 75, 74, - 70, 74, 72, 72, 75, 77, 74, 75, 79, 77, 75, 74, 74, 75, 76, 75, - 74, 79, 80, 75, 65, 65, 63, 48, 28, 26, 23, 19, 15, 11, 9, 9, - 8, 12, 10, 8, 8, 10, 12, 12, 12, 15, 21, 22, 16, 13, 14, 13, - 9, 25, 16, 10, 12, 16, 16, 14, 14, 16, 16, 17, 19, 19, 18, 22, - 28, 26, 20, 24, 24, 13, 11, 16, 14, 21, 17, 17, 20, 17, 13, 15, - 21, 15, 20, 20, 14, 11, 14, 20, 22, 14, 19, 21, 20, 21, 24, 23, - 20, 24, 27, 15, 24, 28, 25, 30, 21, 15, 24, 22, 18, 19, 15, 12, - 19, 14, 14, 14, 19, 32, 50, 71, 85, 95, 92, 90, 108, 84, 91, 64, - 6, 34, 65, 73, 89, 101, 98, 104, 102, 102, 88, 101, 103, 101, 107, 101, - 102, 104, 106, 108, 107, 104, 102, 102, 103, 107, 107, 105, 104, 104, 103, 102, - 102, 105, 105, 105, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, - 104, 106, 105, 105, 58, 63, 64, 61, 60, 63, 65, 64, 66, 66, 67, 68, - 68, 69, 70, 70, 68, 68, 68, 68, 68, 69, 70, 70, 66, 70, 72, 71, - 71, 74, 74, 70, 74, 72, 72, 75, 77, 74, 76, 79, 74, 75, 76, 77, - 79, 78, 77, 76, 71, 73, 73, 66, 58, 45, 30, 15, 22, 19, 16, 12, - 10, 8, 5, 6, 10, 10, 9, 9, 9, 10, 12, 13, 6, 13, 15, 13, - 12, 16, 16, 13, 20, 13, 9, 13, 15, 13, 12, 14, 21, 18, 17, 21, - 21, 20, 22, 28, 25, 21, 27, 29, 19, 16, 17, 13, 18, 16, 17, 21, - 20, 15, 15, 20, 15, 18, 18, 16, 18, 22, 22, 19, 19, 22, 23, 21, - 21, 24, 23, 20, 26, 28, 16, 23, 27, 23, 29, 19, 26, 30, 24, 21, - 26, 22, 17, 20, 6, 10, 15, 18, 24, 36, 54, 69, 94, 92, 89, 104, - 84, 97, 67, 9, 34, 65, 73, 90, 102, 99, 103, 102, 101, 87, 101, 103, - 101, 107, 101, 103, 103, 105, 107, 107, 104, 103, 103, 104, 105, 105, 104, 104, - 104, 104, 104, 104, 105, 105, 105, 104, 104, 103, 103, 103, 104, 104, 104, 104, - 104, 104, 104, 104, 105, 105, 104, 59, 63, 65, 61, 60, 63, 66, 64, 66, - 66, 67, 68, 68, 69, 70, 70, 66, 66, 66, 67, 68, 69, 71, 72, 68, - 71, 71, 69, 70, 74, 74, 71, 73, 71, 71, 76, 77, 74, 75, 78, 72, - 75, 78, 79, 77, 76, 75, 74, 70, 66, 64, 57, 41, 23, 13, 10, 18, - 16, 13, 11, 9, 7, 5, 4, 7, 10, 12, 11, 8, 8, 13, 16, 4, - 10, 14, 14, 14, 17, 19, 17, 15, 11, 11, 15, 15, 12, 12, 16, 21, - 16, 14, 17, 19, 18, 17, 21, 22, 21, 30, 34, 25, 22, 21, 12, 13, - 15, 17, 22, 21, 17, 15, 18, 15, 16, 15, 16, 22, 27, 24, 17, 21, - 24, 23, 19, 19, 22, 23, 20, 25, 28, 16, 23, 25, 20, 25, 16, 26, - 28, 19, 17, 25, 23, 14, 15, 3, 11, 17, 20, 19, 24, 39, 52, 83, - 87, 87, 96, 82, 101, 64, 8, 34, 66, 74, 91, 103, 99, 103, 101, 100, - 85, 100, 102, 101, 107, 102, 104, 101, 104, 106, 106, 105, 104, 104, 105, 103, - 103, 104, 105, 105, 106, 106, 106, 105, 105, 104, 104, 104, 104, 103, 103, 104, - 104, 104, 104, 104, 104, 104, 104, 103, 103, 104, 59, 64, 65, 62, 61, 63, - 66, 64, 66, 66, 67, 68, 68, 69, 70, 70, 67, 66, 66, 67, 68, 69, - 70, 71, 69, 72, 71, 68, 69, 73, 74, 72, 73, 70, 71, 76, 76, 75, - 75, 78, 74, 76, 77, 76, 73, 71, 70, 70, 78, 62, 46, 37, 22, 9, - 8, 17, 14, 13, 12, 10, 9, 7, 6, 5, 5, 10, 14, 13, 8, 8, - 13, 18, 12, 15, 18, 18, 17, 18, 17, 17, 14, 14, 15, 19, 18, 15, - 15, 20, 23, 18, 15, 17, 18, 17, 16, 18, 20, 19, 28, 31, 25, 27, - 26, 17, 14, 15, 18, 19, 19, 18, 18, 20, 17, 19, 19, 18, 21, 26, - 24, 20, 21, 23, 22, 18, 18, 22, 23, 21, 22, 26, 16, 22, 24, 19, - 26, 18, 20, 22, 15, 13, 19, 18, 13, 15, 10, 14, 18, 20, 19, 22, - 30, 40, 62, 76, 86, 90, 77, 99, 55, 7, 34, 66, 75, 92, 104, 99, - 103, 100, 98, 84, 99, 102, 101, 108, 102, 104, 100, 104, 106, 106, 105, 105, - 105, 106, 104, 104, 104, 105, 105, 106, 105, 105, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 103, 103, 60, 64, 66, - 62, 61, 64, 66, 65, 66, 66, 67, 68, 68, 69, 70, 70, 69, 68, 68, - 67, 67, 68, 68, 69, 70, 72, 73, 69, 70, 74, 74, 71, 73, 71, 71, - 76, 76, 74, 75, 78, 76, 76, 74, 74, 71, 70, 71, 71, 74, 53, 33, - 23, 14, 8, 11, 19, 11, 11, 11, 11, 10, 9, 8, 7, 5, 10, 15, - 14, 11, 10, 14, 19, 18, 19, 21, 22, 20, 16, 16, 17, 15, 15, 16, - 21, 19, 15, 16, 21, 26, 21, 18, 20, 20, 18, 17, 20, 18, 18, 24, - 25, 21, 28, 31, 20, 16, 17, 17, 15, 15, 17, 21, 24, 19, 23, 23, - 17, 15, 19, 23, 23, 17, 19, 18, 15, 16, 22, 24, 22, 17, 22, 14, - 22, 24, 19, 28, 21, 19, 25, 21, 17, 20, 18, 17, 25, 18, 16, 14, - 16, 19, 24, 28, 32, 42, 62, 85, 87, 76, 95, 45, 9, 36, 67, 76, - 92, 103, 99, 103, 100, 98, 84, 98, 101, 100, 107, 102, 104, 101, 104, 106, - 106, 105, 105, 106, 107, 106, 106, 106, 105, 105, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 103, 103, - 60, 64, 66, 63, 62, 64, 67, 65, 66, 66, 67, 68, 68, 69, 70, 70, - 70, 69, 68, 67, 67, 67, 67, 68, 69, 72, 73, 71, 71, 74, 74, 70, - 73, 70, 71, 75, 75, 74, 74, 78, 76, 74, 72, 72, 73, 75, 72, 69, - 53, 40, 27, 22, 18, 13, 12, 13, 8, 9, 11, 13, 12, 12, 11, 9, - 8, 11, 15, 16, 15, 14, 17, 19, 17, 17, 19, 22, 20, 16, 16, 19, - 19, 15, 16, 17, 19, 16, 16, 18, 22, 19, 19, 19, 16, 12, 15, 20, - 20, 19, 22, 21, 17, 28, 33, 22, 20, 21, 19, 14, 14, 19, 23, 24, - 21, 25, 25, 17, 13, 15, 20, 23, 14, 18, 19, 16, 18, 22, 24, 22, - 15, 22, 14, 22, 23, 19, 28, 24, 19, 26, 24, 19, 20, 18, 17, 29, - 22, 17, 12, 12, 16, 22, 24, 26, 31, 49, 77, 83, 78, 94, 37, 17, - 38, 69, 76, 91, 102, 98, 104, 102, 98, 84, 98, 101, 100, 106, 101, 103, - 102, 104, 106, 106, 105, 104, 105, 106, 107, 107, 106, 105, 105, 104, 103, 103, - 103, 103, 104, 104, 104, 104, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, - 103, 103, 104, 60, 65, 66, 63, 62, 65, 67, 66, 66, 66, 67, 68, 68, - 69, 70, 70, 68, 68, 67, 67, 67, 68, 69, 69, 68, 72, 74, 72, 72, - 74, 73, 68, 72, 69, 71, 75, 76, 74, 74, 77, 77, 74, 70, 71, 74, - 71, 62, 52, 30, 30, 27, 20, 14, 12, 11, 8, 5, 8, 11, 14, 14, - 15, 15, 13, 12, 13, 15, 18, 19, 20, 20, 20, 20, 19, 21, 25, 24, - 18, 18, 21, 25, 18, 14, 17, 20, 18, 17, 18, 19, 20, 21, 21, 15, - 11, 15, 24, 23, 23, 24, 21, 16, 28, 31, 17, 20, 24, 22, 17, 15, - 20, 24, 23, 18, 21, 21, 16, 15, 19, 20, 19, 17, 20, 21, 19, 20, - 23, 23, 20, 16, 23, 16, 23, 24, 18, 28, 23, 23, 26, 20, 15, 18, - 16, 13, 23, 21, 19, 16, 15, 16, 18, 20, 23, 28, 35, 61, 72, 77, - 93, 29, 20, 41, 70, 75, 90, 100, 98, 104, 104, 99, 85, 99, 101, 99, - 105, 99, 101, 104, 105, 107, 107, 105, 104, 104, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 103, 103, 103, 104, 104, 105, 105, 105, 104, 104, 104, 104, 104, - 104, 104, 104, 105, 105, 104, 60, 66, 66, 64, 62, 66, 67, 66, 66, 66, - 67, 68, 68, 69, 70, 70, 67, 66, 66, 67, 68, 69, 71, 72, 67, 72, - 75, 73, 73, 75, 73, 67, 72, 70, 71, 76, 78, 76, 77, 81, 79, 74, - 68, 68, 68, 60, 43, 27, 12, 21, 25, 14, 6, 9, 12, 12, 6, 8, - 11, 15, 16, 16, 15, 14, 13, 12, 14, 17, 21, 22, 21, 19, 26, 23, - 25, 29, 26, 19, 18, 22, 32, 21, 15, 18, 21, 21, 21, 20, 25, 28, - 32, 31, 23, 18, 24, 34, 26, 26, 27, 23, 17, 27, 28, 12, 19, 24, - 25, 20, 17, 22, 23, 20, 17, 18, 17, 17, 21, 25, 22, 15, 20, 24, - 25, 22, 22, 25, 22, 18, 19, 26, 18, 24, 24, 18, 27, 22, 30, 29, - 19, 14, 21, 20, 13, 17, 19, 23, 24, 21, 18, 16, 18, 22, 27, 23, - 44, 56, 71, 86, 19, 13, 39, 68, 73, 87, 99, 97, 106, 106, 102, 88, - 101, 102, 99, 105, 97, 99, 104, 106, 108, 107, 105, 102, 102, 103, 103, 103, - 104, 105, 105, 105, 106, 106, 103, 103, 103, 104, 104, 105, 105, 105, 104, 104, - 104, 104, 104, 104, 104, 104, 106, 105, 105, 63, 63, 62, 63, 63, 66, 68, - 69, 70, 66, 64, 68, 69, 67, 65, 68, 67, 73, 69, 67, 73, 71, 66, - 72, 73, 76, 76, 73, 74, 78, 79, 75, 67, 69, 74, 78, 79, 80, 81, - 81, 82, 75, 69, 66, 57, 40, 26, 15, 14, 14, 14, 11, 9, 12, 13, - 14, 16, 12, 16, 16, 11, 16, 20, 12, 11, 22, 20, 17, 22, 26, 24, - 29, 28, 30, 29, 28, 29, 30, 23, 13, 41, 18, 22, 32, 21, 20, 27, - 20, 38, 28, 24, 29, 33, 32, 31, 32, 37, 26, 18, 22, 27, 29, 27, - 26, 33, 29, 23, 21, 22, 24, 23, 23, 23, 26, 26, 23, 20, 18, 22, - 25, 28, 28, 28, 20, 15, 29, 32, 17, 27, 20, 28, 37, 23, 13, 16, - 20, 28, 25, 20, 19, 19, 19, 19, 20, 28, 25, 19, 17, 18, 20, 19, - 18, 32, 25, 28, 39, 48, 51, 31, 0, 41, 68, 82, 85, 96, 101, 101, - 105, 107, 89, 103, 104, 99, 102, 94, 99, 103, 105, 106, 106, 104, 104, 105, - 106, 104, 103, 103, 104, 105, 106, 106, 106, 108, 107, 105, 103, 102, 102, 102, - 103, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 106, 67, 66, 66, 65, - 66, 68, 69, 70, 70, 65, 64, 68, 69, 67, 66, 67, 68, 74, 69, 67, - 73, 71, 67, 73, 69, 72, 73, 71, 71, 76, 76, 72, 74, 73, 76, 79, - 80, 83, 83, 83, 76, 74, 69, 55, 33, 16, 16, 23, 18, 15, 12, 10, - 8, 11, 13, 16, 21, 14, 18, 22, 15, 18, 19, 15, 32, 41, 36, 29, - 35, 38, 40, 46, 34, 35, 35, 35, 38, 41, 38, 30, 32, 18, 23, 31, - 27, 34, 43, 38, 31, 32, 39, 50, 53, 49, 47, 50, 49, 47, 45, 46, - 41, 38, 40, 47, 39, 38, 36, 38, 40, 42, 39, 38, 40, 43, 44, 43, - 42, 42, 44, 47, 27, 29, 39, 40, 37, 40, 37, 19, 38, 28, 34, 42, - 33, 28, 32, 34, 27, 25, 22, 22, 23, 22, 19, 18, 16, 18, 20, 24, - 28, 28, 24, 22, 23, 24, 32, 31, 24, 29, 32, 26, 42, 61, 70, 84, - 100, 101, 100, 107, 102, 90, 107, 108, 101, 103, 96, 102, 102, 105, 106, 106, - 104, 104, 105, 106, 103, 103, 103, 104, 105, 106, 106, 107, 108, 107, 105, 104, - 103, 103, 103, 104, 105, 105, 105, 105, 105, 105, 105, 105, 107, 106, 105, 68, - 67, 67, 66, 66, 67, 68, 68, 70, 65, 64, 68, 70, 67, 66, 68, 68, - 73, 69, 67, 74, 72, 68, 73, 68, 72, 73, 71, 71, 75, 75, 72, 78, - 76, 77, 77, 78, 79, 80, 79, 75, 68, 56, 38, 18, 8, 16, 30, 19, - 14, 10, 8, 8, 9, 10, 11, 22, 12, 17, 27, 27, 31, 42, 48, 50, - 67, 72, 72, 77, 73, 64, 63, 66, 67, 67, 67, 70, 74, 71, 64, 73, - 64, 62, 58, 49, 55, 58, 50, 60, 67, 78, 86, 87, 85, 87, 94, 98, - 97, 98, 97, 92, 86, 87, 92, 106, 105, 103, 101, 99, 93, 86, 80, 71, - 73, 74, 73, 71, 70, 72, 72, 66, 59, 62, 63, 58, 61, 64, 55, 51, - 37, 38, 44, 39, 37, 41, 40, 31, 34, 37, 40, 41, 35, 25, 19, 27, - 25, 21, 18, 17, 17, 18, 20, 19, 23, 30, 27, 14, 19, 33, 38, 41, - 53, 59, 75, 95, 98, 97, 106, 96, 87, 107, 108, 101, 104, 99, 103, 103, - 105, 107, 107, 105, 105, 106, 107, 104, 104, 105, 105, 105, 105, 105, 106, 108, - 107, 106, 105, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, - 106, 105, 66, 65, 65, 65, 64, 64, 65, 65, 70, 65, 64, 68, 70, 68, - 67, 69, 69, 73, 70, 68, 74, 72, 68, 75, 72, 76, 76, 74, 74, 78, - 78, 75, 79, 76, 74, 73, 74, 75, 75, 74, 75, 54, 32, 23, 20, 19, - 20, 22, 18, 13, 10, 10, 11, 11, 9, 11, 22, 11, 19, 36, 45, 60, - 85, 103, 121, 140, 147, 149, 155, 150, 139, 137, 139, 141, 141, 140, 141, 142, - 136, 127, 132, 132, 130, 123, 120, 131, 135, 127, 138, 141, 142, 143, 143, 146, - 155, 164, 169, 165, 161, 165, 166, 162, 156, 155, 157, 158, 159, 161, 160, 159, - 155, 153, 153, 152, 152, 150, 147, 144, 143, 143, 144, 130, 127, 127, 118, 117, - 123, 121, 111, 93, 87, 90, 85, 83, 86, 81, 89, 77, 58, 44, 36, 38, - 41, 42, 38, 33, 30, 25, 21, 19, 19, 18, 24, 18, 21, 23, 18, 23, - 24, 19, 31, 47, 51, 59, 77, 90, 94, 103, 94, 85, 102, 103, 99, 106, - 99, 101, 104, 105, 107, 107, 105, 105, 106, 107, 105, 105, 105, 105, 105, 105, - 104, 105, 108, 107, 107, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 104, 65, 65, 65, 65, 65, 65, 64, 64, 70, 65, 65, - 69, 71, 69, 68, 70, 68, 73, 69, 67, 74, 72, 70, 76, 74, 77, 78, - 75, 76, 80, 80, 77, 80, 77, 74, 74, 73, 72, 70, 65, 56, 35, 18, - 17, 24, 24, 18, 14, 18, 14, 14, 18, 18, 13, 11, 14, 21, 19, 38, - 65, 81, 102, 128, 146, 151, 161, 154, 148, 155, 161, 165, 173, 181, 184, 186, - 186, 187, 185, 176, 166, 176, 183, 180, 172, 174, 182, 184, 182, 186, 183, 179, - 175, 177, 183, 190, 195, 189, 190, 191, 195, 191, 186, 184, 189, 190, 190, 187, - 186, 182, 181, 179, 180, 177, 175, 173, 172, 169, 168, 167, 166, 178, 171, 177, - 182, 173, 165, 163, 156, 167, 148, 143, 143, 137, 138, 139, 131, 129, 122, 111, - 99, 85, 72, 58, 47, 33, 32, 35, 38, 37, 33, 28, 23, 26, 15, 15, - 20, 18, 19, 16, 8, 16, 41, 42, 37, 51, 74, 88, 96, 94, 84, 98, - 97, 97, 109, 103, 100, 105, 106, 108, 108, 105, 105, 107, 108, 106, 106, 105, - 105, 105, 105, 104, 104, 107, 107, 107, 107, 106, 106, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 104, 104, 103, 66, 66, 67, 68, 68, 68, 67, 67, - 69, 65, 65, 69, 71, 70, 69, 71, 68, 73, 69, 67, 75, 74, 71, 77, - 73, 76, 76, 73, 75, 78, 78, 77, 81, 79, 77, 75, 73, 69, 60, 52, - 28, 21, 18, 20, 20, 15, 11, 12, 13, 11, 13, 18, 16, 9, 10, 17, - 33, 45, 74, 102, 117, 136, 152, 158, 164, 173, 167, 161, 169, 175, 179, 188, - 175, 179, 182, 183, 186, 186, 178, 168, 186, 195, 189, 181, 185, 184, 181, 187, - 186, 187, 186, 183, 186, 191, 193, 191, 179, 190, 201, 200, 186, 177, 186, 201, - 203, 201, 197, 192, 188, 187, 189, 192, 190, 188, 186, 184, 186, 188, 188, 188, - 182, 179, 181, 182, 172, 172, 175, 169, 176, 162, 160, 161, 157, 160, 161, 152, - 146, 151, 157, 158, 151, 132, 111, 92, 60, 48, 37, 29, 29, 28, 28, 24, - 24, 15, 18, 20, 10, 9, 16, 20, 10, 31, 32, 23, 35, 53, 68, 80, - 87, 82, 98, 97, 97, 112, 107, 103, 105, 106, 108, 108, 106, 106, 107, 108, - 107, 107, 105, 105, 105, 105, 103, 103, 105, 105, 106, 106, 106, 106, 105, 104, - 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 64, 65, 67, 68, 69, - 69, 68, 67, 69, 65, 65, 69, 72, 70, 70, 71, 68, 73, 70, 68, 75, - 74, 71, 77, 72, 76, 76, 73, 73, 76, 77, 76, 81, 79, 76, 73, 69, - 59, 44, 30, 14, 14, 18, 21, 17, 9, 7, 12, 5, 4, 9, 16, 16, - 12, 21, 39, 62, 82, 110, 127, 135, 153, 163, 157, 160, 174, 177, 176, 183, - 183, 178, 181, 180, 182, 183, 184, 188, 191, 187, 180, 180, 190, 188, 190, 201, - 197, 194, 209, 193, 200, 203, 198, 195, 197, 198, 196, 196, 202, 209, 209, 200, - 194, 199, 210, 187, 189, 191, 193, 196, 201, 209, 216, 196, 193, 189, 187, 190, - 193, 194, 196, 196, 193, 191, 181, 171, 182, 192, 186, 179, 172, 175, 177, 173, - 177, 177, 168, 180, 173, 164, 157, 157, 161, 166, 167, 123, 101, 74, 56, 48, - 44, 38, 33, 28, 19, 22, 24, 13, 10, 19, 23, 16, 19, 17, 23, 33, - 34, 41, 61, 67, 72, 98, 98, 94, 107, 105, 105, 104, 105, 107, 107, 106, - 106, 108, 109, 108, 108, 107, 106, 105, 104, 103, 103, 103, 104, 105, 106, 106, - 105, 104, 103, 105, 105, 105, 105, 105, 105, 105, 105, 103, 102, 102, 61, 62, - 64, 66, 67, 67, 66, 66, 69, 65, 65, 69, 72, 70, 70, 72, 68, 74, - 70, 69, 75, 75, 71, 77, 74, 77, 77, 73, 74, 77, 77, 75, 76, 75, - 72, 68, 62, 48, 28, 12, 17, 13, 12, 17, 19, 14, 10, 10, 4, 5, - 12, 22, 24, 27, 45, 70, 91, 112, 132, 136, 137, 157, 169, 158, 167, 177, - 173, 168, 174, 177, 177, 183, 184, 184, 181, 180, 184, 189, 188, 183, 194, 200, - 194, 193, 200, 184, 175, 193, 193, 202, 205, 194, 184, 184, 189, 192, 207, 197, - 191, 196, 204, 203, 198, 194, 206, 206, 204, 198, 192, 189, 190, 193, 205, 199, - 193, 191, 193, 196, 198, 197, 190, 196, 202, 192, 180, 187, 190, 175, 180, 178, - 183, 186, 181, 183, 183, 173, 170, 169, 171, 172, 171, 168, 162, 156, 168, 153, - 137, 125, 114, 96, 69, 48, 39, 24, 25, 32, 28, 24, 21, 14, 26, 11, - 7, 26, 38, 21, 20, 46, 45, 60, 94, 96, 87, 98, 99, 104, 103, 104, - 107, 107, 105, 106, 108, 109, 108, 108, 107, 106, 105, 104, 103, 103, 102, 103, - 104, 105, 106, 105, 104, 103, 105, 105, 105, 105, 105, 105, 105, 105, 102, 102, - 102, 64, 68, 68, 65, 66, 69, 69, 67, 70, 70, 71, 71, 71, 72, 72, - 72, 73, 72, 71, 71, 70, 71, 71, 71, 77, 75, 73, 72, 71, 72, 75, - 76, 74, 74, 76, 65, 40, 27, 27, 21, 9, 17, 21, 17, 13, 11, 8, - 3, 1, 15, 25, 23, 27, 49, 85, 111, 131, 139, 148, 155, 161, 164, 167, - 169, 164, 165, 171, 178, 179, 176, 176, 180, 185, 177, 172, 176, 187, 194, 194, - 190, 192, 193, 192, 190, 188, 189, 191, 193, 192, 193, 195, 197, 199, 200, 199, - 201, 208, 203, 199, 203, 208, 208, 206, 204, 217, 210, 217, 212, 193, 200, 214, - 206, 198, 205, 208, 202, 197, 196, 195, 190, 192, 199, 199, 186, 180, 187, 192, - 192, 188, 180, 178, 180, 177, 185, 190, 185, 185, 177, 170, 172, 181, 185, 178, - 167, 162, 155, 152, 153, 153, 141, 118, 97, 64, 45, 34, 37, 35, 25, 23, - 30, 20, 19, 18, 17, 17, 22, 28, 35, 41, 35, 49, 79, 97, 94, 92, - 101, 105, 106, 104, 99, 100, 104, 108, 107, 107, 108, 107, 106, 103, 103, 104, - 106, 105, 106, 106, 106, 106, 105, 104, 103, 106, 106, 106, 105, 105, 104, 104, - 104, 105, 105, 105, 65, 68, 68, 65, 66, 69, 70, 67, 68, 68, 68, 69, - 69, 70, 70, 70, 70, 70, 69, 70, 71, 73, 74, 75, 70, 74, 76, 76, - 73, 72, 71, 71, 73, 64, 57, 45, 25, 18, 16, 7, 9, 11, 11, 8, - 8, 13, 12, 9, 10, 17, 27, 42, 67, 96, 117, 126, 146, 153, 161, 167, - 169, 170, 171, 173, 170, 170, 172, 181, 183, 182, 181, 184, 181, 178, 175, 180, - 187, 193, 190, 187, 194, 195, 196, 195, 193, 191, 190, 191, 192, 192, 194, 196, - 199, 201, 202, 206, 206, 208, 210, 213, 214, 213, 212, 212, 214, 209, 217, 218, - 208, 214, 221, 208, 204, 206, 205, 199, 197, 202, 204, 203, 182, 198, 206, 203, - 196, 193, 186, 177, 192, 186, 184, 181, 168, 171, 178, 177, 189, 186, 181, 182, - 183, 182, 174, 167, 164, 160, 156, 157, 161, 157, 147, 135, 135, 99, 62, 48, - 46, 41, 33, 26, 22, 14, 13, 18, 26, 28, 23, 18, 32, 34, 44, 63, - 83, 92, 95, 96, 97, 103, 105, 101, 99, 103, 106, 107, 107, 108, 107, 106, - 103, 103, 104, 106, 105, 106, 106, 106, 106, 105, 104, 103, 106, 106, 106, 105, - 105, 104, 104, 104, 105, 105, 105, 64, 67, 67, 65, 65, 68, 69, 66, 67, - 67, 68, 68, 68, 69, 69, 69, 67, 67, 68, 70, 72, 75, 77, 78, 71, - 74, 77, 76, 72, 70, 68, 69, 70, 53, 41, 31, 18, 18, 18, 8, 14, - 15, 13, 11, 13, 17, 16, 14, 16, 26, 42, 68, 101, 128, 139, 139, 155, - 162, 167, 171, 171, 170, 171, 172, 175, 174, 175, 182, 185, 185, 184, 187, 181, - 182, 183, 187, 189, 191, 189, 187, 193, 196, 198, 198, 195, 192, 190, 189, 192, - 193, 194, 197, 200, 204, 206, 210, 201, 209, 215, 217, 212, 210, 208, 210, 222, - 217, 217, 216, 209, 214, 215, 202, 210, 214, 216, 217, 218, 219, 215, 209, 192, - 200, 202, 195, 192, 197, 199, 197, 186, 185, 188, 181, 165, 165, 179, 184, 177, - 178, 179, 180, 180, 178, 174, 173, 175, 172, 168, 167, 166, 164, 158, 151, 147, - 145, 134, 106, 71, 45, 38, 40, 39, 27, 19, 17, 19, 21, 18, 14, 22, - 31, 38, 46, 63, 84, 93, 91, 89, 99, 105, 102, 99, 101, 104, 106, 107, - 108, 107, 106, 103, 103, 104, 106, 105, 106, 106, 106, 106, 105, 104, 103, 106, - 106, 106, 105, 105, 104, 104, 104, 105, 105, 105, 64, 67, 68, 65, 65, 69, - 69, 66, 70, 70, 70, 71, 71, 71, 72, 72, 68, 68, 69, 71, 73, 76, - 77, 78, 78, 76, 73, 70, 69, 68, 67, 65, 55, 38, 29, 23, 17, 20, - 25, 18, 14, 16, 19, 19, 16, 17, 17, 16, 29, 53, 81, 101, 118, 132, - 145, 150, 162, 167, 171, 174, 173, 170, 170, 171, 178, 179, 180, 184, 182, 180, - 182, 188, 186, 188, 189, 190, 189, 190, 189, 190, 190, 192, 194, 194, 192, 191, - 190, 191, 193, 193, 194, 196, 198, 202, 204, 206, 201, 209, 213, 211, 207, 205, - 204, 203, 227, 222, 216, 208, 204, 209, 214, 211, 208, 204, 202, 202, 203, 205, - 201, 198, 212, 210, 200, 187, 183, 192, 203, 208, 188, 186, 191, 186, 170, 172, - 186, 191, 176, 173, 173, 176, 178, 177, 176, 178, 176, 178, 178, 176, 172, 164, - 157, 151, 152, 151, 145, 135, 120, 100, 72, 46, 40, 36, 30, 25, 18, 16, - 17, 20, 16, 25, 31, 35, 43, 62, 78, 87, 89, 97, 101, 99, 100, 103, - 104, 102, 106, 108, 107, 106, 103, 103, 104, 106, 105, 106, 106, 106, 106, 105, - 104, 103, 106, 106, 106, 105, 105, 104, 104, 104, 105, 105, 105, 65, 68, 68, - 66, 66, 69, 70, 67, 70, 70, 71, 71, 72, 72, 72, 72, 71, 70, 71, - 72, 73, 75, 76, 76, 80, 74, 69, 68, 70, 68, 60, 50, 31, 20, 20, - 18, 9, 14, 21, 19, 10, 13, 15, 16, 15, 18, 27, 38, 67, 91, 116, - 129, 135, 142, 151, 158, 168, 173, 176, 179, 177, 175, 174, 176, 178, 184, 188, - 189, 181, 176, 180, 190, 189, 190, 189, 187, 185, 185, 189, 192, 189, 190, 191, - 190, 191, 192, 195, 198, 195, 195, 195, 195, 197, 198, 199, 199, 204, 208, 208, - 204, 204, 208, 208, 204, 210, 216, 213, 206, 206, 212, 219, 226, 233, 225, 211, - 207, 208, 215, 222, 226, 214, 215, 210, 201, 195, 193, 191, 188, 200, 193, 194, - 190, 177, 178, 187, 187, 194, 183, 177, 180, 182, 180, 176, 176, 172, 173, 174, - 174, 171, 168, 165, 163, 159, 154, 145, 138, 136, 130, 113, 93, 44, 39, 35, - 35, 33, 29, 22, 16, 13, 16, 24, 29, 29, 36, 54, 78, 89, 94, 96, - 95, 99, 104, 103, 99, 105, 107, 107, 106, 103, 103, 104, 106, 105, 106, 106, - 106, 106, 105, 104, 103, 106, 106, 106, 105, 105, 104, 104, 104, 105, 105, 105, - 65, 68, 69, 66, 66, 70, 70, 67, 68, 69, 69, 69, 70, 70, 70, 71, - 73, 72, 73, 73, 73, 74, 75, 74, 73, 70, 69, 70, 69, 60, 45, 28, - 21, 16, 21, 20, 8, 9, 16, 16, 13, 11, 13, 18, 25, 39, 61, 82, - 106, 118, 129, 137, 148, 158, 159, 155, 167, 171, 175, 177, 177, 177, 176, 177, - 180, 186, 190, 193, 184, 180, 182, 193, 188, 189, 184, 184, 180, 183, 184, 188, - 190, 189, 190, 190, 191, 193, 198, 202, 194, 196, 195, 197, 195, 195, 193, 193, - 198, 202, 202, 198, 201, 209, 211, 206, 195, 211, 212, 207, 210, 208, 207, 216, - 207, 204, 202, 206, 207, 206, 206, 208, 207, 208, 208, 206, 203, 200, 196, 191, - 198, 190, 191, 192, 185, 188, 193, 189, 192, 180, 173, 180, 185, 182, 179, 179, - 179, 175, 171, 166, 166, 168, 171, 173, 157, 161, 163, 156, 142, 133, 133, 135, - 99, 73, 44, 31, 32, 33, 24, 12, 13, 12, 17, 23, 22, 22, 38, 60, - 78, 87, 91, 95, 99, 104, 102, 99, 105, 107, 107, 106, 104, 103, 104, 106, - 105, 106, 106, 106, 106, 105, 104, 103, 106, 106, 106, 105, 105, 104, 104, 104, - 105, 105, 105, 65, 68, 69, 66, 67, 70, 70, 67, 69, 69, 69, 70, 70, - 70, 71, 71, 73, 72, 73, 73, 73, 75, 74, 74, 70, 69, 68, 63, 55, - 43, 32, 22, 25, 18, 24, 23, 11, 11, 16, 15, 16, 11, 16, 32, 55, - 77, 98, 117, 130, 135, 136, 141, 153, 162, 161, 154, 164, 167, 173, 176, 177, - 177, 178, 177, 179, 179, 182, 188, 188, 185, 184, 189, 187, 186, 184, 184, 183, - 184, 184, 184, 186, 188, 190, 190, 190, 192, 194, 197, 191, 194, 196, 197, 196, - 194, 192, 190, 193, 205, 209, 203, 202, 208, 210, 206, 201, 217, 214, 208, 214, - 210, 201, 206, 203, 205, 212, 220, 218, 210, 204, 204, 206, 204, 201, 201, 202, - 203, 205, 206, 192, 188, 193, 197, 191, 193, 199, 196, 180, 174, 175, 184, 188, - 182, 181, 185, 182, 175, 168, 164, 165, 166, 167, 167, 176, 160, 152, 159, 164, - 155, 139, 129, 146, 119, 79, 50, 35, 30, 24, 19, 12, 14, 14, 14, 19, - 26, 32, 38, 56, 76, 91, 96, 97, 98, 100, 100, 104, 107, 107, 106, 104, - 104, 104, 107, 105, 106, 106, 106, 106, 105, 104, 103, 106, 106, 106, 105, 105, - 104, 104, 104, 105, 105, 105, 66, 70, 70, 67, 67, 70, 70, 68, 71, 71, - 72, 72, 72, 74, 74, 73, 72, 72, 72, 73, 74, 75, 75, 74, 72, 70, - 63, 49, 32, 22, 22, 22, 23, 15, 20, 21, 13, 14, 19, 17, 13, 10, - 20, 50, 83, 105, 117, 127, 138, 147, 151, 151, 154, 160, 163, 162, 167, 172, - 176, 181, 181, 183, 184, 183, 177, 172, 173, 183, 191, 191, 187, 184, 189, 188, - 188, 189, 190, 190, 188, 184, 184, 187, 189, 191, 191, 190, 190, 190, 191, 193, - 197, 199, 199, 196, 193, 191, 199, 215, 223, 214, 205, 206, 208, 205, 210, 222, - 212, 205, 220, 221, 213, 220, 219, 212, 205, 203, 198, 194, 201, 212, 211, 210, - 209, 210, 209, 204, 198, 196, 201, 199, 205, 205, 193, 191, 195, 191, 185, 183, - 189, 197, 193, 180, 178, 183, 170, 167, 165, 167, 171, 171, 167, 162, 169, 165, - 166, 166, 152, 134, 139, 156, 137, 135, 121, 94, 63, 41, 33, 33, 16, 21, - 17, 10, 19, 36, 32, 19, 33, 63, 89, 98, 93, 93, 96, 101, 103, 105, - 106, 106, 104, 104, 107, 109, 106, 107, 107, 107, 107, 106, 105, 104, 107, 107, - 107, 106, 106, 105, 105, 105, 105, 105, 105, 70, 70, 70, 69, 68, 67, 66, - 65, 66, 66, 67, 68, 69, 70, 71, 71, 75, 74, 73, 74, 73, 74, 74, - 75, 77, 63, 44, 31, 25, 24, 20, 16, 13, 15, 24, 22, 15, 17, 20, - 11, 13, 27, 46, 81, 117, 129, 126, 134, 146, 150, 154, 158, 161, 164, 168, - 170, 172, 172, 173, 175, 177, 181, 184, 186, 175, 181, 187, 188, 184, 183, 186, - 190, 194, 186, 188, 190, 185, 185, 184, 174, 183, 188, 192, 193, 189, 187, 191, - 195, 187, 200, 208, 201, 189, 188, 195, 201, 203, 204, 201, 198, 201, 209, 213, - 212, 212, 208, 205, 206, 212, 215, 214, 212, 209, 205, 207, 214, 211, 202, 201, - 208, 213, 217, 217, 211, 206, 206, 206, 204, 210, 209, 208, 205, 198, 193, 199, - 207, 192, 193, 190, 184, 182, 185, 186, 184, 183, 175, 166, 163, 168, 170, 167, - 163, 169, 168, 165, 164, 161, 157, 152, 147, 145, 144, 138, 128, 116, 96, 63, - 33, 27, 31, 29, 20, 21, 27, 22, 13, 38, 42, 55, 78, 93, 97, 95, - 96, 99, 100, 101, 104, 106, 110, 112, 113, 108, 107, 107, 107, 107, 107, 107, - 107, 108, 108, 108, 107, 107, 106, 106, 106, 106, 106, 106, 71, 70, 70, 69, - 68, 66, 65, 65, 67, 67, 69, 69, 71, 72, 72, 73, 78, 77, 75, 76, - 77, 77, 75, 73, 61, 47, 31, 22, 17, 16, 14, 12, 22, 17, 18, 17, - 11, 15, 22, 18, 17, 43, 69, 96, 124, 136, 137, 145, 148, 150, 152, 156, - 160, 163, 165, 166, 175, 175, 176, 177, 179, 180, 180, 182, 179, 184, 187, 188, - 186, 186, 189, 192, 186, 178, 180, 186, 185, 189, 190, 181, 187, 189, 190, 190, - 189, 188, 188, 188, 188, 195, 197, 193, 189, 192, 196, 198, 199, 204, 209, 209, - 211, 211, 207, 200, 207, 209, 213, 219, 224, 225, 221, 219, 204, 207, 212, 219, - 220, 217, 218, 221, 208, 216, 219, 215, 211, 212, 214, 215, 213, 206, 202, 207, - 210, 205, 196, 192, 195, 198, 197, 190, 185, 186, 187, 186, 181, 175, 170, 170, - 173, 173, 168, 162, 171, 168, 165, 164, 164, 162, 156, 151, 145, 145, 142, 137, - 132, 122, 102, 82, 52, 37, 29, 33, 30, 19, 14, 21, 22, 26, 37, 57, - 79, 92, 96, 98, 99, 100, 102, 104, 106, 109, 112, 112, 108, 107, 107, 107, - 107, 107, 107, 107, 108, 108, 108, 107, 107, 106, 106, 106, 105, 105, 105, 70, - 70, 70, 68, 68, 66, 66, 65, 69, 70, 71, 71, 73, 74, 76, 76, 80, - 78, 77, 77, 77, 75, 70, 64, 40, 31, 20, 15, 14, 15, 13, 11, 12, - 8, 16, 26, 21, 18, 16, 11, 29, 68, 98, 113, 130, 139, 144, 152, 155, - 153, 153, 157, 163, 166, 166, 164, 174, 175, 177, 178, 178, 177, 176, 176, 182, - 182, 183, 184, 185, 187, 189, 190, 185, 175, 177, 184, 186, 193, 195, 185, 195, - 193, 191, 192, 193, 193, 190, 187, 197, 197, 195, 192, 195, 201, 201, 197, 201, - 203, 202, 199, 199, 203, 205, 203, 205, 209, 213, 215, 213, 211, 208, 208, 218, - 223, 223, 216, 210, 205, 201, 196, 209, 217, 221, 216, 211, 211, 212, 212, 213, - 206, 203, 207, 209, 204, 195, 190, 191, 198, 200, 193, 186, 185, 186, 186, 179, - 175, 173, 175, 178, 176, 169, 162, 172, 168, 164, 165, 167, 167, 161, 156, 152, - 151, 149, 144, 142, 139, 133, 123, 92, 59, 34, 32, 35, 29, 22, 21, 16, - 18, 24, 37, 58, 83, 96, 102, 103, 105, 104, 106, 106, 107, 106, 106, 106, - 106, 106, 106, 106, 106, 105, 105, 106, 106, 106, 105, 104, 103, 103, 104, 105, - 104, 104, 71, 71, 70, 69, 69, 68, 67, 67, 70, 71, 71, 73, 74, 75, - 76, 78, 78, 78, 76, 77, 75, 68, 56, 45, 29, 22, 16, 14, 14, 16, - 15, 13, 24, 12, 14, 17, 9, 11, 25, 33, 46, 90, 119, 126, 137, 148, - 151, 155, 163, 158, 156, 160, 168, 172, 171, 168, 170, 171, 174, 176, 176, 175, - 173, 173, 182, 180, 179, 180, 183, 186, 187, 187, 195, 184, 183, 188, 189, 195, - 195, 184, 194, 194, 194, 194, 193, 193, 191, 189, 199, 199, 197, 196, 199, 204, - 201, 195, 194, 197, 197, 194, 195, 201, 205, 206, 206, 208, 208, 204, 199, 198, - 202, 207, 209, 218, 219, 213, 213, 221, 223, 219, 207, 210, 212, 210, 210, 212, - 210, 206, 210, 209, 210, 207, 199, 193, 198, 207, 182, 192, 197, 192, 183, 182, - 183, 184, 177, 175, 174, 176, 178, 177, 170, 165, 172, 167, 163, 164, 168, 169, - 164, 160, 162, 162, 157, 151, 145, 142, 140, 137, 118, 103, 73, 42, 30, 35, - 34, 23, 21, 24, 25, 27, 41, 66, 91, 102, 106, 108, 109, 107, 106, 104, - 102, 101, 104, 105, 105, 105, 105, 104, 104, 104, 104, 105, 104, 104, 103, 102, - 102, 103, 104, 105, 105, 70, 70, 69, 69, 68, 68, 68, 68, 70, 72, 72, - 73, 74, 75, 76, 78, 80, 79, 79, 77, 70, 56, 40, 27, 21, 17, 14, - 14, 14, 15, 16, 15, 11, 10, 20, 24, 14, 14, 27, 35, 67, 104, 127, - 134, 146, 158, 160, 159, 164, 159, 156, 160, 168, 172, 172, 169, 166, 168, 171, - 174, 176, 176, 175, 175, 183, 181, 179, 180, 183, 185, 186, 186, 200, 189, 189, - 192, 191, 194, 193, 182, 188, 192, 195, 194, 190, 188, 190, 193, 187, 193, 197, - 196, 198, 200, 198, 194, 182, 194, 206, 211, 210, 208, 202, 195, 203, 207, 209, - 208, 205, 208, 216, 224, 227, 230, 223, 208, 200, 203, 203, 198, 203, 202, 201, - 203, 211, 217, 213, 205, 207, 208, 209, 207, 201, 196, 201, 210, 177, 187, 193, - 190, 183, 182, 183, 184, 178, 176, 173, 173, 175, 175, 172, 169, 169, 165, 161, - 162, 166, 168, 165, 162, 167, 166, 162, 156, 149, 143, 141, 141, 126, 134, 120, - 81, 43, 32, 34, 34, 28, 29, 29, 24, 27, 47, 77, 101, 106, 109, 111, - 109, 106, 102, 98, 97, 102, 104, 104, 104, 104, 103, 103, 103, 103, 104, 103, - 102, 101, 100, 100, 102, 106, 108, 108, 70, 70, 70, 70, 70, 70, 71, 71, - 71, 71, 73, 74, 76, 76, 77, 77, 81, 81, 78, 71, 59, 44, 28, 18, - 16, 15, 13, 13, 14, 15, 16, 16, 4, 9, 20, 22, 16, 27, 45, 50, - 92, 116, 131, 139, 156, 166, 166, 167, 160, 156, 154, 156, 160, 164, 165, 164, - 165, 167, 170, 173, 176, 177, 178, 178, 181, 182, 183, 183, 184, 185, 186, 187, - 193, 185, 189, 193, 190, 192, 192, 183, 190, 196, 201, 199, 194, 191, 194, 199, - 182, 190, 197, 198, 198, 201, 202, 201, 188, 198, 205, 205, 202, 201, 199, 195, - 197, 203, 209, 211, 208, 207, 209, 212, 200, 202, 202, 200, 203, 213, 222, 226, - 216, 212, 206, 204, 210, 215, 209, 200, 208, 203, 201, 208, 213, 208, 200, 194, - 181, 189, 194, 190, 186, 186, 187, 186, 179, 176, 173, 172, 173, 174, 174, 174, - 166, 164, 162, 162, 164, 165, 164, 165, 163, 162, 162, 162, 158, 151, 150, 150, - 148, 133, 122, 114, 94, 62, 40, 31, 32, 28, 27, 24, 21, 31, 61, 90, - 103, 109, 110, 111, 107, 103, 97, 97, 102, 104, 104, 104, 104, 103, 103, 102, - 103, 103, 103, 101, 101, 99, 99, 101, 106, 108, 108, 69, 69, 69, 70, 70, - 71, 71, 72, 74, 75, 75, 75, 77, 77, 78, 78, 78, 77, 70, 58, 41, - 28, 20, 17, 14, 14, 14, 17, 19, 20, 22, 24, 36, 32, 26, 18, 27, - 70, 110, 120, 124, 136, 142, 149, 162, 166, 165, 170, 158, 156, 154, 153, 153, - 155, 156, 157, 164, 165, 167, 169, 172, 174, 176, 177, 176, 179, 182, 182, 180, - 179, 181, 184, 184, 182, 189, 195, 190, 191, 193, 186, 196, 198, 200, 199, 196, - 194, 194, 196, 190, 195, 197, 196, 196, 201, 203, 202, 198, 201, 198, 190, 187, - 193, 201, 206, 198, 201, 203, 202, 198, 195, 195, 196, 225, 222, 220, 219, 216, - 214, 217, 223, 220, 219, 214, 207, 206, 209, 207, 202, 208, 203, 202, 208, 210, - 204, 195, 189, 187, 192, 194, 191, 188, 189, 188, 186, 180, 178, 177, 176, 177, - 177, 177, 177, 165, 166, 166, 165, 163, 163, 165, 168, 165, 161, 162, 166, 165, - 160, 156, 158, 160, 135, 121, 127, 128, 105, 71, 46, 44, 30, 23, 25, 21, - 21, 42, 71, 96, 103, 108, 110, 107, 104, 100, 100, 103, 105, 105, 104, 104, - 103, 103, 103, 104, 103, 103, 101, 101, 100, 100, 101, 105, 107, 106, 68, 68, - 69, 70, 71, 72, 72, 72, 76, 76, 76, 77, 77, 77, 77, 76, 72, 69, - 59, 43, 25, 15, 14, 17, 16, 18, 20, 23, 25, 28, 32, 35, 30, 46, - 67, 82, 105, 146, 162, 147, 151, 156, 154, 158, 164, 160, 158, 168, 159, 158, - 156, 153, 149, 149, 151, 153, 161, 161, 162, 164, 166, 168, 170, 172, 169, 174, - 179, 179, 175, 173, 175, 179, 180, 181, 192, 197, 191, 190, 194, 188, 195, 193, - 191, 190, 191, 189, 186, 183, 199, 198, 193, 188, 189, 194, 196, 193, 192, 199, - 202, 199, 196, 200, 206, 208, 202, 201, 198, 195, 195, 197, 203, 207, 209, 204, - 206, 212, 212, 205, 207, 216, 204, 209, 211, 206, 204, 210, 216, 220, 207, 208, - 209, 206, 196, 188, 190, 197, 192, 195, 194, 189, 187, 188, 186, 182, 179, 179, - 179, 179, 180, 180, 179, 178, 165, 168, 169, 167, 162, 161, 166, 170, 171, 165, - 164, 168, 168, 161, 157, 157, 144, 152, 150, 134, 122, 116, 104, 85, 59, 36, - 24, 30, 26, 16, 28, 53, 90, 99, 105, 108, 107, 106, 102, 103, 104, 106, - 106, 106, 105, 105, 104, 104, 104, 105, 104, 103, 102, 101, 100, 102, 103, 105, - 105, 69, 68, 69, 70, 71, 71, 72, 71, 71, 72, 74, 76, 78, 75, 70, - 64, 68, 52, 35, 26, 21, 17, 19, 21, 19, 25, 28, 30, 37, 51, 64, - 71, 109, 121, 135, 145, 151, 156, 162, 168, 159, 160, 161, 163, 163, 164, 166, - 167, 164, 165, 164, 161, 156, 152, 150, 151, 144, 148, 153, 155, 156, 159, 163, - 167, 169, 163, 164, 174, 179, 176, 179, 187, 184, 180, 180, 185, 194, 197, 193, - 188, 210, 206, 202, 197, 194, 194, 195, 197, 197, 198, 200, 201, 196, 190, 193, - 199, 188, 194, 201, 205, 203, 199, 195, 193, 196, 199, 201, 201, 199, 199, 201, - 204, 204, 209, 209, 207, 217, 230, 229, 218, 208, 200, 196, 205, 215, 215, 208, - 203, 216, 199, 189, 194, 199, 195, 192, 196, 194, 192, 183, 183, 187, 180, 174, - 185, 161, 176, 182, 173, 168, 173, 175, 170, 178, 173, 169, 171, 174, 171, 159, - 148, 162, 159, 163, 171, 172, 165, 160, 159, 154, 151, 147, 143, 139, 134, 130, - 127, 100, 52, 32, 40, 30, 13, 22, 46, 73, 99, 105, 98, 102, 106, 103, - 106, 107, 107, 105, 103, 105, 109, 106, 101, 103, 104, 103, 104, 103, 104, 104, - 104, 99, 106, 104, 68, 68, 68, 70, 71, 71, 72, 72, 75, 77, 77, 73, - 68, 66, 69, 69, 50, 34, 23, 22, 25, 25, 23, 24, 19, 36, 56, 70, - 85, 105, 125, 136, 147, 154, 161, 163, 163, 161, 163, 165, 160, 160, 160, 159, - 158, 158, 159, 159, 162, 160, 158, 158, 159, 157, 153, 149, 144, 146, 146, 144, - 143, 144, 149, 152, 157, 162, 172, 178, 174, 169, 173, 182, 183, 181, 184, 189, - 196, 199, 198, 195, 193, 193, 193, 194, 195, 196, 198, 199, 197, 198, 201, 203, - 200, 195, 197, 203, 202, 200, 197, 194, 192, 195, 201, 205, 199, 202, 204, 204, - 202, 201, 202, 204, 208, 215, 215, 207, 206, 213, 215, 209, 199, 197, 200, 208, - 211, 208, 204, 203, 201, 194, 196, 205, 207, 198, 193, 195, 206, 200, 187, 182, - 185, 182, 177, 182, 181, 174, 177, 187, 184, 169, 161, 164, 166, 167, 165, 161, - 156, 156, 161, 166, 164, 162, 164, 169, 169, 163, 161, 164, 165, 155, 143, 141, - 144, 143, 133, 123, 125, 108, 80, 45, 16, 19, 26, 20, 57, 91, 108, 108, - 111, 107, 98, 96, 103, 108, 109, 105, 104, 105, 103, 100, 102, 102, 103, 103, - 103, 103, 102, 102, 100, 107, 103, 66, 67, 67, 69, 70, 72, 73, 73, 76, - 74, 70, 68, 67, 64, 61, 54, 26, 19, 17, 17, 19, 25, 37, 51, 87, - 107, 128, 136, 139, 146, 154, 162, 161, 167, 170, 170, 167, 164, 165, 167, 168, - 166, 166, 163, 161, 161, 160, 160, 165, 162, 160, 163, 168, 168, 162, 155, 154, - 152, 149, 143, 139, 138, 140, 141, 150, 149, 151, 157, 163, 170, 177, 182, 181, - 182, 187, 191, 194, 196, 197, 197, 190, 191, 193, 194, 194, 194, 193, 192, 195, - 196, 200, 204, 202, 198, 199, 204, 198, 206, 216, 222, 220, 213, 205, 200, 201, - 203, 205, 205, 203, 202, 201, 201, 199, 210, 215, 207, 200, 205, 211, 213, 214, - 210, 206, 201, 195, 191, 196, 204, 210, 201, 195, 194, 188, 179, 179, 185, 186, - 183, 176, 173, 178, 182, 179, 176, 192, 176, 167, 172, 171, 161, 154, 156, 163, - 168, 173, 173, 168, 163, 162, 162, 162, 161, 163, 165, 162, 159, 161, 167, 170, - 162, 152, 148, 148, 145, 138, 132, 140, 141, 118, 67, 32, 36, 36, 12, 41, - 72, 92, 98, 107, 110, 109, 114, 100, 108, 113, 110, 105, 105, 105, 104, 106, - 106, 106, 106, 106, 106, 106, 105, 101, 107, 104, 65, 66, 68, 68, 71, 72, - 73, 74, 73, 65, 61, 65, 71, 64, 44, 21, 17, 18, 21, 20, 16, 30, - 67, 102, 113, 131, 148, 155, 156, 157, 159, 161, 164, 167, 169, 168, 165, 164, - 165, 167, 171, 171, 169, 167, 166, 166, 165, 165, 166, 165, 165, 168, 171, 171, - 166, 160, 162, 160, 156, 150, 144, 140, 138, 136, 130, 133, 140, 149, 155, 161, - 167, 174, 175, 179, 185, 188, 188, 188, 190, 193, 194, 194, 195, 195, 194, 193, - 192, 191, 193, 194, 198, 202, 200, 196, 196, 200, 202, 202, 202, 200, 198, 198, - 200, 202, 200, 202, 203, 203, 202, 199, 198, 197, 193, 205, 213, 209, 205, 207, - 212, 215, 196, 203, 214, 220, 213, 197, 186, 183, 202, 196, 193, 196, 198, 198, - 202, 208, 203, 205, 208, 207, 204, 208, 208, 198, 189, 193, 188, 179, 181, 190, - 186, 174, 171, 167, 166, 171, 177, 175, 165, 153, 157, 160, 164, 163, 159, 156, - 158, 163, 161, 167, 170, 164, 150, 142, 142, 148, 147, 140, 129, 109, 77, 58, - 43, 25, 47, 69, 81, 87, 97, 100, 97, 102, 97, 104, 107, 105, 103, 105, - 107, 106, 107, 107, 107, 106, 106, 106, 106, 106, 99, 105, 102, 65, 66, 68, - 68, 71, 72, 73, 73, 67, 64, 63, 63, 60, 48, 29, 11, 21, 20, 25, - 29, 37, 59, 98, 134, 129, 140, 151, 156, 161, 165, 165, 161, 177, 176, 173, - 171, 164, 161, 160, 159, 165, 164, 164, 164, 164, 165, 166, 167, 163, 165, 167, - 167, 165, 163, 161, 160, 161, 160, 158, 154, 149, 143, 136, 132, 112, 123, 139, - 151, 149, 144, 149, 161, 165, 171, 179, 182, 183, 184, 189, 192, 189, 189, 189, - 191, 193, 195, 198, 199, 196, 195, 197, 200, 199, 195, 194, 198, 197, 197, 197, - 195, 193, 194, 196, 199, 202, 201, 201, 201, 201, 199, 197, 196, 196, 203, 209, - 210, 208, 207, 205, 202, 219, 206, 192, 187, 189, 196, 210, 222, 205, 203, 206, - 215, 218, 209, 194, 184, 176, 171, 173, 165, 144, 143, 147, 138, 138, 156, 168, - 170, 177, 187, 187, 179, 179, 168, 157, 155, 162, 167, 167, 164, 154, 161, 166, - 165, 160, 158, 159, 161, 155, 165, 172, 170, 156, 147, 146, 151, 154, 137, 134, - 135, 116, 89, 67, 51, 39, 52, 62, 72, 88, 95, 92, 95, 99, 99, 98, - 95, 99, 104, 103, 99, 101, 102, 102, 102, 102, 102, 101, 100, 97, 104, 100, - 67, 67, 68, 70, 71, 72, 72, 71, 66, 70, 69, 55, 36, 23, 23, 26, - 20, 11, 17, 37, 67, 93, 115, 131, 156, 162, 164, 165, 168, 172, 171, 166, - 175, 174, 171, 168, 164, 161, 158, 157, 160, 160, 160, 162, 164, 166, 168, 169, - 167, 169, 170, 168, 164, 162, 162, 163, 161, 161, 160, 159, 156, 149, 140, 133, - 132, 102, 86, 103, 127, 139, 147, 158, 154, 160, 169, 175, 179, 183, 190, 194, - 187, 187, 187, 187, 188, 190, 193, 194, 199, 196, 196, 199, 199, 196, 196, 199, - 190, 197, 206, 211, 210, 204, 198, 195, 204, 202, 200, 200, 200, 200, 199, 198, - 190, 194, 199, 203, 206, 205, 201, 196, 193, 194, 204, 217, 221, 210, 194, 185, - 196, 189, 182, 178, 173, 159, 138, 123, 133, 112, 107, 98, 71, 69, 82, 80, - 76, 75, 84, 99, 106, 112, 131, 154, 171, 174, 175, 171, 164, 160, 162, 164, - 157, 165, 169, 167, 165, 164, 163, 161, 158, 158, 160, 163, 163, 159, 151, 144, - 148, 140, 141, 139, 131, 126, 114, 93, 64, 65, 55, 52, 65, 76, 86, 100, - 104, 104, 101, 98, 102, 106, 104, 98, 102, 102, 102, 102, 102, 102, 101, 100, - 99, 105, 100, 69, 68, 69, 70, 71, 71, 70, 69, 67, 66, 58, 40, 22, - 14, 22, 30, 16, 12, 24, 53, 86, 111, 127, 136, 148, 155, 158, 159, 163, - 171, 173, 171, 163, 162, 162, 163, 162, 161, 160, 158, 159, 160, 161, 163, 166, - 169, 171, 172, 176, 173, 170, 169, 168, 168, 168, 167, 166, 164, 163, 162, 159, - 154, 145, 139, 138, 76, 33, 49, 85, 107, 127, 147, 148, 152, 160, 167, 172, - 177, 182, 184, 185, 186, 187, 187, 188, 188, 187, 187, 198, 194, 192, 195, 196, - 195, 197, 201, 199, 196, 191, 187, 187, 192, 200, 207, 204, 201, 197, 196, 198, - 199, 199, 199, 190, 192, 194, 198, 200, 199, 197, 196, 197, 192, 190, 192, 189, - 179, 168, 162, 151, 145, 138, 133, 132, 131, 127, 122, 89, 54, 50, 54, 32, - 30, 44, 41, 51, 42, 39, 44, 48, 57, 82, 110, 135, 147, 164, 173, 173, - 167, 161, 158, 163, 168, 169, 166, 164, 168, 166, 162, 164, 161, 159, 161, 163, - 162, 156, 147, 144, 139, 144, 143, 139, 143, 142, 126, 126, 118, 93, 68, 55, - 48, 53, 70, 95, 101, 104, 103, 106, 109, 106, 102, 106, 106, 106, 106, 105, - 104, 104, 104, 99, 105, 101, 72, 71, 71, 71, 71, 70, 69, 66, 68, 55, - 36, 24, 18, 18, 18, 17, 16, 27, 50, 78, 99, 120, 142, 161, 165, 172, - 175, 168, 163, 163, 162, 162, 166, 165, 165, 165, 164, 162, 159, 156, 158, 159, - 160, 162, 164, 166, 168, 170, 177, 170, 164, 163, 168, 171, 169, 165, 167, 164, - 160, 158, 157, 153, 146, 140, 106, 62, 38, 47, 50, 49, 78, 123, 146, 149, - 153, 159, 164, 167, 169, 169, 172, 176, 181, 188, 192, 195, 194, 194, 194, 189, - 186, 189, 192, 193, 196, 201, 193, 197, 202, 205, 205, 204, 203, 203, 202, 197, - 192, 191, 194, 196, 197, 196, 203, 203, 201, 198, 192, 186, 185, 187, 179, 169, - 159, 153, 148, 142, 140, 143, 144, 148, 150, 150, 149, 147, 143, 139, 80, 38, - 38, 55, 39, 32, 38, 28, 31, 43, 45, 36, 35, 46, 53, 51, 91, 96, - 110, 133, 157, 171, 171, 166, 165, 168, 165, 160, 160, 167, 167, 163, 164, 169, - 169, 166, 158, 155, 158, 160, 154, 142, 148, 156, 145, 133, 131, 130, 118, 128, - 123, 108, 88, 63, 52, 62, 75, 86, 97, 100, 99, 101, 103, 101, 102, 104, - 104, 104, 104, 103, 102, 102, 97, 105, 102, 73, 77, 80, 78, 74, 70, 67, - 62, 64, 41, 19, 12, 14, 15, 15, 14, 8, 36, 63, 85, 119, 142, 155, - 165, 152, 160, 166, 168, 164, 160, 160, 164, 172, 171, 168, 165, 162, 161, 160, - 161, 160, 165, 160, 158, 166, 166, 164, 171, 172, 168, 163, 161, 161, 163, 162, - 162, 158, 165, 157, 149, 162, 140, 160, 134, 66, 32, 39, 43, 41, 34, 31, - 71, 102, 123, 144, 152, 156, 162, 167, 169, 178, 172, 180, 188, 183, 184, 189, - 187, 197, 190, 202, 202, 175, 173, 194, 205, 208, 195, 188, 193, 199, 195, 189, - 187, 190, 188, 187, 185, 183, 180, 178, 178, 172, 171, 169, 167, 166, 165, 164, - 164, 164, 162, 159, 158, 159, 160, 159, 158, 155, 178, 134, 157, 160, 133, 159, - 115, 33, 33, 34, 34, 32, 30, 28, 26, 29, 34, 37, 35, 30, 30, 35, - 41, 49, 54, 72, 90, 126, 155, 156, 171, 164, 174, 170, 159, 158, 158, 161, - 171, 159, 168, 172, 169, 162, 161, 161, 158, 151, 150, 153, 157, 152, 142, 135, - 134, 135, 139, 130, 123, 125, 108, 75, 54, 50, 45, 62, 82, 87, 91, 96, - 94, 102, 97, 106, 112, 102, 95, 100, 101, 97, 98, 97, 74, 75, 76, 76, - 76, 72, 63, 54, 34, 25, 17, 18, 18, 13, 11, 10, 22, 53, 81, 105, - 133, 148, 151, 156, 161, 163, 167, 169, 168, 166, 163, 164, 170, 171, 168, 166, - 164, 163, 163, 163, 163, 168, 163, 160, 167, 166, 164, 171, 168, 166, 161, 160, - 160, 161, 159, 159, 161, 143, 177, 149, 147, 148, 145, 66, 45, 31, 42, 40, - 36, 34, 23, 41, 40, 68, 105, 134, 152, 159, 155, 148, 151, 150, 162, 171, - 166, 167, 177, 180, 189, 174, 178, 184, 175, 173, 171, 156, 163, 164, 168, 170, - 170, 172, 176, 181, 172, 172, 172, 171, 170, 169, 168, 168, 169, 169, 168, 167, - 167, 167, 167, 168, 173, 170, 168, 167, 168, 169, 168, 168, 166, 154, 168, 154, - 161, 144, 157, 53, 37, 37, 37, 36, 34, 32, 30, 29, 33, 33, 32, 31, - 30, 30, 32, 33, 37, 42, 52, 53, 84, 121, 133, 153, 161, 170, 166, 163, - 169, 166, 154, 150, 157, 163, 166, 164, 161, 161, 160, 157, 158, 154, 151, 150, - 146, 140, 139, 142, 132, 141, 138, 133, 138, 131, 116, 107, 84, 57, 48, 56, - 67, 83, 94, 94, 106, 98, 99, 99, 90, 92, 98, 97, 107, 104, 100, 73, - 71, 73, 77, 79, 70, 53, 38, 17, 17, 21, 24, 18, 11, 10, 16, 23, - 57, 90, 118, 147, 158, 157, 161, 165, 163, 164, 165, 168, 168, 163, 162, 171, - 170, 168, 166, 165, 164, 165, 165, 165, 170, 164, 161, 166, 164, 160, 167, 163, - 162, 159, 159, 159, 158, 156, 154, 158, 142, 160, 154, 130, 151, 86, 27, 36, - 40, 49, 37, 33, 39, 27, 24, 32, 37, 43, 53, 71, 93, 109, 116, 114, - 114, 125, 129, 117, 114, 123, 128, 133, 108, 90, 84, 86, 101, 106, 92, 70, - 106, 142, 156, 156, 159, 163, 164, 171, 171, 171, 172, 172, 172, 173, 173, 181, - 180, 179, 178, 177, 177, 177, 177, 180, 178, 176, 176, 177, 178, 177, 176, 173, - 160, 163, 168, 153, 160, 105, 23, 38, 37, 36, 33, 32, 31, 30, 29, 35, - 32, 29, 28, 30, 31, 29, 27, 31, 37, 42, 31, 50, 84, 101, 128, 152, - 162, 162, 162, 171, 171, 164, 163, 156, 159, 160, 159, 161, 163, 159, 154, 159, - 154, 152, 152, 149, 144, 144, 146, 137, 147, 144, 136, 137, 136, 135, 140, 123, - 93, 69, 59, 53, 62, 77, 79, 96, 97, 107, 111, 106, 106, 104, 92, 94, - 93, 92, 76, 72, 73, 76, 72, 55, 36, 22, 22, 19, 21, 20, 14, 10, - 13, 23, 24, 57, 91, 123, 153, 163, 161, 165, 163, 162, 163, 166, 166, 166, - 164, 163, 169, 169, 168, 167, 166, 166, 166, 166, 164, 169, 163, 159, 164, 160, - 155, 160, 160, 159, 158, 158, 158, 157, 153, 150, 154, 150, 139, 135, 143, 102, - 33, 43, 42, 46, 46, 34, 29, 37, 33, 28, 24, 25, 25, 27, 31, 37, - 40, 41, 50, 45, 52, 54, 42, 37, 43, 44, 49, 48, 48, 45, 46, 53, - 54, 47, 46, 101, 152, 170, 171, 176, 179, 175, 183, 182, 182, 184, 183, 185, - 185, 186, 195, 194, 192, 189, 187, 185, 184, 184, 182, 181, 179, 179, 180, 181, - 180, 178, 175, 178, 147, 164, 167, 124, 47, 41, 33, 31, 29, 27, 27, 27, - 28, 29, 32, 31, 30, 29, 30, 30, 29, 28, 32, 33, 40, 34, 42, 56, - 67, 102, 124, 146, 158, 161, 166, 165, 164, 170, 160, 160, 158, 157, 161, 163, - 158, 150, 154, 152, 154, 158, 158, 151, 146, 145, 145, 152, 146, 135, 134, 132, - 135, 146, 134, 124, 115, 93, 60, 48, 57, 64, 71, 80, 97, 103, 99, 103, - 102, 90, 102, 103, 104, 84, 76, 68, 61, 47, 31, 22, 20, 24, 19, 15, - 14, 13, 11, 16, 24, 42, 70, 100, 128, 153, 157, 154, 159, 160, 165, 170, - 170, 168, 165, 166, 169, 167, 167, 167, 168, 168, 167, 168, 168, 165, 170, 164, - 160, 164, 159, 153, 158, 158, 157, 156, 157, 157, 156, 152, 149, 149, 148, 144, - 121, 138, 38, 35, 54, 40, 38, 32, 30, 29, 27, 30, 29, 18, 25, 35, - 39, 34, 26, 19, 18, 36, 27, 31, 38, 35, 36, 41, 38, 27, 37, 42, - 40, 40, 42, 45, 48, 87, 130, 165, 171, 169, 181, 188, 185, 190, 189, 188, - 188, 187, 188, 188, 189, 195, 194, 191, 189, 187, 185, 185, 184, 184, 182, 181, - 181, 182, 181, 179, 177, 175, 173, 169, 146, 170, 50, 44, 44, 27, 27, 25, - 25, 25, 26, 28, 29, 26, 30, 33, 32, 29, 28, 30, 34, 34, 25, 34, - 39, 42, 37, 42, 86, 102, 126, 142, 152, 163, 161, 153, 153, 165, 163, 159, - 157, 161, 163, 157, 148, 156, 153, 153, 158, 160, 154, 148, 147, 148, 149, 142, - 137, 141, 139, 140, 149, 128, 134, 141, 125, 86, 62, 59, 58, 48, 49, 57, - 57, 51, 61, 76, 78, 83, 93, 102, 83, 67, 50, 36, 22, 12, 14, 24, - 14, 9, 8, 12, 16, 15, 17, 23, 52, 79, 105, 129, 153, 155, 152, 159, - 153, 160, 168, 169, 166, 164, 165, 168, 166, 166, 167, 168, 169, 169, 169, 169, - 168, 173, 168, 164, 167, 162, 156, 159, 156, 155, 154, 155, 155, 153, 150, 147, - 139, 153, 138, 148, 64, 32, 47, 41, 34, 32, 24, 37, 38, 24, 27, 25, - 31, 28, 27, 25, 20, 19, 27, 37, 25, 13, 15, 24, 24, 28, 31, 26, - 36, 33, 20, 16, 26, 29, 34, 51, 110, 142, 167, 170, 171, 182, 184, 178, - 191, 190, 189, 187, 186, 187, 188, 188, 190, 190, 189, 188, 188, 189, 190, 190, - 187, 186, 184, 184, 184, 182, 179, 177, 170, 172, 181, 158, 101, 27, 53, 25, - 27, 26, 26, 27, 27, 28, 30, 31, 22, 29, 34, 33, 29, 27, 31, 36, - 37, 24, 31, 38, 42, 35, 37, 78, 110, 116, 115, 122, 147, 162, 164, 166, - 167, 166, 162, 158, 160, 162, 157, 149, 164, 156, 150, 151, 154, 153, 153, 154, - 151, 150, 142, 140, 146, 141, 135, 141, 140, 139, 143, 135, 112, 93, 75, 56, - 36, 32, 37, 42, 34, 36, 48, 53, 43, 57, 72, 58, 40, 27, 22, 15, - 7, 9, 17, 9, 6, 7, 11, 15, 17, 21, 30, 52, 75, 102, 130, 153, - 155, 153, 162, 150, 155, 164, 168, 168, 166, 164, 164, 165, 166, 168, 170, 171, - 171, 171, 170, 169, 175, 170, 166, 170, 164, 157, 161, 154, 152, 151, 151, 151, - 150, 147, 145, 137, 153, 128, 137, 16, 49, 40, 35, 32, 35, 24, 38, 39, - 24, 30, 21, 25, 22, 24, 29, 28, 22, 19, 21, 36, 25, 27, 32, 27, - 28, 32, 28, 21, 25, 24, 34, 47, 36, 32, 53, 135, 158, 180, 187, 190, - 195, 193, 187, 194, 193, 192, 190, 190, 191, 192, 192, 192, 191, 191, 191, 192, - 193, 194, 195, 190, 188, 186, 185, 185, 182, 178, 175, 169, 179, 164, 153, 30, - 44, 34, 24, 29, 28, 29, 29, 29, 28, 27, 28, 25, 28, 31, 31, 29, - 27, 28, 29, 36, 32, 38, 36, 42, 42, 35, 58, 115, 120, 112, 109, 126, - 145, 160, 175, 165, 165, 162, 158, 159, 161, 158, 151, 166, 158, 150, 152, 155, - 153, 154, 154, 152, 153, 147, 145, 146, 136, 129, 136, 148, 140, 142, 142, 135, - 126, 102, 71, 47, 33, 38, 53, 49, 41, 41, 41, 49, 54, 56, 28, 14, - 11, 19, 22, 12, 4, 4, 15, 12, 9, 11, 10, 14, 23, 38, 54, 77, - 103, 130, 151, 150, 145, 154, 154, 156, 163, 171, 176, 176, 170, 165, 164, 166, - 168, 170, 171, 172, 171, 171, 167, 173, 168, 165, 168, 163, 156, 160, 152, 150, - 148, 147, 148, 147, 145, 144, 146, 136, 141, 70, 43, 34, 34, 40, 31, 40, - 23, 29, 29, 22, 32, 17, 36, 26, 22, 27, 31, 28, 25, 25, 25, 18, - 22, 26, 18, 18, 25, 25, 26, 30, 24, 30, 39, 32, 50, 99, 162, 173, - 178, 177, 176, 182, 188, 191, 194, 194, 192, 191, 191, 193, 196, 197, 194, 193, - 192, 191, 191, 191, 191, 192, 190, 188, 186, 185, 184, 180, 176, 172, 176, 177, - 157, 108, 26, 47, 13, 42, 29, 30, 30, 30, 28, 26, 24, 22, 29, 27, - 27, 28, 29, 28, 25, 22, 27, 36, 45, 33, 39, 46, 27, 28, 99, 125, - 136, 127, 118, 114, 125, 145, 161, 163, 161, 158, 158, 160, 158, 154, 160, 155, - 152, 157, 160, 157, 151, 148, 147, 151, 150, 151, 152, 142, 138, 150, 135, 134, - 145, 153, 152, 150, 131, 101, 70, 38, 30, 47, 49, 44, 45, 48, 53, 49, - 45, 23, 19, 17, 15, 13, 12, 10, 9, 12, 11, 14, 14, 11, 11, 19, - 32, 66, 88, 104, 123, 150, 164, 160, 159, 156, 160, 167, 173, 179, 181, 173, - 164, 156, 157, 161, 167, 172, 175, 174, 172, 171, 168, 166, 165, 164, 162, 156, - 151, 155, 148, 151, 154, 146, 145, 146, 140, 162, 120, 126, 49, 35, 47, 29, - 35, 34, 30, 29, 32, 36, 35, 29, 23, 19, 28, 29, 27, 28, 23, 23, - 35, 27, 28, 27, 25, 22, 23, 25, 28, 28, 24, 24, 39, 55, 67, 100, - 148, 175, 180, 184, 187, 188, 189, 190, 193, 194, 195, 195, 195, 195, 195, 195, - 194, 195, 195, 194, 193, 193, 192, 191, 191, 191, 194, 192, 185, 179, 179, 178, - 176, 185, 158, 161, 55, 41, 30, 27, 28, 28, 25, 33, 37, 27, 25, 27, - 22, 32, 24, 31, 31, 22, 33, 41, 26, 33, 35, 37, 39, 40, 39, 37, - 36, 82, 129, 125, 133, 137, 133, 106, 132, 139, 157, 169, 166, 160, 160, 166, - 168, 165, 159, 157, 160, 159, 153, 150, 153, 155, 153, 151, 150, 150, 146, 143, - 142, 130, 139, 143, 142, 144, 147, 137, 124, 65, 31, 40, 62, 53, 50, 54, - 40, 50, 48, 45, 14, 11, 9, 7, 6, 5, 6, 6, 9, 9, 12, 14, - 13, 13, 20, 33, 54, 86, 112, 128, 143, 147, 146, 151, 167, 167, 170, 170, - 175, 179, 177, 171, 172, 169, 166, 165, 167, 169, 170, 170, 170, 168, 166, 166, - 166, 163, 158, 154, 148, 142, 147, 150, 145, 146, 149, 144, 146, 140, 98, 39, - 40, 40, 33, 32, 29, 26, 25, 28, 31, 30, 25, 20, 23, 28, 25, 23, - 25, 19, 17, 27, 24, 26, 28, 28, 28, 28, 27, 27, 32, 26, 34, 78, - 132, 153, 156, 166, 171, 176, 180, 184, 185, 186, 188, 190, 197, 197, 198, 198, - 197, 197, 197, 196, 193, 193, 192, 192, 192, 191, 191, 191, 188, 188, 184, 180, - 180, 182, 179, 174, 173, 162, 129, 28, 28, 27, 23, 33, 23, 23, 25, 21, - 15, 23, 32, 31, 15, 25, 39, 39, 29, 29, 30, 23, 31, 33, 35, 37, - 38, 38, 37, 36, 61, 122, 126, 131, 135, 132, 127, 125, 128, 140, 150, 154, - 156, 162, 165, 164, 161, 154, 151, 154, 155, 152, 149, 151, 151, 153, 154, 152, - 147, 142, 142, 144, 137, 141, 145, 147, 151, 150, 139, 128, 109, 70, 54, 56, - 45, 44, 53, 53, 57, 54, 51, 13, 10, 8, 7, 6, 8, 9, 9, 6, - 5, 7, 10, 9, 10, 16, 28, 74, 103, 126, 141, 158, 160, 154, 156, 158, - 166, 176, 181, 185, 182, 171, 159, 166, 165, 165, 167, 171, 174, 175, 175, 167, - 166, 165, 165, 166, 163, 158, 154, 147, 141, 145, 148, 144, 147, 149, 142, 136, - 154, 63, 35, 45, 36, 40, 33, 26, 22, 22, 25, 28, 27, 22, 18, 26, - 26, 20, 21, 27, 21, 17, 25, 37, 33, 28, 25, 26, 28, 29, 31, 28, - 46, 74, 116, 158, 169, 164, 167, 174, 178, 183, 186, 187, 189, 191, 193, 196, - 196, 197, 197, 197, 197, 197, 197, 191, 191, 191, 191, 191, 190, 190, 190, 187, - 184, 180, 178, 183, 187, 182, 174, 173, 167, 96, 21, 28, 33, 21, 32, 37, - 37, 30, 23, 30, 41, 36, 18, 22, 28, 24, 22, 29, 32, 30, 31, 28, - 29, 32, 34, 36, 36, 36, 36, 38, 102, 130, 129, 134, 133, 147, 121, 129, - 134, 140, 148, 158, 167, 168, 165, 164, 156, 151, 153, 157, 156, 155, 154, 149, - 155, 158, 154, 146, 142, 144, 147, 143, 139, 141, 150, 157, 151, 140, 131, 113, - 80, 53, 46, 44, 40, 45, 51, 43, 42, 42, 8, 9, 10, 11, 11, 12, - 12, 11, 8, 7, 7, 10, 10, 9, 13, 22, 56, 90, 117, 130, 141, 144, - 145, 155, 149, 161, 175, 182, 184, 179, 166, 154, 157, 160, 167, 173, 178, 177, - 172, 168, 166, 166, 166, 165, 164, 160, 155, 151, 152, 146, 148, 149, 144, 147, - 148, 137, 141, 130, 35, 37, 41, 37, 40, 28, 27, 25, 24, 26, 28, 28, - 24, 21, 24, 23, 18, 22, 31, 24, 19, 27, 25, 25, 27, 31, 38, 41, - 40, 39, 73, 110, 140, 153, 160, 160, 165, 178, 175, 179, 184, 188, 189, 191, - 192, 195, 193, 194, 194, 195, 194, 196, 195, 195, 194, 193, 193, 192, 191, 190, - 189, 189, 187, 187, 184, 182, 185, 188, 184, 177, 165, 141, 58, 30, 30, 38, - 25, 28, 13, 33, 35, 24, 27, 36, 30, 18, 29, 39, 30, 23, 32, 30, - 27, 40, 28, 29, 31, 34, 36, 37, 37, 38, 31, 69, 134, 130, 135, 140, - 150, 128, 140, 140, 142, 146, 155, 163, 166, 167, 168, 161, 155, 155, 159, 160, - 158, 155, 152, 157, 158, 154, 149, 148, 148, 146, 142, 133, 135, 150, 158, 151, - 140, 135, 124, 94, 58, 47, 56, 55, 52, 59, 45, 46, 46, 2, 4, 8, - 12, 13, 13, 10, 8, 16, 13, 12, 14, 12, 9, 11, 17, 31, 75, 116, - 133, 141, 146, 155, 174, 157, 161, 164, 165, 167, 171, 172, 170, 172, 174, 176, - 178, 177, 171, 162, 156, 169, 170, 171, 170, 167, 161, 156, 152, 155, 151, 153, - 153, 148, 151, 149, 133, 145, 79, 24, 43, 30, 38, 32, 22, 25, 24, 25, - 27, 28, 27, 26, 24, 23, 22, 18, 25, 32, 25, 21, 34, 32, 46, 67, - 88, 102, 105, 101, 96, 133, 154, 164, 164, 172, 176, 176, 182, 173, 177, 180, - 184, 186, 187, 189, 191, 191, 192, 192, 194, 193, 195, 194, 195, 198, 197, 195, - 194, 192, 190, 189, 188, 186, 189, 189, 185, 182, 183, 181, 177, 158, 102, 27, - 33, 22, 33, 32, 40, 79, 103, 90, 44, 18, 15, 26, 42, 16, 40, 47, - 43, 41, 25, 17, 34, 29, 30, 32, 34, 36, 37, 38, 40, 38, 40, 129, - 131, 137, 147, 140, 142, 143, 143, 142, 142, 143, 148, 156, 164, 166, 161, 155, - 154, 156, 159, 155, 151, 153, 154, 152, 148, 150, 153, 149, 141, 138, 131, 135, - 150, 159, 153, 144, 141, 146, 109, 59, 39, 48, 52, 51, 57, 49, 50, 48, - 3, 6, 11, 16, 18, 17, 13, 10, 14, 10, 9, 10, 8, 5, 5, 8, - 4, 29, 58, 88, 125, 143, 141, 141, 151, 157, 163, 165, 167, 171, 172, 170, - 184, 182, 177, 174, 171, 169, 166, 163, 172, 174, 176, 175, 171, 165, 161, 157, - 155, 153, 157, 157, 153, 157, 150, 130, 132, 44, 32, 49, 31, 40, 32, 25, - 24, 23, 25, 25, 25, 25, 25, 24, 23, 23, 21, 25, 29, 20, 26, 48, - 89, 100, 115, 129, 141, 150, 157, 161, 154, 164, 166, 164, 173, 174, 172, 175, - 176, 180, 184, 186, 187, 188, 189, 191, 192, 192, 193, 194, 194, 195, 196, 196, - 198, 197, 196, 194, 192, 190, 189, 188, 184, 189, 190, 185, 180, 178, 177, 174, - 180, 116, 47, 38, 23, 31, 35, 74, 122, 159, 170, 157, 141, 98, 39, 12, - 38, 35, 28, 31, 41, 38, 28, 28, 31, 31, 32, 34, 35, 37, 38, 39, - 44, 32, 106, 130, 139, 149, 136, 152, 144, 144, 145, 143, 139, 139, 149, 160, - 161, 162, 160, 157, 157, 159, 157, 153, 151, 152, 147, 143, 148, 154, 149, 136, - 137, 135, 141, 152, 158, 156, 150, 146, 137, 102, 67, 52, 51, 51, 50, 45, - 48, 48, 48, 9, 11, 13, 16, 17, 17, 17, 16, 12, 7, 5, 7, 6, - 2, 0, 3, 14, 19, 27, 55, 105, 136, 136, 131, 138, 151, 164, 170, 171, - 169, 164, 159, 174, 172, 169, 169, 170, 172, 173, 173, 168, 172, 176, 176, 173, - 168, 164, 162, 158, 158, 162, 161, 155, 157, 147, 122, 90, 38, 42, 42, 37, - 34, 33, 31, 23, 23, 24, 24, 24, 23, 25, 25, 24, 25, 23, 24, 25, - 22, 43, 79, 127, 130, 132, 132, 135, 143, 158, 170, 167, 178, 180, 179, 181, - 174, 174, 187, 181, 183, 187, 189, 189, 189, 190, 191, 190, 190, 191, 191, 192, - 193, 194, 195, 194, 194, 193, 193, 192, 191, 191, 190, 185, 188, 187, 183, 182, - 181, 177, 171, 187, 157, 91, 36, 32, 34, 29, 113, 153, 164, 152, 149, 172, - 158, 120, 108, 105, 73, 50, 44, 43, 44, 40, 31, 31, 31, 32, 32, 33, - 35, 36, 37, 40, 45, 72, 126, 140, 143, 147, 152, 149, 148, 150, 150, 143, - 138, 142, 151, 153, 160, 163, 160, 158, 160, 161, 158, 150, 154, 151, 145, 147, - 153, 151, 138, 135, 141, 148, 152, 154, 155, 151, 145, 132, 106, 95, 87, 70, - 67, 71, 59, 65, 63, 64, 8, 7, 7, 8, 9, 10, 13, 14, 15, 10, - 9, 12, 12, 9, 8, 10, 0, 14, 20, 23, 43, 70, 100, 129, 139, 148, - 154, 155, 155, 160, 164, 164, 161, 163, 165, 168, 171, 171, 168, 166, 161, 167, - 171, 174, 170, 166, 163, 162, 163, 163, 167, 163, 155, 154, 141, 113, 46, 39, - 41, 26, 37, 20, 28, 28, 24, 25, 26, 26, 26, 25, 26, 27, 23, 25, - 25, 25, 26, 29, 60, 107, 134, 145, 157, 160, 156, 154, 159, 164, 176, 175, - 172, 178, 188, 184, 180, 190, 179, 182, 184, 186, 185, 185, 186, 187, 187, 188, - 188, 189, 190, 191, 192, 192, 189, 189, 189, 191, 190, 192, 192, 192, 189, 188, - 185, 183, 187, 188, 181, 171, 156, 169, 110, 21, 36, 35, 19, 137, 141, 168, - 165, 162, 177, 165, 152, 171, 156, 140, 133, 107, 53, 28, 34, 35, 31, 31, - 31, 31, 31, 32, 34, 35, 32, 61, 46, 122, 139, 137, 160, 148, 151, 149, - 150, 152, 145, 135, 132, 136, 142, 153, 159, 157, 154, 157, 158, 157, 150, 159, - 158, 150, 149, 154, 153, 144, 133, 145, 152, 148, 147, 151, 147, 140, 141, 112, - 104, 89, 55, 55, 75, 67, 71, 66, 63, 10, 4, 1, 2, 7, 12, 13, - 13, 10, 4, 7, 10, 7, 11, 14, 8, 17, 16, 13, 13, 11, 8, 27, - 68, 123, 129, 137, 144, 150, 154, 158, 159, 165, 159, 158, 159, 164, 167, 167, - 165, 162, 165, 166, 165, 163, 162, 163, 168, 172, 169, 162, 154, 159, 168, 136, - 81, 35, 40, 38, 30, 28, 34, 34, 29, 29, 27, 24, 23, 24, 29, 34, - 36, 33, 31, 25, 27, 46, 80, 107, 121, 141, 146, 150, 151, 152, 156, 162, - 168, 168, 178, 183, 182, 181, 185, 183, 178, 185, 187, 188, 184, 183, 188, 191, - 191, 187, 191, 193, 192, 192, 193, 195, 195, 191, 188, 185, 187, 189, 191, 190, - 188, 188, 182, 186, 189, 183, 185, 185, 176, 164, 111, 78, 41, 37, 28, 27, - 114, 157, 154, 160, 172, 175, 172, 174, 182, 165, 179, 177, 165, 138, 79, 30, - 27, 30, 29, 40, 43, 33, 29, 34, 36, 42, 39, 53, 100, 141, 142, 142, - 156, 148, 156, 159, 154, 145, 141, 138, 135, 136, 149, 161, 163, 158, 159, 159, - 158, 157, 158, 157, 154, 147, 142, 138, 137, 145, 143, 145, 152, 153, 148, 145, - 142, 143, 123, 116, 80, 65, 70, 61, 72, 65, 61, 60, 11, 11, 11, 11, - 11, 9, 9, 9, 14, 7, 10, 13, 11, 14, 17, 12, 7, 14, 16, 19, - 18, 2, 0, 13, 54, 100, 127, 123, 127, 153, 161, 147, 155, 154, 154, 156, - 155, 156, 159, 162, 161, 165, 166, 163, 156, 155, 160, 168, 179, 174, 170, 164, - 159, 149, 102, 42, 49, 47, 46, 44, 37, 29, 28, 32, 29, 28, 29, 31, - 33, 30, 23, 18, 40, 29, 39, 76, 107, 117, 124, 137, 142, 148, 156, 160, - 160, 159, 161, 163, 167, 174, 179, 177, 178, 183, 185, 183, 180, 183, 184, 182, - 185, 189, 189, 185, 196, 190, 183, 180, 184, 188, 186, 181, 189, 185, 184, 184, - 186, 188, 189, 188, 189, 182, 186, 187, 182, 183, 184, 176, 175, 129, 85, 32, - 29, 36, 31, 94, 155, 144, 146, 161, 168, 159, 155, 162, 154, 167, 172, 177, - 177, 143, 80, 32, 50, 32, 21, 27, 34, 34, 34, 36, 42, 31, 49, 75, - 127, 142, 143, 147, 147, 153, 155, 150, 145, 142, 138, 133, 143, 133, 145, 166, - 167, 160, 161, 165, 161, 161, 160, 157, 152, 149, 145, 144, 148, 146, 148, 153, - 153, 148, 142, 141, 144, 130, 115, 78, 50, 63, 59, 71, 68, 66, 65, 7, - 12, 17, 17, 13, 8, 7, 8, 15, 8, 12, 15, 11, 14, 17, 11, 10, - 17, 13, 10, 16, 12, 6, 10, 18, 53, 97, 126, 140, 144, 142, 138, 147, - 152, 156, 155, 151, 151, 159, 166, 160, 164, 166, 162, 156, 156, 162, 171, 159, - 169, 176, 160, 130, 114, 104, 88, 49, 48, 38, 30, 35, 45, 37, 19, 32, - 28, 22, 22, 28, 34, 39, 39, 36, 40, 67, 110, 134, 134, 132, 140, 146, - 152, 159, 163, 164, 164, 166, 169, 168, 172, 175, 174, 175, 181, 185, 186, 183, - 185, 184, 183, 186, 190, 187, 181, 177, 178, 182, 187, 189, 187, 182, 177, 187, - 183, 182, 182, 184, 187, 189, 188, 190, 182, 185, 185, 179, 180, 182, 174, 169, - 130, 81, 26, 30, 44, 19, 35, 96, 143, 163, 142, 136, 162, 169, 155, 174, - 175, 170, 161, 164, 158, 106, 36, 20, 40, 40, 28, 33, 40, 34, 26, 43, - 26, 46, 48, 103, 144, 146, 142, 149, 152, 152, 149, 148, 147, 142, 135, 143, - 124, 134, 156, 160, 165, 169, 160, 165, 162, 158, 157, 157, 155, 152, 149, 149, - 147, 148, 152, 153, 148, 142, 141, 141, 138, 116, 85, 32, 48, 42, 53, 52, - 55, 60, 4, 8, 13, 14, 13, 10, 8, 8, 12, 5, 10, 13, 9, 13, - 16, 11, 14, 21, 11, 2, 10, 19, 20, 25, 7, 12, 38, 80, 110, 119, - 122, 129, 143, 149, 153, 152, 150, 151, 156, 162, 158, 160, 161, 161, 160, 162, - 166, 170, 179, 160, 152, 154, 158, 165, 162, 147, 150, 119, 78, 48, 33, 31, - 38, 46, 31, 33, 34, 33, 30, 27, 26, 26, 53, 84, 112, 119, 120, 129, - 136, 139, 148, 150, 150, 150, 151, 156, 165, 172, 167, 170, 172, 173, 174, 177, - 181, 183, 184, 186, 186, 182, 181, 182, 180, 176, 178, 179, 181, 177, 171, 171, - 183, 196, 181, 181, 183, 185, 186, 187, 187, 187, 190, 182, 184, 184, 177, 178, - 180, 173, 177, 159, 123, 64, 45, 47, 27, 35, 47, 70, 113, 149, 151, 136, - 138, 156, 159, 158, 162, 157, 156, 175, 164, 119, 29, 45, 44, 36, 40, 37, - 29, 28, 42, 32, 43, 38, 71, 145, 148, 147, 154, 154, 152, 151, 154, 155, - 149, 140, 139, 132, 136, 136, 137, 166, 178, 151, 167, 161, 156, 155, 157, 157, - 153, 148, 146, 144, 145, 150, 151, 147, 143, 142, 131, 139, 120, 102, 31, 45, - 36, 41, 38, 47, 54, 10, 9, 8, 10, 12, 13, 10, 8, 9, 3, 8, - 12, 9, 14, 19, 13, 5, 21, 19, 9, 13, 15, 10, 9, 9, 18, 17, - 18, 47, 98, 126, 130, 139, 144, 147, 148, 147, 147, 147, 149, 158, 157, 156, - 158, 160, 162, 161, 160, 166, 156, 161, 174, 179, 181, 174, 159, 156, 139, 145, - 156, 117, 48, 16, 27, 25, 28, 31, 29, 30, 42, 61, 79, 108, 132, 145, - 135, 125, 131, 142, 146, 141, 143, 142, 140, 139, 142, 149, 156, 158, 161, 165, - 170, 172, 174, 177, 181, 175, 181, 182, 176, 172, 173, 176, 176, 175, 178, 185, - 190, 184, 173, 169, 171, 174, 178, 184, 188, 188, 187, 186, 185, 189, 182, 184, - 184, 177, 178, 180, 171, 163, 167, 151, 91, 37, 16, 17, 42, 32, 36, 69, - 124, 157, 153, 141, 140, 158, 159, 171, 171, 158, 160, 158, 133, 114, 71, 34, - 33, 40, 30, 28, 44, 35, 41, 39, 42, 42, 134, 148, 157, 156, 155, 153, - 152, 156, 158, 152, 143, 142, 140, 140, 131, 129, 154, 172, 160, 166, 162, 156, - 155, 158, 158, 152, 147, 144, 141, 142, 148, 150, 147, 144, 144, 126, 135, 120, - 116, 41, 48, 47, 47, 41, 49, 54, 18, 13, 9, 9, 12, 13, 11, 7, - 11, 6, 10, 14, 10, 14, 19, 14, 3, 19, 19, 10, 11, 11, 8, 12, - 17, 23, 24, 20, 26, 49, 77, 100, 128, 136, 140, 144, 145, 145, 144, 142, - 156, 155, 153, 153, 154, 154, 151, 150, 144, 161, 185, 185, 162, 153, 161, 166, - 153, 152, 149, 141, 129, 103, 63, 32, 33, 43, 56, 66, 79, 104, 134, 157, - 150, 144, 142, 147, 146, 140, 141, 147, 144, 148, 150, 150, 145, 141, 140, 142, - 145, 147, 154, 162, 167, 168, 172, 178, 170, 176, 178, 175, 173, 175, 177, 175, - 172, 164, 167, 184, 193, 187, 172, 164, 170, 175, 182, 186, 187, 185, 184, 184, - 187, 180, 184, 186, 179, 179, 180, 171, 176, 177, 169, 141, 100, 68, 48, 40, - 29, 50, 56, 53, 87, 142, 163, 151, 137, 136, 145, 156, 159, 162, 163, 154, - 151, 128, 93, 48, 20, 32, 45, 34, 30, 44, 35, 46, 31, 107, 150, 162, - 156, 155, 153, 151, 154, 157, 152, 144, 149, 141, 138, 144, 141, 133, 144, 168, - 165, 162, 159, 160, 160, 159, 155, 151, 145, 141, 142, 147, 150, 147, 144, 145, - 139, 134, 117, 116, 44, 34, 43, 37, 30, 38, 41, 12, 11, 9, 9, 10, - 11, 10, 9, 14, 7, 10, 14, 10, 12, 15, 9, 10, 17, 10, 3, 8, - 9, 14, 25, 13, 8, 17, 30, 21, 2, 10, 39, 92, 108, 122, 132, 135, - 138, 141, 146, 150, 152, 153, 149, 146, 147, 152, 158, 181, 173, 171, 171, 171, - 180, 178, 160, 155, 169, 164, 146, 151, 156, 111, 48, 85, 102, 127, 146, 153, - 151, 144, 141, 152, 143, 141, 148, 151, 148, 144, 146, 150, 154, 157, 157, 151, - 147, 145, 145, 141, 140, 145, 151, 155, 156, 162, 170, 170, 171, 172, 173, 177, - 177, 170, 160, 160, 135, 114, 114, 126, 142, 163, 182, 167, 173, 178, 180, 180, - 180, 183, 185, 185, 179, 185, 188, 182, 181, 181, 171, 166, 162, 154, 152, 144, - 125, 86, 36, 49, 27, 21, 31, 38, 51, 96, 149, 162, 165, 156, 150, 155, - 153, 147, 147, 141, 153, 153, 90, 22, 35, 57, 27, 30, 41, 37, 44, 41, - 75, 159, 163, 157, 158, 156, 153, 155, 157, 153, 146, 146, 150, 145, 152, 152, - 118, 108, 144, 160, 160, 161, 163, 161, 160, 157, 154, 151, 146, 146, 149, 150, - 147, 143, 144, 149, 129, 117, 120, 57, 24, 38, 22, 17, 27, 32, 0, 4, - 8, 9, 8, 7, 10, 14, 15, 7, 10, 12, 6, 7, 9, 2, 10, 14, - 8, 6, 12, 7, 4, 11, 20, 26, 25, 18, 16, 20, 20, 18, 48, 72, - 97, 111, 117, 123, 134, 145, 143, 150, 153, 147, 141, 145, 161, 175, 171, 169, - 170, 165, 163, 172, 170, 149, 149, 144, 147, 156, 149, 135, 135, 148, 152, 147, - 142, 140, 143, 148, 149, 151, 139, 157, 161, 148, 145, 158, 162, 153, 150, 152, - 152, 150, 146, 146, 149, 153, 144, 140, 140, 144, 145, 144, 150, 160, 167, 165, - 161, 164, 172, 171, 154, 134, 86, 80, 80, 82, 79, 81, 103, 130, 168, 172, - 174, 174, 174, 176, 182, 186, 183, 178, 185, 190, 184, 183, 182, 171, 169, 174, - 167, 158, 149, 150, 137, 96, 61, 44, 39, 47, 42, 33, 47, 75, 116, 141, - 142, 138, 149, 154, 148, 154, 161, 129, 140, 126, 54, 29, 50, 46, 35, 38, - 42, 41, 57, 56, 168, 162, 160, 162, 160, 157, 157, 158, 155, 150, 135, 163, - 158, 148, 150, 113, 84, 107, 152, 154, 159, 161, 161, 159, 157, 157, 156, 151, - 149, 152, 151, 147, 143, 143, 144, 118, 118, 131, 81, 34, 49, 26, 26, 34, - 40, 7, 9, 9, 6, 6, 11, 14, 12, 11, 12, 12, 11, 10, 9, 7, - 7, 11, 13, 12, 10, 8, 8, 10, 13, 14, 18, 20, 18, 19, 17, 11, - 7, 29, 13, 61, 111, 97, 105, 136, 132, 137, 149, 142, 131, 145, 164, 167, - 165, 167, 162, 158, 159, 161, 158, 149, 141, 154, 145, 136, 137, 136, 137, 146, - 155, 143, 142, 139, 138, 140, 143, 146, 148, 152, 155, 157, 158, 158, 154, 149, - 146, 164, 156, 149, 150, 157, 160, 156, 150, 153, 150, 148, 148, 150, 150, 148, - 145, 148, 153, 145, 138, 151, 156, 117, 65, 73, 82, 53, 60, 70, 82, 91, - 100, 147, 170, 174, 165, 168, 174, 178, 184, 178, 176, 177, 180, 185, 186, 180, - 175, 174, 176, 170, 159, 153, 153, 149, 143, 120, 91, 57, 38, 40, 44, 39, - 31, 44, 103, 153, 154, 138, 139, 146, 148, 148, 153, 164, 131, 117, 51, 24, - 57, 45, 35, 42, 52, 38, 79, 159, 173, 155, 167, 166, 154, 152, 161, 160, - 149, 139, 150, 151, 151, 155, 138, 105, 83, 117, 161, 160, 165, 163, 158, 165, - 153, 155, 153, 149, 144, 144, 146, 141, 135, 132, 123, 119, 127, 89, 39, 46, - 57, 43, 53, 73, 8, 10, 9, 6, 6, 11, 13, 11, 11, 11, 11, 11, - 10, 9, 8, 8, 11, 12, 11, 9, 7, 9, 12, 15, 10, 14, 17, 17, - 19, 22, 18, 15, 29, 8, 30, 65, 79, 111, 133, 112, 107, 102, 103, 128, - 157, 164, 169, 187, 146, 145, 145, 148, 152, 154, 150, 146, 145, 142, 141, 146, - 144, 139, 138, 141, 144, 144, 145, 146, 147, 148, 148, 148, 151, 153, 154, 155, - 154, 152, 148, 146, 157, 150, 146, 147, 153, 156, 154, 150, 153, 153, 153, 155, - 157, 155, 152, 148, 147, 147, 139, 130, 120, 110, 91, 74, 58, 75, 76, 65, - 59, 69, 75, 83, 100, 134, 160, 169, 179, 180, 173, 172, 184, 183, 183, 180, - 178, 176, 175, 175, 172, 176, 172, 164, 161, 161, 158, 153, 144, 145, 130, 96, - 56, 33, 35, 47, 29, 47, 78, 117, 150, 161, 150, 134, 166, 155, 151, 146, - 158, 107, 35, 21, 35, 38, 40, 47, 52, 101, 169, 175, 156, 163, 165, 159, - 157, 161, 158, 149, 141, 147, 146, 147, 150, 135, 102, 77, 34, 107, 137, 145, - 145, 152, 172, 165, 151, 151, 150, 146, 147, 148, 142, 135, 144, 127, 114, 123, - 98, 59, 58, 54, 68, 70, 78, 9, 12, 12, 8, 7, 11, 11, 9, 9, - 9, 11, 11, 11, 10, 9, 10, 11, 12, 10, 9, 7, 10, 13, 17, 11, - 13, 15, 15, 19, 23, 21, 19, 25, 22, 19, 12, 16, 43, 56, 39, 24, - 56, 104, 155, 176, 153, 132, 137, 144, 147, 151, 156, 158, 160, 160, 159, 144, - 144, 146, 151, 148, 142, 137, 137, 140, 143, 147, 150, 149, 148, 146, 144, 146, - 148, 148, 148, 146, 146, 145, 143, 147, 145, 143, 145, 147, 150, 150, 150, 152, - 154, 157, 164, 166, 167, 162, 158, 154, 148, 145, 142, 120, 87, 66, 66, 60, - 63, 36, 52, 51, 72, 61, 102, 116, 145, 165, 173, 184, 188, 186, 188, 185, - 186, 186, 182, 175, 175, 180, 186, 174, 176, 176, 172, 170, 170, 167, 162, 153, - 158, 157, 142, 118, 102, 100, 105, 91, 63, 49, 69, 97, 118, 139, 158, 146, - 146, 141, 147, 155, 130, 55, 34, 30, 44, 38, 49, 83, 134, 180, 177, 159, - 159, 160, 162, 163, 160, 154, 150, 146, 145, 146, 147, 146, 133, 105, 79, 42, - 57, 80, 127, 163, 155, 165, 176, 150, 151, 151, 148, 148, 148, 143, 136, 131, - 120, 110, 118, 103, 77, 80, 70, 80, 77, 71, 10, 13, 13, 9, 8, 10, - 10, 6, 8, 8, 10, 11, 11, 11, 10, 11, 11, 11, 9, 9, 8, 11, - 16, 20, 15, 16, 15, 13, 14, 18, 17, 15, 17, 29, 22, 5, 7, 21, - 25, 23, 22, 91, 141, 148, 144, 143, 139, 139, 153, 158, 164, 167, 164, 161, - 158, 159, 150, 149, 146, 146, 145, 144, 144, 146, 142, 144, 147, 150, 151, 149, - 146, 144, 148, 147, 147, 146, 146, 145, 146, 146, 145, 146, 146, 146, 146, 145, - 147, 149, 149, 152, 159, 166, 170, 173, 171, 169, 167, 153, 148, 151, 142, 115, - 92, 83, 66, 84, 71, 44, 58, 63, 100, 88, 135, 153, 160, 159, 167, 174, - 179, 189, 190, 191, 191, 187, 181, 179, 184, 188, 179, 181, 182, 181, 178, 175, - 171, 168, 173, 166, 161, 161, 164, 161, 151, 141, 143, 123, 110, 107, 100, 93, - 109, 133, 145, 157, 156, 157, 143, 131, 62, 43, 33, 46, 36, 66, 127, 166, - 183, 178, 164, 155, 154, 161, 163, 156, 150, 150, 148, 145, 150, 153, 145, 134, - 116, 94, 76, 37, 33, 79, 142, 139, 146, 161, 151, 153, 152, 148, 146, 146, - 143, 138, 132, 133, 126, 121, 91, 64, 70, 61, 68, 71, 66, 10, 14, 13, - 9, 8, 10, 9, 5, 9, 9, 10, 11, 12, 12, 11, 11, 10, 11, 11, - 10, 10, 13, 18, 21, 19, 19, 17, 14, 14, 18, 17, 14, 22, 25, 17, - 17, 32, 33, 23, 24, 50, 118, 150, 128, 121, 143, 157, 158, 150, 157, 163, - 163, 156, 148, 142, 141, 148, 147, 144, 142, 142, 146, 149, 151, 150, 151, 152, - 153, 153, 153, 152, 152, 154, 152, 151, 151, 151, 152, 153, 154, 148, 151, 152, - 150, 148, 146, 146, 148, 149, 153, 158, 163, 165, 168, 169, 169, 168, 159, 146, - 143, 146, 149, 142, 132, 101, 99, 36, 112, 49, 63, 105, 123, 129, 148, 157, - 161, 170, 172, 172, 179, 197, 195, 193, 191, 187, 184, 181, 179, 184, 185, 187, - 189, 188, 184, 180, 178, 175, 175, 174, 170, 165, 162, 163, 164, 164, 158, 153, - 149, 141, 129, 117, 110, 123, 128, 128, 140, 142, 143, 70, 29, 37, 44, 40, - 93, 165, 183, 181, 180, 169, 155, 149, 156, 160, 153, 148, 150, 145, 141, 155, - 159, 145, 135, 127, 110, 62, 52, 50, 41, 95, 123, 149, 154, 154, 156, 153, - 146, 142, 143, 141, 138, 123, 127, 122, 117, 89, 66, 72, 61, 62, 67, 64, - 10, 13, 13, 10, 9, 10, 9, 5, 10, 10, 11, 11, 12, 11, 10, 9, - 10, 11, 12, 13, 12, 14, 17, 20, 19, 21, 19, 17, 19, 23, 22, 17, - 15, 19, 19, 24, 26, 16, 15, 31, 74, 115, 138, 141, 149, 153, 147, 140, - 150, 155, 159, 159, 152, 145, 139, 137, 137, 141, 143, 144, 146, 149, 149, 147, - 153, 152, 151, 151, 151, 152, 151, 152, 150, 150, 150, 150, 151, 151, 152, 153, - 154, 156, 157, 156, 153, 151, 150, 150, 151, 155, 159, 161, 161, 163, 162, 163, - 156, 164, 163, 151, 147, 156, 156, 147, 154, 142, 165, 252, 76, 57, 119, 116, - 144, 158, 163, 167, 176, 177, 177, 186, 187, 188, 190, 193, 193, 192, 189, 186, - 188, 188, 191, 196, 197, 194, 192, 193, 180, 180, 177, 172, 168, 168, 172, 178, - 171, 173, 166, 154, 151, 154, 152, 144, 142, 133, 133, 139, 147, 151, 96, 55, - 43, 53, 62, 124, 183, 182, 178, 182, 174, 159, 149, 152, 157, 153, 148, 146, - 143, 134, 152, 161, 145, 137, 136, 119, 67, 50, 63, 48, 99, 115, 137, 149, - 151, 154, 153, 146, 142, 142, 140, 138, 125, 120, 110, 113, 95, 72, 72, 54, - 42, 45, 44, 8, 11, 12, 9, 10, 11, 10, 6, 11, 11, 11, 11, 10, - 9, 8, 7, 8, 11, 13, 14, 14, 16, 16, 18, 18, 20, 20, 18, 20, - 24, 23, 17, 2, 10, 23, 29, 26, 34, 64, 96, 126, 137, 141, 147, 161, - 163, 159, 161, 154, 154, 153, 150, 148, 145, 144, 143, 137, 142, 146, 145, 148, - 153, 153, 149, 150, 150, 150, 150, 149, 149, 149, 149, 148, 147, 148, 149, 150, - 150, 151, 152, 157, 159, 159, 159, 158, 157, 155, 153, 153, 159, 166, 169, 168, - 168, 166, 166, 157, 169, 174, 165, 157, 156, 151, 142, 146, 173, 137, 60, 155, - 148, 160, 155, 155, 162, 158, 158, 167, 172, 178, 192, 184, 190, 196, 198, 197, - 195, 197, 198, 191, 189, 191, 198, 199, 195, 195, 198, 206, 195, 184, 180, 183, - 183, 176, 169, 163, 177, 182, 176, 167, 165, 164, 162, 162, 144, 146, 124, 115, - 99, 62, 30, 59, 84, 107, 155, 182, 172, 176, 181, 175, 164, 153, 153, 158, - 158, 149, 140, 148, 130, 148, 162, 149, 144, 143, 119, 77, 29, 48, 60, 126, - 114, 113, 128, 141, 148, 152, 148, 144, 143, 140, 137, 143, 134, 120, 119, 89, - 52, 45, 29, 29, 30, 36, 8, 12, 12, 9, 10, 12, 10, 7, 12, 12, - 12, 11, 10, 9, 7, 7, 8, 11, 14, 16, 16, 15, 16, 17, 17, 19, - 19, 17, 18, 21, 19, 11, 24, 15, 15, 21, 36, 71, 108, 124, 126, 144, - 146, 144, 153, 161, 161, 166, 148, 144, 138, 135, 134, 136, 138, 139, 145, 149, - 148, 145, 147, 154, 158, 156, 152, 153, 153, 154, 153, 153, 151, 151, 152, 153, - 154, 156, 156, 157, 157, 158, 159, 158, 158, 160, 162, 162, 159, 157, 153, 161, - 172, 179, 180, 178, 177, 176, 176, 170, 161, 158, 160, 164, 163, 158, 164, 126, - 153, 163, 143, 166, 148, 156, 151, 160, 162, 168, 181, 186, 192, 205, 199, 207, - 212, 207, 196, 190, 192, 197, 193, 190, 191, 196, 196, 190, 190, 194, 187, 185, - 183, 186, 188, 190, 190, 188, 190, 184, 177, 173, 171, 171, 172, 173, 175, 155, - 174, 158, 161, 133, 93, 52, 77, 117, 148, 176, 175, 163, 175, 178, 176, 167, - 157, 156, 161, 162, 150, 136, 155, 131, 145, 163, 153, 151, 148, 119, 74, 46, - 76, 77, 146, 145, 135, 130, 133, 143, 151, 150, 148, 146, 141, 136, 115, 117, - 118, 121, 84, 44, 48, 50, 62, 58, 62, 11, 11, 11, 10, 10, 9, 10, - 9, 9, 12, 12, 12, 9, 8, 8, 8, 9, 12, 14, 16, 16, 16, 17, - 19, 19, 24, 25, 20, 18, 18, 17, 11, 8, 18, 11, 36, 72, 123, 129, - 136, 147, 158, 148, 159, 140, 127, 102, 113, 113, 119, 123, 124, 127, 136, 143, - 146, 140, 143, 149, 152, 154, 155, 157, 158, 148, 148, 148, 148, 149, 151, 153, - 154, 149, 155, 158, 157, 157, 159, 160, 159, 164, 165, 165, 164, 161, 160, 160, - 161, 164, 174, 174, 173, 179, 176, 172, 177, 178, 172, 166, 163, 160, 159, 156, - 155, 154, 154, 151, 154, 157, 158, 155, 152, 161, 163, 165, 162, 158, 162, 174, - 183, 202, 210, 208, 193, 184, 187, 189, 186, 181, 183, 189, 193, 189, 184, 187, - 194, 189, 187, 184, 182, 179, 178, 178, 179, 179, 189, 191, 182, 180, 188, 191, - 186, 176, 171, 174, 174, 163, 151, 129, 101, 122, 145, 167, 177, 178, 179, 176, - 171, 184, 168, 155, 159, 167, 163, 150, 139, 149, 157, 147, 133, 152, 178, 162, - 121, 99, 40, 75, 119, 145, 142, 158, 169, 142, 129, 142, 155, 145, 141, 142, - 128, 126, 117, 117, 121, 69, 71, 69, 60, 70, 81, 82, 10, 10, 10, 10, - 11, 11, 12, 12, 9, 11, 12, 11, 9, 8, 10, 10, 11, 14, 16, 17, - 16, 16, 17, 18, 22, 27, 25, 19, 15, 17, 14, 10, 25, 21, 31, 83, - 104, 126, 128, 145, 135, 157, 165, 121, 89, 58, 34, 50, 52, 74, 102, 123, - 135, 141, 140, 137, 147, 150, 154, 155, 154, 153, 153, 154, 151, 150, 150, 151, - 152, 154, 155, 156, 155, 160, 162, 160, 158, 160, 160, 159, 163, 166, 168, 168, - 165, 164, 165, 165, 161, 170, 170, 169, 175, 173, 169, 174, 168, 166, 164, 162, - 161, 160, 157, 154, 154, 153, 152, 155, 160, 164, 163, 162, 161, 162, 163, 165, - 165, 165, 165, 167, 177, 192, 199, 194, 189, 190, 185, 179, 185, 183, 185, 191, - 193, 189, 186, 187, 187, 186, 184, 183, 182, 182, 181, 181, 179, 188, 190, 182, - 179, 185, 185, 180, 195, 187, 185, 182, 174, 174, 167, 150, 152, 167, 178, 179, - 176, 176, 176, 173, 182, 173, 167, 171, 173, 166, 152, 144, 138, 152, 160, 156, - 155, 153, 141, 125, 103, 57, 95, 133, 154, 148, 157, 161, 181, 148, 135, 144, - 148, 153, 149, 126, 122, 112, 114, 121, 71, 66, 66, 67, 91, 99, 100, 9, - 9, 10, 11, 11, 12, 14, 14, 10, 11, 13, 13, 11, 11, 13, 14, 14, - 17, 19, 19, 17, 17, 17, 19, 20, 22, 20, 16, 15, 17, 15, 13, 28, - 20, 48, 110, 118, 132, 138, 151, 155, 164, 145, 53, 40, 37, 59, 101, 95, - 114, 133, 142, 143, 143, 142, 140, 146, 149, 151, 152, 150, 148, 148, 148, 154, - 153, 154, 154, 156, 157, 159, 160, 158, 163, 165, 162, 161, 163, 164, 163, 161, - 164, 168, 169, 168, 167, 167, 168, 160, 170, 168, 167, 172, 169, 165, 171, 163, - 163, 163, 164, 164, 162, 158, 154, 154, 153, 153, 156, 162, 168, 171, 173, 172, - 168, 165, 166, 172, 173, 168, 163, 166, 180, 190, 190, 188, 187, 183, 176, 184, - 178, 177, 186, 195, 195, 187, 182, 184, 184, 184, 185, 185, 185, 186, 186, 182, - 190, 192, 186, 183, 186, 184, 178, 189, 182, 180, 175, 169, 176, 181, 172, 172, - 180, 185, 183, 178, 176, 174, 172, 176, 173, 173, 178, 177, 166, 152, 146, 140, - 147, 162, 172, 162, 142, 132, 133, 96, 77, 124, 144, 149, 141, 156, 167, 182, - 148, 127, 130, 140, 149, 142, 120, 122, 114, 115, 115, 69, 58, 61, 67, 76, - 83, 82, 11, 11, 11, 11, 11, 12, 13, 13, 12, 13, 15, 15, 14, 14, - 18, 19, 14, 17, 19, 20, 19, 18, 20, 21, 15, 15, 13, 13, 14, 18, - 20, 20, 28, 32, 64, 115, 113, 144, 155, 147, 155, 154, 98, 37, 43, 41, - 63, 86, 121, 133, 141, 141, 138, 144, 150, 156, 142, 146, 148, 151, 150, 151, - 151, 153, 155, 155, 156, 156, 158, 159, 161, 162, 159, 164, 166, 163, 162, 165, - 167, 165, 160, 164, 167, 169, 167, 165, 164, 164, 164, 172, 169, 168, 172, 169, - 164, 170, 164, 164, 163, 165, 165, 164, 159, 156, 153, 152, 152, 154, 159, 166, - 173, 176, 179, 171, 162, 161, 166, 171, 172, 170, 173, 180, 183, 181, 178, 181, - 182, 180, 180, 174, 171, 180, 190, 192, 188, 185, 182, 183, 184, 184, 185, 185, - 185, 185, 185, 191, 194, 191, 190, 191, 187, 181, 190, 187, 190, 187, 179, 183, - 188, 181, 172, 179, 186, 189, 187, 184, 180, 176, 175, 171, 172, 179, 180, 170, - 157, 150, 155, 149, 152, 164, 167, 155, 144, 144, 106, 93, 130, 136, 147, 147, - 156, 159, 140, 130, 125, 128, 133, 134, 128, 118, 119, 120, 116, 93, 52, 45, - 52, 54, 64, 75, 78, 14, 13, 12, 11, 10, 9, 10, 9, 11, 12, 13, - 13, 12, 14, 16, 20, 14, 15, 18, 20, 19, 20, 21, 22, 15, 12, 10, - 12, 17, 19, 21, 23, 36, 41, 73, 122, 119, 149, 157, 143, 144, 133, 42, - 41, 48, 38, 56, 63, 110, 126, 140, 144, 143, 145, 146, 146, 148, 151, 154, - 155, 156, 157, 160, 162, 156, 156, 156, 157, 158, 160, 161, 162, 163, 167, 168, - 163, 161, 164, 165, 163, 162, 166, 169, 170, 166, 164, 162, 162, 166, 173, 169, - 165, 168, 165, 160, 167, 168, 167, 164, 162, 163, 161, 158, 156, 152, 151, 150, - 151, 153, 159, 165, 169, 173, 170, 164, 159, 159, 163, 166, 169, 175, 177, 176, - 173, 171, 175, 178, 180, 180, 174, 172, 176, 180, 182, 183, 187, 182, 182, 182, - 182, 182, 182, 183, 183, 183, 188, 191, 193, 194, 194, 190, 185, 190, 189, 194, - 191, 181, 184, 188, 181, 173, 175, 180, 186, 189, 189, 186, 185, 179, 170, 166, - 173, 179, 175, 164, 157, 159, 156, 154, 157, 164, 163, 154, 143, 120, 103, 125, - 128, 155, 159, 147, 130, 117, 125, 128, 132, 135, 132, 125, 124, 115, 122, 110, - 66, 38, 41, 53, 45, 63, 81, 90, 14, 13, 12, 11, 9, 8, 7, 7, - 9, 10, 10, 9, 9, 10, 13, 16, 14, 17, 18, 20, 19, 19, 20, 21, - 19, 13, 10, 14, 18, 18, 17, 20, 29, 34, 66, 126, 131, 146, 148, 154, - 152, 110, 15, 38, 38, 47, 85, 110, 129, 139, 147, 149, 148, 147, 144, 142, - 153, 155, 156, 157, 156, 156, 158, 160, 157, 157, 157, 158, 159, 161, 162, 163, - 168, 171, 170, 164, 160, 161, 162, 160, 166, 168, 170, 171, 168, 164, 163, 163, - 162, 169, 166, 162, 165, 162, 158, 165, 169, 166, 164, 163, 161, 159, 156, 155, - 153, 152, 151, 149, 147, 149, 153, 159, 165, 168, 170, 169, 165, 162, 164, 166, - 167, 168, 170, 172, 172, 173, 174, 174, 182, 178, 175, 176, 175, 173, 176, 182, - 181, 180, 179, 178, 179, 180, 182, 183, 180, 182, 186, 190, 193, 193, 190, 186, - 185, 181, 183, 179, 171, 177, 184, 178, 175, 170, 166, 171, 175, 178, 180, 183, - 176, 165, 157, 162, 170, 169, 162, 157, 149, 162, 167, 162, 158, 157, 149, 137, - 108, 115, 148, 141, 150, 139, 128, 126, 129, 136, 128, 126, 137, 137, 127, 125, - 120, 122, 107, 58, 49, 55, 67, 58, 63, 82, 93, 11, 12, 11, 10, 9, - 8, 7, 7, 9, 10, 11, 9, 8, 10, 13, 16, 17, 20, 21, 21, 19, - 17, 16, 17, 19, 12, 10, 17, 22, 21, 17, 20, 26, 48, 71, 114, 122, - 141, 145, 160, 146, 77, 44, 58, 65, 79, 96, 115, 130, 135, 136, 138, 143, - 153, 157, 156, 154, 155, 156, 155, 153, 154, 155, 156, 158, 158, 159, 159, 160, - 162, 164, 165, 167, 171, 170, 164, 162, 164, 165, 164, 165, 167, 168, 168, 165, - 165, 165, 165, 158, 165, 162, 161, 166, 164, 162, 170, 169, 169, 168, 168, 167, - 165, 159, 157, 154, 154, 153, 148, 145, 145, 147, 151, 156, 160, 164, 165, 165, - 166, 169, 171, 166, 165, 166, 168, 170, 171, 171, 173, 178, 177, 176, 178, 178, - 174, 174, 178, 180, 178, 176, 175, 177, 180, 185, 187, 182, 181, 183, 189, 193, - 193, 190, 187, 190, 186, 188, 186, 180, 186, 191, 184, 175, 166, 161, 165, 169, - 170, 171, 173, 175, 166, 159, 161, 164, 162, 158, 158, 153, 163, 168, 164, 156, - 151, 143, 135, 103, 123, 161, 144, 141, 122, 124, 143, 143, 151, 137, 126, 135, - 133, 124, 126, 127, 115, 97, 61, 70, 65, 75, 72, 77, 93, 101, 9, 9, - 9, 9, 9, 8, 8, 8, 13, 14, 14, 12, 11, 12, 16, 19, 20, 22, - 22, 21, 17, 14, 13, 13, 15, 9, 9, 19, 24, 24, 21, 25, 44, 89, - 99, 103, 105, 140, 147, 154, 143, 49, 69, 69, 103, 135, 134, 148, 145, 149, - 150, 153, 156, 160, 155, 150, 156, 159, 158, 158, 157, 158, 159, 161, 160, 160, - 160, 161, 162, 164, 165, 166, 162, 166, 167, 164, 164, 169, 172, 172, 160, 162, - 164, 163, 162, 162, 163, 166, 156, 164, 162, 161, 169, 169, 167, 176, 170, 172, - 174, 176, 177, 173, 166, 159, 155, 156, 154, 149, 144, 143, 145, 148, 144, 144, - 144, 146, 153, 162, 170, 176, 175, 170, 165, 164, 165, 168, 171, 175, 173, 172, - 174, 181, 184, 182, 179, 179, 178, 177, 174, 173, 176, 182, 188, 192, 186, 184, - 185, 190, 194, 194, 191, 189, 184, 182, 188, 190, 184, 187, 185, 173, 176, 169, - 167, 176, 180, 176, 171, 169, 180, 175, 171, 171, 168, 163, 162, 165, 167, 160, - 156, 159, 159, 154, 144, 138, 125, 122, 137, 125, 143, 138, 135, 146, 143, 163, - 155, 136, 136, 129, 122, 133, 127, 100, 81, 60, 78, 60, 65, 71, 83, 94, - 97, 7, 11, 12, 10, 10, 12, 11, 7, 12, 8, 6, 8, 13, 18, 17, - 15, 22, 17, 13, 14, 18, 18, 12, 7, 19, 17, 29, 23, 18, 23, 17, - 32, 69, 103, 102, 104, 114, 119, 139, 147, 136, 67, 81, 112, 119, 129, 130, - 142, 144, 149, 154, 160, 161, 162, 159, 157, 158, 158, 158, 160, 161, 162, 163, - 163, 166, 167, 168, 167, 165, 164, 165, 166, 170, 167, 165, 164, 165, 165, 164, - 162, 170, 168, 164, 160, 157, 157, 156, 157, 159, 163, 165, 164, 162, 164, 169, - 174, 172, 177, 176, 176, 152, 171, 159, 156, 153, 156, 156, 153, 149, 152, 157, - 161, 157, 160, 151, 147, 151, 151, 155, 169, 168, 172, 173, 170, 163, 161, 166, - 174, 174, 182, 185, 180, 175, 178, 181, 181, 174, 176, 178, 177, 176, 178, 182, - 186, 184, 185, 188, 191, 194, 194, 191, 188, 192, 189, 186, 183, 179, 177, 178, - 183, 172, 167, 170, 184, 189, 183, 180, 184, 168, 172, 175, 176, 173, 170, 169, - 170, 166, 156, 160, 167, 157, 150, 146, 138, 130, 118, 139, 139, 137, 152, 145, - 154, 162, 164, 155, 138, 130, 131, 131, 126, 116, 94, 78, 61, 64, 69, 60, - 77, 78, 94, 102, 7, 11, 12, 10, 10, 12, 11, 7, 12, 12, 12, 11, - 13, 15, 19, 21, 23, 21, 17, 15, 14, 13, 12, 12, 24, 19, 28, 21, - 20, 26, 20, 33, 88, 116, 110, 110, 117, 121, 135, 137, 133, 90, 104, 118, - 119, 136, 141, 145, 150, 152, 156, 160, 161, 160, 157, 154, 158, 158, 159, 161, - 161, 162, 163, 163, 162, 162, 164, 164, 163, 163, 165, 167, 167, 165, 163, 163, - 164, 164, 163, 162, 169, 168, 164, 161, 158, 158, 157, 159, 161, 161, 161, 163, - 165, 169, 170, 170, 165, 171, 166, 170, 156, 169, 153, 152, 158, 148, 147, 153, - 155, 161, 160, 147, 148, 156, 157, 159, 163, 155, 145, 148, 159, 163, 167, 166, - 163, 163, 165, 168, 174, 182, 186, 181, 178, 181, 183, 182, 179, 179, 179, 178, - 177, 177, 180, 182, 180, 184, 190, 196, 199, 200, 199, 199, 185, 186, 187, 186, - 183, 178, 175, 175, 174, 168, 171, 185, 189, 180, 170, 167, 178, 180, 180, 176, - 170, 164, 161, 161, 163, 157, 165, 169, 157, 148, 147, 142, 123, 118, 144, 147, - 147, 158, 152, 160, 156, 159, 152, 139, 132, 134, 132, 127, 116, 83, 70, 61, - 62, 67, 61, 72, 81, 96, 101, 7, 11, 12, 10, 9, 12, 11, 8, 13, - 15, 17, 14, 11, 12, 18, 25, 19, 20, 18, 16, 11, 13, 17, 20, 20, - 14, 21, 16, 19, 28, 23, 35, 102, 125, 114, 114, 125, 126, 135, 131, 123, - 105, 120, 120, 117, 141, 150, 144, 155, 156, 157, 159, 158, 157, 154, 153, 158, - 159, 159, 160, 161, 162, 162, 163, 160, 161, 163, 163, 164, 165, 168, 171, 166, - 164, 163, 163, 165, 165, 164, 163, 166, 166, 163, 161, 159, 158, 159, 160, 162, - 160, 159, 163, 169, 172, 169, 166, 163, 172, 161, 166, 162, 163, 147, 148, 150, - 142, 151, 154, 140, 148, 166, 164, 158, 165, 162, 160, 166, 162, 154, 156, 152, - 155, 160, 166, 168, 167, 165, 164, 173, 181, 185, 184, 181, 182, 184, 183, 185, - 182, 180, 179, 179, 179, 179, 178, 176, 182, 189, 192, 190, 187, 186, 186, 186, - 186, 185, 183, 179, 176, 173, 171, 173, 168, 172, 187, 194, 189, 180, 176, 174, - 175, 174, 171, 167, 164, 162, 162, 162, 160, 170, 171, 156, 146, 144, 139, 114, - 123, 149, 154, 154, 160, 155, 162, 153, 157, 152, 138, 133, 135, 131, 124, 116, - 70, 65, 66, 61, 67, 66, 70, 93, 104, 103, 7, 11, 11, 9, 9, 12, - 12, 9, 13, 15, 17, 17, 15, 15, 17, 20, 12, 14, 15, 15, 16, 19, - 22, 25, 15, 10, 22, 16, 18, 29, 28, 45, 105, 126, 114, 117, 132, 136, - 142, 135, 121, 115, 123, 124, 124, 144, 154, 146, 155, 155, 155, 156, 155, 155, - 154, 154, 159, 159, 159, 160, 161, 163, 162, 163, 164, 166, 168, 168, 168, 170, - 172, 175, 165, 164, 164, 165, 167, 167, 166, 164, 162, 162, 161, 161, 159, 160, - 161, 161, 164, 163, 163, 167, 169, 170, 167, 165, 164, 177, 163, 165, 166, 155, - 147, 146, 153, 145, 159, 162, 140, 139, 152, 149, 163, 169, 162, 160, 168, 170, - 166, 168, 155, 155, 158, 163, 169, 170, 167, 163, 171, 176, 181, 184, 183, 182, - 182, 183, 187, 184, 181, 179, 180, 181, 179, 178, 187, 194, 201, 202, 197, 191, - 190, 191, 195, 191, 183, 174, 170, 171, 171, 170, 158, 159, 165, 178, 185, 183, - 180, 180, 168, 168, 167, 165, 164, 163, 162, 162, 165, 161, 167, 168, 155, 146, - 140, 130, 111, 132, 151, 155, 156, 155, 152, 160, 156, 158, 151, 138, 131, 133, - 128, 118, 111, 62, 67, 74, 61, 68, 74, 78, 78, 88, 83, 7, 11, 11, - 8, 9, 13, 13, 10, 12, 12, 14, 17, 18, 18, 14, 10, 14, 12, 12, - 17, 23, 25, 22, 18, 16, 15, 29, 21, 19, 27, 29, 49, 103, 126, 119, - 125, 141, 146, 151, 144, 135, 125, 122, 133, 140, 144, 152, 150, 152, 152, 152, - 153, 153, 155, 155, 155, 159, 159, 158, 160, 161, 162, 163, 162, 169, 170, 172, - 172, 171, 170, 171, 172, 162, 161, 161, 162, 164, 164, 162, 161, 160, 160, 160, - 160, 160, 162, 162, 164, 165, 168, 171, 170, 167, 165, 164, 166, 162, 176, 165, - 163, 163, 150, 154, 139, 102, 93, 112, 142, 157, 163, 159, 142, 150, 164, 167, - 168, 175, 175, 164, 161, 162, 159, 157, 159, 164, 166, 166, 163, 167, 170, 175, - 180, 182, 181, 180, 182, 186, 184, 182, 181, 181, 182, 183, 182, 182, 189, 198, - 200, 197, 194, 194, 196, 197, 194, 184, 173, 169, 171, 169, 164, 161, 169, 183, - 194, 194, 188, 183, 183, 174, 172, 169, 166, 163, 161, 158, 157, 163, 156, 159, - 160, 153, 148, 141, 125, 111, 141, 151, 153, 157, 152, 153, 162, 156, 156, 148, - 135, 129, 130, 124, 113, 96, 58, 70, 77, 60, 66, 77, 86, 94, 104, 103, - 8, 11, 10, 7, 8, 13, 13, 12, 13, 11, 12, 15, 19, 18, 12, 6, - 20, 16, 14, 17, 23, 23, 16, 9, 16, 13, 26, 18, 14, 21, 19, 38, - 103, 132, 128, 136, 149, 150, 155, 149, 146, 134, 119, 136, 148, 139, 146, 147, - 150, 150, 152, 153, 154, 156, 156, 156, 158, 159, 159, 160, 161, 162, 163, 163, - 167, 170, 173, 173, 171, 168, 167, 166, 158, 158, 158, 159, 161, 160, 158, 156, - 158, 159, 160, 163, 164, 166, 167, 169, 168, 173, 174, 173, 167, 165, 165, 169, - 157, 168, 161, 160, 160, 151, 164, 119, 35, 38, 52, 82, 113, 132, 144, 158, - 154, 170, 169, 162, 167, 169, 166, 167, 166, 161, 157, 156, 159, 161, 162, 161, - 166, 166, 169, 176, 179, 179, 179, 181, 183, 184, 184, 183, 181, 181, 185, 187, - 180, 184, 189, 189, 186, 183, 182, 183, 190, 192, 189, 181, 177, 177, 167, 156, - 159, 173, 191, 205, 208, 202, 194, 190, 172, 171, 168, 168, 168, 167, 164, 161, - 157, 150, 150, 153, 150, 151, 144, 126, 110, 148, 150, 152, 161, 154, 157, 163, - 149, 152, 145, 134, 128, 127, 115, 101, 80, 58, 71, 72, 60, 68, 78, 90, - 93, 104, 101, 8, 11, 10, 7, 8, 13, 14, 13, 14, 14, 14, 14, 15, - 14, 12, 10, 21, 20, 18, 18, 18, 16, 12, 7, 14, 7, 16, 12, 16, - 24, 17, 29, 97, 132, 135, 142, 150, 147, 152, 149, 144, 141, 121, 135, 149, - 141, 152, 152, 151, 151, 152, 154, 156, 157, 156, 156, 159, 159, 159, 160, 160, - 162, 163, 163, 163, 168, 172, 174, 172, 168, 165, 163, 160, 159, 159, 161, 161, - 160, 157, 155, 159, 161, 164, 167, 168, 171, 172, 173, 171, 173, 171, 171, 170, - 169, 170, 172, 162, 162, 159, 161, 161, 155, 168, 84, 31, 47, 43, 42, 55, - 57, 75, 120, 154, 170, 167, 156, 158, 165, 170, 177, 167, 164, 161, 159, 160, - 161, 162, 163, 165, 164, 166, 174, 178, 178, 179, 183, 183, 187, 188, 186, 181, - 180, 184, 190, 198, 198, 197, 195, 192, 189, 186, 185, 187, 192, 190, 183, 182, - 183, 173, 158, 154, 159, 167, 179, 188, 192, 189, 183, 167, 166, 165, 167, 170, - 169, 165, 162, 156, 150, 150, 149, 144, 147, 143, 126, 110, 154, 147, 150, 163, - 152, 152, 156, 147, 150, 146, 136, 127, 117, 98, 77, 69, 63, 71, 64, 65, - 78, 80, 91, 107, 119, 117, 9, 11, 10, 7, 8, 13, 15, 14, 16, 18, - 17, 15, 10, 9, 13, 18, 19, 20, 20, 17, 14, 12, 12, 14, 18, 7, - 14, 14, 27, 39, 29, 33, 88, 128, 135, 143, 146, 141, 148, 147, 141, 151, - 129, 141, 154, 151, 167, 164, 154, 155, 156, 158, 159, 159, 158, 156, 159, 159, - 159, 160, 161, 163, 164, 163, 162, 167, 173, 176, 175, 170, 166, 164, 163, 163, - 163, 164, 165, 163, 159, 157, 161, 163, 167, 170, 173, 175, 176, 178, 175, 171, - 168, 168, 173, 176, 175, 174, 173, 164, 163, 165, 165, 161, 169, 56, 30, 49, - 38, 38, 60, 48, 41, 78, 128, 154, 164, 161, 162, 165, 163, 165, 168, 167, - 166, 165, 164, 164, 164, 165, 166, 163, 165, 173, 178, 178, 180, 186, 183, 188, - 192, 188, 179, 176, 182, 190, 190, 189, 187, 188, 189, 189, 188, 185, 189, 191, - 186, 177, 178, 184, 179, 167, 185, 174, 163, 164, 177, 189, 191, 186, 172, 170, - 167, 167, 166, 161, 154, 148, 160, 156, 157, 151, 140, 141, 138, 124, 110, 156, - 145, 147, 162, 147, 143, 142, 145, 150, 147, 136, 123, 106, 79, 53, 66, 67, - 71, 60, 72, 89, 84, 95, 100, 112, 116, 12, 13, 15, 17, 17, 17, 17, - 16, 20, 17, 13, 12, 10, 12, 15, 18, 19, 18, 17, 17, 16, 16, 16, - 16, 17, 18, 21, 21, 23, 24, 28, 36, 81, 132, 134, 129, 137, 138, 147, - 152, 148, 146, 136, 135, 151, 160, 163, 172, 159, 160, 161, 161, 158, 156, 157, - 158, 160, 154, 152, 158, 161, 162, 162, 163, 171, 170, 169, 168, 168, 168, 165, - 164, 157, 157, 158, 160, 164, 163, 161, 160, 160, 164, 167, 170, 172, 173, 173, - 172, 182, 177, 171, 167, 166, 168, 169, 171, 177, 162, 168, 163, 162, 160, 147, - 31, 35, 58, 44, 43, 42, 54, 42, 53, 101, 155, 165, 153, 152, 171, 149, - 166, 165, 171, 168, 162, 164, 171, 165, 153, 171, 169, 165, 164, 168, 178, 185, - 188, 193, 191, 187, 183, 180, 181, 185, 188, 188, 192, 196, 195, 190, 185, 183, - 182, 189, 186, 183, 184, 185, 181, 173, 166, 165, 176, 174, 151, 179, 176, 181, - 183, 167, 163, 168, 169, 160, 161, 165, 160, 164, 152, 155, 153, 140, 144, 143, - 120, 118, 149, 146, 134, 149, 148, 135, 143, 144, 136, 118, 98, 82, 75, 68, - 60, 69, 67, 66, 67, 74, 85, 96, 103, 111, 106, 101, 12, 13, 13, 14, - 15, 15, 15, 14, 17, 17, 17, 16, 17, 18, 18, 19, 15, 15, 15, 14, - 14, 15, 15, 17, 19, 21, 24, 24, 24, 26, 28, 35, 81, 130, 134, 132, - 137, 138, 151, 157, 156, 156, 145, 143, 155, 160, 159, 166, 162, 165, 168, 167, - 164, 160, 157, 156, 161, 156, 153, 156, 159, 157, 157, 158, 166, 166, 165, 167, - 166, 167, 164, 163, 164, 167, 167, 166, 162, 160, 159, 162, 166, 168, 168, 169, - 170, 171, 172, 173, 175, 174, 173, 173, 173, 171, 167, 165, 168, 161, 165, 164, - 167, 157, 135, 31, 48, 49, 36, 55, 56, 62, 42, 44, 77, 156, 166, 159, - 159, 166, 149, 164, 166, 172, 171, 167, 170, 174, 169, 157, 163, 163, 162, 164, - 168, 176, 181, 185, 183, 183, 181, 178, 176, 179, 187, 193, 197, 198, 198, 195, - 190, 186, 186, 187, 193, 189, 186, 186, 185, 182, 175, 169, 163, 170, 161, 147, - 171, 179, 182, 183, 169, 163, 165, 164, 155, 157, 163, 161, 166, 155, 157, 153, - 141, 142, 139, 118, 114, 145, 147, 140, 152, 145, 126, 129, 92, 88, 79, 69, - 63, 64, 64, 61, 68, 67, 66, 69, 78, 90, 103, 112, 115, 110, 106, 11, - 10, 11, 11, 11, 10, 11, 12, 12, 13, 15, 15, 16, 17, 16, 15, 16, - 17, 16, 16, 15, 15, 16, 16, 15, 18, 21, 22, 23, 26, 30, 36, 74, - 119, 128, 130, 133, 132, 147, 152, 158, 160, 151, 149, 159, 161, 157, 161, 163, - 166, 171, 172, 169, 162, 155, 152, 154, 150, 151, 156, 161, 163, 165, 168, 164, - 165, 165, 167, 166, 165, 164, 163, 156, 162, 165, 164, 159, 159, 165, 172, 172, - 171, 169, 169, 169, 170, 172, 173, 174, 173, 173, 173, 173, 171, 167, 165, 164, - 165, 166, 167, 176, 157, 118, 38, 56, 40, 35, 66, 59, 60, 48, 50, 62, - 165, 163, 158, 158, 154, 150, 163, 164, 169, 170, 168, 170, 176, 171, 160, 159, - 160, 161, 165, 168, 174, 179, 184, 179, 181, 180, 177, 175, 179, 189, 198, 203, - 201, 197, 192, 187, 185, 187, 189, 194, 190, 186, 185, 185, 183, 176, 173, 167, - 169, 150, 147, 159, 180, 177, 181, 171, 163, 163, 159, 150, 153, 162, 161, 164, - 156, 155, 152, 141, 138, 133, 116, 111, 134, 131, 120, 124, 111, 90, 90, 73, - 73, 70, 65, 64, 67, 69, 66, 67, 67, 67, 71, 80, 93, 105, 113, 116, - 113, 110, 11, 11, 9, 8, 8, 10, 11, 12, 11, 13, 14, 14, 15, 15, - 14, 15, 19, 20, 19, 18, 17, 16, 15, 15, 19, 22, 26, 29, 31, 35, - 39, 46, 68, 105, 119, 130, 132, 129, 144, 146, 147, 153, 149, 150, 161, 160, - 155, 160, 161, 165, 169, 171, 167, 161, 156, 153, 150, 147, 149, 156, 160, 163, - 167, 171, 168, 168, 169, 169, 165, 163, 161, 162, 154, 159, 160, 161, 159, 163, - 169, 176, 169, 169, 169, 170, 170, 171, 171, 171, 176, 172, 168, 165, 166, 167, - 168, 170, 164, 170, 165, 166, 177, 154, 99, 43, 52, 42, 48, 74, 49, 53, - 58, 65, 71, 175, 154, 146, 148, 142, 151, 164, 163, 165, 164, 163, 166, 171, - 169, 162, 163, 162, 162, 165, 168, 172, 179, 187, 184, 187, 186, 181, 178, 181, - 192, 201, 198, 196, 192, 187, 184, 183, 184, 186, 189, 186, 183, 182, 182, 181, - 178, 176, 172, 172, 149, 151, 147, 173, 171, 178, 171, 163, 163, 160, 150, 153, - 161, 159, 160, 155, 153, 149, 141, 136, 128, 118, 97, 106, 98, 82, 81, 73, - 63, 65, 64, 67, 66, 60, 58, 59, 60, 59, 64, 66, 70, 76, 84, 93, - 101, 107, 111, 112, 110, 10, 10, 9, 8, 9, 10, 12, 13, 17, 17, 17, - 15, 16, 17, 17, 19, 17, 19, 20, 21, 22, 22, 22, 23, 36, 40, 42, - 44, 46, 49, 53, 57, 59, 89, 109, 132, 134, 131, 147, 144, 140, 148, 148, - 151, 161, 160, 154, 157, 160, 163, 165, 166, 164, 161, 160, 160, 157, 154, 154, - 158, 158, 156, 158, 162, 170, 171, 170, 167, 161, 158, 156, 158, 168, 166, 165, - 164, 164, 166, 166, 166, 163, 166, 169, 172, 174, 173, 171, 169, 172, 169, 165, - 163, 164, 166, 167, 168, 163, 168, 159, 157, 164, 146, 81, 39, 46, 47, 58, - 77, 51, 59, 61, 58, 88, 172, 142, 140, 144, 143, 154, 164, 166, 164, 160, - 158, 162, 167, 167, 164, 168, 163, 161, 163, 163, 167, 177, 189, 187, 189, 188, - 185, 182, 186, 196, 204, 192, 191, 189, 188, 186, 185, 184, 183, 183, 182, 181, - 181, 182, 182, 182, 181, 172, 171, 154, 157, 141, 164, 170, 180, 168, 163, 165, - 165, 155, 156, 162, 159, 156, 155, 150, 145, 143, 136, 127, 126, 75, 77, 70, - 63, 63, 66, 67, 70, 58, 62, 65, 60, 59, 61, 64, 63, 61, 67, 76, - 85, 94, 100, 103, 105, 110, 111, 112, 9, 11, 9, 10, 11, 13, 14, 16, - 16, 16, 16, 16, 16, 17, 18, 22, 23, 27, 30, 35, 39, 41, 43, 45, - 48, 51, 53, 52, 53, 55, 56, 60, 56, 71, 94, 124, 130, 130, 146, 139, - 141, 150, 151, 153, 161, 159, 152, 155, 161, 162, 163, 163, 162, 163, 165, 167, - 161, 159, 161, 166, 166, 165, 169, 174, 173, 173, 170, 165, 156, 153, 154, 157, - 164, 165, 164, 167, 170, 171, 167, 164, 162, 166, 171, 175, 176, 175, 171, 169, - 164, 165, 167, 169, 171, 169, 164, 162, 167, 169, 160, 156, 156, 149, 78, 37, - 45, 50, 54, 76, 65, 72, 54, 42, 105, 159, 140, 147, 150, 156, 159, 165, - 171, 167, 162, 160, 163, 166, 166, 164, 166, 161, 157, 160, 160, 162, 175, 191, - 186, 187, 186, 185, 187, 191, 198, 203, 190, 190, 189, 190, 190, 189, 185, 183, - 181, 182, 183, 184, 184, 184, 184, 183, 169, 162, 157, 158, 143, 158, 174, 181, - 165, 162, 167, 168, 159, 159, 163, 159, 153, 154, 147, 142, 144, 134, 127, 132, - 66, 64, 64, 64, 65, 67, 69, 69, 62, 68, 68, 65, 62, 63, 68, 68, - 67, 75, 85, 96, 104, 109, 111, 112, 112, 114, 116, 9, 11, 12, 14, 15, - 17, 18, 18, 17, 19, 22, 25, 27, 28, 28, 30, 37, 41, 46, 51, 55, - 58, 59, 61, 55, 58, 60, 60, 62, 64, 67, 69, 72, 74, 88, 121, 125, - 126, 143, 133, 141, 151, 151, 154, 161, 157, 150, 155, 158, 159, 161, 161, 161, - 161, 163, 165, 159, 160, 166, 172, 174, 177, 182, 190, 177, 177, 172, 165, 157, - 156, 158, 163, 161, 167, 173, 179, 180, 178, 175, 174, 168, 170, 174, 176, 177, - 175, 173, 171, 164, 165, 168, 171, 173, 171, 166, 163, 170, 167, 163, 159, 152, - 159, 83, 36, 44, 49, 46, 71, 70, 69, 48, 55, 130, 150, 147, 158, 150, - 163, 163, 169, 172, 168, 165, 164, 166, 165, 162, 160, 162, 157, 156, 162, 163, - 164, 177, 194, 191, 189, 186, 187, 191, 195, 198, 198, 193, 191, 190, 190, 191, - 190, 185, 182, 180, 182, 184, 185, 184, 182, 180, 179, 171, 155, 160, 154, 150, - 154, 175, 172, 164, 160, 166, 168, 160, 160, 164, 161, 154, 158, 145, 140, 144, - 133, 125, 137, 67, 61, 64, 65, 61, 63, 64, 60, 59, 65, 65, 60, 58, - 60, 65, 68, 84, 88, 95, 103, 109, 112, 113, 114, 115, 117, 118, 12, 13, - 15, 19, 21, 22, 22, 24, 26, 31, 37, 43, 46, 47, 46, 46, 45, 49, - 53, 56, 58, 58, 60, 60, 62, 66, 69, 72, 75, 79, 84, 86, 100, 91, - 98, 127, 127, 127, 145, 132, 136, 146, 149, 153, 159, 157, 151, 155, 154, 156, - 159, 159, 158, 158, 158, 159, 160, 161, 165, 170, 172, 171, 177, 184, 183, 181, - 177, 170, 161, 160, 166, 173, 177, 187, 196, 198, 192, 185, 180, 181, 175, 176, - 176, 177, 176, 175, 174, 173, 171, 169, 167, 167, 169, 170, 171, 171, 165, 159, - 161, 159, 147, 163, 87, 30, 40, 47, 42, 69, 66, 54, 47, 88, 152, 150, - 156, 163, 145, 164, 164, 177, 170, 166, 166, 168, 168, 164, 158, 154, 160, 155, - 158, 167, 168, 170, 181, 199, 200, 195, 190, 191, 195, 198, 195, 192, 196, 192, - 188, 187, 188, 187, 183, 180, 178, 180, 183, 183, 181, 177, 174, 173, 177, 152, - 161, 151, 154, 151, 173, 161, 163, 159, 164, 165, 158, 160, 165, 163, 157, 161, - 146, 138, 144, 132, 124, 139, 66, 56, 56, 61, 58, 63, 70, 68, 64, 71, - 75, 74, 74, 83, 91, 95, 100, 101, 104, 106, 108, 109, 110, 110, 116, 117, - 118, 28, 28, 31, 33, 32, 31, 30, 30, 39, 51, 49, 43, 44, 40, 37, - 45, 35, 45, 51, 59, 66, 62, 64, 80, 81, 81, 83, 89, 99, 107, 110, - 108, 118, 113, 113, 119, 124, 127, 129, 133, 139, 143, 148, 151, 152, 151, 150, - 150, 153, 154, 156, 158, 160, 161, 162, 162, 165, 163, 164, 169, 172, 170, 172, - 175, 176, 176, 177, 179, 180, 181, 182, 183, 181, 183, 185, 188, 189, 190, 188, - 189, 182, 181, 178, 175, 176, 178, 182, 184, 179, 174, 168, 164, 164, 166, 168, - 168, 171, 163, 148, 157, 158, 160, 131, 31, 53, 36, 46, 67, 59, 54, 81, - 113, 148, 152, 159, 163, 166, 167, 170, 172, 163, 168, 172, 171, 166, 160, 157, - 156, 163, 162, 163, 166, 170, 175, 177, 179, 198, 193, 188, 188, 195, 200, 200, - 199, 192, 190, 187, 185, 185, 185, 183, 181, 180, 174, 177, 181, 177, 179, 182, - 174, 168, 170, 168, 159, 161, 142, 168, 172, 163, 163, 162, 160, 162, 164, 160, - 154, 157, 152, 151, 144, 145, 116, 139, 144, 71, 60, 70, 64, 57, 69, 66, - 67, 80, 85, 91, 97, 102, 104, 105, 106, 111, 111, 110, 108, 105, 106, 108, - 111, 111, 111, 111, 30, 29, 28, 28, 29, 32, 36, 38, 33, 45, 49, 49, - 49, 43, 38, 41, 47, 52, 56, 69, 85, 87, 84, 93, 93, 102, 112, 118, - 120, 119, 118, 117, 110, 107, 109, 115, 120, 122, 128, 135, 134, 138, 144, 148, - 150, 150, 151, 152, 150, 152, 154, 157, 159, 161, 163, 163, 162, 160, 162, 167, - 170, 168, 168, 171, 171, 173, 175, 178, 178, 177, 176, 175, 178, 179, 181, 183, - 183, 185, 185, 185, 190, 188, 185, 182, 181, 182, 184, 185, 187, 186, 183, 178, - 173, 169, 166, 164, 160, 159, 155, 167, 164, 162, 139, 59, 41, 47, 59, 57, - 40, 58, 113, 157, 154, 158, 163, 165, 166, 167, 171, 174, 171, 172, 172, 170, - 165, 159, 155, 154, 160, 163, 163, 165, 167, 174, 184, 193, 193, 190, 189, 193, - 199, 202, 200, 197, 192, 189, 187, 186, 185, 185, 183, 181, 181, 174, 178, 181, - 176, 177, 179, 171, 173, 171, 165, 156, 161, 147, 177, 182, 168, 168, 166, 163, - 164, 166, 161, 155, 155, 156, 146, 142, 139, 123, 138, 139, 73, 62, 74, 77, - 82, 101, 104, 107, 118, 119, 120, 120, 118, 116, 114, 112, 114, 114, 113, 112, - 111, 112, 115, 117, 117, 117, 116, 43, 41, 39, 38, 38, 40, 42, 44, 42, - 48, 55, 58, 59, 58, 58, 59, 71, 77, 80, 88, 99, 96, 91, 100, 94, - 105, 116, 115, 106, 97, 97, 100, 108, 107, 110, 114, 116, 117, 125, 134, 128, - 132, 139, 144, 148, 150, 152, 154, 150, 153, 154, 156, 158, 160, 160, 161, 158, - 156, 158, 163, 165, 162, 162, 165, 167, 169, 173, 175, 174, 172, 168, 166, 175, - 174, 175, 176, 177, 178, 180, 181, 193, 191, 189, 187, 185, 184, 184, 184, 181, - 184, 186, 183, 174, 165, 159, 156, 162, 160, 162, 170, 162, 158, 149, 103, 78, - 74, 68, 57, 63, 106, 150, 163, 159, 163, 170, 175, 176, 176, 177, 177, 179, - 176, 172, 167, 162, 158, 154, 151, 169, 171, 169, 164, 162, 168, 181, 193, 187, - 189, 191, 197, 202, 203, 198, 194, 191, 189, 187, 186, 186, 185, 183, 181, 182, - 175, 178, 180, 175, 176, 176, 168, 175, 172, 167, 160, 168, 153, 179, 180, 166, - 166, 163, 160, 161, 162, 156, 150, 152, 160, 141, 141, 130, 132, 140, 136, 80, - 63, 76, 83, 95, 117, 119, 122, 118, 117, 116, 115, 113, 112, 111, 110, 114, - 115, 115, 114, 113, 115, 118, 119, 116, 116, 117, 37, 39, 41, 45, 48, 49, - 51, 51, 69, 66, 71, 75, 76, 82, 93, 97, 98, 109, 110, 103, 97, 87, - 84, 96, 86, 92, 95, 90, 80, 78, 85, 94, 115, 115, 117, 117, 115, 115, - 122, 132, 127, 131, 137, 142, 146, 148, 151, 153, 155, 155, 156, 156, 156, 155, - 154, 154, 155, 154, 156, 161, 163, 160, 159, 161, 163, 165, 167, 169, 169, 168, - 166, 164, 173, 173, 171, 172, 172, 175, 178, 179, 188, 187, 187, 186, 185, 183, - 182, 181, 190, 197, 203, 202, 195, 187, 184, 183, 179, 169, 166, 166, 155, 153, - 155, 139, 141, 126, 111, 108, 126, 163, 175, 155, 159, 165, 174, 182, 186, 186, - 185, 184, 182, 176, 168, 163, 160, 158, 154, 152, 171, 171, 165, 162, 162, 169, - 180, 190, 188, 190, 193, 198, 201, 201, 195, 191, 191, 189, 187, 187, 186, 185, - 183, 180, 181, 175, 178, 181, 175, 176, 176, 168, 174, 174, 173, 170, 177, 155, - 171, 164, 163, 163, 161, 158, 158, 159, 154, 147, 146, 163, 141, 142, 123, 137, - 143, 139, 80, 60, 72, 83, 99, 118, 116, 114, 117, 116, 115, 114, 114, 115, - 117, 117, 112, 114, 114, 113, 111, 112, 114, 115, 107, 110, 112, 73, 74, 77, - 83, 90, 98, 104, 109, 92, 81, 88, 96, 90, 97, 111, 112, 105, 111, 105, - 97, 98, 93, 90, 97, 89, 91, 90, 90, 90, 95, 105, 115, 118, 119, 121, - 121, 116, 115, 120, 129, 128, 132, 137, 141, 144, 146, 149, 152, 155, 155, 156, - 155, 155, 154, 153, 152, 156, 154, 155, 159, 160, 157, 157, 159, 161, 162, 162, - 162, 163, 164, 166, 167, 171, 171, 169, 170, 171, 173, 176, 178, 180, 181, 182, - 183, 183, 182, 181, 181, 175, 181, 187, 187, 182, 178, 179, 181, 186, 172, 169, - 164, 156, 157, 157, 159, 168, 166, 172, 177, 174, 183, 189, 181, 171, 170, 171, - 173, 178, 183, 186, 188, 178, 172, 165, 160, 160, 159, 156, 154, 160, 157, 152, - 156, 166, 178, 187, 192, 193, 195, 195, 197, 197, 196, 193, 191, 190, 189, 187, - 187, 187, 186, 182, 180, 180, 174, 179, 183, 176, 177, 177, 168, 171, 172, 172, - 170, 176, 152, 166, 157, 165, 165, 163, 160, 161, 162, 157, 150, 140, 162, 142, - 143, 124, 140, 149, 146, 78, 57, 72, 90, 109, 127, 121, 119, 124, 122, 119, - 115, 113, 111, 110, 111, 112, 112, 112, 111, 107, 107, 108, 108, 103, 106, 111, - 91, 89, 82, 81, 83, 91, 100, 107, 98, 83, 95, 107, 96, 96, 104, 98, - 95, 93, 83, 87, 108, 120, 113, 108, 106, 107, 108, 110, 111, 114, 116, 118, - 116, 116, 118, 121, 117, 116, 119, 126, 129, 132, 136, 139, 142, 144, 147, 149, - 150, 152, 154, 155, 156, 156, 156, 156, 157, 153, 152, 156, 157, 155, 155, 159, - 160, 160, 159, 159, 160, 163, 166, 168, 168, 168, 169, 169, 171, 173, 173, 176, - 176, 177, 179, 180, 181, 182, 182, 182, 186, 189, 190, 189, 186, 185, 187, 190, - 177, 169, 174, 168, 166, 168, 158, 165, 164, 168, 184, 197, 188, 184, 192, 196, - 184, 175, 165, 159, 162, 170, 179, 185, 172, 169, 166, 163, 162, 160, 158, 157, - 159, 154, 150, 155, 167, 179, 184, 185, 196, 197, 197, 196, 194, 193, 191, 190, - 190, 189, 188, 188, 188, 186, 182, 179, 179, 174, 179, 182, 175, 175, 174, 165, - 166, 166, 165, 160, 167, 148, 168, 166, 164, 164, 161, 158, 158, 159, 153, 146, - 139, 157, 143, 141, 131, 140, 152, 145, 85, 63, 77, 96, 114, 129, 122, 118, - 117, 115, 111, 108, 106, 104, 104, 104, 111, 112, 112, 109, 106, 105, 105, 106, - 106, 109, 112, 115, 112, 105, 98, 95, 95, 97, 99, 98, 79, 91, 106, 91, - 90, 99, 90, 93, 99, 95, 99, 121, 133, 127, 123, 119, 120, 122, 121, 118, - 114, 110, 111, 119, 119, 118, 122, 120, 116, 115, 118, 126, 129, 133, 136, 138, - 141, 145, 149, 151, 153, 155, 156, 157, 157, 157, 157, 157, 152, 150, 153, 152, - 151, 152, 158, 158, 158, 158, 159, 160, 161, 162, 163, 163, 163, 165, 167, 168, - 169, 169, 169, 174, 174, 175, 176, 177, 179, 180, 181, 178, 177, 175, 174, 172, - 172, 172, 173, 172, 171, 180, 168, 168, 172, 159, 171, 166, 160, 168, 179, 182, - 189, 191, 183, 183, 175, 165, 159, 161, 166, 172, 174, 168, 170, 171, 169, 166, - 162, 161, 159, 164, 159, 154, 156, 162, 172, 178, 181, 194, 196, 197, 197, 195, - 192, 191, 190, 189, 188, 188, 188, 188, 186, 182, 178, 181, 175, 179, 181, 172, - 170, 167, 157, 157, 160, 162, 158, 164, 146, 169, 170, 165, 164, 160, 155, 154, - 153, 146, 139, 147, 150, 139, 136, 143, 139, 150, 136, 92, 66, 78, 93, 107, - 120, 114, 114, 115, 115, 114, 113, 113, 113, 112, 112, 107, 107, 108, 107, 105, - 104, 103, 104, 104, 107, 109, 108, 110, 111, 111, 107, 102, 96, 93, 101, 75, - 86, 100, 85, 87, 102, 96, 100, 120, 126, 121, 124, 124, 122, 128, 118, 120, - 123, 120, 117, 116, 119, 123, 128, 124, 122, 125, 123, 118, 113, 111, 124, 126, - 130, 133, 136, 140, 144, 148, 154, 156, 156, 157, 156, 156, 155, 155, 158, 152, - 148, 150, 150, 149, 152, 157, 157, 159, 160, 160, 160, 159, 158, 157, 159, 159, - 162, 165, 165, 167, 166, 166, 171, 171, 171, 172, 173, 174, 176, 177, 182, 180, - 178, 177, 177, 177, 176, 173, 176, 178, 186, 165, 162, 172, 159, 177, 170, 169, - 175, 176, 176, 186, 189, 175, 173, 170, 169, 170, 172, 173, 169, 165, 167, 172, - 175, 175, 170, 165, 161, 161, 158, 157, 153, 155, 160, 170, 183, 192, 191, 194, - 197, 199, 197, 194, 191, 190, 189, 188, 188, 188, 188, 186, 182, 178, 182, 175, - 178, 179, 169, 165, 162, 151, 148, 156, 164, 163, 168, 145, 166, 165, 171, 171, - 165, 160, 157, 154, 147, 138, 153, 145, 135, 130, 152, 139, 148, 128, 89, 63, - 73, 89, 103, 119, 117, 121, 113, 112, 111, 109, 107, 104, 103, 102, 102, 103, - 105, 105, 103, 103, 102, 104, 99, 101, 104, 113, 113, 111, 111, 108, 108, 107, - 106, 110, 96, 94, 123, 110, 124, 116, 108, 114, 115, 115, 115, 119, 125, 126, - 125, 126, 127, 123, 119, 119, 123, 125, 125, 130, 127, 124, 124, 124, 123, 119, - 116, 115, 124, 131, 131, 133, 140, 144, 142, 150, 148, 147, 150, 153, 153, 151, - 151, 154, 152, 149, 148, 150, 151, 155, 157, 162, 161, 160, 159, 158, 158, 158, - 158, 162, 163, 164, 166, 166, 168, 167, 166, 173, 173, 172, 173, 172, 170, 169, - 168, 174, 173, 171, 171, 172, 174, 177, 178, 180, 176, 171, 172, 174, 174, 170, - 167, 176, 171, 170, 176, 185, 187, 179, 171, 165, 164, 165, 168, 173, 176, 175, - 174, 169, 168, 167, 165, 162, 160, 159, 158, 164, 152, 145, 151, 158, 163, 174, - 187, 187, 194, 199, 200, 194, 189, 189, 190, 190, 189, 188, 187, 186, 184, 180, - 176, 180, 179, 182, 179, 166, 160, 153, 138, 149, 157, 154, 153, 165, 169, 166, - 167, 172, 165, 157, 154, 151, 148, 148, 150, 144, 163, 105, 146, 140, 155, 152, - 142, 83, 70, 70, 86, 96, 97, 107, 120, 113, 108, 110, 100, 106, 109, 93, - 101, 100, 95, 102, 107, 103, 103, 103, 95, 100, 102, 106, 104, 106, 108, 110, - 111, 111, 110, 109, 106, 105, 106, 112, 101, 109, 112, 113, 112, 112, 112, 113, - 116, 120, 122, 122, 127, 129, 128, 124, 121, 123, 122, 119, 126, 127, 130, 134, - 134, 131, 122, 116, 115, 128, 134, 130, 127, 133, 144, 153, 154, 153, 151, 153, - 154, 154, 153, 151, 153, 152, 149, 147, 148, 151, 153, 156, 160, 160, 159, 158, - 158, 159, 159, 160, 160, 160, 163, 165, 166, 167, 167, 166, 169, 170, 171, 172, - 173, 173, 173, 172, 171, 171, 171, 173, 175, 179, 183, 186, 182, 178, 174, 175, - 178, 178, 175, 171, 174, 171, 171, 176, 182, 184, 180, 175, 173, 171, 171, 172, - 175, 176, 175, 173, 173, 172, 172, 170, 168, 166, 166, 164, 156, 150, 146, 150, - 157, 166, 179, 189, 190, 195, 200, 199, 194, 191, 190, 192, 191, 189, 188, 187, - 186, 184, 180, 176, 177, 173, 176, 173, 163, 161, 158, 145, 148, 159, 156, 151, - 157, 159, 159, 164, 168, 161, 154, 152, 152, 149, 143, 139, 142, 150, 122, 148, - 154, 151, 145, 131, 75, 62, 63, 83, 97, 95, 95, 101, 104, 101, 114, 109, - 103, 105, 96, 101, 105, 96, 95, 96, 91, 99, 108, 107, 100, 100, 105, 109, - 112, 115, 117, 118, 116, 114, 113, 110, 115, 110, 93, 103, 107, 115, 117, 117, - 116, 116, 116, 116, 117, 118, 121, 117, 122, 124, 123, 123, 126, 125, 122, 124, - 125, 129, 133, 133, 131, 125, 120, 117, 125, 131, 131, 132, 137, 146, 151, 152, - 152, 152, 153, 155, 156, 155, 152, 151, 150, 148, 147, 146, 148, 151, 153, 154, - 155, 155, 156, 157, 158, 158, 159, 158, 159, 161, 163, 164, 165, 165, 165, 164, - 165, 167, 169, 172, 173, 174, 174, 172, 172, 172, 174, 176, 180, 183, 186, 180, - 177, 175, 176, 178, 179, 177, 174, 172, 171, 172, 175, 179, 181, 181, 180, 181, - 180, 178, 177, 177, 176, 174, 172, 172, 171, 171, 168, 167, 165, 164, 162, 153, - 156, 154, 152, 158, 171, 184, 190, 193, 196, 199, 197, 192, 190, 192, 194, 192, - 190, 189, 188, 187, 184, 180, 176, 173, 171, 176, 175, 166, 164, 159, 144, 142, - 155, 153, 148, 154, 158, 162, 172, 167, 163, 157, 156, 156, 152, 144, 136, 145, - 136, 137, 144, 160, 146, 140, 128, 64, 52, 54, 78, 97, 100, 100, 104, 98, - 93, 121, 119, 100, 103, 102, 103, 108, 99, 96, 94, 91, 102, 115, 116, 107, - 104, 105, 103, 106, 109, 112, 114, 115, 116, 116, 117, 118, 105, 77, 111, 118, - 121, 112, 117, 117, 119, 120, 118, 115, 116, 120, 117, 122, 122, 121, 123, 128, - 128, 125, 124, 123, 123, 123, 123, 125, 126, 127, 119, 119, 121, 131, 142, 149, - 146, 141, 145, 147, 149, 150, 152, 156, 156, 152, 151, 150, 149, 147, 147, 147, - 149, 150, 148, 149, 149, 151, 152, 155, 157, 158, 161, 161, 162, 163, 164, 163, - 163, 163, 160, 162, 164, 167, 169, 170, 171, 172, 175, 175, 174, 174, 173, 174, - 176, 177, 175, 173, 172, 173, 175, 176, 175, 173, 171, 172, 174, 174, 175, 178, - 181, 183, 185, 183, 181, 178, 177, 175, 174, 172, 173, 173, 171, 168, 165, 162, - 161, 158, 158, 164, 163, 157, 160, 175, 187, 190, 195, 197, 198, 195, 191, 191, - 193, 195, 192, 191, 189, 188, 187, 184, 179, 176, 173, 173, 180, 181, 172, 167, - 156, 137, 147, 157, 153, 149, 158, 164, 168, 175, 163, 164, 161, 156, 153, 151, - 146, 140, 151, 131, 140, 141, 148, 144, 137, 134, 64, 53, 55, 72, 90, 97, - 103, 110, 102, 90, 121, 122, 97, 102, 107, 101, 106, 100, 105, 106, 102, 107, - 117, 114, 112, 108, 106, 85, 87, 88, 92, 98, 105, 110, 114, 113, 120, 107, - 74, 106, 112, 114, 105, 107, 105, 110, 117, 118, 116, 115, 120, 127, 128, 124, - 118, 115, 119, 119, 117, 121, 120, 120, 120, 121, 123, 125, 127, 117, 117, 121, - 129, 138, 144, 146, 147, 145, 149, 150, 149, 152, 157, 154, 148, 153, 151, 150, - 149, 149, 148, 149, 149, 146, 146, 147, 149, 152, 155, 157, 159, 164, 164, 164, - 164, 163, 162, 160, 160, 162, 163, 165, 167, 169, 169, 170, 170, 177, 177, 176, - 175, 173, 173, 172, 173, 172, 171, 171, 171, 174, 174, 174, 173, 172, 173, 174, - 174, 174, 176, 180, 184, 183, 181, 179, 176, 174, 172, 173, 173, 178, 177, 174, - 171, 167, 163, 160, 159, 160, 165, 164, 160, 165, 180, 189, 190, 196, 197, 196, - 194, 191, 191, 193, 195, 192, 190, 188, 187, 186, 182, 178, 174, 175, 172, 175, - 175, 168, 166, 159, 141, 157, 162, 153, 150, 164, 170, 167, 168, 155, 160, 158, - 149, 142, 142, 144, 143, 146, 130, 137, 147, 138, 149, 137, 129, 67, 64, 68, - 80, 87, 88, 93, 101, 111, 92, 115, 115, 95, 104, 106, 97, 100, 97, 104, - 106, 99, 102, 109, 105, 111, 108, 108, 89, 88, 86, 87, 89, 93, 98, 102, - 104, 119, 115, 87, 86, 90, 98, 99, 92, 90, 97, 112, 119, 116, 113, 116, - 113, 114, 111, 106, 105, 110, 113, 111, 115, 119, 124, 127, 127, 125, 124, 125, - 116, 121, 128, 130, 126, 128, 142, 157, 147, 153, 153, 150, 152, 157, 154, 145, - 153, 152, 151, 149, 148, 148, 148, 148, 146, 148, 148, 150, 153, 156, 159, 161, - 164, 164, 164, 164, 163, 161, 160, 159, 165, 166, 168, 169, 170, 170, 170, 170, - 175, 175, 175, 176, 175, 176, 176, 177, 173, 173, 173, 173, 174, 175, 175, 175, - 173, 174, 174, 174, 174, 175, 178, 182, 178, 177, 175, 173, 170, 170, 172, 174, - 176, 174, 173, 170, 166, 163, 160, 159, 158, 159, 158, 161, 170, 183, 190, 193, - 197, 195, 194, 193, 191, 191, 192, 192, 191, 189, 187, 186, 184, 181, 176, 172, - 176, 167, 164, 162, 159, 166, 168, 156, 149, 154, 148, 151, 170, 178, 172, 170, - 158, 163, 158, 145, 139, 142, 146, 145, 134, 132, 138, 155, 143, 152, 139, 107, - 59, 66, 81, 98, 104, 100, 99, 103, 116, 97, 109, 106, 96, 106, 102, 96, - 97, 92, 96, 95, 88, 92, 104, 103, 113, 109, 110, 104, 103, 99, 98, 96, - 96, 98, 100, 108, 117, 113, 99, 72, 82, 93, 96, 91, 86, 94, 112, 121, - 115, 108, 107, 98, 102, 103, 102, 105, 112, 117, 115, 116, 121, 126, 128, 127, - 125, 126, 126, 120, 123, 128, 133, 130, 126, 133, 143, 142, 149, 151, 149, 151, - 159, 157, 147, 152, 151, 150, 149, 148, 146, 146, 145, 145, 145, 146, 148, 151, - 154, 156, 158, 160, 161, 162, 162, 162, 162, 161, 161, 164, 165, 166, 168, 169, - 170, 170, 170, 170, 171, 173, 175, 176, 177, 178, 178, 175, 176, 176, 175, 175, - 174, 174, 175, 175, 174, 175, 175, 175, 176, 178, 178, 176, 176, 175, 171, 167, - 167, 170, 173, 170, 169, 169, 167, 166, 164, 164, 163, 165, 158, 157, 166, 178, - 188, 192, 196, 195, 194, 193, 192, 191, 191, 189, 189, 190, 188, 186, 184, 182, - 179, 174, 170, 171, 163, 161, 162, 163, 173, 177, 165, 142, 152, 151, 156, 173, - 180, 173, 172, 167, 167, 158, 144, 142, 148, 146, 138, 130, 136, 145, 152, 153, - 144, 149, 85, 54, 65, 84, 106, 118, 119, 117, 115, 117, 107, 112, 107, 106, - 113, 102, 104, 101, 97, 101, 101, 93, 98, 111, 112, 119, 113, 110, 99, 100, - 103, 105, 106, 109, 110, 112, 119, 112, 102, 104, 71, 91, 98, 94, 100, 91, - 97, 116, 125, 116, 103, 98, 107, 112, 114, 114, 116, 120, 121, 117, 123, 123, - 123, 121, 119, 122, 127, 132, 128, 120, 121, 136, 145, 141, 126, 115, 130, 138, - 143, 144, 150, 160, 160, 151, 151, 150, 149, 147, 146, 145, 144, 144, 141, 142, - 142, 144, 147, 150, 153, 153, 156, 157, 159, 160, 161, 162, 162, 163, 158, 159, - 161, 164, 165, 167, 167, 168, 168, 169, 170, 172, 173, 174, 174, 174, 174, 175, - 176, 175, 173, 172, 173, 174, 176, 176, 174, 175, 176, 177, 176, 174, 177, 176, - 175, 171, 167, 167, 168, 172, 170, 171, 171, 171, 171, 171, 172, 171, 177, 164, - 161, 173, 187, 191, 193, 197, 194, 192, 192, 192, 191, 191, 188, 187, 189, 187, - 185, 183, 181, 178, 173, 169, 167, 162, 167, 173, 175, 182, 180, 164, 152, 165, - 165, 165, 173, 172, 162, 161, 169, 165, 151, 139, 142, 148, 140, 124, 134, 140, - 151, 142, 158, 133, 159, 73, 61, 66, 81, 100, 115, 121, 118, 115, 116, 116, - 120, 112, 116, 118, 104, 114, 106, 105, 114, 118, 110, 114, 124, 123, 120, 112, - 109, 105, 102, 96, 91, 93, 101, 104, 102, 110, 105, 105, 121, 106, 85, 97, - 98, 100, 112, 115, 116, 119, 113, 106, 111, 111, 113, 114, 113, 112, 114, 120, - 125, 124, 121, 129, 132, 122, 121, 125, 121, 124, 122, 125, 135, 144, 145, 142, - 140, 117, 130, 134, 138, 154, 160, 154, 153, 151, 154, 159, 159, 157, 155, 155, - 157, 148, 148, 147, 145, 145, 148, 153, 156, 153, 155, 157, 160, 163, 163, 162, - 161, 169, 166, 164, 165, 165, 164, 166, 170, 166, 164, 168, 174, 174, 169, 170, - 174, 173, 174, 176, 176, 176, 174, 170, 168, 174, 175, 175, 176, 175, 174, 173, - 173, 170, 171, 171, 171, 170, 173, 176, 179, 179, 179, 172, 167, 169, 174, 169, - 160, 165, 159, 160, 173, 189, 192, 192, 193, 194, 196, 197, 197, 195, 192, 188, - 187, 185, 186, 187, 184, 178, 174, 173, 174, 166, 172, 177, 183, 166, 163, 171, - 142, 161, 163, 162, 166, 173, 178, 176, 171, 163, 153, 150, 134, 136, 146, 133, - 128, 142, 149, 141, 153, 171, 123, 161, 74, 66, 69, 89, 108, 111, 116, 120, - 115, 108, 113, 116, 117, 121, 123, 120, 115, 115, 114, 115, 118, 121, 123, 122, - 121, 115, 112, 112, 111, 109, 103, 95, 92, 93, 90, 83, 98, 93, 89, 102, - 94, 86, 104, 103, 101, 103, 97, 94, 102, 103, 100, 106, 100, 102, 104, 108, - 110, 115, 119, 122, 120, 118, 125, 128, 119, 121, 126, 122, 128, 127, 124, 123, - 131, 143, 147, 143, 136, 137, 127, 119, 127, 135, 142, 154, 158, 161, 162, 160, - 157, 155, 156, 157, 154, 153, 151, 148, 146, 148, 151, 154, 150, 151, 153, 156, - 159, 159, 160, 160, 166, 162, 162, 164, 165, 163, 165, 169, 169, 167, 170, 175, - 175, 171, 172, 178, 172, 173, 175, 175, 175, 173, 170, 169, 174, 175, 176, 175, - 174, 172, 171, 171, 170, 171, 171, 170, 170, 171, 174, 177, 176, 175, 170, 166, - 168, 174, 175, 172, 161, 161, 169, 182, 189, 190, 190, 194, 193, 194, 195, 195, - 193, 190, 187, 185, 184, 182, 180, 178, 177, 175, 172, 169, 170, 190, 168, 173, - 191, 163, 150, 166, 168, 167, 166, 172, 177, 178, 174, 170, 167, 154, 150, 135, - 133, 140, 129, 131, 143, 141, 144, 144, 131, 140, 139, 61, 66, 73, 93, 109, - 112, 113, 118, 114, 112, 117, 118, 118, 119, 122, 120, 113, 110, 110, 109, 112, - 113, 114, 113, 113, 112, 112, 111, 108, 110, 109, 105, 103, 103, 98, 92, 91, - 91, 86, 95, 92, 93, 108, 97, 100, 99, 89, 87, 99, 102, 99, 104, 104, - 104, 106, 111, 116, 120, 122, 122, 122, 118, 123, 125, 117, 119, 125, 123, 118, - 125, 127, 124, 129, 142, 147, 143, 142, 143, 136, 131, 133, 129, 130, 142, 140, - 147, 157, 166, 167, 166, 163, 161, 156, 154, 152, 149, 146, 146, 147, 151, 147, - 147, 149, 150, 152, 154, 157, 158, 161, 158, 159, 163, 164, 162, 163, 167, 169, - 168, 170, 172, 172, 170, 173, 178, 171, 173, 174, 174, 173, 172, 170, 168, 173, - 174, 174, 174, 173, 171, 170, 169, 169, 171, 171, 169, 168, 168, 171, 173, 168, - 170, 170, 167, 168, 172, 173, 170, 157, 165, 179, 190, 190, 187, 189, 196, 194, - 194, 195, 194, 192, 189, 187, 185, 190, 185, 180, 178, 178, 177, 171, 166, 174, - 181, 182, 190, 177, 162, 173, 169, 175, 171, 172, 181, 184, 177, 170, 170, 170, - 154, 150, 135, 130, 133, 126, 137, 152, 154, 150, 150, 136, 164, 98, 71, 66, - 81, 102, 114, 116, 116, 117, 118, 111, 114, 113, 112, 113, 116, 114, 110, 108, - 106, 105, 107, 108, 109, 108, 108, 107, 109, 107, 105, 108, 111, 110, 111, 113, - 111, 107, 101, 106, 103, 110, 108, 105, 107, 81, 102, 107, 105, 107, 115, 114, - 107, 110, 118, 117, 116, 120, 123, 124, 119, 117, 125, 119, 122, 122, 115, 118, - 125, 121, 117, 121, 124, 122, 121, 129, 142, 152, 148, 150, 147, 147, 148, 137, - 129, 137, 131, 136, 142, 148, 153, 156, 157, 157, 153, 153, 152, 150, 149, 149, - 151, 155, 150, 149, 148, 148, 149, 150, 153, 155, 156, 155, 156, 162, 163, 162, - 162, 165, 167, 167, 167, 167, 166, 167, 170, 174, 169, 171, 171, 171, 171, 170, - 168, 168, 170, 171, 171, 171, 171, 170, 170, 169, 169, 170, 169, 168, 166, 167, - 168, 172, 162, 166, 171, 171, 169, 165, 161, 160, 162, 172, 184, 190, 190, 189, - 191, 195, 196, 196, 196, 196, 192, 191, 189, 188, 190, 187, 182, 178, 174, 171, - 167, 164, 165, 185, 200, 191, 158, 166, 195, 168, 178, 173, 175, 186, 187, 176, - 169, 171, 169, 152, 148, 133, 126, 129, 128, 145, 146, 155, 131, 143, 158, 149, - 53, 74, 66, 90, 109, 119, 122, 120, 121, 125, 120, 121, 120, 118, 119, 123, - 124, 120, 124, 122, 121, 122, 125, 126, 126, 126, 124, 125, 125, 108, 111, 111, - 107, 106, 107, 107, 104, 109, 116, 114, 120, 118, 115, 111, 78, 106, 119, 124, - 124, 126, 120, 115, 122, 124, 121, 119, 120, 121, 119, 112, 107, 120, 114, 116, - 117, 113, 118, 125, 121, 127, 120, 115, 113, 104, 103, 124, 150, 160, 157, 146, - 141, 145, 142, 140, 149, 151, 144, 133, 127, 126, 131, 139, 145, 147, 148, 150, - 150, 149, 152, 155, 157, 153, 152, 149, 147, 147, 148, 151, 152, 155, 153, 155, - 161, 163, 161, 161, 164, 165, 167, 167, 165, 164, 166, 169, 170, 167, 168, 169, - 169, 169, 169, 167, 167, 167, 167, 169, 170, 170, 171, 170, 170, 168, 169, 168, - 167, 165, 166, 167, 170, 166, 167, 168, 168, 166, 162, 160, 161, 172, 177, 182, - 184, 188, 192, 193, 194, 195, 195, 195, 194, 191, 189, 187, 186, 180, 182, 182, - 176, 168, 164, 165, 168, 173, 208, 182, 160, 173, 175, 177, 179, 175, 174, 177, - 187, 188, 178, 171, 171, 165, 150, 146, 130, 124, 131, 135, 153, 155, 150, 129, - 146, 157, 127, 83, 71, 65, 96, 112, 117, 124, 122, 121, 131, 117, 117, 115, - 110, 110, 113, 112, 109, 116, 115, 114, 115, 117, 120, 122, 122, 121, 124, 124, - 107, 111, 111, 106, 104, 107, 108, 107, 112, 113, 106, 113, 114, 115, 119, 94, - 112, 125, 126, 122, 121, 116, 118, 130, 120, 119, 120, 120, 120, 118, 115, 111, - 113, 106, 109, 113, 110, 117, 124, 120, 117, 115, 118, 121, 111, 98, 97, 104, - 142, 151, 149, 145, 151, 153, 150, 154, 154, 150, 145, 143, 141, 139, 136, 134, - 136, 138, 139, 141, 141, 143, 147, 149, 152, 151, 147, 146, 146, 146, 149, 150, - 153, 151, 152, 156, 158, 157, 157, 161, 164, 167, 168, 165, 164, 167, 169, 169, - 165, 166, 166, 166, 167, 167, 166, 166, 166, 167, 168, 169, 170, 170, 170, 170, - 167, 167, 167, 166, 165, 166, 168, 171, 174, 167, 162, 160, 162, 165, 170, 178, - 181, 182, 180, 181, 185, 193, 194, 191, 192, 191, 190, 189, 186, 185, 183, 183, - 176, 181, 184, 179, 170, 167, 173, 180, 207, 187, 154, 164, 181, 174, 176, 173, - 173, 177, 181, 185, 185, 180, 175, 171, 161, 151, 146, 125, 122, 138, 143, 156, - 171, 146, 145, 155, 133, 125, 154, 74, 66, 100, 112, 112, 123, 123, 118, 130, - 113, 114, 110, 104, 101, 103, 100, 94, 100, 98, 96, 97, 99, 101, 102, 104, - 103, 106, 108, 106, 111, 114, 112, 111, 114, 116, 116, 113, 110, 101, 112, 113, - 114, 124, 107, 113, 123, 121, 116, 116, 113, 113, 124, 115, 117, 120, 120, 120, - 119, 119, 122, 115, 109, 111, 114, 112, 118, 122, 116, 107, 117, 123, 123, 122, - 115, 89, 60, 87, 124, 149, 154, 161, 162, 155, 151, 147, 150, 156, 162, 164, - 160, 151, 143, 137, 139, 140, 140, 139, 139, 139, 141, 144, 143, 143, 142, 143, - 144, 146, 147, 151, 148, 148, 151, 152, 152, 153, 157, 160, 165, 167, 164, 162, - 166, 166, 164, 164, 165, 165, 165, 165, 165, 166, 166, 169, 170, 170, 170, 169, - 168, 167, 167, 166, 166, 168, 167, 166, 167, 170, 172, 174, 164, 158, 160, 167, - 170, 176, 183, 183, 185, 182, 180, 184, 192, 193, 189, 191, 191, 188, 187, 184, - 183, 181, 181, 179, 181, 182, 178, 172, 170, 174, 179, 195, 156, 155, 191, 184, - 175, 188, 164, 173, 184, 187, 183, 181, 183, 178, 169, 159, 154, 148, 122, 121, - 145, 149, 155, 156, 141, 141, 145, 128, 129, 158, 86, 74, 109, 114, 109, 125, - 125, 116, 129, 129, 131, 127, 123, 121, 122, 120, 114, 116, 113, 110, 108, 109, - 111, 112, 111, 111, 114, 116, 109, 115, 119, 115, 112, 112, 112, 109, 117, 112, - 105, 119, 119, 115, 122, 107, 112, 120, 117, 115, 120, 116, 109, 114, 111, 114, - 118, 118, 117, 117, 118, 123, 125, 117, 118, 120, 115, 117, 119, 111, 120, 128, - 119, 103, 112, 128, 104, 59, 41, 96, 135, 143, 150, 157, 155, 152, 157, 153, - 150, 149, 152, 157, 159, 158, 151, 152, 152, 150, 146, 144, 144, 144, 137, 138, - 137, 139, 142, 143, 145, 146, 150, 147, 145, 148, 148, 148, 151, 156, 156, 162, - 165, 161, 159, 162, 162, 158, 164, 164, 164, 164, 164, 165, 165, 166, 173, 172, - 172, 172, 169, 168, 165, 165, 165, 167, 167, 167, 166, 167, 171, 173, 167, 159, - 158, 167, 174, 173, 172, 173, 180, 186, 186, 181, 183, 190, 190, 187, 192, 191, - 188, 187, 184, 184, 183, 183, 179, 177, 174, 169, 165, 163, 164, 165, 134, 167, - 174, 193, 207, 184, 173, 174, 176, 190, 192, 182, 179, 185, 181, 167, 159, 157, - 150, 120, 120, 149, 153, 152, 144, 159, 141, 147, 167, 150, 131, 124, 84, 119, - 120, 112, 129, 128, 117, 130, 125, 128, 127, 124, 126, 129, 127, 121, 123, 120, - 114, 112, 112, 113, 113, 113, 116, 119, 119, 107, 109, 111, 111, 110, 109, 110, - 111, 110, 110, 110, 110, 110, 110, 110, 111, 103, 112, 111, 110, 113, 109, 106, - 113, 98, 106, 109, 107, 109, 117, 120, 119, 116, 119, 121, 120, 116, 115, 115, - 118, 119, 122, 121, 108, 119, 115, 115, 66, 29, 49, 83, 117, 141, 150, 148, - 144, 154, 154, 155, 155, 157, 161, 161, 158, 147, 145, 145, 148, 153, 155, 154, - 152, 154, 156, 155, 150, 141, 134, 131, 131, 140, 142, 146, 150, 151, 149, 144, - 140, 152, 153, 158, 162, 161, 156, 158, 164, 162, 164, 162, 158, 159, 165, 168, - 168, 165, 166, 169, 171, 169, 166, 160, 158, 166, 163, 161, 162, 165, 167, 165, - 163, 142, 155, 170, 175, 173, 172, 176, 183, 183, 183, 182, 184, 186, 189, 190, - 189, 192, 189, 185, 183, 183, 183, 182, 181, 183, 179, 172, 166, 164, 161, 156, - 149, 170, 165, 183, 195, 183, 187, 186, 161, 177, 189, 197, 194, 185, 177, 171, - 167, 145, 152, 155, 140, 118, 153, 153, 156, 165, 149, 146, 159, 162, 149, 140, - 143, 96, 114, 109, 117, 123, 112, 122, 121, 127, 126, 132, 132, 123, 123, 122, - 109, 121, 118, 116, 118, 119, 118, 115, 114, 116, 121, 119, 112, 113, 112, 110, - 107, 107, 107, 109, 110, 109, 108, 108, 107, 107, 107, 108, 107, 115, 114, 112, - 116, 113, 109, 117, 111, 115, 113, 105, 101, 104, 106, 105, 106, 109, 111, 111, - 111, 111, 113, 115, 117, 116, 117, 113, 123, 112, 119, 84, 33, 38, 47, 60, - 79, 108, 140, 162, 163, 161, 155, 151, 153, 157, 157, 153, 155, 153, 153, 154, - 158, 161, 164, 164, 158, 158, 157, 153, 150, 148, 148, 149, 146, 142, 138, 137, - 139, 144, 147, 148, 143, 144, 149, 156, 157, 158, 162, 169, 164, 167, 165, 161, - 162, 166, 168, 166, 173, 173, 171, 168, 164, 162, 161, 161, 159, 161, 163, 166, - 168, 164, 157, 152, 161, 168, 175, 179, 177, 176, 177, 180, 188, 187, 188, 190, - 192, 192, 189, 186, 190, 187, 184, 182, 182, 182, 181, 180, 171, 175, 176, 170, - 163, 163, 170, 176, 168, 184, 192, 193, 194, 189, 182, 180, 197, 202, 201, 192, - 183, 179, 177, 174, 163, 158, 146, 128, 113, 157, 165, 171, 153, 148, 154, 169, - 173, 162, 149, 144, 119, 104, 118, 105, 126, 118, 121, 121, 120, 116, 120, 123, - 121, 126, 127, 114, 125, 121, 115, 111, 107, 107, 113, 118, 108, 115, 117, 112, - 113, 112, 111, 109, 109, 110, 111, 114, 113, 110, 108, 107, 108, 108, 109, 108, - 115, 113, 111, 116, 114, 111, 118, 113, 115, 111, 105, 102, 105, 109, 110, 115, - 117, 119, 119, 120, 121, 123, 124, 119, 113, 117, 119, 129, 114, 125, 100, 28, - 31, 34, 34, 39, 60, 93, 118, 132, 142, 152, 158, 166, 169, 164, 157, 160, - 159, 158, 156, 157, 159, 164, 167, 162, 162, 162, 163, 163, 162, 159, 157, 152, - 146, 140, 135, 137, 141, 146, 149, 143, 141, 144, 147, 149, 148, 153, 160, 162, - 165, 164, 161, 160, 164, 163, 160, 166, 169, 168, 167, 162, 162, 162, 166, 164, - 161, 155, 152, 153, 157, 161, 162, 176, 176, 176, 177, 179, 181, 181, 180, 189, - 190, 192, 194, 195, 193, 188, 184, 189, 187, 184, 182, 182, 182, 180, 178, 173, - 173, 171, 165, 160, 160, 167, 174, 171, 201, 200, 190, 199, 189, 178, 196, 199, - 200, 195, 187, 181, 179, 176, 171, 160, 155, 148, 138, 127, 166, 160, 157, 145, - 148, 156, 166, 171, 166, 152, 141, 143, 94, 118, 97, 125, 119, 118, 118, 125, - 117, 117, 117, 113, 118, 117, 104, 101, 111, 122, 127, 122, 116, 112, 109, 110, - 113, 116, 102, 106, 109, 112, 113, 114, 114, 117, 118, 116, 113, 111, 111, 112, - 114, 116, 110, 117, 113, 112, 118, 117, 113, 119, 113, 114, 114, 113, 113, 117, - 120, 123, 126, 127, 127, 127, 127, 127, 127, 128, 121, 120, 122, 120, 131, 120, - 127, 91, 24, 32, 42, 42, 37, 36, 45, 55, 132, 139, 141, 139, 145, 159, - 170, 174, 164, 165, 165, 162, 157, 156, 159, 162, 164, 165, 168, 172, 173, 169, - 159, 151, 160, 156, 153, 151, 151, 148, 146, 143, 146, 143, 141, 144, 145, 146, - 149, 155, 170, 174, 175, 172, 172, 175, 173, 169, 165, 170, 173, 172, 166, 161, - 160, 160, 160, 156, 149, 147, 150, 159, 169, 176, 176, 175, 175, 176, 178, 181, - 184, 185, 188, 188, 189, 192, 193, 192, 188, 185, 188, 185, 183, 181, 181, 180, - 178, 176, 182, 169, 158, 158, 164, 166, 163, 161, 186, 204, 201, 189, 190, 186, - 184, 197, 186, 188, 187, 184, 184, 183, 175, 166, 154, 153, 153, 148, 134, 162, - 148, 139, 167, 171, 172, 170, 172, 175, 166, 155, 151, 105, 104, 105, 122, 115, - 119, 114, 125, 119, 118, 115, 108, 111, 113, 103, 114, 115, 111, 105, 104, 109, - 114, 115, 113, 112, 112, 93, 99, 105, 111, 113, 113, 112, 114, 114, 112, 110, - 109, 109, 112, 115, 118, 114, 120, 114, 113, 120, 119, 115, 120, 117, 119, 120, - 121, 119, 117, 116, 118, 120, 118, 118, 119, 120, 121, 120, 120, 119, 126, 126, - 113, 125, 123, 119, 63, 29, 32, 37, 39, 36, 35, 37, 40, 46, 81, 120, - 143, 154, 159, 156, 147, 167, 171, 173, 172, 167, 164, 164, 166, 167, 166, 166, - 167, 168, 166, 159, 153, 164, 163, 162, 162, 161, 158, 151, 147, 143, 138, 137, - 142, 145, 148, 154, 161, 158, 162, 165, 164, 165, 167, 166, 162, 175, 176, 174, - 169, 162, 157, 156, 156, 146, 151, 158, 165, 169, 171, 171, 171, 174, 176, 177, - 177, 175, 178, 184, 190, 188, 187, 186, 188, 190, 192, 191, 190, 185, 183, 181, - 180, 179, 177, 174, 172, 172, 161, 156, 163, 171, 173, 174, 175, 208, 199, 199, - 193, 179, 186, 198, 190, 187, 188, 186, 185, 187, 188, 181, 172, 165, 159, 151, - 137, 116, 149, 150, 157, 169, 173, 172, 165, 164, 170, 164, 154, 147, 134, 88, - 125, 122, 113, 124, 114, 113, 114, 119, 119, 114, 120, 127, 123, 131, 128, 121, - 114, 116, 120, 117, 109, 107, 103, 102, 92, 98, 104, 107, 107, 106, 105, 105, - 105, 105, 103, 103, 104, 108, 110, 112, 110, 114, 108, 106, 114, 113, 109, 115, - 111, 112, 115, 119, 118, 113, 112, 113, 114, 112, 112, 115, 119, 121, 122, 121, - 114, 124, 123, 105, 117, 118, 109, 43, 33, 32, 33, 36, 38, 39, 38, 37, - 30, 43, 53, 59, 80, 119, 150, 163, 160, 164, 169, 172, 172, 171, 170, 170, - 169, 165, 160, 157, 158, 161, 164, 165, 166, 164, 162, 162, 162, 164, 162, 160, - 144, 139, 135, 138, 140, 140, 143, 148, 158, 163, 165, 165, 165, 169, 168, 165, - 164, 161, 154, 151, 151, 157, 162, 166, 157, 161, 166, 170, 171, 173, 174, 176, - 177, 181, 183, 182, 178, 178, 183, 188, 188, 187, 186, 187, 190, 192, 193, 192, - 182, 180, 178, 177, 176, 174, 171, 168, 158, 159, 165, 170, 166, 163, 174, 189, - 218, 197, 199, 197, 180, 193, 207, 187, 197, 195, 188, 182, 182, 184, 182, 176, - 166, 160, 152, 137, 113, 146, 156, 171, 156, 162, 166, 165, 163, 166, 158, 148, - 145, 159, 84, 133, 128, 120, 127, 120, 116, 116, 125, 126, 121, 128, 132, 126, - 80, 89, 98, 105, 111, 109, 90, 68, 104, 96, 91, 102, 104, 105, 105, 104, - 103, 104, 106, 106, 105, 105, 105, 106, 108, 108, 109, 107, 110, 103, 101, 110, - 111, 106, 110, 106, 106, 109, 115, 115, 113, 114, 119, 115, 113, 113, 116, 120, - 123, 123, 122, 110, 116, 116, 104, 116, 112, 106, 49, 33, 34, 38, 41, 42, - 38, 32, 27, 38, 40, 35, 35, 61, 103, 128, 131, 154, 155, 158, 162, 167, - 170, 170, 169, 167, 165, 162, 159, 158, 161, 166, 170, 166, 165, 163, 164, 166, - 167, 167, 165, 154, 147, 140, 141, 140, 138, 136, 137, 131, 134, 134, 133, 133, - 137, 136, 134, 147, 145, 142, 148, 156, 167, 172, 174, 172, 172, 169, 167, 166, - 172, 180, 186, 181, 181, 182, 183, 183, 183, 182, 181, 186, 185, 186, 187, 190, - 190, 188, 186, 179, 178, 176, 175, 174, 172, 168, 164, 162, 163, 169, 171, 163, - 157, 172, 192, 206, 201, 199, 195, 194, 200, 201, 193, 197, 197, 191, 184, 181, - 181, 179, 174, 159, 157, 156, 146, 123, 150, 154, 166, 166, 170, 175, 180, 179, - 176, 168, 162, 147, 164, 92, 115, 134, 130, 123, 126, 128, 122, 126, 128, 125, - 128, 123, 105, 107, 109, 104, 99, 105, 117, 118, 109, 104, 94, 87, 109, 110, - 108, 106, 104, 106, 110, 114, 111, 111, 111, 111, 112, 112, 111, 111, 113, 115, - 108, 106, 116, 116, 112, 116, 116, 112, 112, 116, 115, 111, 113, 119, 112, 109, - 108, 109, 113, 114, 113, 111, 110, 110, 113, 108, 119, 107, 108, 65, 37, 37, - 37, 37, 36, 35, 34, 34, 36, 32, 26, 35, 78, 132, 160, 160, 156, 154, - 154, 157, 163, 167, 168, 167, 162, 166, 170, 170, 167, 163, 163, 164, 167, 168, - 169, 171, 172, 170, 165, 161, 161, 153, 150, 153, 154, 153, 151, 151, 152, 155, - 154, 151, 151, 153, 153, 150, 153, 152, 156, 166, 177, 181, 176, 169, 165, 171, - 176, 178, 178, 177, 179, 181, 179, 177, 177, 181, 186, 187, 182, 176, 182, 182, - 184, 187, 188, 186, 182, 178, 178, 176, 175, 174, 173, 170, 166, 162, 175, 166, - 164, 169, 172, 172, 183, 199, 188, 206, 197, 190, 207, 203, 190, 198, 191, 197, - 198, 195, 190, 186, 179, 172, 166, 159, 154, 143, 120, 148, 151, 163, 167, 165, - 168, 171, 170, 166, 161, 161, 150, 156, 101, 93, 137, 137, 117, 128, 129, 119, - 117, 123, 125, 127, 114, 88, 105, 110, 108, 98, 96, 102, 101, 92, 101, 92, - 88, 101, 105, 103, 99, 97, 102, 106, 106, 106, 109, 113, 115, 116, 115, 114, - 114, 116, 119, 111, 106, 113, 114, 114, 122, 117, 118, 116, 110, 110, 112, 113, - 109, 108, 107, 106, 107, 110, 111, 110, 109, 107, 121, 123, 113, 113, 120, 106, - 80, 36, 36, 40, 41, 35, 26, 31, 40, 36, 35, 32, 42, 83, 137, 165, - 166, 171, 172, 171, 167, 162, 159, 158, 158, 160, 162, 163, 164, 164, 166, 168, - 170, 171, 172, 170, 170, 169, 170, 171, 170, 166, 159, 151, 148, 151, 154, 155, - 154, 158, 158, 158, 159, 160, 160, 161, 161, 163, 163, 165, 168, 171, 175, 178, - 179, 173, 173, 173, 173, 174, 176, 178, 181, 182, 182, 181, 181, 181, 182, 183, - 184, 183, 183, 184, 186, 187, 186, 183, 180, 179, 179, 175, 169, 163, 161, 165, - 169, 166, 169, 170, 168, 173, 184, 192, 195, 198, 186, 187, 194, 199, 203, 200, - 185, 198, 192, 185, 184, 186, 185, 179, 174, 177, 165, 154, 142, 123, 156, 156, - 163, 169, 166, 168, 172, 171, 167, 164, 166, 150, 143, 111, 88, 119, 118, 127, - 126, 125, 121, 116, 115, 116, 114, 109, 102, 118, 106, 97, 98, 107, 107, 94, - 79, 116, 145, 103, 96, 101, 100, 96, 95, 100, 103, 104, 102, 106, 110, 112, - 112, 113, 115, 117, 125, 128, 121, 115, 117, 113, 107, 111, 111, 114, 114, 110, - 110, 114, 115, 111, 114, 113, 111, 112, 114, 115, 114, 113, 112, 121, 122, 116, - 119, 126, 119, 102, 44, 38, 35, 34, 33, 37, 54, 69, 78, 83, 81, 82, - 106, 144, 165, 167, 178, 180, 181, 179, 176, 173, 173, 173, 169, 174, 177, 176, - 172, 170, 174, 178, 182, 182, 180, 180, 181, 183, 185, 187, 182, 178, 171, 163, - 157, 156, 158, 160, 152, 154, 158, 161, 163, 162, 161, 159, 163, 164, 167, 171, - 175, 178, 181, 182, 183, 181, 179, 178, 177, 178, 179, 180, 183, 183, 183, 183, - 183, 184, 184, 185, 183, 183, 184, 186, 188, 188, 186, 184, 176, 174, 172, 168, - 165, 164, 166, 169, 170, 171, 171, 173, 183, 194, 198, 196, 199, 203, 213, 211, - 195, 191, 200, 202, 194, 192, 189, 186, 182, 179, 178, 177, 169, 170, 168, 150, - 117, 141, 150, 169, 169, 167, 168, 173, 172, 168, 164, 165, 147, 138, 108, 87, - 123, 126, 129, 123, 116, 115, 116, 119, 123, 126, 123, 121, 105, 100, 95, 95, - 99, 101, 96, 91, 77, 101, 102, 93, 98, 98, 95, 94, 99, 102, 102, 98, - 104, 107, 106, 104, 105, 110, 115, 108, 115, 113, 112, 117, 112, 104, 109, 107, - 110, 112, 111, 113, 116, 117, 113, 120, 117, 115, 115, 116, 117, 116, 115, 114, - 114, 113, 113, 117, 121, 119, 113, 78, 70, 64, 63, 69, 80, 99, 114, 117, - 126, 127, 122, 129, 149, 164, 165, 178, 181, 184, 185, 184, 183, 182, 182, 179, - 186, 191, 189, 180, 175, 178, 184, 185, 184, 184, 184, 186, 189, 192, 194, 190, - 188, 183, 173, 162, 156, 156, 158, 154, 155, 157, 159, 161, 163, 163, 164, 160, - 162, 164, 168, 171, 173, 175, 175, 181, 179, 177, 175, 174, 174, 175, 176, 178, - 178, 179, 181, 180, 181, 180, 181, 182, 181, 180, 181, 182, 183, 181, 180, 174, - 172, 169, 168, 169, 170, 171, 170, 170, 171, 173, 180, 192, 203, 203, 197, 208, - 203, 207, 206, 195, 194, 199, 195, 187, 189, 188, 183, 176, 171, 173, 175, 170, - 164, 157, 144, 120, 147, 148, 156, 168, 166, 168, 173, 173, 168, 164, 163, 153, - 137, 107, 82, 122, 132, 134, 129, 134, 133, 132, 129, 124, 120, 114, 111, 115, - 113, 109, 104, 99, 97, 97, 99, 91, 95, 119, 95, 101, 101, 98, 96, 100, - 101, 101, 100, 104, 105, 102, 97, 96, 101, 108, 94, 104, 103, 106, 114, 112, - 107, 111, 107, 112, 114, 114, 115, 120, 118, 115, 120, 117, 114, 113, 114, 115, - 115, 114, 116, 111, 108, 111, 113, 112, 112, 112, 113, 110, 109, 111, 117, 122, - 130, 136, 134, 144, 148, 142, 144, 157, 168, 170, 176, 180, 184, 186, 186, 184, - 183, 183, 183, 188, 192, 191, 185, 181, 181, 183, 185, 184, 182, 182, 183, 186, - 189, 192, 187, 187, 184, 178, 169, 163, 159, 158, 161, 158, 155, 152, 153, 157, - 162, 165, 160, 162, 163, 165, 166, 167, 167, 166, 174, 172, 171, 171, 171, 172, - 174, 175, 175, 177, 177, 179, 178, 179, 177, 177, 183, 181, 179, 178, 178, 179, - 178, 176, 177, 173, 171, 171, 174, 176, 175, 172, 167, 173, 180, 187, 197, 205, - 204, 198, 207, 195, 194, 196, 195, 200, 202, 193, 190, 191, 189, 183, 177, 173, - 174, 176, 170, 160, 153, 144, 126, 156, 153, 158, 167, 164, 165, 172, 173, 168, - 162, 160, 161, 142, 114, 78, 115, 133, 136, 140, 127, 129, 132, 132, 130, 127, - 124, 124, 126, 126, 123, 118, 111, 107, 106, 107, 116, 99, 108, 102, 107, 106, - 102, 100, 102, 102, 101, 102, 104, 105, 102, 98, 98, 102, 109, 108, 115, 111, - 110, 116, 113, 107, 112, 112, 116, 118, 117, 117, 121, 119, 115, 120, 117, 114, - 113, 114, 116, 115, 114, 120, 114, 113, 117, 118, 114, 113, 116, 124, 126, 130, - 133, 136, 136, 136, 134, 144, 151, 154, 153, 158, 170, 179, 179, 181, 184, 188, - 190, 189, 187, 186, 185, 185, 186, 187, 188, 188, 187, 183, 180, 187, 186, 184, - 182, 182, 184, 186, 188, 183, 183, 183, 185, 185, 181, 173, 168, 162, 160, 157, - 154, 153, 153, 155, 156, 160, 160, 162, 163, 164, 164, 165, 165, 173, 172, 171, - 171, 171, 173, 174, 175, 174, 174, 175, 176, 176, 176, 176, 177, 180, 179, 177, - 177, 179, 180, 180, 179, 177, 174, 171, 172, 175, 177, 175, 173, 169, 180, 191, - 196, 199, 203, 204, 203, 200, 198, 203, 202, 192, 195, 205, 206, 199, 197, 191, - 186, 183, 181, 179, 179, 163, 168, 173, 158, 125, 149, 157, 176, 166, 162, 162, - 169, 171, 167, 161, 158, 157, 142, 124, 79, 109, 130, 129, 139, 127, 131, 134, - 135, 134, 133, 132, 132, 126, 125, 124, 125, 125, 124, 121, 119, 115, 110, 99, - 104, 109, 109, 105, 103, 105, 105, 103, 104, 106, 106, 105, 106, 109, 113, 116, - 115, 120, 115, 112, 117, 115, 110, 116, 117, 120, 121, 118, 118, 121, 121, 117, - 122, 118, 115, 114, 116, 118, 118, 118, 116, 114, 115, 118, 119, 118, 119, 121, - 128, 134, 139, 139, 140, 143, 144, 142, 150, 155, 158, 158, 163, 173, 178, 178, - 182, 185, 188, 189, 188, 186, 186, 186, 187, 184, 183, 186, 190, 190, 186, 181, - 186, 184, 183, 182, 181, 180, 180, 180, 179, 178, 180, 185, 190, 190, 184, 177, - 171, 172, 173, 172, 169, 164, 159, 155, 156, 156, 156, 157, 158, 160, 162, 163, - 169, 169, 167, 166, 166, 166, 167, 168, 167, 167, 166, 166, 166, 168, 169, 169, - 169, 168, 169, 172, 176, 178, 179, 178, 176, 174, 172, 172, 173, 175, 176, 176, - 179, 192, 202, 203, 201, 203, 205, 206, 208, 199, 198, 199, 196, 200, 204, 197, - 199, 195, 188, 184, 181, 179, 177, 176, 169, 169, 169, 155, 125, 150, 154, 168, - 169, 162, 161, 166, 170, 167, 161, 158, 147, 136, 131, 84, 110, 129, 118, 129, - 137, 137, 136, 136, 135, 134, 132, 131, 136, 133, 131, 133, 136, 136, 129, 123, - 114, 133, 120, 100, 106, 107, 104, 103, 107, 108, 106, 107, 106, 105, 108, 112, - 116, 117, 117, 110, 116, 113, 112, 119, 117, 112, 118, 117, 120, 120, 117, 118, - 122, 122, 120, 122, 118, 115, 114, 117, 120, 120, 121, 114, 116, 116, 114, 116, - 120, 123, 124, 132, 141, 149, 148, 148, 153, 158, 159, 157, 163, 167, 167, 167, - 171, 173, 174, 179, 182, 184, 185, 185, 184, 185, 187, 187, 185, 185, 185, 186, - 186, 185, 183, 182, 181, 181, 180, 179, 178, 176, 174, 179, 179, 180, 182, 184, - 185, 184, 184, 188, 187, 185, 183, 179, 175, 171, 169, 164, 162, 159, 157, 157, - 158, 160, 161, 163, 162, 161, 160, 161, 162, 164, 166, 164, 162, 160, 159, 160, - 162, 163, 166, 167, 167, 168, 171, 175, 176, 175, 174, 175, 175, 175, 174, 175, - 178, 182, 186, 191, 199, 205, 204, 202, 203, 204, 203, 212, 197, 191, 195, 198, - 203, 201, 187, 195, 194, 190, 183, 176, 172, 174, 177, 175, 166, 158, 148, 128, - 157, 155, 160, 173, 165, 161, 166, 170, 168, 164, 161, 149, 135, 131, 81, 110, - 134, 118, 129, 124, 123, 123, 128, 135, 140, 142, 142, 143, 140, 137, 136, 136, - 135, 131, 127, 118, 137, 127, 95, 102, 105, 103, 104, 106, 109, 108, 111, 107, - 104, 106, 111, 115, 113, 110, 113, 120, 118, 117, 122, 118, 110, 115, 115, 118, - 117, 114, 116, 121, 123, 121, 120, 117, 113, 113, 115, 118, 119, 121, 119, 123, - 121, 114, 113, 123, 127, 126, 126, 141, 153, 153, 152, 156, 160, 161, 162, 173, - 180, 179, 175, 172, 173, 174, 180, 182, 184, 186, 185, 187, 188, 192, 184, 186, - 186, 184, 180, 180, 180, 182, 182, 182, 183, 184, 184, 181, 178, 177, 184, 186, - 186, 183, 179, 180, 185, 189, 200, 194, 184, 177, 173, 175, 178, 182, 184, 181, - 174, 169, 165, 165, 164, 166, 160, 161, 161, 163, 165, 168, 172, 173, 170, 168, - 165, 162, 163, 167, 169, 172, 178, 178, 179, 180, 181, 180, 176, 173, 177, 178, - 179, 178, 178, 182, 190, 197, 198, 201, 202, 200, 200, 203, 201, 196, 198, 200, - 209, 206, 191, 190, 200, 202, 197, 199, 199, 190, 177, 172, 178, 186, 166, 171, - 173, 158, 126, 152, 161, 181, 176, 167, 162, 166, 170, 170, 166, 165, 163, 139, - 128, 73, 107, 139, 125, 138, 137, 131, 124, 123, 125, 127, 125, 121, 129, 129, - 127, 128, 128, 131, 132, 133, 136, 136, 127, 104, 105, 105, 103, 102, 102, 106, - 109, 113, 111, 109, 108, 108, 110, 112, 114, 114, 114, 114, 113, 113, 114, 115, - 115, 123, 118, 113, 113, 117, 119, 117, 114, 113, 115, 115, 115, 118, 121, 115, - 109, 113, 119, 122, 105, 107, 120, 115, 130, 139, 144, 151, 155, 156, 159, 163, - 166, 175, 175, 177, 180, 180, 178, 173, 169, 171, 175, 178, 183, 183, 185, 185, - 188, 180, 183, 186, 192, 195, 195, 188, 183, 186, 183, 180, 177, 176, 176, 178, - 180, 174, 179, 185, 186, 183, 180, 178, 178, 182, 189, 190, 182, 171, 172, 179, - 185, 186, 190, 192, 192, 186, 181, 175, 173, 176, 176, 173, 171, 169, 167, 165, - 165, 164, 165, 167, 171, 177, 184, 188, 191, 196, 191, 188, 188, 185, 177, 171, - 170, 177, 181, 186, 188, 189, 190, 192, 195, 197, 203, 207, 205, 203, 203, 201, - 197, 192, 199, 199, 194, 196, 206, 204, 195, 200, 198, 191, 183, 182, 185, 186, - 183, 172, 170, 168, 155, 139, 145, 157, 155, 172, 170, 168, 167, 167, 168, 168, - 169, 157, 144, 137, 89, 100, 119, 131, 124, 130, 128, 125, 121, 119, 119, 119, - 119, 120, 122, 124, 128, 130, 132, 132, 132, 125, 127, 130, 112, 115, 113, 111, - 108, 108, 108, 110, 108, 107, 105, 105, 107, 109, 112, 114, 111, 112, 110, 111, - 111, 113, 113, 114, 109, 108, 105, 107, 108, 110, 105, 102, 113, 112, 106, 100, - 101, 108, 112, 111, 113, 107, 111, 109, 117, 119, 108, 127, 141, 147, 154, 157, - 158, 159, 164, 167, 166, 167, 170, 174, 176, 173, 168, 162, 166, 168, 173, 177, - 181, 182, 181, 180, 180, 181, 183, 187, 191, 191, 188, 184, 190, 188, 185, 183, - 181, 181, 182, 182, 181, 180, 178, 174, 172, 174, 179, 185, 182, 187, 188, 183, - 179, 182, 186, 187, 191, 190, 188, 184, 180, 179, 181, 183, 183, 182, 180, 179, - 181, 183, 186, 188, 189, 188, 188, 188, 190, 192, 194, 196, 198, 193, 192, 194, - 194, 190, 188, 188, 189, 191, 193, 193, 192, 193, 197, 200, 201, 206, 207, 203, - 201, 202, 202, 200, 202, 207, 205, 198, 198, 204, 203, 194, 196, 196, 191, 184, - 182, 184, 182, 177, 170, 166, 162, 147, 132, 139, 154, 156, 170, 168, 167, 167, - 168, 169, 169, 168, 159, 150, 140, 99, 103, 127, 132, 128, 128, 127, 127, 125, - 123, 121, 118, 117, 120, 120, 119, 119, 120, 122, 124, 125, 126, 127, 129, 108, - 112, 112, 111, 108, 107, 105, 107, 110, 110, 108, 108, 109, 110, 112, 114, 108, - 108, 108, 109, 110, 111, 113, 114, 114, 114, 115, 115, 113, 110, 105, 102, 105, - 105, 100, 92, 89, 96, 103, 105, 101, 96, 107, 108, 106, 98, 95, 129, 144, - 150, 157, 160, 160, 161, 165, 167, 165, 167, 172, 177, 179, 177, 173, 167, 158, - 158, 163, 172, 181, 186, 186, 184, 182, 182, 182, 184, 188, 190, 190, 189, 188, - 187, 186, 184, 182, 181, 179, 179, 183, 180, 176, 171, 169, 171, 177, 183, 179, - 182, 183, 183, 184, 189, 189, 185, 190, 189, 186, 182, 180, 180, 184, 187, 190, - 188, 187, 187, 189, 194, 200, 204, 202, 200, 198, 196, 195, 195, 195, 195, 196, - 191, 189, 193, 195, 194, 195, 197, 200, 200, 199, 197, 195, 196, 199, 202, 204, - 207, 206, 201, 198, 201, 202, 201, 205, 208, 205, 197, 198, 203, 202, 196, 193, - 194, 191, 186, 184, 184, 180, 174, 174, 167, 161, 146, 131, 139, 158, 163, 166, - 165, 165, 167, 169, 170, 169, 168, 157, 154, 140, 109, 100, 132, 129, 129, 132, - 133, 134, 134, 132, 128, 124, 122, 126, 124, 121, 119, 118, 120, 122, 125, 126, - 125, 125, 100, 104, 107, 109, 108, 107, 106, 107, 112, 112, 110, 108, 107, 108, - 107, 108, 107, 108, 108, 109, 111, 113, 115, 116, 111, 113, 113, 111, 105, 100, - 96, 94, 99, 106, 108, 105, 100, 102, 103, 103, 106, 101, 106, 102, 102, 101, - 98, 128, 145, 151, 157, 161, 161, 161, 164, 166, 170, 171, 174, 179, 183, 183, - 181, 177, 165, 162, 162, 169, 179, 187, 188, 186, 184, 183, 182, 183, 185, 189, - 192, 193, 187, 187, 187, 186, 184, 182, 179, 177, 180, 180, 180, 178, 176, 173, - 172, 171, 172, 177, 180, 180, 182, 186, 186, 182, 185, 187, 189, 189, 187, 184, - 184, 184, 191, 191, 190, 190, 191, 194, 199, 201, 199, 198, 196, 195, 195, 196, - 197, 197, 197, 191, 188, 190, 191, 191, 193, 196, 201, 201, 200, 199, 198, 198, - 198, 199, 202, 205, 205, 199, 197, 199, 200, 198, 198, 199, 196, 192, 194, 201, - 202, 199, 192, 192, 190, 185, 184, 186, 183, 177, 175, 167, 161, 149, 135, 141, - 159, 166, 163, 163, 164, 167, 170, 171, 169, 167, 160, 161, 142, 116, 97, 135, - 128, 134, 133, 134, 135, 135, 134, 131, 128, 125, 129, 127, 125, 123, 122, 122, - 124, 125, 124, 122, 120, 104, 108, 111, 114, 113, 113, 111, 112, 109, 109, 108, - 106, 105, 106, 106, 105, 110, 111, 111, 113, 115, 117, 119, 120, 117, 118, 118, - 115, 111, 107, 106, 106, 110, 118, 123, 121, 117, 116, 115, 112, 108, 107, 108, - 101, 113, 126, 115, 125, 143, 149, 156, 160, 160, 160, 161, 163, 170, 170, 172, - 175, 179, 181, 181, 180, 182, 174, 168, 168, 174, 179, 180, 179, 182, 181, 181, - 180, 182, 185, 189, 192, 191, 191, 192, 191, 190, 187, 184, 182, 180, 180, 181, - 180, 178, 173, 167, 163, 162, 170, 177, 177, 178, 182, 185, 186, 188, 190, 191, - 191, 188, 186, 185, 185, 189, 190, 191, 193, 194, 194, 195, 195, 195, 195, 195, - 195, 196, 198, 200, 201, 201, 194, 190, 192, 193, 193, 195, 198, 197, 198, 200, - 202, 202, 201, 199, 197, 196, 201, 202, 198, 196, 197, 196, 194, 194, 193, 191, - 189, 192, 198, 200, 198, 189, 189, 185, 180, 181, 184, 184, 180, 170, 162, 160, - 151, 137, 139, 155, 161, 162, 163, 164, 167, 170, 171, 170, 168, 166, 168, 147, - 118, 96, 133, 129, 137, 130, 130, 130, 130, 129, 128, 127, 127, 125, 126, 126, - 126, 126, 125, 124, 124, 125, 123, 120, 109, 112, 115, 115, 114, 112, 111, 111, - 110, 111, 111, 113, 114, 115, 115, 116, 114, 115, 115, 116, 118, 120, 122, 124, - 126, 126, 126, 126, 127, 127, 127, 127, 120, 124, 124, 119, 116, 119, 120, 118, - 71, 95, 115, 104, 102, 111, 109, 127, 140, 147, 155, 159, 160, 159, 160, 162, - 171, 171, 171, 175, 178, 180, 179, 178, 176, 171, 166, 165, 170, 176, 181, 182, - 177, 178, 179, 179, 178, 180, 183, 186, 189, 189, 190, 190, 189, 187, 184, 183, - 185, 181, 177, 174, 173, 171, 169, 168, 157, 165, 171, 171, 172, 179, 187, 191, - 193, 192, 189, 186, 183, 184, 188, 191, 187, 189, 192, 195, 196, 196, 195, 195, - 194, 193, 193, 193, 193, 195, 197, 198, 197, 191, 188, 190, 193, 193, 196, 199, - 197, 198, 201, 204, 206, 204, 200, 196, 192, 197, 199, 196, 195, 196, 195, 193, - 197, 195, 192, 191, 192, 194, 194, 193, 186, 185, 182, 177, 177, 181, 182, 178, - 171, 163, 162, 157, 142, 141, 154, 160, 164, 164, 164, 167, 170, 171, 171, 169, - 162, 163, 150, 112, 93, 121, 121, 128, 129, 129, 129, 130, 131, 131, 131, 132, - 128, 129, 130, 131, 131, 130, 129, 129, 128, 127, 125, 109, 111, 113, 113, 111, - 110, 110, 111, 114, 115, 116, 119, 121, 122, 123, 123, 119, 119, 119, 120, 122, - 123, 125, 126, 119, 118, 119, 122, 126, 126, 122, 118, 122, 122, 118, 113, 113, - 118, 117, 115, 68, 85, 106, 98, 91, 92, 98, 129, 138, 145, 154, 159, 160, - 160, 161, 163, 169, 172, 175, 179, 181, 180, 177, 173, 168, 167, 167, 168, 171, - 176, 181, 184, 176, 179, 182, 182, 180, 179, 180, 182, 186, 186, 186, 186, 185, - 185, 184, 183, 188, 183, 177, 175, 176, 178, 178, 177, 161, 163, 162, 160, 164, - 173, 179, 180, 187, 187, 186, 185, 183, 184, 187, 190, 185, 187, 188, 190, 192, - 192, 192, 192, 192, 191, 190, 189, 190, 191, 192, 193, 191, 186, 184, 187, 190, - 190, 191, 195, 199, 199, 199, 202, 204, 203, 199, 195, 193, 197, 197, 193, 192, - 195, 197, 197, 198, 195, 193, 192, 192, 190, 188, 187, 187, 188, 185, 181, 181, - 182, 180, 174, 175, 165, 164, 159, 144, 141, 154, 161, 168, 167, 165, 166, 169, - 171, 171, 171, 157, 157, 155, 108, 97, 112, 115, 116, 121, 124, 128, 131, 133, - 133, 132, 131, 133, 133, 132, 132, 131, 131, 131, 132, 129, 129, 129, 108, 110, - 113, 113, 113, 114, 115, 118, 113, 113, 115, 116, 117, 118, 116, 117, 121, 122, - 121, 123, 123, 126, 126, 128, 126, 125, 125, 130, 132, 131, 122, 114, 123, 123, - 121, 119, 121, 123, 118, 112, 118, 91, 81, 86, 107, 115, 105, 122, 139, 145, - 154, 160, 161, 161, 163, 164, 165, 168, 175, 180, 182, 178, 171, 164, 176, 177, - 177, 175, 173, 171, 172, 173, 178, 182, 186, 187, 184, 182, 182, 182, 188, 188, - 188, 188, 188, 188, 188, 188, 186, 184, 182, 183, 186, 187, 185, 183, 170, 165, - 156, 151, 156, 166, 168, 165, 175, 180, 186, 190, 189, 187, 185, 184, 184, 184, - 183, 183, 183, 184, 185, 186, 193, 193, 192, 191, 192, 193, 195, 196, 194, 189, - 186, 189, 190, 189, 189, 192, 201, 199, 197, 197, 199, 199, 196, 193, 195, 197, - 196, 191, 190, 196, 200, 201, 195, 192, 190, 191, 191, 188, 185, 184, 191, 193, - 192, 188, 187, 186, 180, 172, 173, 161, 159, 154, 138, 135, 149, 157, 170, 169, - 166, 166, 169, 171, 172, 172, 160, 161, 167, 114, 110, 114, 119, 115, 109, 114, - 120, 125, 128, 127, 124, 122, 133, 131, 128, 125, 123, 124, 126, 127, 125, 128, - 130, 112, 114, 115, 116, 115, 113, 111, 110, 122, 117, 105, 120, 111, 118, 113, - 125, 120, 113, 103, 106, 110, 116, 112, 110, 119, 129, 130, 125, 117, 121, 122, - 122, 124, 121, 121, 121, 120, 118, 117, 117, 124, 126, 119, 112, 102, 90, 95, - 116, 137, 145, 149, 154, 163, 159, 155, 162, 165, 170, 176, 179, 178, 175, 171, - 170, 175, 176, 176, 175, 173, 173, 175, 177, 176, 181, 187, 192, 193, 189, 184, - 180, 181, 182, 184, 188, 190, 188, 183, 179, 179, 186, 191, 188, 179, 173, 173, - 176, 179, 173, 159, 155, 161, 158, 155, 164, 169, 175, 183, 189, 186, 178, 173, - 175, 177, 179, 185, 191, 188, 179, 178, 183, 193, 188, 184, 184, 189, 193, 194, - 194, 195, 190, 186, 186, 190, 195, 197, 197, 201, 202, 201, 199, 196, 194, 195, - 197, 197, 197, 196, 195, 195, 194, 193, 193, 195, 194, 194, 195, 194, 191, 185, - 181, 186, 182, 180, 183, 184, 180, 177, 178, 172, 169, 164, 156, 144, 137, 142, - 152, 164, 164, 163, 165, 168, 170, 171, 172, 155, 155, 162, 93, 127, 115, 111, - 123, 115, 116, 117, 121, 123, 123, 121, 118, 121, 118, 115, 114, 115, 119, 123, - 127, 122, 125, 127, 112, 113, 113, 113, 111, 109, 108, 107, 106, 112, 105, 112, - 101, 111, 102, 103, 123, 121, 113, 104, 97, 96, 101, 106, 98, 103, 105, 104, - 107, 113, 114, 110, 104, 107, 118, 129, 129, 123, 118, 121, 103, 119, 125, 126, - 129, 128, 124, 128, 134, 144, 148, 152, 160, 157, 154, 161, 165, 169, 175, 177, - 177, 174, 172, 172, 174, 176, 177, 177, 176, 176, 177, 179, 173, 176, 181, 185, - 188, 188, 187, 186, 187, 183, 178, 177, 179, 182, 185, 186, 183, 177, 174, 178, - 186, 187, 180, 172, 168, 176, 176, 169, 160, 146, 141, 149, 160, 173, 176, 168, - 175, 191, 189, 173, 179, 182, 187, 189, 183, 179, 186, 198, 185, 185, 186, 187, - 188, 190, 193, 195, 202, 197, 190, 188, 189, 192, 193, 194, 195, 196, 197, 196, - 195, 195, 197, 198, 197, 197, 196, 195, 195, 194, 193, 193, 196, 195, 194, 192, - 190, 185, 178, 173, 178, 174, 174, 178, 179, 176, 173, 174, 176, 171, 164, 153, - 143, 138, 146, 158, 163, 165, 166, 169, 171, 171, 169, 168, 158, 159, 152, 106, - 131, 118, 112, 121, 118, 117, 116, 118, 120, 120, 119, 117, 120, 121, 122, 122, - 120, 118, 116, 115, 119, 124, 126, 113, 113, 113, 111, 111, 111, 112, 112, 104, - 128, 128, 121, 94, 104, 102, 109, 95, 96, 96, 96, 98, 102, 109, 114, 119, - 118, 114, 112, 114, 115, 109, 100, 111, 105, 110, 118, 117, 107, 109, 120, 120, - 136, 131, 119, 122, 126, 121, 116, 134, 144, 150, 152, 158, 156, 154, 161, 163, - 167, 172, 175, 175, 174, 174, 174, 174, 176, 179, 180, 179, 178, 178, 179, 175, - 176, 177, 179, 181, 184, 186, 188, 189, 184, 177, 173, 174, 178, 181, 183, 175, - 179, 183, 183, 181, 180, 182, 185, 179, 176, 171, 170, 170, 163, 150, 138, 144, - 146, 157, 171, 176, 174, 183, 197, 187, 179, 174, 176, 179, 178, 177, 177, 179, - 184, 189, 190, 188, 189, 195, 199, 204, 199, 192, 188, 188, 190, 193, 194, 194, - 196, 197, 197, 196, 195, 197, 199, 197, 197, 196, 195, 195, 194, 193, 193, 199, - 198, 196, 194, 191, 186, 180, 176, 177, 175, 176, 181, 183, 180, 177, 177, 183, - 176, 165, 152, 140, 137, 147, 161, 162, 166, 171, 174, 174, 171, 167, 166, 161, - 163, 135, 123, 136, 123, 117, 120, 118, 116, 113, 113, 116, 118, 119, 120, 117, - 119, 121, 123, 124, 124, 123, 122, 120, 122, 125, 110, 109, 109, 108, 109, 111, - 114, 115, 109, 118, 109, 109, 90, 100, 95, 101, 102, 95, 92, 100, 112, 115, - 104, 92, 100, 101, 103, 109, 116, 121, 120, 117, 127, 113, 111, 120, 120, 108, - 108, 116, 114, 123, 117, 110, 113, 113, 108, 110, 132, 146, 151, 151, 157, 157, - 156, 163, 163, 166, 170, 172, 173, 174, 176, 177, 175, 178, 181, 182, 180, 178, - 177, 177, 182, 181, 180, 179, 179, 180, 180, 181, 185, 184, 182, 181, 180, 178, - 174, 172, 172, 180, 186, 182, 172, 168, 174, 182, 181, 170, 163, 162, 165, 171, - 160, 139, 131, 129, 139, 158, 167, 164, 170, 185, 189, 186, 184, 186, 188, 186, - 183, 179, 181, 184, 188, 189, 191, 194, 200, 204, 200, 196, 190, 187, 187, 191, - 196, 199, 199, 201, 202, 201, 198, 196, 197, 197, 196, 196, 196, 195, 195, 194, - 194, 194, 194, 193, 193, 193, 193, 191, 187, 184, 182, 179, 180, 185, 187, 183, - 180, 180, 186, 179, 167, 153, 140, 135, 144, 158, 164, 169, 173, 175, 173, 170, - 167, 166, 162, 164, 120, 137, 138, 130, 126, 126, 118, 115, 112, 111, 114, 118, - 121, 123, 120, 119, 117, 116, 117, 121, 124, 127, 121, 123, 126, 100, 100, 97, - 96, 96, 97, 100, 102, 115, 97, 80, 107, 111, 115, 95, 92, 110, 104, 102, - 110, 120, 122, 111, 100, 98, 100, 105, 111, 116, 119, 121, 123, 121, 114, 121, - 138, 143, 128, 112, 106, 109, 114, 117, 123, 118, 93, 80, 90, 127, 144, 149, - 147, 153, 156, 156, 163, 163, 166, 169, 171, 173, 174, 177, 179, 177, 179, 182, - 182, 179, 176, 174, 174, 185, 185, 184, 183, 182, 179, 177, 176, 181, 181, 182, - 184, 184, 181, 176, 172, 180, 174, 169, 169, 174, 174, 169, 163, 165, 168, 176, - 164, 142, 140, 139, 123, 125, 142, 140, 126, 143, 180, 185, 164, 171, 180, 188, - 186, 180, 179, 185, 192, 184, 182, 182, 185, 192, 198, 201, 202, 197, 194, 190, - 187, 187, 190, 195, 199, 199, 201, 202, 202, 199, 198, 197, 198, 196, 196, 195, - 195, 195, 195, 194, 194, 188, 187, 187, 188, 189, 188, 186, 183, 181, 178, 178, - 182, 182, 178, 174, 174, 180, 174, 165, 153, 141, 135, 143, 155, 166, 170, 173, - 174, 170, 168, 168, 169, 161, 160, 117, 145, 139, 139, 136, 137, 126, 122, 117, - 114, 115, 117, 119, 119, 127, 125, 121, 118, 115, 115, 116, 117, 121, 123, 124, - 94, 92, 89, 86, 84, 84, 85, 86, 95, 91, 94, 129, 123, 115, 97, 109, - 100, 105, 108, 108, 107, 110, 117, 124, 120, 118, 118, 120, 119, 115, 116, 120, - 117, 114, 117, 126, 128, 118, 104, 94, 121, 116, 114, 118, 110, 81, 71, 89, - 120, 139, 145, 142, 148, 153, 155, 162, 164, 167, 171, 173, 174, 175, 177, 179, - 178, 180, 182, 181, 178, 176, 175, 175, 181, 182, 184, 185, 184, 182, 180, 178, - 181, 179, 178, 178, 181, 183, 184, 184, 177, 178, 178, 179, 178, 178, 177, 176, - 176, 174, 182, 170, 144, 134, 114, 71, 81, 101, 106, 92, 92, 121, 152, 166, - 180, 177, 171, 170, 178, 184, 182, 175, 183, 180, 179, 184, 193, 199, 201, 200, - 201, 199, 196, 191, 188, 188, 191, 194, 192, 195, 198, 199, 199, 198, 199, 200, - 195, 195, 195, 195, 195, 195, 195, 195, 193, 191, 189, 189, 189, 187, 184, 182, - 183, 178, 177, 179, 180, 176, 173, 174, 172, 168, 162, 153, 142, 137, 144, 155, - 165, 170, 173, 173, 169, 166, 168, 170, 157, 152, 129, 149, 140, 147, 142, 144, - 137, 132, 126, 122, 119, 117, 115, 113, 123, 126, 129, 131, 131, 128, 125, 122, - 119, 120, 122, 96, 96, 94, 93, 92, 92, 93, 94, 81, 95, 106, 129, 109, - 99, 90, 107, 111, 115, 114, 108, 97, 97, 104, 114, 100, 96, 95, 104, 112, - 116, 119, 123, 119, 121, 118, 112, 108, 109, 106, 102, 110, 106, 100, 104, 110, - 102, 104, 123, 116, 138, 145, 141, 146, 153, 158, 165, 166, 169, 173, 175, 176, - 176, 177, 178, 178, 180, 181, 180, 179, 178, 179, 181, 180, 181, 182, 183, 184, - 183, 182, 181, 183, 180, 177, 176, 179, 182, 184, 185, 175, 186, 196, 194, 184, - 179, 185, 193, 191, 175, 177, 174, 159, 152, 112, 39, 48, 41, 49, 58, 46, - 39, 74, 125, 173, 174, 175, 179, 188, 192, 183, 170, 179, 182, 187, 193, 198, - 201, 201, 201, 205, 205, 202, 197, 191, 188, 189, 191, 191, 194, 198, 200, 200, - 199, 199, 200, 195, 195, 195, 195, 195, 195, 195, 195, 198, 196, 193, 191, 190, - 188, 184, 182, 185, 180, 177, 180, 181, 179, 178, 180, 174, 170, 163, 153, 141, - 135, 142, 154, 161, 167, 173, 174, 170, 166, 167, 168, 152, 144, 149, 153, 143, - 153, 143, 146, 140, 136, 132, 128, 125, 121, 116, 112, 114, 118, 125, 131, 135, - 136, 135, 134, 122, 123, 124, 102, 102, 103, 105, 107, 110, 111, 113, 121, 117, - 104, 118, 116, 125, 105, 97, 99, 100, 102, 106, 112, 117, 120, 120, 110, 97, - 91, 100, 111, 114, 113, 114, 105, 124, 135, 130, 125, 129, 128, 123, 114, 119, - 115, 116, 125, 122, 114, 115, 117, 140, 148, 143, 149, 157, 162, 169, 166, 170, - 174, 178, 177, 177, 177, 178, 177, 179, 180, 180, 180, 181, 184, 187, 182, 182, - 181, 181, 181, 181, 181, 181, 184, 183, 181, 181, 180, 181, 178, 177, 185, 184, - 185, 188, 192, 191, 186, 181, 178, 171, 181, 177, 157, 154, 120, 52, 90, 65, - 50, 54, 60, 56, 57, 65, 100, 143, 183, 186, 168, 159, 168, 181, 177, 186, - 197, 204, 205, 204, 204, 205, 206, 207, 205, 201, 194, 190, 190, 192, 197, 200, - 203, 203, 202, 199, 198, 198, 195, 196, 196, 196, 196, 196, 195, 195, 194, 192, - 189, 187, 186, 185, 182, 179, 183, 178, 175, 177, 179, 178, 179, 183, 183, 176, - 166, 153, 139, 131, 138, 149, 157, 166, 175, 177, 173, 168, 165, 165, 148, 139, - 164, 156, 145, 157, 142, 145, 136, 134, 133, 132, 130, 127, 121, 118, 115, 114, - 116, 117, 120, 123, 127, 129, 127, 128, 128, 118, 117, 115, 114, 113, 113, 111, - 111, 116, 114, 111, 109, 108, 111, 116, 121, 120, 122, 111, 107, 115, 117, 118, - 126, 118, 112, 105, 102, 101, 103, 105, 110, 128, 123, 120, 116, 111, 110, 118, - 128, 120, 112, 112, 120, 121, 113, 109, 112, 118, 141, 143, 135, 141, 155, 158, - 160, 163, 170, 176, 177, 173, 171, 172, 174, 175, 180, 183, 185, 184, 183, 183, - 184, 182, 183, 184, 184, 185, 185, 184, 184, 182, 181, 179, 178, 177, 179, 179, - 180, 177, 183, 188, 190, 185, 181, 175, 175, 183, 166, 167, 161, 160, 149, 106, - 79, 127, 112, 89, 68, 54, 51, 53, 55, 48, 80, 84, 139, 156, 177, 189, - 183, 189, 196, 200, 199, 199, 203, 203, 201, 210, 209, 208, 203, 194, 188, 193, - 202, 193, 194, 195, 197, 198, 199, 200, 201, 195, 196, 197, 197, 195, 195, 196, - 198, 200, 192, 185, 187, 189, 186, 183, 182, 182, 183, 179, 180, 184, 178, 172, - 179, 179, 166, 174, 153, 148, 132, 154, 153, 158, 164, 171, 167, 162, 173, 176, - 160, 136, 155, 159, 144, 139, 149, 152, 144, 146, 147, 147, 139, 130, 124, 123, - 126, 124, 120, 118, 121, 119, 117, 123, 133, 127, 151, 132, 112, 113, 112, 112, - 111, 110, 109, 108, 103, 106, 109, 110, 111, 112, 113, 115, 110, 119, 115, 112, - 119, 119, 117, 124, 112, 118, 124, 127, 125, 120, 119, 119, 115, 113, 114, 121, - 122, 117, 113, 112, 112, 110, 114, 122, 122, 116, 120, 131, 117, 140, 144, 136, - 143, 155, 158, 160, 166, 171, 177, 177, 173, 171, 172, 173, 174, 178, 182, 184, - 183, 182, 183, 184, 185, 186, 186, 186, 185, 184, 183, 182, 183, 183, 181, 180, - 178, 179, 180, 180, 177, 180, 183, 183, 180, 178, 177, 178, 186, 166, 166, 157, - 158, 152, 133, 78, 112, 117, 122, 124, 117, 101, 80, 63, 46, 47, 53, 140, - 182, 195, 196, 198, 195, 201, 205, 203, 204, 207, 209, 207, 205, 206, 208, 207, - 200, 192, 193, 200, 193, 193, 194, 194, 194, 194, 194, 194, 194, 196, 197, 196, - 194, 193, 194, 196, 199, 192, 187, 189, 191, 188, 184, 183, 173, 179, 178, 177, - 178, 170, 168, 178, 178, 165, 170, 147, 138, 127, 150, 154, 182, 181, 181, 173, - 160, 162, 162, 148, 160, 153, 156, 164, 158, 145, 145, 156, 151, 123, 103, 105, - 113, 114, 116, 122, 132, 123, 115, 114, 115, 116, 123, 131, 132, 151, 141, 110, - 111, 112, 112, 112, 111, 108, 107, 113, 113, 111, 110, 109, 108, 107, 108, 111, - 107, 95, 99, 118, 124, 114, 111, 109, 114, 117, 114, 109, 107, 111, 117, 127, - 117, 110, 115, 121, 123, 120, 118, 124, 126, 130, 128, 113, 96, 94, 104, 118, - 139, 144, 137, 144, 153, 155, 159, 166, 171, 175, 177, 175, 172, 172, 174, 173, - 176, 180, 182, 182, 182, 183, 184, 188, 188, 188, 187, 186, 184, 183, 182, 184, - 184, 181, 179, 178, 178, 179, 179, 178, 178, 178, 177, 176, 176, 179, 181, 177, - 165, 171, 162, 163, 153, 130, 59, 124, 117, 110, 107, 110, 114, 114, 111, 125, - 97, 82, 144, 173, 175, 169, 174, 191, 198, 201, 199, 200, 204, 205, 204, 199, - 202, 209, 212, 206, 196, 194, 197, 198, 198, 198, 197, 196, 195, 193, 192, 193, - 194, 195, 194, 192, 191, 192, 194, 197, 191, 189, 192, 193, 189, 184, 183, 178, - 184, 184, 181, 178, 168, 167, 179, 178, 170, 172, 148, 134, 130, 156, 164, 159, - 158, 166, 171, 163, 158, 152, 142, 151, 158, 160, 156, 156, 160, 158, 152, 139, - 107, 90, 104, 116, 110, 107, 115, 126, 123, 123, 127, 128, 125, 124, 126, 130, - 138, 135, 110, 112, 113, 114, 113, 112, 110, 109, 119, 114, 106, 101, 100, 102, - 105, 108, 96, 109, 109, 103, 101, 100, 108, 128, 112, 115, 116, 113, 111, 114, - 120, 123, 118, 105, 96, 98, 104, 105, 105, 106, 106, 111, 119, 122, 112, 100, - 99, 105, 117, 137, 141, 137, 144, 152, 154, 159, 165, 169, 174, 176, 176, 175, - 177, 178, 174, 177, 180, 182, 182, 183, 185, 186, 188, 189, 189, 188, 187, 186, - 185, 184, 184, 183, 181, 179, 177, 177, 178, 178, 180, 179, 177, 175, 175, 175, - 177, 180, 173, 169, 173, 162, 163, 160, 104, 81, 126, 120, 114, 115, 120, 124, - 123, 120, 113, 105, 107, 141, 167, 187, 198, 210, 188, 193, 196, 194, 195, 199, - 201, 200, 198, 202, 208, 212, 207, 197, 193, 195, 199, 199, 200, 199, 198, 195, - 193, 192, 192, 194, 195, 194, 191, 190, 191, 192, 194, 190, 190, 194, 195, 189, - 184, 183, 188, 190, 186, 182, 180, 171, 166, 176, 176, 173, 173, 152, 133, 136, - 161, 172, 176, 167, 169, 172, 160, 151, 148, 142, 144, 156, 155, 144, 146, 158, - 153, 137, 126, 118, 113, 119, 115, 106, 108, 118, 119, 122, 124, 127, 125, 122, - 123, 125, 126, 122, 125, 112, 114, 114, 115, 115, 114, 113, 112, 105, 102, 96, - 96, 100, 106, 111, 114, 115, 116, 107, 108, 118, 120, 114, 117, 103, 111, 118, - 125, 132, 136, 130, 121, 128, 127, 131, 135, 133, 126, 120, 119, 111, 110, 112, - 115, 115, 113, 115, 119, 115, 133, 139, 137, 145, 151, 153, 160, 162, 165, 170, - 174, 177, 179, 181, 183, 177, 180, 182, 184, 183, 184, 186, 188, 186, 187, 188, - 188, 188, 188, 187, 188, 187, 186, 184, 182, 181, 180, 181, 181, 183, 182, 180, - 179, 178, 176, 174, 173, 170, 172, 165, 153, 153, 163, 75, 128, 122, 121, 120, - 122, 124, 121, 113, 104, 117, 118, 139, 160, 176, 176, 177, 184, 193, 198, 199, - 197, 196, 200, 203, 201, 203, 203, 207, 208, 203, 195, 192, 194, 193, 194, 195, - 195, 195, 193, 191, 189, 193, 194, 195, 194, 191, 190, 191, 192, 191, 189, 190, - 195, 195, 189, 185, 184, 190, 188, 179, 177, 182, 175, 168, 173, 170, 171, 167, - 151, 124, 131, 151, 160, 177, 161, 153, 150, 142, 144, 155, 158, 158, 141, 139, - 152, 151, 136, 127, 137, 133, 136, 129, 114, 102, 104, 114, 120, 118, 121, 121, - 114, 106, 106, 114, 122, 121, 123, 126, 114, 115, 115, 114, 115, 115, 116, 116, - 107, 107, 107, 112, 116, 119, 116, 113, 124, 119, 110, 116, 137, 137, 118, 106, - 116, 119, 119, 119, 126, 132, 125, 114, 124, 125, 127, 127, 120, 114, 116, 121, - 139, 129, 118, 111, 109, 110, 109, 109, 112, 129, 135, 137, 145, 151, 154, 162, - 162, 165, 169, 173, 177, 181, 183, 184, 180, 182, 183, 184, 184, 184, 186, 188, - 185, 186, 187, 188, 188, 188, 188, 188, 189, 189, 187, 186, 184, 185, 186, 187, - 185, 183, 181, 180, 178, 175, 170, 166, 156, 166, 164, 154, 148, 140, 51, 121, - 120, 115, 109, 107, 109, 117, 123, 125, 123, 104, 133, 161, 190, 183, 183, 200, - 197, 201, 201, 198, 197, 200, 202, 201, 206, 203, 203, 203, 199, 193, 192, 195, - 192, 193, 195, 197, 196, 195, 193, 191, 193, 194, 195, 194, 190, 189, 190, 191, - 191, 189, 192, 196, 196, 190, 187, 188, 190, 186, 176, 177, 186, 183, 175, 180, - 171, 174, 166, 151, 119, 131, 140, 147, 145, 141, 146, 151, 147, 154, 159, 156, - 144, 136, 134, 140, 143, 138, 135, 139, 135, 140, 134, 119, 116, 122, 118, 108, - 113, 123, 130, 124, 113, 107, 105, 105, 112, 124, 127, 115, 114, 113, 112, 112, - 114, 116, 117, 120, 120, 120, 124, 127, 127, 120, 116, 103, 128, 139, 131, 117, - 106, 113, 134, 136, 137, 129, 118, 121, 129, 130, 123, 133, 129, 124, 120, 114, - 115, 125, 136, 125, 121, 116, 114, 115, 117, 116, 112, 109, 126, 134, 137, 147, - 152, 155, 164, 167, 167, 169, 173, 177, 181, 182, 183, 181, 183, 184, 183, 182, - 182, 184, 186, 187, 188, 188, 188, 188, 187, 187, 186, 187, 186, 185, 184, 185, - 186, 187, 188, 186, 182, 179, 177, 176, 173, 168, 164, 148, 157, 159, 146, 138, - 103, 75, 101, 109, 115, 120, 125, 127, 129, 131, 132, 140, 121, 150, 159, 187, - 185, 187, 203, 197, 201, 201, 196, 194, 197, 198, 197, 203, 200, 199, 200, 198, - 193, 192, 196, 194, 196, 198, 199, 199, 197, 194, 192, 192, 193, 193, 192, 188, - 187, 187, 189, 193, 192, 194, 198, 197, 192, 191, 193, 192, 189, 180, 180, 187, - 183, 177, 183, 174, 177, 163, 152, 118, 135, 142, 148, 157, 163, 172, 170, 160, - 158, 151, 132, 123, 133, 133, 124, 127, 141, 141, 132, 130, 132, 133, 133, 135, - 134, 125, 115, 119, 126, 132, 130, 125, 121, 113, 104, 109, 116, 112, 116, 114, - 111, 110, 110, 113, 116, 118, 120, 117, 115, 118, 124, 128, 128, 125, 136, 128, - 110, 108, 124, 132, 125, 125, 108, 119, 124, 121, 123, 129, 126, 118, 110, 110, - 113, 116, 114, 111, 112, 118, 115, 121, 127, 130, 129, 123, 112, 102, 108, 124, - 132, 137, 148, 152, 155, 165, 170, 170, 171, 173, 177, 180, 180, 180, 182, 183, - 183, 182, 180, 180, 182, 185, 189, 189, 189, 188, 187, 186, 184, 183, 183, 182, - 181, 181, 182, 183, 185, 187, 185, 181, 176, 173, 172, 171, 168, 165, 160, 153, - 144, 122, 120, 80, 138, 121, 116, 117, 116, 112, 106, 107, 112, 117, 113, 129, - 177, 163, 183, 194, 193, 191, 200, 204, 203, 197, 195, 197, 198, 197, 200, 197, - 197, 199, 198, 194, 193, 196, 192, 194, 196, 197, 195, 193, 189, 187, 190, 191, - 192, 190, 187, 185, 185, 187, 196, 195, 197, 200, 199, 194, 194, 197, 190, 190, - 182, 178, 180, 172, 167, 177, 172, 174, 156, 147, 116, 139, 147, 152, 151, 152, - 153, 141, 133, 144, 149, 136, 138, 123, 121, 130, 127, 115, 115, 129, 133, 128, - 126, 128, 127, 124, 131, 145, 138, 131, 116, 106, 111, 123, 129, 127, 116, 108, - 96, 116, 116, 116, 116, 116, 117, 117, 118, 121, 120, 119, 109, 95, 100, 107, - 101, 93, 110, 115, 116, 119, 114, 112, 121, 130, 125, 126, 131, 125, 107, 98, - 100, 118, 116, 111, 107, 106, 110, 116, 120, 112, 116, 120, 124, 125, 126, 129, - 132, 116, 122, 133, 142, 147, 151, 154, 157, 170, 171, 173, 174, 176, 180, 185, - 189, 184, 183, 182, 181, 181, 182, 183, 184, 183, 183, 184, 186, 186, 189, 190, - 191, 181, 178, 184, 185, 176, 178, 185, 184, 180, 183, 183, 177, 173, 171, 167, - 162, 162, 130, 143, 127, 94, 119, 135, 115, 129, 128, 124, 121, 118, 118, 117, - 118, 102, 140, 166, 174, 180, 185, 186, 192, 196, 199, 200, 199, 195, 194, 196, - 199, 209, 204, 198, 196, 196, 195, 192, 188, 189, 191, 194, 196, 196, 195, 193, - 192, 198, 194, 190, 190, 192, 194, 192, 190, 201, 200, 199, 200, 200, 197, 191, - 186, 195, 192, 186, 180, 175, 173, 172, 173, 171, 154, 163, 136, 92, 148, 148, - 159, 153, 154, 155, 151, 143, 137, 135, 135, 138, 136, 135, 134, 129, 124, 127, - 134, 127, 122, 118, 121, 126, 129, 126, 122, 130, 131, 132, 127, 113, 104, 112, - 126, 116, 111, 106, 116, 117, 116, 116, 116, 116, 115, 116, 119, 117, 118, 112, - 104, 111, 118, 111, 101, 108, 104, 105, 115, 121, 124, 137, 121, 122, 123, 121, - 120, 121, 120, 118, 105, 111, 119, 120, 115, 109, 105, 102, 112, 122, 135, 140, - 132, 117, 101, 91, 126, 121, 122, 133, 139, 140, 145, 153, 163, 166, 171, 174, - 176, 178, 179, 182, 186, 185, 183, 183, 182, 184, 184, 186, 184, 186, 185, 186, - 184, 183, 181, 179, 190, 183, 186, 189, 184, 187, 190, 185, 185, 184, 177, 170, - 168, 169, 164, 158, 146, 143, 145, 122, 111, 124, 124, 130, 130, 131, 130, 128, - 126, 124, 122, 119, 112, 145, 168, 175, 183, 187, 188, 191, 195, 197, 199, 200, - 199, 198, 198, 199, 199, 198, 197, 197, 197, 194, 191, 188, 192, 191, 190, 189, - 189, 190, 192, 193, 196, 190, 183, 181, 183, 191, 199, 203, 203, 203, 202, 198, - 193, 190, 189, 189, 191, 186, 178, 176, 176, 177, 175, 174, 188, 169, 167, 123, - 100, 144, 141, 146, 144, 143, 138, 136, 138, 148, 161, 172, 154, 149, 147, 147, - 145, 139, 137, 138, 129, 127, 125, 127, 130, 134, 139, 141, 147, 145, 143, 139, - 126, 111, 102, 102, 117, 138, 129, 119, 118, 118, 119, 117, 118, 117, 118, 122, - 117, 119, 118, 115, 121, 126, 118, 113, 110, 98, 90, 98, 100, 100, 107, 114, - 125, 129, 122, 120, 125, 119, 106, 118, 110, 98, 87, 86, 96, 113, 126, 136, - 128, 114, 104, 104, 115, 132, 144, 117, 112, 114, 127, 137, 142, 151, 161, 159, - 163, 171, 177, 178, 178, 177, 177, 184, 183, 183, 182, 182, 184, 183, 185, 180, - 182, 184, 186, 185, 184, 181, 180, 186, 177, 178, 183, 180, 185, 184, 175, 179, - 180, 176, 175, 174, 171, 158, 143, 142, 154, 134, 107, 127, 134, 115, 139, 136, - 139, 141, 143, 141, 137, 133, 130, 122, 150, 167, 174, 184, 189, 187, 189, 192, - 193, 197, 200, 203, 202, 199, 196, 189, 193, 197, 198, 197, 193, 190, 189, 192, - 192, 190, 189, 189, 190, 191, 191, 186, 189, 193, 196, 196, 198, 200, 201, 207, - 208, 206, 200, 193, 191, 194, 199, 192, 184, 177, 176, 179, 181, 176, 173, 169, - 158, 154, 103, 119, 154, 151, 147, 151, 148, 138, 129, 120, 114, 114, 114, 146, - 141, 139, 147, 151, 149, 145, 144, 137, 139, 142, 143, 143, 145, 149, 153, 129, - 125, 124, 129, 129, 122, 111, 105, 107, 139, 134, 119, 120, 121, 121, 121, 122, - 123, 123, 128, 119, 122, 123, 120, 124, 125, 117, 123, 124, 114, 108, 112, 107, - 101, 104, 89, 97, 103, 104, 110, 120, 124, 120, 122, 119, 115, 112, 108, 104, - 98, 93, 102, 110, 121, 127, 124, 115, 104, 96, 97, 107, 113, 116, 123, 135, - 144, 148, 154, 161, 168, 173, 175, 175, 175, 175, 181, 179, 179, 179, 179, 180, - 180, 181, 177, 179, 180, 180, 180, 180, 179, 179, 183, 175, 179, 184, 179, 182, - 184, 176, 190, 185, 175, 167, 166, 172, 174, 171, 153, 150, 122, 97, 129, 141, - 119, 136, 140, 142, 144, 146, 145, 141, 137, 134, 126, 148, 163, 171, 183, 188, - 185, 189, 191, 191, 195, 200, 204, 202, 196, 190, 189, 193, 197, 198, 194, 191, - 191, 192, 191, 193, 195, 196, 196, 194, 192, 190, 187, 193, 200, 203, 200, 197, - 196, 197, 208, 207, 204, 200, 197, 196, 198, 200, 194, 189, 184, 181, 180, 180, - 177, 174, 167, 169, 162, 98, 138, 149, 142, 130, 128, 131, 135, 138, 139, 139, - 139, 139, 127, 124, 124, 132, 137, 136, 136, 137, 133, 135, 139, 142, 140, 137, - 133, 131, 139, 133, 129, 130, 131, 127, 119, 113, 111, 124, 123, 116, 118, 119, - 120, 122, 123, 125, 126, 129, 119, 121, 125, 121, 123, 122, 115, 103, 113, 113, - 112, 119, 118, 116, 123, 133, 120, 106, 98, 89, 83, 85, 93, 107, 111, 120, - 133, 140, 131, 110, 90, 121, 116, 110, 107, 108, 113, 118, 122, 118, 137, 137, - 118, 113, 131, 141, 137, 149, 155, 159, 164, 166, 169, 170, 172, 176, 177, 176, - 178, 178, 177, 178, 178, 180, 179, 177, 175, 174, 173, 172, 173, 172, 169, 176, - 178, 170, 172, 177, 174, 175, 185, 190, 186, 180, 175, 169, 164, 149, 134, 129, - 118, 126, 141, 134, 136, 136, 136, 137, 135, 135, 133, 132, 131, 129, 148, 160, - 170, 185, 189, 188, 194, 193, 193, 195, 199, 201, 199, 192, 187, 196, 198, 198, - 195, 191, 190, 192, 196, 195, 195, 195, 195, 195, 194, 194, 194, 199, 197, 193, - 188, 184, 188, 197, 205, 209, 204, 200, 199, 201, 200, 194, 188, 188, 189, 188, - 184, 179, 176, 178, 181, 166, 173, 161, 95, 144, 145, 147, 139, 155, 150, 141, - 132, 125, 120, 119, 117, 129, 127, 126, 126, 125, 122, 124, 130, 138, 136, 132, - 132, 134, 133, 127, 123, 127, 129, 130, 131, 131, 129, 125, 121, 114, 109, 103, - 114, 115, 117, 119, 120, 123, 123, 124, 125, 116, 119, 125, 122, 122, 125, 122, - 102, 109, 104, 100, 104, 103, 103, 112, 111, 104, 107, 119, 119, 110, 109, 118, - 109, 102, 96, 102, 113, 121, 119, 113, 90, 95, 103, 116, 128, 136, 140, 140, - 134, 149, 143, 113, 105, 124, 138, 134, 147, 150, 155, 159, 162, 167, 171, 174, - 173, 174, 174, 175, 175, 175, 175, 174, 173, 174, 173, 174, 174, 175, 175, 174, - 167, 164, 171, 172, 164, 167, 175, 175, 166, 180, 189, 184, 167, 151, 135, 126, - 133, 123, 148, 148, 129, 139, 144, 143, 138, 137, 134, 132, 131, 130, 130, 130, - 131, 148, 161, 173, 187, 191, 190, 199, 196, 196, 196, 197, 198, 196, 192, 189, - 203, 201, 197, 193, 190, 191, 194, 197, 199, 196, 191, 188, 188, 192, 198, 202, - 197, 196, 194, 193, 193, 197, 202, 207, 215, 208, 203, 204, 208, 205, 194, 183, - 178, 183, 186, 184, 177, 175, 179, 186, 160, 160, 140, 86, 134, 137, 154, 152, - 148, 149, 149, 150, 150, 149, 145, 143, 134, 134, 135, 134, 132, 129, 135, 145, - 127, 117, 106, 103, 106, 112, 113, 112, 115, 127, 136, 142, 142, 142, 135, 129, - 131, 129, 112, 119, 120, 120, 121, 122, 122, 123, 124, 125, 117, 122, 128, 122, - 121, 128, 128, 133, 133, 120, 111, 114, 109, 103, 107, 116, 122, 131, 140, 137, - 126, 114, 108, 121, 118, 111, 106, 102, 97, 89, 82, 88, 91, 98, 108, 117, - 122, 122, 120, 121, 122, 117, 106, 105, 116, 124, 123, 136, 141, 146, 152, 156, - 162, 167, 170, 167, 167, 168, 169, 169, 168, 167, 168, 162, 163, 165, 167, 166, - 164, 160, 158, 158, 152, 155, 158, 153, 159, 168, 167, 168, 165, 150, 133, 123, - 127, 135, 140, 136, 129, 151, 149, 136, 142, 140, 145, 142, 141, 139, 137, 135, - 133, 132, 132, 129, 149, 163, 175, 186, 188, 188, 199, 197, 198, 198, 196, 195, - 195, 196, 198, 204, 200, 194, 191, 191, 193, 195, 196, 196, 195, 193, 193, 194, - 196, 200, 202, 192, 195, 201, 207, 210, 210, 206, 203, 209, 206, 203, 205, 207, - 204, 196, 189, 178, 181, 184, 183, 179, 179, 181, 185, 178, 166, 136, 95, 126, - 122, 134, 126, 123, 126, 133, 140, 143, 140, 132, 126, 135, 133, 137, 141, 144, - 143, 149, 156, 156, 151, 142, 139, 140, 145, 148, 150, 157, 164, 167, 163, 157, - 152, 139, 128, 148, 156, 142, 126, 127, 126, 126, 125, 126, 125, 125, 129, 121, - 126, 131, 121, 120, 127, 131, 131, 130, 122, 121, 131, 128, 117, 115, 121, 128, - 126, 118, 117, 125, 126, 119, 125, 124, 122, 117, 110, 107, 106, 108, 106, 104, - 106, 111, 119, 126, 129, 129, 134, 124, 123, 134, 140, 135, 129, 131, 121, 126, - 134, 141, 145, 150, 155, 158, 160, 159, 162, 163, 163, 162, 160, 161, 157, 158, - 158, 155, 148, 137, 125, 118, 118, 107, 107, 110, 112, 120, 127, 123, 113, 121, - 130, 137, 145, 152, 153, 150, 154, 142, 138, 131, 140, 147, 132, 138, 141, 141, - 140, 138, 136, 134, 132, 130, 128, 146, 162, 174, 184, 182, 184, 196, 198, 200, - 199, 197, 194, 196, 201, 206, 201, 197, 191, 190, 192, 195, 195, 195, 188, 193, - 200, 206, 207, 205, 200, 197, 201, 199, 197, 199, 203, 207, 208, 207, 193, 193, - 194, 196, 197, 196, 194, 192, 186, 186, 184, 184, 184, 183, 182, 181, 173, 159, - 132, 112, 139, 135, 141, 128, 135, 131, 128, 129, 132, 135, 138, 137, 139, 134, - 134, 140, 145, 145, 142, 143, 150, 153, 153, 152, 149, 148, 148, 148, 152, 154, - 152, 148, 149, 151, 145, 136, 130, 137, 135, 128, 124, 120, 124, 127, 125, 124, - 123, 127, 124, 123, 126, 126, 124, 124, 129, 131, 131, 129, 125, 122, 121, 123, - 124, 127, 126, 123, 121, 120, 123, 125, 128, 125, 128, 130, 132, 130, 126, 120, - 116, 109, 117, 113, 109, 115, 118, 124, 139, 129, 130, 132, 134, 135, 136, 136, - 135, 141, 136, 129, 124, 126, 134, 143, 150, 152, 151, 149, 145, 141, 143, 151, - 160, 149, 142, 127, 111, 108, 115, 124, 127, 138, 141, 144, 144, 141, 140, 141, - 144, 149, 149, 149, 150, 150, 150, 151, 152, 148, 149, 149, 149, 147, 146, 146, - 144, 146, 141, 139, 140, 140, 137, 139, 142, 137, 148, 160, 168, 179, 192, 196, - 194, 195, 192, 195, 201, 203, 199, 200, 205, 206, 196, 187, 185, 190, 193, 191, - 189, 192, 198, 199, 195, 196, 199, 197, 191, 190, 199, 206, 205, 199, 197, 203, - 210, 204, 197, 191, 194, 201, 203, 197, 190, 183, 183, 185, 187, 188, 187, 182, - 178, 165, 170, 99, 144, 131, 131, 139, 141, 139, 137, 136, 136, 135, 134, 133, - 132, 137, 135, 133, 134, 136, 141, 147, 152, 148, 148, 149, 149, 149, 148, 146, - 144, 146, 146, 154, 158, 154, 152, 142, 120, 117, 125, 148, 127, 126, 128, 132, - 130, 126, 125, 126, 127, 124, 123, 125, 125, 122, 122, 126, 125, 127, 129, 129, - 127, 126, 125, 127, 129, 128, 126, 126, 126, 128, 130, 132, 129, 129, 130, 131, - 130, 129, 127, 126, 117, 128, 128, 126, 129, 125, 123, 131, 133, 133, 133, 134, - 135, 137, 139, 140, 138, 138, 138, 138, 138, 138, 138, 138, 126, 128, 129, 125, - 121, 122, 127, 131, 120, 130, 139, 144, 150, 154, 153, 148, 145, 146, 147, 147, - 147, 147, 149, 150, 151, 151, 150, 149, 149, 148, 147, 148, 148, 147, 146, 145, - 143, 142, 141, 141, 148, 145, 145, 148, 148, 144, 144, 145, 142, 142, 154, 173, - 186, 191, 195, 201, 195, 192, 194, 198, 200, 198, 198, 202, 197, 193, 187, 184, - 186, 190, 194, 196, 196, 200, 200, 197, 199, 202, 201, 196, 194, 198, 201, 202, - 201, 201, 204, 208, 206, 200, 194, 193, 195, 194, 188, 182, 182, 182, 183, 184, - 184, 183, 179, 174, 173, 160, 110, 143, 136, 137, 140, 135, 137, 137, 137, 138, - 140, 141, 143, 143, 140, 138, 136, 133, 133, 135, 139, 141, 145, 146, 145, 145, - 143, 144, 146, 148, 160, 152, 145, 139, 133, 143, 149, 142, 101, 132, 154, 116, - 120, 126, 130, 125, 118, 119, 123, 124, 121, 121, 125, 126, 123, 124, 128, 124, - 128, 133, 134, 132, 130, 127, 127, 128, 128, 129, 130, 132, 132, 133, 134, 127, - 126, 125, 125, 126, 129, 131, 133, 124, 135, 134, 133, 135, 129, 124, 130, 135, - 134, 133, 132, 134, 136, 139, 141, 141, 143, 146, 149, 149, 146, 143, 141, 149, - 152, 155, 154, 151, 149, 150, 151, 150, 156, 158, 156, 155, 154, 151, 145, 154, - 153, 152, 152, 154, 156, 156, 156, 159, 158, 157, 155, 153, 152, 151, 151, 157, - 155, 152, 150, 148, 147, 146, 146, 150, 148, 149, 153, 154, 149, 147, 147, 147, - 139, 149, 175, 189, 186, 189, 202, 195, 193, 193, 196, 196, 194, 195, 198, 192, - 191, 188, 184, 183, 186, 193, 199, 196, 199, 200, 197, 198, 202, 202, 201, 202, - 201, 200, 200, 201, 202, 203, 202, 208, 205, 200, 197, 195, 191, 187, 184, 182, - 182, 183, 184, 184, 183, 179, 176, 169, 134, 121, 138, 140, 145, 146, 134, 140, - 140, 140, 140, 142, 144, 148, 149, 148, 146, 145, 142, 141, 141, 142, 143, 150, - 150, 149, 147, 143, 144, 149, 153, 143, 144, 151, 154, 144, 143, 139, 126, 138, - 102, 133, 111, 112, 116, 120, 120, 116, 117, 123, 121, 119, 121, 127, 128, 126, - 127, 132, 128, 131, 135, 135, 131, 127, 126, 125, 125, 127, 128, 130, 131, 132, - 132, 132, 129, 128, 126, 126, 128, 131, 134, 136, 130, 138, 134, 131, 136, 135, - 133, 142, 138, 138, 139, 139, 140, 142, 144, 145, 151, 150, 149, 149, 151, 153, - 155, 157, 146, 149, 151, 151, 149, 147, 146, 146, 157, 158, 155, 149, 150, 156, - 160, 161, 164, 159, 154, 154, 156, 159, 158, 157, 161, 161, 159, 158, 156, 155, - 154, 154, 161, 160, 156, 154, 152, 153, 154, 155, 150, 148, 148, 152, 153, 149, - 147, 148, 150, 142, 145, 164, 177, 179, 184, 193, 195, 193, 193, 192, 192, 192, - 193, 193, 192, 192, 189, 186, 185, 186, 190, 193, 194, 194, 194, 193, 194, 197, - 200, 200, 206, 204, 202, 200, 199, 199, 198, 198, 202, 202, 200, 198, 194, 191, - 190, 190, 180, 179, 179, 181, 181, 181, 177, 176, 161, 115, 138, 135, 138, 143, - 143, 132, 144, 143, 142, 140, 139, 140, 143, 145, 149, 149, 150, 150, 150, 150, - 151, 151, 150, 152, 152, 148, 143, 142, 145, 150, 151, 147, 149, 146, 135, 134, - 137, 133, 135, 129, 120, 118, 113, 112, 118, 123, 124, 126, 129, 123, 122, 123, - 129, 130, 127, 126, 129, 129, 130, 130, 130, 126, 125, 125, 126, 124, 126, 128, - 130, 133, 133, 132, 130, 136, 135, 135, 136, 136, 137, 138, 139, 135, 142, 139, - 138, 144, 143, 141, 148, 142, 144, 147, 150, 151, 151, 150, 149, 155, 153, 150, - 149, 150, 153, 157, 160, 158, 159, 159, 158, 157, 156, 157, 158, 146, 152, 158, - 160, 163, 166, 164, 159, 166, 161, 156, 154, 155, 157, 155, 154, 155, 155, 154, - 155, 154, 154, 153, 153, 155, 153, 152, 150, 150, 151, 154, 156, 153, 149, 148, - 150, 151, 149, 150, 154, 150, 148, 146, 151, 161, 175, 184, 186, 190, 192, 192, - 190, 189, 191, 190, 190, 188, 187, 187, 188, 190, 191, 190, 189, 193, 191, 191, - 191, 191, 193, 197, 200, 199, 202, 203, 201, 197, 195, 198, 201, 192, 194, 194, - 192, 189, 187, 187, 189, 180, 178, 176, 175, 173, 170, 167, 163, 159, 117, 155, - 139, 137, 135, 136, 128, 145, 146, 146, 143, 140, 139, 141, 143, 143, 144, 146, - 147, 148, 149, 150, 150, 143, 145, 146, 146, 143, 141, 143, 144, 149, 143, 146, - 146, 137, 136, 140, 139, 143, 138, 167, 123, 115, 111, 117, 123, 126, 128, 130, - 129, 126, 128, 130, 128, 123, 120, 123, 125, 125, 124, 123, 122, 124, 127, 131, - 127, 129, 130, 132, 133, 133, 132, 133, 136, 136, 137, 138, 138, 138, 137, 137, - 131, 140, 141, 143, 148, 143, 135, 138, 139, 142, 146, 150, 151, 150, 147, 145, - 152, 152, 152, 152, 151, 150, 149, 148, 150, 149, 147, 146, 146, 148, 150, 151, - 155, 159, 161, 160, 158, 157, 154, 148, 164, 161, 157, 155, 155, 155, 154, 153, - 154, 155, 155, 155, 156, 156, 157, 157, 152, 152, 151, 151, 151, 153, 154, 156, - 157, 152, 150, 153, 154, 152, 155, 158, 149, 152, 150, 146, 152, 170, 182, 184, - 185, 189, 189, 188, 187, 188, 187, 184, 181, 180, 182, 186, 191, 194, 193, 191, - 196, 192, 191, 193, 193, 192, 196, 200, 190, 195, 200, 200, 197, 197, 200, 203, - 193, 193, 193, 191, 188, 185, 185, 184, 186, 182, 177, 173, 168, 162, 155, 152, - 146, 121, 155, 141, 141, 139, 143, 143, 142, 145, 149, 148, 144, 143, 145, 148, - 145, 145, 146, 146, 146, 147, 148, 147, 141, 142, 144, 147, 148, 148, 146, 146, - 139, 134, 142, 150, 145, 141, 141, 136, 140, 137, 147, 118, 115, 113, 117, 119, - 118, 120, 124, 126, 124, 125, 128, 128, 122, 119, 120, 123, 123, 122, 122, 120, - 123, 126, 130, 129, 130, 132, 133, 133, 133, 133, 133, 134, 134, 134, 135, 134, - 135, 135, 135, 132, 139, 138, 139, 146, 142, 133, 136, 137, 139, 142, 144, 146, - 145, 144, 143, 150, 151, 152, 152, 151, 149, 147, 146, 151, 150, 149, 150, 152, - 154, 154, 154, 151, 152, 150, 146, 150, 158, 163, 164, 159, 159, 160, 159, 157, - 156, 156, 157, 158, 158, 158, 159, 159, 160, 160, 160, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 152, 153, 157, 157, 156, 157, 159, 154, 154, 152, 151, 152, - 156, 166, 176, 177, 183, 185, 184, 182, 185, 183, 178, 177, 179, 180, 181, 183, - 186, 191, 195, 197, 192, 191, 194, 196, 193, 194, 199, 189, 191, 195, 197, 198, - 198, 196, 195, 193, 192, 190, 189, 188, 186, 184, 183, 181, 177, 171, 166, 160, - 153, 147, 142, 137, 130, 144, 139, 145, 143, 146, 151, 140, 145, 150, 151, 147, - 145, 147, 149, 149, 148, 149, 148, 148, 149, 150, 151, 148, 145, 141, 142, 146, - 147, 145, 141, 152, 134, 127, 127, 124, 129, 139, 141, 146, 72, 101, 117, 117, - 120, 123, 118, 113, 115, 121, 119, 118, 121, 127, 127, 123, 121, 123, 125, 126, - 125, 124, 121, 121, 123, 125, 129, 129, 131, 131, 131, 131, 130, 131, 136, 136, - 135, 135, 135, 137, 139, 141, 140, 143, 136, 134, 143, 144, 142, 148, 143, 143, - 145, 146, 147, 148, 149, 149, 153, 152, 150, 149, 149, 152, 154, 156, 148, 147, - 148, 150, 154, 154, 153, 152, 155, 158, 158, 155, 155, 159, 159, 156, 156, 159, - 162, 162, 159, 158, 160, 162, 157, 158, 157, 157, 157, 158, 158, 158, 159, 158, - 158, 157, 157, 156, 155, 154, 152, 150, 153, 158, 159, 156, 155, 156, 162, 152, - 153, 158, 151, 140, 146, 164, 172, 179, 182, 181, 180, 184, 179, 173, 177, 181, - 181, 178, 174, 176, 187, 196, 196, 192, 191, 195, 194, 191, 190, 195, 196, 193, - 193, 196, 200, 198, 191, 184, 187, 185, 183, 183, 184, 184, 182, 180, 164, 160, - 156, 151, 146, 143, 137, 133, 145, 146, 139, 137, 143, 139, 135, 138, 140, 144, - 151, 151, 147, 143, 144, 146, 147, 146, 147, 147, 148, 150, 152, 154, 151, 144, - 135, 133, 135, 136, 132, 127, 132, 121, 127, 138, 133, 125, 117, 108, 129, 101, - 124, 117, 119, 121, 121, 122, 120, 114, 109, 112, 114, 118, 123, 125, 126, 125, - 123, 123, 123, 122, 123, 124, 124, 125, 125, 122, 127, 131, 132, 130, 130, 133, - 137, 134, 134, 135, 136, 136, 137, 137, 137, 137, 135, 133, 132, 134, 137, 140, - 143, 137, 141, 145, 147, 146, 145, 145, 146, 145, 146, 146, 147, 149, 150, 151, - 151, 149, 150, 151, 151, 151, 153, 158, 161, 161, 157, 153, 154, 158, 160, 158, - 155, 161, 152, 156, 160, 152, 150, 157, 160, 163, 162, 158, 156, 155, 156, 158, - 159, 154, 154, 155, 156, 155, 153, 152, 150, 151, 149, 153, 158, 160, 157, 159, - 161, 156, 154, 153, 155, 157, 156, 151, 147, 166, 162, 160, 164, 170, 175, 174, - 172, 173, 174, 173, 164, 161, 178, 184, 168, 181, 190, 188, 185, 188, 187, 185, - 194, 193, 192, 190, 188, 186, 185, 185, 185, 185, 183, 181, 179, 177, 175, 173, - 171, 165, 157, 147, 139, 135, 139, 146, 152, 148, 149, 148, 144, 141, 141, 146, - 150, 146, 144, 143, 147, 151, 151, 145, 139, 143, 144, 148, 151, 151, 144, 132, - 124, 118, 123, 123, 124, 128, 133, 130, 124, 128, 126, 128, 134, 142, 142, 135, - 128, 122, 110, 105, 125, 123, 121, 120, 121, 122, 120, 117, 127, 126, 123, 122, - 121, 123, 125, 126, 124, 124, 125, 126, 126, 127, 127, 127, 126, 126, 127, 129, - 131, 132, 131, 130, 134, 134, 135, 136, 137, 137, 137, 137, 135, 135, 135, 136, - 137, 139, 140, 141, 137, 140, 144, 145, 146, 146, 147, 148, 149, 149, 149, 149, - 149, 150, 150, 150, 151, 152, 153, 153, 152, 153, 156, 158, 159, 156, 152, 154, - 157, 159, 157, 154, 162, 151, 154, 161, 157, 157, 158, 154, 158, 157, 154, 154, - 153, 155, 157, 159, 158, 157, 156, 155, 155, 154, 155, 155, 155, 154, 156, 160, - 160, 157, 157, 158, 158, 158, 159, 162, 163, 163, 161, 158, 159, 149, 141, 139, - 144, 154, 160, 163, 172, 165, 161, 155, 153, 169, 180, 172, 180, 188, 188, 188, - 191, 188, 182, 187, 183, 183, 182, 184, 183, 185, 184, 185, 179, 176, 172, 175, - 180, 183, 179, 176, 154, 150, 146, 140, 140, 141, 145, 148, 149, 150, 150, 147, - 143, 140, 141, 143, 147, 145, 145, 149, 154, 155, 152, 147, 151, 149, 148, 147, - 148, 149, 149, 150, 137, 136, 129, 124, 126, 133, 136, 134, 146, 146, 147, 151, - 152, 143, 127, 114, 131, 133, 131, 125, 124, 123, 124, 124, 124, 124, 123, 130, - 127, 124, 121, 120, 121, 122, 124, 124, 123, 124, 125, 126, 127, 128, 128, 129, - 126, 124, 127, 131, 133, 129, 126, 134, 136, 136, 137, 137, 138, 138, 138, 134, - 136, 138, 140, 141, 141, 141, 140, 138, 140, 143, 144, 144, 145, 148, 150, 150, - 150, 149, 148, 147, 147, 148, 148, 153, 155, 157, 156, 155, 153, 154, 155, 158, - 155, 153, 154, 157, 158, 156, 153, 163, 151, 154, 162, 161, 161, 158, 148, 153, - 153, 150, 150, 151, 154, 157, 158, 160, 159, 157, 155, 154, 155, 157, 157, 160, - 158, 159, 163, 162, 158, 157, 158, 155, 157, 161, 162, 162, 163, 162, 163, 166, - 162, 159, 160, 162, 161, 158, 154, 162, 152, 150, 150, 147, 154, 163, 161, 160, - 169, 171, 177, 188, 187, 180, 182, 177, 178, 180, 181, 182, 182, 181, 180, 178, - 170, 164, 165, 170, 171, 164, 155, 146, 146, 147, 148, 148, 148, 148, 148, 149, - 151, 152, 150, 147, 144, 143, 143, 143, 142, 141, 145, 150, 153, 152, 150, 153, - 152, 151, 149, 148, 151, 158, 163, 168, 167, 159, 152, 152, 157, 160, 159, 156, - 148, 139, 134, 133, 131, 126, 121, 132, 141, 137, 116, 116, 118, 123, 124, 121, - 116, 115, 114, 117, 119, 123, 124, 123, 121, 119, 121, 122, 122, 123, 124, 125, - 126, 126, 130, 129, 128, 128, 130, 130, 128, 126, 135, 136, 137, 137, 137, 138, - 139, 139, 136, 137, 139, 141, 142, 142, 142, 141, 141, 142, 143, 143, 143, 144, - 146, 149, 146, 146, 144, 144, 144, 144, 145, 146, 152, 154, 157, 157, 156, 154, - 154, 154, 157, 155, 154, 155, 157, 158, 156, 154, 161, 153, 156, 161, 159, 159, - 158, 149, 152, 151, 149, 150, 150, 152, 155, 156, 158, 157, 156, 156, 155, 155, - 156, 155, 161, 158, 159, 163, 162, 158, 158, 161, 154, 157, 162, 163, 161, 160, - 162, 164, 162, 163, 166, 169, 169, 166, 158, 152, 159, 148, 152, 161, 153, 148, - 149, 148, 151, 159, 160, 165, 178, 177, 170, 171, 173, 174, 174, 174, 172, 170, - 165, 164, 169, 164, 157, 156, 155, 154, 147, 143, 148, 150, 153, 155, 156, 154, - 153, 152, 148, 149, 150, 151, 150, 149, 149, 150, 144, 142, 141, 143, 147, 150, - 151, 151, 152, 156, 161, 161, 157, 155, 157, 159, 161, 166, 166, 164, 161, 161, - 156, 151, 150, 140, 128, 121, 119, 123, 123, 123, 117, 125, 127, 116, 111, 109, - 114, 115, 113, 112, 115, 112, 114, 119, 123, 126, 126, 126, 125, 123, 123, 123, - 124, 126, 126, 126, 126, 128, 131, 133, 132, 129, 128, 128, 130, 135, 136, 137, - 138, 139, 139, 139, 139, 141, 140, 139, 139, 140, 141, 142, 143, 143, 144, 145, - 144, 142, 142, 144, 146, 144, 143, 142, 142, 143, 145, 147, 149, 149, 153, 155, - 156, 155, 154, 154, 155, 156, 156, 156, 157, 158, 158, 156, 154, 158, 154, 159, - 159, 152, 153, 158, 152, 152, 152, 151, 150, 150, 152, 153, 153, 155, 157, 159, - 161, 161, 159, 156, 154, 159, 156, 158, 161, 162, 160, 162, 164, 162, 166, 168, - 169, 165, 164, 166, 168, 162, 160, 159, 159, 162, 167, 170, 172, 182, 171, 177, - 186, 178, 171, 172, 172, 163, 167, 162, 161, 169, 166, 157, 159, 164, 165, 164, - 164, 160, 157, 152, 151, 153, 155, 155, 156, 155, 155, 156, 157, 156, 155, 156, - 157, 156, 155, 154, 154, 149, 148, 147, 146, 148, 149, 149, 150, 151, 149, 148, - 148, 149, 151, 153, 153, 153, 158, 165, 165, 162, 157, 157, 157, 148, 157, 161, - 162, 159, 158, 151, 145, 148, 147, 144, 142, 137, 129, 118, 110, 110, 111, 119, - 128, 118, 110, 113, 114, 113, 117, 125, 124, 123, 121, 122, 124, 128, 131, 134, - 128, 128, 128, 129, 129, 129, 129, 129, 127, 132, 135, 133, 129, 126, 127, 133, - 136, 137, 137, 138, 139, 140, 139, 140, 141, 141, 139, 138, 139, 140, 142, 143, - 142, 144, 145, 145, 143, 143, 144, 145, 146, 145, 144, 144, 145, 148, 151, 154, - 148, 151, 153, 153, 153, 153, 154, 155, 154, 155, 156, 157, 157, 156, 155, 154, - 155, 154, 160, 157, 148, 150, 157, 150, 152, 152, 151, 151, 152, 152, 152, 152, - 155, 157, 161, 164, 164, 161, 156, 153, 156, 153, 155, 159, 160, 159, 162, 166, - 167, 168, 169, 168, 165, 164, 164, 165, 167, 167, 169, 169, 169, 169, 167, 166, - 158, 146, 149, 154, 147, 147, 154, 158, 163, 166, 159, 156, 161, 159, 153, 157, - 161, 160, 161, 160, 159, 157, 155, 154, 148, 152, 157, 157, 155, 156, 161, 165, - 159, 157, 156, 154, 151, 151, 151, 151, 151, 148, 144, 142, 143, 144, 144, 143, - 151, 150, 149, 148, 147, 148, 149, 150, 150, 151, 153, 154, 153, 153, 155, 157, - 155, 161, 162, 160, 158, 160, 160, 158, 158, 157, 153, 150, 144, 138, 129, 124, - 125, 114, 111, 124, 114, 108, 113, 114, 109, 111, 119, 122, 121, 119, 120, 123, - 127, 132, 135, 132, 131, 132, 132, 130, 129, 129, 129, 129, 130, 130, 130, 130, - 129, 128, 129, 136, 138, 139, 139, 139, 140, 140, 140, 139, 139, 139, 140, 140, - 140, 140, 139, 138, 141, 144, 146, 145, 145, 146, 147, 149, 148, 146, 144, 145, - 147, 150, 153, 150, 152, 153, 152, 149, 149, 151, 153, 150, 152, 155, 156, 155, - 153, 152, 151, 153, 152, 157, 156, 150, 154, 155, 143, 149, 149, 150, 151, 151, - 152, 153, 152, 153, 154, 157, 159, 159, 157, 154, 152, 156, 152, 152, 155, 158, - 157, 160, 163, 163, 162, 160, 161, 161, 161, 160, 159, 157, 161, 167, 169, 166, - 158, 149, 143, 164, 157, 160, 161, 154, 157, 166, 167, 153, 161, 157, 156, 160, - 159, 157, 165, 160, 160, 160, 160, 160, 160, 160, 160, 154, 156, 158, 157, 156, - 156, 158, 159, 156, 156, 155, 152, 150, 149, 148, 147, 148, 147, 144, 144, 146, - 146, 143, 141, 147, 147, 148, 148, 146, 146, 147, 148, 148, 147, 147, 148, 151, - 153, 153, 153, 148, 153, 153, 149, 146, 150, 153, 155, 160, 156, 148, 143, 139, - 139, 138, 140, 132, 126, 118, 102, 95, 99, 109, 109, 99, 93, 95, 108, 112, - 117, 122, 126, 127, 127, 127, 133, 133, 132, 131, 131, 129, 127, 126, 131, 127, - 126, 128, 131, 132, 129, 127, 136, 137, 137, 138, 138, 138, 139, 139, 134, 137, - 139, 142, 143, 141, 138, 136, 135, 139, 144, 147, 148, 147, 148, 149, 150, 148, - 145, 143, 143, 144, 147, 148, 153, 154, 153, 150, 147, 146, 148, 150, 147, 150, - 153, 154, 153, 151, 150, 149, 151, 149, 152, 154, 152, 157, 152, 134, 144, 145, - 146, 149, 151, 152, 154, 153, 149, 150, 151, 152, 151, 151, 150, 150, 155, 152, - 151, 154, 155, 155, 158, 161, 161, 159, 157, 156, 159, 161, 159, 157, 161, 161, - 160, 160, 159, 160, 163, 165, 157, 156, 164, 165, 155, 157, 160, 154, 160, 168, - 167, 164, 165, 161, 158, 166, 156, 155, 155, 154, 154, 154, 154, 155, 158, 157, - 155, 159, 162, 165, 164, 162, 155, 155, 154, 153, 151, 149, 148, 147, 144, 144, - 146, 149, 153, 153, 148, 145, 147, 150, 151, 152, 150, 150, 151, 152, 153, 153, - 154, 158, 161, 160, 156, 150, 147, 153, 155, 152, 149, 151, 153, 152, 151, 153, - 152, 151, 145, 139, 129, 125, 121, 135, 139, 109, 106, 109, 110, 109, 111, 96, - 69, 113, 120, 124, 121, 120, 122, 123, 121, 119, 128, 128, 126, 131, 128, 126, - 134, 126, 132, 139, 138, 134, 129, 129, 132, 138, 134, 133, 137, 137, 132, 133, - 137, 136, 140, 143, 145, 144, 144, 143, 144, 145, 144, 141, 142, 143, 143, 141, - 140, 144, 145, 146, 148, 149, 151, 152, 152, 149, 148, 146, 145, 145, 146, 147, - 148, 148, 150, 149, 145, 145, 150, 152, 150, 148, 152, 156, 154, 148, 147, 152, - 158, 151, 153, 152, 151, 151, 151, 154, 154, 149, 153, 154, 153, 152, 153, 149, - 145, 148, 152, 155, 155, 153, 154, 158, 163, 163, 161, 160, 162, 164, 163, 159, - 156, 152, 155, 159, 162, 164, 164, 162, 161, 156, 156, 156, 156, 157, 158, 160, - 162, 162, 162, 162, 161, 159, 158, 158, 157, 160, 160, 160, 159, 157, 155, 153, - 152, 154, 152, 151, 153, 156, 159, 160, 160, 156, 154, 152, 148, 147, 147, 148, - 149, 149, 148, 146, 144, 143, 144, 144, 144, 152, 155, 151, 145, 143, 150, 152, - 149, 154, 151, 148, 150, 154, 156, 153, 151, 152, 153, 153, 150, 147, 147, 149, - 153, 144, 146, 146, 146, 141, 135, 126, 121, 123, 126, 132, 102, 99, 105, 109, - 103, 100, 88, 68, 114, 122, 128, 124, 118, 119, 121, 121, 127, 132, 129, 129, - 137, 135, 130, 134, 139, 138, 137, 135, 132, 130, 129, 129, 138, 135, 135, 138, - 137, 132, 131, 135, 131, 135, 139, 139, 139, 139, 140, 141, 141, 140, 139, 141, - 142, 143, 141, 140, 140, 141, 142, 143, 144, 145, 146, 146, 152, 151, 149, 148, - 147, 148, 148, 149, 146, 149, 150, 147, 148, 151, 151, 147, 147, 150, 151, 150, - 146, 147, 150, 154, 149, 151, 151, 149, 149, 150, 153, 155, 148, 154, 157, 153, - 150, 152, 154, 154, 156, 155, 155, 155, 156, 158, 158, 158, 158, 157, 157, 158, - 161, 161, 159, 156, 156, 157, 160, 161, 162, 162, 161, 159, 158, 158, 159, 160, - 159, 157, 156, 156, 158, 158, 160, 160, 160, 159, 158, 158, 157, 157, 157, 156, - 156, 156, 156, 156, 165, 162, 159, 159, 160, 160, 159, 158, 157, 157, 157, 156, - 154, 152, 149, 148, 148, 147, 146, 145, 144, 145, 146, 147, 146, 151, 150, 148, - 148, 152, 153, 149, 150, 148, 147, 148, 150, 151, 151, 151, 155, 157, 158, 156, - 153, 151, 153, 155, 159, 154, 151, 151, 152, 149, 141, 133, 132, 130, 128, 102, - 101, 112, 122, 112, 106, 100, 93, 108, 119, 128, 127, 124, 128, 134, 136, 132, - 135, 131, 133, 145, 146, 140, 142, 136, 133, 129, 131, 136, 142, 145, 145, 143, - 141, 141, 142, 142, 138, 137, 139, 132, 135, 136, 136, 136, 137, 139, 141, 139, - 138, 138, 139, 141, 143, 143, 142, 143, 143, 143, 144, 144, 145, 145, 145, 148, - 147, 146, 145, 145, 145, 145, 145, 144, 149, 151, 150, 150, 152, 150, 146, 151, - 151, 149, 150, 149, 150, 150, 151, 149, 151, 151, 150, 150, 152, 155, 158, 149, - 155, 160, 154, 150, 152, 158, 162, 163, 158, 155, 156, 159, 160, 158, 154, 160, - 159, 159, 161, 164, 164, 163, 162, 161, 161, 161, 161, 161, 161, 160, 160, 159, - 161, 162, 163, 162, 160, 156, 155, 157, 158, 160, 161, 163, 162, 161, 159, 157, - 156, 156, 156, 157, 159, 161, 163, 169, 167, 164, 162, 161, 160, 158, 156, 156, - 158, 160, 161, 159, 155, 150, 147, 147, 146, 146, 146, 146, 147, 148, 149, 141, - 146, 150, 151, 152, 153, 151, 147, 149, 150, 151, 150, 150, 150, 152, 155, 149, - 150, 151, 150, 148, 146, 146, 146, 156, 148, 141, 141, 146, 146, 139, 131, 132, - 126, 123, 115, 112, 122, 131, 117, 107, 109, 112, 121, 125, 124, 116, 109, 104, - 101, 97, 95, 99, 97, 101, 112, 113, 109, 113, 108, 107, 108, 113, 119, 127, - 134, 139, 144, 143, 141, 142, 141, 139, 138, 139, 137, 138, 139, 139, 139, 140, - 142, 144, 141, 140, 138, 140, 142, 144, 143, 142, 146, 146, 145, 146, 146, 146, - 145, 145, 144, 145, 144, 145, 144, 146, 145, 147, 146, 151, 152, 151, 150, 154, - 152, 148, 156, 153, 151, 151, 153, 155, 153, 152, 150, 152, 152, 151, 151, 153, - 156, 158, 151, 155, 158, 155, 152, 155, 159, 159, 162, 159, 157, 157, 158, 159, - 158, 156, 162, 162, 162, 163, 164, 164, 164, 164, 164, 163, 162, 161, 161, 162, - 163, 164, 159, 160, 161, 163, 165, 164, 162, 160, 161, 162, 164, 164, 164, 163, - 161, 160, 159, 158, 157, 157, 158, 161, 164, 167, 163, 161, 159, 159, 160, 160, - 159, 158, 154, 155, 158, 159, 158, 155, 152, 150, 149, 149, 148, 148, 148, 148, - 148, 148, 142, 143, 146, 149, 149, 150, 149, 147, 147, 151, 152, 151, 149, 150, - 152, 157, 157, 158, 159, 159, 157, 155, 153, 152, 157, 152, 147, 147, 148, 147, - 142, 136, 133, 132, 131, 124, 116, 121, 124, 107, 96, 102, 108, 98, 103, 108, - 113, 122, 131, 134, 129, 115, 123, 124, 125, 130, 129, 128, 136, 130, 133, 137, - 138, 135, 137, 142, 147, 139, 139, 139, 137, 137, 137, 136, 135, 140, 142, 142, - 142, 141, 142, 144, 146, 144, 144, 143, 144, 145, 145, 144, 143, 145, 146, 144, - 144, 145, 145, 144, 144, 146, 147, 148, 150, 152, 153, 154, 154, 152, 154, 154, - 150, 151, 155, 156, 154, 159, 155, 152, 152, 155, 156, 154, 151, 148, 150, 151, - 150, 150, 151, 154, 157, 153, 155, 155, 154, 157, 160, 156, 149, 155, 157, 159, - 158, 156, 156, 158, 161, 160, 160, 160, 159, 158, 158, 158, 159, 164, 163, 162, - 162, 162, 164, 167, 169, 166, 164, 162, 162, 165, 166, 164, 163, 161, 162, 163, - 162, 161, 159, 157, 155, 159, 158, 156, 156, 156, 158, 161, 163, 157, 156, 156, - 157, 158, 160, 159, 158, 155, 156, 156, 157, 157, 158, 158, 158, 155, 154, 154, - 153, 151, 150, 148, 146, 146, 144, 143, 145, 145, 144, 146, 147, 144, 148, 151, - 152, 149, 150, 151, 155, 156, 157, 157, 157, 156, 154, 151, 149, 149, 150, 152, - 150, 146, 142, 138, 136, 130, 130, 131, 117, 111, 115, 116, 106, 105, 114, 116, - 137, 138, 137, 134, 135, 136, 133, 125, 128, 137, 137, 134, 136, 132, 129, 139, - 126, 131, 137, 136, 130, 127, 129, 135, 140, 143, 143, 141, 141, 143, 143, 140, - 139, 141, 143, 143, 142, 142, 143, 145, 148, 147, 146, 146, 146, 147, 146, 145, - 147, 147, 147, 147, 147, 148, 148, 147, 145, 146, 147, 150, 151, 153, 153, 154, - 153, 156, 153, 150, 149, 155, 156, 156, 157, 154, 151, 152, 154, 155, 153, 150, - 147, 148, 148, 147, 146, 147, 149, 152, 154, 153, 152, 153, 158, 162, 155, 145, - 152, 156, 160, 159, 156, 155, 160, 164, 161, 162, 162, 160, 157, 157, 158, 159, - 162, 162, 161, 161, 162, 164, 166, 168, 172, 169, 164, 163, 164, 165, 163, 160, - 160, 160, 158, 156, 154, 153, 152, 151, 156, 155, 154, 153, 153, 154, 155, 156, - 159, 158, 158, 158, 160, 160, 157, 156, 159, 158, 157, 156, 156, 158, 161, 163, - 157, 157, 157, 155, 153, 151, 149, 145, 150, 143, 141, 142, 142, 142, 146, 150, - 149, 152, 156, 159, 158, 158, 157, 158, 154, 154, 152, 151, 151, 150, 147, 145, - 144, 149, 154, 152, 146, 141, 140, 141, 138, 138, 137, 107, 105, 109, 112, 110, - 119, 126, 119, 110, 119, 126, 125, 126, 129, 133, 133, 131, 137, 134, 132, 137, - 135, 131, 136, 137, 139, 142, 142, 140, 139, 139, 143, 142, 146, 147, 144, 144, - 149, 150, 146, 140, 142, 144, 146, 144, 144, 143, 145, 148, 146, 145, 147, 149, - 150, 149, 148, 150, 150, 150, 151, 151, 151, 152, 151, 143, 144, 145, 147, 148, - 148, 147, 147, 149, 152, 152, 149, 150, 153, 154, 152, 157, 156, 154, 154, 154, - 154, 153, 153, 151, 151, 150, 149, 146, 147, 149, 152, 152, 153, 152, 152, 156, - 160, 158, 152, 158, 158, 158, 158, 158, 159, 161, 162, 161, 162, 162, 161, 158, - 158, 161, 163, 161, 160, 160, 160, 160, 160, 161, 162, 173, 169, 165, 165, 166, - 166, 162, 157, 158, 157, 154, 152, 150, 151, 152, 153, 153, 153, 155, 155, 155, - 156, 156, 157, 160, 159, 159, 159, 160, 159, 158, 155, 160, 160, 156, 155, 154, - 156, 157, 159, 157, 158, 157, 157, 155, 154, 150, 148, 150, 142, 141, 144, 145, - 144, 148, 154, 151, 154, 158, 163, 166, 166, 161, 158, 161, 159, 156, 155, 155, - 155, 153, 150, 151, 152, 154, 154, 152, 151, 152, 153, 154, 155, 155, 103, 102, - 106, 104, 103, 113, 114, 98, 100, 114, 124, 122, 116, 118, 125, 131, 128, 131, - 126, 128, 140, 140, 135, 137, 140, 138, 135, 134, 134, 134, 133, 132, 135, 141, - 143, 140, 140, 146, 147, 143, 142, 145, 148, 149, 148, 146, 145, 145, 144, 143, - 144, 146, 150, 151, 151, 150, 146, 146, 146, 147, 147, 148, 149, 148, 148, 148, - 149, 150, 150, 148, 147, 146, 145, 150, 152, 150, 151, 153, 151, 148, 159, 159, - 159, 158, 157, 156, 156, 157, 156, 156, 155, 152, 150, 150, 152, 154, 150, 153, - 154, 152, 153, 158, 162, 161, 164, 160, 156, 157, 161, 163, 162, 159, 154, 156, - 157, 156, 154, 155, 158, 162, 160, 160, 159, 158, 157, 156, 156, 156, 166, 165, - 163, 166, 170, 170, 163, 157, 158, 157, 153, 151, 152, 154, 157, 159, 153, 155, - 157, 158, 159, 160, 160, 161, 156, 156, 156, 158, 159, 160, 158, 156, 158, 158, - 155, 153, 151, 151, 150, 151, 154, 156, 156, 157, 156, 155, 152, 150, 148, 142, - 142, 148, 149, 148, 151, 158, 145, 147, 151, 158, 163, 163, 156, 151, 147, 143, - 138, 136, 137, 138, 136, 134, 132, 129, 127, 128, 132, 136, 137, 137, 134, 139, - 142, 101, 103, 108, 116, 122, 124, 121, 118, 94, 122, 135, 121, 111, 120, 123, - 116, 127, 128, 130, 131, 131, 131, 131, 132, 135, 139, 137, 133, 131, 135, 134, - 129, 134, 138, 140, 139, 137, 136, 139, 142, 139, 142, 145, 146, 145, 145, 146, - 147, 146, 145, 144, 145, 146, 148, 150, 152, 148, 152, 152, 144, 143, 149, 152, - 151, 147, 144, 143, 147, 153, 155, 154, 151, 157, 151, 150, 155, 157, 153, 152, - 157, 156, 155, 153, 153, 152, 151, 149, 147, 156, 156, 155, 151, 149, 149, 153, - 159, 156, 156, 157, 157, 157, 155, 154, 153, 156, 157, 157, 158, 158, 157, 155, - 155, 155, 159, 162, 161, 156, 154, 157, 161, 158, 159, 160, 161, 161, 160, 158, - 157, 164, 165, 166, 167, 165, 164, 162, 160, 158, 157, 155, 155, 156, 159, 162, - 163, 159, 159, 157, 161, 163, 165, 161, 159, 163, 158, 153, 154, 157, 160, 157, - 154, 154, 154, 152, 153, 154, 156, 155, 156, 155, 157, 158, 159, 156, 152, 146, - 142, 147, 140, 144, 147, 141, 142, 151, 155, 156, 156, 146, 133, 128, 137, 145, - 150, 147, 145, 143, 141, 137, 134, 137, 142, 134, 134, 134, 134, 133, 133, 133, - 133, 133, 131, 130, 106, 106, 107, 110, 110, 108, 101, 95, 102, 118, 126, 120, - 117, 125, 126, 120, 124, 124, 126, 128, 129, 130, 129, 131, 121, 126, 128, 126, - 128, 134, 135, 132, 128, 130, 132, 132, 133, 134, 137, 139, 137, 137, 139, 139, - 138, 140, 144, 145, 145, 144, 144, 143, 144, 144, 145, 146, 148, 152, 152, 147, - 144, 147, 147, 144, 146, 147, 149, 150, 151, 152, 153, 154, 156, 151, 150, 154, - 156, 153, 152, 155, 155, 154, 152, 152, 152, 153, 152, 152, 153, 155, 155, 153, - 151, 151, 154, 158, 153, 153, 154, 154, 153, 151, 150, 149, 157, 157, 157, 157, - 157, 156, 154, 153, 151, 157, 162, 162, 158, 155, 155, 157, 152, 153, 154, 156, - 156, 157, 157, 157, 160, 161, 162, 163, 163, 163, 161, 160, 157, 155, 154, 153, - 154, 156, 157, 160, 161, 161, 159, 160, 162, 164, 160, 159, 157, 155, 153, 156, - 161, 162, 159, 154, 154, 155, 156, 153, 149, 148, 150, 153, 152, 154, 156, 158, - 158, 156, 154, 152, 159, 151, 153, 154, 146, 145, 152, 154, 140, 146, 155, 156, - 145, 133, 135, 146, 144, 139, 138, 142, 147, 145, 138, 131, 133, 133, 132, 131, - 130, 129, 128, 128, 132, 132, 133, 120, 121, 122, 124, 124, 123, 118, 114, 116, - 119, 119, 120, 123, 128, 125, 121, 128, 128, 129, 131, 131, 131, 130, 131, 123, - 126, 128, 127, 127, 130, 128, 125, 130, 129, 128, 129, 132, 134, 134, 134, 140, - 140, 140, 140, 140, 142, 147, 150, 149, 149, 148, 147, 147, 148, 148, 148, 147, - 152, 154, 152, 149, 150, 149, 146, 147, 151, 154, 153, 150, 150, 153, 157, 153, - 149, 147, 151, 152, 150, 149, 150, 154, 154, 151, 150, 149, 149, 150, 151, 150, - 152, 155, 154, 152, 150, 149, 150, 148, 149, 150, 151, 152, 152, 150, 150, 156, - 156, 157, 157, 156, 155, 154, 153, 152, 158, 164, 165, 162, 159, 157, 158, 157, - 157, 157, 157, 157, 158, 159, 160, 158, 158, 159, 161, 161, 161, 160, 160, 162, - 161, 158, 157, 157, 158, 160, 162, 167, 166, 163, 164, 164, 165, 164, 162, 163, - 163, 162, 164, 166, 165, 160, 155, 155, 159, 161, 156, 149, 146, 149, 154, 148, - 149, 151, 152, 153, 153, 153, 153, 157, 148, 150, 151, 143, 141, 147, 147, 152, - 144, 146, 156, 151, 137, 139, 156, 158, 152, 146, 143, 145, 145, 142, 138, 142, - 141, 140, 139, 137, 136, 134, 134, 125, 127, 129, 117, 119, 121, 124, 128, 127, - 126, 125, 128, 123, 120, 123, 127, 124, 122, 121, 130, 130, 130, 130, 129, 128, - 127, 126, 128, 129, 130, 129, 128, 126, 123, 121, 132, 129, 126, 127, 131, 133, - 131, 129, 144, 145, 146, 145, 145, 145, 148, 150, 149, 149, 149, 149, 150, 150, - 150, 150, 147, 151, 153, 153, 151, 152, 154, 154, 150, 151, 152, 151, 149, 149, - 151, 154, 153, 150, 149, 150, 151, 151, 149, 149, 154, 153, 151, 147, 145, 145, - 146, 148, 150, 151, 153, 154, 151, 147, 143, 142, 145, 146, 148, 150, 152, 154, - 155, 155, 154, 154, 155, 155, 156, 156, 156, 156, 154, 157, 161, 162, 160, 158, - 158, 158, 163, 162, 160, 159, 158, 159, 160, 161, 159, 160, 160, 159, 160, 159, - 159, 159, 164, 163, 162, 161, 160, 160, 161, 162, 165, 165, 163, 162, 162, 163, - 164, 165, 164, 164, 163, 164, 165, 165, 163, 159, 161, 162, 162, 159, 154, 153, - 153, 157, 152, 152, 150, 150, 148, 149, 148, 149, 160, 151, 154, 157, 151, 151, - 158, 156, 161, 141, 129, 138, 149, 150, 150, 153, 148, 153, 154, 149, 143, 144, - 146, 148, 149, 149, 148, 148, 146, 146, 144, 144, 144, 146, 145, 123, 125, 125, - 125, 124, 123, 122, 122, 130, 124, 124, 127, 126, 121, 122, 127, 123, 124, 125, - 125, 125, 125, 124, 123, 123, 124, 125, 128, 128, 128, 126, 126, 128, 126, 124, - 126, 130, 133, 132, 130, 143, 145, 148, 149, 147, 145, 145, 145, 142, 143, 144, - 146, 147, 148, 148, 149, 151, 151, 151, 150, 149, 150, 154, 157, 153, 150, 147, - 148, 150, 152, 151, 150, 157, 156, 155, 154, 155, 156, 155, 151, 150, 149, 151, - 149, 147, 147, 150, 153, 148, 150, 152, 154, 153, 151, 147, 143, 147, 148, 148, - 150, 151, 153, 153, 154, 151, 151, 152, 154, 155, 157, 157, 159, 154, 155, 155, - 154, 154, 155, 156, 158, 159, 158, 157, 156, 156, 158, 159, 160, 163, 162, 162, - 159, 159, 157, 158, 157, 160, 159, 159, 158, 157, 157, 157, 156, 157, 156, 155, - 155, 155, 158, 160, 163, 157, 155, 154, 155, 158, 163, 166, 167, 163, 160, 156, - 157, 159, 161, 158, 157, 158, 158, 155, 154, 151, 152, 150, 152, 153, 144, 148, - 154, 150, 150, 156, 154, 143, 135, 127, 130, 143, 153, 149, 141, 127, 136, 144, - 148, 149, 153, 149, 143, 147, 148, 147, 148, 147, 148, 147, 148, 150, 152, 151, - 127, 130, 130, 130, 127, 127, 127, 128, 123, 124, 127, 128, 127, 124, 127, 132, - 121, 123, 125, 127, 128, 129, 129, 130, 131, 129, 128, 130, 130, 127, 127, 129, - 128, 128, 128, 131, 134, 138, 140, 139, 142, 147, 150, 153, 151, 148, 147, 145, - 144, 145, 147, 149, 150, 151, 151, 151, 156, 152, 150, 149, 146, 143, 147, 152, - 153, 149, 145, 145, 150, 152, 151, 148, 153, 153, 152, 149, 150, 152, 151, 145, - 145, 148, 152, 152, 153, 153, 157, 161, 150, 150, 150, 153, 155, 156, 155, 153, - 152, 151, 150, 149, 148, 148, 147, 148, 151, 151, 151, 153, 154, 157, 158, 160, - 159, 158, 157, 156, 156, 159, 161, 163, 156, 156, 157, 158, 159, 161, 163, 165, - 166, 164, 162, 159, 158, 156, 155, 156, 157, 158, 157, 157, 158, 157, 157, 155, - 153, 154, 155, 156, 156, 158, 160, 163, 165, 164, 158, 156, 155, 157, 160, 162, - 158, 153, 148, 151, 156, 160, 156, 153, 152, 152, 150, 151, 150, 151, 150, 152, - 151, 140, 144, 149, 144, 144, 147, 144, 137, 142, 139, 127, 125, 137, 150, 154, - 150, 144, 133, 131, 140, 153, 150, 140, 144, 145, 145, 146, 146, 148, 147, 148, - 142, 142, 141, 114, 118, 118, 119, 117, 119, 122, 126, 121, 124, 127, 127, 126, - 129, 129, 130, 128, 129, 130, 132, 133, 133, 133, 133, 131, 125, 123, 125, 124, - 121, 121, 126, 129, 130, 131, 132, 132, 133, 135, 137, 142, 145, 148, 151, 150, - 149, 149, 150, 150, 152, 153, 155, 156, 156, 155, 154, 158, 154, 153, 153, 150, - 144, 145, 150, 152, 149, 147, 147, 148, 151, 152, 153, 148, 150, 148, 144, 145, - 148, 147, 140, 143, 148, 153, 155, 154, 153, 155, 158, 154, 152, 150, 150, 153, - 155, 154, 153, 154, 152, 151, 150, 149, 150, 150, 151, 153, 153, 152, 152, 153, - 155, 155, 158, 161, 160, 159, 159, 161, 163, 164, 164, 159, 159, 160, 160, 161, - 160, 160, 161, 163, 161, 159, 156, 155, 154, 155, 156, 156, 157, 157, 158, 158, - 157, 158, 155, 151, 153, 155, 156, 154, 154, 155, 158, 167, 165, 161, 157, 151, - 150, 149, 150, 152, 150, 146, 148, 151, 154, 152, 151, 143, 145, 144, 146, 146, - 147, 146, 147, 157, 147, 148, 153, 148, 148, 150, 146, 144, 143, 139, 128, 119, - 122, 141, 158, 158, 156, 144, 131, 131, 144, 147, 144, 145, 146, 145, 146, 146, - 147, 146, 146, 148, 146, 144, 120, 123, 124, 121, 118, 117, 120, 124, 124, 128, - 129, 126, 127, 132, 129, 122, 132, 133, 133, 132, 130, 128, 126, 126, 110, 105, - 105, 110, 114, 113, 118, 126, 127, 127, 128, 125, 120, 119, 120, 122, 135, 136, - 140, 143, 143, 145, 148, 150, 151, 153, 154, 155, 155, 154, 152, 151, 156, 154, - 156, 160, 156, 150, 149, 153, 149, 150, 151, 149, 146, 147, 152, 157, 151, 153, - 151, 147, 147, 151, 150, 143, 146, 151, 156, 155, 151, 147, 146, 147, 158, 153, - 148, 145, 146, 147, 146, 146, 152, 151, 151, 152, 154, 156, 159, 160, 157, 155, - 154, 154, 153, 154, 155, 156, 153, 154, 155, 157, 159, 160, 158, 157, 161, 162, - 161, 160, 157, 154, 150, 148, 159, 159, 157, 155, 153, 154, 156, 156, 150, 151, - 152, 153, 153, 154, 153, 150, 144, 146, 150, 150, 147, 146, 146, 148, 146, 148, - 149, 148, 147, 147, 148, 150, 149, 150, 150, 149, 148, 148, 150, 151, 145, 146, - 147, 148, 148, 148, 146, 146, 142, 131, 132, 138, 135, 135, 136, 131, 136, 127, - 130, 138, 135, 122, 121, 132, 117, 142, 160, 154, 140, 138, 141, 143, 144, 144, - 143, 143, 142, 142, 140, 140, 144, 141, 139, 130, 124, 122, 125, 125, 120, 117, - 120, 130, 124, 124, 132, 136, 131, 127, 127, 125, 119, 131, 122, 120, 114, 96, - 117, 109, 110, 110, 109, 107, 106, 107, 108, 120, 114, 115, 122, 123, 117, 119, - 127, 128, 121, 122, 134, 144, 145, 146, 148, 147, 150, 153, 153, 151, 151, 155, - 158, 162, 161, 159, 156, 155, 155, 155, 155, 150, 149, 150, 150, 150, 150, 151, - 151, 144, 143, 143, 147, 151, 152, 149, 146, 154, 155, 155, 154, 154, 156, 156, - 157, 150, 153, 155, 152, 148, 147, 151, 158, 162, 160, 156, 153, 151, 152, 155, - 157, 151, 153, 157, 159, 160, 160, 159, 158, 151, 153, 155, 155, 155, 156, 159, - 162, 159, 156, 153, 153, 155, 156, 154, 152, 153, 151, 152, 155, 154, 151, 150, - 153, 149, 149, 150, 151, 153, 153, 151, 149, 150, 153, 153, 149, 151, 156, 157, - 155, 159, 153, 150, 151, 151, 146, 147, 153, 148, 149, 149, 149, 148, 146, 143, - 142, 144, 142, 140, 139, 139, 140, 142, 143, 140, 150, 132, 122, 133, 104, 128, - 144, 139, 148, 149, 141, 136, 133, 120, 100, 100, 111, 140, 171, 152, 147, 123, - 144, 139, 136, 141, 150, 151, 143, 141, 145, 146, 146, 146, 26, 28, 28, 27, - 25, 24, 24, 24, 24, 24, 24, 25, 25, 24, 26, 26, 27, 35, 33, 31, - 37, 33, 27, 31, 30, 31, 33, 37, 38, 38, 38, 35, 37, 35, 37, 35, - 37, 35, 37, 35, 34, 33, 36, 35, 38, 37, 39, 39, 38, 42, 42, 39, - 40, 43, 43, 41, 43, 42, 42, 41, 41, 42, 42, 43, 42, 42, 42, 43, - 43, 44, 44, 44, 43, 44, 45, 46, 46, 46, 46, 45, 45, 45, 47, 48, - 48, 49, 49, 49, 49, 49, 49, 50, 50, 51, 51, 51, 51, 51, 51, 52, - 52, 53, 53, 53, 56, 55, 54, 53, 54, 55, 57, 58, 54, 58, 54, 51, - 58, 56, 54, 59, 58, 58, 61, 60, 59, 58, 61, 62, 58, 59, 60, 61, - 61, 61, 61, 60, 55, 62, 60, 57, 62, 60, 57, 66, 63, 61, 62, 59, - 62, 62, 67, 66, 68, 68, 66, 72, 70, 62, 66, 46, 0, 16, 54, 62, - 86, 85, 101, 97, 91, 86, 75, 76, 89, 90, 86, 90, 91, 86, 86, 89, - 89, 87, 88, 91, 92, 91, 89, 89, 91, 91, 89, 88, 90, 91, 91, 91, - 91, 90, 89, 88, 92, 92, 92, 91, 91, 90, 90, 90, 92, 91, 91, 27, - 27, 27, 26, 26, 25, 25, 25, 21, 22, 24, 25, 26, 25, 27, 26, 31, - 32, 32, 31, 30, 31, 35, 38, 34, 35, 37, 38, 37, 36, 38, 39, 39, - 37, 40, 37, 38, 34, 33, 30, 37, 35, 37, 35, 37, 36, 40, 40, 40, - 40, 40, 41, 41, 42, 42, 42, 44, 43, 43, 42, 42, 43, 43, 44, 41, - 43, 45, 44, 43, 42, 42, 43, 44, 47, 48, 45, 45, 48, 47, 42, 43, - 41, 43, 44, 44, 45, 45, 45, 49, 49, 50, 51, 51, 52, 52, 52, 52, - 56, 56, 53, 54, 57, 57, 55, 54, 54, 54, 55, 55, 56, 56, 56, 55, - 55, 59, 57, 58, 55, 58, 57, 56, 58, 60, 55, 58, 59, 61, 59, 63, - 61, 59, 60, 64, 65, 63, 61, 64, 63, 61, 60, 60, 61, 63, 64, 60, - 63, 65, 60, 62, 63, 65, 60, 70, 63, 67, 64, 72, 53, 64, 42, 0, - 19, 53, 60, 89, 87, 95, 96, 92, 91, 80, 79, 90, 90, 84, 86, 86, - 84, 84, 87, 88, 85, 85, 89, 90, 90, 90, 90, 90, 90, 90, 90, 89, - 91, 93, 93, 91, 90, 90, 91, 93, 93, 91, 90, 90, 90, 90, 90, 90, - 97, 94, 26, 26, 25, 25, 25, 24, 24, 24, 25, 25, 26, 27, 28, 28, - 29, 30, 31, 32, 32, 31, 30, 31, 35, 38, 32, 33, 36, 36, 36, 36, - 38, 37, 37, 37, 38, 38, 38, 37, 36, 36, 40, 39, 38, 37, 37, 37, - 38, 38, 40, 40, 40, 41, 41, 42, 42, 42, 44, 43, 43, 42, 42, 43, - 43, 44, 42, 43, 45, 45, 44, 42, 43, 44, 44, 48, 48, 45, 45, 48, - 47, 41, 43, 41, 42, 42, 44, 45, 45, 45, 49, 49, 50, 51, 51, 52, - 52, 52, 52, 56, 56, 53, 54, 57, 57, 55, 54, 54, 55, 55, 55, 56, - 56, 56, 55, 58, 60, 60, 59, 58, 59, 60, 57, 60, 60, 57, 58, 61, - 62, 59, 62, 61, 60, 61, 63, 64, 63, 62, 63, 63, 62, 61, 61, 62, - 63, 63, 62, 65, 65, 62, 62, 65, 65, 62, 67, 63, 65, 63, 70, 54, - 63, 42, 0, 22, 53, 60, 87, 85, 93, 96, 90, 90, 81, 81, 90, 92, - 84, 87, 88, 85, 85, 89, 89, 86, 87, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 89, 91, 93, 93, 91, 90, 90, 91, 93, 92, 91, 90, 90, 90, - 90, 91, 90, 97, 94, 25, 24, 24, 24, 24, 23, 23, 23, 27, 27, 26, - 26, 26, 28, 30, 31, 29, 30, 32, 32, 31, 31, 35, 37, 32, 34, 36, - 36, 35, 34, 36, 37, 36, 36, 36, 36, 37, 37, 38, 39, 41, 40, 39, - 38, 37, 37, 37, 37, 40, 40, 40, 41, 41, 42, 42, 42, 44, 43, 43, - 42, 42, 43, 43, 44, 42, 44, 46, 46, 44, 43, 44, 45, 45, 48, 49, - 46, 45, 47, 46, 40, 43, 42, 42, 42, 45, 45, 45, 45, 49, 49, 50, - 51, 51, 52, 52, 52, 52, 56, 56, 53, 54, 57, 57, 55, 54, 55, 55, - 55, 56, 56, 56, 56, 56, 59, 61, 61, 60, 59, 60, 61, 57, 60, 60, - 58, 58, 61, 62, 59, 60, 61, 63, 62, 62, 61, 63, 64, 63, 63, 62, - 62, 62, 62, 63, 63, 63, 66, 66, 63, 63, 66, 66, 63, 65, 62, 64, - 62, 70, 56, 64, 41, 0, 22, 54, 61, 87, 85, 93, 96, 88, 89, 80, - 80, 91, 93, 86, 88, 89, 86, 86, 90, 90, 87, 88, 91, 90, 90, 90, - 90, 90, 90, 90, 90, 89, 91, 93, 93, 91, 90, 90, 91, 93, 92, 91, - 90, 90, 90, 91, 91, 90, 97, 94, 25, 25, 24, 24, 24, 24, 24, 24, - 27, 26, 24, 23, 23, 25, 28, 30, 28, 30, 33, 32, 31, 31, 35, 37, - 35, 36, 39, 38, 37, 37, 39, 40, 38, 37, 36, 35, 35, 37, 39, 40, - 40, 40, 39, 38, 38, 38, 39, 39, 40, 40, 40, 41, 41, 42, 42, 42, - 44, 43, 43, 42, 42, 43, 43, 44, 43, 45, 47, 47, 45, 44, 45, 46, - 46, 49, 49, 46, 45, 47, 46, 40, 44, 42, 42, 43, 45, 45, 46, 46, - 49, 49, 50, 51, 51, 52, 52, 52, 52, 56, 56, 53, 54, 57, 57, 55, - 55, 55, 55, 56, 56, 56, 57, 57, 57, 59, 61, 62, 60, 60, 60, 62, - 57, 60, 61, 58, 58, 62, 62, 59, 59, 62, 64, 63, 61, 60, 62, 65, - 63, 63, 63, 62, 62, 63, 63, 63, 62, 65, 65, 62, 62, 65, 65, 62, - 64, 62, 63, 61, 70, 57, 65, 39, 0, 23, 55, 61, 87, 85, 93, 96, - 89, 90, 81, 80, 90, 92, 85, 87, 88, 85, 86, 89, 89, 87, 87, 90, - 91, 91, 90, 90, 90, 90, 89, 89, 89, 91, 93, 93, 91, 90, 90, 91, - 92, 92, 91, 90, 90, 90, 91, 92, 90, 97, 94, 25, 25, 26, 26, 26, - 26, 26, 26, 28, 27, 25, 23, 24, 25, 28, 29, 27, 29, 31, 31, 32, - 31, 32, 34, 35, 37, 38, 38, 38, 38, 39, 41, 40, 39, 37, 35, 35, - 36, 37, 38, 37, 37, 37, 38, 39, 40, 42, 43, 40, 40, 40, 41, 41, - 42, 42, 42, 44, 43, 43, 42, 42, 43, 43, 44, 43, 45, 47, 47, 45, - 44, 45, 46, 45, 48, 49, 46, 45, 47, 46, 40, 44, 42, 43, 43, 45, - 46, 46, 46, 49, 49, 50, 51, 51, 52, 52, 52, 52, 56, 56, 53, 54, - 57, 57, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57, 59, 61, 62, 60, - 60, 60, 62, 58, 61, 61, 59, 59, 62, 63, 60, 59, 62, 64, 63, 61, - 60, 62, 65, 63, 63, 63, 64, 64, 63, 63, 63, 61, 64, 64, 61, 61, - 64, 64, 61, 63, 62, 64, 60, 70, 59, 64, 36, 0, 24, 55, 62, 88, - 85, 92, 96, 91, 92, 82, 81, 90, 91, 83, 85, 87, 84, 84, 88, 88, - 85, 86, 89, 91, 91, 91, 90, 90, 89, 89, 89, 89, 91, 93, 93, 91, - 90, 90, 91, 92, 91, 90, 90, 90, 91, 92, 92, 90, 97, 94, 25, 26, - 26, 26, 26, 27, 27, 27, 30, 29, 28, 27, 27, 28, 30, 30, 27, 29, - 31, 31, 32, 32, 32, 33, 33, 35, 36, 36, 36, 36, 37, 39, 39, 38, - 37, 37, 36, 36, 36, 36, 36, 37, 37, 38, 40, 42, 43, 44, 40, 40, - 40, 41, 41, 42, 42, 42, 44, 43, 43, 42, 42, 43, 43, 44, 42, 44, - 46, 46, 44, 43, 44, 45, 44, 47, 48, 45, 45, 48, 47, 42, 45, 43, - 43, 43, 46, 46, 46, 47, 49, 49, 50, 51, 51, 52, 52, 52, 52, 56, - 56, 53, 54, 57, 57, 55, 56, 56, 56, 56, 57, 57, 57, 58, 56, 59, - 61, 61, 60, 59, 60, 61, 58, 61, 62, 59, 59, 63, 63, 60, 60, 61, - 63, 62, 62, 61, 63, 64, 63, 63, 64, 64, 64, 64, 63, 63, 60, 63, - 63, 60, 60, 63, 63, 60, 64, 63, 64, 59, 69, 59, 64, 32, 0, 25, - 56, 62, 88, 85, 92, 96, 92, 92, 83, 81, 90, 90, 82, 84, 86, 83, - 84, 87, 87, 85, 85, 88, 92, 92, 91, 90, 90, 89, 88, 88, 89, 91, - 93, 93, 91, 90, 90, 91, 91, 91, 90, 90, 90, 91, 92, 93, 90, 97, - 94, 24, 24, 25, 25, 25, 26, 26, 26, 29, 29, 29, 29, 29, 29, 29, - 29, 24, 27, 31, 32, 31, 30, 32, 33, 32, 33, 37, 36, 35, 35, 36, - 38, 36, 36, 37, 38, 38, 38, 37, 37, 38, 38, 38, 39, 40, 41, 42, - 43, 40, 40, 40, 41, 41, 42, 42, 42, 44, 43, 43, 42, 42, 43, 43, - 44, 42, 43, 45, 45, 44, 42, 43, 44, 42, 46, 47, 45, 46, 49, 49, - 44, 45, 43, 43, 44, 46, 46, 47, 47, 49, 49, 50, 51, 51, 52, 52, - 52, 52, 56, 56, 53, 54, 57, 57, 55, 56, 56, 56, 57, 57, 57, 58, - 58, 55, 58, 60, 60, 59, 58, 59, 60, 58, 61, 62, 59, 60, 63, 63, - 60, 62, 61, 60, 61, 63, 64, 63, 62, 63, 63, 64, 65, 65, 64, 63, - 63, 61, 64, 64, 61, 61, 64, 64, 61, 65, 65, 65, 58, 69, 60, 62, - 28, 0, 26, 57, 63, 88, 85, 92, 95, 91, 91, 82, 81, 90, 91, 83, - 86, 87, 84, 85, 88, 88, 86, 86, 89, 92, 92, 91, 90, 90, 89, 88, - 88, 89, 91, 93, 93, 91, 90, 90, 91, 91, 90, 90, 90, 90, 91, 92, - 93, 90, 97, 94, 23, 23, 23, 24, 24, 25, 25, 25, 26, 27, 27, 28, - 28, 27, 26, 26, 24, 27, 31, 32, 31, 30, 32, 33, 34, 36, 39, 39, - 38, 37, 39, 40, 32, 33, 36, 38, 39, 40, 39, 39, 40, 40, 39, 39, - 39, 40, 41, 41, 40, 40, 40, 41, 41, 42, 42, 42, 44, 43, 43, 42, - 42, 43, 43, 44, 41, 43, 45, 44, 43, 42, 42, 43, 41, 45, 46, 45, - 46, 50, 50, 45, 45, 43, 43, 44, 46, 47, 47, 47, 49, 49, 50, 51, - 51, 52, 52, 52, 52, 56, 56, 53, 54, 57, 57, 55, 56, 56, 56, 57, - 57, 58, 58, 58, 55, 57, 59, 59, 58, 57, 58, 59, 58, 62, 62, 59, - 60, 63, 63, 61, 63, 61, 59, 60, 64, 65, 63, 61, 62, 63, 65, 66, - 66, 65, 63, 62, 63, 66, 66, 63, 63, 66, 66, 63, 65, 66, 66, 58, - 69, 60, 62, 26, 0, 26, 57, 63, 88, 85, 92, 95, 88, 89, 80, 80, - 90, 92, 85, 88, 88, 86, 86, 89, 90, 87, 87, 91, 92, 92, 91, 90, - 90, 89, 88, 88, 89, 91, 93, 93, 91, 90, 90, 91, 90, 90, 90, 90, - 90, 91, 93, 93, 90, 97, 94, 27, 27, 28, 28, 28, 27, 26, 26, 28, - 27, 26, 27, 29, 30, 29, 28, 28, 28, 28, 28, 28, 28, 30, 30, 34, - 35, 35, 36, 38, 37, 37, 36, 38, 35, 35, 38, 38, 35, 35, 38, 41, - 40, 40, 40, 40, 41, 42, 43, 45, 44, 42, 40, 39, 39, 40, 40, 43, - 44, 45, 46, 46, 44, 43, 42, 44, 43, 43, 43, 43, 44, 45, 46, 50, - 49, 47, 46, 45, 45, 46, 45, 46, 44, 44, 45, 47, 48, 48, 48, 50, - 50, 52, 52, 52, 53, 53, 53, 57, 56, 55, 55, 57, 57, 56, 55, 61, - 55, 58, 60, 54, 57, 62, 57, 59, 59, 59, 60, 60, 61, 61, 61, 62, - 61, 61, 61, 61, 61, 60, 60, 66, 65, 63, 63, 63, 63, 65, 66, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 66, 65, 61, 61, 65, 66, 64, 71, - 63, 68, 65, 67, 56, 61, 22, 0, 29, 60, 63, 89, 89, 96, 97, 96, - 87, 82, 86, 89, 90, 86, 86, 88, 86, 87, 89, 88, 84, 85, 89, 93, - 92, 90, 88, 86, 85, 85, 84, 89, 93, 94, 91, 91, 93, 91, 87, 96, - 94, 90, 87, 87, 89, 92, 94, 89, 98, 96, 27, 27, 27, 28, 27, 27, - 27, 26, 28, 27, 26, 27, 29, 30, 29, 28, 28, 28, 28, 28, 28, 28, - 30, 30, 34, 35, 35, 36, 38, 37, 37, 36, 39, 36, 36, 39, 39, 36, - 36, 39, 41, 40, 40, 40, 40, 41, 42, 43, 40, 40, 40, 40, 41, 42, - 43, 44, 43, 44, 44, 45, 45, 44, 44, 43, 44, 44, 43, 43, 44, 44, - 45, 46, 48, 47, 46, 46, 46, 47, 48, 47, 46, 44, 44, 45, 47, 48, - 48, 48, 50, 50, 51, 51, 52, 52, 52, 53, 56, 55, 53, 54, 56, 56, - 55, 54, 60, 54, 58, 60, 54, 57, 61, 56, 59, 59, 59, 60, 60, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 63, 62, 61, 61, 61, 61, - 62, 63, 64, 64, 64, 64, 64, 64, 64, 64, 63, 66, 65, 62, 62, 65, - 66, 63, 67, 61, 66, 63, 68, 58, 63, 24, 0, 29, 60, 63, 89, 89, - 96, 97, 96, 87, 82, 86, 89, 90, 86, 86, 88, 86, 87, 89, 88, 84, - 85, 90, 91, 91, 90, 89, 88, 88, 89, 89, 90, 93, 93, 90, 90, 92, - 91, 88, 95, 93, 90, 88, 88, 89, 91, 93, 93, 97, 93, 27, 27, 27, - 27, 27, 27, 27, 27, 28, 27, 26, 27, 29, 30, 29, 28, 28, 26, 26, - 26, 28, 29, 29, 29, 32, 33, 35, 36, 36, 35, 35, 34, 39, 36, 36, - 39, 39, 36, 36, 39, 41, 40, 40, 40, 40, 41, 42, 43, 39, 39, 40, - 42, 43, 43, 43, 43, 44, 44, 44, 43, 43, 44, 44, 45, 44, 44, 43, - 43, 44, 45, 46, 46, 46, 46, 45, 46, 47, 48, 49, 48, 46, 44, 44, - 45, 47, 48, 48, 48, 49, 49, 50, 51, 51, 52, 52, 52, 55, 54, 53, - 53, 55, 56, 54, 53, 60, 54, 57, 59, 53, 56, 61, 56, 59, 59, 59, - 60, 60, 61, 61, 61, 60, 60, 60, 61, 62, 62, 63, 63, 63, 62, 62, - 61, 61, 62, 62, 63, 64, 64, 64, 64, 64, 64, 64, 64, 62, 65, 66, - 63, 63, 66, 65, 62, 64, 59, 64, 62, 68, 61, 66, 24, 0, 30, 61, - 64, 89, 89, 96, 96, 96, 87, 82, 86, 89, 90, 86, 86, 88, 86, 87, - 90, 88, 85, 86, 90, 89, 89, 89, 89, 90, 91, 92, 93, 91, 94, 93, - 89, 89, 92, 92, 89, 93, 92, 91, 90, 90, 90, 91, 91, 95, 97, 90, - 27, 27, 26, 26, 27, 27, 28, 28, 28, 27, 26, 27, 29, 30, 29, 26, - 28, 26, 26, 27, 29, 29, 29, 30, 32, 33, 35, 36, 36, 35, 35, 34, - 39, 36, 36, 39, 39, 36, 36, 39, 41, 40, 40, 40, 40, 41, 42, 43, - 41, 42, 43, 44, 43, 42, 40, 39, 45, 44, 43, 42, 42, 44, 45, 46, - 45, 44, 44, 44, 44, 45, 46, 47, 46, 46, 46, 46, 47, 48, 48, 47, - 46, 44, 44, 45, 47, 48, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, - 56, 55, 54, 54, 56, 56, 55, 54, 59, 54, 57, 59, 53, 56, 60, 56, - 59, 59, 59, 60, 60, 61, 61, 61, 59, 60, 60, 61, 62, 63, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, - 61, 65, 66, 64, 64, 66, 65, 61, 63, 59, 64, 61, 68, 62, 66, 21, - 0, 30, 61, 64, 90, 89, 96, 96, 96, 87, 82, 86, 89, 90, 86, 86, - 87, 86, 87, 90, 89, 85, 87, 91, 89, 89, 88, 89, 89, 90, 92, 92, - 92, 94, 92, 88, 88, 91, 92, 90, 91, 92, 92, 92, 91, 91, 90, 89, - 94, 97, 91, 27, 26, 26, 26, 26, 27, 29, 29, 28, 27, 26, 27, 29, - 30, 29, 26, 28, 26, 26, 27, 27, 28, 30, 31, 32, 33, 33, 34, 36, - 35, 35, 34, 40, 37, 37, 40, 40, 37, 37, 40, 41, 40, 40, 40, 40, - 41, 42, 43, 41, 42, 43, 44, 44, 43, 41, 40, 44, 44, 43, 42, 43, - 44, 46, 47, 45, 45, 44, 44, 45, 45, 46, 47, 48, 48, 48, 48, 47, - 46, 46, 43, 46, 44, 44, 45, 47, 48, 48, 48, 49, 49, 50, 51, 51, - 52, 52, 52, 58, 57, 56, 56, 58, 58, 57, 56, 60, 54, 57, 59, 53, - 56, 61, 56, 59, 59, 59, 60, 60, 61, 61, 61, 60, 60, 61, 62, 63, - 64, 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, - 65, 65, 65, 61, 65, 66, 64, 64, 66, 65, 61, 65, 62, 66, 60, 67, - 62, 63, 16, 0, 31, 62, 65, 90, 89, 96, 96, 96, 87, 82, 86, 89, - 90, 86, 86, 87, 86, 87, 90, 89, 86, 88, 92, 90, 89, 88, 88, 87, - 88, 88, 88, 92, 94, 92, 88, 88, 91, 92, 90, 91, 91, 92, 92, 92, - 91, 90, 89, 90, 98, 95, 27, 26, 25, 25, 26, 27, 29, 31, 28, 27, - 26, 27, 29, 30, 29, 26, 28, 26, 27, 27, 28, 29, 31, 31, 32, 33, - 33, 34, 36, 35, 35, 34, 40, 37, 37, 40, 40, 37, 37, 40, 41, 40, - 40, 40, 40, 41, 42, 43, 38, 39, 41, 43, 44, 45, 46, 46, 43, 43, - 43, 43, 44, 45, 46, 47, 45, 45, 45, 45, 45, 46, 47, 47, 48, 48, - 49, 48, 47, 46, 45, 42, 46, 44, 44, 45, 47, 48, 48, 48, 50, 50, - 52, 52, 52, 53, 53, 53, 59, 58, 56, 57, 59, 59, 58, 57, 61, 55, - 58, 60, 54, 57, 62, 57, 59, 59, 59, 60, 60, 61, 61, 61, 61, 61, - 62, 62, 63, 64, 64, 64, 61, 62, 62, 63, 63, 62, 62, 61, 66, 66, - 66, 66, 66, 66, 66, 66, 62, 65, 66, 63, 63, 66, 65, 62, 66, 64, - 67, 60, 67, 62, 62, 11, 0, 32, 63, 65, 90, 89, 96, 96, 96, 87, - 82, 86, 89, 90, 86, 86, 87, 86, 87, 91, 90, 87, 88, 93, 91, 90, - 89, 87, 86, 86, 86, 86, 91, 94, 93, 89, 89, 92, 92, 89, 91, 92, - 92, 92, 92, 91, 90, 89, 89, 98, 97, 27, 26, 25, 24, 25, 27, 30, - 31, 28, 27, 26, 27, 29, 30, 29, 26, 28, 26, 27, 27, 28, 29, 32, - 32, 30, 31, 33, 34, 34, 33, 35, 34, 40, 37, 37, 40, 40, 37, 37, - 40, 41, 40, 40, 40, 40, 41, 42, 43, 39, 40, 40, 41, 43, 45, 47, - 48, 41, 42, 43, 44, 45, 46, 46, 46, 46, 45, 45, 45, 45, 46, 47, - 48, 46, 47, 48, 48, 48, 47, 46, 43, 46, 44, 44, 45, 47, 48, 48, - 48, 51, 51, 53, 53, 54, 54, 54, 54, 58, 57, 56, 56, 58, 59, 57, - 56, 62, 56, 60, 61, 56, 58, 63, 58, 59, 59, 59, 60, 60, 61, 61, - 61, 62, 63, 63, 63, 63, 63, 63, 63, 61, 61, 62, 63, 63, 62, 61, - 61, 66, 66, 66, 66, 66, 66, 66, 66, 63, 66, 65, 62, 62, 65, 66, - 63, 66, 64, 67, 59, 67, 63, 62, 9, 0, 33, 63, 66, 90, 89, 96, - 96, 96, 87, 82, 86, 89, 90, 86, 86, 87, 86, 87, 91, 90, 87, 89, - 94, 92, 91, 90, 88, 88, 87, 87, 87, 90, 93, 93, 90, 90, 92, 91, - 88, 92, 92, 92, 91, 91, 90, 90, 90, 91, 98, 94, 27, 26, 25, 24, - 25, 27, 30, 32, 28, 27, 26, 27, 29, 30, 29, 28, 28, 26, 27, 28, - 29, 29, 32, 33, 30, 31, 33, 34, 34, 33, 33, 34, 39, 38, 38, 41, - 41, 38, 38, 41, 41, 40, 40, 40, 40, 41, 42, 43, 44, 43, 42, 41, - 41, 43, 44, 45, 40, 41, 43, 45, 46, 46, 45, 45, 46, 45, 45, 45, - 45, 46, 47, 48, 44, 45, 47, 48, 49, 49, 48, 47, 46, 44, 44, 45, - 47, 48, 48, 48, 52, 52, 54, 54, 54, 55, 55, 55, 57, 56, 55, 55, - 57, 57, 56, 55, 63, 57, 61, 62, 56, 59, 64, 57, 57, 57, 57, 58, - 58, 59, 59, 59, 62, 64, 63, 63, 63, 63, 63, 62, 63, 63, 65, 66, - 66, 65, 63, 63, 66, 66, 66, 66, 66, 66, 68, 66, 64, 66, 65, 61, - 61, 65, 66, 64, 64, 63, 66, 58, 69, 67, 65, 9, 0, 33, 64, 64, - 90, 87, 96, 94, 96, 86, 82, 86, 89, 90, 88, 88, 87, 86, 88, 91, - 90, 88, 89, 94, 92, 91, 90, 89, 89, 89, 90, 90, 89, 93, 94, 91, - 91, 93, 91, 87, 93, 92, 91, 90, 90, 90, 91, 91, 93, 95, 90, 27, - 27, 27, 28, 28, 29, 29, 29, 30, 29, 29, 29, 29, 30, 31, 30, 27, - 27, 27, 28, 28, 29, 29, 29, 31, 31, 31, 32, 32, 33, 33, 35, 35, - 36, 37, 38, 38, 38, 38, 37, 36, 37, 39, 39, 37, 37, 39, 42, 42, - 43, 43, 44, 44, 45, 45, 45, 47, 47, 47, 46, 46, 45, 45, 45, 44, - 51, 48, 45, 49, 46, 43, 50, 45, 49, 48, 44, 44, 51, 53, 50, 47, - 48, 48, 49, 49, 48, 50, 49, 50, 58, 56, 52, 57, 54, 51, 59, 49, - 54, 55, 53, 54, 58, 54, 46, 62, 58, 57, 59, 59, 56, 56, 59, 57, - 54, 55, 55, 56, 57, 58, 58, 57, 59, 60, 60, 63, 62, 62, 62, 61, - 63, 64, 64, 64, 64, 65, 66, 66, 67, 67, 66, 65, 66, 70, 71, 61, - 64, 66, 65, 62, 60, 63, 65, 68, 60, 68, 63, 66, 63, 66, 7, 1, - 38, 59, 68, 82, 89, 90, 91, 95, 83, 79, 86, 93, 90, 88, 91, 90, - 86, 86, 89, 90, 87, 87, 91, 88, 90, 92, 91, 89, 88, 90, 92, 90, - 94, 94, 91, 90, 92, 91, 87, 93, 92, 91, 90, 90, 90, 90, 91, 89, - 88, 91, 27, 27, 28, 28, 28, 29, 29, 29, 31, 31, 30, 30, 31, 32, - 33, 31, 29, 27, 28, 28, 28, 29, 29, 29, 31, 31, 31, 32, 32, 33, - 33, 33, 36, 36, 36, 37, 37, 38, 38, 38, 36, 38, 39, 39, 38, 37, - 39, 40, 43, 43, 43, 44, 44, 45, 45, 45, 47, 47, 47, 46, 46, 45, - 45, 45, 44, 51, 48, 45, 49, 46, 43, 50, 45, 48, 48, 45, 46, 51, - 52, 49, 48, 48, 48, 48, 48, 48, 50, 50, 44, 52, 51, 49, 55, 52, - 50, 58, 50, 52, 52, 49, 51, 55, 54, 49, 57, 53, 52, 54, 53, 49, - 49, 51, 52, 50, 53, 54, 55, 54, 55, 53, 59, 59, 61, 61, 64, 64, - 64, 65, 60, 61, 62, 61, 61, 61, 62, 64, 66, 67, 67, 66, 67, 68, - 70, 71, 64, 65, 67, 66, 63, 61, 64, 65, 70, 63, 72, 66, 66, 62, - 65, 6, 2, 37, 59, 66, 82, 89, 88, 91, 92, 81, 78, 85, 92, 89, - 89, 90, 90, 86, 86, 89, 90, 87, 87, 91, 88, 90, 92, 91, 89, 88, - 90, 92, 89, 93, 93, 90, 90, 92, 92, 88, 93, 92, 91, 90, 90, 90, - 90, 91, 89, 90, 90, 27, 28, 28, 28, 29, 29, 29, 29, 32, 32, 32, - 32, 32, 33, 34, 32, 29, 28, 28, 28, 29, 29, 29, 29, 31, 31, 31, - 32, 32, 33, 33, 33, 37, 37, 36, 35, 36, 37, 39, 40, 36, 38, 39, - 39, 38, 38, 39, 41, 43, 43, 43, 44, 44, 45, 45, 45, 47, 47, 46, - 46, 46, 46, 45, 45, 44, 51, 48, 45, 49, 46, 43, 50, 45, 48, 49, - 47, 48, 51, 51, 48, 50, 47, 47, 46, 46, 47, 51, 52, 47, 54, 53, - 50, 55, 53, 50, 57, 58, 58, 56, 54, 56, 61, 61, 59, 62, 59, 58, - 60, 60, 57, 58, 60, 50, 50, 53, 54, 54, 53, 54, 53, 60, 60, 60, - 59, 61, 61, 62, 62, 62, 62, 63, 62, 61, 62, 67, 69, 64, 65, 67, - 67, 68, 68, 70, 70, 66, 66, 67, 67, 65, 63, 66, 66, 73, 65, 74, - 68, 67, 62, 64, 4, 2, 37, 59, 67, 82, 89, 88, 91, 90, 79, 77, - 84, 92, 89, 88, 90, 90, 86, 86, 89, 90, 87, 87, 91, 89, 90, 91, - 91, 89, 89, 90, 91, 88, 92, 92, 90, 90, 93, 93, 89, 93, 92, 91, - 90, 90, 90, 90, 91, 91, 91, 91, 28, 28, 28, 29, 29, 29, 30, 30, - 32, 32, 32, 31, 32, 33, 34, 34, 30, 28, 28, 29, 29, 29, 30, 30, - 31, 31, 31, 32, 32, 33, 33, 35, 38, 37, 35, 34, 35, 37, 39, 41, - 37, 38, 40, 39, 38, 38, 39, 41, 43, 43, 43, 44, 44, 45, 45, 45, - 46, 46, 46, 46, 46, 46, 46, 46, 44, 51, 48, 45, 49, 46, 43, 50, - 45, 47, 49, 50, 50, 51, 50, 46, 51, 47, 47, 45, 45, 47, 51, 53, - 52, 58, 55, 52, 57, 54, 50, 55, 51, 50, 49, 49, 52, 54, 54, 53, - 56, 53, 53, 56, 57, 56, 57, 60, 54, 53, 55, 55, 54, 54, 57, 58, - 61, 60, 60, 59, 61, 61, 62, 60, 61, 62, 62, 62, 61, 63, 69, 72, - 63, 65, 68, 67, 68, 68, 70, 70, 65, 66, 67, 67, 66, 66, 67, 67, - 72, 65, 74, 68, 67, 63, 65, 4, 3, 38, 60, 67, 82, 89, 88, 91, - 89, 78, 76, 84, 91, 88, 88, 90, 90, 86, 86, 89, 90, 87, 87, 91, - 90, 90, 90, 90, 90, 90, 90, 90, 87, 91, 92, 90, 91, 94, 94, 90, - 93, 92, 91, 90, 90, 90, 90, 91, 91, 91, 90, 28, 28, 29, 29, 29, - 30, 30, 30, 31, 31, 31, 31, 31, 32, 33, 33, 30, 30, 31, 31, 31, - 32, 32, 32, 33, 33, 33, 34, 34, 35, 35, 35, 38, 37, 35, 34, 35, - 37, 39, 41, 37, 39, 40, 40, 39, 38, 40, 41, 43, 43, 43, 44, 44, - 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 44, 51, 48, 45, 49, - 46, 43, 50, 47, 47, 49, 51, 52, 50, 49, 47, 51, 47, 45, 43, 45, - 47, 49, 51, 51, 55, 51, 49, 56, 54, 49, 54, 53, 53, 54, 57, 59, - 58, 55, 54, 58, 54, 53, 56, 56, 53, 53, 56, 53, 51, 50, 48, 48, - 49, 53, 56, 53, 54, 55, 57, 59, 61, 62, 63, 61, 61, 61, 59, 59, - 59, 62, 64, 62, 64, 68, 68, 67, 66, 67, 69, 66, 66, 66, 67, 67, - 67, 68, 67, 69, 62, 73, 68, 68, 64, 65, 5, 4, 39, 61, 68, 83, - 89, 88, 91, 89, 78, 76, 83, 91, 89, 88, 90, 90, 86, 86, 89, 90, - 87, 87, 91, 90, 90, 90, 90, 90, 90, 90, 90, 87, 91, 92, 90, 91, - 94, 94, 90, 93, 92, 91, 90, 90, 90, 90, 91, 89, 89, 89, 29, 29, - 29, 29, 30, 30, 30, 31, 31, 31, 30, 30, 31, 32, 33, 33, 31, 31, - 31, 31, 32, 32, 32, 33, 33, 33, 33, 34, 34, 35, 35, 35, 37, 37, - 36, 35, 36, 37, 39, 40, 37, 39, 40, 40, 39, 39, 40, 42, 42, 43, - 43, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 44, 51, - 48, 45, 49, 46, 43, 50, 50, 48, 48, 52, 52, 49, 48, 48, 48, 47, - 45, 44, 46, 47, 49, 50, 51, 55, 50, 48, 57, 56, 51, 55, 52, 50, - 52, 57, 58, 54, 51, 50, 52, 48, 46, 47, 45, 40, 39, 41, 34, 33, - 32, 29, 28, 29, 33, 38, 33, 35, 39, 43, 47, 50, 52, 53, 62, 63, - 64, 63, 61, 60, 60, 61, 62, 64, 68, 68, 67, 67, 67, 68, 66, 65, - 65, 66, 68, 68, 69, 67, 67, 61, 72, 68, 68, 63, 64, 4, 5, 40, - 62, 68, 83, 89, 88, 91, 89, 78, 76, 84, 92, 90, 89, 92, 90, 86, - 86, 89, 90, 87, 87, 91, 91, 90, 89, 89, 91, 91, 90, 89, 88, 92, - 92, 90, 90, 93, 93, 89, 93, 92, 91, 90, 90, 90, 90, 91, 89, 88, - 88, 29, 29, 29, 30, 30, 30, 31, 31, 32, 32, 32, 32, 32, 33, 34, - 35, 31, 31, 31, 32, 32, 32, 33, 33, 33, 33, 33, 34, 34, 35, 35, - 35, 36, 36, 36, 37, 37, 38, 38, 38, 38, 39, 41, 40, 39, 39, 40, - 42, 42, 42, 42, 43, 43, 44, 44, 44, 44, 44, 44, 45, 45, 46, 46, - 46, 44, 51, 48, 45, 49, 46, 43, 50, 53, 48, 48, 51, 51, 48, 48, - 50, 46, 44, 46, 46, 46, 46, 48, 48, 49, 52, 47, 43, 50, 47, 40, - 42, 29, 24, 23, 28, 29, 24, 21, 23, 27, 23, 21, 23, 21, 18, 17, - 20, 17, 21, 24, 23, 19, 17, 22, 25, 20, 23, 27, 30, 33, 33, 32, - 31, 49, 53, 57, 60, 60, 60, 62, 63, 59, 62, 66, 67, 68, 67, 67, - 68, 65, 64, 63, 65, 68, 68, 69, 66, 67, 61, 72, 67, 67, 61, 61, - 0, 6, 40, 62, 69, 83, 90, 87, 91, 89, 79, 77, 85, 93, 91, 91, - 93, 90, 86, 86, 89, 90, 87, 87, 91, 92, 90, 88, 89, 91, 92, 90, - 88, 89, 93, 93, 90, 90, 92, 92, 88, 93, 92, 91, 90, 90, 90, 90, - 91, 93, 92, 91, 29, 29, 29, 30, 30, 31, 31, 31, 34, 34, 33, 33, - 33, 34, 35, 36, 31, 31, 31, 32, 32, 33, 33, 33, 33, 33, 33, 34, - 34, 35, 35, 35, 35, 36, 37, 38, 38, 38, 38, 37, 38, 39, 41, 41, - 39, 39, 41, 42, 42, 42, 42, 43, 43, 44, 44, 44, 44, 44, 44, 45, - 45, 46, 46, 46, 44, 51, 48, 45, 49, 46, 43, 50, 54, 49, 47, 51, - 50, 47, 48, 52, 45, 44, 46, 47, 47, 46, 48, 47, 45, 46, 38, 32, - 35, 29, 20, 20, 27, 19, 16, 20, 20, 16, 15, 18, 26, 23, 23, 27, - 28, 26, 28, 31, 18, 24, 30, 31, 27, 23, 25, 26, 25, 27, 29, 30, - 29, 25, 21, 18, 26, 32, 41, 48, 53, 56, 60, 62, 59, 62, 66, 67, - 68, 67, 67, 68, 65, 63, 62, 64, 67, 68, 68, 65, 69, 62, 73, 67, - 65, 59, 58, 0, 6, 41, 62, 69, 83, 90, 87, 91, 90, 79, 77, 85, - 94, 92, 92, 94, 90, 86, 86, 89, 90, 87, 87, 91, 92, 90, 88, 89, - 91, 92, 90, 88, 90, 94, 94, 91, 90, 92, 91, 87, 93, 92, 91, 90, - 90, 90, 90, 91, 95, 94, 92, 30, 32, 33, 32, 30, 29, 30, 32, 30, - 31, 33, 35, 35, 35, 34, 33, 32, 31, 29, 29, 30, 32, 35, 37, 38, - 37, 36, 34, 34, 35, 36, 37, 40, 38, 36, 37, 41, 42, 40, 38, 38, - 39, 41, 41, 39, 39, 41, 42, 42, 43, 43, 44, 44, 43, 43, 42, 38, - 41, 44, 44, 41, 40, 41, 44, 49, 48, 48, 48, 48, 49, 50, 51, 44, - 48, 51, 50, 46, 44, 45, 45, 43, 37, 41, 42, 32, 32, 37, 32, 20, - 20, 13, 12, 20, 15, 12, 21, 20, 16, 20, 21, 16, 23, 27, 17, 33, - 30, 28, 30, 29, 25, 25, 28, 22, 33, 31, 38, 31, 21, 37, 42, 42, - 35, 37, 19, 32, 20, 26, 14, 18, 24, 24, 19, 29, 50, 64, 66, 62, - 68, 63, 59, 65, 64, 63, 71, 64, 64, 65, 66, 66, 67, 70, 70, 70, - 64, 73, 65, 66, 65, 65, 1, 5, 46, 59, 72, 87, 86, 92, 89, 91, - 74, 76, 88, 91, 92, 96, 92, 89, 90, 83, 92, 92, 83, 90, 87, 89, - 89, 90, 90, 90, 89, 88, 88, 91, 92, 92, 93, 93, 92, 92, 91, 93, - 92, 92, 91, 91, 92, 92, 93, 88, 90, 91, 27, 29, 30, 29, 27, 27, - 28, 29, 32, 33, 33, 33, 33, 32, 32, 31, 34, 33, 32, 32, 33, 35, - 37, 38, 37, 36, 36, 35, 35, 36, 36, 37, 40, 38, 36, 38, 40, 42, - 40, 38, 38, 39, 41, 41, 39, 39, 41, 42, 42, 42, 43, 43, 43, 43, - 42, 42, 44, 46, 47, 46, 43, 42, 43, 45, 47, 47, 47, 47, 47, 47, - 47, 47, 44, 46, 50, 51, 50, 48, 47, 45, 45, 32, 27, 22, 11, 11, - 18, 13, 12, 17, 16, 18, 26, 22, 20, 31, 23, 20, 24, 24, 19, 25, - 28, 19, 37, 33, 32, 34, 33, 30, 30, 33, 26, 31, 23, 32, 31, 23, - 35, 35, 29, 26, 30, 16, 28, 21, 28, 20, 20, 20, 20, 21, 25, 30, - 43, 54, 69, 70, 62, 60, 71, 71, 65, 68, 67, 66, 66, 66, 66, 66, - 68, 68, 71, 66, 75, 67, 66, 63, 62, 0, 6, 46, 60, 72, 87, 86, - 92, 89, 91, 74, 77, 88, 91, 92, 96, 92, 89, 90, 83, 92, 92, 83, - 90, 87, 88, 89, 89, 90, 90, 89, 89, 88, 91, 92, 92, 93, 93, 92, - 92, 91, 93, 92, 92, 91, 91, 92, 92, 93, 89, 91, 92, 27, 28, 29, - 29, 27, 27, 28, 30, 34, 33, 32, 31, 30, 30, 30, 30, 35, 35, 35, - 36, 37, 38, 38, 39, 37, 38, 38, 39, 39, 38, 38, 38, 39, 38, 37, - 38, 40, 41, 40, 39, 38, 39, 41, 41, 39, 39, 41, 42, 41, 41, 42, - 42, 42, 42, 41, 41, 47, 47, 47, 46, 43, 43, 44, 45, 45, 46, 47, - 48, 48, 48, 48, 48, 51, 50, 48, 47, 44, 39, 33, 27, 29, 15, 11, - 10, 6, 10, 15, 9, 6, 14, 17, 21, 27, 22, 21, 32, 24, 21, 25, - 24, 18, 23, 27, 19, 29, 25, 25, 27, 27, 24, 25, 28, 29, 28, 15, - 25, 29, 23, 30, 26, 17, 19, 25, 14, 20, 16, 24, 20, 23, 16, 18, - 24, 20, 13, 23, 39, 58, 65, 65, 64, 69, 66, 64, 71, 69, 68, 68, - 67, 66, 65, 67, 66, 71, 67, 77, 69, 67, 63, 59, 0, 7, 47, 60, - 72, 86, 86, 92, 89, 90, 75, 78, 89, 91, 91, 95, 91, 89, 90, 83, - 92, 92, 83, 90, 87, 88, 88, 89, 90, 90, 89, 89, 88, 91, 92, 92, - 93, 93, 92, 92, 91, 93, 92, 92, 91, 91, 92, 92, 93, 92, 94, 95, - 30, 31, 33, 32, 31, 31, 32, 34, 33, 32, 30, 29, 29, 30, 31, 32, - 32, 33, 34, 35, 36, 36, 35, 35, 36, 37, 38, 40, 40, 39, 38, 37, - 38, 38, 38, 39, 39, 40, 40, 40, 38, 39, 41, 41, 39, 39, 41, 42, - 40, 41, 41, 42, 42, 41, 41, 40, 44, 44, 43, 42, 42, 42, 43, 44, - 47, 47, 49, 50, 50, 49, 48, 48, 47, 42, 36, 32, 29, 25, 19, 12, - 15, 5, 8, 15, 17, 21, 21, 10, 12, 15, 13, 15, 23, 19, 15, 24, - 21, 19, 23, 22, 14, 18, 23, 15, 18, 15, 14, 17, 17, 15, 16, 19, - 27, 25, 11, 20, 24, 18, 25, 20, 17, 21, 24, 17, 14, 14, 18, 18, - 26, 20, 21, 24, 22, 17, 21, 27, 32, 52, 65, 65, 63, 57, 61, 76, - 68, 68, 67, 67, 67, 66, 68, 68, 69, 66, 77, 70, 69, 63, 58, 0, - 8, 48, 60, 72, 86, 86, 92, 90, 90, 75, 79, 90, 91, 90, 94, 91, - 89, 90, 83, 92, 92, 83, 90, 87, 87, 88, 89, 90, 90, 90, 89, 89, - 91, 92, 92, 93, 93, 92, 92, 91, 93, 92, 92, 91, 91, 92, 92, 93, - 93, 95, 95, 30, 32, 34, 33, 32, 32, 34, 35, 30, 29, 29, 29, 30, - 32, 34, 35, 33, 34, 35, 36, 36, 36, 35, 35, 35, 36, 38, 39, 40, - 39, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 38, 39, 41, 41, 39, - 39, 41, 42, 38, 39, 39, 40, 40, 39, 39, 38, 40, 40, 39, 40, 41, - 42, 42, 44, 49, 49, 47, 45, 43, 40, 38, 37, 29, 23, 17, 16, 18, - 20, 20, 17, 21, 11, 13, 18, 15, 17, 17, 5, 21, 16, 6, 7, 20, - 19, 14, 19, 17, 16, 21, 19, 10, 14, 19, 13, 15, 12, 12, 14, 15, - 12, 13, 19, 21, 26, 16, 23, 20, 11, 21, 20, 19, 25, 22, 19, 13, - 17, 15, 16, 23, 25, 22, 18, 24, 31, 28, 19, 18, 36, 47, 54, 62, - 61, 61, 71, 66, 66, 67, 67, 67, 68, 70, 70, 67, 64, 76, 70, 69, - 63, 58, 0, 10, 49, 61, 72, 86, 86, 93, 90, 89, 76, 81, 91, 91, - 89, 93, 91, 89, 90, 83, 92, 92, 83, 90, 87, 87, 88, 89, 90, 90, - 90, 90, 90, 91, 92, 92, 93, 93, 92, 92, 91, 93, 92, 92, 91, 91, - 92, 92, 93, 93, 95, 95, 28, 29, 31, 31, 30, 30, 32, 34, 28, 28, - 29, 30, 32, 34, 35, 36, 38, 38, 38, 38, 38, 38, 38, 38, 35, 36, - 37, 38, 39, 39, 39, 39, 37, 38, 40, 40, 38, 38, 40, 41, 38, 39, - 41, 41, 39, 39, 41, 42, 39, 39, 40, 40, 40, 40, 39, 39, 41, 41, - 41, 42, 44, 44, 43, 41, 46, 43, 39, 34, 29, 25, 22, 21, 22, 19, - 14, 13, 14, 18, 20, 20, 30, 18, 17, 17, 13, 17, 23, 16, 23, 18, - 6, 6, 20, 21, 17, 24, 17, 18, 24, 22, 12, 16, 22, 17, 18, 15, - 14, 16, 16, 13, 14, 19, 19, 27, 21, 28, 22, 11, 22, 23, 19, 26, - 19, 23, 14, 25, 19, 21, 18, 25, 24, 18, 25, 36, 33, 20, 25, 27, - 25, 36, 62, 71, 64, 63, 65, 66, 66, 67, 68, 69, 71, 72, 67, 64, - 76, 69, 68, 63, 58, 0, 11, 50, 61, 72, 85, 86, 93, 91, 88, 76, - 82, 93, 91, 88, 92, 90, 89, 90, 83, 92, 92, 83, 90, 87, 86, 87, - 88, 89, 90, 90, 90, 90, 91, 92, 92, 93, 93, 92, 92, 91, 93, 92, - 92, 91, 91, 92, 92, 93, 92, 94, 95, 25, 27, 29, 29, 28, 29, 30, - 32, 29, 30, 31, 33, 34, 34, 34, 34, 40, 39, 37, 37, 36, 37, 38, - 39, 36, 36, 36, 37, 38, 39, 40, 41, 36, 39, 40, 40, 38, 38, 39, - 42, 38, 39, 41, 41, 39, 39, 41, 42, 40, 40, 41, 41, 41, 41, 40, - 40, 42, 41, 41, 43, 44, 43, 38, 34, 33, 30, 25, 20, 16, 15, 15, - 15, 20, 21, 21, 19, 18, 19, 21, 20, 26, 18, 20, 22, 17, 22, 31, - 27, 16, 17, 13, 12, 18, 15, 17, 28, 17, 19, 26, 24, 14, 18, 25, - 20, 22, 19, 18, 19, 19, 16, 16, 21, 22, 31, 26, 35, 29, 18, 27, - 27, 22, 28, 17, 25, 16, 31, 21, 22, 20, 24, 27, 26, 25, 26, 30, - 30, 32, 28, 18, 24, 49, 61, 61, 64, 67, 68, 68, 68, 68, 68, 70, - 70, 70, 66, 77, 68, 67, 61, 56, 0, 12, 51, 62, 72, 85, 86, 93, - 91, 87, 76, 83, 93, 91, 88, 92, 90, 89, 90, 83, 92, 92, 83, 90, - 87, 86, 87, 88, 89, 90, 91, 91, 90, 91, 92, 92, 93, 93, 92, 92, - 91, 93, 92, 92, 91, 91, 92, 92, 93, 91, 94, 95, 25, 27, 29, 29, - 29, 29, 31, 33, 31, 32, 33, 35, 35, 34, 33, 32, 37, 35, 33, 31, - 31, 33, 37, 38, 37, 37, 36, 37, 38, 40, 42, 43, 38, 39, 41, 40, - 38, 37, 39, 40, 38, 39, 41, 41, 39, 39, 41, 44, 44, 45, 43, 44, - 42, 41, 39, 38, 39, 39, 40, 42, 42, 40, 33, 28, 20, 18, 14, 12, - 11, 14, 17, 19, 8, 14, 20, 24, 24, 23, 28, 29, 19, 16, 24, 27, - 20, 19, 22, 16, 11, 18, 20, 17, 16, 8, 11, 26, 16, 15, 25, 23, - 14, 18, 26, 21, 30, 26, 24, 28, 27, 23, 23, 26, 25, 32, 26, 37, - 35, 25, 32, 29, 26, 30, 18, 28, 18, 35, 22, 22, 26, 26, 33, 38, - 30, 19, 25, 40, 30, 33, 25, 21, 30, 42, 55, 73, 72, 72, 71, 68, - 68, 67, 68, 68, 74, 69, 78, 68, 66, 60, 56, 0, 15, 54, 62, 74, - 85, 86, 95, 91, 89, 76, 84, 94, 91, 87, 91, 90, 89, 90, 83, 92, - 92, 83, 90, 87, 86, 87, 90, 91, 92, 93, 93, 93, 91, 92, 92, 93, - 93, 92, 92, 91, 93, 92, 92, 91, 91, 92, 92, 93, 90, 92, 94, 30, - 30, 30, 30, 31, 32, 33, 33, 33, 33, 33, 32, 31, 33, 37, 38, 33, - 31, 31, 32, 34, 35, 37, 39, 35, 37, 38, 40, 41, 42, 45, 43, 43, - 42, 41, 41, 39, 38, 37, 35, 41, 40, 38, 37, 39, 40, 43, 45, 45, - 46, 45, 43, 42, 38, 36, 35, 44, 32, 37, 49, 43, 32, 24, 14, 19, - 16, 14, 15, 17, 16, 12, 8, 9, 13, 19, 22, 22, 23, 31, 34, 24, - 20, 26, 46, 18, 28, 29, 29, 20, 29, 17, 22, 26, 15, 22, 25, 13, - 24, 29, 19, 16, 23, 26, 18, 35, 30, 33, 35, 25, 24, 28, 23, 27, - 34, 30, 27, 33, 30, 26, 33, 38, 34, 30, 29, 31, 34, 36, 35, 22, - 31, 34, 29, 25, 25, 27, 25, 23, 26, 31, 31, 28, 30, 50, 69, 79, - 67, 62, 67, 74, 73, 67, 66, 71, 68, 69, 71, 62, 68, 57, 0, 20, - 57, 66, 79, 89, 88, 94, 88, 90, 71, 84, 90, 91, 96, 89, 93, 89, - 83, 90, 92, 87, 89, 94, 90, 92, 92, 95, 95, 95, 94, 93, 93, 91, - 92, 92, 92, 92, 91, 90, 89, 93, 93, 93, 92, 92, 91, 91, 91, 89, - 89, 92, 30, 30, 29, 28, 28, 28, 29, 29, 33, 33, 34, 33, 32, 33, - 36, 36, 31, 29, 29, 30, 32, 35, 37, 37, 37, 37, 40, 41, 44, 44, - 47, 45, 45, 42, 42, 40, 37, 37, 35, 36, 38, 38, 39, 38, 40, 41, - 44, 47, 52, 52, 51, 47, 44, 40, 38, 37, 35, 32, 38, 43, 31, 23, - 22, 15, 20, 16, 14, 15, 18, 19, 17, 15, 16, 16, 19, 22, 24, 26, - 27, 24, 23, 18, 28, 30, 25, 21, 32, 34, 22, 31, 20, 25, 28, 15, - 20, 22, 12, 18, 22, 19, 23, 30, 33, 29, 30, 26, 33, 34, 27, 29, - 34, 29, 27, 32, 30, 27, 33, 29, 28, 34, 34, 30, 26, 29, 32, 34, - 30, 28, 36, 36, 35, 31, 31, 32, 29, 22, 23, 26, 30, 32, 29, 30, - 42, 56, 69, 75, 76, 71, 69, 74, 73, 68, 70, 69, 71, 73, 66, 71, - 59, 0, 20, 58, 65, 79, 91, 89, 96, 91, 92, 73, 85, 91, 91, 95, - 87, 88, 89, 84, 90, 92, 87, 89, 94, 90, 91, 92, 92, 93, 94, 93, - 92, 91, 94, 93, 93, 93, 93, 92, 91, 90, 93, 93, 93, 92, 92, 91, - 91, 91, 89, 89, 90, 32, 31, 30, 29, 28, 28, 28, 28, 33, 34, 35, - 35, 33, 33, 34, 34, 31, 29, 31, 32, 34, 35, 37, 37, 38, 38, 40, - 41, 44, 44, 47, 45, 45, 41, 40, 37, 35, 36, 36, 37, 36, 37, 40, - 40, 42, 42, 44, 46, 55, 55, 52, 47, 44, 40, 38, 38, 34, 35, 40, - 34, 18, 14, 20, 16, 19, 15, 14, 15, 18, 21, 22, 22, 21, 19, 19, - 23, 26, 27, 23, 17, 22, 18, 26, 12, 30, 14, 30, 37, 19, 29, 20, - 26, 29, 16, 22, 23, 14, 13, 16, 20, 28, 32, 33, 32, 28, 24, 30, - 32, 27, 29, 35, 30, 27, 32, 28, 24, 30, 26, 24, 31, 28, 26, 24, - 29, 33, 32, 27, 22, 42, 38, 33, 30, 35, 35, 28, 16, 23, 25, 28, - 32, 31, 27, 32, 39, 49, 71, 80, 69, 61, 69, 71, 65, 70, 69, 72, - 75, 68, 72, 59, 0, 19, 58, 65, 79, 92, 90, 97, 92, 93, 74, 86, - 91, 91, 94, 86, 87, 90, 84, 90, 93, 86, 87, 94, 90, 91, 91, 92, - 93, 94, 93, 93, 91, 95, 94, 94, 94, 94, 93, 92, 91, 93, 93, 93, - 92, 92, 91, 91, 91, 89, 89, 90, 33, 33, 32, 31, 31, 31, 32, 32, - 32, 34, 36, 36, 34, 33, 33, 32, 31, 29, 31, 32, 34, 35, 37, 37, - 37, 39, 41, 42, 44, 45, 47, 45, 45, 41, 39, 36, 34, 36, 36, 38, - 35, 36, 40, 41, 44, 43, 45, 46, 53, 52, 49, 45, 42, 39, 38, 38, - 38, 39, 38, 22, 7, 14, 25, 20, 19, 16, 15, 15, 18, 21, 23, 25, - 20, 20, 21, 24, 25, 24, 20, 14, 20, 23, 20, 10, 29, 16, 22, 36, - 17, 28, 20, 27, 32, 19, 23, 26, 20, 13, 12, 20, 27, 27, 26, 28, - 31, 26, 32, 32, 24, 28, 34, 28, 24, 29, 25, 21, 26, 22, 20, 27, - 23, 27, 29, 30, 31, 30, 31, 30, 39, 34, 29, 26, 30, 29, 23, 16, - 24, 23, 25, 29, 30, 28, 27, 30, 33, 56, 72, 67, 63, 67, 68, 65, - 70, 69, 72, 76, 67, 72, 58, 0, 19, 58, 65, 80, 92, 90, 98, 93, - 93, 73, 86, 91, 91, 94, 87, 88, 88, 85, 91, 93, 86, 87, 94, 89, - 93, 93, 94, 95, 96, 96, 95, 94, 93, 93, 94, 94, 93, 92, 91, 91, - 93, 93, 93, 92, 92, 91, 91, 91, 90, 90, 90, 31, 31, 31, 31, 32, - 33, 35, 36, 32, 34, 36, 36, 34, 33, 33, 32, 31, 31, 31, 32, 34, - 35, 37, 37, 38, 39, 40, 40, 42, 43, 45, 45, 45, 41, 39, 36, 35, - 37, 37, 39, 35, 36, 40, 42, 44, 44, 46, 47, 48, 48, 46, 44, 43, - 40, 39, 40, 42, 33, 27, 11, 2, 14, 26, 20, 20, 18, 17, 16, 17, - 19, 21, 24, 14, 19, 24, 25, 22, 20, 19, 18, 17, 26, 12, 19, 20, - 21, 10, 28, 18, 29, 20, 27, 30, 17, 20, 23, 22, 15, 14, 19, 23, - 22, 23, 24, 29, 23, 29, 29, 21, 25, 32, 27, 20, 26, 23, 20, 23, - 19, 18, 24, 17, 25, 30, 29, 25, 25, 32, 38, 31, 29, 28, 26, 25, - 22, 21, 22, 26, 22, 21, 26, 29, 29, 27, 29, 31, 41, 57, 69, 73, - 68, 68, 69, 68, 69, 72, 76, 66, 71, 57, 0, 20, 59, 66, 80, 93, - 90, 98, 93, 90, 71, 84, 90, 91, 95, 89, 90, 89, 84, 92, 94, 86, - 87, 94, 89, 90, 91, 94, 95, 95, 95, 95, 95, 92, 92, 92, 92, 92, - 91, 90, 89, 93, 93, 93, 92, 92, 91, 91, 91, 90, 90, 91, 27, 27, - 28, 29, 30, 32, 34, 35, 33, 34, 35, 35, 33, 33, 34, 36, 33, 31, - 31, 32, 34, 35, 37, 37, 39, 39, 40, 41, 43, 43, 45, 43, 43, 41, - 40, 38, 37, 39, 38, 39, 36, 37, 40, 41, 44, 44, 47, 49, 49, 49, - 49, 47, 46, 44, 42, 40, 38, 22, 15, 7, 2, 14, 26, 18, 21, 19, - 19, 19, 18, 18, 20, 23, 14, 20, 25, 26, 21, 19, 20, 21, 17, 22, - 9, 24, 15, 22, 8, 20, 23, 32, 22, 26, 29, 15, 18, 21, 20, 19, - 18, 19, 21, 23, 26, 25, 25, 20, 26, 27, 20, 24, 34, 30, 20, 26, - 24, 20, 24, 21, 20, 27, 14, 21, 29, 27, 22, 22, 29, 36, 28, 27, - 30, 28, 24, 20, 24, 31, 28, 22, 20, 24, 29, 28, 29, 30, 28, 28, - 36, 56, 67, 67, 66, 68, 68, 67, 71, 73, 64, 68, 54, 0, 22, 60, - 67, 81, 93, 90, 97, 92, 89, 71, 84, 90, 92, 96, 90, 91, 90, 85, - 92, 94, 87, 87, 94, 89, 87, 88, 91, 92, 93, 93, 93, 93, 91, 91, - 92, 92, 91, 91, 90, 89, 93, 93, 93, 92, 92, 91, 91, 91, 91, 91, - 91, 29, 29, 29, 29, 30, 32, 33, 34, 33, 33, 34, 33, 32, 33, 36, - 38, 33, 33, 33, 34, 36, 37, 37, 37, 40, 40, 41, 41, 43, 43, 43, - 43, 42, 41, 42, 41, 40, 41, 39, 40, 37, 37, 39, 40, 43, 44, 48, - 49, 47, 49, 49, 49, 46, 42, 39, 35, 29, 12, 9, 12, 10, 15, 24, - 19, 20, 20, 22, 22, 21, 21, 22, 24, 22, 23, 25, 25, 23, 22, 22, - 20, 20, 11, 12, 20, 13, 14, 16, 15, 20, 29, 17, 22, 28, 16, 21, - 25, 19, 25, 25, 18, 17, 23, 26, 22, 25, 19, 23, 23, 18, 22, 30, - 28, 18, 25, 22, 19, 24, 21, 18, 25, 15, 18, 23, 24, 23, 22, 23, - 24, 29, 28, 30, 30, 25, 19, 23, 32, 25, 22, 22, 27, 30, 27, 26, - 30, 26, 27, 27, 36, 50, 63, 65, 63, 69, 67, 69, 71, 61, 65, 53, - 0, 24, 62, 69, 81, 93, 89, 96, 91, 91, 72, 85, 91, 91, 95, 88, - 89, 91, 85, 91, 93, 85, 85, 92, 87, 87, 88, 89, 90, 93, 93, 93, - 93, 92, 92, 93, 93, 92, 91, 91, 90, 93, 93, 93, 92, 92, 91, 91, - 91, 91, 91, 91, 33, 33, 32, 32, 32, 33, 34, 35, 33, 33, 33, 32, - 31, 33, 37, 40, 33, 33, 33, 34, 36, 37, 37, 37, 40, 40, 41, 41, - 43, 43, 43, 43, 42, 42, 43, 43, 42, 42, 40, 40, 38, 38, 39, 39, - 42, 44, 49, 50, 44, 46, 48, 48, 44, 40, 33, 30, 21, 8, 12, 22, - 21, 19, 24, 22, 18, 20, 24, 25, 23, 23, 25, 27, 30, 27, 24, 25, - 26, 26, 24, 18, 23, 1, 17, 13, 16, 7, 26, 14, 14, 23, 12, 19, - 28, 19, 28, 33, 16, 27, 29, 14, 12, 18, 23, 15, 29, 23, 24, 23, - 16, 19, 26, 23, 16, 21, 18, 16, 21, 19, 17, 24, 20, 19, 22, 26, - 29, 28, 21, 15, 31, 27, 26, 28, 23, 18, 21, 29, 24, 21, 25, 28, - 31, 26, 24, 27, 30, 35, 31, 24, 38, 64, 72, 64, 69, 67, 66, 69, - 58, 64, 52, 0, 25, 63, 69, 82, 93, 89, 95, 90, 93, 74, 86, 91, - 91, 94, 86, 87, 91, 86, 91, 93, 85, 85, 92, 87, 89, 90, 91, 92, - 95, 96, 96, 96, 93, 94, 94, 94, 94, 93, 92, 91, 93, 93, 93, 92, - 92, 91, 91, 91, 91, 91, 91, 27, 32, 33, 30, 29, 32, 33, 32, 34, - 34, 34, 35, 35, 36, 36, 36, 38, 37, 36, 35, 35, 35, 38, 38, 34, - 39, 42, 42, 44, 46, 45, 40, 43, 40, 40, 41, 40, 37, 35, 39, 38, - 36, 37, 37, 41, 42, 44, 43, 48, 50, 47, 41, 41, 42, 30, 12, 12, - 14, 14, 16, 19, 23, 25, 26, 25, 21, 19, 19, 22, 24, 23, 23, 24, - 30, 32, 26, 21, 22, 21, 15, 27, 16, 12, 14, 18, 17, 16, 16, 18, - 17, 20, 22, 22, 20, 24, 30, 30, 25, 31, 29, 21, 17, 24, 20, 27, - 23, 23, 26, 24, 20, 22, 28, 20, 25, 25, 19, 16, 19, 25, 27, 19, - 24, 26, 25, 26, 29, 26, 25, 31, 34, 20, 29, 31, 28, 33, 24, 18, - 26, 28, 24, 29, 24, 21, 31, 30, 28, 25, 24, 31, 41, 56, 65, 70, - 65, 63, 82, 58, 63, 38, 0, 26, 61, 68, 83, 94, 87, 94, 91, 90, - 76, 89, 91, 90, 96, 90, 89, 87, 87, 89, 88, 87, 85, 85, 86, 92, - 92, 93, 92, 92, 91, 90, 90, 93, 93, 93, 92, 92, 91, 91, 91, 92, - 92, 92, 92, 92, 92, 92, 92, 94, 93, 93, 27, 32, 33, 30, 29, 32, - 33, 32, 34, 34, 34, 35, 35, 36, 36, 36, 35, 35, 35, 35, 35, 36, - 40, 40, 36, 40, 42, 41, 42, 45, 45, 41, 44, 40, 40, 41, 40, 37, - 36, 39, 35, 36, 39, 41, 45, 45, 48, 47, 41, 45, 48, 45, 38, 29, - 16, 5, 14, 15, 16, 18, 21, 22, 24, 24, 23, 21, 20, 20, 21, 22, - 23, 24, 15, 22, 25, 23, 20, 24, 24, 19, 22, 15, 11, 14, 16, 15, - 14, 15, 22, 21, 20, 23, 23, 22, 26, 31, 31, 30, 36, 38, 28, 25, - 27, 20, 25, 21, 25, 27, 26, 21, 21, 26, 21, 24, 24, 22, 24, 28, - 28, 23, 23, 26, 27, 25, 25, 28, 25, 24, 32, 34, 23, 28, 32, 25, - 31, 21, 28, 34, 30, 29, 36, 32, 27, 33, 23, 26, 26, 26, 24, 31, - 43, 53, 73, 67, 63, 77, 58, 70, 41, 0, 26, 61, 68, 84, 95, 88, - 93, 91, 89, 75, 89, 91, 90, 96, 90, 90, 86, 86, 88, 88, 87, 86, - 86, 87, 90, 90, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 91, - 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 92, 28, 32, 34, - 30, 29, 32, 34, 32, 34, 34, 34, 35, 35, 36, 36, 36, 36, 36, 36, - 37, 38, 39, 41, 42, 38, 41, 41, 39, 40, 44, 44, 41, 44, 40, 40, - 42, 40, 37, 36, 39, 33, 36, 42, 44, 45, 44, 47, 47, 43, 40, 40, - 37, 28, 13, 5, 6, 15, 17, 16, 18, 20, 21, 23, 22, 20, 21, 23, - 22, 20, 20, 23, 26, 13, 19, 23, 23, 21, 24, 26, 22, 18, 14, 14, - 17, 17, 16, 16, 19, 24, 21, 19, 21, 23, 21, 23, 26, 31, 30, 39, - 43, 34, 31, 31, 21, 22, 21, 27, 29, 28, 24, 23, 26, 23, 24, 23, - 24, 30, 35, 32, 23, 27, 30, 29, 25, 22, 25, 26, 23, 31, 34, 22, - 27, 29, 24, 29, 20, 30, 31, 25, 25, 35, 34, 27, 28, 20, 27, 30, - 29, 22, 23, 31, 39, 67, 66, 65, 72, 57, 75, 39, 0, 26, 62, 69, - 85, 96, 88, 93, 90, 88, 73, 88, 90, 90, 96, 91, 91, 84, 85, 87, - 87, 86, 85, 87, 88, 86, 86, 89, 90, 90, 91, 94, 94, 93, 93, 92, - 92, 92, 92, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 92, - 28, 33, 34, 31, 30, 32, 34, 32, 34, 34, 34, 35, 35, 36, 36, 36, - 37, 36, 36, 37, 38, 39, 40, 41, 39, 42, 41, 38, 39, 43, 44, 42, - 44, 40, 41, 42, 40, 38, 36, 39, 35, 38, 42, 42, 42, 40, 44, 44, - 52, 39, 27, 21, 13, 3, 6, 16, 17, 19, 18, 20, 20, 21, 22, 21, - 18, 21, 25, 24, 20, 20, 23, 28, 21, 24, 27, 27, 24, 24, 24, 24, - 19, 16, 20, 23, 22, 18, 21, 25, 28, 24, 21, 23, 24, 22, 23, 25, - 30, 32, 41, 44, 38, 37, 37, 26, 23, 24, 27, 27, 27, 24, 27, 29, - 26, 29, 29, 28, 31, 35, 33, 26, 27, 27, 26, 22, 22, 24, 25, 25, - 29, 33, 23, 27, 29, 22, 29, 21, 23, 28, 23, 23, 31, 32, 26, 31, - 26, 28, 31, 28, 24, 24, 27, 32, 51, 60, 68, 67, 55, 73, 29, 0, - 26, 62, 70, 86, 97, 88, 93, 89, 86, 72, 87, 90, 90, 97, 91, 91, - 83, 85, 87, 87, 86, 86, 88, 89, 87, 87, 89, 90, 90, 91, 93, 93, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 90, 91, 91, 29, 33, 35, 31, 30, 33, 34, 33, 34, 34, 34, 35, 35, - 36, 36, 36, 39, 38, 38, 37, 37, 38, 38, 39, 40, 42, 40, 36, 37, - 41, 41, 41, 45, 41, 41, 43, 41, 38, 37, 40, 38, 39, 40, 40, 41, - 41, 46, 47, 51, 31, 17, 11, 9, 5, 12, 24, 18, 18, 21, 22, 23, - 23, 23, 22, 18, 21, 26, 25, 22, 21, 24, 29, 26, 27, 29, 30, 26, - 22, 22, 23, 22, 20, 23, 27, 25, 21, 24, 28, 33, 30, 27, 28, 28, - 25, 26, 28, 30, 32, 38, 39, 35, 40, 44, 33, 29, 28, 28, 24, 24, - 25, 30, 33, 31, 35, 35, 29, 27, 28, 32, 31, 25, 25, 24, 21, 22, - 25, 27, 25, 26, 31, 23, 28, 30, 23, 32, 25, 23, 32, 31, 28, 34, - 34, 33, 41, 33, 28, 26, 24, 26, 27, 28, 29, 34, 51, 70, 67, 56, - 71, 19, 0, 28, 63, 71, 86, 96, 88, 93, 89, 86, 72, 86, 89, 89, - 96, 91, 91, 82, 83, 85, 85, 86, 86, 87, 88, 89, 89, 91, 90, 90, - 89, 89, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 90, 91, 91, 29, 33, 35, 32, 31, 33, 35, 33, 34, 34, - 34, 35, 35, 36, 36, 36, 40, 39, 38, 37, 37, 37, 37, 38, 39, 42, - 40, 38, 38, 41, 41, 38, 45, 41, 42, 43, 41, 39, 37, 40, 39, 37, - 38, 39, 44, 46, 48, 46, 33, 22, 15, 13, 15, 15, 18, 20, 17, 20, - 22, 24, 24, 25, 25, 23, 20, 22, 26, 27, 26, 25, 27, 29, 25, 25, - 27, 30, 26, 22, 22, 25, 25, 22, 22, 26, 27, 24, 23, 28, 31, 28, - 28, 28, 25, 21, 23, 30, 35, 33, 39, 35, 32, 42, 47, 36, 34, 33, - 32, 24, 24, 27, 32, 35, 34, 38, 38, 30, 26, 26, 31, 32, 23, 25, - 26, 21, 23, 27, 29, 27, 24, 31, 23, 30, 31, 25, 34, 27, 25, 35, - 34, 32, 36, 34, 36, 47, 35, 27, 20, 20, 23, 27, 27, 26, 27, 40, - 66, 66, 60, 71, 12, 0, 30, 65, 71, 85, 95, 87, 94, 91, 86, 72, - 86, 89, 89, 95, 90, 90, 83, 83, 85, 85, 86, 85, 86, 87, 90, 90, - 91, 90, 90, 89, 88, 88, 91, 91, 92, 92, 92, 92, 93, 93, 92, 92, - 92, 92, 92, 92, 92, 92, 91, 91, 92, 29, 34, 35, 32, 31, 34, 35, - 34, 34, 34, 34, 35, 35, 36, 36, 36, 38, 39, 38, 38, 37, 38, 39, - 39, 38, 42, 41, 39, 39, 41, 40, 36, 45, 41, 42, 43, 42, 39, 37, - 40, 40, 37, 37, 39, 45, 43, 39, 31, 10, 12, 15, 14, 14, 16, 19, - 19, 18, 19, 23, 25, 28, 29, 29, 27, 23, 23, 25, 28, 29, 30, 29, - 29, 27, 26, 28, 32, 29, 23, 23, 27, 34, 27, 23, 28, 30, 28, 27, - 29, 29, 30, 33, 32, 26, 21, 25, 36, 40, 39, 43, 37, 33, 42, 45, - 31, 34, 35, 34, 29, 27, 30, 34, 33, 33, 36, 36, 31, 30, 32, 33, - 29, 27, 28, 29, 26, 27, 30, 30, 27, 25, 32, 25, 30, 31, 23, 33, - 28, 30, 34, 30, 28, 34, 34, 33, 40, 33, 28, 23, 23, 23, 25, 23, - 23, 27, 29, 52, 57, 61, 71, 5, 0, 33, 66, 70, 84, 93, 87, 94, - 93, 87, 73, 87, 89, 88, 94, 88, 88, 85, 84, 86, 86, 86, 85, 85, - 86, 88, 88, 88, 88, 90, 90, 90, 90, 91, 91, 91, 92, 92, 93, 93, - 93, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 92, 29, 32, 35, 30, - 31, 32, 35, 32, 34, 32, 34, 33, 35, 34, 36, 36, 36, 37, 37, 38, - 38, 39, 41, 42, 37, 42, 42, 40, 40, 41, 39, 35, 44, 42, 40, 41, - 42, 39, 37, 41, 41, 37, 36, 38, 43, 37, 24, 12, 1, 12, 19, 10, - 8, 15, 21, 23, 17, 20, 25, 28, 32, 33, 33, 31, 29, 25, 29, 30, - 36, 35, 34, 32, 37, 34, 36, 40, 36, 29, 28, 32, 44, 34, 30, 33, - 36, 35, 34, 33, 40, 42, 45, 44, 35, 30, 38, 49, 45, 44, 48, 41, - 36, 46, 45, 29, 34, 39, 40, 34, 33, 36, 37, 34, 32, 35, 32, 32, - 36, 40, 36, 29, 32, 36, 37, 32, 32, 32, 32, 28, 31, 38, 28, 34, - 31, 25, 34, 29, 37, 37, 29, 27, 35, 36, 30, 33, 29, 29, 31, 28, - 25, 21, 22, 24, 26, 20, 36, 46, 57, 70, 0, 0, 30, 64, 69, 81, - 90, 86, 94, 94, 88, 74, 87, 89, 88, 94, 87, 87, 87, 87, 89, 88, - 86, 85, 85, 86, 86, 88, 89, 90, 90, 93, 94, 94, 91, 91, 91, 92, - 92, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 94, 93, 93, 29, - 26, 28, 26, 29, 29, 33, 32, 35, 29, 29, 31, 34, 30, 30, 32, 36, - 42, 38, 36, 42, 40, 36, 42, 42, 45, 45, 42, 43, 46, 47, 42, 35, - 37, 40, 39, 38, 37, 39, 39, 43, 39, 37, 39, 36, 26, 15, 11, 16, - 19, 19, 15, 17, 18, 21, 23, 27, 25, 32, 34, 33, 40, 46, 38, 34, - 41, 42, 36, 44, 45, 43, 48, 47, 49, 48, 47, 48, 49, 42, 33, 62, - 40, 44, 53, 42, 40, 46, 39, 58, 47, 42, 46, 50, 49, 47, 51, 58, - 47, 42, 43, 49, 51, 49, 48, 55, 51, 45, 41, 44, 44, 43, 42, 42, - 44, 44, 41, 36, 35, 36, 40, 44, 42, 42, 34, 30, 43, 47, 31, 40, - 32, 39, 48, 34, 24, 26, 30, 37, 33, 30, 29, 30, 31, 31, 31, 37, - 32, 25, 21, 23, 23, 21, 19, 30, 22, 25, 34, 42, 44, 23, 0, 34, - 61, 74, 76, 85, 89, 85, 88, 92, 75, 89, 91, 89, 93, 87, 90, 88, - 87, 89, 89, 87, 89, 91, 92, 89, 91, 91, 92, 92, 95, 95, 95, 95, - 94, 92, 90, 89, 89, 89, 90, 92, 92, 92, 92, 92, 92, 92, 92, 94, - 94, 93, 32, 29, 29, 28, 29, 31, 32, 33, 33, 28, 27, 31, 32, 30, - 29, 32, 34, 42, 38, 36, 42, 40, 37, 42, 38, 41, 42, 39, 39, 43, - 43, 38, 40, 38, 39, 39, 38, 38, 40, 41, 37, 40, 40, 32, 16, 5, - 11, 25, 25, 26, 22, 20, 19, 21, 22, 25, 33, 28, 35, 41, 39, 42, - 47, 41, 55, 62, 57, 50, 56, 59, 61, 67, 55, 56, 56, 56, 59, 62, - 59, 52, 56, 42, 47, 55, 50, 56, 65, 59, 51, 51, 57, 67, 69, 65, - 63, 66, 65, 63, 64, 62, 60, 54, 59, 63, 58, 54, 55, 54, 59, 58, - 58, 56, 57, 59, 60, 57, 56, 56, 58, 61, 42, 42, 52, 54, 51, 55, - 52, 34, 52, 42, 46, 55, 45, 40, 43, 45, 37, 33, 32, 30, 30, 30, - 28, 26, 26, 27, 27, 30, 32, 30, 26, 23, 23, 24, 32, 32, 25, 30, - 32, 26, 38, 53, 63, 74, 87, 89, 85, 90, 87, 75, 93, 95, 91, 94, - 89, 93, 90, 89, 91, 91, 89, 89, 93, 94, 91, 91, 93, 94, 94, 95, - 96, 95, 97, 94, 92, 91, 90, 90, 90, 91, 92, 92, 92, 92, 92, 92, - 92, 92, 94, 93, 92, 33, 30, 30, 29, 29, 30, 31, 31, 33, 28, 27, - 31, 33, 30, 29, 33, 34, 42, 38, 36, 43, 41, 37, 42, 37, 40, 41, - 38, 38, 42, 42, 37, 43, 41, 40, 39, 39, 39, 40, 41, 40, 37, 31, - 19, 4, 0, 11, 30, 27, 25, 20, 17, 19, 20, 23, 25, 38, 29, 36, - 46, 47, 51, 64, 68, 67, 80, 85, 85, 90, 86, 77, 76, 79, 80, 80, - 80, 83, 87, 84, 78, 88, 80, 78, 73, 64, 69, 72, 63, 72, 78, 88, - 96, 97, 94, 96, 103, 104, 102, 104, 102, 98, 91, 93, 97, 112, 110, 109, - 106, 105, 98, 92, 87, 79, 81, 82, 81, 80, 78, 80, 81, 74, 67, 70, - 70, 65, 68, 71, 64, 62, 49, 50, 57, 50, 49, 53, 51, 41, 42, 46, - 48, 48, 43, 34, 28, 38, 36, 31, 27, 24, 24, 25, 24, 23, 25, 33, - 29, 17, 22, 37, 41, 41, 49, 55, 69, 86, 88, 84, 91, 81, 72, 94, - 96, 89, 93, 90, 93, 90, 89, 91, 91, 89, 89, 93, 94, 91, 91, 94, - 94, 94, 94, 96, 95, 97, 94, 93, 92, 91, 91, 91, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 93, 93, 92, 31, 28, 28, 28, 27, 27, 28, 28, - 33, 28, 27, 31, 33, 31, 30, 34, 35, 42, 39, 37, 43, 41, 37, 43, - 40, 43, 43, 41, 41, 45, 45, 42, 44, 39, 38, 35, 38, 38, 39, 40, - 45, 28, 12, 8, 10, 13, 17, 23, 24, 21, 18, 21, 24, 25, 26, 29, - 40, 30, 38, 55, 63, 76, 101, 116, 132, 149, 156, 158, 164, 159, 148, 146, - 148, 150, 150, 149, 150, 151, 145, 136, 142, 143, 141, 133, 130, 140, 144, 136, - 146, 148, 149, 149, 149, 152, 160, 168, 169, 163, 162, 163, 167, 160, 157, 153, - 158, 156, 160, 159, 161, 157, 156, 154, 156, 157, 157, 155, 152, 149, 148, 146, - 148, 134, 130, 130, 122, 121, 127, 127, 120, 104, 99, 100, 96, 94, 95, 91, - 98, 86, 67, 52, 45, 44, 48, 51, 49, 45, 42, 36, 30, 27, 26, 26, - 31, 24, 28, 29, 26, 29, 32, 25, 33, 46, 50, 55, 73, 82, 85, 91, - 81, 73, 89, 91, 87, 94, 90, 90, 90, 89, 91, 91, 89, 89, 93, 94, - 92, 92, 94, 94, 94, 94, 95, 94, 97, 94, 94, 93, 93, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 30, 30, 30, 30, 30, - 30, 29, 29, 35, 30, 30, 34, 36, 34, 33, 35, 35, 43, 39, 37, 43, - 41, 38, 43, 41, 44, 45, 42, 43, 46, 46, 43, 45, 40, 40, 38, 42, - 41, 41, 40, 35, 18, 4, 7, 18, 22, 18, 15, 23, 23, 23, 29, 32, - 30, 32, 35, 42, 41, 57, 81, 95, 115, 140, 154, 157, 167, 160, 154, 161, - 167, 171, 179, 187, 190, 192, 192, 193, 191, 182, 172, 182, 190, 187, 178, 180, - 188, 190, 188, 191, 188, 183, 179, 181, 187, 194, 198, 190, 188, 192, 193, 192, - 184, 185, 187, 191, 188, 188, 184, 183, 179, 180, 180, 179, 177, 175, 174, 172, - 171, 168, 167, 180, 171, 178, 183, 172, 164, 162, 157, 175, 158, 151, 151, 147, - 147, 146, 139, 135, 129, 117, 104, 91, 78, 65, 55, 45, 46, 49, 51, 48, - 44, 39, 34, 36, 23, 24, 29, 27, 28, 27, 18, 21, 43, 45, 37, 50, - 69, 81, 88, 85, 72, 85, 85, 84, 95, 91, 88, 90, 89, 91, 91, 89, - 89, 93, 94, 92, 92, 94, 94, 94, 94, 95, 94, 96, 94, 94, 94, 93, - 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 90, 33, 31, - 32, 33, 33, 33, 32, 32, 34, 30, 30, 34, 36, 35, 34, 36, 38, 43, - 39, 37, 44, 42, 38, 44, 40, 43, 43, 40, 41, 44, 44, 42, 45, 43, - 42, 43, 45, 44, 39, 33, 13, 10, 12, 15, 20, 15, 13, 17, 20, 20, - 25, 31, 31, 27, 30, 40, 54, 66, 92, 117, 130, 145, 161, 165, 170, 178, - 172, 166, 174, 180, 184, 193, 180, 184, 187, 188, 191, 191, 183, 173, 191, 200, - 194, 186, 190, 189, 186, 191, 190, 191, 190, 187, 189, 194, 196, 194, 180, 191, - 202, 201, 187, 178, 187, 202, 204, 202, 198, 193, 189, 188, 190, 194, 192, 189, - 189, 186, 188, 190, 190, 189, 184, 178, 184, 182, 173, 171, 176, 171, 181, 169, - 167, 166, 163, 164, 166, 155, 150, 154, 161, 163, 154, 136, 115, 98, 71, 62, - 50, 42, 40, 40, 38, 35, 35, 26, 28, 29, 20, 20, 28, 29, 18, 37, - 38, 27, 36, 53, 66, 76, 80, 73, 87, 85, 83, 98, 92, 88, 88, 89, - 91, 91, 89, 89, 93, 94, 93, 93, 94, 94, 94, 94, 94, 93, 94, 92, - 93, 93, 93, 93, 92, 91, 92, 92, 92, 92, 92, 92, 92, 92, 90, 90, - 90, 31, 30, 32, 33, 34, 34, 33, 32, 34, 30, 30, 34, 37, 35, 35, - 36, 38, 43, 40, 38, 44, 42, 38, 44, 39, 42, 42, 39, 40, 43, 44, - 41, 45, 43, 43, 44, 45, 39, 29, 20, 8, 12, 19, 22, 22, 13, 12, - 19, 15, 16, 23, 32, 33, 29, 41, 57, 80, 100, 125, 139, 147, 161, 171, - 162, 166, 179, 182, 181, 188, 188, 183, 186, 185, 187, 188, 189, 193, 196, 192, - 185, 185, 195, 193, 195, 206, 202, 199, 214, 198, 205, 208, 203, 200, 202, 203, - 200, 199, 205, 212, 212, 203, 197, 202, 213, 190, 192, 194, 196, 199, 204, 212, - 220, 201, 197, 195, 192, 195, 198, 200, 199, 200, 196, 196, 184, 174, 183, 196, - 190, 183, 176, 179, 179, 176, 180, 181, 170, 183, 174, 165, 157, 157, 162, 166, - 170, 133, 112, 85, 67, 58, 54, 48, 41, 37, 28, 31, 33, 22, 20, 29, - 33, 24, 28, 27, 30, 39, 37, 41, 59, 63, 65, 89, 87, 82, 92, 89, - 88, 88, 89, 91, 91, 89, 89, 93, 94, 93, 93, 95, 94, 94, 93, 94, - 93, 92, 91, 92, 93, 93, 92, 91, 90, 92, 92, 92, 92, 92, 92, 92, - 92, 90, 89, 89, 28, 27, 29, 31, 32, 32, 31, 31, 34, 30, 30, 34, - 37, 35, 35, 39, 38, 44, 40, 38, 44, 42, 38, 44, 40, 43, 43, 40, - 41, 44, 44, 42, 42, 41, 41, 42, 41, 33, 18, 7, 17, 15, 19, 25, - 27, 22, 17, 19, 18, 21, 29, 38, 41, 43, 60, 84, 106, 123, 144, 146, - 147, 165, 175, 163, 173, 182, 178, 173, 179, 182, 182, 188, 189, 189, 186, 185, - 189, 194, 193, 188, 198, 204, 198, 197, 204, 188, 179, 197, 198, 207, 210, 199, - 189, 189, 194, 197, 210, 198, 192, 197, 205, 204, 199, 195, 207, 207, 205, 199, - 193, 190, 191, 195, 209, 205, 199, 197, 197, 200, 202, 202, 193, 200, 206, 196, - 182, 189, 192, 177, 182, 179, 182, 185, 180, 183, 184, 172, 169, 167, 169, 170, - 170, 165, 159, 155, 171, 159, 144, 132, 121, 102, 74, 53, 46, 30, 31, 38, - 34, 30, 28, 22, 35, 20, 17, 35, 46, 26, 24, 47, 44, 56, 88, 87, - 76, 84, 83, 88, 88, 89, 91, 91, 89, 89, 93, 94, 93, 93, 95, 94, - 94, 93, 94, 93, 91, 90, 91, 92, 93, 92, 91, 90, 92, 92, 92, 92, - 92, 92, 92, 92, 89, 89, 89, 31, 35, 35, 32, 33, 36, 36, 34, 37, - 37, 38, 38, 38, 39, 39, 39, 43, 42, 41, 40, 39, 38, 38, 38, 44, - 42, 40, 39, 39, 41, 44, 45, 41, 42, 48, 42, 24, 17, 23, 22, 14, - 24, 32, 28, 23, 21, 16, 14, 17, 35, 44, 39, 43, 62, 94, 118, 138, - 144, 155, 163, 168, 172, 175, 177, 169, 169, 175, 182, 183, 180, 180, 184, 189, - 181, 176, 180, 191, 198, 198, 194, 195, 195, 195, 193, 191, 192, 195, 197, 196, - 197, 199, 201, 203, 204, 204, 202, 204, 198, 194, 198, 203, 203, 201, 199, 212, - 205, 212, 207, 188, 195, 209, 204, 200, 210, 213, 207, 202, 201, 197, 193, 195, - 203, 200, 187, 181, 188, 192, 190, 186, 176, 174, 176, 174, 182, 188, 181, 181, - 172, 165, 167, 176, 179, 172, 163, 161, 156, 154, 155, 156, 142, 120, 99, 68, - 49, 37, 38, 38, 28, 26, 33, 27, 28, 29, 27, 28, 30, 36, 41, 45, - 37, 45, 73, 86, 82, 78, 86, 92, 93, 90, 84, 84, 88, 93, 92, 92, - 93, 95, 94, 92, 92, 95, 96, 94, 93, 93, 93, 93, 92, 91, 90, 93, - 93, 93, 92, 92, 91, 91, 91, 92, 92, 92, 32, 35, 35, 32, 33, 36, - 37, 34, 35, 35, 35, 36, 36, 37, 37, 37, 40, 40, 39, 39, 39, 40, - 41, 42, 37, 41, 44, 45, 43, 42, 42, 42, 44, 36, 34, 27, 14, 12, - 16, 14, 19, 25, 25, 21, 22, 24, 22, 21, 29, 36, 45, 58, 79, 104, - 121, 128, 147, 154, 163, 170, 174, 178, 180, 180, 173, 168, 171, 179, 182, 180, - 180, 182, 180, 176, 174, 178, 186, 191, 189, 185, 192, 193, 194, 193, 191, 189, - 189, 190, 191, 192, 194, 196, 199, 201, 203, 204, 198, 198, 201, 203, 205, 203, - 203, 202, 205, 199, 208, 208, 199, 204, 212, 200, 203, 207, 206, 200, 198, 203, - 205, 201, 180, 196, 205, 199, 193, 190, 183, 173, 186, 178, 180, 174, 164, 164, - 174, 171, 184, 179, 176, 175, 176, 175, 168, 160, 159, 157, 152, 155, 158, 156, - 146, 133, 136, 98, 62, 49, 45, 40, 32, 27, 27, 23, 22, 29, 37, 38, - 33, 27, 38, 38, 45, 60, 75, 83, 83, 84, 84, 91, 92, 88, 85, 87, - 92, 92, 92, 93, 95, 94, 92, 92, 95, 96, 94, 93, 93, 93, 93, 92, - 91, 90, 93, 93, 93, 92, 92, 91, 91, 91, 92, 92, 92, 34, 37, 37, - 35, 35, 38, 39, 36, 37, 37, 38, 38, 38, 39, 39, 39, 37, 37, 38, - 39, 40, 42, 44, 45, 38, 42, 46, 46, 44, 42, 42, 44, 44, 29, 21, - 16, 11, 17, 22, 18, 28, 31, 29, 26, 27, 29, 28, 26, 33, 45, 59, - 82, 109, 132, 139, 136, 151, 158, 165, 172, 174, 176, 178, 178, 173, 168, 170, - 176, 180, 179, 179, 181, 176, 176, 178, 181, 184, 185, 184, 181, 187, 190, 192, - 192, 189, 186, 185, 184, 187, 188, 189, 192, 195, 199, 202, 203, 192, 196, 205, - 204, 202, 197, 198, 197, 212, 204, 207, 203, 199, 201, 205, 192, 206, 210, 212, - 213, 214, 213, 209, 203, 186, 193, 195, 188, 185, 188, 190, 188, 179, 178, 183, - 175, 160, 159, 174, 178, 171, 170, 173, 172, 172, 170, 166, 166, 168, 164, 161, - 160, 162, 159, 154, 147, 143, 143, 132, 105, 69, 43, 36, 39, 42, 32, 25, - 26, 30, 32, 30, 25, 31, 37, 42, 45, 58, 78, 84, 82, 80, 90, 94, - 91, 86, 87, 91, 92, 92, 93, 95, 94, 92, 92, 95, 96, 94, 93, 93, - 93, 93, 92, 91, 90, 93, 93, 93, 92, 92, 91, 91, 91, 92, 92, 92, - 34, 37, 38, 35, 35, 39, 39, 36, 40, 40, 40, 41, 41, 41, 42, 42, - 38, 38, 38, 39, 41, 43, 44, 45, 46, 45, 43, 42, 42, 43, 43, 41, - 32, 16, 13, 14, 12, 22, 32, 32, 31, 34, 36, 33, 32, 29, 28, 27, - 46, 69, 95, 111, 122, 134, 142, 146, 155, 161, 168, 172, 173, 175, 176, 175, - 174, 170, 172, 175, 174, 171, 174, 179, 178, 179, 181, 181, 181, 181, 181, 182, - 182, 184, 186, 186, 184, 183, 182, 183, 186, 186, 187, 189, 191, 195, 197, 199, - 193, 200, 204, 202, 198, 196, 195, 194, 218, 213, 207, 199, 195, 200, 205, 202, - 200, 199, 195, 194, 196, 197, 194, 189, 203, 201, 191, 176, 172, 181, 192, 197, - 182, 181, 186, 181, 165, 167, 181, 186, 171, 168, 168, 171, 173, 172, 171, 171, - 168, 168, 168, 169, 165, 159, 153, 146, 149, 148, 143, 133, 117, 97, 68, 45, - 39, 37, 34, 31, 27, 27, 29, 32, 27, 34, 40, 39, 44, 57, 72, 80, - 83, 90, 93, 90, 89, 90, 92, 89, 92, 93, 95, 94, 92, 92, 95, 96, - 94, 93, 93, 93, 93, 92, 91, 90, 93, 93, 93, 92, 92, 91, 91, 91, - 92, 92, 92, 35, 38, 38, 36, 36, 39, 40, 37, 40, 40, 41, 41, 42, - 42, 42, 42, 41, 40, 40, 40, 41, 42, 43, 43, 49, 44, 41, 42, 45, - 45, 38, 29, 12, 3, 8, 9, 9, 19, 30, 34, 26, 31, 33, 32, 30, - 29, 37, 47, 80, 103, 125, 135, 137, 142, 148, 154, 162, 166, 172, 175, 175, - 177, 177, 176, 174, 176, 180, 181, 173, 168, 172, 182, 181, 182, 181, 179, 177, - 177, 181, 184, 182, 183, 184, 183, 183, 184, 187, 190, 188, 188, 188, 188, 190, - 191, 192, 193, 199, 203, 203, 199, 199, 203, 203, 199, 205, 211, 208, 201, 201, - 207, 214, 221, 229, 219, 206, 201, 203, 207, 214, 218, 206, 205, 200, 191, 185, - 181, 179, 177, 194, 190, 191, 187, 174, 175, 183, 183, 190, 179, 172, 175, 177, - 175, 171, 171, 165, 166, 166, 167, 166, 163, 161, 159, 157, 151, 143, 136, 134, - 128, 112, 92, 42, 37, 34, 37, 40, 39, 35, 31, 27, 29, 34, 36, 33, - 35, 53, 74, 85, 90, 90, 88, 90, 93, 92, 87, 92, 93, 95, 94, 92, - 92, 95, 96, 94, 93, 93, 93, 93, 92, 91, 90, 93, 93, 93, 92, 92, - 91, 91, 91, 92, 92, 92, 35, 38, 39, 36, 36, 40, 40, 37, 38, 39, - 39, 39, 40, 40, 40, 41, 43, 42, 42, 41, 41, 41, 42, 42, 43, 41, - 42, 45, 46, 39, 25, 11, 5, 3, 11, 13, 9, 16, 27, 31, 29, 28, - 30, 34, 39, 51, 72, 89, 114, 123, 132, 139, 148, 156, 158, 153, 163, 167, - 171, 173, 175, 173, 175, 174, 176, 178, 186, 185, 180, 172, 178, 185, 184, 181, - 180, 176, 176, 175, 180, 181, 186, 184, 187, 184, 187, 187, 194, 196, 190, 189, - 191, 190, 191, 188, 189, 189, 195, 202, 202, 198, 201, 209, 211, 206, 195, 211, - 212, 207, 210, 208, 207, 215, 205, 201, 200, 203, 205, 201, 201, 203, 202, 200, - 200, 198, 195, 190, 186, 183, 193, 186, 190, 190, 183, 186, 191, 187, 190, 178, - 173, 179, 184, 181, 178, 177, 175, 169, 164, 161, 161, 164, 169, 173, 158, 161, - 162, 154, 142, 133, 132, 133, 92, 66, 41, 32, 39, 43, 38, 27, 30, 27, - 31, 33, 29, 26, 39, 58, 77, 85, 88, 89, 91, 93, 92, 87, 92, 93, - 95, 94, 92, 92, 95, 96, 94, 93, 93, 93, 93, 92, 91, 90, 93, 93, - 93, 92, 92, 91, 91, 91, 92, 92, 92, 35, 38, 39, 36, 37, 40, 40, - 37, 39, 39, 39, 40, 40, 40, 41, 41, 43, 42, 42, 41, 41, 42, 42, - 43, 40, 41, 42, 39, 33, 23, 14, 5, 11, 7, 15, 18, 12, 18, 28, - 31, 32, 29, 33, 48, 68, 88, 106, 124, 131, 134, 136, 141, 153, 162, 161, - 154, 161, 164, 168, 171, 173, 170, 173, 173, 176, 176, 182, 185, 188, 182, 184, - 186, 187, 183, 184, 181, 183, 181, 184, 182, 187, 187, 191, 189, 191, 190, 195, - 195, 192, 192, 196, 195, 196, 192, 191, 189, 193, 204, 208, 202, 201, 207, 209, - 205, 200, 216, 213, 207, 213, 209, 200, 206, 205, 207, 214, 222, 220, 209, 203, - 203, 205, 200, 197, 197, 198, 197, 199, 202, 190, 186, 194, 197, 191, 193, 199, - 195, 182, 175, 176, 185, 188, 182, 181, 185, 179, 171, 165, 162, 162, 167, 169, - 170, 179, 164, 154, 160, 167, 157, 140, 128, 139, 108, 73, 49, 41, 39, 37, - 33, 29, 30, 30, 27, 29, 32, 35, 39, 57, 75, 89, 92, 90, 89, 90, - 89, 92, 93, 95, 94, 92, 92, 95, 96, 94, 93, 93, 93, 93, 92, 91, - 90, 93, 93, 93, 92, 92, 91, 91, 91, 92, 92, 92, 35, 39, 39, 36, - 37, 40, 40, 36, 41, 39, 40, 40, 40, 41, 41, 43, 42, 42, 42, 41, - 41, 42, 43, 44, 43, 44, 40, 29, 14, 7, 9, 12, 14, 9, 15, 18, - 16, 23, 32, 32, 29, 26, 37, 63, 94, 116, 124, 130, 138, 146, 148, 149, - 152, 159, 163, 163, 165, 169, 173, 176, 176, 176, 176, 179, 174, 172, 173, 183, - 191, 191, 187, 184, 189, 188, 188, 189, 190, 190, 190, 185, 185, 188, 191, 192, - 192, 191, 191, 191, 192, 194, 197, 199, 199, 196, 193, 190, 198, 214, 224, 213, - 206, 205, 209, 204, 211, 221, 213, 204, 221, 220, 214, 219, 223, 214, 210, 205, - 200, 196, 203, 214, 210, 209, 208, 209, 205, 200, 194, 192, 200, 198, 204, 204, - 192, 190, 196, 192, 186, 184, 189, 197, 193, 180, 178, 183, 169, 165, 162, 165, - 169, 172, 169, 164, 173, 169, 168, 169, 153, 137, 140, 156, 132, 128, 118, 94, - 68, 49, 43, 45, 30, 35, 29, 21, 27, 41, 37, 23, 37, 65, 89, 94, - 87, 85, 86, 91, 92, 93, 95, 94, 92, 92, 95, 96, 92, 93, 93, 93, - 93, 92, 91, 90, 93, 93, 93, 92, 92, 91, 91, 91, 94, 94, 94, 35, - 37, 37, 37, 35, 35, 35, 33, 36, 34, 34, 35, 35, 36, 36, 38, 45, - 47, 46, 43, 42, 43, 43, 45, 48, 37, 25, 16, 15, 17, 18, 16, 11, - 13, 25, 26, 22, 29, 34, 27, 29, 42, 62, 92, 127, 135, 131, 135, 144, - 147, 152, 156, 159, 162, 166, 168, 170, 170, 171, 173, 175, 178, 181, 182, 171, - 177, 183, 184, 183, 182, 185, 189, 196, 188, 190, 192, 187, 187, 188, 176, 182, - 187, 192, 192, 188, 186, 190, 194, 186, 199, 207, 200, 188, 187, 194, 200, 201, - 202, 201, 196, 201, 207, 213, 210, 212, 206, 205, 204, 212, 213, 214, 210, 209, - 203, 207, 212, 209, 200, 199, 206, 211, 215, 215, 209, 204, 204, 204, 202, 206, - 205, 204, 201, 194, 189, 197, 206, 191, 192, 189, 183, 181, 184, 185, 181, 180, - 172, 163, 160, 166, 168, 167, 163, 169, 168, 165, 164, 159, 155, 151, 147, 149, - 147, 142, 132, 120, 101, 68, 37, 32, 36, 35, 26, 27, 33, 28, 18, 45, - 46, 58, 76, 89, 88, 85, 87, 88, 89, 91, 94, 94, 96, 96, 96, 92, - 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 89, 89, 91, 96, - 98, 98, 35, 37, 37, 37, 35, 35, 33, 33, 35, 35, 34, 34, 35, 35, - 35, 37, 47, 48, 46, 45, 46, 47, 46, 46, 35, 26, 17, 12, 12, 16, - 17, 17, 27, 20, 24, 24, 22, 29, 38, 35, 34, 59, 82, 107, 130, 139, - 139, 145, 146, 148, 150, 154, 158, 161, 163, 164, 173, 173, 174, 175, 177, 178, - 178, 179, 175, 179, 182, 183, 184, 184, 187, 190, 187, 179, 181, 187, 188, 192, - 193, 182, 188, 188, 189, 189, 188, 187, 187, 187, 187, 194, 196, 192, 188, 191, - 195, 197, 198, 203, 208, 208, 210, 210, 206, 199, 206, 208, 212, 218, 223, 224, - 220, 217, 202, 204, 209, 216, 217, 214, 215, 218, 205, 213, 216, 212, 208, 209, - 211, 212, 208, 201, 197, 202, 205, 200, 192, 188, 191, 194, 193, 186, 182, 183, - 184, 183, 179, 173, 168, 168, 171, 171, 166, 160, 169, 166, 163, 162, 162, 160, - 154, 152, 151, 152, 147, 141, 135, 124, 103, 83, 52, 38, 31, 35, 35, 23, - 21, 27, 31, 33, 39, 57, 73, 83, 87, 87, 87, 89, 92, 92, 94, 95, - 96, 95, 92, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 89, - 89, 91, 95, 97, 97, 35, 37, 37, 37, 35, 35, 35, 35, 37, 37, 37, - 37, 36, 36, 37, 39, 46, 45, 44, 44, 47, 47, 44, 41, 22, 17, 12, - 11, 14, 20, 21, 21, 21, 17, 27, 38, 36, 33, 33, 27, 45, 82, 108, - 122, 134, 141, 145, 151, 153, 151, 151, 155, 161, 164, 164, 162, 172, 173, 175, - 176, 176, 175, 174, 173, 178, 178, 179, 180, 181, 183, 187, 188, 184, 174, 178, - 185, 189, 196, 198, 186, 196, 192, 190, 191, 192, 192, 189, 186, 196, 196, 194, - 191, 194, 200, 200, 196, 200, 202, 201, 198, 198, 202, 204, 202, 204, 208, 212, - 214, 212, 210, 207, 206, 216, 220, 220, 213, 207, 202, 198, 193, 206, 214, 218, - 213, 208, 208, 209, 209, 208, 201, 198, 202, 205, 200, 191, 186, 187, 194, 196, - 189, 183, 182, 183, 183, 177, 173, 171, 173, 176, 174, 167, 160, 170, 166, 162, - 163, 165, 165, 159, 156, 154, 156, 152, 146, 143, 139, 133, 122, 91, 58, 34, - 34, 39, 33, 28, 28, 25, 25, 27, 37, 55, 76, 85, 89, 89, 91, 92, - 92, 94, 94, 94, 93, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, - 92, 92, 91, 91, 91, 93, 94, 94, 36, 38, 38, 38, 36, 36, 36, 36, - 36, 37, 37, 37, 36, 36, 36, 39, 40, 39, 40, 43, 46, 43, 34, 27, - 16, 14, 13, 16, 22, 26, 27, 26, 40, 28, 29, 32, 27, 29, 41, 48, - 59, 101, 126, 130, 139, 145, 148, 151, 160, 156, 154, 158, 166, 170, 169, 166, - 168, 169, 172, 174, 174, 173, 171, 170, 178, 176, 175, 176, 179, 182, 185, 185, - 194, 183, 184, 189, 192, 198, 198, 185, 193, 193, 193, 193, 192, 192, 190, 188, - 198, 198, 196, 195, 198, 203, 200, 194, 193, 196, 196, 193, 194, 200, 204, 205, - 205, 207, 207, 203, 198, 197, 201, 206, 207, 215, 216, 210, 210, 218, 220, 216, - 204, 207, 209, 207, 207, 209, 207, 203, 205, 204, 205, 202, 195, 189, 194, 203, - 178, 188, 193, 188, 180, 179, 180, 181, 175, 173, 172, 174, 176, 175, 168, 163, - 170, 165, 161, 162, 166, 167, 162, 159, 164, 163, 159, 151, 144, 139, 137, 135, - 115, 100, 72, 43, 32, 38, 37, 27, 29, 31, 29, 28, 39, 61, 79, 88, - 89, 89, 91, 92, 94, 93, 94, 93, 94, 92, 94, 92, 94, 92, 94, 92, - 95, 93, 95, 92, 94, 91, 93, 91, 93, 91, 93, 36, 38, 38, 38, 38, - 38, 36, 36, 37, 38, 36, 36, 37, 37, 35, 36, 38, 38, 40, 42, 41, - 35, 24, 16, 15, 17, 20, 22, 27, 29, 30, 31, 33, 31, 40, 44, 33, - 31, 42, 48, 77, 110, 130, 134, 146, 154, 153, 155, 161, 157, 154, 158, 166, - 170, 170, 167, 164, 166, 169, 172, 174, 174, 173, 172, 177, 175, 173, 174, 179, - 181, 182, 182, 199, 188, 190, 193, 192, 195, 194, 183, 187, 191, 194, 193, 189, - 187, 189, 192, 186, 192, 196, 195, 197, 199, 197, 193, 181, 193, 205, 210, 209, - 207, 201, 194, 202, 206, 208, 207, 204, 207, 215, 223, 225, 228, 221, 206, 198, - 201, 201, 196, 201, 200, 199, 201, 209, 215, 211, 203, 202, 203, 205, 203, 197, - 192, 197, 206, 173, 183, 190, 187, 180, 179, 181, 182, 176, 174, 171, 171, 173, - 173, 170, 167, 167, 163, 159, 160, 164, 166, 163, 161, 167, 165, 162, 155, 146, - 139, 137, 137, 122, 130, 118, 79, 45, 33, 38, 38, 32, 34, 32, 27, 27, - 44, 69, 88, 89, 89, 91, 92, 94, 93, 94, 93, 95, 94, 95, 94, 95, - 94, 95, 94, 96, 95, 96, 94, 95, 93, 94, 93, 93, 91, 93, 39, 39, - 39, 39, 39, 39, 37, 37, 37, 37, 36, 36, 37, 37, 35, 35, 38, 39, - 40, 37, 35, 27, 18, 15, 19, 21, 25, 27, 31, 32, 32, 34, 27, 32, - 44, 43, 36, 43, 59, 59, 98, 120, 132, 136, 152, 161, 159, 160, 157, 154, - 152, 154, 158, 162, 163, 162, 163, 165, 168, 171, 174, 175, 176, 176, 176, 176, - 177, 177, 180, 181, 182, 183, 192, 184, 190, 194, 191, 193, 193, 184, 189, 195, - 200, 198, 193, 190, 193, 198, 181, 189, 196, 197, 197, 200, 201, 200, 187, 197, - 204, 204, 201, 200, 198, 194, 196, 202, 208, 210, 207, 206, 208, 211, 198, 200, - 200, 198, 201, 211, 220, 224, 214, 210, 204, 202, 208, 213, 207, 196, 203, 198, - 197, 204, 209, 204, 196, 190, 177, 185, 191, 187, 183, 183, 185, 184, 177, 174, - 171, 170, 171, 172, 172, 172, 164, 162, 160, 160, 162, 163, 162, 162, 161, 159, - 159, 158, 154, 146, 145, 146, 144, 129, 118, 113, 94, 64, 43, 33, 33, 28, - 30, 26, 23, 30, 55, 79, 86, 88, 90, 90, 92, 94, 94, 94, 95, 95, - 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 94, 94, 94, 93, 91, - 93, 39, 40, 40, 40, 39, 39, 39, 39, 39, 39, 39, 39, 38, 38, 39, - 37, 36, 37, 34, 28, 22, 16, 17, 20, 23, 26, 32, 34, 35, 35, 38, - 41, 58, 55, 48, 37, 43, 82, 118, 126, 126, 137, 139, 143, 157, 159, 157, - 162, 153, 151, 149, 148, 148, 150, 151, 152, 159, 160, 162, 164, 167, 169, 171, - 172, 171, 174, 177, 177, 175, 174, 178, 181, 180, 178, 188, 194, 191, 192, 194, - 187, 195, 197, 199, 198, 195, 193, 193, 195, 189, 194, 196, 195, 195, 200, 202, - 201, 197, 200, 197, 189, 186, 192, 200, 205, 197, 200, 202, 201, 197, 194, 194, - 195, 221, 218, 216, 215, 212, 210, 213, 219, 216, 215, 210, 203, 202, 205, 203, - 198, 204, 196, 195, 201, 204, 198, 189, 183, 182, 187, 189, 186, 183, 184, 183, - 181, 177, 175, 174, 173, 174, 174, 174, 174, 162, 163, 163, 162, 160, 160, 162, - 165, 161, 157, 158, 162, 161, 154, 151, 153, 156, 133, 118, 126, 129, 107, 74, - 46, 39, 25, 24, 28, 27, 25, 41, 65, 84, 86, 90, 90, 92, 92, 95, - 96, 95, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 97, 97, 96, 96, - 94, 94, 92, 94, 40, 40, 40, 40, 39, 39, 39, 39, 40, 40, 40, 41, - 39, 40, 40, 38, 34, 33, 28, 21, 12, 10, 16, 26, 29, 33, 39, 41, - 41, 42, 45, 48, 47, 65, 84, 97, 117, 152, 167, 149, 150, 152, 148, 150, - 158, 153, 151, 161, 154, 153, 151, 148, 144, 144, 146, 148, 156, 156, 157, 159, - 161, 163, 165, 167, 164, 169, 174, 174, 170, 168, 172, 176, 177, 177, 191, 196, - 192, 191, 195, 189, 194, 192, 190, 189, 190, 188, 185, 182, 198, 197, 192, 187, - 188, 193, 195, 192, 191, 198, 201, 198, 195, 199, 205, 207, 201, 200, 197, 194, - 194, 196, 202, 206, 205, 200, 202, 208, 208, 201, 203, 212, 200, 205, 207, 202, - 200, 206, 212, 216, 200, 201, 202, 199, 190, 182, 184, 191, 187, 190, 189, 184, - 182, 183, 181, 177, 176, 176, 176, 176, 177, 177, 176, 175, 162, 165, 166, 164, - 159, 158, 163, 167, 167, 161, 160, 164, 164, 157, 151, 152, 140, 149, 148, 134, - 123, 118, 106, 84, 52, 27, 21, 33, 32, 23, 32, 53, 83, 86, 87, 90, - 92, 93, 95, 96, 95, 95, 97, 95, 97, 95, 97, 95, 98, 96, 98, 95, - 97, 94, 96, 94, 94, 93, 94, 41, 42, 40, 40, 40, 40, 39, 38, 38, - 39, 39, 42, 44, 42, 38, 32, 37, 24, 13, 11, 13, 18, 25, 34, 35, - 41, 46, 45, 49, 60, 71, 80, 121, 132, 145, 153, 156, 156, 162, 166, 155, - 155, 153, 154, 155, 156, 158, 159, 158, 159, 158, 155, 150, 146, 144, 145, 138, - 142, 147, 149, 150, 153, 157, 161, 164, 158, 159, 168, 174, 171, 174, 182, 181, - 177, 176, 181, 192, 195, 191, 186, 209, 205, 201, 196, 193, 193, 194, 196, 196, - 197, 199, 200, 195, 189, 192, 198, 187, 193, 200, 204, 202, 198, 194, 192, 195, - 198, 200, 200, 198, 198, 200, 203, 200, 205, 205, 203, 213, 226, 225, 214, 204, - 196, 192, 201, 211, 211, 204, 199, 210, 192, 182, 187, 192, 188, 185, 189, 187, - 185, 177, 177, 182, 175, 169, 180, 158, 173, 179, 170, 165, 170, 172, 167, 175, - 170, 166, 168, 171, 168, 156, 145, 157, 154, 158, 166, 169, 162, 157, 157, 152, - 150, 147, 144, 140, 136, 133, 124, 88, 38, 25, 41, 36, 23, 32, 53, 74, - 91, 91, 80, 85, 90, 92, 97, 95, 94, 93, 90, 94, 97, 96, 89, 94, - 93, 94, 93, 94, 94, 95, 95, 89, 96, 96, 40, 42, 40, 40, 40, 40, - 40, 39, 42, 44, 43, 41, 37, 36, 40, 42, 27, 15, 8, 14, 24, 29, - 33, 38, 36, 53, 72, 83, 94, 111, 128, 138, 152, 158, 164, 165, 161, 158, - 158, 159, 153, 153, 150, 150, 150, 150, 151, 151, 156, 154, 152, 152, 153, 151, - 147, 143, 138, 140, 140, 138, 137, 138, 143, 146, 152, 157, 167, 173, 170, 164, - 168, 177, 180, 178, 180, 185, 194, 197, 196, 193, 192, 192, 192, 193, 194, 195, - 197, 198, 196, 197, 200, 202, 199, 194, 196, 202, 201, 199, 196, 193, 191, 194, - 200, 204, 198, 201, 203, 203, 201, 200, 201, 203, 204, 211, 211, 203, 202, 209, - 211, 205, 195, 193, 196, 204, 207, 204, 200, 197, 194, 187, 189, 198, 200, 191, - 186, 188, 199, 193, 181, 176, 180, 177, 172, 176, 178, 171, 174, 184, 181, 166, - 158, 161, 163, 164, 162, 158, 153, 153, 158, 163, 160, 158, 160, 165, 167, 161, - 159, 162, 163, 153, 144, 142, 146, 145, 136, 121, 110, 90, 70, 42, 24, 30, - 39, 31, 61, 87, 98, 93, 95, 91, 83, 83, 88, 93, 94, 90, 89, 90, - 88, 85, 88, 88, 89, 89, 89, 89, 89, 91, 91, 98, 94, 38, 41, 41, - 42, 42, 41, 41, 42, 44, 43, 41, 41, 39, 38, 36, 33, 11, 10, 11, - 15, 23, 32, 49, 63, 101, 120, 139, 144, 141, 145, 152, 159, 159, 164, 167, - 166, 162, 158, 157, 159, 160, 159, 156, 154, 153, 153, 153, 153, 160, 156, 154, - 157, 162, 162, 156, 149, 148, 146, 143, 137, 133, 132, 134, 136, 143, 142, 146, - 152, 158, 165, 172, 177, 176, 177, 183, 187, 190, 192, 195, 195, 189, 190, 192, - 193, 193, 193, 192, 191, 194, 195, 199, 203, 201, 197, 198, 203, 197, 205, 215, - 221, 219, 212, 204, 199, 200, 202, 204, 204, 202, 201, 200, 200, 196, 205, 210, - 202, 195, 200, 206, 208, 209, 205, 201, 196, 190, 186, 191, 199, 203, 194, 188, - 187, 181, 172, 172, 178, 180, 177, 171, 168, 173, 177, 174, 170, 189, 172, 163, - 168, 167, 157, 150, 152, 159, 164, 169, 169, 164, 159, 158, 159, 158, 158, 160, - 162, 161, 157, 159, 165, 168, 160, 153, 149, 149, 146, 139, 127, 125, 124, 108, - 65, 38, 47, 48, 24, 47, 73, 86, 87, 92, 93, 92, 96, 81, 89, 94, - 91, 86, 86, 86, 85, 87, 87, 87, 87, 87, 87, 87, 89, 89, 97, 94, - 39, 40, 41, 41, 43, 43, 42, 43, 42, 36, 34, 41, 47, 42, 23, 5, - 11, 17, 24, 24, 23, 40, 78, 113, 125, 140, 156, 157, 155, 152, 153, 152, - 157, 159, 162, 160, 158, 156, 157, 159, 164, 164, 160, 159, 158, 158, 158, 158, - 161, 159, 159, 162, 165, 165, 160, 154, 156, 154, 150, 144, 138, 134, 132, 131, - 123, 127, 136, 144, 150, 156, 163, 169, 170, 174, 181, 184, 184, 184, 188, 191, - 193, 193, 194, 194, 193, 192, 191, 190, 192, 193, 197, 201, 199, 195, 195, 199, - 201, 201, 201, 199, 197, 197, 199, 201, 199, 201, 202, 202, 201, 198, 197, 193, - 190, 200, 208, 204, 200, 202, 207, 210, 191, 198, 209, 215, 208, 192, 181, 178, - 195, 189, 186, 189, 191, 191, 195, 201, 197, 199, 203, 202, 199, 203, 203, 192, - 184, 189, 184, 175, 177, 186, 182, 170, 167, 163, 162, 167, 173, 171, 161, 150, - 152, 156, 160, 159, 157, 154, 156, 161, 159, 165, 171, 164, 151, 142, 143, 143, - 133, 122, 120, 104, 79, 65, 53, 35, 52, 70, 77, 78, 85, 84, 82, 84, - 77, 83, 86, 84, 82, 84, 86, 84, 85, 85, 85, 84, 84, 84, 84, 84, - 81, 89, 86, 39, 42, 41, 41, 43, 43, 42, 43, 39, 38, 39, 42, 42, - 33, 15, 1, 22, 25, 31, 37, 46, 71, 109, 142, 137, 147, 152, 155, 157, - 158, 155, 150, 166, 165, 165, 160, 157, 152, 151, 151, 157, 156, 156, 156, 156, - 157, 158, 159, 155, 157, 159, 159, 157, 155, 153, 152, 153, 152, 150, 146, 141, - 135, 128, 124, 106, 117, 133, 144, 144, 139, 144, 155, 160, 166, 173, 176, 179, - 180, 184, 188, 188, 188, 188, 190, 192, 194, 197, 198, 195, 194, 196, 199, 198, - 194, 193, 197, 196, 196, 196, 194, 192, 193, 195, 198, 201, 200, 200, 200, 200, - 198, 196, 192, 193, 198, 204, 205, 203, 202, 200, 197, 214, 201, 187, 182, 184, - 191, 205, 217, 198, 194, 197, 206, 209, 200, 186, 176, 168, 163, 165, 157, 137, - 136, 140, 133, 133, 152, 164, 166, 173, 183, 183, 175, 175, 164, 153, 151, 158, - 163, 163, 160, 149, 156, 161, 160, 155, 153, 154, 156, 150, 160, 170, 167, 154, - 144, 144, 146, 144, 125, 128, 131, 114, 91, 70, 56, 41, 54, 59, 66, 79, - 81, 79, 79, 77, 75, 73, 70, 73, 78, 77, 73, 75, 75, 74, 74, 73, - 73, 72, 72, 73, 80, 77, 40, 43, 41, 42, 42, 43, 41, 42, 38, 45, - 47, 37, 21, 11, 13, 21, 27, 23, 27, 48, 77, 104, 125, 136, 162, 164, - 164, 161, 162, 165, 161, 153, 164, 163, 161, 159, 156, 154, 152, 151, 154, 154, - 154, 155, 156, 158, 159, 160, 159, 161, 162, 160, 156, 154, 154, 155, 153, 153, - 152, 151, 148, 141, 132, 125, 126, 96, 80, 97, 123, 134, 142, 153, 149, 155, - 163, 169, 175, 179, 185, 189, 186, 186, 186, 186, 187, 189, 192, 193, 198, 195, - 195, 198, 198, 195, 195, 198, 189, 196, 205, 210, 209, 203, 197, 194, 203, 201, - 199, 199, 199, 199, 198, 194, 185, 189, 194, 198, 201, 200, 196, 191, 188, 189, - 199, 212, 216, 205, 189, 178, 187, 180, 173, 169, 164, 150, 130, 115, 125, 104, - 99, 90, 64, 62, 75, 75, 71, 71, 80, 95, 102, 108, 127, 150, 167, 170, - 171, 167, 160, 156, 158, 160, 151, 159, 163, 161, 159, 158, 158, 156, 153, 153, - 155, 157, 160, 153, 147, 139, 142, 135, 136, 134, 125, 121, 112, 92, 64, 64, - 52, 47, 59, 67, 75, 85, 82, 79, 75, 72, 75, 79, 77, 70, 74, 73, - 73, 72, 72, 71, 70, 70, 67, 73, 69, 42, 44, 44, 44, 42, 42, 42, - 42, 41, 43, 38, 24, 9, 5, 15, 30, 25, 26, 38, 65, 97, 120, 133, - 141, 150, 154, 156, 154, 154, 161, 162, 161, 152, 152, 153, 154, 155, 155, 154, - 152, 156, 156, 156, 157, 158, 160, 161, 162, 167, 165, 162, 161, 160, 160, 160, - 159, 158, 156, 155, 154, 151, 146, 137, 131, 132, 70, 27, 43, 79, 100, 122, - 142, 143, 147, 154, 161, 168, 173, 177, 179, 184, 185, 186, 186, 187, 187, 186, - 186, 197, 193, 191, 194, 195, 194, 196, 200, 198, 195, 190, 186, 186, 191, 199, - 206, 203, 200, 196, 195, 197, 198, 198, 195, 185, 185, 187, 191, 193, 192, 190, - 189, 190, 185, 183, 185, 182, 172, 161, 155, 142, 136, 129, 124, 124, 123, 119, - 114, 81, 46, 42, 46, 25, 23, 37, 36, 45, 38, 35, 40, 44, 53, 78, - 106, 131, 143, 160, 169, 169, 163, 157, 154, 158, 162, 161, 158, 157, 161, 160, - 156, 158, 155, 153, 153, 157, 154, 149, 142, 143, 139, 140, 138, 132, 135, 134, - 119, 120, 113, 89, 64, 52, 43, 44, 57, 74, 76, 79, 78, 80, 82, 79, - 74, 77, 76, 76, 75, 74, 73, 72, 70, 62, 66, 62, 45, 44, 44, 44, - 44, 42, 42, 41, 44, 34, 19, 11, 10, 13, 16, 20, 29, 44, 64, 89, - 107, 125, 146, 163, 166, 173, 172, 165, 156, 155, 157, 157, 159, 159, 159, 159, - 160, 159, 156, 153, 155, 155, 155, 156, 157, 158, 159, 160, 166, 159, 153, 155, - 160, 163, 161, 157, 159, 156, 152, 150, 146, 142, 135, 128, 97, 54, 29, 38, - 44, 42, 73, 119, 144, 147, 151, 156, 161, 164, 165, 166, 169, 173, 179, 185, - 190, 192, 191, 191, 191, 186, 183, 186, 189, 188, 193, 198, 190, 194, 199, 202, - 202, 201, 200, 200, 199, 196, 191, 190, 193, 195, 196, 193, 198, 196, 194, 191, - 185, 179, 178, 180, 172, 162, 152, 146, 141, 135, 133, 136, 137, 141, 142, 142, - 141, 136, 132, 128, 70, 28, 28, 45, 30, 25, 31, 23, 26, 39, 41, 32, - 31, 42, 49, 47, 87, 92, 106, 129, 153, 167, 167, 162, 160, 162, 157, 152, - 153, 160, 160, 156, 158, 162, 163, 158, 152, 147, 151, 155, 154, 142, 146, 150, - 137, 125, 123, 122, 112, 124, 121, 105, 84, 59, 46, 51, 57, 64, 75, 78, - 76, 77, 76, 73, 72, 72, 71, 70, 70, 70, 69, 66, 57, 62, 59, 44, - 48, 51, 48, 45, 44, 44, 40, 44, 25, 8, 6, 12, 17, 17, 22, 27, - 55, 76, 91, 118, 141, 153, 167, 156, 162, 169, 167, 163, 159, 163, 165, 170, - 167, 164, 161, 159, 158, 158, 156, 154, 159, 154, 152, 157, 157, 155, 161, 160, - 156, 151, 151, 153, 155, 157, 157, 153, 157, 149, 139, 150, 126, 144, 116, 50, - 16, 25, 31, 31, 29, 28, 72, 106, 127, 148, 156, 157, 163, 167, 169, 175, - 169, 177, 185, 179, 179, 184, 182, 189, 182, 194, 194, 167, 162, 186, 197, 202, - 189, 183, 188, 194, 190, 184, 182, 185, 186, 185, 183, 181, 178, 176, 173, 165, - 162, 160, 158, 157, 156, 155, 155, 155, 153, 150, 149, 150, 151, 150, 151, 150, - 173, 129, 149, 150, 121, 145, 101, 17, 17, 20, 20, 20, 20, 20, 21, 27, - 33, 36, 34, 29, 29, 34, 40, 48, 53, 71, 89, 125, 154, 155, 170, 160, - 170, 166, 155, 154, 154, 157, 167, 156, 164, 169, 163, 159, 155, 157, 153, 149, - 146, 149, 152, 147, 137, 130, 128, 129, 135, 127, 119, 121, 104, 71, 46, 38, - 31, 48, 68, 72, 72, 72, 68, 70, 62, 68, 73, 66, 62, 68, 67, 59, - 56, 55, 44, 46, 47, 49, 49, 48, 43, 36, 20, 13, 11, 16, 19, 18, - 15, 20, 43, 74, 92, 108, 130, 143, 148, 156, 164, 167, 169, 169, 169, 167, - 170, 169, 171, 168, 165, 163, 161, 160, 159, 159, 157, 162, 157, 154, 158, 157, - 155, 159, 156, 152, 149, 150, 152, 153, 154, 155, 156, 135, 169, 137, 133, 130, - 127, 45, 24, 12, 28, 27, 28, 29, 22, 42, 44, 75, 113, 139, 155, 160, - 156, 147, 148, 147, 159, 168, 160, 161, 171, 174, 182, 165, 171, 175, 165, 163, - 161, 146, 155, 159, 163, 165, 165, 167, 171, 176, 168, 168, 170, 169, 168, 165, - 166, 163, 162, 160, 159, 158, 158, 158, 158, 159, 164, 161, 159, 158, 159, 160, - 159, 161, 162, 150, 163, 146, 149, 130, 141, 37, 19, 21, 21, 22, 22, 22, - 22, 24, 31, 33, 32, 31, 30, 30, 32, 33, 37, 42, 52, 53, 84, 121, - 133, 153, 158, 167, 163, 160, 166, 163, 151, 147, 154, 160, 163, 161, 158, 158, - 157, 154, 153, 149, 147, 146, 143, 137, 135, 139, 126, 136, 134, 130, 132, 126, - 111, 101, 76, 47, 38, 47, 56, 67, 75, 67, 75, 61, 61, 60, 54, 57, - 67, 64, 70, 63, 60, 45, 44, 47, 53, 55, 50, 34, 23, 6, 10, 16, - 23, 20, 15, 16, 26, 43, 75, 98, 119, 143, 153, 154, 161, 169, 166, 164, - 164, 167, 166, 167, 164, 168, 167, 165, 163, 162, 161, 160, 160, 158, 163, 157, - 154, 157, 155, 151, 155, 151, 148, 147, 149, 151, 150, 151, 149, 153, 134, 152, - 142, 116, 133, 68, 6, 17, 23, 35, 24, 25, 35, 26, 25, 36, 41, 48, - 56, 74, 94, 110, 115, 111, 108, 119, 123, 113, 110, 119, 124, 128, 101, 85, - 77, 78, 93, 98, 87, 64, 101, 137, 151, 151, 154, 158, 159, 166, 166, 166, - 167, 167, 166, 168, 167, 172, 171, 170, 169, 168, 168, 168, 168, 171, 169, 167, - 167, 168, 169, 168, 167, 168, 155, 155, 158, 141, 146, 89, 7, 22, 21, 22, - 21, 22, 23, 22, 25, 33, 32, 29, 28, 30, 31, 29, 27, 31, 37, 42, - 31, 50, 84, 101, 128, 149, 159, 159, 159, 168, 168, 161, 160, 153, 156, 157, - 156, 158, 160, 156, 151, 154, 149, 147, 147, 145, 141, 139, 142, 131, 142, 139, - 132, 131, 130, 129, 134, 116, 85, 62, 49, 42, 47, 57, 56, 66, 62, 71, - 75, 70, 72, 74, 60, 57, 53, 54, 49, 49, 52, 57, 53, 40, 22, 12, - 15, 16, 18, 20, 16, 13, 18, 31, 40, 73, 100, 125, 150, 158, 160, 166, - 167, 166, 164, 162, 162, 161, 161, 161, 166, 166, 165, 164, 163, 163, 161, 161, - 157, 162, 156, 152, 155, 151, 146, 151, 148, 147, 148, 148, 150, 149, 148, 145, - 149, 142, 129, 123, 129, 86, 15, 25, 25, 32, 33, 23, 24, 33, 32, 29, - 26, 27, 28, 28, 32, 35, 39, 39, 44, 39, 46, 48, 38, 33, 39, 40, - 44, 45, 45, 42, 42, 49, 50, 42, 44, 98, 150, 165, 166, 171, 174, 170, - 178, 177, 177, 177, 177, 176, 179, 177, 186, 185, 183, 180, 178, 176, 175, 175, - 173, 172, 170, 170, 171, 172, 171, 169, 167, 170, 137, 152, 153, 110, 31, 25, - 17, 17, 17, 17, 19, 22, 23, 25, 30, 31, 30, 29, 30, 30, 29, 28, - 32, 33, 40, 34, 42, 56, 67, 102, 121, 143, 155, 158, 163, 162, 161, 167, - 157, 157, 155, 154, 158, 160, 155, 147, 149, 147, 149, 153, 153, 147, 141, 140, - 139, 146, 140, 130, 127, 126, 129, 139, 127, 117, 109, 85, 49, 35, 40, 42, - 44, 49, 64, 67, 64, 69, 72, 58, 67, 68, 68, 62, 58, 50, 45, 35, - 22, 14, 15, 22, 19, 15, 16, 16, 15, 19, 32, 57, 85, 105, 127, 148, - 152, 153, 160, 165, 169, 169, 167, 161, 158, 161, 165, 164, 164, 164, 165, 165, - 164, 163, 163, 158, 163, 157, 153, 155, 150, 144, 149, 146, 145, 146, 147, 149, - 148, 144, 141, 141, 140, 134, 109, 124, 22, 17, 38, 28, 28, 24, 25, 24, - 23, 29, 28, 18, 25, 35, 39, 32, 23, 16, 12, 30, 21, 25, 32, 31, - 32, 38, 35, 24, 36, 40, 38, 41, 43, 47, 50, 86, 129, 164, 167, 166, - 177, 183, 179, 183, 182, 181, 178, 178, 176, 179, 180, 186, 185, 182, 180, 178, - 176, 176, 175, 175, 173, 172, 172, 173, 172, 170, 166, 165, 161, 157, 132, 156, - 34, 28, 28, 13, 13, 13, 15, 17, 21, 24, 27, 26, 30, 33, 32, 29, - 28, 30, 34, 34, 25, 34, 39, 42, 37, 42, 86, 99, 123, 139, 149, 160, - 158, 150, 150, 162, 160, 156, 154, 158, 160, 154, 145, 150, 147, 148, 153, 155, - 149, 143, 142, 141, 143, 136, 131, 133, 132, 133, 143, 122, 129, 136, 119, 78, - 53, 45, 39, 24, 22, 26, 24, 19, 30, 47, 49, 51, 60, 68, 66, 52, - 37, 26, 15, 8, 12, 24, 17, 13, 11, 16, 20, 19, 20, 29, 67, 90, - 109, 129, 148, 149, 151, 161, 159, 163, 168, 164, 158, 153, 157, 161, 161, 163, - 164, 165, 166, 166, 164, 164, 161, 166, 161, 157, 158, 153, 147, 150, 144, 143, - 144, 145, 147, 145, 142, 139, 131, 143, 126, 136, 50, 16, 31, 27, 24, 27, - 19, 33, 34, 20, 26, 24, 31, 28, 27, 22, 17, 16, 21, 31, 19, 7, - 9, 18, 20, 25, 28, 25, 35, 34, 21, 19, 31, 34, 40, 55, 113, 143, - 168, 169, 170, 178, 180, 172, 184, 183, 179, 175, 174, 175, 176, 176, 181, 181, - 180, 179, 179, 180, 181, 181, 178, 177, 175, 175, 175, 173, 170, 166, 156, 156, - 165, 142, 85, 11, 37, 11, 13, 14, 16, 19, 22, 24, 28, 29, 23, 29, - 34, 33, 29, 27, 31, 36, 37, 24, 31, 38, 42, 35, 37, 76, 107, 113, - 112, 119, 144, 159, 161, 163, 164, 163, 159, 155, 157, 159, 154, 146, 158, 150, - 145, 146, 149, 148, 147, 149, 143, 143, 135, 134, 137, 132, 126, 133, 136, 135, - 140, 131, 107, 84, 63, 38, 15, 6, 9, 11, 4, 6, 19, 24, 13, 27, - 42, 46, 31, 20, 15, 12, 7, 12, 22, 16, 14, 15, 19, 22, 20, 23, - 34, 64, 87, 107, 128, 148, 151, 152, 164, 154, 158, 161, 161, 157, 153, 153, - 154, 160, 162, 164, 166, 167, 167, 166, 165, 161, 167, 162, 158, 160, 154, 147, - 151, 144, 142, 141, 141, 141, 140, 137, 135, 127, 143, 116, 125, 2, 33, 24, - 21, 27, 32, 21, 37, 38, 23, 29, 20, 22, 19, 21, 25, 24, 16, 13, - 15, 30, 19, 23, 28, 24, 25, 31, 29, 22, 28, 29, 39, 53, 42, 40, - 61, 138, 161, 183, 187, 188, 191, 189, 180, 186, 185, 181, 177, 177, 176, 177, - 178, 181, 182, 182, 182, 183, 184, 185, 186, 181, 179, 177, 176, 176, 173, 169, - 164, 153, 161, 146, 138, 15, 29, 21, 11, 17, 19, 22, 24, 24, 25, 26, - 26, 23, 26, 29, 29, 27, 25, 26, 27, 34, 30, 36, 34, 40, 40, 33, - 56, 112, 115, 107, 104, 121, 140, 155, 170, 160, 160, 157, 153, 154, 156, 153, - 146, 160, 151, 144, 146, 149, 148, 147, 148, 144, 145, 139, 138, 137, 127, 120, - 130, 144, 138, 141, 138, 130, 118, 92, 57, 29, 10, 14, 27, 22, 13, 13, - 13, 20, 24, 29, 18, 7, 6, 17, 23, 16, 11, 13, 25, 22, 19, 19, - 17, 19, 28, 43, 65, 87, 107, 127, 145, 146, 145, 157, 159, 158, 160, 162, - 163, 160, 156, 154, 159, 162, 164, 166, 167, 168, 166, 166, 159, 165, 160, 157, - 158, 153, 146, 150, 142, 140, 138, 137, 138, 137, 135, 134, 136, 124, 129, 58, - 29, 20, 18, 28, 28, 39, 22, 28, 28, 21, 31, 14, 33, 23, 18, 23, - 25, 22, 19, 19, 19, 12, 18, 22, 15, 17, 26, 26, 29, 35, 31, 36, - 47, 40, 61, 107, 167, 176, 181, 177, 176, 180, 184, 184, 187, 183, 181, 178, - 176, 178, 179, 182, 183, 184, 183, 182, 182, 182, 182, 183, 181, 179, 177, 176, - 175, 171, 167, 159, 158, 157, 139, 90, 11, 32, 0, 30, 20, 23, 25, 25, - 25, 23, 23, 21, 27, 25, 25, 26, 27, 26, 23, 20, 25, 34, 43, 31, - 37, 44, 25, 26, 94, 120, 131, 122, 113, 109, 120, 140, 156, 158, 156, 153, - 153, 155, 153, 149, 154, 148, 146, 151, 154, 151, 144, 141, 139, 143, 142, 143, - 142, 132, 128, 142, 131, 133, 142, 150, 146, 142, 123, 89, 55, 19, 10, 24, - 25, 18, 20, 23, 26, 22, 20, 15, 17, 17, 17, 18, 19, 20, 20, 24, - 23, 24, 23, 19, 17, 23, 39, 80, 99, 109, 121, 145, 158, 160, 162, 158, - 162, 164, 164, 166, 165, 159, 151, 151, 153, 157, 163, 168, 171, 169, 167, 163, - 160, 158, 157, 154, 152, 146, 141, 147, 140, 143, 146, 136, 135, 134, 128, 150, - 106, 112, 35, 21, 33, 15, 23, 31, 32, 29, 32, 33, 32, 26, 18, 14, - 23, 24, 22, 23, 18, 18, 30, 22, 23, 22, 20, 19, 22, 26, 29, 31, - 29, 30, 47, 66, 77, 112, 158, 180, 183, 187, 187, 188, 187, 186, 186, 187, - 184, 184, 182, 180, 180, 178, 179, 184, 186, 185, 184, 184, 183, 182, 182, 182, - 185, 183, 176, 170, 170, 169, 163, 167, 137, 142, 38, 26, 15, 15, 17, 19, - 19, 29, 33, 24, 22, 24, 19, 30, 22, 29, 29, 20, 31, 39, 24, 31, - 33, 35, 37, 38, 37, 35, 34, 77, 122, 118, 126, 130, 126, 99, 125, 132, - 150, 162, 159, 153, 153, 159, 161, 159, 153, 151, 154, 153, 147, 143, 146, 146, - 144, 142, 142, 139, 135, 132, 134, 128, 139, 141, 137, 139, 138, 128, 112, 52, - 17, 23, 43, 31, 26, 28, 14, 26, 23, 22, 11, 10, 12, 12, 13, 14, - 17, 18, 22, 22, 23, 24, 21, 19, 27, 41, 67, 99, 116, 127, 138, 142, - 144, 154, 169, 169, 166, 161, 161, 163, 163, 158, 166, 165, 162, 161, 163, 165, - 165, 165, 162, 160, 158, 158, 156, 153, 148, 146, 143, 137, 139, 142, 135, 136, - 137, 130, 132, 126, 84, 25, 26, 26, 19, 23, 26, 26, 25, 25, 28, 26, - 20, 15, 18, 23, 20, 18, 20, 16, 14, 24, 19, 21, 23, 25, 27, 27, - 28, 28, 35, 31, 40, 86, 140, 163, 166, 174, 176, 179, 183, 184, 183, 182, - 184, 183, 189, 189, 187, 185, 184, 182, 182, 182, 182, 184, 183, 183, 183, 182, - 182, 182, 179, 179, 175, 171, 171, 173, 170, 161, 155, 141, 110, 11, 13, 15, - 12, 24, 17, 17, 21, 17, 11, 19, 28, 28, 12, 23, 37, 37, 27, 27, - 28, 21, 29, 31, 33, 35, 36, 36, 35, 32, 55, 115, 119, 124, 128, 125, - 120, 118, 121, 133, 143, 147, 149, 155, 158, 157, 155, 148, 145, 148, 149, 146, - 142, 144, 142, 144, 145, 143, 136, 131, 131, 136, 135, 140, 141, 143, 145, 144, - 130, 118, 98, 59, 41, 39, 24, 22, 29, 29, 34, 31, 28, 11, 10, 11, - 11, 12, 15, 20, 21, 18, 17, 20, 22, 20, 19, 27, 38, 88, 115, 131, - 140, 152, 155, 153, 157, 160, 167, 172, 172, 171, 166, 157, 148, 160, 160, 160, - 162, 166, 169, 169, 169, 159, 158, 157, 157, 155, 152, 147, 146, 142, 136, 137, - 140, 134, 137, 137, 128, 122, 138, 49, 21, 33, 24, 28, 24, 23, 23, 23, - 23, 25, 23, 18, 12, 19, 19, 15, 16, 23, 19, 15, 23, 34, 30, 25, - 22, 24, 26, 30, 32, 30, 51, 79, 121, 163, 177, 172, 172, 177, 179, 184, - 185, 186, 185, 187, 187, 189, 189, 187, 185, 185, 185, 185, 185, 182, 182, 182, - 182, 182, 181, 181, 181, 178, 175, 171, 169, 174, 178, 173, 161, 155, 148, 79, - 4, 13, 21, 10, 23, 31, 33, 26, 19, 26, 35, 30, 12, 19, 25, 21, - 19, 26, 29, 27, 28, 25, 26, 29, 31, 33, 33, 33, 32, 32, 95, 123, - 122, 127, 126, 140, 114, 122, 127, 133, 141, 151, 160, 161, 158, 159, 151, 146, - 148, 152, 151, 148, 147, 140, 146, 149, 145, 135, 131, 133, 139, 138, 136, 137, - 145, 149, 143, 131, 122, 103, 70, 41, 32, 25, 19, 21, 27, 19, 20, 18, - 9, 11, 14, 16, 18, 19, 22, 22, 19, 17, 20, 22, 21, 19, 25, 35, - 72, 105, 123, 130, 135, 138, 143, 155, 151, 161, 170, 175, 173, 166, 155, 144, - 151, 155, 162, 168, 173, 172, 166, 162, 158, 158, 158, 157, 153, 149, 144, 143, - 147, 142, 143, 141, 134, 135, 134, 123, 125, 114, 21, 23, 29, 25, 28, 19, - 23, 23, 22, 23, 24, 22, 18, 15, 17, 16, 13, 18, 29, 25, 20, 28, - 24, 22, 24, 28, 36, 39, 41, 40, 73, 112, 142, 157, 164, 164, 169, 182, - 177, 178, 183, 184, 186, 187, 187, 189, 186, 187, 187, 185, 185, 184, 186, 186, - 185, 184, 184, 183, 182, 181, 180, 180, 178, 178, 175, 173, 176, 179, 175, 166, - 150, 124, 41, 15, 18, 27, 16, 22, 9, 29, 31, 18, 21, 27, 21, 9, - 24, 36, 27, 20, 29, 27, 24, 37, 25, 26, 28, 31, 33, 34, 34, 34, - 25, 62, 127, 123, 128, 133, 143, 121, 133, 133, 135, 139, 148, 156, 159, 160, - 163, 156, 150, 150, 154, 155, 152, 148, 143, 148, 149, 145, 138, 137, 137, 138, - 137, 129, 129, 142, 149, 141, 132, 127, 115, 86, 48, 35, 39, 35, 28, 35, - 22, 22, 22, 4, 7, 12, 16, 19, 19, 18, 17, 25, 22, 23, 25, 26, - 23, 25, 32, 51, 93, 122, 132, 137, 140, 153, 173, 158, 161, 161, 158, 159, - 161, 164, 163, 167, 169, 171, 173, 172, 166, 156, 150, 161, 162, 163, 162, 156, - 150, 145, 144, 150, 147, 148, 145, 138, 139, 135, 117, 129, 63, 8, 29, 18, - 26, 22, 13, 22, 22, 22, 21, 22, 19, 17, 15, 16, 15, 13, 21, 32, - 27, 26, 36, 33, 44, 65, 86, 100, 103, 99, 94, 131, 154, 163, 166, 173, - 177, 177, 181, 170, 174, 178, 179, 181, 182, 184, 186, 186, 187, 187, 187, 187, - 186, 188, 186, 189, 188, 186, 185, 183, 181, 180, 179, 177, 180, 180, 176, 173, - 174, 172, 166, 146, 88, 13, 21, 12, 25, 26, 37, 76, 100, 84, 38, 10, - 5, 14, 31, 11, 37, 44, 40, 38, 22, 14, 31, 26, 27, 29, 31, 33, - 34, 35, 36, 32, 31, 120, 122, 128, 138, 131, 133, 134, 134, 133, 133, 134, - 139, 147, 157, 161, 156, 151, 149, 152, 154, 150, 145, 145, 146, 144, 140, 139, - 142, 138, 131, 132, 126, 128, 141, 149, 143, 135, 132, 139, 102, 52, 28, 33, - 33, 28, 32, 26, 26, 24, 7, 10, 15, 20, 22, 21, 20, 17, 22, 18, - 19, 21, 22, 19, 19, 25, 26, 48, 65, 88, 121, 137, 137, 139, 151, 156, - 159, 159, 159, 164, 167, 166, 180, 177, 172, 169, 166, 164, 160, 157, 164, 166, - 168, 167, 160, 154, 150, 149, 150, 149, 152, 149, 143, 143, 136, 114, 116, 28, - 16, 33, 19, 28, 22, 18, 18, 18, 19, 17, 17, 17, 16, 15, 16, 18, - 17, 23, 31, 25, 32, 53, 90, 98, 113, 127, 139, 148, 155, 159, 152, 162, - 163, 161, 169, 170, 168, 172, 171, 175, 179, 181, 182, 183, 184, 186, 187, 187, - 188, 189, 189, 189, 191, 190, 189, 188, 187, 185, 183, 181, 180, 179, 175, 180, - 181, 176, 171, 169, 168, 163, 168, 102, 35, 28, 15, 25, 32, 71, 119, 156, - 164, 149, 131, 86, 25, 0, 32, 32, 25, 28, 38, 35, 25, 25, 28, 28, - 29, 31, 32, 34, 35, 34, 36, 23, 97, 121, 130, 140, 127, 143, 135, 135, - 136, 134, 130, 130, 140, 152, 157, 158, 156, 153, 153, 155, 152, 148, 143, 144, - 139, 135, 137, 143, 138, 126, 129, 127, 133, 141, 148, 145, 140, 136, 131, 95, - 59, 40, 37, 34, 29, 22, 24, 24, 22, 11, 12, 17, 19, 21, 20, 20, - 21, 17, 15, 14, 17, 20, 17, 17, 22, 37, 39, 35, 55, 101, 128, 132, - 129, 138, 149, 159, 163, 164, 164, 161, 157, 170, 167, 164, 164, 165, 167, 167, - 167, 160, 164, 168, 168, 162, 157, 153, 154, 154, 154, 157, 153, 145, 143, 133, - 106, 72, 20, 26, 26, 25, 22, 23, 24, 17, 18, 18, 16, 16, 13, 14, - 16, 17, 20, 19, 25, 30, 28, 51, 85, 130, 131, 133, 133, 133, 141, 156, - 168, 162, 173, 175, 174, 175, 168, 168, 180, 175, 178, 182, 184, 184, 184, 185, - 186, 186, 186, 189, 189, 190, 189, 192, 190, 187, 185, 184, 184, 183, 182, 182, - 181, 176, 179, 178, 174, 173, 172, 168, 160, 176, 145, 81, 26, 24, 28, 26, - 111, 150, 161, 146, 141, 160, 144, 104, 94, 99, 69, 46, 40, 39, 40, 36, - 27, 27, 27, 28, 28, 29, 31, 32, 32, 32, 36, 63, 117, 131, 134, 138, - 143, 140, 139, 141, 141, 134, 129, 133, 143, 150, 157, 160, 157, 155, 157, 156, - 153, 142, 146, 143, 137, 137, 143, 140, 129, 126, 132, 138, 139, 141, 142, 141, - 135, 126, 99, 89, 77, 57, 49, 49, 35, 41, 39, 38, 13, 12, 11, 12, - 13, 14, 16, 19, 20, 18, 18, 22, 23, 23, 23, 26, 20, 32, 28, 25, - 41, 66, 98, 128, 139, 148, 151, 150, 150, 155, 160, 161, 158, 159, 161, 164, - 167, 167, 163, 161, 156, 159, 166, 166, 162, 158, 155, 157, 158, 158, 159, 153, - 145, 142, 127, 97, 30, 23, 27, 12, 25, 10, 18, 21, 18, 19, 20, 20, - 17, 16, 17, 20, 18, 22, 23, 26, 31, 35, 69, 114, 135, 141, 155, 156, - 152, 150, 155, 160, 170, 169, 166, 171, 181, 175, 173, 181, 171, 174, 179, 181, - 180, 180, 181, 182, 181, 183, 183, 184, 185, 186, 187, 187, 183, 183, 183, 184, - 184, 183, 183, 183, 180, 179, 176, 174, 178, 177, 172, 160, 147, 158, 101, 12, - 30, 32, 16, 134, 138, 162, 158, 153, 166, 152, 136, 155, 144, 130, 123, 97, - 43, 19, 25, 29, 25, 27, 27, 27, 28, 29, 31, 31, 27, 54, 40, 115, - 132, 130, 153, 141, 144, 140, 141, 143, 136, 126, 123, 128, 137, 148, 156, 152, - 151, 152, 153, 152, 142, 150, 150, 142, 138, 144, 143, 135, 124, 135, 142, 136, - 135, 138, 138, 130, 132, 104, 97, 78, 41, 37, 53, 44, 48, 45, 40, 16, - 11, 7, 10, 15, 20, 21, 20, 17, 11, 15, 18, 15, 21, 25, 18, 28, - 26, 19, 18, 17, 12, 33, 73, 128, 132, 137, 143, 147, 150, 153, 155, 164, - 160, 158, 159, 161, 164, 164, 162, 159, 160, 163, 162, 160, 159, 164, 165, 164, - 156, 149, 141, 146, 155, 123, 68, 22, 27, 25, 17, 18, 24, 24, 21, 24, - 21, 18, 17, 19, 24, 30, 32, 31, 29, 26, 28, 50, 83, 113, 122, 136, - 136, 142, 142, 143, 147, 153, 159, 162, 171, 176, 174, 173, 174, 175, 170, 177, - 180, 180, 176, 175, 180, 183, 183, 178, 184, 186, 185, 184, 185, 187, 188, 186, - 184, 181, 182, 185, 185, 184, 182, 180, 174, 175, 178, 172, 171, 173, 165, 156, - 106, 73, 36, 32, 24, 23, 108, 149, 145, 151, 162, 166, 160, 162, 166, 144, - 155, 155, 143, 119, 60, 16, 15, 21, 23, 35, 40, 32, 30, 38, 38, 43, - 37, 53, 98, 139, 138, 138, 150, 142, 149, 152, 147, 136, 132, 129, 126, 127, - 140, 155, 155, 153, 151, 151, 149, 146, 147, 146, 143, 138, 134, 132, 131, 136, - 133, 137, 143, 146, 141, 135, 134, 134, 112, 104, 64, 49, 52, 41, 53, 47, - 43, 42, 19, 20, 20, 20, 19, 17, 17, 17, 22, 15, 18, 21, 18, 21, - 24, 18, 14, 20, 24, 27, 26, 10, 7, 20, 61, 104, 130, 123, 127, 151, - 157, 143, 154, 155, 155, 153, 152, 153, 156, 159, 158, 162, 163, 160, 156, 155, - 163, 165, 169, 160, 156, 151, 146, 136, 89, 29, 38, 36, 35, 33, 27, 19, - 18, 24, 23, 23, 24, 26, 28, 25, 21, 16, 38, 27, 40, 75, 108, 118, - 126, 134, 132, 136, 144, 149, 149, 149, 151, 153, 160, 166, 170, 168, 169, 173, - 175, 173, 173, 176, 176, 174, 177, 181, 181, 177, 187, 180, 173, 170, 173, 177, - 175, 174, 185, 184, 182, 182, 182, 184, 183, 182, 181, 174, 175, 176, 168, 169, - 170, 164, 169, 124, 81, 27, 24, 31, 25, 88, 148, 135, 137, 152, 159, 150, - 146, 146, 129, 138, 144, 151, 153, 121, 61, 18, 40, 26, 17, 24, 35, 37, - 39, 41, 45, 33, 51, 77, 127, 140, 141, 143, 141, 147, 148, 143, 136, 133, - 129, 124, 133, 123, 136, 158, 159, 152, 153, 155, 150, 149, 148, 146, 143, 141, - 139, 138, 140, 137, 139, 144, 146, 141, 134, 131, 135, 118, 102, 62, 33, 45, - 39, 54, 53, 51, 50, 15, 21, 26, 26, 21, 16, 15, 16, 23, 16, 19, - 22, 18, 21, 24, 17, 15, 23, 21, 19, 25, 21, 14, 17, 25, 58, 100, - 127, 139, 142, 139, 134, 144, 149, 153, 151, 147, 146, 153, 160, 155, 159, 161, - 157, 154, 154, 163, 167, 148, 155, 162, 149, 119, 103, 93, 77, 38, 37, 28, - 20, 27, 37, 29, 11, 27, 23, 18, 18, 24, 30, 35, 36, 33, 37, 67, - 107, 134, 131, 130, 136, 135, 140, 147, 151, 152, 153, 157, 160, 159, 163, 165, - 163, 166, 171, 175, 176, 176, 178, 177, 176, 179, 182, 179, 173, 169, 170, 174, - 178, 180, 178, 173, 171, 183, 182, 180, 180, 180, 183, 183, 182, 182, 174, 174, - 174, 168, 169, 168, 162, 161, 124, 76, 18, 23, 37, 13, 29, 89, 136, 157, - 133, 128, 154, 162, 141, 152, 149, 144, 138, 142, 139, 90, 24, 10, 34, 36, - 25, 32, 41, 35, 28, 46, 28, 48, 50, 103, 142, 144, 138, 143, 146, 145, - 142, 139, 138, 133, 126, 133, 114, 125, 148, 152, 157, 161, 150, 154, 151, 147, - 146, 147, 147, 145, 142, 141, 138, 139, 143, 146, 141, 134, 131, 132, 126, 103, - 69, 15, 30, 22, 35, 38, 42, 46, 12, 17, 22, 23, 21, 18, 16, 16, - 20, 13, 17, 20, 16, 20, 23, 17, 19, 25, 17, 9, 18, 27, 28, 32, - 14, 18, 44, 83, 112, 121, 124, 128, 140, 144, 148, 147, 144, 144, 149, 155, - 152, 153, 155, 155, 156, 158, 165, 165, 170, 149, 141, 143, 147, 154, 151, 136, - 139, 108, 68, 38, 25, 23, 30, 38, 27, 29, 31, 30, 27, 24, 23, 22, - 49, 80, 109, 116, 117, 123, 131, 131, 136, 136, 139, 139, 141, 146, 156, 164, - 159, 161, 163, 163, 165, 168, 172, 174, 177, 179, 179, 175, 174, 175, 173, 169, - 171, 172, 173, 169, 163, 163, 175, 188, 178, 180, 181, 181, 182, 183, 181, 181, - 182, 174, 173, 173, 166, 167, 166, 161, 169, 151, 115, 56, 38, 40, 21, 29, - 39, 63, 107, 143, 145, 130, 132, 147, 140, 135, 141, 136, 137, 157, 151, 108, - 19, 37, 38, 32, 37, 34, 28, 29, 43, 34, 45, 40, 71, 143, 146, 143, - 148, 148, 145, 144, 145, 146, 140, 131, 129, 123, 128, 128, 129, 158, 170, 142, - 156, 150, 145, 144, 147, 148, 145, 140, 138, 135, 136, 141, 144, 140, 135, 132, - 122, 127, 107, 86, 14, 27, 16, 23, 24, 33, 40, 18, 17, 16, 18, 20, - 21, 18, 16, 17, 11, 15, 19, 16, 21, 25, 18, 7, 25, 23, 15, 20, - 22, 17, 17, 18, 26, 24, 23, 52, 101, 130, 130, 136, 138, 140, 140, 139, - 138, 140, 141, 150, 149, 148, 150, 156, 158, 157, 153, 157, 147, 152, 165, 170, - 172, 166, 151, 148, 131, 137, 148, 110, 41, 9, 20, 22, 25, 28, 26, 26, - 38, 58, 73, 102, 126, 138, 128, 116, 122, 133, 136, 129, 128, 130, 128, 128, - 131, 139, 148, 149, 152, 156, 160, 163, 164, 167, 170, 166, 172, 173, 167, 163, - 164, 167, 167, 166, 169, 176, 181, 176, 165, 161, 165, 171, 175, 180, 184, 184, - 182, 180, 179, 181, 174, 175, 175, 166, 167, 168, 159, 152, 156, 140, 80, 27, - 6, 10, 36, 26, 30, 64, 119, 153, 149, 137, 131, 143, 140, 154, 154, 143, - 148, 145, 122, 105, 63, 26, 27, 34, 26, 25, 42, 36, 43, 41, 44, 42, - 132, 146, 153, 150, 149, 146, 145, 147, 149, 143, 134, 133, 131, 132, 123, 121, - 146, 164, 151, 157, 152, 146, 145, 148, 148, 143, 138, 135, 132, 133, 139, 143, - 140, 136, 134, 117, 123, 107, 100, 24, 30, 27, 28, 26, 36, 40, 26, 21, - 17, 17, 20, 21, 19, 15, 19, 13, 17, 21, 17, 21, 25, 19, 5, 21, - 23, 14, 17, 18, 15, 19, 28, 34, 33, 29, 34, 55, 84, 103, 124, 127, - 133, 136, 138, 137, 137, 135, 149, 147, 145, 145, 149, 149, 147, 143, 137, 152, - 176, 176, 153, 144, 153, 158, 145, 144, 141, 134, 122, 96, 57, 26, 30, 40, - 54, 63, 77, 99, 130, 151, 141, 135, 133, 135, 134, 126, 127, 133, 128, 132, - 135, 137, 133, 129, 129, 132, 135, 139, 145, 153, 158, 159, 163, 168, 162, 167, - 169, 166, 164, 167, 169, 168, 165, 157, 160, 177, 187, 181, 166, 157, 166, 172, - 178, 182, 182, 180, 178, 178, 179, 172, 175, 177, 168, 168, 168, 159, 165, 166, - 158, 130, 90, 58, 41, 33, 23, 44, 50, 51, 85, 140, 163, 147, 127, 121, - 133, 144, 147, 152, 152, 143, 142, 119, 85, 40, 12, 26, 39, 30, 31, 46, - 37, 48, 31, 105, 148, 158, 150, 149, 146, 144, 145, 148, 143, 135, 140, 133, - 130, 136, 133, 125, 136, 160, 157, 154, 151, 151, 151, 149, 144, 140, 136, 132, - 133, 138, 143, 140, 136, 135, 130, 122, 104, 100, 27, 16, 23, 20, 16, 24, - 27, 23, 22, 20, 20, 20, 21, 20, 19, 23, 16, 19, 22, 18, 20, 23, - 14, 12, 19, 15, 8, 14, 18, 21, 33, 22, 18, 28, 41, 31, 11, 17, - 43, 90, 102, 117, 125, 129, 132, 136, 140, 145, 146, 146, 142, 139, 140, 146, - 151, 174, 166, 164, 164, 163, 172, 170, 152, 147, 162, 155, 137, 142, 147, 103, - 42, 80, 98, 125, 142, 147, 142, 136, 132, 141, 132, 128, 132, 136, 132, 128, - 127, 134, 138, 142, 143, 138, 134, 132, 134, 130, 131, 135, 141, 146, 147, 152, - 159, 160, 161, 162, 163, 167, 168, 161, 151, 151, 126, 106, 106, 119, 135, 156, - 176, 164, 168, 173, 175, 175, 175, 177, 179, 179, 173, 176, 179, 173, 172, 171, - 159, 153, 149, 141, 139, 134, 115, 78, 29, 44, 23, 17, 29, 36, 49, 97, - 147, 153, 154, 145, 139, 144, 144, 138, 138, 132, 144, 144, 81, 12, 27, 49, - 22, 29, 43, 39, 46, 41, 73, 157, 159, 151, 152, 149, 146, 146, 148, 144, - 137, 138, 142, 137, 143, 143, 110, 100, 137, 153, 153, 154, 155, 153, 150, 146, - 143, 141, 137, 137, 140, 143, 140, 135, 134, 140, 117, 104, 104, 40, 6, 18, - 5, 3, 13, 18, 10, 15, 19, 20, 18, 17, 20, 23, 24, 16, 18, 20, - 14, 15, 17, 10, 15, 16, 13, 11, 19, 14, 13, 20, 29, 37, 37, 28, - 27, 31, 30, 25, 49, 70, 93, 108, 113, 119, 131, 142, 140, 146, 148, 142, - 136, 138, 154, 168, 164, 162, 163, 159, 155, 164, 162, 142, 142, 135, 139, 146, - 142, 126, 128, 141, 146, 142, 137, 135, 136, 139, 139, 138, 127, 141, 145, 130, - 125, 138, 140, 131, 131, 133, 136, 134, 131, 133, 136, 141, 132, 129, 131, 134, - 137, 135, 141, 150, 158, 155, 152, 155, 163, 162, 145, 126, 78, 73, 73, 75, - 72, 75, 97, 123, 162, 167, 169, 169, 169, 171, 176, 180, 177, 172, 176, 181, - 175, 174, 172, 159, 155, 160, 154, 145, 139, 140, 129, 88, 56, 39, 36, 44, - 42, 33, 47, 73, 110, 133, 135, 130, 142, 144, 139, 145, 152, 120, 131, 117, - 44, 19, 40, 39, 34, 40, 44, 43, 57, 54, 166, 158, 154, 156, 153, 150, - 148, 149, 146, 141, 127, 155, 149, 139, 141, 105, 77, 101, 147, 150, 154, 155, - 153, 149, 146, 145, 146, 142, 140, 143, 144, 140, 135, 133, 135, 106, 105, 115, - 64, 16, 29, 9, 11, 20, 26, 17, 19, 19, 16, 16, 21, 23, 21, 20, - 20, 20, 19, 18, 17, 15, 15, 16, 17, 17, 15, 16, 16, 18, 23, 24, - 29, 30, 30, 32, 30, 24, 15, 33, 13, 62, 112, 99, 106, 137, 133, 137, - 148, 139, 128, 140, 159, 162, 157, 161, 156, 150, 151, 153, 151, 140, 132, 146, - 135, 127, 126, 127, 127, 137, 147, 136, 135, 132, 131, 130, 131, 132, 133, 137, - 135, 138, 137, 134, 130, 125, 122, 142, 136, 132, 133, 140, 146, 142, 138, 142, - 139, 137, 137, 140, 139, 139, 136, 138, 142, 135, 128, 141, 147, 108, 56, 64, - 74, 45, 53, 63, 75, 84, 93, 141, 163, 166, 157, 160, 166, 172, 178, 172, - 170, 170, 173, 178, 179, 173, 165, 163, 162, 157, 146, 142, 142, 141, 135, 115, - 87, 55, 37, 39, 43, 40, 31, 40, 97, 147, 148, 132, 130, 138, 140, 138, - 143, 152, 119, 105, 39, 12, 48, 44, 37, 44, 54, 38, 77, 157, 169, 149, - 161, 159, 147, 143, 152, 151, 140, 131, 142, 142, 141, 145, 130, 98, 78, 114, - 159, 158, 162, 157, 150, 154, 141, 145, 144, 140, 135, 137, 139, 133, 125, 123, - 111, 106, 111, 72, 21, 26, 40, 28, 38, 58, 18, 20, 19, 16, 16, 20, - 22, 20, 19, 19, 19, 19, 18, 17, 16, 15, 18, 16, 18, 16, 15, 17, - 20, 23, 21, 25, 29, 29, 31, 33, 32, 25, 34, 14, 35, 69, 85, 115, - 138, 117, 111, 104, 103, 127, 154, 158, 163, 181, 139, 137, 137, 141, 145, 145, - 142, 136, 136, 132, 132, 134, 133, 128, 127, 131, 134, 133, 134, 133, 134, 134, - 132, 132, 133, 132, 132, 131, 130, 126, 123, 121, 134, 129, 125, 129, 135, 140, - 138, 136, 142, 142, 141, 144, 147, 145, 143, 139, 138, 135, 130, 118, 111, 98, - 82, 63, 50, 65, 69, 55, 52, 60, 68, 75, 92, 127, 152, 161, 171, 172, - 167, 166, 178, 177, 176, 173, 171, 169, 168, 168, 161, 162, 161, 153, 150, 153, - 150, 147, 139, 140, 128, 94, 54, 31, 36, 45, 26, 42, 73, 112, 143, 154, - 143, 125, 157, 144, 141, 134, 146, 95, 21, 12, 34, 40, 42, 49, 52, 99, - 167, 171, 150, 157, 158, 152, 148, 152, 149, 140, 133, 139, 137, 137, 140, 127, - 96, 74, 33, 108, 138, 144, 142, 145, 161, 154, 141, 142, 141, 137, 140, 141, - 134, 125, 135, 115, 101, 107, 81, 41, 38, 35, 51, 56, 64, 21, 24, 23, - 19, 18, 22, 22, 20, 20, 20, 21, 21, 21, 20, 19, 19, 20, 18, 19, - 18, 17, 20, 24, 28, 22, 25, 27, 27, 31, 35, 35, 30, 34, 30, 27, - 21, 26, 52, 65, 47, 31, 60, 106, 155, 174, 149, 127, 129, 135, 138, 142, - 147, 150, 150, 151, 149, 135, 133, 136, 138, 136, 130, 123, 123, 126, 127, 131, - 134, 134, 131, 126, 124, 125, 125, 125, 123, 122, 119, 118, 119, 123, 124, 122, - 124, 128, 132, 132, 134, 138, 142, 146, 151, 155, 154, 151, 147, 143, 134, 134, - 129, 109, 74, 56, 53, 50, 50, 26, 40, 41, 60, 51, 91, 106, 136, 155, - 163, 176, 180, 178, 180, 179, 180, 179, 175, 170, 170, 174, 179, 165, 165, 167, - 163, 161, 163, 160, 155, 148, 153, 152, 137, 116, 100, 98, 103, 87, 59, 44, - 64, 92, 110, 131, 149, 137, 134, 130, 136, 143, 118, 43, 24, 29, 46, 40, - 51, 83, 132, 178, 173, 153, 153, 153, 155, 154, 151, 145, 141, 138, 137, 136, - 136, 136, 125, 99, 77, 44, 61, 84, 130, 162, 149, 156, 165, 140, 142, 142, - 139, 141, 141, 135, 126, 122, 108, 97, 102, 86, 59, 60, 51, 64, 61, 55, - 22, 25, 24, 20, 19, 21, 21, 17, 19, 19, 20, 21, 21, 21, 20, 20, - 20, 20, 20, 18, 18, 21, 27, 31, 26, 28, 28, 26, 28, 32, 31, 27, - 27, 38, 33, 17, 19, 34, 36, 32, 30, 96, 144, 148, 143, 139, 133, 132, - 145, 150, 156, 157, 155, 151, 149, 147, 140, 136, 135, 132, 132, 130, 130, 130, - 122, 125, 128, 131, 130, 128, 124, 122, 126, 123, 123, 122, 120, 120, 121, 121, - 119, 120, 123, 123, 125, 126, 127, 131, 133, 138, 146, 153, 159, 160, 160, 158, - 154, 140, 135, 138, 129, 102, 79, 70, 53, 71, 58, 31, 46, 50, 88, 77, - 125, 144, 150, 149, 159, 166, 171, 181, 184, 185, 184, 180, 176, 174, 178, 182, - 172, 174, 175, 174, 171, 168, 164, 161, 168, 161, 156, 156, 159, 156, 148, 136, - 138, 118, 103, 100, 93, 87, 101, 125, 135, 147, 144, 145, 131, 118, 50, 33, - 32, 48, 38, 68, 127, 164, 181, 174, 158, 149, 147, 154, 154, 147, 141, 141, - 140, 137, 140, 142, 135, 126, 111, 93, 80, 44, 40, 85, 144, 136, 138, 150, - 142, 144, 143, 139, 139, 139, 135, 128, 123, 121, 113, 105, 74, 46, 50, 43, - 51, 54, 52, 22, 25, 24, 20, 19, 21, 20, 16, 19, 19, 20, 21, 21, - 21, 20, 20, 20, 21, 23, 20, 21, 24, 29, 33, 30, 31, 30, 27, 28, - 32, 29, 25, 33, 37, 30, 30, 47, 47, 36, 34, 60, 124, 153, 128, 120, - 139, 150, 148, 141, 148, 154, 153, 147, 137, 132, 128, 134, 132, 130, 126, 127, - 129, 132, 132, 128, 127, 128, 129, 129, 129, 128, 128, 130, 127, 126, 126, 126, - 127, 128, 129, 123, 123, 127, 125, 125, 125, 127, 130, 133, 138, 144, 148, 151, - 153, 156, 156, 155, 146, 134, 130, 133, 136, 129, 119, 88, 86, 23, 99, 36, - 50, 92, 111, 117, 136, 147, 151, 160, 162, 164, 171, 191, 189, 188, 186, 184, - 181, 177, 175, 179, 180, 182, 184, 183, 179, 175, 173, 169, 169, 167, 163, 158, - 155, 157, 157, 157, 151, 146, 142, 134, 122, 108, 101, 112, 117, 117, 128, 130, - 131, 58, 21, 35, 46, 42, 95, 165, 181, 179, 176, 163, 149, 142, 149, 151, - 144, 139, 141, 137, 133, 144, 148, 134, 127, 123, 111, 69, 61, 60, 50, 99, - 122, 143, 145, 145, 147, 144, 137, 135, 136, 133, 128, 114, 115, 109, 101, 72, - 48, 52, 43, 45, 49, 49, 21, 24, 24, 21, 20, 21, 20, 16, 20, 20, - 21, 21, 21, 20, 19, 20, 22, 23, 24, 25, 25, 25, 28, 31, 31, 32, - 31, 30, 32, 37, 34, 30, 29, 32, 33, 38, 41, 32, 29, 43, 84, 121, - 141, 141, 145, 146, 137, 130, 141, 145, 149, 147, 141, 132, 127, 123, 123, 125, - 128, 127, 129, 131, 131, 126, 127, 124, 123, 123, 123, 124, 126, 127, 125, 125, - 125, 125, 126, 127, 128, 129, 127, 128, 129, 128, 128, 128, 129, 130, 133, 138, - 143, 146, 147, 147, 149, 150, 143, 152, 151, 139, 135, 143, 143, 134, 141, 129, - 152, 239, 63, 43, 105, 104, 132, 146, 153, 157, 166, 167, 169, 178, 181, 182, - 185, 188, 190, 189, 185, 182, 185, 185, 190, 193, 194, 191, 189, 188, 174, 174, - 170, 165, 161, 161, 165, 170, 163, 164, 158, 146, 143, 147, 142, 134, 131, 122, - 122, 128, 134, 139, 84, 47, 41, 55, 64, 126, 183, 180, 176, 178, 168, 153, - 142, 145, 148, 144, 139, 137, 135, 126, 141, 150, 134, 129, 133, 121, 75, 62, - 75, 59, 105, 115, 132, 141, 142, 145, 144, 137, 135, 135, 132, 128, 116, 108, - 97, 97, 78, 54, 52, 36, 24, 26, 27, 21, 24, 25, 22, 22, 23, 22, - 18, 22, 22, 22, 22, 21, 20, 19, 18, 23, 26, 28, 29, 29, 28, 29, - 29, 29, 32, 31, 30, 33, 37, 34, 30, 15, 25, 38, 44, 42, 49, 79, - 108, 136, 143, 143, 145, 155, 154, 147, 149, 143, 142, 141, 139, 137, 132, 130, - 129, 121, 125, 129, 127, 130, 133, 133, 126, 122, 121, 121, 121, 120, 121, 122, - 122, 121, 121, 122, 123, 126, 127, 128, 126, 129, 130, 130, 131, 133, 134, 134, - 133, 135, 142, 150, 154, 154, 152, 153, 153, 143, 155, 160, 151, 143, 142, 136, - 127, 130, 157, 121, 44, 139, 131, 143, 139, 143, 150, 146, 146, 157, 162, 170, - 184, 178, 184, 191, 193, 194, 192, 193, 194, 190, 188, 193, 197, 198, 192, 191, - 194, 200, 189, 176, 172, 172, 172, 165, 158, 154, 167, 173, 167, 156, 154, 153, - 151, 152, 134, 135, 113, 104, 88, 51, 23, 57, 86, 109, 157, 182, 170, 174, - 177, 169, 158, 146, 146, 149, 149, 140, 131, 140, 122, 137, 151, 138, 136, 140, - 122, 86, 42, 62, 72, 133, 116, 109, 120, 133, 139, 143, 139, 137, 136, 132, - 127, 134, 122, 107, 103, 72, 34, 25, 9, 9, 10, 18, 19, 23, 25, 22, - 22, 24, 22, 18, 23, 23, 23, 22, 21, 20, 18, 18, 21, 26, 27, 29, - 29, 28, 27, 28, 27, 30, 28, 27, 29, 32, 28, 24, 41, 32, 30, 34, - 48, 81, 116, 130, 129, 143, 143, 139, 145, 150, 149, 154, 139, 135, 130, 125, - 124, 124, 125, 125, 130, 132, 132, 127, 129, 135, 139, 133, 124, 122, 125, 126, - 125, 125, 123, 123, 126, 127, 128, 130, 133, 134, 134, 132, 131, 130, 130, 134, - 138, 138, 138, 136, 134, 144, 156, 164, 166, 163, 164, 163, 162, 157, 148, 144, - 146, 148, 147, 142, 148, 109, 137, 147, 127, 149, 131, 140, 139, 149, 151, 157, - 172, 177, 184, 197, 194, 201, 207, 202, 193, 186, 188, 193, 192, 189, 190, 195, - 193, 187, 186, 190, 181, 179, 177, 178, 181, 183, 180, 180, 181, 176, 169, 165, - 163, 163, 164, 166, 168, 148, 165, 149, 152, 124, 85, 45, 75, 116, 147, 175, - 175, 161, 171, 174, 170, 161, 152, 149, 154, 155, 143, 129, 147, 122, 134, 152, - 143, 144, 145, 119, 81, 56, 87, 86, 151, 146, 132, 123, 123, 132, 140, 142, - 139, 139, 135, 128, 106, 106, 105, 105, 68, 24, 29, 30, 41, 38, 43, 20, - 20, 22, 21, 21, 20, 20, 19, 19, 21, 23, 22, 19, 18, 18, 18, 19, - 22, 24, 26, 24, 24, 25, 27, 25, 31, 33, 28, 24, 25, 24, 23, 26, - 38, 27, 46, 76, 122, 125, 127, 138, 147, 137, 148, 130, 117, 90, 104, 106, - 115, 118, 119, 122, 130, 136, 137, 127, 129, 133, 134, 136, 135, 137, 137, 123, - 120, 122, 122, 123, 125, 127, 128, 123, 129, 132, 131, 131, 133, 134, 134, 140, - 143, 144, 142, 140, 139, 141, 144, 147, 158, 160, 160, 165, 162, 160, 165, 167, - 162, 154, 150, 146, 142, 139, 137, 136, 135, 135, 137, 141, 142, 141, 138, 149, - 154, 156, 152, 149, 152, 165, 177, 197, 205, 203, 188, 181, 186, 188, 182, 174, - 177, 183, 187, 183, 178, 181, 188, 184, 182, 179, 178, 176, 175, 175, 176, 175, - 185, 187, 178, 176, 184, 187, 183, 173, 168, 171, 171, 160, 148, 126, 97, 120, - 142, 164, 174, 176, 175, 172, 167, 180, 164, 152, 154, 162, 158, 145, 134, 142, - 149, 137, 124, 142, 170, 157, 116, 98, 40, 75, 118, 144, 139, 156, 163, 130, - 116, 129, 143, 137, 135, 135, 122, 118, 108, 106, 107, 50, 51, 46, 38, 49, - 62, 64, 19, 19, 19, 19, 22, 22, 22, 22, 18, 20, 22, 21, 19, 18, - 19, 19, 19, 22, 24, 25, 22, 22, 23, 24, 26, 31, 30, 25, 22, 22, - 21, 21, 46, 42, 45, 90, 103, 118, 117, 130, 118, 140, 151, 108, 77, 47, - 23, 42, 48, 71, 100, 119, 131, 136, 133, 128, 135, 136, 138, 137, 136, 133, - 133, 133, 126, 124, 124, 125, 126, 128, 129, 130, 129, 134, 136, 134, 132, 134, - 134, 134, 142, 145, 147, 147, 147, 145, 148, 148, 146, 154, 156, 156, 162, 159, - 155, 163, 158, 156, 154, 150, 147, 143, 137, 134, 134, 133, 134, 139, 145, 148, - 150, 149, 151, 152, 153, 156, 156, 156, 156, 159, 171, 187, 194, 189, 186, 186, - 184, 175, 177, 175, 178, 184, 186, 182, 180, 181, 182, 181, 181, 180, 181, 181, - 181, 181, 178, 187, 189, 181, 178, 184, 184, 179, 194, 186, 184, 181, 173, 173, - 166, 149, 148, 162, 173, 174, 172, 172, 172, 169, 178, 169, 164, 168, 170, 163, - 149, 138, 131, 143, 150, 148, 146, 146, 133, 118, 96, 50, 91, 128, 150, 143, - 154, 155, 169, 133, 122, 132, 140, 147, 142, 120, 114, 103, 103, 105, 53, 45, - 43, 43, 70, 79, 80, 18, 20, 21, 22, 22, 23, 24, 24, 19, 20, 23, - 23, 21, 21, 22, 23, 19, 22, 24, 24, 23, 23, 23, 25, 27, 29, 28, - 24, 23, 23, 24, 26, 47, 39, 61, 116, 118, 126, 127, 136, 139, 147, 129, - 38, 29, 27, 49, 94, 90, 109, 129, 136, 138, 136, 133, 129, 134, 135, 135, - 134, 130, 127, 127, 125, 129, 127, 128, 128, 130, 131, 133, 134, 132, 137, 139, - 136, 135, 137, 138, 138, 138, 143, 147, 148, 148, 146, 148, 148, 143, 154, 152, - 153, 158, 155, 151, 158, 152, 152, 152, 151, 150, 145, 138, 134, 134, 133, 135, - 138, 146, 152, 157, 159, 160, 155, 152, 155, 160, 163, 159, 155, 157, 173, 185, - 185, 183, 182, 180, 170, 177, 168, 170, 179, 188, 188, 182, 177, 179, 179, 181, - 182, 182, 182, 183, 183, 181, 189, 191, 185, 182, 185, 183, 177, 188, 181, 179, - 174, 168, 175, 180, 171, 168, 175, 180, 178, 174, 172, 170, 168, 172, 169, 170, - 175, 174, 163, 149, 140, 132, 138, 152, 163, 153, 134, 123, 126, 89, 70, 119, - 138, 145, 136, 153, 161, 171, 135, 115, 120, 132, 142, 135, 114, 114, 103, 103, - 99, 49, 35, 37, 42, 53, 61, 61, 20, 22, 22, 22, 22, 23, 23, 23, - 21, 22, 25, 25, 24, 24, 27, 28, 19, 20, 22, 25, 25, 24, 26, 27, - 22, 22, 21, 23, 25, 29, 31, 33, 45, 48, 75, 119, 112, 137, 143, 132, - 139, 138, 83, 23, 33, 31, 53, 77, 114, 126, 135, 133, 131, 134, 139, 143, - 128, 129, 130, 130, 129, 127, 128, 128, 129, 129, 130, 130, 132, 133, 135, 136, - 133, 138, 140, 137, 136, 139, 141, 139, 135, 141, 144, 148, 146, 145, 143, 145, - 145, 155, 152, 152, 156, 152, 150, 156, 153, 155, 155, 154, 152, 147, 142, 136, - 133, 132, 132, 137, 142, 151, 158, 162, 165, 157, 150, 148, 153, 159, 162, 161, - 163, 171, 176, 173, 173, 175, 176, 173, 171, 164, 164, 173, 183, 185, 183, 180, - 177, 178, 181, 181, 182, 182, 182, 182, 184, 190, 193, 190, 189, 190, 186, 180, - 189, 186, 189, 186, 178, 182, 187, 180, 168, 174, 181, 184, 183, 180, 176, 172, - 171, 167, 169, 176, 177, 167, 154, 144, 147, 139, 141, 155, 157, 146, 135, 135, - 98, 85, 124, 130, 142, 141, 152, 152, 131, 118, 115, 120, 126, 127, 121, 110, - 110, 108, 102, 75, 29, 20, 24, 25, 38, 50, 54, 22, 24, 23, 22, 21, - 20, 20, 19, 20, 21, 22, 22, 21, 23, 25, 26, 16, 17, 20, 23, 23, - 24, 28, 29, 24, 21, 20, 24, 29, 31, 33, 37, 53, 57, 84, 126, 117, - 141, 144, 128, 128, 117, 28, 28, 36, 27, 45, 52, 102, 115, 129, 131, 131, - 131, 131, 129, 129, 130, 133, 134, 133, 132, 135, 137, 130, 130, 130, 131, 132, - 134, 135, 136, 137, 141, 142, 137, 135, 138, 139, 137, 136, 141, 144, 147, 144, - 143, 141, 141, 145, 154, 150, 148, 151, 147, 145, 153, 157, 157, 155, 151, 149, - 144, 141, 136, 131, 130, 129, 132, 134, 142, 148, 155, 159, 155, 150, 145, 145, - 150, 153, 157, 165, 168, 166, 164, 165, 168, 171, 172, 171, 165, 163, 167, 173, - 175, 176, 180, 177, 177, 177, 177, 179, 179, 180, 180, 182, 187, 190, 192, 193, - 193, 189, 184, 189, 188, 193, 190, 180, 183, 187, 180, 169, 170, 175, 181, 185, - 185, 182, 181, 175, 166, 163, 170, 176, 172, 161, 151, 151, 146, 143, 147, 153, - 154, 144, 134, 111, 94, 118, 120, 149, 152, 142, 125, 109, 114, 120, 123, 128, - 125, 117, 114, 104, 107, 94, 45, 13, 13, 24, 14, 33, 50, 59, 25, 24, - 23, 22, 20, 19, 17, 17, 18, 19, 19, 18, 18, 19, 22, 21, 15, 16, - 20, 22, 23, 23, 27, 28, 28, 22, 22, 28, 32, 31, 32, 35, 45, 47, - 74, 128, 127, 137, 135, 138, 136, 95, 2, 25, 27, 36, 74, 99, 116, 126, - 134, 135, 134, 131, 127, 122, 132, 133, 135, 133, 131, 131, 133, 133, 131, 131, - 131, 132, 133, 135, 136, 137, 142, 145, 144, 138, 134, 135, 136, 134, 140, 142, - 144, 146, 143, 142, 140, 142, 141, 148, 145, 143, 146, 145, 141, 149, 158, 159, - 154, 151, 147, 142, 139, 135, 132, 131, 130, 128, 129, 131, 136, 143, 149, 154, - 156, 154, 150, 148, 149, 153, 155, 156, 159, 160, 162, 163, 163, 165, 171, 169, - 167, 167, 168, 166, 169, 175, 176, 175, 174, 173, 176, 177, 179, 180, 179, 181, - 185, 189, 192, 192, 189, 185, 184, 180, 182, 178, 170, 176, 183, 177, 171, 165, - 161, 166, 171, 174, 176, 179, 172, 161, 154, 159, 167, 166, 159, 151, 141, 152, - 156, 152, 147, 147, 138, 127, 98, 105, 140, 132, 143, 131, 123, 120, 122, 126, - 121, 119, 130, 128, 119, 113, 106, 106, 87, 35, 22, 24, 35, 23, 30, 48, - 59, 22, 23, 22, 21, 20, 19, 17, 17, 19, 20, 20, 18, 15, 17, 20, - 21, 18, 16, 20, 20, 21, 21, 23, 24, 29, 24, 23, 30, 37, 35, 34, - 36, 39, 60, 79, 117, 119, 134, 132, 144, 130, 63, 29, 44, 53, 67, 84, - 103, 116, 118, 120, 120, 126, 133, 138, 135, 132, 131, 132, 129, 128, 126, 128, - 129, 132, 132, 133, 133, 134, 136, 138, 139, 141, 145, 144, 138, 136, 138, 139, - 138, 138, 140, 141, 142, 139, 140, 140, 142, 135, 144, 141, 140, 145, 145, 143, - 154, 158, 161, 158, 156, 153, 147, 142, 137, 133, 131, 130, 126, 125, 125, 128, - 134, 140, 143, 147, 148, 148, 150, 153, 156, 150, 151, 154, 156, 158, 158, 160, - 161, 169, 166, 168, 170, 170, 166, 168, 172, 173, 171, 171, 170, 172, 175, 180, - 182, 179, 178, 180, 186, 190, 190, 187, 184, 187, 183, 185, 183, 177, 183, 188, - 180, 171, 161, 156, 160, 165, 166, 167, 169, 171, 162, 156, 158, 161, 159, 155, - 152, 145, 153, 157, 154, 145, 140, 131, 124, 92, 112, 152, 135, 133, 114, 118, - 136, 135, 143, 130, 119, 128, 125, 112, 114, 111, 96, 73, 36, 41, 33, 39, - 34, 40, 55, 65, 20, 20, 20, 20, 20, 19, 18, 18, 23, 24, 23, 19, - 18, 19, 23, 24, 19, 18, 21, 20, 19, 18, 20, 22, 27, 21, 22, 33, - 41, 40, 37, 39, 56, 98, 104, 103, 100, 131, 133, 138, 128, 35, 55, 56, - 91, 124, 123, 135, 129, 130, 132, 132, 136, 138, 134, 127, 132, 132, 132, 132, - 129, 130, 131, 133, 134, 134, 134, 135, 136, 138, 139, 140, 136, 140, 141, 138, - 138, 143, 146, 145, 134, 133, 137, 136, 136, 136, 139, 141, 134, 141, 141, 140, - 148, 148, 149, 159, 159, 162, 164, 164, 161, 155, 146, 138, 132, 133, 132, 127, - 125, 124, 126, 131, 127, 128, 127, 129, 136, 145, 155, 160, 160, 154, 149, 148, - 151, 153, 157, 162, 162, 162, 166, 173, 176, 174, 173, 173, 172, 170, 169, 168, - 171, 177, 183, 187, 183, 181, 182, 187, 191, 191, 188, 186, 181, 179, 185, 187, - 181, 184, 182, 169, 172, 164, 162, 171, 176, 172, 167, 165, 176, 171, 168, 168, - 165, 160, 159, 159, 159, 151, 145, 148, 148, 143, 132, 126, 113, 110, 128, 115, - 135, 129, 128, 139, 136, 155, 148, 129, 127, 118, 109, 117, 108, 79, 57, 31, - 47, 24, 26, 31, 43, 54, 59, 18, 24, 25, 23, 21, 23, 22, 18, 22, - 18, 14, 16, 21, 23, 22, 18, 23, 16, 15, 16, 22, 22, 20, 17, 31, - 29, 42, 37, 34, 38, 35, 47, 82, 111, 107, 105, 107, 109, 125, 131, 121, - 54, 67, 99, 105, 116, 117, 127, 126, 128, 133, 137, 139, 138, 136, 132, 134, - 132, 133, 132, 134, 135, 135, 135, 140, 142, 143, 142, 140, 139, 140, 141, 145, - 142, 140, 139, 140, 140, 139, 136, 144, 139, 135, 131, 130, 129, 130, 132, 137, - 140, 144, 143, 142, 143, 148, 157, 161, 167, 164, 162, 137, 154, 140, 135, 130, - 133, 134, 131, 130, 133, 141, 144, 140, 142, 135, 130, 134, 134, 138, 151, 152, - 156, 157, 153, 147, 145, 150, 159, 163, 173, 176, 170, 165, 168, 173, 173, 168, - 170, 171, 170, 171, 173, 176, 180, 181, 182, 185, 188, 191, 191, 188, 185, 189, - 186, 183, 180, 176, 174, 175, 179, 168, 162, 165, 179, 185, 179, 176, 180, 164, - 168, 172, 173, 170, 167, 166, 164, 159, 147, 149, 156, 146, 139, 133, 125, 118, - 105, 129, 128, 129, 143, 138, 146, 154, 156, 147, 131, 121, 119, 116, 108, 97, - 70, 50, 29, 29, 31, 19, 35, 38, 53, 61, 20, 24, 25, 23, 23, 23, - 22, 18, 22, 22, 20, 19, 18, 20, 24, 24, 24, 22, 19, 18, 18, 20, - 22, 22, 36, 32, 43, 35, 35, 41, 37, 47, 98, 122, 113, 109, 112, 110, - 123, 122, 119, 74, 90, 104, 105, 123, 128, 129, 129, 129, 133, 137, 137, 136, - 132, 130, 132, 132, 131, 133, 134, 135, 135, 135, 136, 137, 139, 139, 138, 138, - 140, 142, 142, 140, 138, 138, 139, 139, 138, 136, 143, 139, 135, 132, 131, 130, - 131, 134, 139, 138, 140, 142, 145, 148, 149, 153, 152, 159, 152, 155, 139, 150, - 132, 131, 135, 125, 125, 133, 136, 144, 143, 130, 130, 138, 141, 142, 146, 138, - 128, 131, 143, 147, 151, 150, 147, 146, 148, 152, 162, 173, 177, 172, 169, 171, - 175, 174, 173, 173, 172, 171, 172, 172, 174, 176, 177, 181, 187, 193, 196, 197, - 196, 196, 182, 183, 184, 183, 180, 175, 172, 171, 170, 163, 166, 180, 185, 176, - 166, 163, 174, 176, 177, 173, 167, 161, 158, 155, 156, 149, 154, 159, 146, 137, - 134, 129, 110, 105, 133, 136, 138, 149, 145, 152, 148, 150, 144, 129, 121, 121, - 116, 108, 95, 58, 40, 27, 25, 28, 20, 30, 41, 55, 60, 20, 26, 27, - 22, 22, 25, 22, 19, 23, 25, 25, 22, 17, 18, 22, 28, 21, 22, 21, - 21, 18, 20, 27, 31, 32, 27, 36, 30, 31, 40, 36, 48, 111, 131, 117, - 112, 118, 115, 123, 116, 109, 90, 106, 106, 103, 125, 134, 126, 132, 132, 133, - 135, 135, 134, 130, 129, 132, 133, 134, 135, 134, 135, 136, 137, 134, 136, 138, - 138, 139, 140, 143, 146, 141, 139, 138, 138, 140, 140, 139, 137, 140, 137, 136, - 134, 133, 132, 135, 135, 140, 137, 138, 142, 148, 151, 151, 149, 146, 157, 144, - 147, 143, 142, 126, 125, 127, 119, 131, 134, 123, 133, 151, 149, 142, 148, 145, - 143, 149, 145, 137, 139, 134, 137, 142, 147, 149, 148, 146, 148, 162, 170, 174, - 173, 172, 173, 174, 173, 177, 174, 173, 172, 172, 172, 172, 171, 171, 177, 184, - 187, 185, 182, 181, 181, 181, 181, 180, 178, 174, 171, 168, 165, 169, 163, 167, - 182, 190, 185, 176, 172, 170, 171, 171, 168, 164, 161, 159, 157, 156, 153, 160, - 162, 145, 135, 131, 126, 101, 110, 138, 143, 145, 151, 148, 155, 145, 148, 141, - 127, 119, 120, 113, 102, 91, 41, 34, 32, 24, 28, 25, 31, 54, 65, 64, - 22, 26, 26, 24, 22, 25, 23, 20, 23, 23, 25, 23, 21, 19, 21, 23, - 17, 18, 20, 21, 25, 29, 33, 38, 29, 24, 36, 30, 30, 40, 38, 54, - 112, 130, 115, 115, 125, 127, 130, 120, 107, 100, 108, 110, 108, 127, 137, 127, - 132, 131, 131, 132, 132, 132, 130, 130, 135, 133, 134, 135, 136, 136, 138, 137, - 139, 141, 143, 143, 143, 145, 147, 150, 140, 139, 139, 140, 142, 142, 141, 139, - 136, 135, 134, 133, 133, 133, 136, 136, 141, 142, 142, 146, 148, 149, 148, 145, - 146, 159, 145, 144, 145, 132, 124, 123, 130, 122, 139, 145, 125, 126, 139, 135, - 149, 152, 148, 143, 153, 153, 149, 151, 137, 137, 140, 145, 150, 151, 148, 146, - 160, 166, 171, 173, 174, 173, 173, 173, 179, 176, 174, 172, 173, 174, 172, 171, - 182, 189, 196, 197, 192, 186, 185, 186, 190, 186, 178, 169, 165, 166, 166, 164, - 154, 154, 160, 173, 181, 179, 176, 176, 164, 164, 164, 162, 161, 160, 159, 157, - 160, 155, 159, 160, 144, 135, 127, 117, 98, 119, 140, 144, 147, 146, 145, 153, - 148, 147, 139, 124, 116, 114, 107, 95, 85, 31, 34, 38, 24, 30, 35, 38, - 41, 51, 49, 22, 27, 26, 23, 21, 25, 24, 21, 22, 20, 22, 23, 25, - 22, 18, 14, 20, 18, 19, 25, 34, 37, 35, 31, 30, 29, 41, 32, 28, - 36, 36, 57, 109, 131, 119, 122, 134, 137, 139, 129, 122, 111, 107, 119, 123, - 127, 132, 128, 129, 128, 128, 129, 130, 132, 133, 131, 135, 136, 136, 138, 139, - 138, 141, 139, 144, 146, 148, 148, 147, 146, 147, 148, 138, 137, 137, 138, 140, - 140, 138, 136, 134, 134, 134, 134, 136, 137, 140, 141, 144, 147, 151, 152, 149, - 146, 147, 146, 142, 154, 143, 141, 141, 126, 130, 115, 79, 70, 91, 124, 143, - 151, 149, 131, 137, 149, 153, 152, 161, 159, 148, 145, 146, 143, 141, 143, 148, - 150, 147, 146, 157, 161, 166, 170, 171, 170, 171, 172, 178, 176, 173, 172, 174, - 175, 175, 175, 177, 184, 193, 195, 192, 189, 189, 191, 192, 189, 179, 168, 164, - 166, 164, 158, 157, 164, 178, 189, 190, 184, 179, 179, 170, 168, 166, 163, 160, - 158, 155, 152, 159, 151, 151, 152, 143, 138, 128, 112, 98, 128, 140, 142, 149, - 144, 147, 155, 146, 144, 134, 121, 112, 111, 102, 88, 69, 27, 38, 41, 23, - 28, 38, 48, 58, 71, 70, 23, 27, 25, 22, 23, 25, 24, 21, 23, 19, - 18, 21, 23, 22, 15, 10, 26, 25, 25, 28, 34, 35, 29, 22, 30, 27, - 38, 29, 23, 29, 26, 43, 108, 136, 128, 133, 141, 140, 143, 134, 133, 120, - 104, 122, 131, 122, 126, 125, 127, 126, 128, 129, 131, 133, 134, 135, 135, 136, - 137, 138, 139, 140, 141, 142, 145, 146, 149, 149, 147, 144, 143, 142, 134, 134, - 134, 135, 137, 136, 134, 131, 132, 133, 134, 136, 139, 141, 144, 145, 147, 152, - 156, 154, 148, 145, 148, 149, 136, 145, 138, 135, 137, 127, 140, 95, 12, 17, - 34, 66, 101, 121, 136, 149, 143, 156, 155, 148, 153, 155, 150, 151, 150, 145, - 141, 140, 143, 145, 143, 145, 156, 157, 160, 167, 169, 168, 170, 172, 175, 176, - 176, 174, 174, 174, 177, 179, 175, 179, 184, 184, 181, 178, 177, 178, 185, 187, - 184, 176, 172, 172, 162, 150, 155, 168, 186, 200, 204, 198, 190, 186, 168, 167, - 165, 165, 165, 164, 161, 156, 154, 145, 143, 145, 140, 141, 132, 113, 97, 135, - 139, 141, 153, 146, 151, 155, 138, 138, 131, 118, 109, 105, 91, 75, 50, 26, - 39, 36, 22, 30, 40, 52, 61, 71, 71, 23, 27, 27, 22, 23, 25, 25, - 22, 24, 22, 20, 20, 19, 18, 15, 14, 30, 30, 31, 30, 31, 30, 26, - 22, 27, 19, 27, 21, 23, 30, 22, 31, 102, 136, 136, 138, 142, 137, 140, - 134, 131, 127, 106, 121, 132, 121, 131, 129, 128, 129, 131, 133, 134, 135, 135, - 135, 138, 138, 139, 140, 141, 143, 144, 142, 141, 144, 148, 150, 148, 144, 141, - 139, 136, 135, 135, 137, 137, 136, 133, 130, 136, 137, 139, 142, 146, 148, 151, - 152, 151, 152, 153, 152, 153, 152, 155, 152, 140, 138, 135, 134, 137, 130, 143, - 60, 8, 26, 24, 28, 44, 48, 68, 113, 143, 158, 155, 143, 143, 150, 155, - 162, 152, 149, 145, 143, 144, 145, 146, 147, 156, 155, 157, 165, 168, 167, 170, - 174, 173, 176, 180, 177, 171, 170, 176, 182, 191, 191, 190, 188, 185, 182, 179, - 178, 180, 185, 183, 176, 175, 176, 166, 152, 150, 154, 162, 174, 184, 188, 185, - 179, 163, 162, 162, 164, 167, 166, 162, 157, 153, 146, 144, 142, 135, 137, 131, - 114, 97, 141, 137, 140, 155, 144, 147, 148, 133, 135, 130, 118, 107, 94, 72, - 49, 38, 29, 36, 28, 27, 40, 42, 56, 76, 88, 89, 25, 27, 26, 23, - 24, 27, 27, 24, 25, 25, 25, 20, 16, 15, 17, 23, 26, 29, 29, 28, - 25, 24, 26, 28, 30, 18, 23, 22, 33, 42, 30, 35, 90, 129, 134, 139, - 139, 132, 138, 135, 127, 138, 115, 125, 137, 133, 148, 144, 135, 134, 136, 138, - 138, 138, 137, 135, 138, 138, 139, 140, 142, 141, 142, 142, 140, 145, 151, 154, - 151, 146, 142, 139, 138, 138, 138, 139, 140, 139, 135, 132, 137, 141, 144, 147, - 152, 154, 155, 157, 154, 150, 149, 149, 156, 159, 158, 154, 148, 137, 136, 138, - 138, 136, 144, 32, 7, 30, 21, 24, 50, 41, 37, 74, 121, 144, 154, 148, - 148, 150, 147, 149, 152, 151, 150, 149, 149, 149, 151, 152, 157, 154, 156, 164, - 168, 169, 171, 178, 175, 180, 185, 181, 172, 169, 175, 183, 183, 182, 180, 181, - 182, 182, 181, 180, 184, 186, 181, 172, 173, 179, 174, 161, 181, 170, 159, 160, - 173, 185, 187, 182, 168, 166, 164, 164, 163, 158, 151, 143, 156, 150, 151, 144, - 132, 133, 128, 112, 96, 143, 133, 135, 151, 135, 134, 133, 133, 134, 130, 118, - 102, 82, 52, 23, 33, 33, 35, 22, 34, 51, 46, 58, 69, 82, 86, 26, - 29, 31, 31, 32, 30, 30, 27, 32, 27, 24, 21, 20, 20, 23, 23, 21, - 20, 20, 22, 22, 24, 27, 27, 26, 27, 28, 27, 25, 25, 27, 33, 79, - 129, 132, 125, 130, 129, 138, 142, 137, 136, 124, 122, 136, 144, 147, 156, 144, - 145, 144, 144, 140, 139, 138, 137, 140, 133, 132, 136, 140, 139, 139, 141, 151, - 152, 149, 148, 146, 143, 139, 135, 128, 128, 129, 131, 135, 137, 135, 134, 139, - 143, 146, 149, 151, 152, 152, 153, 163, 158, 152, 148, 147, 149, 150, 149, 151, - 133, 139, 134, 136, 133, 123, 7, 15, 42, 31, 34, 36, 52, 41, 53, 99, - 150, 158, 143, 138, 155, 131, 148, 146, 152, 152, 147, 151, 162, 158, 146, 162, - 160, 157, 155, 161, 172, 180, 184, 188, 188, 184, 180, 175, 176, 180, 183, 183, - 187, 191, 190, 185, 180, 178, 179, 186, 183, 180, 181, 184, 180, 172, 165, 161, - 170, 168, 145, 173, 170, 176, 178, 162, 158, 163, 164, 155, 156, 160, 154, 155, - 141, 147, 144, 134, 137, 134, 108, 101, 131, 127, 116, 132, 132, 121, 131, 130, - 122, 101, 77, 59, 48, 36, 27, 32, 30, 28, 29, 36, 48, 61, 67, 78, - 73, 66, 24, 27, 28, 29, 28, 28, 28, 26, 29, 27, 27, 25, 26, 25, - 26, 26, 17, 17, 17, 19, 21, 24, 26, 27, 28, 29, 30, 29, 26, 24, - 26, 31, 77, 124, 129, 125, 130, 130, 143, 148, 147, 145, 133, 129, 142, 145, - 144, 151, 148, 151, 153, 153, 148, 142, 140, 137, 141, 135, 133, 134, 135, 134, - 131, 135, 148, 149, 149, 148, 144, 141, 138, 134, 135, 135, 138, 137, 133, 133, - 133, 138, 146, 149, 149, 150, 151, 152, 153, 154, 156, 155, 154, 154, 154, 152, - 148, 143, 141, 131, 135, 134, 140, 130, 111, 10, 31, 34, 25, 46, 54, 60, - 42, 45, 77, 153, 161, 150, 145, 149, 131, 144, 145, 151, 155, 152, 159, 167, - 164, 152, 155, 152, 153, 155, 161, 170, 178, 180, 181, 182, 180, 177, 173, 176, - 182, 188, 192, 193, 193, 190, 185, 181, 183, 184, 192, 188, 185, 185, 187, 184, - 177, 168, 160, 165, 156, 142, 166, 174, 177, 178, 164, 158, 160, 159, 150, 152, - 158, 155, 154, 143, 146, 146, 134, 135, 130, 104, 95, 125, 124, 117, 131, 125, - 109, 113, 77, 71, 61, 48, 39, 35, 31, 25, 29, 27, 27, 31, 40, 53, - 69, 77, 82, 77, 71, 24, 25, 23, 23, 23, 21, 22, 21, 21, 20, 22, - 23, 24, 22, 21, 20, 22, 24, 24, 25, 27, 29, 29, 31, 29, 31, 30, - 30, 27, 26, 29, 33, 69, 110, 120, 123, 126, 124, 139, 143, 147, 149, 139, - 135, 146, 146, 142, 146, 148, 152, 157, 158, 153, 144, 138, 133, 134, 129, 130, - 134, 137, 139, 141, 146, 147, 147, 148, 148, 145, 141, 138, 135, 129, 132, 138, - 136, 132, 133, 139, 150, 151, 152, 150, 150, 150, 151, 153, 154, 155, 154, 154, - 154, 154, 152, 148, 143, 137, 135, 139, 140, 149, 130, 95, 17, 39, 26, 25, - 58, 55, 58, 48, 49, 62, 162, 158, 149, 144, 137, 132, 143, 144, 149, 154, - 153, 160, 169, 166, 155, 151, 149, 152, 156, 161, 168, 176, 179, 177, 178, 177, - 174, 172, 176, 184, 193, 198, 196, 192, 187, 182, 180, 184, 186, 191, 187, 185, - 184, 184, 182, 178, 172, 164, 164, 145, 142, 154, 175, 172, 176, 166, 158, 158, - 154, 145, 148, 157, 155, 152, 144, 147, 145, 134, 131, 122, 103, 92, 112, 107, - 95, 100, 91, 74, 74, 57, 54, 51, 39, 36, 35, 34, 30, 28, 27, 28, - 33, 42, 56, 71, 80, 83, 80, 77, 24, 23, 21, 20, 20, 20, 21, 20, - 19, 18, 19, 19, 20, 19, 16, 18, 25, 26, 25, 27, 28, 27, 28, 27, - 30, 30, 32, 31, 30, 31, 32, 38, 59, 96, 111, 121, 123, 121, 135, 136, - 137, 140, 137, 136, 145, 145, 140, 145, 147, 151, 155, 155, 151, 144, 137, 134, - 129, 127, 128, 133, 138, 138, 142, 149, 149, 152, 153, 150, 146, 141, 137, 135, - 128, 132, 134, 134, 135, 138, 147, 155, 148, 150, 150, 151, 151, 152, 152, 152, - 157, 153, 149, 146, 147, 148, 149, 148, 137, 140, 138, 139, 150, 127, 76, 22, - 35, 28, 38, 66, 45, 51, 56, 64, 69, 172, 147, 137, 134, 125, 133, 144, - 143, 145, 148, 148, 156, 163, 164, 157, 155, 151, 153, 156, 161, 166, 174, 182, - 182, 184, 183, 178, 175, 178, 187, 196, 193, 191, 187, 182, 179, 178, 181, 183, - 186, 183, 182, 181, 181, 180, 180, 175, 169, 167, 144, 146, 142, 168, 166, 173, - 166, 158, 158, 155, 145, 148, 156, 153, 148, 143, 144, 142, 135, 129, 118, 104, - 77, 82, 71, 54, 55, 50, 44, 44, 45, 45, 40, 34, 26, 26, 24, 20, - 22, 24, 31, 38, 46, 56, 67, 74, 80, 80, 81, 25, 23, 21, 20, 20, - 18, 20, 21, 24, 21, 20, 16, 16, 16, 16, 19, 17, 20, 21, 24, 24, - 24, 26, 25, 35, 36, 35, 34, 32, 32, 33, 40, 47, 78, 98, 122, 123, - 121, 136, 132, 128, 136, 136, 137, 145, 145, 139, 143, 144, 147, 150, 151, 149, - 144, 141, 141, 136, 133, 133, 134, 135, 133, 133, 139, 153, 156, 154, 148, 141, - 135, 134, 133, 143, 141, 140, 139, 142, 143, 146, 146, 144, 149, 152, 155, 157, - 156, 154, 152, 155, 152, 148, 146, 147, 149, 150, 148, 139, 141, 133, 131, 138, - 120, 58, 18, 27, 32, 46, 68, 45, 57, 59, 56, 84, 168, 136, 129, 130, - 126, 137, 144, 146, 144, 144, 143, 149, 159, 160, 157, 158, 152, 152, 154, 156, - 161, 172, 184, 185, 186, 185, 182, 177, 181, 191, 199, 185, 184, 182, 181, 181, - 180, 179, 178, 180, 179, 180, 180, 181, 181, 181, 180, 169, 166, 149, 152, 136, - 159, 165, 175, 163, 158, 160, 160, 150, 151, 157, 152, 145, 144, 140, 138, 137, - 129, 115, 110, 55, 53, 41, 33, 35, 39, 44, 46, 34, 36, 36, 28, 25, - 24, 25, 22, 19, 24, 36, 46, 55, 62, 69, 72, 78, 81, 84, 23, 22, - 22, 21, 21, 22, 22, 23, 20, 19, 16, 15, 14, 15, 16, 17, 16, 18, - 22, 28, 32, 34, 35, 36, 36, 35, 35, 31, 28, 24, 25, 31, 37, 60, - 81, 112, 116, 117, 135, 127, 129, 138, 137, 140, 146, 143, 137, 138, 145, 147, - 148, 148, 145, 146, 146, 148, 140, 138, 139, 144, 142, 141, 145, 153, 158, 160, - 155, 147, 137, 132, 133, 133, 141, 141, 141, 146, 149, 151, 148, 146, 145, 149, - 154, 158, 159, 158, 154, 152, 147, 148, 150, 152, 154, 152, 147, 142, 143, 142, - 134, 130, 130, 123, 56, 16, 27, 35, 42, 67, 59, 68, 52, 40, 101, 153, - 132, 136, 136, 141, 142, 145, 151, 149, 146, 145, 150, 156, 158, 156, 156, 148, - 146, 150, 151, 156, 170, 186, 184, 184, 183, 182, 182, 186, 193, 198, 183, 183, - 182, 183, 185, 184, 180, 178, 178, 179, 182, 183, 183, 183, 183, 180, 166, 157, - 152, 153, 138, 153, 169, 176, 160, 157, 162, 163, 154, 154, 158, 152, 142, 143, - 139, 134, 138, 128, 116, 118, 45, 40, 36, 32, 35, 39, 41, 41, 33, 37, - 36, 30, 24, 24, 26, 26, 25, 33, 44, 56, 65, 71, 76, 78, 80, 84, - 86, 21, 20, 23, 22, 22, 23, 22, 22, 19, 20, 20, 22, 23, 23, 23, - 21, 19, 20, 25, 32, 36, 38, 39, 37, 28, 28, 27, 25, 23, 19, 22, - 30, 48, 57, 73, 107, 111, 111, 130, 119, 129, 139, 138, 141, 146, 141, 135, - 138, 143, 142, 144, 144, 144, 144, 144, 146, 138, 139, 143, 149, 152, 152, 158, - 168, 161, 163, 157, 147, 137, 134, 137, 141, 140, 145, 152, 158, 160, 160, 157, - 158, 151, 153, 157, 159, 160, 158, 156, 154, 147, 148, 151, 154, 156, 154, 149, - 143, 146, 141, 138, 134, 127, 134, 62, 16, 26, 32, 32, 61, 63, 63, 46, - 52, 124, 144, 139, 147, 137, 149, 146, 152, 155, 150, 149, 150, 154, 155, 154, - 152, 152, 144, 145, 152, 154, 158, 172, 188, 186, 184, 181, 182, 186, 190, 192, - 192, 186, 184, 183, 183, 184, 183, 180, 177, 175, 177, 181, 182, 181, 179, 179, - 176, 168, 150, 155, 149, 145, 149, 170, 167, 159, 155, 161, 163, 155, 155, 159, - 154, 145, 146, 137, 133, 138, 127, 115, 122, 45, 33, 32, 33, 29, 32, 35, - 30, 27, 29, 30, 24, 19, 20, 23, 25, 42, 46, 54, 63, 69, 73, 78, - 80, 81, 85, 86, 20, 21, 23, 25, 26, 26, 25, 25, 26, 29, 34, 38, - 41, 41, 39, 34, 25, 25, 29, 32, 36, 36, 34, 32, 33, 32, 34, 32, - 33, 32, 36, 43, 72, 71, 80, 110, 112, 113, 130, 119, 123, 133, 136, 137, - 143, 141, 133, 138, 137, 139, 142, 142, 141, 141, 139, 140, 139, 140, 142, 147, - 149, 148, 152, 161, 166, 167, 161, 151, 143, 139, 144, 150, 155, 164, 175, 179, - 174, 168, 164, 164, 158, 159, 159, 160, 159, 158, 157, 156, 154, 152, 150, 150, - 152, 153, 154, 151, 141, 134, 136, 134, 122, 138, 64, 9, 20, 30, 28, 56, - 57, 46, 43, 82, 147, 142, 145, 150, 131, 150, 147, 160, 153, 149, 150, 152, - 154, 152, 148, 144, 147, 142, 147, 157, 159, 161, 174, 193, 195, 190, 185, 186, - 190, 191, 189, 186, 189, 185, 181, 180, 181, 180, 178, 175, 173, 175, 180, 180, - 178, 174, 173, 170, 172, 147, 156, 146, 149, 146, 168, 156, 158, 154, 159, 160, - 153, 155, 160, 156, 147, 150, 137, 131, 138, 124, 113, 123, 43, 28, 24, 27, - 24, 28, 39, 36, 30, 35, 39, 37, 35, 41, 49, 53, 59, 60, 64, 66, - 69, 72, 74, 74, 81, 82, 83, 32, 34, 36, 37, 36, 33, 31, 29, 37, - 47, 44, 37, 36, 31, 28, 34, 21, 28, 34, 41, 50, 45, 44, 57, 58, - 54, 55, 57, 64, 68, 71, 73, 91, 90, 92, 100, 107, 111, 114, 118, 124, - 128, 133, 136, 136, 135, 132, 133, 135, 134, 136, 138, 140, 141, 142, 142, 143, - 141, 142, 147, 148, 146, 148, 153, 159, 161, 160, 159, 161, 159, 159, 159, 160, - 161, 166, 168, 172, 175, 174, 174, 167, 165, 162, 159, 160, 162, 166, 168, 163, - 158, 152, 148, 148, 150, 152, 151, 150, 141, 124, 133, 134, 136, 109, 10, 33, - 18, 32, 55, 51, 46, 75, 105, 141, 142, 149, 151, 152, 153, 153, 155, 146, - 151, 157, 156, 152, 148, 145, 144, 150, 149, 152, 156, 161, 166, 170, 173, 193, - 188, 183, 183, 188, 193, 194, 191, 183, 181, 178, 176, 178, 178, 176, 174, 175, - 169, 172, 176, 174, 176, 179, 171, 163, 165, 163, 154, 156, 137, 163, 167, 158, - 158, 157, 155, 157, 159, 155, 147, 146, 141, 142, 137, 139, 108, 129, 128, 49, - 32, 38, 29, 22, 33, 32, 32, 45, 47, 53, 58, 63, 63, 64, 64, 71, - 72, 70, 69, 68, 70, 72, 75, 73, 73, 73, 29, 30, 28, 27, 27, 29, - 31, 32, 26, 37, 42, 40, 39, 32, 29, 32, 39, 44, 47, 60, 79, 80, - 76, 82, 81, 87, 95, 99, 99, 94, 93, 89, 84, 82, 85, 93, 100, 104, - 112, 120, 119, 123, 129, 133, 134, 134, 133, 132, 129, 131, 134, 137, 139, 141, - 143, 143, 140, 138, 140, 145, 146, 144, 144, 149, 154, 156, 158, 158, 156, 155, - 152, 151, 156, 157, 161, 163, 168, 170, 172, 172, 174, 172, 169, 166, 165, 166, - 168, 169, 171, 170, 167, 162, 157, 153, 150, 147, 139, 137, 131, 143, 140, 138, - 117, 37, 22, 29, 45, 43, 30, 49, 105, 148, 146, 146, 151, 153, 152, 153, - 154, 157, 154, 155, 157, 155, 151, 145, 141, 140, 145, 147, 150, 153, 156, 165, - 177, 187, 188, 185, 184, 186, 192, 195, 192, 189, 183, 180, 178, 177, 178, 178, - 176, 174, 176, 169, 173, 176, 173, 174, 176, 168, 168, 166, 160, 151, 156, 142, - 172, 177, 163, 163, 161, 158, 159, 161, 156, 148, 147, 145, 138, 135, 133, 115, - 128, 123, 51, 34, 42, 41, 45, 65, 69, 71, 84, 84, 83, 83, 81, 76, - 76, 74, 75, 75, 76, 74, 75, 77, 80, 80, 79, 77, 76, 34, 35, 32, - 30, 30, 30, 33, 34, 31, 36, 44, 46, 46, 44, 45, 51, 72, 84, 87, - 94, 107, 104, 99, 105, 99, 109, 118, 115, 104, 92, 92, 89, 85, 79, 84, - 89, 93, 97, 107, 118, 114, 118, 125, 130, 132, 134, 134, 134, 129, 129, 131, - 133, 135, 137, 137, 138, 136, 134, 137, 142, 144, 141, 141, 144, 147, 149, 153, - 153, 152, 148, 144, 142, 151, 152, 155, 156, 162, 163, 167, 168, 179, 177, 175, - 173, 171, 170, 170, 170, 167, 170, 172, 169, 160, 151, 145, 141, 141, 139, 141, - 149, 138, 134, 128, 81, 59, 57, 52, 43, 53, 97, 141, 153, 148, 150, 156, - 161, 162, 162, 163, 163, 165, 162, 157, 152, 147, 143, 139, 137, 154, 155, 156, - 152, 151, 159, 174, 185, 181, 182, 184, 190, 195, 194, 190, 186, 180, 178, 178, - 177, 177, 176, 176, 174, 175, 168, 173, 175, 170, 171, 171, 163, 170, 167, 162, - 155, 163, 148, 174, 175, 161, 161, 158, 155, 156, 157, 151, 143, 144, 149, 133, - 134, 124, 124, 129, 120, 57, 35, 42, 47, 58, 79, 82, 85, 83, 84, 83, - 82, 80, 76, 77, 74, 78, 78, 78, 79, 78, 80, 83, 84, 76, 74, 74, - 20, 25, 27, 30, 32, 33, 35, 35, 54, 50, 54, 58, 59, 65, 76, 86, - 101, 118, 119, 114, 108, 99, 96, 108, 97, 101, 105, 98, 87, 84, 89, 89, - 91, 84, 88, 91, 90, 92, 102, 114, 111, 117, 123, 128, 130, 132, 133, 133, - 133, 131, 132, 132, 132, 132, 131, 131, 133, 132, 135, 140, 142, 139, 138, 140, - 142, 143, 145, 145, 145, 144, 142, 140, 149, 149, 149, 152, 155, 160, 165, 166, - 174, 173, 173, 172, 171, 169, 168, 167, 176, 183, 189, 188, 181, 173, 170, 168, - 158, 148, 145, 145, 132, 130, 134, 118, 120, 106, 95, 93, 114, 153, 166, 145, - 147, 152, 160, 168, 172, 172, 171, 170, 168, 162, 153, 148, 145, 143, 139, 136, - 157, 155, 152, 150, 151, 158, 171, 182, 182, 183, 186, 191, 192, 192, 187, 183, - 180, 178, 178, 178, 177, 176, 176, 173, 174, 168, 173, 176, 170, 171, 171, 163, - 169, 169, 168, 165, 172, 150, 166, 159, 158, 158, 156, 153, 153, 154, 149, 140, - 135, 152, 132, 135, 117, 132, 134, 124, 58, 32, 39, 48, 62, 80, 78, 79, - 85, 86, 85, 82, 84, 83, 84, 84, 79, 78, 78, 77, 75, 76, 78, 79, - 68, 69, 71, 48, 51, 54, 59, 68, 75, 81, 85, 70, 58, 65, 72, 69, - 75, 89, 95, 100, 110, 107, 99, 101, 99, 96, 103, 96, 96, 97, 96, 95, - 99, 110, 110, 92, 85, 89, 92, 91, 92, 100, 112, 113, 117, 122, 126, 128, - 130, 131, 132, 132, 130, 131, 131, 131, 130, 129, 129, 136, 134, 136, 141, 142, - 139, 139, 139, 140, 139, 139, 139, 140, 139, 141, 142, 146, 148, 148, 151, 154, - 159, 164, 165, 166, 167, 168, 169, 169, 168, 167, 167, 161, 167, 173, 173, 168, - 164, 165, 166, 165, 151, 148, 143, 133, 134, 136, 138, 147, 147, 157, 163, 163, - 170, 178, 168, 157, 155, 156, 158, 164, 169, 172, 174, 164, 158, 151, 146, 143, - 142, 139, 136, 144, 141, 139, 144, 155, 167, 178, 184, 187, 188, 188, 190, 188, - 187, 182, 180, 179, 178, 176, 176, 178, 177, 173, 171, 173, 167, 172, 176, 171, - 172, 172, 163, 166, 167, 167, 165, 171, 147, 161, 152, 160, 160, 158, 155, 156, - 157, 152, 143, 129, 151, 134, 136, 118, 135, 139, 130, 57, 30, 39, 54, 72, - 91, 85, 84, 95, 94, 91, 85, 85, 81, 81, 80, 81, 81, 79, 78, 75, - 72, 73, 72, 67, 71, 75, 62, 58, 53, 51, 53, 63, 72, 78, 71, 55, - 68, 80, 71, 71, 79, 74, 76, 77, 67, 73, 97, 111, 106, 102, 101, 103, - 104, 105, 108, 109, 112, 106, 87, 81, 84, 89, 91, 91, 97, 106, 112, 117, - 121, 124, 126, 128, 129, 129, 127, 126, 128, 130, 131, 132, 132, 132, 137, 134, - 134, 138, 139, 137, 138, 139, 138, 137, 136, 134, 135, 136, 139, 141, 143, 143, - 146, 148, 154, 156, 159, 163, 162, 163, 165, 166, 167, 168, 168, 168, 172, 175, - 176, 175, 172, 171, 173, 174, 157, 148, 153, 147, 143, 145, 137, 144, 144, 149, - 167, 180, 174, 172, 182, 184, 170, 160, 150, 144, 148, 156, 165, 171, 158, 155, - 152, 149, 145, 143, 141, 139, 143, 137, 134, 140, 154, 168, 175, 177, 190, 190, - 190, 189, 185, 184, 180, 179, 179, 178, 177, 177, 179, 177, 173, 170, 172, 167, - 172, 175, 170, 170, 169, 160, 161, 161, 160, 155, 162, 143, 163, 161, 159, 159, - 156, 153, 153, 154, 148, 139, 129, 146, 135, 134, 126, 135, 142, 131, 63, 36, - 45, 61, 77, 92, 84, 86, 90, 92, 86, 83, 81, 79, 77, 77, 82, 81, - 81, 78, 75, 72, 72, 71, 72, 77, 80, 81, 74, 69, 62, 59, 61, 63, - 65, 66, 46, 59, 74, 61, 60, 69, 57, 56, 61, 59, 65, 89, 101, 98, - 95, 95, 97, 98, 97, 95, 90, 88, 84, 86, 83, 84, 90, 94, 91, 93, - 98, 109, 112, 118, 121, 121, 124, 127, 128, 125, 125, 127, 129, 132, 133, 133, - 133, 137, 133, 132, 135, 135, 134, 136, 139, 137, 134, 134, 132, 133, 134, 135, - 134, 136, 139, 143, 146, 152, 153, 155, 155, 160, 160, 161, 162, 163, 165, 166, - 167, 164, 163, 161, 160, 158, 158, 158, 157, 152, 150, 160, 148, 146, 150, 136, - 150, 146, 142, 151, 163, 169, 177, 181, 171, 167, 158, 150, 144, 148, 153, 158, - 160, 154, 156, 157, 155, 149, 145, 141, 141, 148, 142, 138, 141, 149, 161, 169, - 173, 188, 189, 190, 190, 186, 183, 180, 179, 178, 177, 177, 177, 177, 175, 173, - 169, 172, 166, 172, 174, 167, 165, 162, 152, 152, 155, 157, 153, 159, 141, 164, - 165, 160, 159, 155, 150, 149, 148, 141, 132, 137, 140, 131, 129, 138, 134, 140, - 122, 72, 39, 46, 59, 71, 83, 79, 81, 91, 94, 93, 92, 89, 89, 88, - 88, 81, 80, 79, 76, 73, 70, 70, 71, 75, 79, 81, 69, 70, 71, 70, - 69, 64, 60, 56, 66, 40, 51, 67, 52, 54, 71, 60, 57, 74, 82, 80, - 84, 84, 85, 91, 85, 88, 92, 91, 89, 86, 90, 93, 94, 89, 90, 95, - 96, 92, 90, 91, 106, 109, 113, 116, 119, 123, 127, 128, 130, 129, 130, 131, - 131, 131, 131, 131, 137, 132, 130, 132, 132, 130, 135, 138, 133, 132, 133, 133, - 133, 132, 129, 128, 132, 135, 140, 144, 147, 148, 150, 149, 154, 153, 155, 154, - 157, 158, 160, 161, 166, 164, 162, 161, 161, 161, 160, 156, 156, 157, 166, 145, - 140, 149, 136, 156, 150, 151, 156, 159, 162, 173, 175, 161, 159, 155, 156, 157, - 159, 159, 155, 151, 153, 158, 161, 160, 153, 147, 143, 143, 142, 141, 140, 140, - 147, 158, 171, 181, 182, 185, 190, 189, 188, 185, 180, 179, 178, 177, 179, 177, - 179, 177, 173, 169, 173, 166, 171, 172, 164, 160, 157, 146, 143, 151, 159, 158, - 163, 140, 161, 160, 166, 164, 160, 153, 150, 147, 140, 131, 142, 133, 128, 123, - 145, 131, 138, 113, 70, 38, 46, 60, 75, 93, 92, 99, 96, 97, 98, 96, - 94, 91, 90, 87, 85, 86, 84, 82, 77, 73, 73, 73, 72, 74, 76, 73, - 72, 70, 69, 67, 66, 68, 67, 73, 59, 57, 88, 75, 89, 83, 73, 76, - 76, 76, 79, 84, 90, 93, 94, 97, 99, 97, 93, 93, 100, 102, 99, 101, - 98, 95, 95, 98, 99, 96, 93, 94, 104, 111, 113, 116, 123, 127, 125, 129, - 124, 124, 127, 130, 130, 130, 130, 131, 130, 128, 127, 129, 130, 135, 136, 135, - 132, 131, 130, 131, 131, 131, 131, 135, 136, 139, 142, 143, 144, 144, 143, 150, - 150, 151, 150, 151, 149, 148, 147, 155, 154, 152, 152, 155, 157, 160, 160, 160, - 155, 150, 151, 153, 153, 149, 146, 155, 153, 151, 159, 168, 172, 164, 158, 154, - 153, 153, 156, 161, 163, 162, 160, 155, 154, 151, 149, 146, 144, 142, 141, 151, - 141, 134, 139, 147, 151, 162, 176, 176, 182, 189, 189, 184, 179, 179, 181, 181, - 180, 181, 178, 179, 177, 173, 169, 173, 172, 175, 172, 159, 153, 146, 131, 143, - 151, 148, 147, 159, 163, 159, 160, 165, 156, 151, 146, 143, 140, 140, 139, 133, - 152, 94, 137, 129, 143, 138, 127, 66, 51, 51, 70, 85, 91, 105, 120, 109, - 105, 108, 101, 109, 113, 99, 107, 103, 94, 98, 97, 87, 82, 78, 67, 73, - 72, 76, 63, 64, 66, 68, 69, 71, 70, 69, 68, 67, 68, 76, 65, 73, - 76, 77, 76, 78, 78, 79, 83, 89, 93, 93, 100, 103, 104, 99, 99, 101, - 102, 96, 100, 99, 102, 106, 109, 106, 98, 92, 94, 107, 114, 110, 109, 116, - 127, 135, 133, 131, 130, 132, 134, 134, 131, 130, 130, 129, 127, 126, 126, 129, - 132, 132, 133, 131, 130, 129, 131, 132, 132, 133, 133, 133, 137, 139, 140, 141, - 141, 141, 145, 146, 147, 148, 149, 149, 151, 150, 150, 150, 150, 152, 157, 161, - 165, 165, 162, 157, 153, 154, 157, 157, 154, 150, 156, 153, 152, 157, 165, 167, - 163, 160, 162, 162, 161, 162, 162, 163, 161, 159, 159, 158, 156, 154, 151, 149, - 148, 148, 146, 141, 137, 140, 146, 154, 167, 176, 179, 183, 187, 186, 183, 180, - 180, 182, 184, 182, 181, 180, 179, 177, 173, 169, 170, 166, 169, 166, 156, 154, - 151, 138, 142, 152, 150, 145, 151, 153, 152, 157, 159, 152, 146, 144, 141, 138, - 132, 128, 128, 136, 111, 137, 142, 138, 132, 115, 58, 44, 47, 72, 92, 97, - 104, 110, 106, 102, 119, 116, 114, 119, 113, 118, 117, 105, 99, 93, 81, 83, - 89, 82, 71, 70, 75, 69, 72, 75, 77, 78, 78, 76, 74, 74, 79, 74, - 59, 68, 72, 80, 82, 82, 83, 83, 83, 85, 85, 89, 93, 91, 95, 99, - 100, 102, 105, 104, 99, 98, 98, 102, 106, 109, 107, 101, 96, 96, 104, 110, - 110, 113, 119, 128, 132, 133, 133, 131, 132, 135, 136, 133, 131, 130, 129, 126, - 125, 125, 127, 130, 131, 130, 128, 128, 129, 130, 131, 134, 135, 133, 134, 136, - 138, 139, 140, 140, 140, 140, 141, 143, 145, 148, 149, 152, 152, 151, 151, 151, - 153, 158, 162, 165, 165, 160, 156, 154, 155, 157, 158, 156, 153, 154, 153, 153, - 156, 162, 164, 164, 165, 170, 170, 166, 165, 164, 163, 160, 158, 158, 157, 155, - 152, 150, 148, 146, 146, 143, 147, 145, 142, 147, 159, 172, 177, 182, 184, 186, - 184, 182, 180, 182, 184, 185, 183, 182, 181, 180, 177, 173, 169, 166, 164, 169, - 168, 159, 157, 152, 137, 136, 148, 147, 142, 148, 152, 155, 165, 158, 154, 149, - 148, 145, 141, 133, 125, 131, 122, 126, 133, 148, 133, 124, 112, 45, 33, 37, - 64, 89, 98, 104, 109, 100, 94, 125, 127, 112, 117, 118, 119, 122, 109, 102, - 95, 84, 88, 98, 94, 80, 74, 75, 66, 66, 71, 74, 76, 79, 80, 79, - 79, 83, 70, 41, 76, 81, 86, 77, 83, 85, 87, 88, 86, 85, 88, 93, - 90, 96, 99, 98, 102, 106, 106, 101, 99, 96, 96, 96, 99, 101, 102, 103, - 97, 97, 100, 109, 123, 130, 127, 122, 126, 128, 130, 129, 132, 136, 136, 130, - 130, 129, 128, 125, 125, 126, 128, 128, 124, 122, 125, 124, 128, 131, 133, 134, - 136, 136, 137, 138, 139, 138, 138, 138, 136, 138, 140, 143, 145, 146, 149, 150, - 154, 154, 153, 153, 155, 156, 158, 156, 155, 152, 151, 152, 154, 155, 154, 152, - 153, 154, 155, 155, 158, 161, 164, 168, 173, 173, 169, 166, 164, 162, 160, 158, - 159, 158, 155, 151, 148, 145, 143, 142, 147, 155, 154, 147, 149, 163, 175, 176, - 184, 185, 185, 182, 181, 181, 183, 185, 185, 184, 182, 181, 180, 177, 172, 169, - 166, 166, 173, 174, 165, 160, 149, 130, 141, 150, 147, 143, 152, 158, 161, 168, - 154, 155, 153, 148, 142, 140, 135, 129, 137, 117, 129, 130, 136, 132, 122, 117, - 44, 33, 35, 56, 78, 90, 103, 111, 100, 91, 124, 128, 107, 116, 122, 116, - 119, 111, 112, 108, 97, 99, 102, 95, 86, 78, 76, 49, 48, 52, 56, 62, - 70, 75, 78, 76, 84, 71, 38, 71, 74, 79, 70, 74, 75, 80, 87, 88, - 87, 88, 94, 101, 104, 100, 96, 96, 99, 99, 95, 96, 94, 94, 94, 97, - 99, 101, 103, 95, 95, 99, 107, 118, 124, 126, 127, 127, 129, 131, 130, 133, - 136, 134, 128, 133, 130, 129, 128, 128, 128, 127, 128, 124, 122, 125, 125, 130, - 133, 135, 137, 142, 142, 142, 142, 141, 140, 138, 138, 138, 139, 141, 143, 145, - 145, 148, 148, 156, 156, 155, 154, 155, 155, 154, 152, 152, 150, 150, 150, 152, - 152, 153, 152, 153, 154, 155, 155, 157, 159, 163, 169, 169, 169, 167, 164, 161, - 159, 159, 159, 164, 162, 159, 155, 151, 147, 144, 145, 148, 156, 155, 149, 153, - 167, 177, 176, 185, 185, 183, 181, 181, 181, 183, 185, 185, 183, 181, 180, 179, - 175, 171, 167, 168, 165, 168, 168, 161, 159, 152, 134, 151, 155, 147, 144, 158, - 164, 160, 161, 146, 151, 150, 141, 131, 131, 133, 132, 135, 119, 128, 136, 126, - 137, 120, 110, 43, 38, 43, 59, 71, 77, 85, 95, 107, 89, 116, 119, 103, - 114, 119, 109, 112, 107, 110, 108, 98, 95, 100, 90, 86, 79, 79, 55, 52, - 52, 52, 54, 59, 63, 66, 68, 84, 80, 51, 50, 53, 64, 65, 60, 61, - 68, 83, 91, 88, 87, 90, 89, 90, 89, 84, 85, 90, 93, 89, 91, 93, - 98, 101, 103, 101, 100, 100, 94, 99, 106, 107, 105, 106, 120, 136, 129, 135, - 136, 131, 133, 138, 135, 125, 133, 132, 131, 128, 127, 127, 127, 126, 125, 125, - 127, 128, 131, 134, 137, 139, 142, 142, 142, 142, 141, 139, 138, 137, 141, 142, - 144, 145, 146, 146, 148, 148, 154, 154, 154, 155, 157, 158, 158, 156, 153, 152, - 152, 152, 152, 153, 154, 154, 154, 155, 155, 155, 157, 158, 161, 166, 164, 165, - 163, 160, 157, 156, 158, 160, 161, 159, 157, 154, 150, 147, 144, 145, 146, 149, - 148, 150, 158, 170, 178, 179, 185, 183, 181, 180, 181, 181, 182, 182, 184, 182, - 180, 179, 177, 174, 169, 165, 169, 160, 157, 155, 152, 159, 161, 149, 143, 147, - 142, 145, 164, 172, 165, 163, 149, 154, 150, 137, 128, 131, 135, 134, 123, 121, - 129, 147, 133, 140, 123, 87, 34, 39, 54, 72, 82, 83, 85, 91, 105, 90, - 106, 106, 100, 112, 110, 105, 106, 101, 100, 97, 84, 86, 94, 87, 88, 80, - 81, 71, 68, 66, 64, 62, 64, 64, 65, 73, 83, 79, 64, 37, 46, 59, - 63, 60, 57, 65, 83, 95, 89, 82, 82, 76, 80, 83, 82, 85, 92, 96, - 93, 92, 95, 100, 102, 103, 101, 101, 101, 98, 100, 105, 109, 108, 104, 111, - 121, 123, 131, 133, 131, 134, 140, 138, 128, 133, 131, 130, 129, 128, 127, 127, - 124, 125, 123, 127, 127, 130, 133, 135, 137, 139, 140, 140, 140, 140, 140, 139, - 139, 139, 140, 141, 143, 144, 145, 147, 147, 149, 150, 152, 154, 157, 158, 159, - 157, 154, 154, 154, 153, 153, 152, 153, 154, 156, 155, 155, 155, 158, 159, 160, - 162, 162, 162, 161, 157, 153, 152, 156, 159, 155, 154, 153, 151, 152, 150, 149, - 148, 153, 148, 146, 154, 166, 174, 179, 182, 183, 182, 180, 179, 181, 181, 180, - 180, 183, 181, 179, 177, 175, 172, 167, 163, 164, 156, 154, 155, 156, 166, 170, - 158, 136, 145, 145, 150, 167, 174, 166, 165, 158, 158, 150, 136, 131, 137, 135, - 127, 121, 127, 138, 144, 143, 132, 133, 65, 27, 34, 53, 76, 91, 96, 97, - 98, 100, 92, 101, 98, 101, 110, 103, 106, 104, 100, 102, 97, 87, 89, 100, - 97, 94, 86, 83, 68, 67, 69, 71, 74, 76, 76, 77, 85, 78, 67, 68, - 37, 57, 63, 60, 69, 62, 70, 89, 98, 89, 78, 73, 85, 90, 94, 94, - 96, 100, 100, 95, 98, 97, 97, 95, 95, 97, 102, 106, 105, 96, 97, 111, - 123, 118, 103, 95, 113, 122, 127, 126, 132, 143, 143, 132, 132, 131, 130, 127, - 126, 125, 124, 124, 123, 121, 124, 124, 127, 128, 131, 132, 135, 136, 138, 138, - 139, 140, 140, 140, 133, 134, 136, 139, 140, 142, 144, 145, 147, 148, 149, 151, - 154, 155, 155, 153, 153, 153, 154, 153, 151, 150, 152, 153, 157, 156, 154, 155, - 159, 160, 158, 156, 160, 162, 161, 156, 152, 151, 154, 157, 155, 155, 155, 155, - 157, 157, 157, 159, 167, 153, 149, 161, 174, 177, 179, 183, 182, 180, 179, 179, - 181, 181, 179, 178, 182, 180, 178, 176, 174, 171, 166, 162, 160, 155, 160, 166, - 168, 175, 173, 157, 146, 158, 159, 159, 167, 166, 155, 154, 160, 156, 143, 131, - 131, 137, 129, 113, 125, 131, 144, 134, 150, 121, 143, 51, 33, 35, 47, 67, - 84, 93, 94, 92, 94, 93, 101, 95, 103, 108, 97, 110, 103, 102, 109, 110, - 100, 102, 109, 104, 95, 85, 82, 74, 71, 64, 59, 61, 68, 72, 69, 76, - 71, 72, 87, 72, 51, 63, 65, 72, 84, 87, 88, 94, 88, 81, 86, 88, - 90, 92, 91, 90, 92, 98, 101, 99, 95, 103, 105, 97, 96, 100, 95, 100, - 97, 100, 110, 121, 122, 119, 119, 99, 115, 119, 121, 137, 144, 138, 135, 133, - 135, 140, 140, 138, 136, 136, 138, 131, 129, 130, 127, 127, 127, 132, 136, 133, - 133, 136, 139, 140, 140, 139, 138, 144, 140, 138, 139, 139, 138, 142, 146, 144, - 142, 146, 152, 154, 149, 150, 153, 152, 152, 154, 154, 153, 151, 149, 147, 154, - 155, 155, 155, 157, 156, 155, 155, 153, 154, 154, 154, 155, 157, 160, 163, 164, - 163, 159, 153, 157, 162, 157, 148, 154, 147, 148, 161, 175, 178, 178, 179, 182, - 183, 184, 184, 185, 182, 179, 178, 178, 179, 180, 177, 171, 167, 166, 167, 159, - 165, 170, 176, 159, 156, 164, 135, 155, 156, 156, 160, 167, 172, 169, 164, 154, - 144, 142, 126, 125, 135, 122, 117, 134, 141, 135, 145, 163, 111, 145, 52, 38, - 36, 52, 72, 78, 86, 91, 87, 78, 82, 89, 94, 100, 106, 105, 101, 103, - 103, 102, 104, 105, 104, 103, 99, 90, 86, 84, 80, 78, 71, 63, 60, 60, - 58, 51, 64, 59, 56, 68, 60, 52, 71, 71, 73, 75, 69, 66, 77, 78, - 75, 81, 75, 77, 82, 83, 88, 90, 97, 98, 95, 91, 98, 100, 94, 95, - 100, 96, 103, 102, 99, 98, 108, 120, 123, 122, 118, 122, 112, 104, 112, 118, - 125, 137, 142, 143, 144, 140, 137, 135, 136, 138, 135, 135, 136, 131, 129, 128, - 132, 133, 129, 130, 131, 134, 135, 136, 137, 137, 140, 136, 136, 138, 139, 137, - 141, 145, 147, 145, 148, 153, 155, 151, 152, 156, 151, 151, 153, 153, 152, 150, - 149, 147, 154, 155, 155, 154, 156, 154, 153, 152, 153, 154, 154, 153, 154, 155, - 158, 161, 160, 159, 156, 151, 156, 162, 163, 159, 149, 149, 157, 169, 175, 175, - 176, 180, 180, 181, 182, 182, 183, 180, 178, 176, 177, 175, 173, 171, 170, 168, - 165, 162, 163, 183, 161, 166, 184, 156, 143, 159, 162, 160, 160, 166, 171, 172, - 167, 163, 158, 145, 142, 127, 122, 129, 118, 120, 135, 133, 138, 139, 124, 128, - 123, 39, 38, 38, 56, 72, 77, 80, 86, 82, 76, 80, 85, 86, 90, 96, - 96, 93, 92, 91, 90, 92, 94, 92, 91, 88, 88, 85, 85, 77, 77, 75, - 71, 71, 70, 64, 57, 59, 58, 52, 61, 60, 60, 75, 66, 72, 71, 61, - 59, 71, 74, 72, 77, 77, 77, 82, 85, 92, 94, 98, 96, 94, 90, 95, - 96, 91, 93, 99, 96, 93, 100, 102, 99, 106, 119, 124, 122, 126, 130, 123, - 115, 117, 113, 114, 124, 123, 130, 140, 147, 148, 147, 144, 142, 138, 137, 137, - 133, 130, 128, 130, 131, 128, 126, 126, 127, 129, 132, 133, 134, 135, 132, 133, - 137, 138, 136, 139, 143, 147, 146, 148, 150, 152, 150, 153, 156, 150, 150, 151, - 151, 150, 149, 148, 146, 153, 153, 153, 153, 154, 152, 151, 150, 150, 151, 151, - 149, 150, 150, 155, 157, 152, 154, 156, 155, 156, 159, 162, 159, 145, 153, 166, - 176, 176, 172, 175, 181, 181, 181, 182, 181, 182, 180, 178, 176, 183, 178, 173, - 171, 171, 170, 164, 159, 167, 174, 175, 183, 170, 155, 166, 162, 169, 164, 166, - 175, 178, 171, 163, 163, 161, 145, 142, 127, 119, 122, 115, 126, 144, 146, 145, - 145, 129, 154, 84, 49, 38, 48, 63, 74, 79, 81, 84, 82, 72, 72, 73, - 74, 79, 85, 84, 83, 83, 82, 81, 82, 84, 83, 82, 82, 81, 81, 80, - 71, 75, 77, 76, 77, 81, 78, 73, 69, 74, 70, 77, 77, 74, 76, 49, - 71, 79, 77, 79, 87, 86, 80, 83, 91, 88, 90, 91, 97, 95, 93, 88, - 96, 90, 93, 93, 88, 91, 98, 94, 92, 96, 99, 97, 98, 106, 119, 132, - 132, 137, 134, 134, 135, 121, 113, 121, 115, 118, 124, 130, 135, 136, 138, 139, - 136, 136, 136, 134, 133, 132, 135, 136, 130, 129, 126, 124, 125, 127, 129, 131, - 130, 129, 130, 136, 137, 136, 138, 141, 145, 145, 145, 145, 146, 147, 150, 152, - 148, 148, 148, 148, 148, 147, 146, 146, 149, 150, 150, 150, 152, 151, 151, 150, - 149, 150, 149, 148, 148, 148, 152, 155, 146, 152, 159, 159, 156, 152, 150, 148, - 150, 159, 170, 176, 175, 173, 176, 180, 183, 183, 183, 183, 183, 182, 180, 179, - 183, 180, 175, 171, 167, 164, 160, 157, 158, 178, 193, 184, 151, 159, 188, 161, - 172, 166, 169, 180, 181, 170, 162, 164, 160, 143, 140, 125, 115, 118, 117, 135, - 139, 148, 126, 138, 151, 139, 39, 54, 40, 57, 72, 78, 82, 83, 85, 88, - 79, 78, 78, 77, 81, 89, 90, 89, 95, 95, 94, 95, 98, 99, 99, 100, - 98, 99, 97, 74, 76, 76, 72, 71, 73, 72, 69, 77, 83, 80, 86, 86, - 83, 79, 47, 76, 89, 94, 94, 97, 91, 86, 93, 95, 92, 91, 91, 93, - 90, 85, 79, 91, 84, 86, 87, 85, 90, 97, 93, 102, 95, 90, 88, 82, - 81, 102, 130, 147, 146, 134, 127, 131, 128, 126, 133, 135, 128, 117, 108, 107, - 112, 120, 126, 131, 132, 134, 132, 132, 133, 137, 138, 132, 131, 126, 125, 123, - 124, 126, 127, 128, 126, 128, 134, 136, 134, 137, 140, 142, 144, 144, 142, 143, - 145, 148, 148, 146, 145, 146, 146, 145, 145, 145, 145, 146, 146, 148, 149, 151, - 152, 151, 151, 146, 147, 148, 147, 147, 147, 151, 153, 150, 153, 156, 156, 155, - 151, 151, 151, 160, 164, 168, 170, 173, 176, 178, 179, 182, 182, 182, 181, 182, - 180, 179, 178, 173, 175, 175, 169, 161, 157, 158, 161, 166, 201, 175, 153, 166, - 168, 170, 172, 169, 167, 171, 181, 182, 172, 164, 164, 156, 141, 138, 122, 113, - 120, 124, 143, 146, 143, 124, 141, 150, 117, 69, 51, 38, 62, 75, 76, 84, - 85, 84, 93, 75, 75, 72, 71, 71, 78, 78, 75, 85, 85, 84, 85, 90, - 93, 92, 93, 95, 98, 98, 72, 76, 76, 71, 69, 72, 74, 73, 80, 81, - 74, 81, 84, 85, 88, 62, 81, 95, 96, 92, 92, 87, 89, 100, 91, 90, - 91, 91, 91, 87, 86, 82, 83, 75, 78, 82, 82, 89, 96, 92, 92, 90, - 93, 96, 89, 76, 75, 84, 129, 140, 137, 133, 137, 139, 136, 140, 138, 134, - 129, 126, 122, 120, 117, 117, 121, 123, 125, 125, 125, 125, 128, 131, 132, 129, - 124, 123, 121, 122, 123, 124, 126, 124, 125, 129, 131, 130, 133, 137, 141, 144, - 145, 142, 143, 146, 148, 146, 144, 143, 143, 143, 143, 143, 144, 144, 145, 146, - 147, 148, 151, 151, 151, 151, 145, 145, 147, 146, 146, 147, 151, 154, 160, 153, - 150, 148, 151, 154, 161, 168, 169, 168, 166, 166, 170, 177, 179, 176, 179, 178, - 177, 176, 177, 176, 175, 175, 169, 174, 177, 172, 163, 160, 166, 173, 200, 180, - 147, 157, 174, 167, 169, 166, 167, 170, 175, 179, 179, 174, 168, 164, 152, 142, - 138, 117, 111, 127, 132, 146, 162, 137, 138, 150, 126, 114, 142, 55, 39, 68, - 76, 73, 85, 85, 82, 93, 75, 73, 70, 65, 64, 66, 66, 62, 68, 68, - 66, 69, 71, 74, 75, 75, 76, 80, 82, 71, 74, 77, 75, 76, 79, 81, - 81, 80, 76, 67, 78, 81, 82, 92, 76, 83, 92, 90, 85, 86, 83, 84, - 95, 86, 86, 89, 90, 90, 87, 89, 90, 84, 77, 80, 83, 83, 89, 94, - 88, 82, 92, 98, 98, 100, 93, 67, 41, 73, 112, 137, 142, 149, 150, 140, - 136, 132, 135, 139, 145, 147, 142, 131, 125, 122, 124, 125, 123, 122, 120, 120, - 122, 124, 121, 119, 119, 117, 119, 120, 121, 124, 121, 121, 124, 125, 125, 129, - 133, 137, 142, 144, 141, 141, 145, 145, 141, 143, 142, 141, 141, 141, 141, 143, - 143, 148, 149, 149, 149, 150, 149, 148, 148, 144, 144, 145, 144, 145, 148, 153, - 155, 160, 150, 146, 148, 156, 159, 166, 172, 170, 171, 168, 165, 169, 176, 178, - 174, 177, 177, 175, 174, 175, 174, 173, 173, 172, 174, 175, 171, 165, 163, 167, - 172, 188, 149, 148, 184, 177, 168, 181, 157, 167, 177, 181, 177, 175, 177, 171, - 162, 150, 145, 140, 114, 110, 134, 138, 145, 145, 132, 134, 140, 121, 118, 146, - 67, 49, 77, 78, 70, 87, 87, 80, 94, 91, 92, 90, 87, 87, 88, 87, - 83, 85, 84, 81, 82, 83, 85, 86, 85, 86, 90, 90, 74, 78, 82, 80, - 77, 77, 77, 76, 84, 78, 72, 87, 87, 83, 90, 77, 82, 89, 87, 85, - 90, 86, 80, 85, 79, 83, 87, 87, 86, 84, 88, 91, 94, 86, 87, 89, - 86, 89, 91, 83, 95, 103, 94, 78, 90, 106, 82, 39, 27, 84, 123, 133, - 140, 147, 143, 140, 145, 141, 135, 134, 137, 139, 141, 140, 136, 137, 137, 135, - 129, 127, 125, 125, 118, 117, 115, 117, 117, 119, 119, 120, 126, 121, 119, 122, - 123, 123, 127, 132, 132, 139, 142, 138, 138, 141, 141, 137, 142, 142, 141, 141, - 141, 142, 144, 145, 154, 153, 153, 152, 150, 148, 148, 145, 145, 144, 144, 146, - 145, 148, 154, 157, 153, 147, 146, 156, 163, 163, 162, 162, 168, 172, 172, 167, - 168, 174, 176, 173, 179, 178, 176, 175, 173, 173, 175, 175, 170, 168, 165, 160, - 156, 154, 155, 156, 127, 160, 167, 186, 200, 177, 166, 167, 169, 183, 186, 176, - 173, 179, 174, 160, 150, 148, 142, 112, 109, 138, 142, 142, 135, 150, 134, 142, - 160, 141, 118, 106, 61, 91, 87, 76, 92, 92, 81, 93, 87, 89, 90, 87, - 90, 94, 93, 87, 90, 87, 84, 82, 82, 83, 83, 84, 90, 91, 91, 72, - 74, 76, 78, 77, 76, 76, 79, 78, 78, 78, 80, 80, 80, 80, 82, 74, - 83, 82, 81, 84, 80, 77, 84, 69, 76, 79, 77, 79, 85, 90, 89, 87, - 89, 93, 92, 88, 87, 90, 93, 93, 96, 97, 84, 95, 91, 91, 45, 15, - 39, 73, 109, 133, 142, 142, 138, 145, 145, 143, 143, 144, 145, 143, 140, 132, - 130, 130, 131, 136, 138, 135, 133, 135, 136, 135, 128, 119, 112, 109, 107, 118, - 120, 124, 128, 128, 126, 121, 117, 130, 132, 134, 139, 138, 134, 136, 143, 143, - 147, 145, 141, 142, 148, 151, 151, 148, 149, 152, 153, 152, 148, 145, 140, 146, - 143, 141, 143, 146, 150, 148, 147, 127, 142, 158, 164, 162, 163, 167, 171, 171, - 170, 169, 171, 173, 175, 176, 175, 178, 175, 171, 169, 170, 170, 171, 170, 172, - 168, 161, 155, 153, 150, 144, 137, 160, 154, 173, 184, 172, 176, 178, 153, 170, - 182, 191, 188, 179, 171, 164, 160, 136, 143, 147, 132, 107, 142, 142, 145, 157, - 141, 140, 153, 154, 140, 128, 127, 77, 92, 81, 85, 88, 76, 83, 82, 89, - 88, 94, 93, 83, 84, 83, 72, 83, 79, 77, 78, 79, 78, 75, 78, 83, - 89, 87, 77, 78, 79, 77, 74, 73, 75, 77, 78, 77, 78, 77, 76, 76, - 78, 79, 78, 86, 85, 83, 87, 84, 80, 87, 81, 84, 82, 74, 70, 73, - 75, 74, 77, 80, 84, 84, 83, 83, 88, 90, 91, 90, 93, 89, 99, 88, - 95, 63, 21, 28, 39, 52, 73, 102, 136, 158, 158, 154, 148, 142, 141, 143, - 141, 137, 140, 138, 136, 137, 141, 144, 145, 145, 139, 139, 136, 132, 129, 127, - 127, 128, 124, 121, 117, 116, 117, 122, 125, 127, 120, 122, 127, 132, 134, 135, - 139, 148, 147, 151, 149, 145, 146, 150, 152, 150, 157, 157, 155, 152, 148, 146, - 145, 145, 141, 142, 144, 147, 151, 148, 141, 137, 148, 156, 164, 167, 168, 167, - 168, 170, 175, 174, 175, 177, 179, 179, 176, 173, 177, 174, 171, 169, 169, 169, - 168, 167, 157, 161, 162, 156, 149, 149, 158, 164, 155, 171, 181, 182, 183, 178, - 173, 171, 190, 195, 195, 186, 177, 173, 170, 167, 154, 149, 138, 120, 102, 146, - 154, 160, 146, 141, 147, 162, 165, 152, 137, 129, 103, 84, 92, 76, 93, 81, - 82, 80, 81, 77, 81, 83, 80, 87, 87, 75, 85, 83, 76, 71, 67, 67, - 73, 82, 78, 86, 88, 77, 78, 78, 77, 75, 74, 78, 79, 82, 80, 79, - 77, 76, 76, 79, 80, 79, 86, 84, 82, 87, 84, 81, 87, 82, 84, 80, - 74, 71, 74, 78, 79, 86, 88, 90, 90, 92, 93, 95, 96, 93, 87, 93, - 95, 105, 90, 101, 79, 16, 21, 26, 26, 33, 54, 89, 115, 129, 137, 147, - 151, 156, 157, 152, 143, 145, 144, 143, 141, 139, 141, 146, 149, 142, 142, 142, - 143, 142, 141, 138, 136, 132, 127, 118, 114, 116, 121, 124, 127, 122, 118, 121, - 125, 127, 127, 129, 138, 146, 149, 149, 145, 145, 148, 148, 144, 151, 153, 153, - 151, 147, 146, 147, 149, 148, 144, 138, 135, 137, 141, 146, 149, 163, 164, 165, - 168, 172, 173, 173, 170, 176, 177, 179, 181, 182, 180, 175, 171, 176, 174, 171, - 169, 169, 169, 167, 165, 159, 159, 157, 151, 146, 146, 155, 162, 160, 190, 189, - 179, 190, 180, 169, 187, 192, 193, 189, 181, 175, 173, 169, 164, 151, 146, 140, - 130, 116, 155, 149, 146, 138, 141, 149, 159, 163, 156, 140, 128, 127, 74, 92, - 68, 92, 82, 79, 77, 86, 78, 80, 79, 75, 80, 81, 70, 67, 78, 91, - 94, 92, 85, 80, 82, 87, 94, 97, 67, 70, 75, 77, 78, 79, 82, 84, - 85, 83, 82, 79, 79, 80, 85, 86, 81, 87, 84, 82, 88, 86, 82, 88, - 82, 83, 83, 82, 82, 85, 89, 92, 97, 98, 98, 98, 99, 99, 99, 100, - 95, 94, 98, 96, 107, 96, 103, 70, 9, 22, 34, 34, 31, 32, 42, 52, - 129, 136, 138, 134, 137, 151, 160, 162, 151, 150, 150, 147, 142, 138, 141, 144, - 146, 145, 148, 152, 153, 148, 138, 130, 139, 136, 133, 129, 129, 127, 125, 121, - 124, 121, 120, 121, 122, 123, 127, 135, 153, 158, 159, 156, 156, 159, 157, 153, - 149, 154, 157, 156, 150, 145, 144, 144, 144, 138, 133, 131, 134, 144, 156, 164, - 164, 164, 166, 166, 170, 173, 176, 177, 177, 175, 176, 179, 180, 179, 175, 172, - 175, 172, 170, 168, 168, 167, 165, 163, 168, 155, 144, 144, 150, 152, 151, 149, - 175, 193, 190, 178, 181, 177, 175, 188, 179, 181, 181, 178, 178, 177, 168, 159, - 145, 144, 145, 140, 123, 151, 137, 131, 160, 164, 165, 163, 164, 165, 157, 142, - 135, 85, 78, 76, 89, 78, 80, 73, 86, 80, 81, 77, 71, 76, 81, 72, - 86, 88, 87, 82, 82, 89, 94, 99, 101, 102, 102, 57, 62, 70, 75, 77, - 77, 79, 80, 80, 78, 78, 77, 77, 80, 85, 87, 84, 89, 84, 82, 89, - 88, 84, 89, 86, 87, 88, 89, 87, 84, 84, 86, 90, 89, 89, 90, 90, - 91, 92, 92, 93, 100, 99, 86, 101, 99, 95, 42, 14, 20, 26, 30, 30, - 31, 34, 39, 45, 80, 118, 141, 150, 155, 150, 139, 155, 158, 160, 157, 152, - 149, 149, 148, 149, 148, 148, 147, 148, 146, 139, 133, 144, 144, 143, 142, 141, - 138, 132, 126, 122, 116, 115, 120, 124, 127, 133, 139, 140, 145, 148, 147, 148, - 150, 149, 145, 158, 159, 157, 152, 145, 140, 139, 139, 129, 134, 143, 149, 153, - 157, 157, 159, 163, 167, 168, 169, 170, 172, 178, 182, 177, 174, 173, 175, 177, - 179, 178, 177, 172, 170, 168, 167, 166, 164, 161, 159, 158, 147, 142, 149, 160, - 162, 162, 163, 197, 188, 191, 185, 170, 177, 189, 181, 180, 181, 180, 179, 181, - 182, 174, 165, 156, 150, 143, 129, 105, 138, 139, 149, 162, 168, 165, 158, 156, - 160, 155, 141, 131, 114, 65, 97, 89, 76, 85, 75, 73, 75, 82, 83, 79, - 89, 98, 97, 107, 108, 103, 100, 104, 110, 108, 105, 108, 107, 103, 56, 61, - 68, 71, 71, 70, 71, 71, 71, 70, 71, 71, 72, 75, 79, 81, 79, 83, - 77, 75, 83, 82, 78, 83, 79, 80, 83, 86, 85, 80, 79, 81, 84, 83, - 83, 86, 89, 91, 94, 93, 88, 98, 96, 78, 93, 94, 85, 22, 18, 20, - 22, 27, 32, 36, 37, 36, 31, 44, 54, 60, 81, 117, 148, 157, 150, 151, - 156, 159, 159, 156, 155, 155, 154, 147, 142, 139, 140, 141, 144, 145, 146, 144, - 142, 142, 143, 143, 142, 140, 125, 117, 114, 115, 120, 118, 123, 127, 140, 144, - 147, 146, 147, 150, 150, 146, 146, 142, 136, 132, 133, 138, 144, 150, 141, 145, - 152, 156, 157, 161, 162, 164, 168, 171, 175, 174, 172, 172, 176, 179, 177, 174, - 173, 174, 177, 179, 180, 179, 169, 167, 165, 164, 163, 161, 158, 155, 144, 145, - 151, 156, 155, 152, 162, 177, 207, 186, 191, 189, 171, 184, 198, 178, 190, 188, - 182, 176, 176, 178, 175, 169, 157, 151, 144, 129, 102, 135, 145, 163, 149, 157, - 159, 158, 158, 158, 149, 135, 129, 139, 61, 105, 95, 84, 91, 81, 76, 76, - 86, 90, 89, 98, 108, 103, 63, 76, 89, 99, 108, 110, 93, 72, 114, 108, - 101, 65, 66, 69, 69, 68, 67, 70, 71, 71, 70, 72, 72, 73, 74, 77, - 78, 76, 79, 72, 70, 79, 79, 74, 78, 74, 73, 76, 82, 82, 79, 80, - 86, 84, 82, 82, 85, 90, 93, 93, 92, 82, 88, 89, 77, 89, 85, 79, - 25, 16, 22, 27, 32, 35, 35, 31, 28, 41, 43, 38, 38, 63, 105, 130, - 129, 144, 143, 146, 150, 155, 156, 156, 153, 151, 149, 146, 141, 140, 143, 148, - 152, 148, 147, 145, 146, 148, 147, 147, 146, 135, 127, 121, 119, 121, 116, 117, - 118, 112, 117, 118, 116, 117, 120, 120, 117, 131, 128, 126, 131, 140, 150, 156, - 157, 158, 157, 157, 155, 154, 160, 168, 176, 171, 173, 174, 174, 176, 176, 175, - 172, 175, 172, 173, 174, 177, 177, 175, 173, 166, 165, 163, 162, 161, 159, 155, - 151, 151, 152, 158, 160, 152, 146, 162, 182, 198, 193, 191, 187, 186, 192, 193, - 185, 190, 190, 185, 178, 175, 175, 172, 167, 150, 148, 148, 138, 112, 139, 143, - 158, 159, 165, 170, 173, 174, 168, 159, 150, 133, 145, 69, 87, 103, 94, 87, - 87, 88, 82, 87, 92, 95, 100, 100, 89, 95, 101, 102, 101, 112, 125, 129, - 122, 120, 112, 105, 72, 72, 72, 70, 68, 70, 75, 79, 76, 76, 78, 78, - 78, 78, 80, 80, 82, 84, 77, 75, 84, 84, 80, 84, 83, 79, 79, 83, - 81, 77, 79, 86, 81, 78, 77, 78, 83, 84, 83, 81, 82, 82, 86, 81, - 92, 80, 81, 41, 19, 22, 26, 28, 29, 32, 33, 35, 39, 35, 31, 40, - 83, 137, 162, 158, 148, 142, 142, 145, 151, 155, 156, 153, 148, 150, 154, 154, - 151, 145, 145, 146, 150, 151, 153, 153, 156, 152, 147, 141, 143, 134, 131, 132, - 135, 132, 130, 132, 135, 138, 137, 134, 134, 136, 136, 133, 136, 135, 139, 149, - 160, 164, 159, 154, 153, 158, 163, 165, 166, 165, 169, 171, 171, 169, 168, 172, - 179, 180, 175, 167, 171, 169, 171, 174, 175, 173, 169, 165, 165, 163, 162, 161, - 160, 157, 153, 149, 164, 155, 153, 158, 161, 161, 173, 189, 180, 198, 189, 182, - 199, 195, 182, 190, 184, 190, 192, 189, 184, 180, 172, 165, 157, 150, 146, 135, - 109, 137, 140, 155, 160, 160, 163, 166, 165, 158, 154, 149, 136, 137, 78, 65, - 106, 101, 81, 89, 90, 79, 79, 87, 95, 102, 93, 74, 95, 107, 109, 103, - 107, 116, 116, 109, 121, 112, 108, 64, 67, 67, 63, 61, 66, 71, 71, 71, - 74, 80, 82, 82, 81, 83, 83, 85, 88, 80, 75, 81, 82, 82, 90, 84, - 85, 83, 77, 76, 78, 79, 76, 77, 76, 75, 76, 79, 80, 80, 79, 76, - 90, 94, 84, 84, 91, 79, 56, 18, 21, 28, 32, 28, 23, 29, 41, 39, - 38, 37, 47, 88, 141, 167, 164, 163, 162, 161, 157, 152, 147, 146, 146, 148, - 148, 149, 150, 150, 150, 152, 154, 157, 157, 156, 153, 155, 153, 154, 152, 150, - 141, 133, 128, 133, 134, 135, 134, 140, 140, 140, 141, 142, 142, 143, 143, 145, - 145, 147, 150, 153, 157, 160, 164, 160, 161, 161, 161, 164, 166, 168, 170, 171, - 171, 172, 172, 172, 173, 174, 175, 172, 170, 171, 173, 174, 173, 170, 167, 166, - 166, 162, 156, 150, 148, 152, 156, 155, 158, 161, 159, 164, 175, 185, 188, 190, - 178, 180, 187, 191, 195, 192, 177, 191, 185, 179, 178, 180, 179, 172, 167, 168, - 156, 146, 134, 112, 145, 145, 155, 164, 163, 163, 167, 166, 159, 157, 154, 136, - 124, 90, 62, 90, 85, 92, 87, 86, 81, 78, 79, 86, 89, 88, 88, 108, - 103, 98, 104, 118, 121, 109, 96, 135, 163, 122, 60, 63, 64, 60, 59, 64, - 69, 69, 67, 71, 77, 79, 79, 79, 84, 86, 94, 97, 90, 84, 86, 81, - 75, 79, 79, 81, 81, 77, 77, 80, 81, 78, 83, 82, 80, 81, 83, 84, - 84, 83, 81, 90, 93, 87, 90, 97, 92, 78, 26, 25, 23, 25, 26, 34, - 52, 70, 81, 85, 83, 84, 108, 146, 167, 164, 172, 170, 171, 169, 166, 163, - 163, 161, 157, 162, 165, 162, 158, 156, 160, 164, 168, 167, 167, 166, 168, 169, - 171, 170, 166, 162, 155, 145, 139, 138, 140, 142, 134, 136, 140, 143, 145, 144, - 143, 141, 145, 146, 149, 153, 157, 160, 163, 167, 169, 169, 167, 166, 167, 168, - 168, 169, 172, 172, 172, 172, 175, 173, 176, 174, 170, 170, 171, 173, 175, 175, - 173, 171, 163, 161, 159, 155, 152, 151, 153, 156, 159, 160, 162, 164, 174, 185, - 191, 189, 191, 195, 206, 204, 187, 183, 192, 194, 187, 185, 183, 180, 176, 173, - 171, 170, 160, 161, 160, 142, 106, 130, 139, 161, 164, 164, 163, 168, 168, 163, - 157, 153, 133, 119, 87, 61, 94, 93, 94, 84, 76, 75, 77, 83, 93, 98, - 101, 105, 94, 93, 93, 98, 107, 110, 108, 104, 90, 116, 117, 57, 61, 62, - 59, 58, 63, 68, 68, 64, 69, 75, 74, 72, 72, 79, 84, 77, 84, 82, - 81, 86, 81, 73, 77, 75, 78, 80, 78, 80, 83, 84, 81, 86, 84, 82, - 82, 85, 86, 85, 84, 83, 83, 82, 82, 88, 92, 90, 89, 60, 57, 52, - 54, 61, 76, 97, 112, 117, 126, 127, 121, 128, 146, 161, 160, 172, 173, 176, - 177, 176, 172, 171, 171, 168, 173, 178, 176, 167, 161, 164, 170, 172, 171, 173, - 171, 175, 176, 179, 180, 176, 174, 169, 156, 145, 139, 139, 142, 139, 140, 142, - 144, 146, 148, 148, 149, 145, 147, 149, 153, 156, 158, 160, 160, 167, 167, 165, - 163, 162, 162, 163, 164, 166, 166, 167, 168, 170, 168, 170, 168, 169, 168, 167, - 168, 169, 170, 168, 167, 161, 159, 156, 155, 156, 157, 158, 157, 159, 162, 164, - 171, 185, 196, 196, 190, 201, 196, 200, 199, 190, 189, 194, 190, 180, 182, 182, - 177, 170, 165, 166, 168, 161, 155, 149, 136, 109, 136, 137, 148, 163, 163, 165, - 168, 169, 163, 157, 154, 141, 121, 86, 56, 93, 99, 99, 93, 95, 92, 93, - 93, 92, 90, 90, 90, 99, 102, 102, 101, 99, 101, 102, 104, 96, 101, 125, - 60, 64, 66, 62, 60, 64, 68, 67, 66, 70, 73, 70, 65, 64, 71, 77, - 64, 73, 73, 75, 83, 81, 76, 80, 76, 80, 82, 82, 83, 87, 86, 83, - 86, 84, 81, 80, 83, 84, 84, 83, 85, 80, 77, 80, 84, 83, 83, 88, - 95, 97, 97, 102, 109, 117, 126, 134, 132, 142, 145, 139, 139, 152, 161, 163, - 170, 174, 176, 178, 178, 176, 175, 172, 172, 177, 181, 178, 172, 168, 168, 170, - 174, 173, 171, 171, 172, 175, 178, 179, 174, 173, 170, 164, 155, 146, 142, 142, - 146, 143, 140, 137, 138, 142, 147, 150, 145, 147, 148, 150, 151, 152, 152, 151, - 160, 160, 159, 159, 159, 160, 162, 163, 163, 163, 165, 165, 166, 165, 165, 165, - 170, 168, 166, 165, 165, 166, 165, 163, 164, 160, 158, 158, 161, 163, 162, 159, - 158, 164, 171, 178, 190, 198, 197, 191, 200, 188, 187, 189, 190, 195, 197, 188, - 183, 184, 183, 177, 171, 167, 167, 169, 161, 151, 145, 136, 115, 145, 142, 150, - 162, 161, 162, 169, 169, 163, 157, 151, 149, 126, 93, 52, 86, 102, 104, 104, - 88, 90, 95, 96, 95, 96, 96, 100, 105, 108, 108, 106, 102, 100, 101, 103, - 112, 95, 106, 67, 71, 72, 67, 65, 67, 70, 68, 69, 71, 74, 70, 66, - 66, 73, 79, 79, 85, 82, 80, 86, 82, 76, 81, 81, 85, 87, 86, 86, - 89, 88, 84, 87, 84, 81, 80, 80, 82, 84, 83, 88, 82, 82, 86, 87, - 83, 84, 92, 108, 114, 120, 123, 128, 131, 131, 129, 139, 146, 149, 146, 148, - 160, 167, 168, 175, 178, 182, 184, 183, 179, 178, 177, 177, 175, 176, 177, 177, - 174, 170, 167, 179, 178, 176, 174, 174, 174, 175, 177, 172, 170, 170, 172, 172, - 167, 159, 154, 147, 145, 142, 139, 138, 138, 140, 141, 145, 145, 147, 148, 149, - 149, 150, 150, 159, 158, 157, 157, 157, 159, 161, 162, 161, 159, 162, 161, 163, - 161, 163, 163, 167, 166, 164, 164, 166, 167, 167, 166, 164, 161, 158, 159, 162, - 164, 162, 160, 160, 171, 184, 189, 192, 196, 198, 197, 193, 191, 199, 198, 187, - 190, 200, 201, 192, 190, 185, 180, 177, 175, 172, 172, 154, 159, 165, 150, 114, - 138, 146, 168, 163, 161, 159, 166, 167, 162, 156, 149, 145, 126, 105, 56, 82, - 99, 97, 103, 88, 91, 96, 97, 97, 98, 101, 102, 100, 101, 103, 105, 107, - 108, 105, 103, 102, 98, 89, 69, 74, 75, 71, 69, 70, 73, 71, 72, 73, - 75, 74, 75, 77, 84, 87, 86, 91, 86, 83, 88, 85, 80, 85, 86, 89, - 90, 87, 87, 90, 90, 86, 89, 85, 82, 81, 82, 84, 87, 87, 84, 82, - 84, 87, 88, 87, 90, 97, 112, 122, 129, 129, 132, 135, 138, 137, 145, 149, - 151, 149, 151, 159, 164, 164, 174, 179, 182, 183, 182, 180, 178, 178, 179, 176, - 172, 175, 179, 179, 173, 170, 178, 179, 175, 174, 173, 172, 172, 169, 168, 167, - 167, 172, 177, 177, 170, 163, 158, 157, 158, 157, 154, 149, 144, 140, 141, 141, - 141, 142, 143, 145, 147, 148, 156, 155, 153, 152, 152, 152, 154, 153, 152, 152, - 151, 151, 151, 150, 154, 154, 155, 155, 156, 159, 163, 165, 166, 165, 163, 161, - 159, 159, 160, 162, 163, 165, 170, 183, 195, 196, 194, 196, 199, 200, 201, 192, - 194, 195, 191, 195, 199, 192, 192, 188, 182, 178, 175, 173, 170, 169, 160, 160, - 161, 147, 114, 139, 143, 160, 166, 161, 158, 163, 168, 163, 156, 149, 135, 120, - 112, 61, 83, 98, 86, 92, 99, 97, 98, 98, 97, 97, 97, 98, 105, 103, - 103, 105, 110, 109, 103, 99, 92, 112, 102, 66, 71, 74, 71, 70, 73, 76, - 74, 75, 74, 75, 77, 81, 85, 88, 88, 81, 87, 84, 83, 90, 88, 83, - 88, 87, 89, 89, 86, 87, 91, 91, 89, 89, 83, 80, 79, 83, 86, 89, - 90, 82, 84, 85, 83, 85, 89, 92, 97, 116, 129, 139, 138, 140, 145, 152, - 153, 150, 154, 158, 156, 153, 155, 155, 158, 171, 177, 179, 180, 179, 178, 179, - 181, 179, 177, 174, 174, 175, 175, 174, 172, 174, 176, 176, 175, 174, 170, 168, - 166, 168, 168, 169, 171, 171, 172, 171, 170, 175, 175, 173, 171, 167, 163, 159, - 157, 152, 150, 147, 145, 145, 146, 148, 149, 148, 147, 146, 145, 146, 147, 149, - 148, 147, 145, 143, 142, 143, 143, 147, 149, 153, 154, 155, 158, 162, 163, 162, - 161, 162, 162, 162, 161, 162, 165, 169, 175, 182, 192, 198, 197, 195, 196, 198, - 197, 205, 190, 187, 191, 195, 200, 198, 182, 188, 187, 184, 177, 170, 166, 167, - 170, 166, 157, 150, 140, 117, 146, 144, 152, 170, 164, 160, 163, 168, 164, 159, - 152, 139, 121, 112, 58, 83, 103, 86, 92, 86, 82, 82, 87, 94, 102, 104, - 105, 106, 105, 102, 101, 101, 100, 96, 94, 89, 109, 104, 59, 65, 70, 68, - 69, 73, 75, 74, 79, 75, 72, 74, 79, 83, 81, 80, 82, 89, 89, 86, - 93, 86, 81, 83, 86, 86, 87, 82, 86, 89, 93, 89, 85, 82, 78, 78, - 80, 85, 87, 88, 86, 92, 90, 84, 83, 92, 97, 102, 111, 131, 143, 143, - 144, 148, 154, 155, 154, 164, 169, 168, 161, 156, 157, 160, 172, 176, 180, 180, - 180, 181, 183, 186, 176, 178, 176, 173, 170, 169, 170, 172, 174, 175, 176, 177, - 176, 173, 170, 167, 173, 175, 175, 172, 166, 167, 172, 177, 187, 181, 172, 164, - 161, 162, 166, 170, 173, 169, 163, 157, 154, 153, 153, 153, 147, 147, 148, 149, - 151, 154, 156, 157, 155, 153, 150, 147, 148, 149, 154, 157, 165, 165, 168, 167, - 170, 167, 165, 160, 166, 165, 168, 165, 167, 169, 179, 186, 189, 194, 195, 193, - 193, 196, 195, 190, 191, 193, 202, 202, 187, 185, 196, 198, 190, 193, 193, 184, - 172, 167, 171, 179, 157, 162, 165, 150, 115, 141, 150, 173, 171, 166, 161, 165, - 168, 168, 161, 157, 154, 125, 110, 52, 79, 108, 93, 102, 99, 93, 86, 85, - 87, 89, 87, 83, 93, 91, 91, 90, 92, 93, 96, 97, 102, 104, 99, 66, - 66, 68, 66, 64, 67, 71, 74, 79, 78, 76, 75, 74, 76, 78, 79, 82, - 81, 83, 80, 82, 81, 84, 82, 92, 84, 81, 79, 85, 85, 85, 80, 80, - 82, 80, 80, 83, 88, 83, 76, 80, 88, 93, 76, 79, 91, 89, 108, 127, - 137, 144, 148, 149, 151, 155, 158, 167, 167, 169, 171, 169, 167, 162, 158, 163, - 167, 173, 175, 176, 177, 178, 180, 173, 175, 179, 184, 188, 187, 181, 173, 176, - 173, 170, 167, 166, 166, 168, 168, 162, 167, 173, 174, 171, 168, 166, 166, 168, - 173, 177, 168, 159, 160, 167, 175, 177, 180, 183, 182, 177, 171, 166, 163, 166, - 165, 163, 160, 158, 156, 154, 154, 153, 154, 156, 160, 166, 170, 177, 180, 185, - 180, 179, 177, 176, 166, 162, 159, 168, 170, 177, 177, 180, 179, 183, 186, 190, - 196, 200, 198, 196, 196, 194, 190, 185, 192, 192, 188, 190, 199, 198, 189, 195, - 193, 186, 178, 177, 180, 180, 177, 164, 162, 160, 147, 128, 134, 146, 147, 167, - 166, 164, 163, 166, 165, 165, 162, 149, 132, 122, 69, 74, 90, 101, 92, 94, - 92, 89, 85, 83, 83, 83, 83, 87, 86, 91, 92, 97, 96, 99, 99, 91, - 95, 100, 75, 73, 74, 72, 71, 70, 73, 75, 73, 72, 71, 71, 71, 73, - 76, 78, 77, 77, 78, 76, 79, 78, 81, 79, 77, 73, 73, 72, 76, 75, - 73, 70, 81, 80, 74, 66, 67, 74, 78, 77, 81, 75, 81, 81, 90, 92, - 83, 105, 130, 140, 147, 150, 151, 152, 156, 159, 158, 159, 162, 166, 167, 164, - 159, 154, 158, 161, 166, 170, 174, 175, 174, 173, 173, 174, 176, 180, 184, 184, - 181, 175, 180, 176, 173, 171, 169, 169, 170, 170, 169, 168, 166, 162, 160, 162, - 167, 171, 168, 171, 174, 169, 167, 170, 176, 177, 183, 182, 180, 176, 172, 171, - 171, 173, 175, 174, 172, 171, 172, 174, 177, 179, 179, 178, 178, 178, 179, 181, - 183, 185, 189, 184, 183, 185, 185, 181, 179, 179, 180, 182, 184, 184, 183, 184, - 188, 191, 194, 199, 200, 196, 194, 195, 195, 193, 195, 200, 198, 191, 191, 197, - 196, 187, 191, 191, 186, 179, 177, 179, 176, 171, 162, 158, 154, 139, 121, 128, - 143, 147, 163, 162, 163, 163, 167, 168, 165, 162, 153, 140, 125, 79, 79, 98, - 102, 96, 95, 94, 94, 92, 90, 88, 85, 84, 87, 87, 86, 86, 87, 89, - 91, 92, 92, 93, 97, 71, 73, 74, 72, 72, 70, 71, 72, 75, 75, 74, - 74, 75, 76, 78, 80, 73, 73, 74, 74, 76, 76, 79, 79, 80, 79, 81, - 80, 79, 75, 71, 68, 73, 73, 68, 60, 58, 65, 70, 72, 69, 64, 77, - 80, 79, 70, 69, 107, 133, 143, 150, 153, 153, 154, 157, 159, 157, 159, 164, - 169, 171, 169, 164, 159, 150, 151, 156, 165, 174, 179, 179, 177, 175, 175, 175, - 177, 181, 183, 183, 180, 178, 175, 174, 172, 170, 169, 167, 167, 171, 168, 164, - 159, 157, 159, 165, 169, 165, 166, 169, 169, 172, 177, 179, 175, 180, 179, 178, - 174, 172, 172, 176, 179, 182, 180, 179, 179, 181, 186, 191, 195, 192, 190, 188, - 186, 184, 184, 184, 184, 187, 182, 180, 184, 186, 185, 186, 188, 191, 191, 190, - 188, 186, 187, 190, 193, 197, 200, 199, 194, 191, 194, 195, 194, 198, 201, 198, - 190, 191, 196, 195, 189, 188, 189, 186, 181, 179, 179, 174, 168, 166, 159, 153, - 138, 120, 128, 147, 154, 159, 158, 159, 161, 165, 166, 165, 162, 151, 144, 125, - 89, 76, 103, 99, 97, 97, 98, 99, 99, 97, 93, 89, 87, 91, 89, 86, - 84, 83, 85, 87, 89, 90, 91, 91, 65, 66, 70, 71, 72, 71, 72, 73, - 78, 77, 76, 74, 73, 73, 74, 73, 72, 73, 73, 74, 76, 78, 80, 81, - 76, 78, 78, 76, 70, 65, 61, 60, 70, 76, 79, 73, 69, 71, 70, 70, - 74, 69, 76, 71, 73, 72, 72, 106, 133, 144, 150, 154, 154, 154, 156, 158, - 162, 163, 166, 171, 175, 175, 172, 169, 157, 155, 155, 162, 172, 180, 181, 179, - 177, 176, 175, 176, 178, 182, 185, 184, 175, 175, 175, 174, 172, 170, 167, 165, - 168, 168, 168, 166, 164, 161, 160, 159, 158, 161, 166, 166, 170, 174, 176, 172, - 175, 177, 181, 181, 179, 176, 176, 176, 183, 183, 182, 182, 183, 186, 190, 192, - 189, 188, 186, 185, 184, 185, 186, 187, 188, 182, 179, 181, 182, 182, 184, 187, - 192, 192, 191, 190, 189, 189, 189, 190, 195, 198, 198, 192, 190, 192, 193, 191, - 191, 192, 189, 185, 187, 194, 195, 192, 187, 187, 185, 180, 179, 181, 177, 171, - 167, 159, 153, 141, 124, 130, 148, 155, 156, 156, 158, 161, 166, 167, 165, 161, - 154, 149, 127, 96, 71, 106, 98, 99, 98, 99, 100, 100, 99, 96, 93, 90, - 94, 92, 90, 88, 87, 87, 89, 90, 88, 86, 84, 69, 73, 77, 79, 78, - 77, 78, 78, 75, 75, 75, 73, 72, 72, 74, 71, 75, 76, 76, 78, 80, - 82, 84, 85, 82, 83, 83, 80, 76, 72, 71, 72, 83, 92, 96, 92, 88, - 85, 82, 79, 74, 73, 76, 70, 83, 95, 86, 102, 131, 140, 147, 151, 151, - 151, 152, 154, 160, 160, 161, 164, 168, 170, 170, 169, 172, 165, 159, 159, 165, - 170, 171, 170, 173, 172, 172, 171, 173, 176, 180, 183, 179, 179, 180, 179, 178, - 175, 172, 170, 168, 168, 169, 168, 166, 161, 155, 151, 148, 156, 163, 163, 164, - 168, 173, 174, 176, 178, 181, 181, 180, 178, 177, 177, 181, 182, 183, 185, 186, - 186, 186, 186, 186, 186, 185, 185, 186, 188, 190, 191, 192, 185, 181, 183, 184, - 184, 186, 189, 188, 189, 191, 193, 193, 192, 190, 188, 189, 194, 195, 191, 189, - 190, 189, 187, 187, 186, 184, 182, 185, 191, 193, 191, 184, 184, 180, 175, 176, - 179, 178, 174, 162, 154, 152, 143, 126, 128, 144, 150, 155, 156, 158, 161, 166, - 167, 164, 161, 158, 156, 132, 98, 70, 104, 97, 102, 95, 94, 94, 94, 93, - 92, 91, 91, 89, 90, 90, 90, 90, 89, 88, 88, 88, 86, 83, 75, 78, - 81, 81, 79, 77, 78, 78, 76, 77, 78, 81, 82, 85, 85, 84, 82, 81, - 83, 82, 86, 86, 90, 90, 94, 92, 94, 92, 95, 93, 95, 97, 94, 100, - 98, 92, 90, 90, 89, 85, 38, 61, 83, 70, 70, 80, 79, 102, 128, 138, - 146, 150, 151, 150, 151, 153, 161, 161, 161, 164, 167, 169, 168, 167, 167, 162, - 157, 156, 161, 167, 172, 173, 168, 169, 170, 170, 169, 171, 174, 177, 177, 177, - 178, 178, 177, 175, 172, 171, 173, 169, 165, 162, 161, 159, 157, 156, 143, 151, - 157, 157, 158, 165, 173, 177, 181, 180, 177, 176, 175, 176, 180, 183, 179, 181, - 184, 187, 188, 188, 187, 186, 185, 184, 183, 183, 183, 185, 187, 188, 188, 182, - 179, 181, 184, 184, 187, 190, 188, 189, 192, 195, 197, 195, 191, 187, 185, 190, - 192, 189, 188, 189, 188, 186, 190, 188, 185, 184, 185, 187, 187, 186, 181, 180, - 177, 172, 172, 176, 176, 172, 163, 155, 154, 149, 131, 130, 143, 149, 155, 157, - 158, 161, 166, 167, 165, 162, 154, 151, 132, 92, 67, 92, 89, 93, 93, 93, - 93, 94, 95, 95, 95, 96, 92, 93, 94, 95, 95, 94, 93, 90, 89, 88, - 86, 77, 79, 81, 81, 77, 75, 75, 78, 80, 82, 85, 87, 90, 93, 94, - 94, 90, 90, 91, 91, 94, 94, 97, 97, 91, 89, 91, 93, 98, 97, 94, - 90, 99, 102, 96, 90, 87, 89, 87, 82, 33, 50, 71, 64, 59, 61, 67, - 103, 126, 136, 145, 150, 151, 151, 152, 154, 160, 162, 165, 169, 171, 170, 166, - 162, 159, 158, 158, 159, 162, 167, 172, 175, 167, 170, 173, 173, 171, 170, 171, - 173, 174, 174, 174, 174, 173, 173, 172, 171, 176, 171, 165, 163, 164, 166, 166, - 165, 148, 150, 149, 147, 149, 158, 164, 165, 174, 174, 174, 173, 174, 177, 180, - 185, 177, 179, 180, 182, 184, 184, 184, 184, 183, 182, 181, 180, 180, 181, 182, - 183, 182, 177, 175, 178, 181, 181, 182, 186, 190, 190, 190, 193, 195, 194, 190, - 186, 186, 190, 190, 186, 185, 188, 190, 190, 191, 188, 186, 185, 185, 183, 181, - 180, 182, 183, 180, 176, 176, 177, 174, 168, 167, 157, 156, 151, 133, 130, 143, - 150, 159, 157, 158, 159, 163, 165, 165, 164, 149, 145, 137, 88, 71, 80, 83, - 81, 86, 86, 90, 93, 95, 95, 94, 93, 95, 95, 94, 94, 93, 93, 93, - 93, 87, 87, 87, 75, 77, 80, 81, 81, 79, 80, 82, 80, 80, 83, 86, - 88, 89, 90, 92, 98, 98, 100, 99, 102, 102, 105, 104, 105, 101, 104, 106, - 111, 107, 101, 93, 104, 104, 101, 97, 95, 94, 88, 79, 83, 56, 46, 50, - 75, 84, 74, 96, 124, 136, 145, 151, 152, 152, 154, 155, 156, 159, 165, 170, - 172, 168, 160, 154, 167, 168, 168, 166, 164, 162, 163, 164, 169, 173, 177, 178, - 175, 173, 173, 173, 176, 176, 176, 176, 176, 176, 176, 176, 174, 172, 170, 171, - 174, 175, 173, 171, 157, 152, 143, 138, 141, 151, 153, 150, 160, 165, 173, 178, - 180, 178, 180, 179, 177, 176, 175, 175, 175, 176, 177, 178, 185, 184, 183, 182, - 182, 183, 185, 186, 185, 180, 177, 180, 181, 180, 180, 183, 192, 190, 188, 188, - 190, 190, 187, 184, 188, 190, 189, 184, 183, 189, 193, 194, 188, 185, 183, 184, - 184, 181, 178, 177, 186, 188, 187, 183, 182, 181, 174, 166, 165, 153, 151, 146, - 127, 124, 138, 146, 161, 159, 159, 159, 163, 165, 166, 165, 152, 147, 149, 92, - 81, 82, 87, 79, 71, 76, 82, 87, 90, 89, 86, 84, 95, 93, 90, 87, - 85, 86, 88, 87, 82, 84, 86, 80, 82, 83, 83, 82, 80, 76, 74, 89, - 86, 75, 91, 85, 93, 90, 103, 103, 96, 89, 89, 96, 99, 98, 93, 105, - 112, 116, 108, 103, 104, 108, 107, 109, 105, 103, 100, 96, 91, 86, 84, 90, - 89, 84, 76, 70, 59, 64, 90, 122, 135, 139, 144, 152, 148, 144, 151, 153, - 158, 164, 167, 166, 163, 159, 158, 163, 164, 164, 163, 161, 161, 163, 165, 164, - 169, 175, 180, 181, 177, 172, 168, 169, 170, 172, 176, 178, 176, 171, 167, 167, - 174, 179, 176, 167, 161, 161, 164, 167, 162, 147, 143, 146, 141, 138, 147, 152, - 160, 171, 178, 177, 169, 169, 170, 170, 172, 178, 184, 180, 171, 170, 175, 185, - 180, 175, 175, 180, 184, 185, 185, 186, 181, 177, 177, 181, 186, 188, 188, 192, - 193, 192, 190, 187, 185, 186, 188, 190, 190, 189, 188, 188, 187, 186, 186, 188, - 187, 187, 188, 187, 184, 178, 174, 181, 177, 175, 178, 179, 175, 171, 172, 164, - 161, 156, 148, 133, 126, 131, 141, 155, 154, 156, 158, 162, 164, 164, 162, 144, - 141, 144, 71, 98, 83, 76, 87, 77, 76, 77, 81, 83, 83, 81, 78, 81, - 78, 75, 74, 75, 79, 83, 87, 79, 79, 81, 82, 82, 80, 80, 78, 76, - 72, 71, 73, 81, 75, 84, 76, 88, 81, 86, 112, 111, 104, 94, 88, 86, - 92, 96, 89, 93, 96, 94, 98, 103, 105, 100, 93, 94, 103, 110, 107, 95, - 87, 87, 67, 83, 90, 89, 95, 95, 93, 103, 120, 134, 138, 142, 149, 146, - 143, 150, 153, 157, 163, 165, 165, 162, 160, 160, 162, 164, 165, 165, 164, 164, - 165, 167, 161, 164, 169, 173, 176, 176, 175, 174, 175, 171, 166, 165, 167, 170, - 173, 174, 171, 165, 162, 166, 174, 175, 168, 160, 157, 165, 164, 154, 143, 127, - 122, 130, 141, 156, 161, 156, 164, 185, 185, 169, 172, 175, 180, 182, 175, 171, - 178, 190, 177, 177, 178, 178, 179, 181, 184, 186, 193, 188, 181, 179, 180, 183, - 184, 185, 186, 187, 188, 187, 186, 186, 188, 189, 190, 190, 189, 188, 188, 187, - 186, 186, 189, 188, 187, 185, 183, 178, 171, 166, 173, 169, 169, 173, 174, 171, - 167, 168, 168, 163, 156, 145, 132, 127, 135, 147, 154, 155, 159, 162, 165, 165, - 162, 158, 147, 145, 132, 81, 102, 86, 77, 82, 78, 77, 76, 78, 80, 80, - 79, 77, 80, 81, 82, 82, 80, 78, 76, 73, 77, 78, 80, 81, 80, 78, - 77, 76, 76, 75, 75, 71, 96, 99, 95, 71, 83, 84, 95, 86, 90, 92, - 90, 94, 96, 105, 108, 115, 112, 110, 106, 110, 109, 105, 93, 103, 94, 96, - 101, 93, 81, 78, 86, 84, 97, 94, 83, 89, 94, 90, 91, 120, 135, 140, - 142, 148, 146, 143, 150, 152, 156, 160, 163, 163, 162, 162, 162, 162, 164, 167, - 168, 167, 166, 166, 167, 163, 164, 165, 167, 169, 172, 174, 176, 177, 172, 165, - 161, 162, 166, 169, 171, 163, 167, 171, 171, 169, 168, 170, 173, 168, 165, 159, - 155, 153, 144, 129, 117, 123, 127, 142, 159, 165, 168, 179, 193, 180, 172, 167, - 169, 172, 171, 169, 169, 171, 176, 181, 182, 180, 181, 186, 190, 195, 190, 183, - 179, 179, 181, 184, 185, 185, 187, 188, 188, 187, 186, 188, 190, 190, 190, 189, - 188, 188, 187, 186, 186, 192, 191, 189, 187, 184, 179, 173, 169, 172, 170, 171, - 176, 178, 175, 171, 171, 175, 168, 157, 144, 129, 126, 136, 150, 151, 154, 161, - 164, 167, 164, 160, 156, 150, 149, 115, 98, 107, 89, 82, 81, 78, 74, 71, - 71, 74, 76, 77, 78, 75, 77, 79, 81, 82, 82, 81, 80, 78, 80, 80, - 75, 76, 74, 72, 72, 75, 76, 77, 75, 86, 80, 83, 67, 79, 78, 88, - 96, 93, 90, 98, 110, 113, 102, 90, 98, 99, 101, 107, 114, 119, 118, 113, - 120, 105, 100, 104, 98, 81, 76, 82, 78, 85, 81, 75, 78, 81, 78, 86, - 119, 137, 141, 141, 147, 147, 145, 152, 152, 155, 158, 160, 161, 162, 164, 165, - 163, 166, 169, 170, 168, 166, 165, 165, 170, 169, 168, 167, 167, 168, 168, 169, - 173, 172, 170, 169, 168, 166, 162, 160, 160, 168, 174, 170, 160, 156, 162, 170, - 170, 159, 151, 147, 148, 150, 137, 116, 110, 108, 122, 146, 156, 158, 166, 181, - 185, 179, 177, 179, 181, 179, 175, 171, 173, 176, 180, 181, 183, 186, 191, 195, - 191, 187, 181, 178, 178, 182, 187, 190, 190, 192, 193, 192, 189, 187, 188, 188, - 189, 189, 189, 188, 188, 187, 187, 187, 187, 186, 186, 186, 186, 184, 180, 177, - 177, 174, 175, 180, 182, 178, 174, 174, 178, 171, 159, 145, 129, 124, 133, 147, - 153, 157, 163, 165, 166, 163, 160, 156, 151, 148, 99, 112, 108, 96, 91, 87, - 79, 73, 70, 69, 72, 76, 79, 81, 78, 77, 75, 74, 75, 79, 82, 85, - 79, 81, 84, 66, 65, 61, 58, 58, 60, 61, 63, 80, 64, 52, 82, 90, - 97, 80, 81, 104, 102, 100, 108, 118, 120, 109, 98, 96, 98, 103, 109, 114, - 117, 119, 119, 115, 105, 110, 124, 122, 100, 80, 72, 73, 76, 81, 89, 84, - 63, 51, 64, 111, 133, 138, 136, 141, 144, 144, 151, 151, 154, 157, 159, 160, - 161, 164, 166, 164, 166, 169, 169, 166, 163, 161, 161, 172, 172, 171, 170, 169, - 166, 164, 163, 169, 169, 170, 172, 172, 169, 164, 160, 168, 162, 157, 157, 162, - 162, 157, 151, 156, 158, 164, 148, 123, 120, 117, 98, 103, 122, 124, 112, 133, - 174, 182, 160, 167, 174, 182, 180, 173, 172, 178, 185, 176, 174, 174, 177, 184, - 190, 193, 194, 188, 185, 181, 178, 178, 181, 186, 190, 190, 192, 193, 193, 190, - 189, 188, 189, 189, 189, 188, 188, 188, 188, 187, 187, 181, 180, 180, 181, 182, - 181, 179, 176, 176, 173, 173, 177, 177, 173, 168, 168, 172, 166, 157, 145, 130, - 124, 132, 144, 155, 158, 163, 164, 163, 161, 158, 157, 148, 144, 96, 120, 109, - 105, 100, 96, 84, 78, 73, 70, 71, 73, 75, 75, 83, 81, 77, 74, 71, - 71, 72, 75, 79, 81, 82, 57, 55, 53, 47, 46, 46, 46, 47, 59, 57, - 65, 104, 103, 98, 83, 98, 95, 101, 106, 104, 105, 106, 115, 120, 118, 114, - 116, 116, 117, 111, 114, 116, 113, 106, 107, 110, 107, 92, 74, 60, 85, 79, - 79, 85, 77, 49, 42, 63, 104, 128, 134, 131, 136, 141, 143, 150, 152, 155, - 159, 161, 161, 162, 164, 166, 165, 167, 169, 168, 165, 163, 162, 162, 168, 169, - 171, 172, 171, 169, 167, 165, 169, 167, 166, 166, 169, 171, 172, 172, 165, 166, - 166, 167, 166, 166, 165, 164, 167, 164, 170, 154, 125, 112, 89, 46, 59, 81, - 87, 78, 82, 115, 149, 163, 176, 171, 165, 164, 171, 177, 175, 168, 175, 172, - 171, 176, 185, 191, 193, 192, 192, 190, 187, 182, 179, 179, 182, 185, 183, 186, - 189, 190, 190, 189, 190, 191, 188, 188, 188, 188, 188, 188, 188, 188, 186, 184, - 182, 182, 182, 180, 177, 175, 178, 173, 172, 174, 175, 171, 167, 168, 164, 160, - 154, 145, 131, 126, 133, 144, 154, 158, 163, 163, 162, 159, 158, 158, 144, 136, - 108, 124, 110, 113, 106, 104, 95, 88, 82, 78, 75, 73, 71, 69, 79, 82, - 85, 87, 87, 84, 81, 80, 80, 81, 80, 58, 58, 57, 52, 53, 53, 53, - 54, 45, 61, 77, 104, 88, 85, 79, 99, 104, 109, 111, 102, 94, 91, 101, - 108, 97, 90, 92, 98, 109, 110, 116, 120, 114, 112, 108, 97, 87, 82, 76, - 68, 73, 67, 63, 69, 77, 71, 76, 98, 101, 127, 134, 130, 135, 142, 146, - 153, 154, 157, 161, 163, 163, 163, 164, 165, 165, 167, 168, 167, 166, 165, 166, - 168, 167, 168, 169, 170, 171, 170, 169, 168, 171, 168, 165, 164, 167, 170, 172, - 173, 163, 174, 184, 182, 172, 167, 173, 181, 182, 165, 165, 158, 140, 130, 87, - 12, 23, 19, 30, 44, 36, 33, 71, 122, 169, 168, 169, 173, 181, 185, 176, - 163, 171, 174, 179, 185, 190, 193, 193, 193, 196, 196, 193, 188, 182, 179, 180, - 182, 182, 185, 189, 191, 191, 190, 190, 191, 188, 188, 188, 188, 188, 188, 188, - 188, 191, 189, 186, 184, 183, 181, 177, 175, 180, 175, 172, 175, 176, 174, 172, - 174, 166, 162, 155, 145, 130, 124, 131, 143, 147, 155, 163, 164, 163, 159, 157, - 156, 139, 128, 128, 128, 113, 117, 107, 106, 98, 93, 89, 85, 82, 78, 73, - 69, 71, 75, 82, 88, 92, 93, 92, 93, 83, 84, 82, 66, 66, 68, 68, - 69, 73, 74, 76, 85, 84, 75, 92, 95, 105, 89, 84, 88, 91, 91, 95, - 101, 104, 107, 108, 98, 83, 79, 87, 98, 101, 100, 100, 91, 108, 117, 109, - 100, 100, 97, 90, 77, 82, 81, 83, 93, 92, 85, 91, 100, 127, 137, 130, - 138, 144, 151, 155, 154, 156, 162, 163, 165, 164, 164, 165, 164, 164, 167, 167, - 167, 168, 171, 174, 169, 169, 168, 168, 168, 168, 168, 168, 171, 169, 168, 167, - 167, 167, 165, 163, 172, 172, 173, 176, 180, 179, 174, 169, 169, 162, 170, 165, - 142, 136, 100, 31, 72, 47, 36, 42, 52, 51, 53, 60, 94, 134, 174, 177, - 159, 152, 161, 173, 169, 178, 189, 196, 197, 195, 195, 194, 197, 196, 196, 190, - 185, 179, 181, 181, 188, 189, 194, 192, 193, 188, 189, 189, 186, 186, 186, 186, - 186, 186, 188, 188, 187, 185, 182, 180, 179, 178, 175, 172, 178, 173, 170, 172, - 174, 173, 174, 177, 177, 170, 158, 145, 128, 120, 127, 138, 144, 153, 164, 167, - 163, 156, 151, 150, 132, 119, 141, 129, 115, 122, 106, 109, 101, 102, 101, 100, - 98, 94, 89, 83, 80, 79, 78, 78, 79, 80, 84, 86, 90, 93, 90, 87, - 86, 85, 84, 81, 81, 80, 80, 85, 85, 82, 81, 82, 84, 91, 97, 99, - 101, 90, 84, 90, 91, 90, 97, 89, 81, 76, 73, 73, 74, 79, 81, 97, - 91, 88, 83, 78, 77, 85, 93, 86, 78, 79, 89, 92, 83, 79, 87, 100, - 126, 131, 120, 129, 139, 145, 144, 150, 154, 162, 161, 159, 156, 157, 159, 160, - 162, 168, 170, 169, 168, 168, 169, 167, 168, 171, 171, 172, 172, 171, 169, 162, - 161, 160, 158, 160, 161, 164, 165, 162, 170, 176, 177, 173, 168, 164, 163, 174, - 158, 159, 155, 153, 142, 98, 70, 119, 104, 80, 61, 48, 45, 47, 47, 36, - 65, 72, 127, 144, 168, 181, 175, 184, 190, 192, 190, 188, 191, 191, 187, 199, - 196, 197, 190, 183, 175, 182, 189, 182, 181, 184, 184, 187, 186, 189, 190, 184, - 185, 186, 186, 184, 184, 187, 189, 191, 183, 176, 178, 182, 179, 176, 175, 177, - 179, 174, 175, 182, 176, 170, 177, 176, 161, 167, 144, 137, 121, 140, 140, 148, - 154, 160, 154, 148, 156, 157, 138, 113, 127, 132, 115, 108, 118, 121, 116, 127, - 135, 134, 126, 116, 110, 109, 110, 104, 95, 89, 86, 83, 77, 80, 91, 92, - 118, 96, 82, 83, 82, 82, 81, 80, 81, 80, 75, 77, 80, 81, 82, 83, - 84, 87, 84, 91, 86, 83, 88, 84, 82, 88, 73, 79, 85, 90, 90, 86, - 84, 84, 77, 73, 75, 81, 85, 80, 78, 77, 79, 77, 82, 90, 90, 84, - 90, 105, 100, 125, 129, 121, 128, 139, 142, 144, 150, 155, 161, 161, 157, 154, - 157, 158, 159, 160, 164, 166, 168, 167, 168, 169, 170, 171, 173, 173, 172, 171, - 170, 167, 164, 160, 160, 159, 159, 160, 163, 163, 162, 165, 171, 171, 168, 166, - 166, 167, 174, 154, 156, 148, 151, 144, 127, 71, 107, 111, 114, 116, 107, 91, - 68, 49, 32, 29, 38, 125, 170, 183, 188, 190, 189, 195, 196, 194, 192, 195, - 194, 193, 191, 193, 195, 194, 187, 179, 180, 187, 180, 180, 181, 181, 181, 181, - 181, 181, 180, 182, 183, 182, 183, 182, 183, 185, 190, 183, 178, 180, 184, 181, - 177, 176, 169, 175, 173, 172, 176, 168, 168, 178, 175, 160, 163, 138, 127, 113, - 136, 141, 172, 171, 170, 158, 143, 143, 140, 122, 132, 125, 126, 136, 130, 118, - 118, 135, 142, 119, 101, 102, 109, 110, 112, 116, 124, 109, 95, 90, 87, 83, - 85, 95, 100, 121, 109, 78, 79, 80, 80, 79, 78, 78, 77, 82, 82, 82, - 81, 80, 79, 80, 79, 82, 77, 66, 67, 85, 89, 79, 74, 72, 77, 80, - 79, 74, 74, 78, 81, 90, 78, 71, 76, 85, 86, 83, 81, 87, 89, 95, - 93, 78, 61, 61, 75, 98, 124, 128, 121, 128, 137, 142, 145, 152, 157, 161, - 162, 160, 157, 160, 159, 158, 161, 165, 167, 167, 167, 170, 171, 175, 175, 175, - 174, 173, 171, 171, 167, 165, 163, 162, 160, 159, 159, 162, 162, 163, 163, 166, - 165, 165, 165, 168, 169, 161, 146, 154, 146, 149, 139, 117, 45, 111, 104, 94, - 91, 92, 96, 95, 91, 108, 79, 67, 128, 161, 162, 161, 166, 185, 191, 192, - 190, 188, 192, 191, 190, 185, 189, 196, 199, 193, 183, 181, 184, 185, 185, 185, - 184, 183, 182, 180, 179, 179, 180, 181, 180, 181, 180, 181, 183, 188, 182, 180, - 183, 186, 182, 177, 176, 173, 179, 179, 176, 176, 166, 165, 177, 176, 165, 165, - 139, 123, 116, 142, 150, 146, 145, 152, 156, 144, 137, 131, 118, 125, 132, 136, - 132, 133, 138, 135, 135, 130, 104, 89, 102, 115, 111, 108, 114, 125, 119, 114, - 113, 110, 105, 101, 100, 103, 110, 106, 77, 76, 78, 78, 80, 78, 76, 76, - 86, 82, 77, 71, 70, 72, 77, 79, 65, 78, 79, 71, 67, 64, 72, 89, - 77, 80, 80, 77, 77, 82, 88, 88, 80, 66, 57, 59, 67, 68, 68, 69, - 69, 75, 83, 86, 76, 64, 63, 74, 96, 121, 125, 121, 128, 136, 140, 145, - 151, 154, 159, 161, 161, 162, 164, 165, 161, 162, 167, 167, 169, 170, 172, 173, - 175, 176, 176, 175, 174, 173, 173, 171, 167, 164, 162, 160, 158, 160, 161, 161, - 165, 164, 165, 163, 164, 164, 166, 165, 151, 145, 148, 139, 141, 139, 83, 61, - 106, 99, 93, 91, 96, 98, 97, 95, 92, 86, 90, 124, 154, 173, 190, 201, - 181, 186, 187, 185, 183, 187, 187, 186, 185, 189, 195, 199, 194, 184, 180, 182, - 186, 186, 187, 186, 185, 182, 180, 179, 178, 180, 181, 180, 180, 179, 180, 181, - 185, 181, 181, 185, 188, 182, 177, 176, 182, 185, 181, 177, 178, 169, 164, 174, - 174, 168, 164, 141, 119, 121, 146, 157, 160, 151, 152, 155, 141, 130, 126, 120, - 123, 135, 136, 127, 130, 142, 139, 126, 123, 116, 114, 119, 118, 109, 113, 124, - 123, 126, 124, 124, 120, 115, 112, 111, 107, 100, 101, 75, 74, 75, 75, 77, - 78, 77, 78, 72, 70, 66, 65, 71, 77, 82, 85, 84, 83, 75, 73, 82, - 84, 78, 80, 67, 75, 82, 90, 99, 105, 99, 89, 91, 90, 94, 98, 97, - 90, 82, 81, 73, 73, 75, 78, 78, 76, 79, 87, 93, 117, 123, 121, 131, - 137, 139, 145, 150, 153, 158, 161, 164, 167, 169, 171, 165, 166, 170, 170, 171, - 172, 174, 176, 174, 175, 176, 176, 176, 176, 175, 174, 169, 168, 166, 164, 163, - 165, 166, 166, 170, 169, 167, 166, 166, 164, 162, 156, 144, 143, 136, 124, 125, - 136, 49, 103, 96, 94, 93, 93, 94, 89, 81, 75, 93, 97, 121, 142, 162, - 162, 168, 175, 186, 191, 190, 188, 185, 189, 189, 188, 190, 190, 194, 195, 190, - 182, 179, 181, 180, 181, 182, 182, 182, 180, 178, 176, 179, 180, 181, 180, 180, - 179, 180, 181, 182, 180, 181, 186, 188, 182, 178, 177, 184, 182, 174, 172, 180, - 173, 166, 171, 165, 165, 159, 140, 111, 117, 134, 141, 157, 141, 134, 131, 123, - 125, 136, 141, 143, 127, 128, 142, 144, 130, 124, 134, 134, 138, 134, 118, 109, - 111, 123, 132, 129, 131, 131, 121, 111, 110, 115, 118, 110, 106, 108, 75, 72, - 72, 73, 75, 77, 77, 79, 72, 72, 74, 80, 87, 89, 86, 83, 91, 84, - 75, 81, 100, 100, 81, 69, 81, 84, 86, 85, 94, 101, 94, 82, 90, 91, - 93, 93, 87, 80, 82, 86, 104, 95, 84, 75, 73, 74, 74, 78, 92, 113, - 119, 121, 131, 137, 139, 147, 150, 152, 156, 160, 165, 169, 171, 172, 168, 170, - 171, 172, 172, 172, 174, 176, 173, 174, 175, 176, 176, 176, 176, 174, 174, 171, - 169, 168, 169, 170, 171, 172, 172, 170, 168, 167, 166, 163, 158, 149, 130, 135, - 135, 123, 118, 110, 23, 94, 91, 86, 80, 75, 77, 81, 87, 93, 98, 82, - 114, 142, 175, 169, 173, 190, 190, 194, 192, 189, 186, 189, 189, 188, 193, 190, - 190, 190, 186, 180, 179, 182, 179, 180, 182, 184, 183, 182, 180, 178, 179, 180, - 181, 180, 179, 178, 179, 180, 182, 180, 183, 187, 189, 183, 180, 181, 184, 180, - 171, 172, 184, 181, 173, 175, 165, 166, 155, 138, 105, 114, 122, 126, 124, 120, - 125, 131, 130, 136, 145, 143, 134, 129, 131, 140, 144, 142, 140, 144, 141, 146, - 141, 129, 127, 133, 132, 122, 128, 137, 143, 134, 123, 114, 111, 108, 106, 114, - 117, 74, 70, 68, 69, 69, 71, 77, 80, 85, 85, 87, 92, 97, 96, 91, - 85, 68, 90, 101, 93, 82, 71, 78, 99, 102, 103, 97, 87, 89, 99, 100, - 94, 104, 102, 95, 91, 86, 85, 95, 105, 94, 89, 85, 83, 83, 85, 84, - 84, 89, 107, 115, 118, 130, 135, 140, 149, 154, 154, 157, 161, 167, 171, 172, - 173, 171, 173, 172, 171, 170, 170, 172, 174, 173, 174, 174, 174, 174, 173, 173, - 172, 172, 171, 170, 169, 170, 171, 172, 173, 173, 169, 166, 164, 163, 160, 155, - 147, 124, 128, 130, 118, 112, 77, 51, 75, 82, 87, 92, 96, 98, 97, 99, - 101, 114, 98, 130, 139, 171, 170, 176, 192, 190, 194, 192, 187, 183, 186, 186, - 185, 190, 187, 186, 187, 185, 180, 179, 183, 181, 183, 185, 186, 186, 184, 181, - 179, 178, 179, 179, 178, 177, 176, 176, 178, 184, 183, 185, 189, 190, 185, 184, - 186, 186, 183, 175, 175, 182, 178, 173, 179, 169, 169, 151, 138, 102, 117, 122, - 127, 136, 143, 152, 152, 143, 144, 141, 125, 119, 134, 137, 131, 137, 153, 156, - 148, 143, 146, 146, 147, 149, 148, 139, 129, 133, 139, 143, 138, 131, 126, 116, - 104, 108, 112, 109, 73, 67, 66, 65, 67, 70, 75, 79, 85, 80, 81, 83, - 93, 97, 98, 94, 101, 90, 72, 70, 89, 96, 91, 91, 76, 88, 93, 91, - 92, 98, 98, 91, 87, 88, 89, 92, 88, 85, 86, 92, 88, 94, 99, 103, - 100, 94, 83, 76, 87, 104, 113, 118, 129, 135, 138, 150, 155, 157, 159, 161, - 167, 170, 170, 170, 172, 173, 171, 170, 168, 168, 170, 171, 175, 175, 175, 172, - 173, 170, 168, 167, 168, 167, 166, 166, 167, 168, 170, 172, 170, 166, 163, 158, - 159, 156, 155, 148, 138, 129, 122, 98, 97, 57, 116, 100, 94, 95, 93, 86, - 80, 78, 83, 89, 90, 106, 157, 143, 167, 178, 182, 180, 193, 197, 194, 188, - 184, 186, 186, 185, 187, 184, 184, 186, 185, 181, 180, 183, 179, 181, 183, 184, - 182, 180, 176, 174, 176, 177, 178, 176, 176, 174, 174, 176, 187, 186, 188, 191, - 192, 187, 187, 190, 184, 184, 177, 173, 175, 167, 163, 172, 164, 164, 144, 132, - 98, 119, 126, 130, 131, 134, 136, 125, 119, 133, 143, 134, 139, 129, 130, 142, - 143, 133, 135, 151, 151, 143, 143, 145, 141, 138, 146, 156, 148, 137, 122, 108, - 110, 119, 123, 122, 115, 110, 98, 73, 69, 71, 71, 73, 74, 76, 78, 85, - 83, 85, 74, 64, 69, 77, 70, 58, 72, 80, 81, 85, 80, 80, 90, 99, - 95, 96, 103, 97, 79, 69, 75, 97, 97, 92, 88, 87, 89, 93, 98, 88, - 93, 97, 101, 100, 101, 105, 108, 93, 100, 113, 122, 127, 132, 135, 140, 155, - 156, 160, 161, 164, 168, 175, 179, 172, 171, 170, 169, 169, 170, 170, 171, 170, - 168, 169, 168, 171, 171, 172, 173, 166, 163, 169, 170, 161, 163, 168, 167, 163, - 166, 168, 160, 158, 154, 152, 145, 146, 111, 125, 110, 79, 104, 121, 99, 115, - 112, 106, 102, 99, 96, 96, 96, 80, 117, 146, 154, 165, 170, 176, 182, 189, - 192, 192, 191, 185, 184, 184, 187, 196, 191, 185, 183, 183, 182, 179, 175, 176, - 178, 181, 183, 183, 182, 180, 179, 184, 180, 176, 176, 181, 183, 181, 179, 192, - 191, 190, 191, 193, 190, 184, 179, 188, 185, 180, 174, 170, 168, 167, 168, 164, - 142, 150, 121, 73, 127, 125, 138, 132, 137, 138, 138, 133, 130, 132, 136, 143, - 146, 148, 150, 148, 145, 150, 157, 148, 141, 135, 137, 141, 142, 137, 128, 131, - 129, 124, 116, 99, 87, 91, 110, 114, 114, 109, 75, 72, 71, 73, 72, 73, - 76, 78, 83, 81, 84, 80, 73, 80, 88, 80, 66, 73, 69, 71, 81, 88, - 93, 107, 91, 95, 95, 93, 92, 93, 92, 91, 85, 94, 100, 101, 97, 89, - 85, 81, 91, 99, 113, 117, 110, 95, 79, 67, 101, 96, 98, 108, 117, 120, - 125, 134, 146, 151, 156, 161, 164, 166, 170, 170, 174, 173, 172, 171, 171, 171, - 172, 171, 169, 168, 168, 166, 165, 163, 160, 160, 173, 166, 172, 172, 170, 170, - 174, 166, 169, 165, 158, 151, 149, 150, 145, 141, 131, 128, 131, 108, 99, 113, - 114, 119, 119, 119, 118, 115, 112, 108, 106, 100, 91, 123, 149, 156, 168, 173, - 178, 182, 188, 190, 191, 192, 189, 188, 186, 187, 186, 185, 184, 184, 184, 181, - 178, 175, 179, 178, 177, 176, 176, 177, 179, 180, 182, 176, 169, 167, 172, 180, - 188, 192, 194, 194, 193, 189, 186, 183, 182, 182, 184, 179, 172, 170, 171, 171, - 170, 166, 179, 157, 152, 106, 79, 122, 116, 122, 123, 125, 124, 125, 129, 142, - 158, 174, 161, 158, 159, 163, 162, 158, 157, 159, 148, 143, 141, 140, 141, 142, - 142, 139, 139, 133, 126, 118, 100, 80, 71, 78, 110, 140, 132, 79, 75, 75, - 76, 77, 79, 78, 80, 86, 81, 85, 86, 84, 90, 95, 87, 80, 77, 64, - 59, 67, 71, 70, 79, 86, 97, 101, 94, 90, 95, 89, 78, 94, 89, 77, - 66, 63, 73, 91, 103, 113, 105, 92, 80, 80, 91, 108, 119, 91, 83, 88, - 101, 113, 118, 129, 141, 140, 147, 157, 162, 166, 166, 166, 166, 173, 171, 171, - 170, 170, 169, 169, 168, 161, 161, 164, 165, 163, 161, 159, 158, 167, 158, 162, - 164, 164, 166, 166, 155, 161, 160, 157, 155, 155, 151, 136, 123, 127, 141, 122, - 93, 115, 123, 105, 130, 129, 129, 131, 131, 129, 123, 119, 114, 102, 129, 149, - 156, 170, 175, 178, 181, 186, 187, 189, 192, 193, 192, 187, 184, 176, 180, 184, - 185, 184, 180, 177, 176, 179, 179, 177, 176, 176, 177, 178, 178, 172, 175, 179, - 182, 185, 187, 189, 190, 198, 199, 197, 191, 186, 184, 187, 192, 185, 177, 170, - 169, 173, 175, 171, 165, 157, 146, 138, 84, 97, 130, 122, 122, 128, 130, 124, - 116, 109, 106, 109, 114, 148, 147, 148, 157, 163, 161, 159, 156, 148, 150, 150, - 149, 145, 143, 141, 141, 111, 103, 97, 97, 93, 82, 69, 72, 96, 137, 132, - 81, 79, 80, 80, 82, 85, 85, 87, 92, 86, 90, 91, 90, 93, 95, 86, - 92, 93, 84, 77, 83, 80, 75, 78, 63, 71, 75, 77, 81, 91, 93, 91, - 93, 92, 88, 85, 79, 75, 69, 65, 74, 82, 93, 99, 97, 88, 75, 67, - 68, 75, 84, 87, 95, 109, 121, 126, 135, 142, 152, 159, 161, 163, 163, 163, - 169, 166, 168, 166, 166, 164, 164, 163, 158, 157, 158, 156, 156, 154, 153, 155, - 164, 158, 162, 165, 162, 163, 165, 155, 169, 164, 154, 144, 143, 149, 148, 147, - 133, 133, 104, 81, 114, 127, 106, 125, 128, 130, 132, 132, 131, 125, 121, 117, - 109, 129, 146, 154, 170, 175, 177, 181, 186, 186, 187, 192, 194, 192, 184, 178, - 176, 180, 184, 185, 181, 178, 178, 179, 178, 180, 182, 183, 183, 181, 179, 177, - 173, 179, 186, 189, 189, 186, 185, 186, 199, 198, 195, 191, 190, 189, 191, 193, - 187, 182, 177, 174, 174, 172, 169, 165, 156, 154, 146, 78, 114, 123, 112, 100, - 105, 110, 118, 121, 126, 128, 131, 134, 123, 124, 126, 133, 139, 138, 138, 139, - 132, 133, 136, 136, 131, 124, 116, 110, 114, 105, 94, 92, 91, 85, 75, 76, - 92, 114, 115, 82, 81, 82, 83, 87, 88, 90, 91, 93, 86, 90, 93, 89, - 91, 93, 85, 74, 83, 85, 86, 95, 93, 93, 100, 110, 94, 79, 71, 61, - 53, 54, 60, 69, 72, 81, 94, 102, 93, 72, 53, 84, 80, 74, 71, 72, - 77, 82, 86, 85, 104, 107, 87, 84, 102, 114, 111, 126, 133, 140, 146, 150, - 155, 157, 159, 164, 162, 164, 163, 163, 160, 159, 157, 159, 156, 151, 147, 146, - 145, 144, 147, 152, 151, 158, 158, 152, 152, 157, 152, 153, 160, 165, 161, 153, - 148, 142, 137, 121, 108, 104, 95, 105, 121, 113, 117, 116, 116, 117, 114, 114, - 111, 110, 109, 109, 130, 145, 155, 173, 177, 181, 186, 188, 188, 187, 191, 191, - 189, 180, 175, 183, 185, 185, 182, 178, 177, 179, 183, 182, 182, 182, 182, 182, - 181, 181, 181, 185, 183, 179, 174, 173, 177, 186, 194, 200, 195, 191, 190, 194, - 193, 187, 181, 181, 182, 181, 177, 171, 168, 170, 169, 154, 156, 142, 73, 118, - 117, 118, 108, 129, 127, 118, 111, 105, 103, 103, 105, 117, 115, 116, 116, 112, - 109, 112, 117, 122, 117, 114, 113, 113, 110, 101, 94, 97, 94, 94, 93, 91, - 89, 85, 85, 88, 89, 84, 81, 81, 83, 85, 86, 88, 91, 92, 92, 83, - 88, 94, 90, 90, 96, 92, 75, 83, 78, 76, 81, 80, 81, 90, 89, 81, - 83, 91, 90, 80, 77, 80, 63, 52, 47, 54, 66, 73, 71, 67, 44, 49, - 60, 73, 85, 93, 97, 99, 98, 114, 108, 81, 73, 94, 110, 107, 122, 127, - 134, 140, 145, 151, 158, 159, 159, 160, 160, 159, 159, 157, 155, 152, 151, 149, - 146, 145, 145, 144, 146, 148, 145, 145, 152, 153, 145, 145, 154, 151, 143, 154, - 163, 156, 140, 123, 108, 96, 98, 88, 115, 116, 100, 110, 115, 116, 110, 109, - 107, 103, 102, 101, 101, 102, 111, 132, 147, 159, 177, 180, 184, 192, 191, 191, - 189, 189, 188, 186, 180, 177, 190, 188, 184, 180, 177, 178, 181, 184, 186, 183, - 178, 175, 175, 179, 185, 189, 183, 182, 180, 179, 182, 186, 191, 196, 206, 199, - 194, 195, 201, 198, 187, 176, 171, 176, 179, 177, 169, 167, 170, 174, 148, 144, - 122, 64, 108, 108, 122, 120, 119, 121, 121, 123, 127, 126, 124, 123, 114, 113, - 114, 114, 109, 105, 111, 119, 96, 86, 73, 70, 74, 78, 79, 77, 81, 90, - 102, 105, 106, 105, 101, 95, 97, 97, 85, 87, 88, 88, 89, 90, 90, 93, - 93, 94, 86, 91, 97, 91, 90, 97, 99, 105, 107, 96, 89, 91, 87, 83, - 85, 95, 99, 107, 112, 108, 97, 81, 67, 69, 59, 53, 50, 47, 41, 33, - 28, 36, 39, 47, 57, 68, 73, 73, 74, 81, 87, 82, 72, 73, 86, 96, - 97, 112, 119, 126, 134, 140, 145, 152, 155, 153, 151, 152, 152, 152, 149, 148, - 146, 138, 137, 139, 139, 136, 132, 130, 130, 135, 131, 135, 137, 133, 136, 145, - 141, 143, 138, 124, 104, 94, 98, 106, 107, 94, 85, 107, 107, 96, 103, 104, - 109, 106, 105, 104, 102, 100, 97, 96, 101, 109, 133, 150, 162, 177, 178, 182, - 193, 193, 193, 191, 189, 185, 185, 184, 186, 191, 187, 181, 178, 178, 180, 182, - 183, 183, 182, 180, 180, 181, 183, 187, 189, 178, 181, 187, 193, 199, 199, 195, - 192, 200, 197, 194, 196, 200, 197, 189, 182, 171, 174, 177, 176, 171, 171, 172, - 173, 166, 150, 117, 71, 98, 93, 103, 93, 90, 95, 101, 109, 113, 112, 105, - 99, 107, 105, 106, 109, 111, 109, 112, 116, 114, 106, 98, 95, 97, 103, 107, - 111, 119, 128, 133, 131, 126, 122, 112, 97, 112, 116, 105, 94, 94, 94, 93, - 95, 95, 94, 96, 100, 92, 97, 102, 93, 89, 97, 102, 104, 105, 96, 97, - 107, 104, 93, 91, 95, 100, 97, 86, 84, 89, 88, 75, 72, 65, 65, 60, - 53, 50, 49, 53, 54, 52, 54, 59, 67, 74, 80, 82, 91, 85, 84, 97, - 105, 100, 96, 99, 92, 97, 107, 115, 122, 127, 133, 136, 139, 139, 139, 140, - 140, 137, 134, 132, 128, 127, 125, 122, 113, 100, 88, 83, 88, 80, 80, 83, - 82, 90, 97, 90, 80, 88, 96, 103, 111, 118, 119, 111, 108, 91, 89, 82, - 93, 102, 88, 96, 99, 99, 99, 98, 96, 92, 90, 94, 104, 130, 148, 162, - 174, 173, 176, 190, 192, 193, 192, 189, 184, 185, 188, 193, 189, 183, 179, 176, - 180, 183, 183, 182, 175, 180, 187, 193, 194, 192, 187, 184, 187, 185, 183, 185, - 192, 196, 197, 196, 184, 184, 185, 187, 188, 187, 187, 185, 179, 179, 177, 177, - 175, 175, 174, 169, 161, 142, 112, 88, 111, 104, 108, 93, 101, 97, 93, 93, - 98, 103, 105, 104, 105, 100, 98, 102, 107, 104, 100, 97, 102, 103, 104, 103, - 103, 102, 104, 108, 113, 117, 118, 116, 118, 123, 119, 106, 92, 95, 94, 92, - 86, 84, 88, 94, 94, 95, 96, 101, 98, 97, 100, 100, 96, 97, 100, 102, - 102, 100, 96, 92, 89, 91, 91, 92, 88, 83, 79, 77, 79, 79, 79, 74, - 77, 80, 82, 80, 76, 70, 68, 61, 69, 66, 62, 68, 71, 79, 93, 86, - 87, 89, 92, 93, 94, 94, 95, 101, 96, 89, 86, 88, 96, 105, 114, 119, - 120, 118, 112, 108, 108, 114, 120, 109, 100, 84, 68, 62, 69, 76, 80, 94, - 97, 100, 100, 99, 97, 99, 101, 106, 106, 106, 107, 107, 107, 108, 106, 98, - 97, 97, 97, 97, 98, 97, 98, 100, 95, 95, 96, 96, 94, 96, 106, 110, - 129, 143, 152, 164, 179, 186, 186, 186, 185, 187, 193, 192, 188, 188, 191, 192, - 181, 174, 170, 177, 180, 178, 175, 178, 184, 187, 183, 183, 186, 186, 180, 179, - 188, 195, 194, 188, 186, 192, 199, 193, 186, 180, 183, 190, 192, 188, 181, 176, - 176, 178, 180, 181, 177, 173, 167, 153, 155, 78, 120, 102, 101, 105, 106, 104, - 100, 99, 98, 97, 98, 97, 95, 98, 96, 94, 92, 94, 97, 103, 105, 100, - 100, 103, 103, 103, 104, 102, 103, 105, 108, 117, 123, 119, 120, 110, 88, 79, - 85, 110, 88, 87, 89, 95, 97, 95, 96, 100, 101, 98, 97, 99, 99, 95, - 95, 98, 96, 98, 100, 98, 94, 91, 90, 87, 90, 85, 82, 80, 78, 78, - 80, 82, 80, 83, 84, 85, 84, 83, 82, 81, 72, 83, 84, 82, 85, 81, - 79, 87, 88, 88, 88, 89, 90, 92, 94, 95, 93, 93, 93, 93, 93, 93, - 93, 95, 88, 92, 93, 87, 83, 81, 85, 87, 76, 83, 90, 95, 100, 104, - 100, 95, 94, 95, 96, 96, 97, 97, 99, 100, 102, 102, 101, 100, 102, 101, - 100, 98, 97, 94, 95, 94, 92, 91, 91, 91, 100, 97, 99, 102, 103, 99, - 99, 106, 113, 119, 133, 154, 170, 176, 184, 191, 184, 183, 186, 190, 189, 186, - 186, 188, 184, 178, 172, 169, 171, 175, 181, 183, 182, 186, 188, 185, 186, 189, - 190, 185, 183, 187, 190, 191, 190, 190, 193, 197, 195, 189, 183, 182, 184, 183, - 177, 173, 175, 175, 176, 177, 177, 173, 169, 163, 159, 142, 89, 117, 107, 105, - 105, 98, 101, 101, 98, 99, 101, 102, 103, 103, 98, 96, 93, 90, 90, 92, - 93, 95, 99, 101, 101, 100, 99, 102, 104, 108, 121, 114, 108, 101, 97, 107, - 116, 108, 65, 94, 116, 76, 79, 85, 91, 90, 86, 89, 96, 97, 94, 94, - 96, 97, 92, 93, 96, 93, 97, 102, 102, 100, 95, 92, 87, 89, 85, 85, - 84, 83, 84, 85, 86, 81, 80, 79, 79, 80, 83, 85, 87, 79, 90, 90, - 89, 91, 85, 80, 86, 90, 89, 88, 87, 89, 91, 94, 96, 96, 98, 101, - 104, 104, 101, 98, 98, 111, 116, 117, 116, 113, 108, 108, 107, 106, 109, 109, - 107, 105, 104, 98, 92, 103, 102, 100, 100, 104, 106, 106, 106, 110, 109, 110, - 108, 106, 105, 103, 103, 107, 104, 102, 100, 98, 97, 98, 98, 101, 99, 103, - 107, 107, 102, 100, 106, 114, 112, 123, 153, 171, 169, 176, 190, 184, 181, 183, - 185, 185, 183, 184, 185, 179, 176, 176, 172, 170, 173, 181, 187, 184, 187, 189, - 186, 187, 191, 191, 190, 193, 192, 191, 191, 192, 193, 194, 193, 199, 196, 191, - 188, 186, 182, 178, 175, 176, 175, 176, 177, 175, 174, 168, 162, 152, 114, 99, - 110, 109, 110, 109, 95, 101, 101, 101, 101, 103, 105, 108, 109, 106, 104, 102, - 99, 98, 98, 98, 99, 106, 108, 108, 105, 102, 105, 110, 116, 107, 108, 116, - 118, 112, 110, 107, 93, 101, 64, 96, 69, 70, 74, 81, 85, 83, 86, 91, - 92, 90, 92, 95, 97, 93, 94, 98, 96, 99, 100, 100, 97, 92, 88, 85, - 83, 85, 85, 86, 85, 86, 86, 86, 83, 82, 80, 80, 82, 85, 88, 90, - 85, 93, 90, 87, 92, 91, 89, 98, 93, 93, 94, 94, 95, 97, 99, 100, - 106, 105, 104, 104, 106, 108, 110, 114, 108, 113, 113, 113, 108, 106, 104, 104, - 113, 111, 106, 100, 100, 106, 110, 108, 112, 107, 102, 102, 106, 109, 108, 107, - 112, 111, 112, 111, 109, 108, 106, 106, 114, 110, 109, 104, 104, 105, 106, 107, - 101, 99, 102, 106, 106, 100, 100, 105, 116, 111, 119, 138, 155, 161, 167, 180, - 183, 182, 181, 182, 182, 181, 182, 181, 179, 177, 177, 174, 172, 173, 178, 181, - 182, 182, 183, 182, 183, 186, 189, 189, 197, 195, 193, 191, 190, 190, 189, 189, - 193, 193, 191, 189, 185, 182, 181, 181, 174, 173, 173, 172, 173, 170, 164, 159, - 143, 94, 111, 106, 103, 105, 104, 90, 105, 104, 103, 101, 100, 101, 103, 105, - 107, 107, 107, 107, 107, 107, 107, 109, 109, 111, 113, 109, 104, 106, 109, 114, - 116, 112, 114, 114, 103, 102, 105, 99, 97, 90, 82, 75, 70, 69, 77, 84, - 88, 92, 96, 93, 89, 90, 94, 95, 90, 89, 92, 94, 95, 95, 92, 89, - 88, 86, 87, 82, 84, 85, 87, 88, 88, 87, 84, 90, 89, 89, 90, 90, - 91, 92, 93, 90, 97, 94, 93, 100, 99, 97, 104, 97, 99, 102, 105, 106, - 106, 105, 104, 110, 108, 105, 104, 105, 108, 112, 117, 117, 120, 120, 119, 116, - 115, 114, 115, 101, 105, 108, 110, 113, 115, 113, 109, 116, 111, 106, 104, 105, - 107, 106, 104, 105, 105, 107, 107, 106, 106, 107, 107, 110, 106, 106, 102, 104, - 103, 105, 107, 104, 100, 99, 101, 102, 97, 101, 107, 111, 114, 116, 122, 136, - 154, 167, 170, 178, 181, 180, 179, 178, 179, 178, 178, 176, 175, 174, 175, 178, - 179, 178, 177, 183, 181, 180, 180, 183, 185, 188, 191, 192, 195, 196, 194, 190, - 188, 191, 194, 185, 187, 187, 185, 182, 180, 180, 182, 172, 170, 168, 164, 163, - 158, 151, 145, 138, 92, 125, 105, 101, 95, 94, 85, 104, 105, 104, 101, 98, - 97, 99, 101, 103, 104, 105, 106, 107, 108, 108, 108, 104, 106, 110, 110, 107, - 106, 108, 109, 117, 111, 114, 116, 107, 106, 110, 105, 103, 97, 127, 79, 71, - 68, 74, 83, 88, 92, 96, 95, 92, 93, 93, 91, 84, 81, 81, 86, 86, - 85, 84, 83, 85, 88, 92, 85, 87, 87, 89, 90, 90, 89, 88, 90, 90, - 91, 92, 92, 92, 91, 91, 86, 95, 96, 98, 104, 99, 91, 94, 94, 97, - 101, 105, 106, 105, 102, 100, 107, 107, 107, 107, 106, 105, 104, 105, 109, 110, - 108, 105, 105, 107, 107, 108, 110, 114, 114, 110, 108, 107, 103, 97, 114, 111, - 107, 105, 105, 104, 104, 103, 104, 105, 107, 107, 108, 108, 111, 111, 109, 109, - 108, 105, 105, 107, 108, 107, 108, 103, 101, 101, 102, 100, 103, 109, 106, 114, - 117, 113, 124, 145, 161, 167, 169, 174, 176, 174, 175, 176, 175, 172, 169, 168, - 169, 173, 179, 182, 181, 179, 186, 182, 180, 182, 185, 184, 187, 191, 183, 188, - 193, 193, 190, 190, 193, 196, 186, 186, 186, 184, 181, 178, 178, 176, 178, 173, - 168, 161, 155, 147, 138, 131, 121, 92, 121, 104, 101, 97, 98, 98, 99, 104, - 107, 106, 102, 101, 103, 106, 105, 105, 105, 105, 105, 106, 106, 108, 104, 105, - 108, 111, 112, 112, 113, 113, 106, 101, 111, 119, 114, 110, 110, 103, 102, 95, - 106, 75, 69, 70, 75, 79, 80, 84, 88, 90, 88, 89, 89, 86, 78, 75, - 76, 82, 82, 82, 81, 80, 82, 85, 89, 88, 89, 90, 91, 91, 91, 91, - 89, 89, 87, 87, 88, 88, 89, 89, 89, 86, 93, 93, 94, 101, 97, 88, - 91, 92, 94, 97, 99, 101, 100, 99, 98, 105, 106, 107, 107, 106, 104, 102, - 103, 110, 109, 108, 109, 111, 111, 111, 111, 106, 107, 103, 99, 100, 108, 113, - 114, 109, 109, 110, 108, 107, 106, 106, 107, 110, 110, 112, 113, 113, 114, 114, - 116, 114, 114, 114, 113, 112, 110, 110, 110, 107, 103, 101, 105, 105, 102, 103, - 107, 110, 111, 114, 115, 119, 127, 141, 155, 160, 167, 171, 169, 170, 172, 170, - 164, 163, 164, 165, 166, 170, 173, 178, 182, 185, 180, 179, 182, 185, 182, 183, - 188, 181, 183, 187, 189, 190, 190, 188, 187, 185, 184, 182, 181, 180, 178, 176, - 175, 172, 166, 159, 151, 143, 134, 125, 116, 108, 97, 107, 98, 103, 98, 99, - 104, 97, 102, 108, 109, 105, 103, 105, 107, 109, 108, 108, 107, 107, 108, 111, - 111, 111, 107, 106, 107, 111, 112, 112, 108, 119, 101, 94, 94, 91, 96, 106, - 107, 106, 31, 61, 74, 74, 77, 80, 78, 75, 79, 85, 83, 82, 82, 85, - 85, 79, 76, 78, 81, 82, 82, 81, 78, 78, 82, 84, 88, 88, 89, 89, - 89, 89, 91, 89, 91, 89, 88, 88, 89, 91, 93, 95, 94, 97, 91, 89, - 98, 99, 97, 103, 98, 98, 100, 101, 102, 103, 104, 104, 108, 107, 105, 104, - 104, 107, 109, 111, 105, 106, 107, 109, 111, 111, 110, 109, 110, 113, 111, 108, - 108, 109, 109, 106, 106, 108, 111, 111, 109, 108, 110, 112, 109, 109, 111, 111, - 111, 111, 111, 113, 116, 118, 116, 115, 114, 112, 111, 108, 105, 101, 104, 106, - 107, 102, 101, 104, 113, 109, 110, 118, 115, 107, 118, 139, 151, 160, 165, 163, - 164, 167, 163, 156, 161, 164, 165, 161, 159, 161, 172, 181, 183, 178, 178, 181, - 182, 178, 178, 183, 186, 183, 183, 186, 190, 188, 181, 174, 177, 175, 173, 173, - 174, 174, 172, 168, 152, 147, 140, 133, 127, 121, 111, 104, 112, 110, 99, 95, - 98, 91, 86, 91, 95, 101, 109, 109, 105, 101, 102, 104, 107, 106, 106, 106, - 107, 109, 113, 116, 115, 107, 98, 96, 101, 102, 98, 93, 98, 87, 93, 104, - 99, 91, 83, 72, 89, 59, 83, 74, 76, 78, 80, 81, 81, 78, 72, 75, - 77, 79, 81, 83, 81, 79, 78, 79, 77, 79, 80, 80, 80, 82, 82, 79, - 84, 90, 91, 91, 91, 94, 95, 89, 87, 88, 89, 89, 90, 91, 91, 91, - 89, 87, 86, 88, 91, 95, 98, 92, 96, 100, 102, 101, 100, 100, 101, 100, - 101, 101, 102, 104, 105, 106, 106, 106, 107, 108, 108, 108, 110, 112, 115, 115, - 111, 107, 106, 110, 112, 110, 105, 111, 102, 106, 110, 102, 100, 109, 111, 117, - 115, 111, 109, 110, 111, 113, 114, 111, 114, 115, 113, 112, 109, 107, 103, 104, - 100, 103, 106, 108, 105, 104, 107, 105, 106, 107, 112, 119, 122, 121, 121, 141, - 139, 139, 142, 148, 153, 152, 152, 154, 154, 154, 144, 142, 159, 165, 149, 164, - 172, 173, 170, 173, 171, 170, 179, 180, 179, 177, 175, 173, 172, 172, 172, 172, - 170, 168, 166, 164, 162, 160, 156, 149, 140, 128, 118, 113, 112, 116, 117, 113, - 109, 106, 99, 94, 92, 97, 103, 101, 99, 99, 103, 107, 107, 103, 97, 103, - 104, 109, 112, 112, 105, 95, 86, 81, 86, 86, 87, 91, 96, 93, 87, 91, - 89, 91, 97, 103, 103, 96, 88, 81, 68, 63, 83, 81, 81, 80, 83, 84, - 85, 82, 92, 88, 85, 81, 79, 78, 80, 81, 78, 78, 79, 80, 82, 83, - 84, 84, 83, 83, 86, 88, 90, 93, 92, 89, 89, 87, 88, 89, 90, 90, - 91, 91, 89, 89, 89, 90, 91, 93, 95, 96, 92, 95, 99, 100, 101, 101, - 102, 103, 104, 104, 104, 104, 104, 105, 105, 105, 108, 109, 110, 110, 109, 110, - 110, 112, 113, 110, 106, 108, 109, 111, 109, 106, 112, 101, 104, 111, 107, 106, - 109, 105, 111, 110, 107, 106, 108, 110, 112, 114, 115, 117, 116, 115, 112, 111, - 110, 110, 108, 106, 108, 110, 110, 105, 104, 106, 107, 108, 111, 118, 123, 125, - 127, 128, 130, 123, 115, 113, 118, 128, 134, 137, 146, 142, 138, 131, 129, 147, - 158, 150, 158, 168, 168, 167, 172, 167, 163, 168, 164, 164, 166, 165, 167, 166, - 168, 166, 163, 157, 156, 156, 164, 164, 163, 157, 133, 128, 121, 114, 112, 112, - 112, 111, 110, 107, 105, 100, 96, 91, 92, 96, 100, 100, 101, 105, 110, 111, - 110, 105, 111, 109, 109, 108, 109, 110, 112, 113, 99, 99, 92, 87, 89, 96, - 99, 97, 109, 106, 110, 111, 112, 101, 87, 74, 90, 92, 90, 86, 84, 85, - 86, 88, 88, 88, 87, 94, 91, 87, 82, 79, 78, 79, 79, 79, 77, 80, - 81, 82, 83, 84, 84, 86, 83, 81, 84, 88, 92, 89, 83, 89, 88, 88, - 89, 90, 91, 91, 91, 88, 90, 92, 94, 95, 95, 95, 94, 93, 95, 98, - 99, 99, 100, 103, 105, 105, 105, 104, 103, 102, 102, 103, 103, 107, 109, 111, - 110, 109, 107, 108, 109, 112, 109, 107, 108, 111, 112, 110, 105, 112, 100, 105, - 113, 112, 112, 111, 101, 106, 105, 105, 105, 106, 108, 111, 113, 117, 116, 114, - 112, 111, 112, 112, 112, 115, 110, 111, 114, 113, 107, 106, 108, 103, 106, 112, - 116, 119, 122, 126, 129, 133, 131, 128, 128, 130, 129, 126, 122, 132, 123, 121, - 121, 118, 126, 135, 133, 132, 143, 145, 150, 163, 160, 155, 157, 153, 154, 158, - 157, 160, 158, 159, 156, 156, 146, 142, 141, 148, 147, 142, 132, 119, 118, 117, - 116, 115, 114, 110, 108, 106, 107, 106, 104, 101, 98, 96, 96, 96, 95, 96, - 100, 106, 109, 110, 108, 113, 112, 112, 110, 112, 115, 122, 126, 130, 130, 122, - 115, 115, 120, 120, 119, 116, 106, 99, 92, 91, 88, 84, 79, 92, 103, 99, - 78, 77, 81, 86, 90, 87, 83, 82, 82, 82, 83, 85, 84, 81, 79, 76, - 76, 77, 78, 79, 80, 81, 82, 82, 87, 86, 85, 86, 88, 88, 86, 83, - 90, 88, 89, 89, 90, 91, 92, 92, 90, 91, 93, 95, 96, 96, 96, 95, - 96, 97, 98, 98, 98, 99, 101, 104, 101, 101, 99, 99, 99, 99, 100, 101, - 106, 108, 111, 111, 110, 108, 108, 108, 111, 109, 108, 109, 111, 112, 110, 108, - 112, 102, 107, 112, 110, 110, 111, 101, 104, 103, 104, 104, 104, 106, 109, 110, - 113, 113, 113, 113, 112, 112, 111, 110, 116, 113, 113, 114, 116, 112, 112, 112, - 102, 106, 113, 116, 116, 117, 123, 128, 127, 128, 131, 134, 134, 128, 120, 114, - 124, 114, 118, 126, 121, 116, 117, 115, 120, 127, 128, 133, 149, 148, 141, 142, - 144, 145, 147, 145, 145, 141, 138, 135, 142, 135, 130, 127, 128, 125, 120, 114, - 116, 116, 118, 118, 117, 114, 111, 109, 103, 102, 103, 103, 104, 103, 103, 103, - 97, 95, 96, 98, 103, 106, 109, 109, 112, 116, 122, 122, 121, 119, 121, 122, - 124, 129, 130, 127, 125, 122, 118, 110, 109, 99, 87, 78, 77, 78, 81, 80, - 78, 88, 90, 79, 74, 75, 80, 83, 81, 81, 84, 81, 83, 86, 88, 89, - 88, 88, 83, 79, 79, 80, 81, 81, 81, 82, 82, 85, 88, 90, 89, 86, - 85, 85, 87, 88, 88, 89, 90, 91, 91, 92, 92, 94, 93, 93, 93, 94, - 95, 96, 97, 98, 99, 100, 99, 97, 97, 99, 101, 99, 98, 97, 97, 98, - 100, 102, 104, 101, 104, 109, 110, 109, 108, 108, 109, 110, 110, 112, 113, 114, - 114, 112, 108, 109, 105, 110, 110, 103, 104, 110, 104, 107, 106, 105, 104, 105, - 106, 107, 107, 110, 110, 114, 116, 116, 114, 111, 109, 115, 112, 113, 115, 117, - 115, 116, 118, 113, 114, 119, 121, 120, 120, 124, 129, 123, 121, 119, 119, 120, - 122, 125, 127, 143, 132, 138, 147, 141, 133, 134, 134, 128, 131, 126, 124, 133, - 130, 121, 123, 129, 130, 132, 129, 128, 122, 120, 116, 121, 120, 123, 121, 123, - 120, 124, 123, 118, 116, 117, 116, 113, 110, 107, 107, 100, 99, 100, 99, 102, - 105, 105, 106, 104, 102, 100, 100, 104, 107, 111, 111, 113, 118, 126, 129, 127, - 122, 121, 121, 113, 120, 125, 125, 123, 119, 113, 106, 110, 107, 104, 99, 95, - 84, 76, 70, 73, 75, 83, 92, 82, 77, 80, 84, 84, 89, 95, 95, 92, - 90, 89, 89, 91, 95, 95, 86, 84, 84, 85, 84, 84, 85, 85, 84, 89, - 92, 91, 87, 82, 86, 88, 89, 89, 89, 90, 91, 92, 92, 93, 94, 94, - 93, 92, 93, 94, 96, 97, 97, 99, 100, 100, 98, 98, 99, 100, 101, 100, - 99, 99, 100, 103, 106, 108, 100, 102, 107, 107, 107, 107, 108, 109, 108, 109, - 112, 113, 113, 112, 111, 108, 108, 105, 111, 108, 99, 101, 109, 102, 106, 106, - 105, 105, 106, 106, 106, 106, 107, 110, 114, 117, 119, 116, 111, 108, 112, 109, - 110, 114, 115, 117, 119, 121, 119, 116, 119, 120, 120, 119, 120, 123, 125, 125, - 124, 124, 123, 120, 118, 118, 113, 103, 106, 111, 104, 103, 112, 116, 121, 124, - 119, 115, 121, 118, 115, 119, 123, 123, 124, 123, 122, 120, 118, 117, 111, 115, - 120, 120, 118, 119, 124, 126, 117, 114, 111, 108, 104, 102, 102, 101, 101, 98, - 96, 98, 100, 102, 101, 100, 104, 103, 101, 100, 102, 103, 107, 108, 110, 111, - 117, 118, 118, 118, 119, 121, 121, 126, 128, 123, 122, 123, 124, 120, 120, 116, - 113, 107, 102, 95, 87, 83, 89, 79, 76, 89, 78, 76, 81, 85, 81, 84, - 92, 97, 94, 91, 90, 90, 92, 97, 97, 91, 89, 87, 87, 86, 86, 85, - 85, 83, 85, 86, 86, 86, 83, 85, 85, 89, 89, 90, 90, 91, 92, 93, - 93, 92, 92, 93, 94, 94, 94, 94, 93, 93, 96, 99, 101, 100, 100, 101, - 102, 104, 103, 101, 99, 100, 102, 105, 107, 102, 103, 104, 103, 103, 103, 105, - 107, 104, 106, 111, 112, 111, 109, 108, 105, 106, 103, 108, 107, 102, 106, 107, - 95, 103, 103, 103, 104, 105, 106, 107, 106, 105, 105, 108, 110, 112, 110, 109, - 107, 111, 107, 110, 113, 115, 116, 119, 121, 115, 112, 112, 112, 115, 115, 115, - 114, 112, 116, 121, 120, 115, 105, 96, 91, 115, 111, 114, 115, 108, 110, 121, - 122, 110, 117, 113, 111, 118, 117, 115, 123, 121, 121, 121, 121, 121, 121, 121, - 121, 115, 117, 119, 118, 117, 117, 119, 118, 113, 109, 106, 102, 99, 96, 96, - 96, 97, 97, 96, 100, 103, 104, 103, 98, 100, 98, 100, 100, 101, 101, 105, - 106, 108, 107, 111, 112, 116, 118, 120, 120, 116, 121, 119, 114, 112, 114, 118, - 116, 122, 115, 108, 100, 97, 96, 96, 98, 97, 95, 86, 63, 59, 63, 76, - 77, 69, 64, 67, 81, 83, 86, 90, 93, 93, 93, 89, 91, 89, 86, 85, - 85, 84, 83, 83, 87, 84, 83, 85, 87, 88, 85, 82, 91, 91, 92, 93, - 93, 94, 95, 95, 91, 91, 96, 96, 97, 95, 92, 90, 89, 93, 98, 101, - 102, 104, 105, 106, 107, 105, 102, 100, 100, 99, 102, 103, 105, 105, 104, 101, - 101, 100, 102, 104, 101, 104, 107, 108, 109, 105, 106, 103, 105, 100, 106, 108, - 106, 110, 105, 87, 99, 99, 100, 102, 105, 106, 108, 107, 102, 101, 102, 103, - 105, 104, 105, 105, 111, 107, 109, 112, 115, 114, 119, 119, 116, 111, 108, 110, - 113, 115, 114, 112, 116, 116, 114, 111, 108, 109, 110, 115, 111, 111, 121, 119, - 109, 111, 116, 110, 116, 124, 122, 119, 122, 118, 115, 123, 116, 115, 115, 114, - 114, 114, 114, 115, 118, 114, 115, 116, 119, 122, 121, 119, 111, 109, 106, 103, - 102, 99, 98, 97, 95, 96, 100, 105, 110, 111, 108, 102, 103, 103, 104, 104, - 105, 105, 107, 108, 111, 111, 114, 120, 126, 125, 121, 116, 112, 118, 119, 115, - 113, 112, 114, 113, 110, 111, 109, 107, 102, 95, 86, 83, 82, 99, 103, 67, - 62, 67, 70, 70, 72, 60, 33, 77, 85, 89, 85, 83, 83, 85, 80, 74, - 82, 82, 81, 86, 83, 82, 91, 83, 90, 97, 97, 93, 89, 89, 92, 96, - 92, 92, 97, 95, 91, 92, 96, 96, 98, 102, 102, 101, 100, 99, 97, 96, - 95, 95, 96, 99, 100, 98, 97, 104, 105, 104, 106, 107, 108, 109, 107, 101, - 100, 98, 97, 97, 98, 99, 100, 100, 102, 101, 97, 99, 102, 106, 104, 103, - 108, 114, 111, 105, 104, 109, 115, 107, 108, 107, 105, 104, 104, 106, 108, 103, - 105, 106, 104, 106, 107, 105, 100, 105, 108, 113, 113, 111, 112, 118, 121, 119, - 116, 115, 118, 120, 119, 115, 112, 108, 111, 115, 117, 119, 119, 117, 116, 117, - 118, 120, 118, 118, 119, 119, 121, 121, 121, 119, 118, 116, 115, 115, 114, 118, - 120, 120, 119, 117, 115, 111, 110, 112, 109, 109, 110, 113, 116, 117, 117, 113, - 111, 107, 104, 103, 103, 104, 105, 105, 104, 102, 102, 101, 101, 103, 103, 108, - 111, 107, 100, 97, 103, 105, 102, 107, 106, 105, 107, 113, 117, 117, 112, 111, - 110, 110, 107, 104, 102, 105, 108, 100, 101, 102, 101, 97, 90, 82, 75, 77, - 80, 88, 56, 53, 61, 64, 63, 59, 49, 28, 77, 86, 92, 88, 81, 81, - 84, 81, 83, 85, 82, 82, 93, 92, 88, 92, 97, 97, 97, 95, 93, 91, - 90, 90, 99, 96, 96, 100, 98, 94, 94, 98, 92, 95, 98, 98, 96, 95, - 95, 94, 92, 91, 92, 96, 99, 100, 101, 100, 102, 103, 102, 103, 102, 103, - 103, 103, 106, 103, 101, 100, 99, 100, 100, 101, 98, 101, 102, 99, 100, 103, - 103, 102, 105, 108, 110, 108, 104, 104, 107, 111, 105, 106, 106, 104, 103, 103, - 106, 106, 102, 107, 109, 105, 104, 106, 110, 110, 113, 112, 113, 113, 114, 116, - 118, 116, 116, 113, 113, 114, 117, 117, 115, 112, 112, 113, 116, 117, 118, 118, - 117, 118, 121, 124, 125, 123, 122, 118, 117, 115, 117, 117, 117, 117, 117, 116, - 113, 115, 115, 117, 117, 116, 116, 114, 114, 113, 122, 119, 116, 113, 114, 114, - 113, 112, 114, 114, 114, 113, 111, 109, 106, 105, 105, 104, 103, 102, 101, 102, - 103, 104, 104, 107, 107, 102, 102, 106, 104, 100, 101, 102, 103, 105, 107, 111, - 113, 112, 112, 112, 113, 111, 108, 106, 108, 110, 114, 109, 106, 106, 107, 104, - 96, 89, 85, 83, 81, 59, 55, 68, 77, 72, 65, 61, 56, 72, 83, 92, - 92, 88, 91, 97, 96, 92, 91, 87, 89, 102, 103, 98, 100, 93, 90, 87, - 89, 95, 101, 104, 104, 104, 102, 102, 104, 102, 99, 99, 101, 92, 94, 95, - 95, 93, 93, 94, 94, 89, 88, 90, 94, 98, 100, 102, 103, 105, 105, 103, - 104, 102, 103, 102, 102, 102, 101, 100, 99, 99, 99, 99, 99, 98, 103, 105, - 104, 104, 106, 104, 100, 108, 108, 107, 107, 106, 107, 107, 108, 105, 106, 106, - 105, 104, 105, 108, 109, 103, 108, 112, 106, 104, 106, 114, 118, 120, 115, 113, - 114, 117, 118, 118, 112, 118, 115, 115, 117, 120, 120, 119, 118, 117, 117, 117, - 117, 117, 117, 116, 118, 120, 122, 124, 125, 124, 120, 116, 112, 115, 115, 117, - 118, 117, 116, 115, 116, 115, 114, 114, 114, 115, 117, 119, 120, 126, 121, 118, - 116, 115, 112, 110, 110, 112, 114, 116, 117, 115, 111, 106, 103, 103, 102, 102, - 102, 102, 103, 104, 105, 98, 103, 107, 105, 106, 105, 103, 99, 103, 104, 108, - 109, 111, 114, 118, 120, 110, 111, 112, 111, 109, 107, 107, 107, 117, 109, 102, - 102, 107, 107, 100, 90, 89, 84, 80, 72, 66, 79, 87, 78, 67, 73, 76, - 85, 89, 89, 82, 73, 69, 65, 60, 55, 58, 56, 57, 69, 71, 67, 71, - 65, 65, 66, 71, 78, 84, 91, 95, 102, 103, 102, 103, 101, 99, 99, 100, - 96, 97, 98, 97, 95, 95, 97, 99, 93, 92, 93, 96, 99, 103, 104, 103, - 108, 108, 108, 106, 104, 104, 102, 102, 101, 99, 101, 99, 101, 100, 102, 101, - 103, 105, 109, 105, 107, 108, 109, 105, 113, 110, 108, 108, 110, 111, 110, 108, - 106, 107, 107, 106, 106, 107, 110, 113, 105, 108, 110, 107, 106, 109, 115, 115, - 119, 116, 115, 115, 116, 117, 118, 114, 118, 118, 118, 119, 120, 120, 120, 120, - 120, 119, 118, 117, 117, 118, 119, 120, 117, 118, 121, 121, 123, 120, 118, 115, - 116, 117, 119, 118, 118, 117, 115, 114, 116, 116, 115, 115, 116, 118, 121, 121, - 117, 115, 113, 111, 112, 112, 111, 109, 107, 110, 113, 114, 113, 110, 107, 105, - 104, 104, 103, 103, 103, 103, 103, 103, 99, 99, 102, 104, 102, 102, 101, 101, - 101, 106, 111, 112, 113, 115, 121, 125, 122, 123, 124, 124, 122, 120, 118, 117, - 122, 117, 112, 112, 113, 112, 107, 100, 98, 95, 94, 81, 71, 79, 81, 68, - 57, 66, 72, 65, 70, 73, 79, 86, 96, 98, 92, 77, 85, 86, 84, 90, - 89, 86, 94, 87, 91, 93, 94, 92, 92, 97, 103, 96, 98, 98, 97, 95, - 96, 96, 95, 98, 99, 99, 99, 96, 97, 99, 101, 99, 98, 97, 99, 103, - 106, 105, 106, 109, 107, 106, 104, 102, 102, 100, 100, 102, 103, 105, 106, 109, - 109, 111, 110, 109, 110, 111, 106, 108, 111, 113, 111, 116, 112, 109, 109, 112, - 113, 111, 108, 105, 106, 107, 106, 106, 107, 110, 112, 107, 109, 109, 108, 111, - 114, 112, 105, 112, 114, 115, 114, 114, 114, 116, 119, 116, 116, 116, 115, 114, - 114, 114, 115, 120, 119, 118, 118, 118, 120, 123, 124, 120, 118, 118, 116, 119, - 120, 119, 117, 116, 114, 115, 115, 114, 110, 108, 109, 116, 115, 113, 113, 113, - 113, 116, 118, 112, 109, 109, 110, 111, 110, 109, 109, 107, 107, 107, 108, 108, - 109, 109, 109, 106, 105, 105, 104, 102, 101, 99, 99, 101, 98, 97, 98, 98, - 97, 100, 101, 100, 105, 112, 117, 116, 118, 124, 127, 128, 128, 128, 128, 127, - 125, 122, 120, 120, 121, 123, 121, 117, 113, 109, 107, 101, 99, 102, 75, 66, - 73, 76, 67, 67, 78, 80, 104, 106, 103, 101, 102, 102, 99, 89, 90, 99, - 100, 96, 98, 92, 90, 97, 85, 89, 95, 92, 86, 82, 84, 90, 96, 101, - 101, 99, 100, 101, 101, 98, 98, 98, 99, 99, 98, 96, 98, 99, 102, 102, - 101, 104, 107, 108, 109, 108, 111, 111, 109, 107, 107, 105, 104, 103, 102, 103, - 107, 107, 111, 110, 113, 111, 113, 113, 113, 107, 109, 112, 116, 113, 114, 111, - 108, 108, 110, 111, 109, 106, 103, 104, 104, 103, 103, 104, 106, 109, 110, 107, - 106, 107, 112, 116, 111, 101, 109, 113, 116, 115, 114, 113, 118, 122, 117, 118, - 118, 116, 113, 113, 114, 115, 118, 118, 117, 117, 118, 120, 122, 123, 126, 122, - 117, 116, 118, 117, 116, 113, 111, 111, 110, 108, 105, 104, 103, 105, 113, 112, - 111, 110, 108, 109, 110, 111, 112, 111, 111, 111, 110, 110, 107, 105, 109, 109, - 108, 107, 107, 109, 112, 114, 108, 108, 108, 106, 104, 102, 100, 98, 103, 98, - 95, 96, 95, 95, 100, 106, 106, 113, 121, 127, 129, 130, 133, 135, 132, 133, - 131, 130, 130, 129, 126, 124, 123, 128, 133, 131, 125, 120, 119, 120, 116, 114, - 115, 67, 63, 70, 72, 72, 82, 91, 87, 78, 87, 94, 92, 93, 95, 99, - 99, 95, 100, 99, 95, 101, 97, 93, 97, 95, 96, 99, 97, 95, 94, 94, - 97, 99, 105, 106, 103, 104, 107, 108, 102, 97, 99, 102, 101, 99, 98, 98, - 99, 102, 103, 102, 106, 109, 112, 114, 113, 115, 113, 111, 110, 110, 108, 107, - 108, 103, 104, 107, 107, 110, 108, 109, 107, 111, 112, 114, 109, 112, 113, 116, - 112, 114, 112, 110, 109, 109, 109, 108, 108, 106, 106, 106, 105, 103, 104, 106, - 109, 108, 109, 108, 108, 112, 116, 113, 107, 113, 113, 115, 115, 115, 116, 118, - 119, 117, 118, 118, 117, 114, 114, 117, 119, 117, 116, 116, 116, 116, 116, 117, - 117, 125, 121, 117, 117, 119, 117, 113, 108, 110, 109, 107, 105, 104, 105, 106, - 107, 110, 110, 109, 109, 109, 110, 108, 109, 112, 111, 109, 109, 110, 109, 106, - 104, 110, 111, 108, 106, 106, 107, 109, 110, 109, 109, 109, 108, 107, 105, 102, - 101, 103, 95, 93, 96, 98, 97, 102, 111, 110, 117, 124, 133, 139, 140, 140, - 139, 146, 145, 142, 141, 141, 141, 139, 136, 137, 138, 140, 140, 138, 137, 138, - 139, 139, 140, 140, 64, 61, 67, 67, 67, 79, 82, 66, 68, 82, 93, 91, - 84, 86, 92, 97, 94, 96, 91, 93, 105, 103, 98, 99, 100, 96, 93, 90, - 91, 91, 87, 87, 94, 101, 103, 98, 101, 105, 106, 100, 100, 103, 106, 105, - 104, 103, 102, 102, 101, 102, 103, 107, 111, 116, 116, 115, 111, 111, 109, 108, - 106, 105, 104, 105, 108, 110, 111, 112, 112, 110, 109, 108, 107, 112, 114, 112, - 113, 115, 113, 109, 117, 115, 114, 112, 111, 110, 110, 111, 110, 111, 110, 108, - 107, 107, 109, 111, 107, 109, 110, 108, 109, 114, 117, 116, 119, 115, 113, 114, - 118, 120, 119, 116, 110, 112, 113, 112, 110, 111, 114, 118, 116, 116, 115, 114, - 113, 112, 112, 111, 119, 117, 116, 119, 121, 121, 115, 109, 111, 110, 107, 105, - 106, 108, 111, 113, 110, 111, 111, 112, 113, 114, 112, 112, 108, 107, 106, 107, - 109, 109, 106, 105, 111, 110, 108, 105, 104, 103, 103, 103, 107, 108, 109, 109, - 109, 107, 105, 104, 101, 94, 94, 99, 102, 103, 107, 115, 108, 112, 121, 131, - 140, 141, 137, 134, 135, 135, 130, 128, 129, 130, 128, 126, 124, 121, 119, 120, - 124, 128, 129, 129, 123, 128, 132, 62, 62, 69, 79, 86, 90, 89, 86, 65, - 93, 104, 90, 79, 88, 90, 84, 95, 94, 96, 97, 98, 96, 96, 94, 97, - 100, 99, 92, 90, 92, 91, 88, 94, 98, 100, 98, 97, 95, 99, 100, 98, - 101, 104, 103, 103, 103, 104, 105, 104, 106, 105, 108, 109, 113, 115, 117, 114, - 117, 114, 105, 101, 105, 107, 107, 108, 108, 107, 111, 117, 119, 118, 115, 121, - 115, 114, 119, 121, 117, 116, 118, 114, 113, 111, 110, 109, 107, 105, 103, 112, - 112, 112, 109, 107, 108, 113, 116, 113, 113, 114, 114, 114, 112, 109, 108, 111, - 112, 113, 114, 114, 113, 111, 110, 111, 115, 118, 117, 112, 110, 113, 117, 114, - 115, 116, 117, 117, 116, 114, 113, 118, 116, 117, 118, 117, 116, 117, 115, 114, - 113, 112, 112, 113, 116, 119, 120, 115, 114, 113, 116, 117, 118, 115, 112, 114, - 109, 104, 105, 106, 108, 106, 102, 108, 109, 108, 108, 110, 111, 111, 111, 111, - 112, 114, 114, 112, 107, 102, 96, 100, 93, 97, 100, 95, 96, 108, 113, 120, - 120, 117, 107, 106, 118, 129, 137, 139, 140, 138, 136, 132, 129, 132, 137, 129, - 129, 129, 129, 128, 128, 128, 128, 128, 126, 125, 67, 67, 70, 72, 76, 73, - 69, 63, 72, 89, 97, 89, 87, 93, 95, 87, 90, 91, 91, 93, 94, 95, - 95, 96, 84, 89, 89, 87, 89, 94, 96, 92, 90, 93, 93, 93, 94, 95, - 96, 98, 97, 98, 99, 100, 100, 102, 106, 108, 108, 107, 107, 107, 108, 111, - 113, 114, 116, 118, 117, 107, 105, 103, 103, 100, 107, 111, 113, 114, 115, 116, - 117, 118, 120, 115, 114, 118, 120, 117, 116, 116, 113, 112, 110, 109, 108, 108, - 107, 107, 108, 110, 111, 110, 109, 110, 113, 117, 110, 110, 111, 111, 110, 108, - 105, 104, 112, 112, 113, 113, 113, 112, 110, 109, 108, 113, 118, 118, 114, 111, - 111, 113, 108, 109, 110, 112, 112, 113, 113, 113, 115, 113, 115, 116, 116, 118, - 117, 116, 113, 112, 112, 111, 112, 114, 116, 118, 118, 116, 115, 115, 117, 116, - 115, 111, 109, 105, 103, 106, 111, 110, 109, 105, 109, 111, 113, 109, 106, 104, - 107, 109, 109, 110, 113, 114, 115, 112, 111, 108, 113, 105, 107, 108, 101, 100, - 110, 113, 103, 112, 125, 131, 124, 115, 120, 134, 139, 136, 135, 139, 144, 142, - 135, 128, 130, 130, 129, 128, 127, 126, 125, 125, 129, 129, 132, 80, 81, 84, - 86, 89, 87, 85, 83, 88, 89, 90, 89, 93, 96, 94, 87, 93, 93, 94, - 96, 96, 96, 96, 96, 89, 92, 94, 93, 93, 93, 94, 90, 94, 93, 92, - 93, 94, 96, 97, 97, 101, 102, 103, 103, 102, 105, 110, 114, 113, 113, 112, - 113, 113, 116, 117, 115, 115, 117, 118, 111, 109, 105, 104, 101, 105, 112, 115, - 114, 111, 111, 114, 118, 114, 110, 108, 112, 113, 111, 110, 111, 113, 112, 109, - 107, 105, 104, 105, 105, 105, 107, 110, 110, 109, 108, 108, 109, 107, 107, 108, - 109, 108, 108, 107, 107, 112, 112, 111, 111, 110, 109, 108, 109, 109, 114, 120, - 121, 118, 115, 113, 114, 113, 113, 113, 113, 113, 114, 115, 116, 113, 113, 115, - 116, 116, 118, 117, 117, 119, 118, 118, 117, 117, 118, 120, 121, 125, 121, 121, - 119, 119, 119, 119, 116, 117, 114, 113, 115, 117, 114, 111, 106, 112, 116, 120, - 113, 108, 103, 108, 111, 107, 106, 110, 109, 112, 110, 112, 110, 112, 103, 105, - 106, 98, 98, 106, 107, 115, 111, 117, 133, 131, 119, 124, 144, 153, 151, 145, - 142, 144, 144, 141, 137, 141, 140, 139, 138, 136, 135, 133, 133, 125, 127, 131, - 79, 79, 83, 87, 92, 94, 95, 94, 100, 95, 90, 94, 96, 94, 90, 89, - 95, 94, 94, 94, 94, 93, 92, 93, 95, 96, 97, 96, 95, 95, 93, 90, - 99, 96, 93, 94, 95, 97, 96, 94, 108, 110, 112, 112, 111, 112, 115, 118, - 115, 115, 115, 117, 118, 118, 119, 119, 115, 116, 117, 114, 111, 110, 109, 109, - 108, 112, 113, 112, 110, 110, 112, 115, 114, 111, 110, 111, 112, 112, 110, 110, - 113, 112, 109, 105, 101, 100, 100, 101, 103, 105, 108, 109, 107, 104, 101, 100, - 103, 104, 106, 108, 108, 110, 112, 112, 110, 110, 109, 109, 110, 110, 110, 110, - 109, 113, 117, 118, 116, 114, 114, 114, 119, 118, 116, 115, 114, 115, 116, 117, - 114, 115, 115, 116, 116, 115, 115, 117, 122, 123, 122, 121, 120, 122, 123, 121, - 124, 121, 121, 118, 118, 117, 120, 119, 118, 116, 115, 114, 117, 115, 115, 112, - 119, 122, 123, 119, 115, 113, 114, 117, 113, 112, 111, 110, 109, 109, 109, 107, - 114, 105, 108, 113, 107, 109, 117, 118, 126, 107, 101, 114, 128, 132, 136, 142, - 143, 150, 154, 146, 143, 141, 146, 145, 149, 146, 148, 145, 146, 143, 144, 144, - 144, 148, 148, 85, 84, 86, 87, 88, 89, 90, 90, 101, 96, 94, 98, 95, - 91, 89, 94, 87, 87, 88, 88, 90, 90, 89, 91, 93, 93, 97, 100, 100, - 101, 100, 100, 101, 97, 92, 94, 98, 101, 98, 96, 110, 113, 115, 117, 116, - 115, 114, 114, 110, 111, 112, 116, 117, 118, 119, 117, 118, 115, 114, 111, 108, - 107, 108, 112, 111, 108, 105, 106, 108, 110, 109, 108, 115, 114, 113, 112, 113, - 114, 113, 110, 112, 112, 112, 109, 105, 104, 106, 108, 103, 105, 108, 110, 111, - 109, 106, 103, 107, 108, 106, 108, 109, 111, 110, 111, 107, 107, 106, 108, 107, - 109, 110, 113, 109, 111, 111, 110, 110, 111, 112, 114, 115, 114, 113, 112, 112, - 114, 115, 116, 119, 118, 117, 117, 116, 114, 114, 115, 118, 119, 118, 117, 116, - 118, 118, 118, 116, 114, 115, 113, 113, 113, 118, 118, 112, 108, 107, 107, 111, - 115, 119, 120, 121, 120, 117, 117, 120, 121, 119, 117, 119, 118, 116, 114, 112, - 112, 111, 112, 111, 99, 103, 110, 106, 109, 114, 114, 106, 103, 99, 106, 122, - 134, 135, 128, 121, 131, 142, 143, 147, 148, 147, 138, 145, 143, 145, 143, 145, - 143, 145, 146, 151, 153, 152, 89, 88, 92, 91, 93, 92, 95, 96, 94, 95, - 96, 98, 95, 93, 94, 99, 83, 84, 86, 88, 92, 95, 95, 98, 101, 100, - 99, 104, 106, 103, 105, 106, 102, 100, 100, 100, 106, 107, 109, 107, 113, 116, - 121, 122, 124, 120, 119, 116, 114, 113, 117, 119, 120, 121, 122, 122, 125, 119, - 114, 110, 105, 100, 101, 106, 111, 107, 103, 103, 108, 110, 109, 106, 111, 111, - 110, 107, 108, 110, 109, 104, 108, 111, 114, 113, 111, 110, 113, 116, 104, 104, - 105, 109, 112, 114, 113, 112, 112, 111, 108, 107, 106, 106, 104, 105, 107, 107, - 105, 107, 106, 109, 111, 114, 114, 114, 113, 112, 112, 115, 117, 119, 112, 112, - 113, 114, 115, 117, 119, 120, 120, 118, 118, 115, 113, 111, 112, 112, 115, 115, - 117, 116, 116, 116, 116, 115, 113, 113, 114, 115, 115, 114, 117, 119, 122, 118, - 113, 108, 107, 109, 112, 116, 117, 113, 109, 111, 117, 120, 117, 113, 113, 112, - 111, 111, 111, 111, 111, 112, 109, 96, 101, 106, 101, 101, 107, 104, 102, 109, - 110, 103, 104, 118, 133, 141, 142, 139, 130, 126, 137, 148, 147, 135, 141, 140, - 142, 141, 143, 143, 144, 145, 141, 141, 143, 76, 76, 80, 80, 83, 84, 90, - 95, 91, 95, 98, 96, 94, 97, 98, 96, 89, 90, 91, 93, 95, 98, 100, - 102, 102, 98, 98, 102, 102, 99, 102, 105, 106, 103, 104, 103, 104, 104, 106, - 106, 114, 116, 121, 122, 125, 123, 124, 123, 121, 121, 124, 126, 127, 127, 127, - 125, 126, 120, 117, 114, 108, 100, 99, 104, 107, 105, 103, 103, 104, 107, 108, - 109, 104, 106, 104, 100, 101, 104, 103, 99, 106, 111, 116, 116, 112, 110, 111, - 113, 108, 106, 104, 105, 109, 112, 112, 111, 113, 112, 109, 108, 107, 108, 107, - 108, 109, 109, 106, 106, 105, 107, 108, 112, 116, 116, 115, 115, 117, 119, 120, - 120, 115, 115, 116, 116, 117, 116, 116, 116, 118, 116, 116, 113, 111, 110, 112, - 112, 114, 114, 115, 115, 115, 116, 116, 115, 110, 113, 116, 116, 115, 112, 114, - 114, 123, 121, 117, 110, 105, 103, 103, 106, 111, 109, 106, 107, 111, 113, 112, - 110, 103, 104, 104, 105, 106, 106, 106, 106, 116, 103, 107, 112, 107, 107, 110, - 105, 108, 111, 109, 103, 96, 103, 124, 144, 149, 149, 140, 124, 127, 137, 143, - 137, 141, 139, 141, 139, 142, 140, 142, 142, 145, 143, 145, 83, 84, 85, 84, - 83, 82, 87, 91, 92, 96, 97, 94, 94, 97, 97, 90, 98, 100, 100, 101, - 102, 104, 105, 106, 93, 89, 91, 98, 102, 102, 107, 113, 112, 111, 112, 108, - 103, 101, 102, 103, 116, 117, 118, 120, 120, 122, 124, 125, 122, 122, 124, 125, - 125, 124, 124, 122, 127, 122, 122, 122, 119, 110, 107, 112, 107, 107, 108, 106, - 103, 104, 109, 114, 108, 110, 108, 104, 104, 108, 107, 102, 108, 113, 117, 116, - 109, 104, 102, 103, 113, 108, 103, 101, 102, 104, 104, 104, 111, 109, 109, 110, - 112, 114, 117, 117, 114, 112, 111, 109, 108, 109, 110, 112, 111, 113, 114, 116, - 118, 119, 117, 116, 120, 120, 119, 118, 115, 112, 108, 106, 117, 116, 114, 112, - 112, 112, 113, 113, 107, 108, 110, 111, 111, 113, 112, 111, 105, 106, 110, 110, - 107, 106, 106, 107, 105, 106, 107, 106, 103, 103, 104, 107, 109, 112, 112, 111, - 110, 110, 112, 113, 107, 108, 109, 109, 110, 109, 108, 106, 102, 91, 92, 98, - 95, 95, 99, 96, 102, 96, 100, 113, 111, 100, 99, 115, 106, 135, 153, 147, - 133, 131, 134, 136, 137, 137, 136, 136, 135, 135, 134, 136, 141, 139, 137, 95, - 89, 87, 90, 90, 85, 82, 85, 95, 89, 90, 96, 100, 93, 91, 94, 97, - 97, 112, 106, 111, 110, 95, 120, 115, 117, 117, 116, 113, 111, 112, 110, 122, - 116, 117, 124, 126, 122, 124, 129, 128, 116, 113, 121, 125, 124, 120, 119, 116, - 118, 121, 121, 119, 119, 125, 128, 132, 131, 127, 124, 123, 123, 123, 119, 111, - 109, 110, 110, 110, 110, 111, 111, 104, 103, 103, 107, 111, 112, 109, 105, 115, - 117, 116, 115, 115, 116, 116, 117, 109, 112, 114, 112, 108, 107, 112, 116, 119, - 114, 111, 108, 109, 110, 113, 117, 111, 112, 115, 119, 119, 119, 119, 118, 112, - 115, 117, 117, 117, 118, 121, 124, 121, 117, 114, 114, 116, 117, 114, 111, 114, - 111, 112, 115, 116, 112, 111, 114, 110, 109, 109, 110, 112, 114, 112, 110, 114, - 118, 118, 114, 115, 120, 121, 116, 120, 114, 111, 112, 111, 106, 106, 114, 112, - 115, 115, 115, 113, 111, 108, 107, 108, 106, 104, 103, 103, 104, 106, 107, 104, - 112, 96, 87, 101, 72, 99, 115, 112, 120, 122, 113, 110, 106, 92, 79, 86, - 104, 134, 165, 146, 141, 117, 138, 134, 131, 136, 145, 146, 138, 136, 140, 143, - 143, 143 }; - -/* Define image 'test' of size 555x103x1x3 and type 'unsigned char' */ -const unsigned char data_logo[] = { - 76, 77, 75, 75, 75, 99, 102, 72, 63, 0, 84, 115, 114, 110, 115, 80, - 81, 108, 112, 69, 38, 87, 115, 118, 96, 116, 84, 88, 85, 107, 83, 72, - 65, 0, 111, 131, 127, 72, 131, 75, 73, 77, 104, 102, 33, 56, 111, 110, - 111, 114, 116, 112, 87, 80, 104, 100, 106, 24, 96, 79, 71, 71, 104, 108, - 83, 69, 65, 57, 63, 32, 100, 120, 76, 79, 79, 65, 107, 67, 84, 69, - 59, 32, 65, 112, 67, 68, 69, 111, 103, 71, 103, 59, 61, 4, 107, 111, - 80, 118, 136, 80, 65, 106, 71, 96, 37, 38, 115, 123, 118, 57, 48, 57, - 83, 57, 87, 51, 49, 12, 100, 106, 118, 111, 96, 100, 96, 68, 65, 55, - 46, 0, 103, 106, 97, 103, 72, 65, 63, 93, 127, 68, 65, 17, 92, 126, - 106, 65, 64, 96, 68, 61, 57, 55, 36, 67, 131, 110, 67, 106, 93, 63, - 65, 63, 95, 130, 53, 0, 100, 79, 103, 99, 75, 59, 64, 93, 97, 89, - 14, 104, 106, 65, 71, 67, 68, 103, 69, 55, 63, 99, 16, 97, 96, 72, - 100, 99, 88, 75, 67, 69, 55, 52, 46, 1, 52, 123, 84, 87, 57, 85, - 48, 93, 52, 49, 45, 17, 95, 100, 64, 103, 77, 57, 53, 49, 48, 48, - 38, 5, 89, 93, 102, 99, 55, 59, 68, 52, 89, 36, 8, 136, 111, 112, - 80, 136, 111, 106, 76, 85, 76, 79, 69, 38, 61, 108, 93, 68, 59, 65, - 92, 59, 89, 52, 28, 52, 128, 147, 127, 154, 100, 93, 96, 128, 85, 88, - 26, 53, 93, 99, 89, 52, 56, 52, 103, 49, 49, 76, 22, 73, 103, 124, - 89, 132, 56, 51, 45, 52, 42, 53, 46, 12, 88, 55, 59, 59, 87, 57, - 48, 51, 84, 40, 49, 12, 123, 96, 87, 91, 92, 63, 65, 99, 49, 44, - 40, 4, 53, 118, 89, 111, 44, 46, 42, 73, 40, 41, 18, 81, 91, 88, - 87, 83, 49, 56, 93, 93, 46, 41, 33, 1, 93, 63, 93, 92, 46, 57, - 40, 44, 41, 80, 42, 1, 123, 95, 134, 69, 53, 84, 45, 41, 37, 36, - 17, 61, 91, 49, 102, 85, 38, 85, 87, 32, 36, 36, 5, 97, 142, 114, - 83, 72, 76, 143, 108, 69, 71, 64, 57, 1, 73, 79, 79, 48, 41, 42, - 48, 45, 44, 45, 44, 8, 79, 83, 38, 102, 68, 77, 30, 33, 30, 28, - 26, 2, 87, 107, 88, 93, 111, 34, 83, 88, 41, 36, 30, 20, 0, 108, - 115, 99, 91, 88, 69, 64, 60, 56, 61, 1, 115, 89, 116, 71, 26, 76, - 33, 84, 30, 26, 5, 75, 106, 53, 73, 32, 71, 24, 65, 97, 55, 26, - 20, 10, 48, 89, 80, 89, 85, 46, 21, 22, 30, 32, 22, 5, 77, 75, - 28, 71, 38, 79, 25, 20, 18, 16, 0, 114, 107, 95, 21, 24, 83, 69, - 73, 102, 30, 20, 16, 1, 85, 21, 21, 14, 16, 95, 75, 40, 17, 16, - 10, 1, 38, 80, 48, 77, 93, 10, 17, 21, 9, 14, 6, 0, 71, 76, - 21, 16, 9, 10, 22, 71, 16, 13, 6, 0, 38, 96, 67, 42, 29, 96, - 30, 30, 33, 24, 57, 18, 12, 97, 38, 114, 30, 110, 104, 110, 75, 75, - 93, 99, 77, 60, 0, 88, 120, 108, 103, 119, 87, 80, 106, 112, 63, 34, - 88, 106, 115, 108, 92, 84, 85, 84, 104, 89, 75, 65, 0, 107, 122, 118, - 76, 118, 76, 72, 88, 96, 91, 45, 61, 106, 107, 108, 93, 92, 76, 79, - 95, 81, 89, 97, 37, 92, 85, 71, 72, 77, 108, 99, 83, 67, 57, 60, - 42, 100, 124, 80, 77, 89, 75, 107, 77, 89, 67, 52, 29, 67, 112, 69, - 68, 69, 106, 99, 75, 99, 57, 59, 1, 106, 107, 96, 112, 130, 87, 65, - 102, 75, 87, 30, 42, 97, 114, 68, 49, 55, 63, 69, 72, 59, 46, 44, - 17, 96, 102, 97, 131, 106, 92, 95, 95, 64, 57, 48, 0, 99, 102, 110, - 96, 72, 67, 71, 87, 107, 84, 65, 18, 87, 120, 103, 71, 68, 91, 95, - 64, 53, 57, 34, 67, 119, 92, 67, 79, 80, 84, 63, 64, 87, 115, 48, - 0, 99, 87, 88, 97, 76, 63, 69, 85, 95, 85, 20, 111, 102, 72, 76, - 60, 95, 93, 64, 64, 55, 84, 25, 91, 96, 88, 93, 72, 73, 73, 65, - 80, 53, 53, 41, 0, 65, 107, 73, 57, 72, 75, 52, 77, 51, 51, 46, - 24, 89, 103, 68, 92, 88, 65, 73, 71, 57, 46, 44, 5, 84, 89, 87, - 64, 57, 80, 59, 61, 79, 41, 12, 126, 110, 111, 91, 107, 110, 99, 83, - 95, 77, 87, 69, 36, 63, 110, 95, 59, 69, 87, 81, 56, 85, 61, 26, - 56, 123, 136, 120, 135, 99, 88, 97, 122, 85, 85, 32, 61, 93, 97, 77, - 49, 63, 55, 92, 51, 49, 65, 21, 69, 106, 115, 91, 112, 67, 56, 49, - 48, 44, 52, 48, 18, 68, 63, 65, 89, 85, 67, 48, 48, 69, 45, 48, - 12, 118, 102, 73, 83, 53, 53, 71, 92, 42, 45, 41, 5, 64, 103, 84, - 110, 41, 46, 48, 65, 40, 40, 17, 77, 87, 88, 83, 57, 84, 84, 87, - 65, 46, 49, 33, 1, 93, 67, 89, 81, 48, 52, 51, 36, 51, 67, 40, - 2, 114, 112, 100, 65, 38, 81, 45, 44, 36, 34, 17, 64, 83, 87, 95, - 57, 36, 83, 84, 32, 36, 34, 8, 91, 128, 108, 103, 68, 68, 110, 103, - 67, 81, 67, 61, 8, 69, 73, 68, 44, 40, 41, 37, 42, 40, 41, 41, - 12, 77, 81, 52, 83, 59, 76, 30, 32, 37, 28, 22, 4, 83, 83, 83, - 93, 76, 38, 75, 81, 51, 36, 28, 20, 0, 115, 119, 89, 83, 67, 65, - 65, 57, 56, 55, 0, 102, 104, 115, 57, 28, 68, 37, 81, 36, 25, 6, - 72, 108, 63, 65, 33, 63, 24, 25, 22, 22, 28, 21, 10, 48, 97, 61, - 79, 81, 42, 24, 24, 59, 37, 28, 5, 75, 61, 36, 44, 49, 72, 28, - 20, 20, 13, 1, 102, 91, 76, 40, 24, 85, 75, 55, 49, 40, 21, 14, - 1, 83, 41, 28, 17, 13, 25, 84, 73, 17, 25, 10, 0, 51, 77, 60, - 88, 51, 26, 17, 24, 8, 8, 6, 0, 75, 72, 18, 18, 12, 10, 12, - 69, 21, 34, 6, 0, 34, 87, 61, 48, 28, 79, 34, 28, 29, 21, 51, - 16, 12, 104, 51, 104, 41, 84, 97, 85, 75, 75, 88, 100, 77, 69, 8, - 91, 115, 103, 110, 110, 89, 80, 93, 108, 67, 32, 88, 111, 108, 112, 88, - 87, 79, 85, 100, 87, 76, 64, 0, 106, 110, 81, 106, 92, 76, 73, 79, - 102, 91, 42, 64, 110, 96, 77, 79, 96, 96, 95, 88, 88, 85, 103, 36, - 85, 84, 73, 69, 71, 87, 100, 95, 76, 57, 57, 42, 102, 126, 79, 81, - 77, 77, 85, 91, 81, 69, 65, 28, 73, 97, 73, 69, 87, 104, 80, 91, - 92, 56, 59, 2, 92, 106, 83, 81, 79, 72, 67, 100, 77, 81, 28, 42, - 104, 108, 65, 41, 63, 42, 48, 46, 46, 51, 44, 17, 91, 100, 99, 100, - 116, 100, 80, 91, 67, 57, 48, 0, 97, 111, 104, 88, 79, 65, 67, 68, - 65, 76, 65, 24, 79, 118, 99, 69, 64, 76, 97, 60, 59, 59, 33, 68, - 115, 103, 100, 85, 81, 83, 81, 67, 81, 102, 60, 1, 88, 88, 96, 87, - 84, 68, 72, 80, 89, 79, 21, 104, 102, 69, 68, 93, 68, 59, 71, 65, - 51, 79, 28, 87, 96, 80, 75, 83, 77, 72, 72, 67, 52, 52, 53, 9, - 51, 103, 72, 63, 75, 71, 57, 69, 51, 49, 46, 26, 85, 102, 68, 91, - 76, 76, 63, 67, 59, 51, 42, 4, 80, 88, 76, 64, 77, 52, 59, 48, - 71, 32, 13, 118, 107, 108, 100, 88, 76, 80, 91, 77, 83, 83, 68, 33, - 64, 104, 91, 64, 68, 104, 84, 63, 73, 67, 28, 80, 122, 122, 119, 126, - 108, 96, 103, 119, 89, 87, 37, 59, 93, 95, 76, 55, 63, 56, 87, 49, - 46, 59, 20, 69, 100, 107, 92, 108, 80, 53, 51, 45, 44, 51, 48, 20, - 83, 68, 63, 100, 61, 59, 51, 48, 68, 45, 52, 20, 106, 96, 72, 80, - 104, 106, 104, 87, 45, 46, 34, 9, 65, 96, 83, 76, 41, 45, 56, 41, - 40, 41, 22, 68, 85, 87, 81, 63, 59, 48, 61, 49, 45, 45, 32, 9, - 100, 73, 103, 53, 37, 49, 51, 34, 44, 57, 40, 2, 107, 89, 112, 91, - 63, 89, 49, 45, 41, 30, 21, 75, 69, 96, 73, 37, 44, 80, 87, 33, - 34, 36, 8, 83, 128, 110, 95, 81, 72, 76, 69, 69, 76, 68, 60, 5, - 67, 79, 53, 37, 36, 34, 34, 37, 44, 37, 33, 10, 73, 84, 59, 71, - 52, 68, 32, 33, 34, 30, 26, 0, 80, 81, 87, 103, 49, 37, 63, 84, - 45, 37, 29, 20, 0, 95, 120, 89, 80, 65, 69, 65, 69, 53, 55, 0, - 96, 91, 60, 33, 59, 56, 60, 76, 30, 26, 8, 64, 99, 55, 85, 30, - 28, 22, 22, 22, 22, 28, 18, 9, 44, 87, 71, 76, 75, 44, 25, 26, - 30, 37, 25, 10, 67, 55, 57, 59, 51, 65, 26, 21, 20, 16, 1, 96, - 69, 61, 30, 22, 79, 75, 48, 42, 33, 34, 16, 0, 92, 22, 24, 25, - 16, 16, 14, 75, 49, 24, 10, 0, 51, 64, 72, 103, 24, 16, 37, 37, - 8, 8, 6, 0, 65, 72, 41, 30, 16, 9, 46, 32, 18, 18, 6, 0, - 33, 34, 63, 51, 24, 22, 25, 28, 25, 25, 42, 13, 16, 96, 63, 93, - 83, 80, 92, 85, 73, 75, 85, 93, 72, 68, 0, 92, 123, 100, 99, 110, - 106, 81, 91, 99, 65, 26, 87, 108, 100, 81, 81, 99, 89, 91, 93, 97, - 75, 63, 8, 104, 104, 77, 96, 80, 77, 73, 83, 88, 71, 42, 69, 106, - 92, 114, 88, 103, 95, 91, 87, 79, 88, 91, 40, 83, 96, 79, 69, 71, - 69, 75, 87, 64, 61, 53, 44, 106, 134, 67, 72, 75, 91, 80, 76, 67, - 65, 64, 24, 71, 103, 69, 72, 93, 84, 85, 85, 71, 59, 56, 2, 102, - 106, 100, 97, 93, 68, 84, 80, 89, 59, 25, 42, 92, 59, 42, 34, 36, - 29, 34, 34, 36, 45, 37, 17, 87, 100, 89, 93, 110, 112, 83, 72, 71, - 64, 41, 0, 95, 102, 102, 85, 83, 95, 79, 76, 71, 75, 67, 26, 76, - 97, 96, 72, 67, 71, 88, 71, 56, 44, 29, 65, 110, 97, 103, 111, 91, - 107, 95, 81, 75, 92, 57, 0, 84, 93, 79, 81, 83, 71, 65, 80, 75, - 73, 25, 99, 97, 73, 71, 69, 68, 57, 60, 67, 46, 71, 30, 83, 89, - 85, 87, 80, 76, 73, 75, 80, 52, 52, 52, 2, 63, 85, 63, 52, 72, - 63, 57, 67, 48, 51, 46, 30, 81, 100, 76, 89, 97, 59, 69, 65, 59, - 49, 38, 9, 65, 85, 93, 68, 42, 75, 60, 65, 67, 29, 12, 104, 111, - 107, 97, 79, 84, 85, 77, 75, 88, 87, 68, 28, 67, 103, 84, 60, 75, - 81, 69, 59, 69, 67, 28, 63, 120, 128, 112, 99, 95, 100, 115, 112, 89, - 87, 42, 59, 88, 103, 53, 65, 55, 52, 99, 49, 44, 51, 17, 69, 99, - 91, 84, 91, 96, 55, 61, 48, 44, 55, 48, 21, 73, 67, 71, 76, 65, - 67, 56, 49, 61, 45, 55, 21, 103, 96, 71, 83, 75, 79, 61, 60, 59, - 59, 32, 12, 67, 83, 84, 73, 41, 49, 55, 36, 38, 46, 24, 69, 83, - 84, 77, 88, 56, 55, 55, 64, 38, 44, 33, 2, 87, 61, 76, 79, 33, - 61, 64, 37, 41, 56, 41, 2, 92, 96, 110, 73, 60, 104, 56, 48, 38, - 34, 24, 73, 52, 88, 68, 36, 40, 73, 72, 32, 34, 36, 6, 88, 120, - 103, 69, 76, 72, 69, 65, 71, 83, 69, 57, 8, 52, 72, 40, 32, 30, - 25, 36, 34, 40, 29, 29, 10, 67, 67, 53, 57, 46, 61, 37, 45, 37, - 30, 28, 0, 77, 77, 77, 99, 37, 46, 57, 72, 57, 33, 30, 18, 0, - 103, 120, 80, 73, 65, 69, 65, 71, 52, 55, 0, 88, 95, 56, 26, 52, - 24, 44, 34, 52, 26, 9, 61, 75, 84, 61, 45, 22, 21, 22, 22, 22, - 33, 25, 8, 52, 81, 75, 65, 64, 56, 26, 26, 38, 38, 29, 9, 72, - 53, 53, 45, 52, 45, 25, 20, 18, 16, 1, 89, 60, 49, 34, 25, 76, - 83, 87, 57, 40, 24, 18, 0, 88, 41, 34, 33, 10, 14, 14, 16, 38, - 24, 10, 1, 57, 67, 57, 34, 10, 21, 21, 16, 8, 8, 6, 0, 60, - 71, 20, 30, 21, 9, 30, 25, 28, 20, 6, 0, 16, 56, 52, 51, 22, - 21, 21, 21, 14, 17, 26, 10, 18, 80, 63, 64, 92, 72, 75, 76, 75, - 75, 88, 89, 69, 60, 0, 89, 97, 99, 102, 104, 106, 85, 84, 84, 64, - 26, 84, 115, 110, 89, 96, 108, 96, 93, 95, 81, 71, 61, 0, 103, 106, - 75, 100, 79, 79, 73, 77, 91, 65, 44, 68, 102, 106, 91, 88, 99, 104, - 92, 92, 92, 85, 91, 41, 52, 88, 83, 69, 72, 69, 71, 69, 72, 57, - 56, 46, 102, 110, 76, 92, 81, 95, 88, 79, 71, 65, 53, 22, 72, 99, - 72, 89, 85, 79, 87, 89, 63, 57, 56, 12, 97, 92, 91, 80, 68, 83, - 71, 77, 92, 57, 22, 41, 93, 51, 28, 29, 34, 42, 25, 30, 37, 51, - 37, 21, 85, 99, 93, 89, 110, 88, 89, 73, 75, 53, 41, 0, 92, 89, - 108, 93, 68, 76, 81, 88, 84, 72, 69, 30, 44, 93, 103, 85, 64, 65, - 83, 75, 53, 42, 29, 64, 108, 100, 77, 88, 99, 89, 87, 89, 75, 93, - 48, 0, 91, 99, 97, 77, 83, 75, 73, 79, 77, 75, 28, 93, 96, 92, - 76, 77, 65, 55, 55, 68, 67, 72, 29, 81, 81, 77, 77, 83, 79, 85, - 83, 80, 53, 52, 42, 2, 48, 91, 60, 60, 67, 55, 64, 63, 52, 48, - 45, 30, 49, 91, 69, 96, 97, 63, 67, 56, 55, 41, 38, 9, 76, 80, - 72, 59, 75, 80, 80, 73, 71, 26, 10, 59, 114, 103, 89, 81, 85, 81, - 79, 79, 89, 67, 67, 26, 75, 100, 87, 68, 77, 65, 61, 64, 65, 56, - 28, 64, 120, 108, 122, 92, 118, 100, 111, 95, 88, 91, 46, 48, 84, 100, - 53, 64, 67, 72, 88, 51, 40, 48, 22, 69, 93, 75, 79, 68, 72, 64, - 56, 67, 42, 53, 48, 24, 75, 69, 69, 69, 60, 61, 65, 53, 48, 48, - 51, 24, 92, 92, 83, 79, 57, 75, 61, 67, 60, 46, 42, 12, 73, 93, - 75, 65, 38, 53, 49, 36, 37, 37, 24, 32, 77, 81, 79, 80, 53, 46, - 67, 52, 41, 41, 30, 4, 84, 84, 71, 75, 53, 68, 72, 34, 40, 53, - 40, 5, 89, 88, 104, 61, 88, 89, 71, 49, 34, 34, 25, 75, 69, 83, - 69, 65, 34, 67, 71, 32, 34, 37, 12, 75, 126, 97, 79, 72, 72, 79, - 76, 72, 77, 79, 53, 9, 38, 67, 33, 28, 37, 26, 32, 24, 32, 25, - 25, 10, 32, 68, 42, 73, 49, 51, 51, 51, 38, 42, 25, 0, 77, 80, - 81, 48, 67, 68, 52, 73, 67, 38, 44, 17, 0, 107, 115, 81, 73, 68, - 72, 67, 57, 52, 63, 4, 96, 83, 45, 36, 60, 56, 38, 46, 57, 26, - 14, 22, 64, 83, 85, 41, 32, 29, 24, 21, 21, 28, 21, 8, 46, 80, - 63, 63, 59, 51, 24, 22, 36, 42, 22, 10, 64, 57, 49, 44, 52, 67, - 26, 22, 18, 16, 1, 96, 73, 49, 20, 28, 20, 30, 32, 22, 38, 22, - 14, 2, 77, 33, 22, 14, 14, 10, 14, 14, 21, 14, 10, 0, 53, 61, - 57, 9, 28, 14, 59, 26, 21, 17, 5, 0, 48, 61, 28, 41, 36, 9, - 22, 33, 22, 16, 5, 0, 5, 12, 25, 36, 49, 37, 14, 12, 10, 36, - 17, 8, 26, 84, 68, 41, 32, 76, 79, 80, 75, 81, 81, 92, 77, 55, - 1, 84, 110, 92, 99, 107, 103, 85, 95, 95, 51, 24, 84, 110, 114, 93, - 93, 103, 103, 100, 95, 88, 84, 63, 0, 99, 110, 84, 100, 77, 73, 76, - 80, 88, 48, 41, 61, 84, 110, 95, 97, 83, 89, 88, 91, 79, 92, 69, - 44, 51, 79, 85, 79, 73, 72, 68, 77, 65, 56, 51, 49, 91, 128, 83, - 92, 83, 81, 93, 79, 67, 67, 46, 18, 76, 103, 68, 91, 76, 81, 95, - 87, 61, 52, 55, 5, 95, 96, 99, 89, 80, 87, 89, 77, 88, 56, 21, - 45, 91, 32, 49, 45, 51, 45, 22, 25, 34, 44, 33, 24, 51, 99, 93, - 84, 106, 102, 108, 96, 72, 51, 53, 0, 89, 96, 108, 91, 80, 76, 73, - 72, 75, 72, 68, 34, 38, 76, 83, 96, 63, 52, 73, 71, 49, 41, 25, - 56, 107, 95, 91, 88, 89, 83, 87, 72, 75, 92, 41, 0, 88, 88, 87, - 75, 84, 76, 67, 64, 84, 77, 34, 59, 81, 103, 87, 97, 75, 75, 79, - 83, 46, 69, 34, 55, 76, 79, 76, 75, 75, 71, 73, 57, 52, 55, 34, - 1, 48, 95, 65, 49, 49, 57, 45, 46, 46, 48, 45, 33, 38, 83, 91, - 92, 61, 67, 63, 53, 53, 44, 44, 8, 71, 76, 68, 48, 53, 40, 60, - 60, 81, 28, 12, 56, 112, 104, 89, 79, 80, 83, 93, 89, 89, 75, 56, - 21, 65, 95, 79, 68, 92, 65, 60, 63, 64, 52, 28, 57, 110, 108, 95, - 99, 91, 100, 107, 92, 87, 92, 49, 25, 72, 95, 49, 71, 67, 84, 73, - 44, 48, 45, 16, 68, 88, 81, 88, 67, 63, 68, 45, 48, 42, 52, 49, - 25, 65, 64, 71, 71, 64, 64, 60, 67, 49, 46, 53, 24, 45, 96, 85, - 63, 69, 77, 60, 75, 51, 48, 46, 12, 72, 92, 67, 38, 40, 56, 48, - 37, 38, 42, 30, 32, 72, 76, 75, 68, 57, 76, 42, 48, 40, 36, 30, - 4, 80, 69, 61, 56, 64, 37, 52, 34, 36, 49, 52, 8, 76, 104, 81, - 56, 52, 56, 75, 55, 33, 34, 22, 68, 61, 81, 77, 61, 37, 63, 36, - 34, 36, 37, 13, 88, 116, 93, 67, 64, 80, 63, 79, 75, 84, 71, 61, - 9, 60, 59, 28, 21, 26, 40, 24, 28, 20, 18, 24, 9, 24, 60, 87, - 53, 42, 29, 36, 48, 37, 33, 18, 5, 59, 80, 48, 51, 59, 52, 68, - 51, 51, 41, 32, 17, 0, 99, 107, 75, 72, 65, 68, 67, 56, 51, 51, - 4, 83, 88, 42, 26, 56, 57, 45, 33, 53, 24, 21, 17, 57, 81, 85, - 40, 21, 22, 20, 21, 25, 30, 21, 5, 69, 71, 59, 83, 56, 40, 26, - 26, 25, 44, 26, 10, 20, 65, 51, 46, 41, 41, 36, 22, 21, 12, 1, - 92, 61, 46, 28, 28, 37, 32, 26, 26, 41, 18, 14, 2, 75, 28, 14, - 10, 12, 13, 38, 25, 17, 13, 9, 0, 53, 55, 68, 30, 29, 40, 41, - 9, 22, 9, 5, 0, 34, 59, 32, 30, 30, 36, 37, 30, 22, 14, 5, - 0, 5, 4, 18, 21, 21, 33, 14, 9, 10, 24, 10, 4, 36, 72, 37, - 36, 32, 99, 92, 87, 84, 83, 81, 80, 81, 68, 16, 84, 96, 93, 92, - 93, 102, 96, 100, 95, 61, 20, 80, 103, 96, 96, 87, 92, 91, 95, 81, - 88, 79, 63, 0, 95, 102, 92, 79, 81, 96, 91, 93, 69, 56, 38, 80, - 91, 104, 104, 93, 65, 61, 65, 72, 72, 63, 64, 69, 63, 55, 61, 76, - 80, 79, 75, 64, 59, 52, 46, 56, 97, 124, 88, 96, 84, 93, 84, 67, - 76, 64, 63, 16, 75, 96, 67, 93, 93, 93, 83, 87, 73, 52, 56, 6, - 95, 96, 99, 87, 83, 93, 87, 89, 89, 41, 18, 40, 41, 22, 22, 45, - 37, 46, 26, 20, 24, 24, 49, 25, 40, 85, 93, 88, 85, 80, 84, 77, - 59, 55, 42, 1, 85, 80, 103, 83, 84, 79, 73, 69, 71, 67, 65, 63, - 61, 38, 42, 48, 53, 53, 63, 72, 56, 52, 28, 68, 102, 83, 83, 75, - 87, 85, 84, 87, 88, 91, 56, 1, 81, 88, 88, 79, 87, 84, 69, 80, - 80, 75, 37, 41, 48, 77, 75, 91, 85, 67, 61, 81, 63, 40, 34, 41, - 45, 73, 49, 52, 56, 52, 53, 52, 49, 55, 51, 14, 56, 84, 52, 48, - 44, 49, 46, 44, 49, 45, 45, 46, 32, 45, 71, 72, 51, 44, 59, 51, - 56, 51, 42, 5, 67, 73, 53, 67, 57, 57, 52, 56, 46, 25, 36, 40, - 110, 103, 93, 92, 85, 85, 84, 85, 87, 72, 65, 18, 69, 89, 76, 64, - 71, 73, 60, 60, 63, 55, 24, 92, 114, 92, 91, 99, 102, 100, 88, 96, - 96, 91, 53, 41, 61, 89, 51, 79, 73, 59, 53, 51, 49, 42, 16, 63, - 85, 68, 45, 45, 45, 46, 44, 45, 49, 53, 49, 26, 34, 75, 72, 71, - 65, 57, 56, 63, 48, 48, 51, 32, 38, 83, 84, 67, 75, 92, 71, 61, - 40, 46, 41, 16, 64, 69, 44, 38, 38, 38, 32, 36, 26, 34, 40, 26, - 36, 61, 60, 68, 45, 48, 41, 40, 40, 44, 28, 6, 71, 84, 89, 60, - 61, 61, 34, 57, 49, 45, 38, 6, 83, 88, 73, 93, 41, 40, 57, 53, - 42, 28, 20, 75, 65, 75, 69, 53, 37, 56, 37, 36, 34, 34, 14, 73, - 122, 99, 87, 76, 77, 80, 80, 76, 71, 71, 59, 9, 44, 17, 17, 14, - 6, 13, 14, 14, 14, 14, 20, 12, 28, 55, 42, 29, 30, 25, 30, 32, - 32, 36, 25, 1, 68, 68, 46, 45, 68, 53, 46, 45, 45, 45, 32, 16, - 0, 103, 107, 73, 72, 76, 68, 68, 76, 49, 49, 0, 76, 75, 46, 28, - 53, 53, 53, 38, 38, 25, 22, 14, 51, 68, 59, 18, 20, 26, 21, 25, - 28, 28, 22, 6, 49, 71, 76, 36, 45, 41, 26, 33, 40, 45, 32, 17, - 10, 36, 64, 61, 49, 53, 46, 36, 25, 16, 2, 81, 63, 44, 18, 26, - 28, 36, 32, 26, 41, 16, 18, 0, 69, 21, 14, 14, 12, 16, 30, 42, - 18, 16, 9, 1, 55, 79, 51, 32, 26, 48, 16, 24, 24, 9, 5, 0, - 16, 40, 44, 44, 33, 30, 36, 34, 29, 9, 5, 0, 5, 13, 6, 9, - 8, 8, 9, 9, 9, 21, 24, 4, 71, 85, 64, 46, 41, 76, 80, 75, - 80, 79, 87, 81, 69, 61, 0, 80, 81, 83, 81, 83, 81, 85, 80, 73, - 59, 14, 79, 83, 80, 77, 79, 77, 79, 85, 75, 76, 63, 61, 12, 89, - 96, 95, 92, 92, 84, 91, 89, 65, 53, 42, 68, 87, 96, 93, 65, 71, - 56, 55, 63, 71, 60, 57, 55, 59, 60, 63, 72, 67, 67, 65, 65, 51, - 53, 44, 56, 95, 95, 88, 75, 68, 73, 79, 63, 61, 63, 63, 13, 71, - 96, 87, 71, 67, 81, 89, 80, 69, 57, 56, 8, 89, 95, 104, 88, 89, - 96, 92, 87, 61, 49, 16, 49, 42, 14, 18, 13, 21, 16, 20, 20, 18, - 17, 21, 24, 52, 36, 44, 46, 46, 48, 49, 55, 60, 46, 36, 4, 77, - 83, 83, 80, 75, 52, 71, 44, 48, 51, 63, 46, 52, 55, 61, 55, 56, - 59, 59, 79, 57, 40, 21, 63, 67, 79, 68, 65, 65, 68, 69, 71, 63, - 57, 56, 1, 79, 77, 81, 76, 71, 69, 69, 69, 68, 61, 59, 59, 64, - 51, 49, 53, 52, 49, 63, 55, 60, 56, 53, 57, 56, 55, 45, 57, 56, - 48, 56, 57, 56, 53, 52, 4, 44, 75, 57, 45, 37, 37, 41, 42, 42, - 42, 46, 44, 46, 51, 49, 51, 49, 49, 51, 52, 52, 45, 37, 12, 57, - 63, 57, 53, 48, 44, 57, 40, 36, 32, 22, 38, 61, 100, 107, 69, 85, - 85, 88, 72, 73, 67, 65, 14, 61, 59, 61, 53, 55, 55, 59, 59, 63, - 56, 25, 68, 103, 95, 92, 83, 85, 83, 80, 72, 63, 65, 53, 41, 53, - 68, 64, 55, 53, 51, 52, 56, 44, 41, 13, 64, 81, 67, 63, 65, 57, - 63, 55, 60, 63, 59, 48, 51, 29, 33, 41, 59, 36, 40, 57, 61, 59, - 61, 46, 41, 32, 42, 88, 73, 71, 67, 40, 42, 49, 38, 30, 25, 59, - 76, 42, 32, 33, 34, 28, 28, 34, 28, 28, 33, 40, 40, 49, 42, 45, - 41, 42, 44, 45, 42, 30, 5, 68, 71, 77, 61, 38, 67, 59, 65, 49, - 48, 42, 9, 73, 88, 61, 57, 67, 65, 60, 59, 36, 34, 24, 73, 59, - 52, 42, 57, 34, 33, 36, 34, 33, 38, 10, 77, 104, 84, 53, 76, 72, - 53, 65, 69, 68, 65, 32, 12, 10, 13, 18, 8, 9, 14, 12, 13, 13, - 16, 16, 14, 22, 28, 26, 24, 24, 28, 29, 26, 26, 25, 25, 0, 56, - 60, 56, 53, 51, 49, 48, 38, 41, 40, 28, 16, 0, 93, 103, 72, 71, - 68, 71, 69, 75, 46, 49, 6, 63, 75, 44, 26, 20, 29, 22, 24, 16, - 18, 22, 16, 16, 18, 20, 22, 26, 25, 25, 24, 26, 25, 20, 6, 18, - 49, 45, 20, 28, 40, 37, 22, 30, 30, 30, 17, 12, 14, 25, 20, 20, - 18, 18, 24, 25, 16, 2, 53, 60, 53, 45, 42, 42, 37, 26, 32, 41, - 17, 17, 0, 65, 37, 14, 12, 10, 29, 25, 25, 20, 17, 10, 1, 49, - 75, 30, 30, 6, 29, 28, 8, 9, 20, 4, 0, 13, 22, 36, 10, 10, - 16, 25, 21, 10, 10, 5, 0, 4, 10, 10, 9, 8, 8, 8, 10, 8, - 17, 10, 2, 56, 85, 42, 24, 24, 56, 55, 63, 52, 51, 46, 63, 45, - 18, 0, 33, 41, 38, 40, 45, 42, 42, 44, 48, 42, 17, 44, 51, 49, - 46, 44, 42, 40, 41, 40, 38, 37, 30, 0, 33, 36, 34, 42, 42, 37, - 38, 49, 45, 34, 45, 38, 60, 65, 38, 37, 46, 38, 36, 37, 34, 36, - 32, 33, 30, 30, 34, 38, 41, 42, 44, 48, 49, 53, 41, 46, 64, 63, - 55, 49, 53, 60, 51, 48, 56, 51, 32, 12, 37, 55, 65, 55, 59, 57, - 64, 57, 60, 53, 52, 9, 81, 92, 91, 91, 79, 75, 83, 73, 46, 45, - 12, 61, 26, 10, 14, 10, 10, 12, 17, 16, 13, 20, 16, 17, 21, 22, - 18, 30, 32, 34, 36, 36, 40, 42, 38, 1, 24, 36, 41, 26, 26, 26, - 28, 21, 21, 18, 26, 25, 18, 20, 26, 26, 28, 21, 51, 53, 52, 33, - 20, 36, 42, 41, 41, 41, 56, 51, 41, 37, 36, 32, 16, 30, 33, 37, - 45, 52, 40, 41, 45, 45, 45, 45, 46, 45, 49, 51, 55, 51, 51, 49, - 51, 51, 55, 48, 45, 44, 53, 48, 44, 41, 52, 41, 37, 36, 52, 36, - 8, 6, 41, 29, 29, 32, 20, 25, 17, 16, 18, 21, 18, 18, 20, 20, - 20, 20, 26, 28, 32, 33, 44, 36, 34, 12, 12, 13, 14, 13, 16, 10, - 14, 13, 17, 12, 12, 25, 46, 42, 49, 52, 49, 48, 51, 51, 51, 46, - 44, 13, 38, 44, 42, 45, 42, 42, 44, 55, 46, 45, 26, 18, 71, 81, - 60, 60, 65, 76, 61, 61, 67, 69, 59, 41, 36, 37, 42, 49, 52, 51, - 55, 63, 41, 37, 12, 56, 75, 75, 69, 55, 60, 60, 60, 51, 48, 46, - 40, 37, 41, 45, 45, 42, 44, 41, 44, 42, 41, 40, 38, 41, 42, 44, - 46, 49, 44, 42, 41, 41, 41, 34, 45, 17, 60, 33, 26, 25, 22, 21, - 24, 18, 17, 16, 17, 17, 17, 30, 16, 17, 17, 20, 18, 28, 30, 26, - 25, 6, 18, 64, 60, 26, 26, 52, 51, 26, 33, 44, 33, 9, 44, 72, - 67, 48, 46, 57, 56, 38, 36, 32, 25, 69, 59, 36, 34, 32, 32, 34, - 32, 33, 33, 36, 17, 65, 81, 73, 26, 21, 22, 22, 25, 18, 18, 12, - 36, 13, 0, 1, 8, 1, 8, 0, 4, 5, 8, 4, 10, 13, 18, 22, - 21, 16, 22, 21, 22, 14, 24, 22, 17, 0, 10, 13, 14, 13, 13, 12, - 13, 13, 13, 13, 13, 13, 0, 41, 89, 85, 83, 83, 81, 80, 73, 45, - 64, 8, 42, 61, 24, 26, 21, 22, 32, 26, 24, 22, 22, 21, 18, 12, - 10, 10, 8, 10, 9, 9, 8, 6, 6, 4, 9, 9, 9, 12, 10, 10, - 10, 10, 13, 12, 12, 13, 13, 14, 14, 16, 16, 16, 14, 14, 16, 14, - 2, 9, 17, 26, 12, 14, 17, 34, 34, 41, 21, 20, 12, 4, 60, 20, - 22, 21, 17, 18, 13, 17, 12, 9, 6, 2, 8, 14, 30, 2, 2, 1, - 4, 1, 1, 1, 13, 0, 2, 2, 1, 8, 4, 5, 4, 8, 10, 14, - 4, 0, 8, 2, 13, 4, 9, 12, 13, 9, 16, 17, 9, 5, 37, 85, - 30, 29, 25, 4, 1, 4, 12, 13, 1, 1, 18, 20, 6, 21, 17, 13, - 12, 10, 24, 9, 8, 6, 25, 20, 2, 21, 4, 2, 2, 13, 2, 2, - 2, 1, 1, 1, 2, 5, 8, 5, 9, 6, 6, 6, 12, 9, 9, 45, - 48, 51, 72, 72, 81, 81, 83, 89, 91, 87, 81, 83, 81, 81, 100, 80, - 83, 52, 55, 51, 49, 42, 42, 36, 25, 28, 24, 22, 18, 18, 17, 17, - 17, 18, 20, 20, 20, 22, 26, 26, 29, 33, 34, 37, 38, 41, 44, 48, - 16, 13, 34, 36, 36, 34, 36, 37, 37, 37, 33, 14, 33, 9, 24, 12, - 18, 12, 17, 36, 55, 69, 72, 59, 61, 75, 79, 88, 79, 72, 59, 53, - 44, 46, 18, 36, 2, 16, 18, 33, 33, 40, 48, 57, 65, 91, 81, 65, - 56, 88, 91, 77, 87, 88, 63, 48, 42, 33, 21, 10, 18, 16, 8, 10, - 10, 9, 5, 6, 6, 5, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 8, 0, 0, 0, 13, 0, 0, 0, 21, 0, 0, 4, 12, 20, 25, - 24, 65, 89, 92, 99, 92, 85, 63, 72, 88, 85, 69, 83, 80, 73, 59, - 40, 34, 17, 26, 13, 1, 0, 12, 10, 0, 0, 8, 2, 4, 0, 2, - 4, 4, 0, 1, 1, 0, 2, 9, 10, 0, 4, 1, 1, 25, 28, 1, - 1, 14, 16, 16, 17, 24, 17, 30, 9, 9, 14, 10, 9, 10, 14, 9, - 9, 9, 14, 10, 10, 10, 32, 10, 10, 10, 13, 16, 20, 20, 37, 10, - 29, 48, 48, 30, 29, 44, 44, 29, 29, 30, 29, 28, 21, 21, 17, 10, - 13, 14, 16, 21, 21, 32, 32, 30, 28, 32, 30, 22, 21, 28, 22, 17, - 14, 26, 16, 36, 21, 32, 44, 56, 53, 57, 65, 85, 67, 49, 45, 34, - 34, 42, 71, 68, 71, 64, 48, 34, 28, 24, 18, 13, 14, 17, 25, 18, - 22, 14, 18, 21, 24, 16, 17, 13, 26, 25, 25, 26, 26, 25, 22, 25, - 25, 24, 24, 26, 65, 34, 26, 34, 28, 32, 28, 29, 25, 25, 26, 33, - 20, 26, 37, 42, 52, 53, 55, 55, 45, 52, 38, 29, 5, 25, 97, 69, - 63, 45, 22, 25, 17, 16, 4, 4, 4, 1, 8, 6, 2, 1, 8, 8, - 5, 1, 6, 8, 2, 1, 5, 6, 5, 0, 4, 1, 4, 0, 1, 1, - 0, 0, 20, 22, 26, 29, 32, 34, 37, 40, 44, 42, 6, 49, 16, 17, - 12, 10, 14, 12, 10, 9, 12, 6, 9, 29, 41, 45, 56, 57, 60, 61, - 52, 45, 38, 17, 6, 57, 69, 68, 49, 63, 57, 52, 21, 10, 10, 4, - 8, 8, 9, 8, 12, 10, 6, 4, 5, 4, 2, 2, 9, 8, 9, 6, - 6, 9, 12, 13, 14, 13, 13, 12, 0, 51, 2, 2, 5, 2, 1, 1, - 0, 1, 1, 0, 1, 4, 14, 29, 25, 26, 36, 40, 37, 33, 25, 6, - 0, 41, 69, 61, 61, 61, 56, 26, 16, 6, 4, 1, 0, 0, 2, 0, - 0, 4, 2, 2, 1, 2, 0, 6, 4, 24, 76, 42, 40, 29, 138, 130, - 122, 114, 106, 103, 99, 75, 36, 16, 52, 102, 108, 95, 81, 83, 87, 87, - 89, 68, 30, 40, 102, 106, 107, 102, 111, 108, 108, 99, 104, 92, 103, 99, - 108, 110, 114, 122, 118, 108, 111, 100, 59, 45, 53, 81, 108, 122, 111, 102, - 111, 110, 111, 100, 106, 111, 103, 71, 65, 77, 71, 83, 80, 79, 87, 81, - 41, 53, 41, 40, 102, 99, 89, 81, 88, 87, 76, 76, 77, 65, 65, 72, - 81, 93, 83, 84, 60, 51, 34, 22, 32, 22, 13, 17, 22, 12, 10, 13, - 28, 8, 6, 8, 37, 21, 21, 26, 56, 65, 69, 76, 69, 75, 84, 76, - 73, 81, 72, 63, 53, 67, 84, 68, 73, 71, 75, 69, 76, 60, 48, 4, - 36, 100, 103, 103, 107, 97, 92, 87, 84, 92, 83, 49, 76, 89, 100, 91, - 91, 85, 71, 81, 52, 44, 22, 33, 76, 80, 89, 92, 92, 79, 85, 97, - 99, 64, 63, 67, 111, 108, 111, 110, 108, 106, 111, 108, 102, 67, 71, 97, - 104, 107, 100, 85, 95, 106, 89, 91, 89, 91, 77, 16, 40, 91, 96, 71, - 79, 85, 93, 76, 81, 79, 28, 28, 36, 99, 85, 85, 92, 87, 83, 96, - 85, 60, 67, 52, 64, 72, 88, 80, 85, 76, 64, 65, 65, 41, 20, 2, - 26, 75, 84, 73, 65, 72, 64, 61, 57, 40, 20, 0, 37, 85, 107, 80, - 77, 76, 72, 87, 88, 87, 48, 33, 41, 95, 99, 87, 92, 93, 97, 68, - 77, 37, 40, 32, 75, 80, 81, 64, 65, 60, 55, 77, 64, 57, 25, 32, - 37, 67, 72, 65, 71, 40, 40, 17, 16, 12, 13, 18, 17, 26, 32, 25, - 26, 20, 20, 29, 34, 25, 25, 17, 9, 55, 81, 88, 71, 80, 64, 56, - 24, 22, 14, 9, 16, 29, 49, 53, 52, 52, 59, 51, 53, 44, 33, 49, - 73, 106, 114, 100, 99, 97, 93, 91, 88, 87, 34, 34, 61, 91, 89, 95, - 87, 84, 79, 88, 79, 59, 41, 40, 65, 65, 72, 67, 59, 55, 59, 48, - 26, 20, 13, 21, 21, 32, 32, 24, 12, 16, 12, 25, 8, 10, 29, 25, - 46, 63, 64, 77, 80, 87, 80, 85, 75, 40, 33, 55, 67, 71, 75, 71, - 73, 72, 75, 63, 80, 59, 44, 0, 76, 71, 64, 44, 71, 69, 60, 52, - 48, 64, 53, 44, 75, 83, 72, 76, 84, 76, 68, 61, 60, 52, 12, 0, - 20, 68, 96, 75, 67, 65, 72, 59, 56, 71, 56, 17, 0, 64, 75, 69, - 68, 61, 55, 18, 36, 32, 25, 1, 16, 26, 44, 51, 49, 59, 67, 72, - 59, 68, 55, 68, 55, 61, 65, 60, 57, 65, 61, 71, 56, 41, 18, 8, - 68, 69, 45, 48, 56, 38, 46, 41, 46, 41, 25, 33, 24, 60, 68, 67, - 57, 69, 64, 55, 52, 14, 2, 26, 59, 55, 41, 44, 44, 38, 12, 8, - 5, 5, 5, 0, 1, 32, 32, 30, 32, 40, 41, 42, 41, 41, 12, 2, - 38, 71, 67, 71, 67, 63, 56, 49, 44, 26, 8, 0, 49, 79, 59, 56, - 51, 60, 49, 55, 46, 25, 6, 0, 37, 52, 51, 13, 10, 8, 6, 13, - 6, 2, 6, 2, 71, 48, 106, 116, 120, 124, 115, 107, 110, 103, 106, 96, - 93, 41, 24, 107, 100, 93, 85, 97, 97, 92, 89, 87, 96, 32, 115, 118, - 118, 114, 110, 115, 112, 122, 110, 118, 108, 102, 93, 107, 100, 106, 104, 110, - 106, 106, 106, 102, 103, 55, 118, 112, 99, 95, 102, 93, 107, 92, 97, 93, - 67, 69, 57, 75, 88, 83, 85, 72, 71, 72, 77, 85, 57, 51, 85, 97, - 93, 97, 103, 92, 96, 93, 95, 89, 85, 72, 85, 80, 80, 80, 73, 80, - 69, 69, 73, 67, 71, 52, 12, 30, 81, 88, 67, 75, 76, 88, 79, 73, - 40, 18, 60, 85, 85, 92, 81, 89, 91, 102, 93, 81, 89, 73, 38, 68, - 89, 100, 96, 72, 83, 83, 76, 79, 64, 52, 5, 76, 110, 88, 89, 95, - 83, 93, 77, 81, 102, 80, 52, 76, 104, 102, 89, 96, 92, 96, 71, 85, - 49, 22, 76, 87, 95, 85, 88, 83, 89, 83, 96, 89, 96, 91, 81, 75, - 75, 73, 72, 73, 72, 72, 75, 77, 85, 79, 67, 80, 81, 80, 71, 88, - 87, 92, 92, 99, 93, 87, 16, 100, 114, 99, 95, 99, 91, 79, 80, 76, - 79, 34, 24, 75, 83, 87, 85, 89, 88, 91, 91, 81, 71, 60, 48, 63, - 91, 93, 88, 92, 87, 76, 71, 68, 45, 22, 6, 83, 87, 87, 80, 84, - 85, 79, 75, 75, 64, 21, 1, 115, 119, 119, 112, 116, 111, 106, 97, 116, - 110, 76, 34, 100, 118, 115, 106, 103, 89, 100, 92, 84, 53, 40, 75, 96, - 84, 80, 80, 89, 91, 81, 87, 84, 85, 72, 30, 64, 83, 85, 81, 81, - 77, 73, 65, 38, 24, 12, 42, 63, 40, 48, 55, 51, 61, 52, 46, 44, - 30, 28, 12, 8, 68, 88, 69, 61, 68, 72, 88, 71, 83, 67, 55, 72, - 53, 76, 80, 89, 76, 91, 71, 81, 57, 51, 59, 91, 115, 79, 83, 79, - 80, 64, 79, 69, 63, 67, 53, 85, 72, 77, 67, 64, 64, 75, 67, 64, - 57, 73, 61, 65, 69, 68, 55, 71, 69, 71, 57, 57, 60, 60, 81, 76, - 83, 83, 84, 85, 83, 89, 93, 93, 40, 41, 63, 116, 116, 118, 115, 118, - 114, 107, 111, 108, 67, 33, 53, 77, 73, 67, 64, 56, 57, 48, 44, 55, - 63, 30, 2, 51, 72, 61, 49, 44, 59, 38, 51, 46, 36, 41, 49, 49, - 55, 59, 51, 40, 45, 46, 53, 44, 63, 14, 0, 93, 97, 102, 103, 97, - 93, 91, 79, 87, 81, 64, 33, 0, 68, 67, 72, 75, 75, 69, 63, 55, - 48, 26, 6, 49, 81, 83, 85, 88, 87, 85, 76, 67, 63, 30, 55, 80, - 79, 80, 80, 71, 63, 49, 52, 56, 42, 22, 9, 67, 73, 44, 42, 34, - 40, 55, 45, 60, 49, 20, 16, 63, 80, 76, 76, 75, 65, 59, 67, 65, - 16, 4, 48, 60, 60, 60, 63, 55, 56, 42, 44, 37, 28, 8, 37, 67, - 81, 77, 76, 69, 72, 68, 60, 65, 44, 21, 2, 60, 61, 51, 48, 48, - 32, 34, 20, 30, 45, 10, 1, 32, 76, 61, 49, 33, 37, 36, 37, 55, - 42, 10, 0, 56, 56, 64, 52, 48, 30, 41, 46, 45, 5, 8, 0, 69, - 64, 85, 84, 92, 138, 136, 124, 120, 111, 110, 71, 71, 41, 22, 92, 99, - 83, 83, 87, 60, 83, 87, 84, 41, 34, 118, 132, 139, 150, 170, 178, 189, - 197, 205, 205, 212, 216, 220, 213, 218, 218, 216, 202, 193, 155, 128, 123, 120, - 93, 112, 108, 110, 104, 99, 104, 106, 84, 60, 60, 63, 59, 55, 76, 95, - 107, 85, 77, 87, 85, 88, 84, 77, 37, 96, 103, 91, 92, 83, 85, 87, - 84, 79, 85, 84, 77, 75, 91, 93, 92, 83, 80, 72, 72, 80, 83, 63, - 55, 16, 92, 88, 100, 99, 85, 95, 95, 88, 89, 73, 20, 73, 110, 96, - 76, 99, 91, 84, 83, 84, 95, 91, 69, 45, 68, 92, 100, 81, 80, 88, - 84, 91, 75, 64, 60, 4, 83, 103, 100, 91, 79, 85, 81, 96, 81, 91, - 87, 37, 71, 92, 93, 95, 79, 81, 75, 73, 80, 56, 28, 81, 72, 81, - 83, 75, 91, 88, 96, 97, 84, 77, 65, 93, 75, 91, 81, 84, 84, 84, - 77, 67, 65, 55, 55, 73, 89, 85, 87, 89, 88, 83, 88, 88, 87, 87, - 81, 16, 103, 112, 73, 72, 73, 67, 68, 64, 76, 75, 34, 25, 72, 92, - 87, 83, 73, 71, 75, 77, 88, 72, 65, 34, 57, 88, 77, 81, 89, 87, - 67, 60, 71, 49, 37, 9, 80, 83, 79, 76, 76, 68, 68, 68, 61, 65, - 28, 0, 100, 112, 114, 115, 111, 111, 114, 103, 103, 108, 85, 41, 110, 106, - 103, 84, 73, 79, 64, 72, 75, 89, 71, 92, 79, 73, 79, 65, 76, 52, - 57, 56, 60, 44, 46, 36, 84, 118, 80, 87, 84, 91, 81, 72, 84, 33, - 12, 52, 53, 36, 52, 38, 33, 52, 40, 36, 45, 26, 24, 14, 10, 69, - 97, 65, 57, 76, 64, 67, 65, 52, 71, 34, 48, 99, 92, 91, 97, 92, - 85, 79, 77, 67, 53, 55, 106, 108, 75, 77, 73, 64, 57, 71, 88, 83, - 85, 85, 95, 93, 104, 93, 93, 97, 124, 96, 103, 99, 102, 95, 102, 103, - 106, 97, 96, 103, 99, 102, 79, 60, 41, 85, 83, 77, 81, 76, 73, 64, - 73, 72, 69, 46, 30, 88, 122, 111, 110, 107, 112, 112, 118, 104, 87, 83, - 40, 56, 73, 72, 51, 48, 63, 51, 46, 63, 61, 56, 30, 4, 40, 73, - 63, 61, 51, 59, 53, 65, 61, 46, 41, 41, 64, 77, 65, 81, 80, 73, - 60, 80, 68, 59, 16, 4, 83, 96, 87, 88, 92, 89, 84, 83, 76, 93, - 67, 30, 0, 71, 75, 71, 52, 53, 41, 57, 69, 52, 14, 9, 45, 89, - 85, 73, 57, 48, 68, 45, 44, 36, 33, 65, 84, 68, 68, 53, 45, 52, - 67, 56, 45, 24, 20, 5, 65, 76, 65, 44, 45, 51, 55, 52, 46, 45, - 20, 36, 76, 77, 72, 57, 72, 52, 49, 57, 72, 14, 4, 56, 63, 37, - 37, 30, 22, 25, 20, 26, 46, 38, 8, 33, 72, 65, 72, 79, 59, 48, - 49, 67, 59, 56, 17, 2, 59, 44, 25, 55, 37, 37, 26, 20, 25, 21, - 8, 0, 48, 71, 48, 59, 44, 32, 32, 60, 41, 38, 12, 0, 24, 59, - 51, 59, 51, 55, 42, 52, 38, 13, 8, 1, 83, 103, 84, 75, 84, 112, - 99, 108, 103, 91, 77, 81, 93, 44, 36, 67, 93, 85, 73, 64, 60, 61, - 64, 68, 93, 102, 130, 204, 212, 222, 225, 225, 224, 226, 228, 233, 234, 237, - 237, 237, 233, 230, 230, 229, 226, 221, 222, 193, 147, 132, 122, 146, 161, 190, - 165, 140, 107, 85, 56, 61, 61, 60, 55, 97, 108, 99, 96, 84, 95, 100, - 102, 85, 95, 81, 89, 87, 89, 64, 91, 85, 92, 84, 87, 79, 79, 77, - 89, 106, 114, 99, 102, 97, 104, 100, 83, 69, 63, 56, 16, 100, 92, 97, - 96, 97, 84, 85, 79, 77, 71, 32, 80, 89, 99, 88, 84, 89, 79, 84, - 95, 96, 80, 65, 37, 64, 95, 107, 85, 80, 85, 91, 84, 76, 60, 46, - 5, 71, 95, 93, 91, 88, 85, 83, 65, 100, 99, 77, 45, 75, 93, 89, - 81, 81, 79, 67, 79, 81, 59, 38, 48, 75, 77, 84, 93, 102, 80, 81, - 84, 71, 72, 57, 84, 89, 71, 87, 83, 85, 68, 76, 76, 75, 51, 51, - 81, 85, 83, 81, 76, 80, 83, 61, 83, 83, 49, 53, 21, 64, 115, 75, - 71, 79, 59, 67, 69, 75, 72, 37, 22, 71, 85, 84, 67, 71, 71, 67, - 69, 84, 72, 60, 34, 63, 81, 72, 61, 91, 93, 67, 61, 73, 40, 37, - 9, 60, 88, 75, 72, 79, 64, 83, 77, 57, 61, 25, 4, 65, 111, 102, - 89, 85, 85, 93, 99, 88, 85, 88, 87, 91, 107, 104, 95, 83, 100, 71, - 83, 63, 69, 61, 71, 60, 72, 67, 63, 60, 67, 65, 64, 60, 67, 64, - 68, 76, 89, 97, 65, 72, 73, 107, 77, 73, 30, 9, 34, 45, 34, 42, - 51, 55, 48, 52, 36, 29, 32, 18, 10, 8, 64, 83, 60, 63, 76, 77, - 77, 71, 61, 64, 34, 87, 103, 96, 87, 75, 76, 73, 68, 77, 52, 51, - 65, 87, 107, 67, 76, 63, 68, 73, 116, 202, 205, 193, 206, 221, 222, 206, - 214, 228, 232, 228, 225, 232, 242, 226, 229, 224, 241, 221, 210, 216, 246, 222, - 155, 91, 57, 45, 85, 100, 114, 110, 106, 106, 93, 87, 88, 69, 46, 42, - 104, 115, 104, 103, 110, 108, 120, 114, 87, 95, 77, 45, 45, 72, 60, 51, - 45, 56, 51, 45, 45, 60, 53, 25, 1, 51, 84, 68, 88, 65, 52, 60, - 53, 51, 46, 40, 18, 69, 76, 63, 65, 69, 69, 44, 68, 67, 59, 13, - 4, 57, 91, 85, 77, 72, 71, 65, 69, 73, 84, 65, 29, 0, 68, 68, - 60, 34, 55, 57, 52, 55, 53, 25, 12, 56, 87, 67, 60, 60, 53, 64, - 33, 42, 38, 22, 60, 71, 56, 49, 48, 67, 45, 46, 37, 30, 34, 21, - 9, 64, 76, 67, 59, 68, 68, 34, 45, 38, 46, 12, 29, 80, 76, 69, - 41, 69, 55, 71, 68, 64, 16, 5, 55, 45, 30, 32, 21, 21, 21, 21, - 21, 41, 36, 9, 30, 67, 64, 69, 89, 61, 44, 49, 53, 45, 41, 16, - 2, 52, 56, 29, 63, 29, 41, 24, 25, 37, 21, 6, 0, 48, 72, 49, - 45, 40, 41, 37, 56, 36, 20, 10, 0, 45, 42, 49, 51, 34, 37, 36, - 26, 34, 28, 9, 1, 67, 61, 59, 28, 17, 81, 81, 88, 81, 87, 73, - 95, 85, 44, 32, 72, 96, 89, 65, 61, 56, 55, 102, 115, 162, 197, 214, - 226, 236, 233, 233, 230, 230, 225, 232, 237, 238, 237, 236, 233, 232, 228, 222, - 225, 226, 225, 221, 224, 218, 220, 212, 205, 208, 202, 194, 130, 106, 83, 56, - 61, 67, 68, 69, 123, 183, 193, 186, 187, 194, 199, 202, 198, 195, 194, 193, - 193, 136, 114, 106, 102, 103, 92, 89, 97, 99, 135, 170, 195, 201, 195, 193, - 189, 134, 97, 84, 53, 64, 46, 18, 65, 92, 84, 81, 80, 80, 71, 81, - 85, 73, 34, 55, 89, 100, 81, 84, 84, 79, 80, 85, 95, 79, 67, 36, - 71, 84, 100, 88, 77, 84, 88, 81, 76, 59, 51, 6, 61, 99, 104, 97, - 88, 96, 71, 85, 89, 88, 77, 36, 75, 84, 93, 75, 75, 85, 73, 91, - 76, 57, 37, 42, 89, 93, 73, 76, 77, 89, 77, 81, 76, 68, 51, 91, - 89, 79, 76, 73, 72, 75, 97, 87, 73, 64, 49, 85, 83, 91, 72, 80, - 81, 77, 81, 72, 80, 83, 76, 22, 64, 112, 79, 73, 67, 53, 57, 57, - 75, 73, 37, 20, 71, 84, 73, 61, 60, 60, 61, 63, 80, 65, 53, 36, - 52, 79, 76, 60, 77, 68, 56, 61, 71, 41, 21, 4, 60, 92, 68, 61, - 72, 77, 71, 63, 68, 56, 25, 2, 100, 102, 93, 92, 99, 99, 95, 96, - 130, 181, 193, 199, 209, 214, 221, 224, 230, 232, 249, 249, 246, 240, 240, 225, - 232, 236, 233, 230, 225, 228, 222, 224, 198, 202, 181, 205, 197, 228, 190, 182, - 174, 175, 199, 142, 83, 36, 14, 48, 28, 51, 55, 45, 41, 56, 30, 26, - 10, 34, 10, 8, 5, 61, 89, 64, 65, 80, 85, 81, 57, 55, 67, 24, - 88, 102, 87, 71, 71, 80, 87, 77, 84, 64, 40, 49, 81, 103, 65, 69, - 61, 64, 67, 127, 190, 195, 199, 205, 206, 212, 209, 209, 214, 217, 218, 220, - 222, 221, 218, 218, 216, 208, 208, 204, 199, 199, 193, 143, 85, 57, 12, 77, - 88, 92, 96, 95, 93, 111, 108, 76, 77, 49, 49, 76, 115, 103, 120, 118, - 102, 93, 72, 75, 87, 81, 46, 42, 76, 64, 45, 51, 51, 51, 44, 56, - 37, 52, 33, 0, 53, 83, 59, 67, 55, 64, 61, 80, 44, 42, 40, 32, - 63, 84, 72, 79, 81, 79, 77, 65, 55, 53, 14, 0, 60, 91, 76, 67, - 63, 69, 81, 83, 85, 91, 71, 28, 0, 65, 57, 51, 40, 69, 53, 55, - 57, 44, 20, 9, 41, 89, 72, 53, 52, 45, 63, 37, 36, 28, 22, 57, - 80, 48, 64, 71, 56, 46, 44, 48, 53, 32, 22, 14, 59, 64, 51, 57, - 45, 45, 36, 51, 38, 44, 12, 32, 76, 68, 52, 67, 59, 83, 68, 67, - 61, 18, 5, 42, 61, 34, 34, 24, 20, 17, 21, 21, 21, 25, 8, 2, - 64, 64, 77, 83, 42, 49, 51, 45, 56, 40, 21, 2, 45, 59, 30, 65, - 17, 40, 22, 20, 30, 18, 5, 0, 33, 68, 57, 60, 44, 44, 34, 53, - 42, 22, 10, 0, 41, 53, 48, 21, 26, 24, 25, 14, 29, 12, 8, 6, - 68, 60, 45, 56, 18, 77, 76, 79, 84, 77, 73, 95, 81, 44, 36, 97, - 88, 64, 61, 69, 91, 103, 177, 228, 233, 236, 237, 230, 229, 229, 229, 205, - 175, 162, 166, 170, 162, 146, 135, 128, 124, 112, 108, 116, 122, 135, 183, 205, - 218, 217, 214, 212, 202, 202, 187, 136, 103, 72, 55, 63, 53, 69, 116, 147, - 204, 201, 213, 201, 212, 218, 218, 216, 225, 222, 228, 225, 222, 217, 222, 220, - 217, 212, 202, 210, 214, 210, 217, 214, 202, 198, 189, 191, 134, 97, 79, 49, - 63, 49, 21, 65, 91, 73, 73, 102, 87, 87, 85, 76, 71, 34, 33, 84, - 93, 92, 88, 87, 93, 95, 96, 96, 79, 67, 36, 63, 106, 110, 80, 85, - 85, 89, 80, 75, 60, 46, 9, 77, 100, 92, 88, 81, 96, 77, 81, 92, - 77, 81, 36, 80, 81, 87, 80, 76, 88, 79, 83, 76, 57, 37, 33, 88, - 75, 72, 77, 85, 75, 87, 81, 68, 63, 48, 80, 91, 72, 69, 69, 81, - 77, 73, 76, 69, 49, 49, 85, 87, 97, 85, 83, 68, 88, 81, 68, 81, - 80, 79, 24, 67, 107, 81, 69, 67, 52, 53, 68, 79, 71, 37, 18, 77, - 79, 71, 61, 64, 59, 59, 64, 75, 63, 59, 37, 61, 76, 69, 60, 56, - 88, 79, 61, 65, 42, 21, 8, 69, 92, 75, 71, 72, 64, 63, 51, 67, - 76, 24, 2, 112, 114, 93, 95, 103, 91, 106, 179, 190, 202, 205, 205, 213, - 225, 225, 229, 233, 237, 246, 248, 248, 245, 244, 242, 226, 236, 241, 232, 225, - 225, 233, 226, 221, 228, 217, 213, 204, 210, 199, 195, 186, 206, 187, 157, 81, - 34, 13, 45, 26, 52, 45, 40, 46, 34, 36, 26, 13, 33, 12, 6, 5, - 64, 83, 65, 76, 71, 81, 84, 69, 56, 59, 22, 87, 96, 72, 83, 83, - 89, 99, 95, 91, 72, 51, 67, 77, 111, 72, 76, 76, 61, 63, 91, 131, - 178, 193, 197, 199, 195, 205, 194, 199, 206, 209, 210, 217, 217, 220, 209, 205, - 210, 202, 191, 190, 194, 166, 99, 76, 33, 21, 81, 95, 76, 89, 89, 97, - 96, 107, 80, 80, 49, 44, 77, 110, 96, 91, 71, 73, 77, 75, 80, 84, - 89, 60, 40, 71, 64, 56, 44, 46, 49, 52, 41, 55, 75, 30, 2, 75, - 59, 73, 52, 53, 60, 65, 59, 60, 44, 40, 30, 65, 85, 56, 79, 60, - 56, 56, 59, 64, 57, 13, 0, 93, 80, 71, 75, 77, 76, 76, 87, 85, - 83, 67, 40, 0, 61, 76, 48, 79, 45, 38, 52, 49, 44, 18, 4, 37, - 87, 69, 64, 60, 63, 60, 48, 33, 33, 22, 60, 76, 45, 56, 72, 59, - 46, 52, 51, 37, 33, 24, 18, 60, 79, 65, 67, 68, 48, 37, 41, 38, - 56, 16, 40, 73, 64, 44, 73, 79, 81, 61, 67, 52, 21, 5, 44, 55, - 41, 32, 21, 20, 33, 20, 24, 37, 46, 9, 2, 60, 57, 51, 42, 45, - 40, 40, 37, 38, 42, 20, 4, 37, 63, 38, 79, 17, 40, 16, 33, 26, - 22, 8, 2, 45, 67, 60, 55, 42, 33, 41, 44, 45, 30, 13, 0, 41, - 57, 28, 22, 10, 13, 14, 18, 25, 8, 8, 0, 63, 56, 34, 13, 2, - 102, 80, 75, 75, 73, 73, 99, 71, 48, 34, 99, 93, 64, 73, 97, 130, - 216, 236, 234, 232, 233, 236, 230, 217, 185, 151, 118, 107, 102, 103, 103, 103, - 103, 102, 100, 103, 100, 102, 99, 100, 99, 102, 115, 124, 151, 183, 191, 198, - 185, 140, 116, 84, 48, 52, 57, 60, 72, 128, 153, 226, 232, 202, 220, 212, - 224, 222, 226, 224, 221, 220, 226, 233, 229, 226, 224, 218, 217, 224, 217, 213, - 212, 212, 217, 209, 201, 201, 191, 118, 81, 68, 49, 59, 49, 24, 89, 89, - 84, 83, 92, 79, 87, 84, 88, 89, 68, 25, 80, 92, 103, 103, 103, 97, - 97, 91, 89, 76, 65, 36, 61, 92, 99, 89, 84, 88, 93, 83, 77, 77, - 49, 8, 71, 97, 92, 97, 89, 96, 92, 95, 95, 67, 65, 26, 76, 79, - 96, 73, 97, 81, 80, 75, 79, 68, 57, 32, 80, 77, 75, 72, 72, 77, - 77, 77, 67, 53, 45, 75, 83, 67, 65, 72, 81, 71, 71, 68, 64, 41, - 45, 75, 80, 88, 89, 79, 67, 81, 71, 80, 64, 81, 73, 26, 45, 67, - 108, 80, 65, 61, 53, 63, 79, 65, 38, 22, 64, 73, 68, 52, 56, 53, - 52, 71, 79, 73, 55, 30, 48, 65, 64, 55, 53, 83, 60, 64, 65, 46, - 30, 9, 71, 83, 67, 77, 71, 76, 71, 63, 69, 59, 25, 0, 92, 110, - 93, 96, 102, 91, 165, 190, 198, 201, 206, 210, 210, 217, 221, 229, 229, 232, - 241, 245, 244, 246, 245, 244, 238, 229, 238, 232, 228, 230, 220, 217, 221, 225, - 214, 213, 202, 198, 194, 190, 185, 189, 143, 120, 49, 33, 14, 45, 29, 41, - 56, 38, 34, 33, 24, 25, 13, 21, 17, 10, 6, 51, 95, 68, 81, 67, - 76, 79, 72, 64, 55, 29, 83, 81, 96, 104, 107, 118, 116, 114, 104, 87, - 77, 53, 92, 118, 80, 76, 60, 57, 64, 64, 79, 92, 104, 107, 107, 100, - 97, 93, 99, 97, 97, 99, 103, 108, 108, 104, 104, 106, 99, 96, 99, 96, - 92, 79, 71, 32, 38, 77, 91, 75, 73, 96, 89, 91, 99, 77, 75, 51, - 53, 72, 107, 108, 85, 85, 108, 93, 96, 102, 72, 80, 79, 40, 60, 77, - 61, 45, 48, 42, 51, 57, 56, 61, 29, 4, 46, 68, 65, 52, 52, 49, - 45, 57, 64, 51, 38, 30, 55, 92, 51, 84, 85, 69, 76, 73, 71, 48, - 17, 2, 92, 92, 79, 83, 73, 77, 76, 91, 83, 83, 65, 30, 0, 67, - 75, 55, 53, 52, 55, 44, 53, 29, 16, 10, 40, 84, 72, 46, 64, 55, - 46, 42, 36, 36, 26, 63, 77, 63, 63, 67, 55, 46, 46, 64, 40, 22, - 25, 12, 68, 73, 60, 48, 59, 55, 36, 48, 34, 42, 14, 59, 67, 45, - 68, 63, 61, 57, 67, 69, 56, 16, 6, 22, 41, 53, 32, 33, 20, 37, - 33, 21, 33, 45, 9, 22, 55, 64, 52, 40, 38, 42, 40, 40, 38, 38, - 21, 4, 38, 61, 29, 51, 20, 34, 16, 36, 28, 17, 6, 0, 57, 68, - 64, 63, 42, 38, 51, 46, 46, 34, 12, 0, 24, 41, 21, 9, 4, 1, - 2, 12, 18, 9, 8, 1, 64, 77, 28, 2, 25, 130, 88, 85, 84, 84, - 87, 88, 87, 48, 48, 75, 61, 75, 102, 165, 225, 240, 233, 234, 226, 216, - 195, 169, 126, 110, 103, 103, 103, 104, 104, 104, 104, 110, 104, 91, 77, 69, - 76, 84, 95, 124, 107, 100, 100, 97, 106, 108, 108, 108, 104, 100, 63, 48, - 52, 57, 51, 68, 111, 131, 182, 191, 191, 159, 124, 115, 120, 126, 123, 122, - 124, 135, 162, 190, 198, 205, 210, 216, 214, 206, 195, 197, 204, 202, 198, 183, - 138, 115, 92, 77, 45, 44, 56, 44, 24, 61, 85, 85, 83, 83, 93, 92, - 84, 84, 92, 53, 28, 68, 91, 88, 89, 95, 88, 91, 91, 88, 71, 65, - 30, 57, 85, 102, 104, 106, 97, 99, 83, 79, 64, 45, 6, 64, 92, 91, - 92, 84, 96, 88, 89, 84, 79, 48, 25, 75, 83, 91, 72, 84, 83, 84, - 76, 73, 77, 49, 32, 52, 84, 77, 84, 77, 76, 77, 72, 65, 49, 40, - 65, 89, 73, 68, 73, 76, 77, 72, 73, 68, 41, 40, 79, 77, 77, 75, - 76, 76, 81, 79, 81, 61, 51, 64, 32, 38, 68, 83, 95, 76, 61, 52, - 69, 71, 68, 41, 18, 60, 80, 65, 61, 52, 53, 64, 96, 68, 64, 51, - 24, 61, 75, 55, 49, 55, 51, 56, 57, 55, 40, 30, 10, 48, 91, 79, - 80, 69, 61, 63, 79, 65, 67, 24, 5, 69, 108, 95, 96, 106, 93, 93, - 138, 182, 191, 189, 169, 123, 114, 111, 110, 115, 112, 110, 104, 108, 108, 111, - 111, 111, 107, 103, 104, 106, 104, 103, 97, 97, 106, 110, 104, 102, 95, 89, - 93, 71, 63, 60, 56, 45, 16, 12, 41, 36, 45, 38, 45, 34, 29, 29, - 26, 10, 17, 14, 6, 5, 56, 71, 72, 63, 71, 77, 59, 65, 57, 48, - 33, 87, 89, 110, 132, 170, 179, 181, 162, 166, 144, 118, 102, 88, 115, 71, - 84, 71, 56, 59, 57, 72, 71, 64, 73, 79, 83, 80, 79, 81, 81, 81, - 83, 84, 84, 85, 87, 87, 85, 84, 85, 85, 81, 85, 81, 22, 13, 36, - 80, 85, 76, 85, 80, 80, 85, 102, 76, 71, 63, 42, 53, 92, 103, 83, - 69, 100, 104, 103, 77, 72, 80, 65, 44, 46, 63, 65, 49, 52, 52, 51, - 52, 53, 57, 21, 2, 41, 75, 69, 51, 55, 52, 45, 55, 65, 42, 37, - 14, 67, 84, 57, 67, 84, 85, 67, 83, 71, 44, 13, 2, 60, 77, 68, - 81, 87, 72, 77, 81, 81, 84, 63, 29, 1, 63, 53, 69, 53, 40, 32, - 45, 25, 24, 21, 14, 38, 77, 71, 63, 71, 57, 51, 46, 46, 26, 16, - 68, 72, 63, 71, 71, 48, 48, 61, 44, 34, 26, 24, 17, 71, 63, 48, - 61, 46, 38, 44, 52, 36, 42, 12, 38, 76, 72, 76, 57, 28, 60, 61, - 81, 57, 16, 8, 17, 42, 51, 37, 30, 29, 37, 18, 20, 36, 34, 10, - 18, 49, 63, 57, 45, 52, 45, 46, 45, 42, 40, 26, 6, 16, 57, 36, - 26, 22, 26, 18, 33, 33, 18, 5, 0, 30, 67, 45, 55, 38, 48, 36, - 37, 46, 20, 10, 0, 55, 49, 9, 9, 2, 13, 1, 6, 20, 14, 4, - 2, 64, 81, 20, 6, 51, 111, 112, 99, 104, 91, 100, 81, 81, 49, 46, - 63, 72, 114, 199, 234, 237, 234, 237, 236, 189, 146, 114, 104, 104, 106, 108, - 112, 100, 116, 115, 102, 73, 46, 30, 30, 29, 36, 30, 34, 37, 59, 77, - 119, 112, 100, 103, 99, 99, 96, 107, 95, 44, 41, 45, 53, 52, 71, 87, - 108, 103, 118, 104, 108, 92, 88, 87, 95, 89, 92, 87, 97, 93, 95, 102, - 103, 106, 103, 103, 103, 100, 97, 100, 106, 107, 95, 95, 85, 73, 40, 44, - 51, 53, 44, 25, 51, 81, 91, 84, 96, 85, 91, 91, 88, 84, 56, 32, - 56, 87, 85, 87, 81, 85, 89, 92, 84, 65, 63, 24, 63, 73, 85, 91, - 88, 84, 81, 84, 69, 69, 49, 8, 64, 85, 97, 92, 93, 88, 88, 89, - 80, 76, 59, 24, 68, 76, 91, 92, 77, 83, 71, 79, 59, 56, 45, 37, - 45, 44, 60, 57, 52, 55, 57, 59, 64, 60, 38, 72, 85, 67, 63, 73, - 73, 72, 72, 71, 69, 48, 36, 77, 75, 73, 69, 68, 71, 69, 73, 72, - 72, 72, 72, 51, 37, 73, 88, 77, 59, 49, 51, 72, 64, 65, 42, 17, - 71, 83, 71, 61, 51, 51, 65, 84, 68, 61, 51, 26, 51, 67, 53, 49, - 40, 42, 41, 51, 41, 38, 24, 10, 45, 88, 67, 42, 61, 72, 75, 56, - 61, 61, 22, 5, 97, 100, 95, 92, 96, 95, 99, 99, 102, 102, 102, 96, - 97, 97, 99, 97, 97, 95, 99, 97, 97, 96, 97, 96, 96, 92, 92, 89, - 88, 87, 88, 79, 84, 81, 80, 79, 77, 72, 72, 69, 61, 57, 42, 38, - 18, 12, 17, 37, 29, 41, 33, 29, 13, 17, 10, 2, 14, 16, 28, 6, - 2, 61, 95, 73, 65, 68, 65, 69, 59, 56, 25, 51, 91, 108, 174, 193, - 206, 206, 204, 189, 194, 194, 186, 174, 139, 112, 76, 53, 55, 60, 48, 55, - 44, 60, 56, 55, 64, 77, 87, 87, 89, 88, 85, 89, 93, 95, 95, 95, - 93, 92, 93, 93, 91, 97, 71, 18, 25, 14, 8, 72, 79, 87, 69, 77, - 68, 64, 61, 79, 67, 60, 41, 55, 73, 81, 77, 96, 88, 83, 73, 68, - 65, 69, 75, 45, 40, 51, 81, 75, 69, 63, 67, 69, 55, 53, 34, 1, - 49, 73, 75, 63, 55, 61, 52, 57, 73, 34, 37, 22, 55, 91, 65, 76, - 63, 46, 46, 57, 56, 51, 13, 1, 60, 85, 71, 72, 73, 75, 80, 83, - 76, 79, 72, 28, 1, 63, 69, 37, 30, 34, 29, 25, 37, 24, 17, 16, - 42, 73, 69, 73, 53, 42, 56, 51, 51, 29, 18, 52, 65, 56, 64, 52, - 49, 49, 48, 48, 46, 26, 25, 20, 75, 61, 57, 40, 42, 40, 33, 45, - 38, 20, 10, 63, 64, 77, 57, 33, 49, 44, 64, 45, 55, 13, 9, 13, - 38, 46, 42, 46, 40, 30, 20, 21, 24, 29, 8, 2, 52, 60, 64, 44, - 48, 48, 40, 34, 40, 42, 17, 8, 10, 53, 44, 24, 33, 30, 18, 25, - 22, 14, 5, 0, 49, 63, 55, 44, 32, 36, 36, 45, 46, 32, 26, 0, - 24, 38, 5, 17, 5, 16, 6, 8, 21, 9, 4, 12, 55, 52, 26, 42, - 95, 68, 67, 68, 64, 60, 61, 61, 52, 41, 76, 71, 112, 213, 240, 237, - 238, 236, 238, 197, 132, 107, 108, 108, 115, 115, 110, 115, 120, 115, 81, 44, - 26, 22, 24, 25, 26, 32, 32, 33, 36, 36, 49, 77, 108, 150, 112, 103, - 102, 102, 107, 89, 42, 37, 40, 49, 52, 55, 87, 84, 84, 79, 77, 91, - 92, 93, 93, 93, 95, 95, 92, 93, 92, 93, 95, 93, 92, 93, 91, 91, - 89, 87, 87, 91, 89, 87, 83, 61, 36, 38, 36, 51, 51, 46, 28, 34, - 79, 80, 91, 79, 55, 65, 57, 49, 45, 46, 55, 34, 51, 67, 79, 77, - 76, 76, 75, 80, 64, 63, 22, 61, 67, 87, 91, 89, 85, 81, 69, 65, - 63, 45, 12, 65, 69, 71, 71, 69, 69, 69, 71, 73, 63, 56, 24, 64, - 71, 85, 75, 57, 67, 64, 53, 55, 61, 55, 51, 55, 67, 51, 69, 61, - 64, 55, 64, 63, 44, 38, 59, 71, 76, 63, 65, 69, 69, 64, 68, 64, - 46, 34, 77, 73, 73, 64, 68, 67, 67, 61, 64, 60, 67, 56, 60, 34, - 48, 55, 53, 52, 53, 59, 60, 64, 63, 44, 14, 72, 64, 71, 59, 51, - 48, 46, 51, 56, 55, 44, 34, 48, 60, 41, 33, 36, 36, 37, 36, 37, - 36, 18, 12, 33, 64, 67, 48, 57, 67, 64, 61, 65, 72, 21, 2, 89, - 104, 97, 95, 93, 93, 95, 92, 92, 84, 88, 87, 76, 85, 72, 80, 85, - 81, 114, 111, 108, 111, 108, 108, 108, 107, 106, 103, 100, 102, 97, 93, 92, - 95, 89, 88, 91, 85, 67, 38, 18, 16, 13, 12, 10, 8, 17, 4, 8, - 9, 2, 1, 1, 2, 1, 2, 2, 9, 10, 5, 2, 46, 76, 81, 79, - 75, 83, 75, 60, 56, 22, 60, 100, 158, 214, 210, 206, 210, 195, 202, 205, - 197, 179, 174, 150, 73, 64, 68, 61, 64, 60, 57, 53, 61, 67, 38, 38, - 41, 75, 162, 107, 104, 111, 108, 124, 118, 120, 124, 131, 127, 128, 126, 107, - 84, 49, 14, 30, 16, 9, 56, 72, 79, 79, 77, 80, 76, 81, 77, 73, - 69, 67, 72, 75, 57, 57, 63, 56, 55, 56, 65, 67, 56, 51, 51, 48, - 45, 46, 44, 42, 42, 30, 41, 40, 42, 20, 4, 44, 53, 56, 59, 56, - 60, 51, 57, 61, 41, 34, 20, 79, 91, 65, 61, 41, 56, 59, 49, 48, - 51, 13, 1, 80, 80, 69, 73, 67, 77, 68, 72, 69, 73, 59, 42, 1, - 56, 65, 38, 45, 28, 32, 25, 28, 22, 16, 5, 44, 65, 63, 60, 36, - 40, 52, 52, 34, 28, 16, 48, 52, 53, 49, 49, 52, 49, 49, 52, 46, - 26, 32, 25, 80, 61, 41, 38, 42, 38, 30, 40, 34, 14, 10, 52, 38, - 52, 56, 52, 46, 38, 41, 38, 37, 14, 13, 12, 25, 34, 36, 20, 26, - 26, 33, 32, 32, 29, 10, 0, 44, 51, 48, 41, 36, 33, 32, 30, 26, - 26, 10, 10, 10, 9, 9, 9, 14, 16, 10, 28, 20, 18, 6, 5, 44, - 59, 51, 38, 33, 33, 33, 34, 34, 26, 14, 0, 45, 42, 5, 12, 9, - 16, 12, 12, 6, 5, 2, 0, 42, 60, 45, 38, 30, 44, 36, 46, 45, - 41, 38, 44, 55, 88, 67, 93, 194, 238, 236, 237, 237, 240, 189, 136, 107, - 115, 119, 118, 111, 103, 119, 124, 119, 80, 30, 20, 21, 20, 22, 30, 37, - 41, 40, 45, 40, 40, 41, 60, 85, 140, 155, 116, 115, 115, 108, 92, 38, - 34, 36, 46, 52, 41, 73, 81, 81, 81, 83, 88, 93, 95, 96, 100, 99, - 100, 102, 103, 103, 97, 96, 96, 96, 95, 99, 93, 93, 91, 89, 88, 93, - 79, 40, 34, 33, 32, 24, 28, 46, 45, 42, 29, 33, 38, 46, 53, 36, - 32, 30, 26, 28, 22, 24, 25, 36, 36, 48, 51, 55, 57, 63, 64, 64, - 55, 24, 53, 61, 77, 79, 73, 68, 55, 29, 33, 28, 17, 12, 38, 40, - 40, 42, 42, 42, 42, 46, 46, 45, 34, 29, 44, 46, 53, 32, 29, 29, - 32, 21, 13, 21, 18, 13, 12, 10, 12, 12, 12, 17, 18, 20, 21, 22, - 29, 17, 18, 18, 18, 18, 32, 33, 22, 28, 33, 56, 33, 56, 69, 56, - 52, 52, 52, 51, 51, 51, 49, 51, 49, 46, 48, 51, 55, 55, 56, 57, - 59, 59, 59, 61, 44, 18, 65, 64, 53, 46, 41, 45, 42, 40, 48, 48, - 36, 16, 44, 29, 25, 14, 13, 12, 12, 12, 12, 9, 9, 13, 17, 17, - 20, 17, 16, 17, 17, 26, 26, 36, 21, 0, 14, 51, 57, 56, 57, 61, - 67, 65, 68, 65, 68, 48, 68, 97, 106, 118, 122, 120, 123, 126, 119, 124, - 123, 124, 123, 123, 120, 119, 115, 114, 111, 108, 107, 102, 106, 95, 77, 52, - 17, 12, 12, 10, 8, 6, 6, 6, 20, 13, 10, 14, 13, 10, 6, 8, - 8, 6, 5, 8, 2, 8, 5, 29, 59, 61, 57, 64, 65, 51, 38, 57, - 21, 67, 118, 197, 216, 210, 210, 210, 216, 190, 165, 134, 127, 106, 87, 71, - 69, 46, 34, 52, 52, 46, 45, 49, 45, 32, 40, 34, 72, 173, 147, 108, - 108, 131, 123, 126, 128, 131, 140, 135, 136, 132, 110, 73, 18, 14, 10, 32, - 26, 34, 59, 57, 49, 53, 56, 53, 55, 57, 56, 57, 56, 59, 60, 61, - 61, 60, 60, 60, 61, 59, 59, 59, 57, 51, 51, 48, 46, 40, 57, 44, - 41, 32, 41, 40, 21, 4, 17, 45, 46, 25, 30, 46, 45, 36, 36, 40, - 30, 25, 59, 106, 46, 37, 45, 44, 28, 29, 36, 26, 20, 2, 65, 88, - 80, 84, 76, 80, 71, 69, 75, 71, 42, 30, 1, 59, 60, 33, 34, 24, - 20, 21, 21, 18, 12, 12, 34, 14, 18, 20, 21, 20, 20, 17, 12, 10, - 18, 16, 18, 20, 17, 17, 21, 32, 41, 41, 41, 21, 22, 14, 73, 57, - 38, 32, 36, 25, 24, 22, 20, 17, 14, 36, 18, 29, 16, 16, 33, 26, - 32, 26, 30, 28, 14, 9, 21, 26, 29, 24, 20, 17, 17, 14, 14, 13, - 9, 13, 17, 17, 8, 9, 12, 12, 9, 10, 10, 9, 10, 10, 8, 10, - 10, 10, 13, 14, 13, 14, 13, 16, 5, 0, 36, 33, 30, 28, 29, 28, - 26, 26, 26, 14, 17, 0, 37, 30, 1, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 5, 9, 8, 12, 2, 102, 96, 89, 84, 80, 83, 79, 88, 67, - 76, 151, 234, 237, 237, 237, 236, 186, 135, 111, 114, 123, 112, 104, 100, 123, - 130, 124, 91, 34, 18, 20, 18, 20, 32, 37, 37, 33, 33, 28, 33, 18, - 24, 56, 77, 120, 165, 138, 116, 115, 110, 97, 37, 34, 36, 45, 48, 40, - 40, 42, 46, 48, 48, 51, 63, 110, 170, 114, 99, 100, 104, 102, 100, 95, - 95, 99, 100, 108, 108, 108, 102, 99, 103, 99, 71, 32, 28, 28, 21, 22, - 25, 22, 25, 28, 28, 29, 25, 25, 26, 24, 45, 49, 52, 55, 59, 60, - 56, 25, 75, 76, 52, 46, 45, 46, 41, 38, 44, 53, 20, 46, 29, 25, - 22, 21, 22, 16, 14, 14, 14, 16, 8, 12, 12, 9, 9, 10, 12, 12, - 12, 14, 16, 16, 32, 13, 24, 45, 48, 53, 45, 56, 64, 87, 69, 80, - 68, 89, 96, 88, 97, 96, 89, 83, 77, 63, 33, 29, 72, 106, 108, 81, - 77, 67, 51, 46, 41, 14, 12, 9, 8, 9, 9, 8, 8, 9, 9, 9, - 9, 12, 13, 13, 14, 14, 17, 20, 21, 22, 26, 29, 45, 46, 59, 45, - 21, 59, 41, 34, 25, 24, 24, 21, 24, 24, 21, 22, 17, 12, 30, 48, - 48, 52, 73, 81, 77, 85, 73, 40, 12, 53, 88, 87, 67, 46, 48, 48, - 34, 32, 12, 9, 1, 9, 9, 21, 16, 17, 17, 26, 24, 28, 28, 36, - 51, 75, 108, 171, 161, 111, 122, 140, 134, 131, 134, 132, 132, 130, 128, 127, - 126, 123, 122, 119, 114, 112, 102, 103, 92, 48, 16, 13, 10, 9, 10, 13, - 13, 16, 24, 14, 21, 42, 55, 59, 61, 64, 57, 56, 40, 36, 13, 10, - 5, 5, 20, 16, 17, 29, 30, 55, 56, 44, 46, 17, 76, 134, 204, 232, - 213, 213, 202, 151, 124, 92, 93, 85, 79, 77, 73, 28, 51, 40, 45, 42, - 34, 29, 33, 30, 32, 49, 55, 73, 181, 177, 114, 95, 112, 120, 131, 135, - 139, 144, 140, 140, 134, 112, 65, 16, 14, 13, 14, 10, 4, 4, 5, 2, - 1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 9, 9, 10, 10, 10, 13, 14, 18, 21, 25, 36, 13, 40, 51, 48, - 32, 33, 41, 40, 25, 26, 33, 12, 2, 9, 36, 38, 33, 29, 40, 41, - 33, 29, 44, 41, 8, 1, 16, 46, 49, 14, 9, 6, 5, 6, 12, 33, - 21, 17, 29, 21, 33, 30, 36, 40, 40, 37, 29, 13, 45, 53, 60, 56, - 33, 12, 9, 13, 9, 17, 18, 30, 24, 56, 33, 32, 34, 30, 42, 51, - 44, 51, 33, 12, 49, 56, 59, 55, 30, 24, 24, 12, 16, 16, 8, 13, - 22, 20, 12, 16, 13, 13, 12, 10, 13, 8, 5, 5, 12, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 1, 4, - 6, 8, 8, 4, 0, 12, 5, 8, 5, 5, 5, 8, 5, 5, 5, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 1, - 0, 1, 110, 97, 99, 91, 89, 95, 89, 68, 73, 135, 222, 237, 237, 238, - 236, 187, 124, 112, 120, 127, 110, 104, 110, 126, 136, 131, 110, 44, 18, 17, - 16, 17, 26, 30, 29, 30, 32, 33, 48, 52, 68, 64, 57, 71, 111, 169, - 153, 120, 115, 116, 96, 38, 34, 34, 45, 49, 40, 48, 88, 97, 99, 92, - 97, 95, 111, 181, 153, 99, 97, 102, 96, 102, 111, 114, 127, 131, 134, 132, - 138, 135, 131, 103, 96, 36, 28, 26, 21, 20, 20, 22, 21, 20, 21, 28, - 28, 45, 60, 73, 84, 96, 100, 104, 103, 102, 93, 63, 41, 87, 92, 64, - 64, 68, 69, 61, 51, 48, 53, 20, 20, 28, 45, 48, 53, 83, 93, 103, - 72, 59, 55, 102, 100, 110, 88, 96, 83, 102, 87, 80, 87, 80, 32, 20, - 64, 104, 95, 106, 97, 81, 73, 83, 100, 79, 93, 85, 79, 68, 83, 96, - 92, 81, 84, 75, 92, 38, 28, 79, 115, 102, 100, 115, 111, 114, 118, 104, - 96, 48, 24, 85, 100, 93, 97, 96, 100, 106, 99, 97, 96, 91, 87, 85, - 92, 89, 96, 85, 84, 76, 49, 37, 38, 33, 45, 18, 24, 30, 52, 63, - 60, 65, 79, 69, 61, 52, 41, 33, 76, 100, 99, 97, 95, 97, 93, 87, - 83, 73, 41, 13, 68, 89, 89, 83, 84, 83, 83, 80, 59, 40, 33, 2, - 57, 71, 72, 63, 68, 76, 73, 71, 73, 69, 24, 44, 80, 102, 195, 170, - 120, 114, 126, 143, 143, 140, 144, 153, 153, 151, 153, 153, 144, 142, 118, 112, - 102, 118, 104, 88, 28, 16, 12, 12, 14, 14, 16, 24, 24, 25, 13, 34, - 68, 67, 79, 85, 89, 80, 79, 65, 61, 59, 46, 24, 4, 71, 75, 73, - 71, 30, 29, 24, 46, 46, 10, 85, 162, 214, 210, 218, 201, 138, 103, 93, - 85, 76, 77, 73, 80, 33, 28, 41, 49, 61, 64, 72, 57, 60, 59, 63, - 69, 93, 72, 190, 186, 150, 110, 108, 111, 131, 146, 139, 142, 146, 142, 132, - 116, 61, 16, 21, 18, 17, 10, 14, 45, 52, 51, 53, 51, 56, 45, 80, - 72, 42, 48, 92, 79, 96, 102, 97, 106, 104, 93, 108, 108, 103, 96, 77, - 80, 96, 97, 87, 87, 91, 87, 83, 55, 38, 17, 4, 46, 73, 63, 55, - 51, 38, 25, 26, 8, 17, 16, 18, 2, 1, 8, 2, 2, 0, 4, 0, - 1, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 2, 10, 10, 14, 20, 36, 44, 26, 22, 37, 4, 24, 61, 73, 77, 75, - 71, 75, 76, 81, 51, 29, 14, 49, 63, 65, 77, 72, 61, 60, 55, 44, - 42, 40, 52, 37, 51, 59, 48, 51, 55, 64, 63, 71, 68, 32, 10, 61, - 55, 34, 65, 60, 56, 51, 42, 32, 24, 18, 12, 13, 5, 12, 29, 24, - 40, 40, 41, 29, 25, 20, 4, 9, 20, 68, 77, 60, 65, 69, 67, 59, - 61, 40, 44, 55, 63, 67, 79, 76, 71, 26, 5, 1, 0, 5, 0, 0, - 6, 6, 2, 4, 6, 5, 2, 4, 4, 0, 0, 8, 21, 24, 29, 18, - 29, 44, 53, 38, 25, 17, 1, 16, 68, 83, 69, 71, 83, 77, 80, 80, - 87, 85, 87, 72, 83, 126, 216, 230, 238, 236, 234, 177, 122, 114, 122, 130, - 107, 107, 119, 130, 143, 139, 128, 81, 25, 18, 17, 18, 26, 30, 32, 33, - 38, 79, 79, 75, 79, 79, 67, 63, 64, 85, 166, 173, 143, 112, 107, 91, - 36, 32, 32, 44, 46, 36, 83, 107, 114, 114, 110, 96, 85, 97, 193, 177, - 120, 96, 97, 108, 116, 131, 134, 136, 142, 143, 147, 146, 140, 134, 110, 84, - 28, 24, 21, 20, 24, 30, 36, 33, 34, 34, 36, 48, 96, 107, 110, 103, - 100, 102, 95, 88, 81, 65, 60, 22, 85, 85, 71, 65, 63, 71, 72, 77, - 48, 56, 20, 71, 102, 99, 102, 99, 107, 88, 107, 81, 108, 68, 72, 91, - 93, 95, 97, 83, 80, 85, 79, 93, 95, 40, 17, 84, 100, 104, 95, 96, - 96, 97, 84, 83, 89, 83, 57, 77, 91, 100, 97, 85, 93, 96, 89, 93, - 41, 38, 93, 114, 110, 85, 103, 100, 102, 95, 100, 111, 68, 25, 110, 118, - 118, 81, 72, 69, 71, 79, 79, 72, 96, 87, 51, 65, 77, 95, 81, 84, - 80, 85, 87, 72, 42, 49, 14, 44, 85, 91, 91, 87, 92, 84, 84, 83, - 61, 42, 28, 75, 96, 83, 77, 75, 73, 73, 72, 68, 76, 46, 14, 59, - 88, 93, 83, 76, 85, 87, 83, 76, 52, 33, 9, 80, 102, 99, 76, 71, - 60, 77, 72, 65, 69, 32, 42, 79, 97, 187, 202, 150, 110, 120, 140, 142, - 154, 159, 167, 170, 166, 170, 162, 155, 148, 115, 107, 122, 118, 107, 79, 21, - 12, 10, 16, 20, 18, 21, 30, 25, 34, 17, 55, 75, 84, 77, 73, 60, - 67, 61, 71, 73, 76, 60, 29, 4, 65, 71, 84, 77, 72, 65, 68, 48, - 45, 12, 85, 175, 216, 216, 208, 150, 108, 95, 83, 89, 73, 71, 85, 85, - 28, 21, 34, 29, 36, 36, 40, 41, 44, 38, 71, 102, 83, 91, 195, 191, - 178, 110, 106, 115, 136, 148, 144, 154, 151, 142, 132, 114, 48, 18, 10, 16, - 17, 16, 29, 71, 87, 72, 67, 65, 59, 68, 64, 65, 59, 69, 81, 102, - 95, 96, 91, 92, 77, 81, 100, 115, 84, 80, 77, 64, 75, 67, 69, 65, - 69, 64, 67, 69, 65, 20, 4, 44, 79, 71, 69, 55, 56, 56, 55, 38, - 37, 25, 17, 13, 83, 84, 65, 60, 61, 52, 49, 46, 36, 16, 4, 22, - 81, 73, 61, 64, 73, 72, 73, 60, 72, 59, 14, 2, 26, 59, 56, 21, - 25, 30, 33, 38, 26, 5, 45, 92, 84, 80, 64, 63, 49, 55, 40, 46, - 30, 14, 56, 69, 71, 59, 52, 49, 48, 44, 56, 64, 57, 46, 49, 63, - 67, 69, 64, 69, 77, 73, 57, 57, 30, 12, 59, 57, 56, 37, 45, 48, - 51, 55, 53, 41, 18, 18, 12, 49, 56, 49, 55, 41, 33, 12, 28, 30, - 16, 6, 2, 51, 67, 64, 55, 59, 55, 67, 48, 56, 48, 41, 42, 42, - 57, 53, 45, 49, 51, 48, 55, 48, 46, 37, 37, 63, 68, 79, 71, 81, - 79, 71, 69, 55, 63, 60, 65, 42, 45, 46, 56, 60, 30, 45, 32, 44, - 26, 5, 53, 84, 85, 61, 42, 28, 84, 87, 88, 79, 83, 71, 81, 85, - 185, 225, 229, 233, 233, 187, 126, 112, 124, 134, 115, 107, 131, 139, 144, 140, - 138, 115, 49, 18, 17, 20, 26, 36, 32, 28, 33, 77, 88, 87, 79, 76, - 85, 85, 63, 72, 79, 146, 178, 158, 116, 103, 84, 34, 30, 30, 44, 48, - 42, 96, 119, 99, 103, 92, 93, 92, 97, 198, 182, 166, 97, 97, 112, 123, - 135, 142, 148, 144, 148, 147, 150, 144, 128, 110, 55, 28, 22, 18, 30, 33, - 36, 38, 36, 40, 42, 38, 84, 115, 114, 107, 107, 92, 93, 77, 71, 76, - 59, 59, 26, 77, 91, 77, 60, 63, 67, 68, 77, 49, 57, 21, 76, 93, - 100, 95, 111, 80, 89, 93, 69, 81, 61, 87, 103, 99, 87, 87, 79, 81, - 80, 85, 87, 87, 34, 17, 99, 96, 93, 87, 95, 97, 88, 84, 85, 77, - 71, 49, 75, 97, 107, 93, 92, 92, 89, 84, 88, 40, 29, 85, 110, 111, - 103, 100, 85, 100, 87, 100, 93, 92, 29, 96, 89, 126, 115, 115, 114, 110, - 111, 107, 102, 85, 77, 52, 92, 103, 96, 103, 92, 91, 89, 87, 83, 61, - 52, 17, 72, 96, 88, 88, 69, 75, 63, 61, 75, 73, 44, 29, 63, 80, - 87, 79, 80, 76, 75, 76, 81, 71, 46, 16, 63, 73, 92, 80, 68, 79, - 75, 88, 87, 52, 36, 0, 80, 77, 88, 88, 97, 92, 88, 95, 73, 73, - 36, 40, 83, 100, 186, 213, 191, 128, 115, 130, 144, 151, 159, 171, 174, 173, - 171, 174, 166, 153, 116, 116, 130, 120, 110, 77, 18, 12, 13, 20, 22, 33, - 33, 25, 29, 29, 17, 64, 76, 81, 72, 55, 56, 52, 64, 52, 57, 65, - 67, 28, 4, 75, 73, 76, 67, 61, 65, 55, 30, 45, 20, 80, 182, 213, - 220, 190, 111, 92, 87, 89, 75, 72, 92, 91, 75, 28, 20, 24, 45, 33, - 34, 32, 41, 33, 34, 75, 97, 92, 87, 199, 205, 191, 110, 97, 114, 122, - 139, 144, 147, 154, 146, 132, 116, 53, 17, 9, 21, 26, 10, 40, 77, 63, - 67, 64, 63, 59, 68, 63, 51, 48, 64, 95, 108, 97, 85, 83, 76, 81, - 77, 87, 91, 91, 84, 59, 75, 87, 92, 92, 99, 93, 92, 75, 63, 29, - 21, 5, 56, 75, 69, 71, 68, 65, 49, 53, 51, 45, 24, 18, 53, 84, - 68, 65, 65, 61, 71, 64, 52, 55, 18, 2, 64, 81, 55, 46, 60, 65, - 56, 59, 65, 52, 53, 20, 2, 45, 49, 33, 20, 32, 18, 29, 40, 18, - 5, 34, 91, 69, 65, 40, 38, 37, 41, 42, 77, 29, 16, 46, 59, 45, - 69, 80, 61, 51, 56, 40, 45, 42, 26, 57, 68, 81, 81, 79, 91, 71, - 73, 37, 68, 34, 13, 56, 52, 55, 42, 30, 28, 32, 38, 32, 53, 25, - 18, 2, 56, 56, 56, 53, 29, 40, 26, 26, 29, 30, 5, 4, 67, 64, - 29, 40, 34, 42, 52, 59, 60, 48, 59, 16, 51, 41, 55, 45, 44, 44, - 33, 28, 41, 57, 14, 69, 77, 69, 69, 72, 64, 55, 64, 68, 67, 63, - 24, 26, 53, 79, 60, 60, 51, 37, 17, 48, 49, 33, 4, 63, 83, 61, - 55, 25, 10, 75, 75, 76, 97, 67, 83, 81, 127, 222, 225, 230, 234, 209, - 143, 116, 120, 132, 130, 107, 124, 146, 151, 147, 142, 132, 85, 25, 17, 16, - 22, 26, 38, 33, 17, 34, 81, 81, 87, 77, 71, 73, 71, 72, 67, 77, - 116, 183, 173, 122, 106, 79, 34, 30, 30, 44, 49, 42, 77, 114, 100, 102, - 97, 93, 102, 104, 202, 194, 178, 92, 99, 112, 131, 139, 150, 147, 157, 148, - 144, 148, 139, 127, 112, 33, 24, 21, 18, 32, 42, 42, 37, 41, 42, 38, - 53, 103, 112, 114, 106, 89, 87, 83, 80, 72, 69, 65, 55, 25, 76, 81, - 84, 77, 73, 68, 60, 61, 48, 55, 17, 84, 92, 111, 81, 79, 79, 76, - 83, 83, 80, 59, 83, 103, 95, 89, 89, 100, 92, 92, 84, 76, 81, 37, - 20, 77, 100, 84, 102, 85, 69, 91, 84, 80, 80, 71, 48, 76, 89, 107, - 89, 106, 95, 85, 93, 84, 44, 26, 85, 106, 103, 96, 96, 95, 84, 83, - 89, 93, 103, 33, 65, 110, 84, 107, 116, 100, 112, 106, 96, 107, 91, 67, - 51, 95, 100, 85, 75, 73, 65, 83, 88, 81, 75, 52, 22, 84, 88, 89, - 92, 68, 59, 60, 67, 71, 60, 40, 16, 72, 85, 75, 85, 81, 76, 83, - 80, 77, 60, 48, 22, 56, 77, 88, 84, 84, 65, 80, 75, 81, 48, 32, - 0, 80, 87, 83, 84, 92, 77, 103, 100, 104, 85, 41, 41, 81, 100, 183, - 205, 189, 130, 114, 127, 140, 144, 155, 171, 177, 178, 178, 170, 166, 148, 118, - 128, 132, 124, 116, 63, 17, 12, 16, 24, 33, 29, 25, 25, 30, 36, 20, - 68, 83, 80, 56, 64, 71, 67, 60, 56, 59, 61, 51, 28, 4, 75, 57, - 80, 72, 73, 65, 51, 32, 42, 14, 85, 178, 209, 216, 167, 102, 92, 83, - 85, 76, 77, 100, 93, 77, 26, 17, 16, 25, 36, 38, 29, 34, 32, 22, - 71, 97, 76, 93, 199, 193, 197, 108, 97, 104, 115, 130, 138, 153, 158, 150, - 134, 110, 49, 20, 8, 13, 26, 12, 40, 77, 80, 61, 53, 45, 48, 41, - 48, 44, 41, 14, 89, 104, 92, 80, 76, 76, 87, 91, 92, 79, 96, 83, - 57, 79, 89, 100, 91, 81, 71, 60, 76, 69, 67, 24, 6, 52, 55, 75, - 55, 49, 44, 44, 46, 56, 71, 26, 16, 68, 84, 46, 56, 41, 63, 68, - 72, 59, 55, 21, 2, 72, 80, 59, 49, 64, 77, 75, 72, 73, 59, 61, - 20, 2, 51, 41, 18, 20, 37, 20, 20, 28, 22, 4, 37, 75, 72, 40, - 57, 60, 38, 41, 46, 42, 45, 12, 40, 61, 48, 69, 51, 36, 44, 36, - 51, 49, 42, 30, 72, 60, 56, 49, 60, 71, 81, 60, 60, 52, 33, 14, - 52, 51, 67, 52, 37, 40, 36, 40, 40, 51, 44, 17, 22, 41, 65, 56, - 37, 34, 52, 26, 37, 22, 20, 5, 6, 28, 63, 59, 33, 33, 30, 29, - 20, 30, 25, 18, 13, 59, 49, 57, 36, 32, 29, 25, 26, 29, 57, 18, - 71, 73, 69, 52, 55, 42, 44, 49, 44, 42, 30, 25, 26, 55, 48, 42, - 37, 26, 16, 29, 30, 38, 40, 2, 25, 85, 55, 56, 13, 0, 110, 104, - 102, 76, 73, 83, 93, 178, 221, 234, 228, 220, 158, 126, 116, 131, 135, 120, - 112, 144, 155, 155, 147, 140, 120, 55, 18, 14, 18, 24, 32, 38, 33, 18, - 71, 91, 84, 77, 71, 76, 80, 69, 65, 65, 69, 111, 189, 181, 154, 104, - 75, 34, 28, 28, 40, 49, 42, 64, 118, 102, 97, 100, 92, 89, 95, 209, - 199, 178, 93, 103, 114, 126, 140, 148, 150, 150, 147, 148, 148, 136, 118, 112, - 30, 20, 18, 32, 38, 44, 42, 46, 41, 42, 37, 52, 106, 107, 110, 89, - 83, 84, 83, 77, 73, 68, 60, 67, 37, 83, 79, 68, 71, 69, 80, 57, - 71, 46, 55, 16, 77, 87, 92, 68, 84, 69, 89, 61, 80, 75, 51, 83, - 103, 89, 93, 91, 92, 99, 88, 88, 93, 75, 36, 18, 81, 93, 88, 102, - 93, 95, 85, 91, 76, 84, 69, 49, 75, 89, 92, 92, 107, 91, 79, 89, - 77, 49, 25, 87, 111, 111, 106, 93, 91, 89, 88, 87, 89, 103, 44, 37, - 108, 116, 119, 112, 108, 106, 104, 104, 115, 97, 75, 51, 89, 104, 83, 81, - 95, 73, 73, 73, 84, 65, 53, 20, 76, 104, 77, 83, 65, 60, 75, 60, - 64, 64, 41, 17, 60, 76, 77, 95, 76, 73, 72, 67, 64, 68, 51, 24, - 57, 85, 88, 89, 71, 75, 73, 79, 77, 49, 36, 4, 87, 76, 75, 93, - 95, 77, 91, 103, 107, 80, 34, 46, 83, 88, 148, 213, 195, 134, 110, 122, - 140, 144, 155, 167, 166, 169, 173, 174, 165, 130, 114, 131, 136, 126, 116, 44, - 14, 10, 20, 25, 33, 26, 25, 29, 32, 29, 25, 68, 81, 67, 65, 57, - 61, 53, 61, 65, 53, 60, 51, 26, 4, 55, 80, 73, 69, 65, 65, 44, - 33, 44, 16, 92, 193, 208, 208, 138, 103, 85, 91, 77, 71, 91, 93, 96, - 77, 25, 17, 21, 20, 38, 42, 38, 33, 36, 26, 63, 97, 92, 97, 201, - 205, 201, 106, 93, 102, 119, 123, 131, 151, 157, 151, 135, 106, 51, 21, 12, - 17, 17, 13, 33, 69, 68, 60, 46, 63, 56, 56, 56, 45, 38, 46, 102, - 106, 96, 81, 93, 83, 89, 89, 77, 75, 91, 75, 60, 80, 95, 92, 80, - 73, 69, 69, 75, 69, 64, 22, 6, 51, 72, 64, 45, 48, 48, 51, 42, - 56, 49, 25, 16, 36, 79, 44, 53, 57, 68, 57, 73, 63, 45, 22, 4, - 34, 80, 49, 60, 49, 60, 55, 53, 51, 48, 56, 17, 5, 44, 32, 24, - 25, 38, 18, 20, 21, 17, 5, 38, 79, 68, 52, 68, 79, 63, 41, 44, - 52, 29, 13, 36, 72, 48, 65, 51, 30, 41, 61, 45, 56, 41, 24, 75, - 67, 64, 61, 79, 75, 60, 32, 59, 55, 33, 14, 52, 46, 67, 73, 63, - 56, 51, 55, 44, 38, 24, 20, 22, 49, 67, 42, 41, 28, 42, 30, 49, - 20, 17, 4, 5, 28, 68, 60, 36, 26, 26, 26, 29, 29, 24, 20, 14, - 56, 30, 49, 46, 37, 32, 21, 24, 38, 33, 8, 52, 72, 63, 46, 40, - 34, 37, 42, 28, 49, 32, 17, 26, 59, 51, 57, 41, 37, 9, 33, 33, - 36, 24, 4, 26, 67, 55, 24, 1, 0, 108, 83, 92, 67, 81, 84, 127, - 210, 222, 225, 225, 181, 120, 120, 128, 135, 131, 108, 126, 151, 158, 154, 146, - 135, 99, 28, 16, 14, 20, 28, 29, 37, 34, 18, 80, 87, 81, 75, 75, - 79, 83, 73, 68, 71, 68, 93, 187, 183, 162, 104, 76, 30, 26, 29, 41, - 48, 44, 55, 112, 103, 99, 100, 95, 97, 91, 210, 199, 169, 99, 99, 111, - 124, 136, 136, 148, 146, 148, 148, 144, 131, 115, 114, 29, 18, 17, 32, 45, - 38, 40, 46, 49, 45, 40, 51, 107, 112, 107, 84, 77, 84, 71, 75, 80, - 68, 61, 63, 26, 80, 75, 85, 91, 85, 84, 57, 64, 45, 56, 20, 75, - 89, 106, 81, 79, 76, 65, 71, 76, 77, 52, 88, 97, 84, 92, 92, 99, - 83, 80, 83, 84, 75, 41, 17, 73, 89, 81, 102, 104, 100, 88, 85, 77, - 79, 68, 45, 76, 83, 85, 87, 102, 107, 103, 102, 77, 41, 26, 77, 108, - 108, 103, 91, 87, 85, 97, 83, 91, 99, 75, 37, 96, 112, 106, 102, 88, - 100, 108, 114, 92, 87, 67, 52, 91, 104, 73, 79, 83, 76, 76, 93, 83, - 60, 55, 22, 69, 85, 88, 81, 68, 57, 55, 73, 72, 59, 41, 22, 75, - 80, 81, 103, 85, 80, 65, 76, 83, 72, 64, 25, 59, 88, 73, 69, 72, - 65, 60, 68, 80, 51, 36, 4, 75, 77, 72, 79, 80, 83, 65, 88, 81, - 61, 48, 45, 68, 99, 136, 212, 212, 154, 107, 111, 138, 144, 157, 167, 173, - 178, 173, 165, 161, 123, 127, 139, 134, 127, 115, 25, 13, 10, 21, 30, 29, - 25, 29, 34, 34, 33, 25, 68, 79, 75, 68, 72, 53, 71, 60, 65, 53, - 59, 56, 28, 4, 71, 55, 68, 97, 65, 64, 60, 34, 41, 13, 84, 181, - 205, 205, 126, 89, 81, 81, 72, 77, 95, 95, 97, 91, 22, 17, 12, 17, - 36, 44, 36, 29, 36, 29, 71, 106, 81, 104, 205, 206, 201, 106, 100, 106, - 108, 123, 135, 147, 158, 153, 138, 119, 46, 20, 17, 14, 18, 16, 33, 65, - 64, 55, 42, 67, 36, 52, 69, 41, 42, 48, 103, 97, 83, 69, 84, 87, - 96, 75, 68, 75, 91, 67, 57, 75, 100, 83, 71, 73, 59, 65, 56, 77, - 79, 24, 6, 49, 64, 72, 41, 46, 51, 38, 45, 40, 46, 25, 14, 53, - 75, 34, 49, 53, 56, 73, 75, 51, 53, 22, 4, 32, 76, 49, 46, 46, - 48, 44, 45, 69, 53, 53, 18, 4, 56, 34, 21, 26, 38, 20, 17, 17, - 13, 5, 55, 81, 64, 73, 83, 85, 69, 51, 49, 49, 29, 16, 34, 76, - 57, 60, 51, 29, 32, 42, 34, 53, 46, 17, 79, 59, 64, 53, 67, 56, - 37, 32, 65, 46, 32, 16, 52, 46, 64, 40, 45, 49, 46, 49, 48, 36, - 25, 18, 6, 40, 67, 60, 26, 24, 41, 25, 38, 41, 32, 5, 4, 22, - 67, 56, 26, 32, 18, 24, 22, 25, 17, 17, 10, 51, 63, 36, 34, 32, - 44, 30, 22, 33, 41, 14, 53, 60, 55, 41, 22, 22, 34, 52, 37, 37, - 18, 22, 34, 53, 63, 32, 18, 24, 18, 33, 18, 42, 25, 6, 34, 57, - 41, 29, 0, 0, 127, 92, 73, 65, 83, 88, 174, 214, 226, 220, 208, 154, - 115, 116, 134, 138, 131, 114, 142, 158, 158, 153, 146, 132, 76, 20, 13, 14, - 24, 29, 36, 34, 34, 21, 87, 85, 84, 71, 80, 85, 77, 69, 72, 76, - 71, 99, 185, 186, 170, 108, 77, 34, 26, 29, 45, 51, 45, 42, 108, 107, - 97, 107, 97, 99, 96, 212, 194, 178, 103, 102, 112, 124, 132, 136, 144, 148, - 148, 148, 135, 130, 112, 111, 30, 17, 16, 33, 48, 46, 42, 40, 48, 45, - 37, 64, 102, 115, 92, 91, 80, 83, 81, 81, 75, 76, 59, 59, 26, 85, - 76, 71, 72, 75, 80, 56, 63, 46, 52, 18, 75, 88, 95, 71, 76, 71, - 76, 64, 63, 73, 53, 81, 95, 99, 93, 97, 81, 84, 87, 85, 83, 72, - 37, 16, 69, 89, 80, 77, 92, 92, 84, 85, 80, 77, 64, 38, 71, 88, - 99, 89, 103, 89, 87, 77, 87, 37, 28, 68, 108, 103, 97, 88, 91, 93, - 85, 83, 89, 95, 69, 30, 72, 110, 115, 91, 102, 107, 104, 92, 96, 81, - 61, 59, 91, 100, 71, 77, 87, 76, 75, 63, 75, 76, 55, 25, 73, 85, - 84, 88, 80, 59, 59, 56, 68, 67, 42, 26, 72, 88, 71, 76, 84, 68, - 79, 81, 80, 72, 56, 26, 59, 73, 83, 68, 67, 64, 73, 72, 69, 53, - 37, 0, 93, 81, 69, 57, 83, 77, 89, 85, 80, 71, 42, 37, 67, 99, - 87, 213, 217, 181, 110, 110, 132, 143, 154, 165, 170, 170, 169, 171, 150, 124, - 132, 143, 135, 127, 115, 21, 13, 12, 20, 33, 30, 29, 36, 41, 34, 30, - 25, 57, 79, 72, 76, 53, 68, 61, 60, 67, 52, 56, 56, 28, 4, 67, - 65, 69, 67, 93, 81, 68, 34, 41, 12, 75, 170, 195, 228, 142, 92, 75, - 83, 71, 89, 96, 96, 102, 76, 22, 17, 10, 22, 30, 40, 38, 29, 33, - 25, 75, 92, 88, 115, 210, 213, 199, 97, 92, 103, 115, 122, 138, 146, 159, - 154, 139, 130, 48, 25, 8, 17, 22, 17, 28, 67, 63, 56, 61, 52, 48, - 52, 44, 53, 33, 40, 92, 95, 92, 83, 88, 69, 65, 79, 72, 83, 85, - 56, 60, 81, 97, 79, 65, 69, 65, 61, 77, 68, 61, 25, 9, 51, 61, - 61, 36, 57, 37, 48, 44, 46, 38, 26, 14, 55, 83, 36, 44, 59, 59, - 63, 65, 44, 55, 24, 4, 34, 75, 55, 57, 55, 48, 55, 73, 42, 46, - 49, 17, 4, 42, 29, 24, 30, 36, 32, 16, 13, 9, 6, 46, 76, 53, - 75, 73, 72, 67, 79, 73, 51, 25, 13, 44, 69, 37, 65, 44, 32, 36, - 44, 45, 56, 42, 18, 69, 68, 77, 55, 57, 52, 44, 29, 28, 42, 29, - 14, 33, 42, 61, 55, 52, 51, 41, 51, 46, 49, 22, 18, 4, 40, 76, - 56, 46, 22, 38, 32, 36, 20, 24, 4, 4, 22, 64, 59, 38, 40, 24, - 22, 22, 21, 22, 34, 10, 40, 44, 17, 26, 25, 20, 28, 26, 28, 41, - 24, 60, 71, 68, 53, 16, 44, 38, 42, 32, 40, 28, 20, 38, 46, 26, - 51, 24, 12, 22, 21, 21, 16, 9, 4, 34, 52, 46, 18, 0, 0, 77, - 104, 73, 76, 84, 114, 199, 221, 214, 217, 170, 128, 115, 131, 135, 138, 120, - 126, 155, 159, 157, 151, 142, 124, 40, 16, 12, 17, 24, 34, 37, 42, 36, - 20, 95, 84, 79, 73, 87, 77, 75, 72, 73, 69, 65, 120, 183, 182, 178, - 106, 73, 33, 28, 29, 44, 48, 44, 40, 107, 106, 102, 108, 103, 96, 93, - 217, 191, 189, 104, 100, 111, 120, 131, 138, 142, 144, 148, 143, 135, 128, 111, - 110, 26, 16, 16, 33, 53, 44, 46, 44, 55, 46, 37, 67, 107, 114, 91, - 83, 88, 91, 81, 81, 84, 72, 57, 57, 26, 77, 81, 75, 73, 59, 63, - 67, 60, 48, 51, 17, 73, 93, 104, 77, 79, 81, 60, 77, 67, 73, 49, - 87, 97, 95, 85, 84, 92, 91, 91, 88, 83, 46, 44, 18, 65, 81, 85, - 81, 83, 85, 80, 79, 84, 76, 68, 34, 83, 87, 95, 92, 95, 96, 91, - 97, 85, 37, 28, 64, 95, 102, 93, 77, 95, 95, 77, 87, 87, 83, 76, - 38, 71, 107, 116, 110, 88, 96, 80, 92, 88, 79, 42, 68, 83, 99, 81, - 83, 67, 61, 67, 59, 65, 76, 55, 29, 49, 75, 93, 65, 56, 65, 71, - 61, 65, 51, 42, 10, 67, 80, 76, 69, 71, 60, 72, 80, 72, 67, 57, - 32, 36, 67, 79, 83, 85, 83, 81, 84, 69, 46, 33, 0, 79, 72, 68, - 69, 72, 88, 87, 84, 59, 87, 48, 51, 42, 96, 80, 218, 221, 213, 111, - 108, 131, 147, 150, 154, 170, 171, 170, 170, 140, 128, 147, 146, 135, 126, 115, - 22, 13, 9, 24, 38, 29, 32, 36, 45, 38, 36, 28, 48, 76, 71, 69, - 68, 71, 71, 65, 63, 60, 56, 60, 26, 5, 63, 57, 53, 67, 103, 71, - 63, 34, 37, 8, 57, 114, 182, 228, 147, 88, 84, 87, 88, 96, 92, 99, - 92, 48, 21, 18, 12, 21, 32, 40, 38, 36, 29, 17, 68, 89, 83, 108, - 210, 204, 202, 102, 95, 106, 119, 128, 138, 146, 158, 155, 148, 135, 49, 24, - 6, 12, 20, 14, 17, 59, 56, 63, 57, 55, 57, 51, 44, 49, 33, 9, - 93, 96, 76, 65, 71, 76, 79, 79, 80, 85, 88, 56, 63, 88, 77, 61, - 84, 61, 57, 63, 64, 68, 60, 28, 9, 41, 65, 69, 42, 40, 44, 42, - 41, 53, 55, 29, 12, 68, 75, 42, 52, 59, 56, 57, 59, 42, 41, 29, - 2, 37, 64, 55, 52, 49, 72, 72, 48, 41, 40, 53, 16, 4, 57, 33, - 21, 18, 17, 34, 13, 13, 9, 6, 38, 71, 64, 67, 65, 81, 63, 59, - 55, 46, 33, 12, 41, 71, 59, 59, 34, 32, 42, 44, 37, 61, 44, 21, - 67, 59, 79, 45, 45, 72, 38, 28, 36, 25, 33, 14, 24, 49, 37, 51, - 75, 63, 46, 45, 55, 45, 25, 17, 28, 40, 76, 44, 28, 33, 36, 22, - 10, 10, 9, 5, 5, 17, 37, 53, 34, 29, 33, 29, 25, 22, 24, 12, - 9, 25, 24, 22, 21, 25, 21, 33, 26, 30, 14, 17, 65, 68, 65, 60, - 24, 45, 26, 25, 48, 20, 28, 22, 44, 29, 17, 18, 10, 21, 5, 6, - 2, 16, 5, 5, 20, 51, 10, 12, 2, 0, 104, 79, 64, 83, 88, 138, - 198, 218, 212, 204, 135, 131, 127, 132, 138, 138, 114, 144, 162, 161, 158, 150, - 140, 116, 32, 16, 13, 18, 24, 30, 26, 37, 36, 18, 88, 80, 80, 81, - 73, 73, 72, 68, 69, 77, 65, 130, 183, 183, 166, 102, 68, 33, 26, 28, - 46, 55, 49, 46, 95, 116, 95, 102, 102, 92, 89, 220, 193, 198, 104, 100, - 111, 122, 130, 140, 144, 146, 146, 131, 132, 130, 115, 115, 25, 14, 13, 36, - 49, 40, 45, 41, 60, 46, 36, 68, 100, 100, 87, 56, 57, 75, 79, 61, - 61, 65, 63, 67, 40, 89, 80, 75, 60, 65, 57, 65, 56, 45, 48, 14, - 73, 81, 95, 67, 77, 80, 72, 79, 79, 69, 40, 81, 97, 106, 102, 102, - 95, 83, 73, 81, 59, 46, 41, 18, 52, 71, 75, 55, 65, 84, 75, 59, - 65, 73, 60, 36, 69, 80, 95, 97, 80, 71, 68, 67, 53, 45, 25, 59, - 103, 106, 100, 96, 87, 85, 84, 87, 80, 84, 83, 42, 56, 102, 112, 104, - 81, 103, 97, 88, 83, 75, 42, 56, 81, 99, 83, 77, 64, 65, 55, 60, - 61, 64, 56, 26, 48, 56, 55, 55, 55, 53, 57, 57, 64, 64, 41, 12, - 64, 80, 81, 71, 71, 68, 61, 68, 59, 59, 56, 34, 42, 60, 84, 83, - 92, 81, 73, 79, 46, 48, 38, 2, 80, 73, 65, 69, 56, 75, 79, 81, - 69, 77, 34, 46, 33, 89, 85, 221, 226, 214, 111, 106, 131, 146, 150, 153, - 163, 170, 167, 158, 128, 140, 146, 146, 139, 132, 118, 18, 13, 10, 21, 33, - 30, 32, 33, 41, 45, 37, 32, 37, 73, 77, 77, 63, 67, 69, 63, 63, - 59, 52, 48, 26, 6, 55, 59, 69, 67, 61, 57, 51, 45, 40, 8, 41, - 83, 139, 136, 95, 85, 73, 63, 79, 77, 83, 79, 45, 22, 20, 17, 14, - 17, 33, 37, 37, 34, 32, 18, 73, 88, 73, 69, 204, 216, 213, 104, 93, - 106, 120, 130, 139, 147, 161, 155, 135, 124, 46, 24, 9, 12, 20, 16, 16, - 42, 59, 55, 57, 55, 56, 53, 45, 53, 30, 29, 96, 91, 67, 73, 89, - 91, 85, 89, 87, 89, 83, 55, 69, 97, 75, 76, 77, 63, 65, 75, 67, - 64, 55, 28, 8, 48, 61, 65, 41, 36, 38, 34, 52, 57, 48, 28, 13, - 44, 71, 40, 33, 37, 38, 40, 38, 42, 49, 32, 5, 37, 36, 76, 69, - 72, 75, 76, 41, 49, 45, 49, 20, 6, 42, 22, 20, 14, 22, 20, 30, - 16, 12, 5, 33, 68, 63, 64, 81, 53, 57, 51, 42, 46, 28, 14, 41, - 68, 44, 38, 42, 67, 46, 63, 53, 48, 38, 20, 59, 57, 56, 57, 59, - 52, 49, 44, 30, 42, 37, 18, 21, 36, 48, 40, 28, 24, 24, 34, 29, - 26, 24, 18, 29, 60, 76, 46, 20, 4, 4, 14, 13, 2, 4, 9, 6, - 9, 24, 29, 26, 18, 20, 16, 16, 17, 21, 18, 17, 25, 25, 38, 25, - 29, 18, 18, 21, 24, 17, 22, 37, 60, 71, 45, 25, 21, 20, 22, 17, - 13, 14, 18, 20, 18, 18, 20, 18, 10, 32, 28, 33, 26, 13, 24, 26, - 34, 34, 28, 16, 10, 77, 79, 57, 80, 91, 147, 201, 212, 213, 151, 134, - 122, 132, 136, 142, 135, 119, 154, 165, 162, 157, 148, 136, 103, 25, 14, 12, - 17, 22, 34, 36, 44, 34, 22, 89, 79, 73, 80, 72, 69, 67, 68, 71, - 67, 69, 140, 178, 178, 163, 104, 65, 33, 28, 29, 46, 52, 49, 41, 83, - 114, 107, 91, 102, 93, 88, 220, 199, 206, 106, 103, 111, 124, 138, 136, 140, - 139, 132, 124, 130, 127, 116, 116, 22, 14, 12, 36, 44, 45, 40, 41, 38, - 56, 56, 61, 71, 73, 67, 63, 67, 61, 63, 65, 85, 76, 64, 57, 28, - 73, 80, 60, 53, 57, 56, 53, 51, 56, 53, 21, 73, 91, 87, 67, 64, - 63, 57, 67, 65, 64, 45, 63, 80, 96, 63, 68, 59, 57, 51, 44, 36, - 32, 45, 40, 44, 45, 44, 55, 40, 42, 41, 41, 42, 40, 34, 30, 51, - 51, 53, 46, 40, 40, 44, 42, 36, 36, 49, 51, 83, 93, 87, 72, 81, - 85, 88, 75, 75, 88, 81, 72, 52, 60, 100, 91, 69, 80, 80, 81, 80, - 68, 46, 52, 75, 76, 61, 60, 61, 68, 68, 59, 56, 57, 53, 52, 45, - 53, 53, 53, 45, 51, 44, 61, 53, 59, 42, 21, 69, 64, 65, 63, 61, - 60, 60, 60, 56, 56, 46, 53, 29, 33, 36, 40, 37, 40, 38, 38, 38, - 44, 37, 2, 28, 77, 72, 34, 49, 65, 69, 61, 56, 69, 61, 51, 38, - 60, 64, 212, 228, 217, 106, 103, 126, 140, 144, 144, 150, 162, 163, 158, 135, - 151, 151, 150, 142, 132, 118, 17, 12, 12, 18, 29, 33, 38, 37, 34, 36, - 40, 38, 30, 36, 53, 63, 57, 57, 55, 57, 59, 59, 52, 53, 28, 6, - 51, 63, 64, 49, 52, 42, 41, 41, 40, 16, 28, 41, 64, 83, 59, 29, - 20, 16, 14, 16, 16, 16, 16, 18, 17, 10, 10, 14, 34, 34, 36, 26, - 32, 20, 67, 75, 91, 69, 185, 214, 210, 102, 95, 110, 123, 134, 139, 148, - 161, 155, 136, 123, 42, 26, 25, 10, 20, 18, 16, 20, 36, 42, 41, 52, - 44, 53, 45, 42, 37, 38, 93, 83, 87, 84, 79, 80, 75, 76, 81, 77, - 63, 53, 57, 79, 87, 85, 77, 81, 75, 67, 42, 38, 37, 26, 9, 38, - 48, 55, 64, 75, 53, 63, 52, 40, 25, 30, 12, 42, 64, 63, 55, 53, - 51, 49, 42, 45, 40, 33, 5, 28, 21, 22, 28, 38, 41, 25, 28, 41, - 21, 25, 18, 6, 44, 22, 28, 26, 26, 20, 18, 18, 10, 10, 33, 29, - 24, 29, 20, 38, 46, 52, 46, 38, 25, 17, 21, 48, 38, 48, 34, 41, - 40, 45, 38, 33, 40, 12, 42, 55, 53, 34, 38, 42, 42, 33, 33, 36, - 32, 25, 30, 30, 28, 22, 24, 24, 22, 29, 22, 21, 20, 17, 2, 55, - 1, 22, 1, 20, 2, 4, 17, 16, 4, 5, 10, 10, 9, 8, 9, 9, - 9, 9, 12, 12, 10, 13, 10, 14, 18, 13, 20, 14, 13, 12, 14, 16, - 17, 14, 28, 41, 22, 37, 17, 21, 60, 65, 60, 29, 51, 48, 18, 17, - 12, 14, 18, 16, 17, 13, 9, 8, 12, 16, 37, 16, 14, 53, 57, 68, - 52, 53, 56, 83, 88, 165, 213, 157, 151, 144, 112, 142, 131, 138, 139, 131, - 131, 161, 165, 161, 155, 147, 132, 87, 20, 14, 13, 20, 26, 36, 36, 37, - 34, 13, 84, 79, 69, 69, 55, 61, 67, 60, 72, 69, 68, 154, 182, 177, - 163, 97, 61, 33, 29, 30, 48, 51, 56, 52, 59, 85, 106, 99, 97, 91, - 87, 218, 212, 214, 107, 102, 108, 123, 124, 124, 127, 126, 131, 134, 132, 131, - 122, 119, 21, 13, 13, 32, 36, 38, 44, 45, 41, 46, 44, 46, 55, 52, - 48, 53, 53, 53, 56, 55, 56, 57, 57, 56, 53, 59, 56, 55, 53, 53, - 55, 55, 51, 51, 45, 22, 67, 91, 60, 53, 49, 49, 52, 49, 48, 49, - 41, 48, 49, 46, 46, 44, 41, 40, 41, 38, 37, 33, 28, 18, 18, 17, - 18, 17, 14, 14, 14, 12, 13, 10, 10, 12, 10, 16, 17, 17, 13, 14, - 21, 32, 28, 30, 28, 41, 61, 60, 71, 80, 69, 65, 71, 73, 72, 71, - 72, 61, 56, 64, 57, 53, 46, 38, 38, 38, 45, 40, 32, 38, 41, 49, - 42, 42, 61, 60, 59, 42, 42, 36, 32, 38, 48, 53, 53, 53, 40, 32, - 34, 44, 48, 46, 41, 18, 34, 37, 32, 38, 37, 38, 37, 40, 40, 40, - 42, 44, 42, 48, 32, 33, 28, 18, 14, 13, 17, 20, 16, 0, 13, 14, - 21, 18, 21, 25, 29, 30, 38, 46, 65, 53, 51, 51, 76, 210, 229, 218, - 106, 100, 107, 118, 134, 143, 153, 150, 155, 151, 136, 153, 151, 148, 140, 128, - 116, 16, 12, 9, 14, 17, 25, 24, 28, 32, 33, 34, 30, 32, 41, 42, - 44, 41, 44, 44, 45, 44, 48, 49, 44, 26, 6, 56, 60, 41, 30, 32, - 28, 22, 33, 33, 17, 14, 16, 25, 20, 17, 16, 14, 13, 13, 17, 18, - 13, 14, 14, 16, 17, 18, 18, 18, 20, 20, 21, 29, 18, 29, 34, 41, - 73, 171, 217, 208, 103, 99, 110, 119, 132, 142, 150, 163, 154, 135, 120, 41, - 29, 8, 14, 14, 17, 16, 20, 20, 20, 18, 18, 18, 21, 20, 18, 30, - 25, 33, 67, 67, 53, 53, 60, 63, 53, 52, 53, 51, 45, 48, 46, 48, - 49, 57, 42, 44, 34, 32, 24, 36, 26, 29, 29, 29, 14, 29, 34, 22, - 30, 22, 21, 37, 28, 29, 28, 32, 29, 26, 25, 22, 22, 21, 36, 28, - 26, 2, 6, 6, 10, 10, 9, 10, 13, 10, 12, 18, 29, 18, 10, 18, - 17, 12, 16, 18, 14, 14, 34, 17, 22, 17, 21, 26, 22, 20, 18, 20, - 25, 22, 21, 21, 24, 21, 22, 22, 24, 22, 24, 22, 25, 24, 24, 20, - 13, 16, 25, 17, 17, 16, 25, 16, 17, 17, 20, 21, 16, 14, 17, 16, - 16, 16, 14, 14, 14, 14, 13, 12, 12, 1, 32, 32, 32, 29, 45, 41, - 41, 41, 46, 48, 49, 49, 59, 63, 67, 71, 81, 107, 127, 148, 162, 170, - 226, 224, 221, 208, 202, 202, 198, 202, 187, 185, 175, 158, 73, 26, 21, 17, - 18, 14, 68, 60, 153, 183, 162, 159, 158, 97, 80, 81, 59, 48, 46, 55, - 85, 110, 143, 161, 153, 115, 75, 42, 13, 8, 6, 87, 80, 83, 99, 107, - 179, 120, 139, 111, 112, 111, 128, 127, 138, 144, 138, 138, 165, 167, 158, 151, - 139, 126, 45, 17, 12, 14, 24, 28, 20, 32, 32, 28, 18, 40, 48, 45, - 46, 46, 46, 48, 49, 73, 63, 51, 136, 174, 175, 162, 97, 55, 32, 28, - 33, 46, 48, 49, 51, 55, 60, 57, 61, 64, 96, 72, 222, 217, 217, 106, - 99, 107, 122, 116, 116, 115, 118, 120, 132, 131, 134, 122, 116, 18, 10, 10, - 20, 18, 21, 22, 22, 18, 21, 26, 29, 34, 44, 44, 46, 49, 49, 48, - 53, 57, 60, 64, 57, 52, 64, 71, 60, 72, 79, 89, 123, 107, 52, 49, - 57, 51, 46, 45, 44, 42, 52, 44, 42, 33, 29, 30, 32, 26, 37, 34, - 36, 34, 40, 30, 36, 32, 61, 81, 108, 110, 106, 115, 102, 107, 97, 111, - 108, 93, 73, 77, 75, 80, 95, 95, 81, 72, 57, 41, 30, 26, 20, 16, - 14, 13, 12, 10, 10, 12, 13, 10, 12, 14, 14, 13, 13, 18, 24, 72, - 77, 83, 88, 93, 89, 61, 61, 40, 96, 95, 107, 81, 41, 38, 55, 33, - 34, 72, 79, 96, 84, 89, 97, 103, 99, 87, 67, 53, 44, 29, 30, 40, - 20, 10, 9, 9, 10, 8, 8, 9, 9, 6, 8, 8, 8, 8, 12, 29, - 34, 57, 72, 67, 68, 59, 33, 29, 0, 57, 91, 79, 60, 81, 60, 67, - 68, 49, 38, 37, 41, 42, 46, 65, 199, 216, 206, 95, 91, 102, 103, 97, - 111, 128, 143, 150, 155, 132, 147, 154, 150, 138, 131, 115, 14, 10, 9, 8, - 8, 8, 8, 8, 8, 8, 13, 12, 8, 9, 10, 21, 22, 25, 12, 13, - 13, 22, 14, 30, 10, 6, 61, 24, 18, 18, 20, 17, 21, 14, 13, 13, - 13, 16, 14, 12, 17, 16, 9, 9, 10, 10, 10, 12, 10, 10, 10, 10, - 12, 13, 18, 26, 30, 33, 30, 13, 61, 80, 79, 71, 171, 204, 193, 106, - 99, 111, 123, 131, 139, 153, 162, 155, 134, 104, 37, 32, 6, 12, 9, 12, - 4, 4, 4, 2, 2, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 4, 4, 4, 5, 6, 6, 8, 8, 10, 10, 13, 13, 13, 17, 18, 18, - 24, 48, 53, 45, 38, 44, 30, 28, 26, 25, 22, 24, 29, 36, 60, 67, - 77, 69, 64, 60, 57, 63, 67, 57, 46, 26, 29, 34, 14, 32, 75, 83, - 59, 51, 57, 32, 22, 16, 17, 13, 14, 12, 18, 29, 25, 21, 25, 26, - 21, 17, 24, 28, 30, 38, 33, 34, 30, 33, 28, 24, 17, 14, 12, 12, - 9, 10, 9, 10, 9, 10, 10, 10, 9, 10, 10, 38, 10, 8, 8, 8, - 6, 5, 5, 5, 4, 4, 2, 2, 2, 2, 1, 1, 0, 18, 1, 0, - 0, 1, 0, 2, 40, 37, 56, 60, 84, 107, 144, 148, 163, 171, 165, 151, - 140, 132, 119, 120, 130, 116, 110, 118, 123, 139, 153, 163, 175, 185, 182, 179, - 177, 178, 174, 173, 166, 159, 146, 147, 138, 20, 14, 12, 67, 33, 130, 189, - 195, 197, 194, 193, 198, 190, 187, 195, 199, 189, 195, 195, 204, 201, 189, 197, - 194, 136, 55, 48, 12, 9, 112, 114, 122, 116, 165, 159, 161, 157, 127, 146, - 103, 103, 108, 111, 111, 130, 138, 163, 163, 161, 147, 136, 122, 42, 16, 13, - 22, 26, 38, 37, 45, 32, 38, 40, 42, 55, 59, 61, 68, 73, 79, 71, - 59, 76, 56, 128, 171, 174, 123, 95, 52, 32, 28, 42, 48, 46, 42, 45, - 53, 59, 63, 69, 84, 88, 88, 220, 218, 218, 106, 99, 107, 115, 112, 122, - 128, 131, 131, 130, 132, 139, 124, 123, 22, 13, 10, 21, 32, 42, 42, 49, - 64, 153, 162, 177, 183, 183, 178, 189, 197, 202, 197, 197, 193, 190, 194, 195, - 194, 187, 189, 186, 183, 179, 185, 179, 183, 127, 99, 57, 67, 72, 102, 143, - 169, 182, 181, 169, 162, 151, 153, 154, 143, 134, 116, 104, 114, 111, 106, 114, - 118, 93, 132, 159, 178, 186, 193, 187, 179, 178, 174, 142, 114, 87, 99, 99, - 88, 103, 97, 107, 93, 108, 93, 89, 77, 52, 36, 21, 77, 96, 92, 85, - 85, 89, 93, 100, 89, 88, 80, 83, 85, 79, 76, 92, 92, 92, 92, 88, - 80, 65, 33, 100, 114, 87, 85, 114, 108, 104, 95, 84, 110, 138, 151, 159, - 151, 155, 155, 151, 143, 128, 104, 85, 79, 51, 44, 17, 33, 95, 104, 80, - 83, 69, 95, 81, 83, 76, 73, 65, 76, 91, 75, 71, 65, 75, 60, 63, - 71, 55, 32, 1, 71, 89, 96, 100, 72, 93, 89, 75, 81, 67, 51, 56, - 75, 75, 64, 218, 229, 221, 106, 102, 112, 110, 111, 110, 114, 112, 119, 118, - 136, 154, 155, 150, 136, 127, 110, 16, 12, 10, 18, 22, 22, 28, 18, 18, - 16, 30, 9, 12, 33, 76, 72, 65, 65, 65, 40, 22, 21, 16, 20, 20, - 18, 40, 59, 64, 65, 69, 79, 72, 65, 56, 64, 75, 84, 72, 65, 53, - 60, 51, 56, 29, 29, 25, 21, 22, 29, 37, 36, 36, 41, 51, 53, 48, - 51, 34, 14, 73, 73, 81, 77, 183, 214, 179, 104, 100, 110, 124, 132, 142, - 151, 165, 157, 157, 123, 44, 33, 6, 6, 17, 17, 32, 65, 71, 72, 72, - 71, 80, 76, 73, 71, 38, 24, 67, 84, 96, 88, 85, 89, 97, 93, 87, - 80, 84, 84, 97, 116, 104, 104, 104, 87, 79, 83, 96, 163, 174, 186, 170, - 146, 103, 67, 57, 57, 64, 76, 116, 136, 157, 143, 146, 140, 132, 140, 119, - 118, 111, 103, 69, 44, 36, 20, 10, 71, 85, 108, 111, 85, 89, 65, 59, - 64, 65, 55, 52, 72, 123, 136, 147, 148, 147, 151, 153, 144, 151, 161, 175, - 182, 181, 165, 150, 100, 81, 41, 41, 34, 33, 21, 9, 26, 65, 79, 57, - 65, 64, 55, 51, 41, 24, 9, 28, 71, 83, 71, 69, 85, 84, 68, 99, - 99, 99, 69, 76, 111, 119, 150, 150, 146, 154, 142, 134, 124, 77, 45, 42, - 65, 118, 155, 167, 182, 193, 193, 193, 197, 199, 190, 175, 187, 174, 159, 157, - 159, 148, 143, 144, 146, 142, 143, 139, 153, 150, 154, 179, 179, 163, 150, 161, - 147, 139, 132, 147, 134, 110, 115, 96, 48, 166, 212, 202, 218, 178, 218, 174, - 214, 204, 225, 206, 210, 195, 205, 201, 201, 195, 201, 198, 146, 64, 67, 61, - 61, 126, 136, 115, 135, 194, 195, 229, 189, 116, 104, 108, 123, 128, 135, 123, - 131, 147, 166, 165, 150, 142, 136, 122, 40, 17, 13, 38, 38, 53, 60, 63, - 65, 68, 85, 91, 99, 95, 103, 103, 106, 104, 106, 87, 76, 49, 79, 135, - 169, 110, 79, 38, 34, 33, 46, 63, 63, 61, 55, 56, 92, 106, 103, 103, - 91, 87, 225, 220, 218, 106, 99, 108, 118, 130, 135, 134, 135, 134, 134, 130, - 136, 124, 123, 22, 10, 10, 26, 45, 55, 122, 69, 128, 165, 185, 190, 190, - 193, 198, 204, 209, 210, 214, 222, 225, 225, 229, 228, 229, 226, 233, 224, 232, - 236, 234, 228, 222, 224, 216, 218, 217, 209, 209, 212, 208, 210, 202, 201, 190, - 186, 183, 183, 177, 167, 157, 142, 139, 97, 99, 127, 153, 171, 187, 198, 208, - 209, 206, 209, 206, 205, 202, 197, 190, 171, 122, 103, 89, 79, 81, 85, 91, - 97, 97, 97, 95, 71, 48, 22, 95, 88, 102, 95, 97, 96, 83, 81, 84, - 91, 91, 65, 63, 102, 107, 114, 114, 108, 88, 81, 93, 64, 36, 108, 108, - 108, 88, 119, 87, 96, 111, 130, 173, 202, 213, 210, 208, 206, 199, 194, 189, - 178, 174, 157, 144, 81, 44, 22, 93, 93, 76, 76, 84, 89, 93, 77, 76, - 87, 93, 83, 61, 81, 79, 72, 71, 68, 68, 69, 69, 63, 36, 0, 57, - 84, 85, 80, 65, 61, 76, 73, 60, 69, 76, 32, 65, 89, 68, 226, 234, - 221, 104, 96, 107, 123, 130, 134, 138, 138, 135, 136, 140, 155, 153, 144, 136, - 130, 116, 13, 12, 13, 18, 12, 20, 32, 29, 26, 17, 12, 10, 17, 61, - 84, 89, 84, 89, 81, 73, 68, 76, 73, 61, 65, 75, 79, 76, 79, 75, - 81, 88, 91, 68, 76, 76, 95, 115, 108, 100, 119, 120, 120, 75, 63, 59, - 51, 46, 45, 51, 46, 37, 24, 29, 30, 22, 18, 17, 30, 18, 73, 83, - 80, 75, 212, 217, 186, 100, 97, 107, 123, 134, 140, 151, 163, 157, 140, 128, - 45, 45, 49, 51, 52, 77, 72, 80, 83, 83, 79, 87, 64, 68, 67, 67, - 71, 30, 91, 84, 87, 99, 91, 126, 148, 163, 167, 170, 170, 174, 182, 189, - 189, 182, 183, 181, 181, 181, 183, 190, 190, 191, 189, 181, 171, 170, 144, 138, - 154, 139, 154, 177, 182, 195, 191, 185, 183, 183, 170, 171, 177, 173, 150, 69, - 32, 30, 14, 83, 102, 87, 107, 112, 93, 108, 104, 81, 102, 120, 159, 158, - 179, 183, 191, 185, 186, 186, 190, 194, 193, 197, 205, 205, 206, 204, 202, 195, - 175, 154, 102, 60, 49, 22, 6, 68, 77, 60, 71, 77, 61, 71, 60, 51, - 18, 14, 80, 167, 178, 181, 175, 181, 189, 198, 206, 201, 195, 198, 194, 195, - 194, 195, 177, 191, 193, 185, 148, 170, 136, 61, 46, 95, 150, 177, 185, 191, - 195, 199, 204, 201, 204, 201, 174, 202, 197, 155, 104, 95, 146, 167, 167, 163, - 150, 157, 153, 142, 120, 119, 106, 114, 112, 104, 147, 150, 95, 148, 157, 118, - 110, 106, 53, 34, 91, 155, 187, 143, 124, 97, 102, 108, 108, 136, 178, 183, - 183, 191, 171, 175, 187, 191, 111, 76, 65, 87, 102, 114, 108, 108, 116, 140, - 177, 202, 237, 208, 122, 103, 120, 130, 136, 147, 153, 158, 162, 161, 153, 151, - 142, 138, 122, 36, 16, 14, 34, 49, 53, 75, 67, 79, 89, 83, 87, 92, - 97, 100, 88, 104, 95, 96, 92, 76, 65, 68, 80, 151, 96, 63, 42, 36, - 30, 57, 56, 55, 52, 42, 84, 108, 104, 96, 93, 87, 85, 232, 224, 220, - 100, 97, 114, 122, 135, 132, 138, 140, 138, 132, 130, 134, 123, 120, 22, 10, - 12, 25, 40, 110, 49, 64, 76, 111, 169, 178, 185, 194, 197, 201, 205, 210, - 216, 218, 218, 225, 225, 228, 229, 229, 232, 226, 234, 233, 233, 228, 221, 213, - 208, 210, 210, 216, 217, 212, 208, 209, 202, 187, 189, 175, 166, 178, 167, 167, - 122, 87, 122, 139, 163, 183, 198, 199, 195, 190, 202, 209, 208, 210, 210, 210, - 206, 205, 201, 195, 190, 171, 147, 104, 81, 75, 81, 80, 79, 84, 81, 85, - 53, 29, 97, 91, 100, 91, 83, 72, 68, 69, 69, 68, 71, 52, 76, 114, - 95, 79, 111, 111, 102, 73, 71, 61, 37, 114, 112, 120, 111, 120, 126, 115, - 142, 201, 218, 226, 224, 213, 204, 194, 181, 155, 140, 116, 93, 73, 64, 132, - 55, 29, 100, 88, 92, 100, 95, 91, 83, 73, 85, 77, 65, 52, 84, 85, - 81, 59, 60, 73, 67, 59, 73, 46, 33, 0, 65, 61, 68, 69, 76, 79, - 85, 95, 88, 76, 79, 40, 63, 84, 61, 233, 236, 232, 107, 97, 110, 130, - 138, 144, 151, 151, 151, 154, 151, 148, 144, 142, 140, 132, 122, 17, 12, 14, - 13, 21, 12, 8, 18, 17, 21, 9, 12, 17, 65, 88, 91, 87, 83, 88, - 77, 81, 85, 100, 87, 67, 65, 79, 123, 158, 165, 177, 186, 197, 198, 193, - 198, 206, 212, 209, 212, 221, 221, 212, 206, 210, 189, 195, 195, 199, 190, 157, - 67, 28, 20, 24, 18, 18, 12, 32, 21, 65, 73, 83, 89, 218, 224, 213, - 96, 93, 107, 122, 132, 142, 151, 162, 162, 155, 169, 87, 76, 71, 71, 72, - 73, 73, 91, 92, 99, 77, 79, 75, 92, 76, 71, 67, 69, 59, 87, 79, - 68, 100, 173, 186, 187, 170, 183, 194, 189, 195, 185, 183, 198, 183, 197, 198, - 190, 185, 183, 177, 178, 181, 185, 193, 181, 171, 131, 138, 178, 193, 193, 190, - 185, 197, 183, 169, 134, 138, 122, 112, 122, 107, 81, 26, 26, 17, 67, 73, - 93, 77, 81, 100, 80, 76, 103, 146, 153, 174, 178, 179, 177, 170, 178, 182, - 189, 183, 181, 177, 171, 174, 179, 183, 194, 199, 201, 201, 198, 187, 123, 53, - 30, 8, 79, 75, 61, 56, 51, 46, 52, 71, 61, 29, 22, 115, 177, 181, - 173, 189, 202, 201, 201, 204, 204, 205, 198, 189, 183, 186, 179, 174, 166, 151, - 158, 148, 146, 122, 68, 53, 118, 154, 175, 183, 189, 195, 205, 205, 165, 165, - 147, 136, 139, 134, 112, 64, 68, 89, 162, 167, 151, 142, 130, 131, 127, 127, - 123, 119, 124, 126, 132, 132, 140, 142, 142, 144, 106, 96, 97, 111, 46, 57, - 72, 81, 77, 75, 72, 72, 73, 77, 76, 79, 79, 83, 87, 89, 91, 84, - 80, 75, 60, 88, 22, 18, 13, 100, 102, 119, 130, 193, 208, 199, 190, 139, - 107, 115, 134, 155, 158, 158, 162, 163, 159, 153, 147, 140, 138, 124, 34, 16, - 14, 37, 55, 55, 73, 75, 85, 65, 100, 104, 89, 87, 93, 85, 96, 96, - 96, 96, 79, 64, 37, 71, 147, 96, 63, 38, 33, 33, 57, 60, 52, 52, - 49, 95, 108, 102, 92, 89, 85, 85, 237, 228, 222, 108, 97, 114, 124, 132, - 134, 142, 139, 134, 127, 127, 131, 124, 119, 20, 10, 12, 22, 44, 60, 59, - 67, 119, 143, 174, 173, 130, 161, 138, 143, 142, 138, 134, 134, 132, 130, 126, - 126, 122, 120, 119, 127, 122, 116, 116, 118, 110, 107, 110, 110, 163, 178, 210, - 183, 174, 170, 154, 131, 108, 102, 102, 103, 107, 102, 99, 115, 118, 170, 197, - 198, 199, 205, 183, 167, 174, 171, 159, 148, 139, 143, 142, 144, 146, 167, 182, - 182, 186, 114, 92, 64, 79, 72, 49, 61, 71, 83, 60, 26, 73, 92, 104, - 83, 67, 76, 81, 69, 64, 59, 77, 48, 71, 116, 111, 84, 88, 102, 79, - 79, 76, 60, 48, 119, 123, 103, 115, 122, 127, 135, 205, 228, 233, 222, 213, - 185, 135, 108, 93, 87, 80, 76, 64, 42, 44, 63, 48, 17, 67, 85, 83, - 81, 71, 63, 56, 63, 61, 83, 67, 40, 77, 79, 73, 60, 72, 67, 65, - 63, 76, 49, 29, 0, 64, 72, 76, 72, 73, 65, 65, 75, 79, 81, 55, - 21, 69, 97, 49, 230, 237, 233, 110, 100, 108, 135, 142, 148, 148, 157, 157, - 161, 157, 158, 154, 144, 138, 134, 122, 13, 8, 9, 13, 26, 14, 5, 18, - 6, 44, 9, 10, 12, 57, 87, 85, 85, 89, 88, 80, 85, 76, 75, 60, - 42, 84, 92, 84, 151, 178, 189, 198, 201, 205, 209, 212, 214, 218, 221, 226, - 226, 225, 224, 222, 220, 222, 221, 218, 217, 212, 185, 79, 30, 26, 17, 34, - 13, 18, 32, 16, 45, 63, 80, 72, 226, 230, 224, 100, 93, 107, 122, 132, - 142, 151, 162, 165, 161, 136, 170, 119, 124, 179, 195, 198, 199, 198, 199, 198, - 195, 193, 197, 191, 185, 175, 110, 68, 72, 71, 48, 91, 103, 110, 183, 197, - 178, 194, 195, 198, 169, 157, 132, 144, 163, 185, 182, 182, 165, 167, 147, 158, - 155, 151, 150, 146, 130, 114, 163, 193, 195, 195, 189, 185, 155, 138, 111, 104, - 106, 100, 102, 99, 110, 37, 28, 25, 16, 77, 77, 95, 104, 73, 83, 96, - 72, 106, 143, 162, 183, 187, 169, 157, 134, 132, 132, 139, 134, 134, 126, 123, - 120, 127, 128, 144, 153, 154, 165, 175, 187, 169, 81, 42, 12, 49, 80, 61, - 51, 53, 51, 59, 60, 65, 28, 18, 107, 158, 183, 195, 195, 229, 193, 197, - 197, 197, 190, 179, 175, 187, 178, 171, 167, 103, 88, 84, 79, 87, 77, 71, - 63, 114, 161, 175, 187, 202, 171, 162, 143, 120, 126, 118, 115, 119, 110, 114, - 63, 48, 77, 99, 162, 161, 142, 155, 131, 127, 114, 131, 128, 132, 132, 131, - 131, 138, 139, 142, 132, 100, 88, 91, 108, 55, 60, 64, 67, 64, 71, 79, - 81, 77, 71, 76, 68, 80, 73, 76, 75, 77, 72, 69, 88, 77, 16, 12, - 12, 46, 84, 93, 110, 118, 191, 209, 232, 190, 119, 104, 126, 140, 154, 162, - 158, 159, 159, 161, 154, 150, 143, 136, 118, 29, 14, 14, 34, 51, 63, 71, - 76, 88, 69, 100, 100, 84, 92, 83, 85, 91, 107, 104, 87, 73, 67, 40, - 68, 136, 97, 85, 61, 40, 34, 53, 49, 52, 40, 40, 103, 112, 96, 99, - 92, 84, 80, 237, 228, 221, 107, 99, 112, 124, 130, 136, 136, 130, 127, 126, - 127, 126, 122, 115, 20, 10, 9, 22, 38, 44, 61, 42, 77, 110, 134, 108, - 142, 118, 107, 107, 110, 110, 99, 107, 111, 108, 100, 100, 100, 103, 100, 100, - 97, 100, 97, 97, 97, 96, 96, 97, 100, 103, 103, 99, 96, 95, 95, 95, - 96, 97, 100, 103, 106, 110, 112, 118, 118, 187, 195, 195, 198, 182, 150, 124, - 111, 106, 107, 104, 102, 106, 108, 108, 111, 114, 131, 132, 159, 155, 93, 64, - 87, 60, 73, 75, 69, 76, 53, 28, 89, 102, 97, 83, 84, 77, 102, 71, - 60, 56, 72, 45, 79, 116, 106, 84, 72, 75, 68, 75, 73, 60, 41, 110, - 120, 111, 135, 128, 136, 202, 226, 237, 234, 214, 155, 87, 76, 68, 68, 68, - 64, 55, 49, 36, 29, 45, 49, 28, 68, 81, 85, 67, 61, 59, 57, 56, - 60, 72, 59, 46, 80, 84, 63, 63, 79, 77, 60, 71, 75, 63, 28, 1, - 57, 81, 76, 64, 83, 95, 85, 83, 76, 71, 56, 22, 64, 71, 49, 236, - 240, 234, 110, 102, 110, 135, 144, 153, 153, 161, 166, 167, 165, 159, 154, 146, - 139, 131, 118, 10, 10, 13, 10, 20, 5, 8, 1, 18, 26, 13, 9, 17, - 53, 84, 83, 73, 81, 92, 77, 84, 64, 60, 53, 42, 83, 85, 107, 99, - 126, 151, 185, 199, 198, 206, 209, 217, 217, 224, 208, 230, 228, 225, 210, 224, - 228, 222, 197, 228, 228, 186, 77, 28, 14, 32, 29, 13, 21, 28, 24, 33, - 61, 79, 71, 229, 234, 228, 102, 93, 106, 119, 131, 144, 150, 162, 167, 167, - 159, 174, 181, 186, 191, 198, 198, 198, 198, 197, 194, 194, 190, 191, 187, 183, - 181, 177, 167, 103, 80, 76, 75, 59, 72, 99, 122, 108, 104, 110, 95, 93, - 91, 87, 96, 95, 103, 103, 103, 102, 103, 100, 99, 103, 108, 107, 106, 130, - 119, 161, 195, 193, 185, 186, 136, 114, 107, 106, 104, 111, 110, 111, 116, 87, - 29, 22, 16, 9, 75, 80, 89, 93, 93, 77, 103, 108, 116, 165, 163, 151, - 163, 153, 111, 93, 91, 92, 95, 96, 96, 95, 95, 99, 102, 103, 107, 110, - 115, 119, 124, 134, 171, 123, 57, 13, 57, 77, 60, 60, 57, 53, 49, 46, - 65, 29, 20, 40, 83, 143, 159, 155, 146, 135, 114, 106, 99, 85, 79, 84, - 80, 81, 79, 72, 69, 71, 65, 65, 65, 61, 76, 68, 118, 165, 175, 175, - 167, 128, 123, 102, 107, 119, 120, 128, 119, 124, 108, 61, 61, 56, 60, 96, - 185, 161, 153, 144, 138, 135, 132, 134, 135, 132, 131, 135, 135, 130, 118, 134, - 93, 33, 84, 84, 85, 89, 92, 53, 63, 97, 124, 110, 111, 100, 97, 88, - 89, 87, 81, 95, 79, 80, 93, 84, 25, 10, 9, 16, 21, 72, 87, 100, - 104, 185, 212, 238, 179, 123, 108, 126, 148, 158, 162, 162, 165, 169, 162, 155, - 150, 143, 134, 120, 32, 14, 17, 36, 48, 56, 60, 71, 80, 63, 91, 96, - 80, 102, 83, 76, 91, 76, 79, 77, 69, 67, 46, 77, 130, 128, 99, 76, - 60, 52, 53, 51, 48, 38, 68, 102, 106, 100, 95, 89, 80, 77, 241, 232, - 230, 102, 99, 111, 122, 130, 136, 128, 127, 126, 135, 134, 132, 127, 120, 20, - 9, 9, 22, 34, 44, 72, 63, 42, 72, 107, 111, 115, 122, 108, 110, 96, - 107, 112, 107, 104, 102, 106, 107, 108, 108, 108, 107, 108, 110, 110, 111, 115, - 118, 114, 111, 99, 97, 96, 97, 97, 100, 97, 102, 110, 112, 116, 119, 122, - 122, 119, 122, 112, 142, 201, 177, 151, 131, 104, 119, 119, 118, 116, 116, 118, - 118, 118, 116, 114, 112, 107, 108, 114, 135, 102, 67, 77, 61, 65, 68, 71, - 76, 56, 29, 88, 102, 99, 96, 95, 73, 99, 73, 59, 69, 72, 42, 72, - 107, 102, 88, 85, 83, 79, 75, 71, 60, 45, 118, 126, 139, 118, 130, 190, - 225, 238, 238, 226, 159, 103, 71, 56, 44, 38, 34, 40, 36, 36, 25, 29, - 33, 52, 28, 42, 91, 87, 61, 61, 61, 64, 61, 56, 68, 64, 44, 76, - 80, 60, 75, 79, 63, 59, 71, 69, 73, 32, 0, 68, 76, 81, 71, 65, - 61, 69, 76, 83, 65, 49, 32, 57, 87, 51, 228, 238, 237, 108, 97, 110, - 134, 147, 154, 161, 165, 175, 175, 173, 162, 158, 148, 142, 130, 120, 10, 8, - 10, 13, 22, 16, 8, 10, 30, 37, 14, 9, 16, 55, 79, 83, 83, 88, - 76, 81, 79, 64, 56, 65, 36, 72, 96, 77, 108, 110, 115, 120, 134, 142, - 135, 127, 126, 128, 131, 131, 153, 144, 139, 157, 167, 139, 132, 147, 165, 126, - 106, 75, 24, 21, 30, 37, 16, 18, 22, 34, 17, 59, 69, 68, 233, 234, - 232, 106, 95, 107, 120, 131, 143, 151, 163, 170, 169, 165, 161, 131, 175, 185, - 191, 199, 198, 199, 197, 195, 195, 194, 193, 191, 190, 185, 181, 170, 166, 150, - 144, 79, 72, 72, 59, 63, 72, 87, 75, 85, 83, 85, 84, 89, 89, 96, - 95, 96, 97, 99, 100, 103, 103, 106, 110, 112, 131, 122, 151, 186, 178, 181, - 120, 108, 112, 108, 119, 118, 120, 116, 120, 120, 76, 20, 18, 21, 12, 71, - 80, 87, 87, 97, 95, 79, 97, 132, 139, 148, 127, 119, 95, 85, 93, 102, - 99, 99, 102, 100, 104, 106, 107, 106, 108, 108, 108, 111, 111, 112, 114, 124, - 147, 67, 17, 51, 68, 52, 59, 59, 61, 55, 51, 53, 44, 26, 33, 36, - 61, 69, 73, 68, 77, 79, 68, 69, 67, 69, 67, 73, 75, 72, 69, 72, - 79, 106, 110, 112, 112, 81, 76, 122, 193, 182, 142, 110, 107, 119, 122, 128, - 131, 134, 132, 132, 134, 96, 48, 14, 48, 65, 53, 80, 178, 162, 148, 148, - 148, 143, 146, 146, 150, 148, 150, 150, 147, 136, 110, 100, 88, 89, 76, 73, - 76, 92, 81, 60, 95, 182, 183, 132, 132, 115, 118, 118, 110, 123, 123, 126, - 115, 112, 37, 16, 10, 20, 25, 40, 65, 87, 84, 110, 191, 214, 238, 161, - 128, 108, 127, 150, 157, 161, 166, 166, 170, 166, 162, 147, 142, 132, 122, 32, - 16, 16, 40, 44, 56, 71, 64, 79, 68, 97, 97, 75, 96, 87, 77, 75, - 111, 76, 77, 67, 65, 37, 65, 126, 123, 92, 96, 80, 67, 69, 48, 41, - 33, 71, 106, 99, 102, 87, 104, 106, 81, 238, 232, 233, 107, 95, 112, 123, - 132, 127, 136, 140, 142, 147, 146, 139, 128, 124, 20, 9, 9, 24, 37, 45, - 57, 49, 69, 40, 57, 108, 80, 89, 96, 107, 126, 135, 115, 118, 119, 139, - 119, 123, 126, 135, 123, 123, 124, 138, 128, 130, 139, 139, 134, 132, 124, 116, - 114, 114, 115, 116, 116, 120, 124, 131, 134, 138, 138, 139, 128, 124, 100, 116, - 132, 124, 102, 124, 124, 143, 140, 128, 127, 128, 127, 127, 128, 128, 126, 124, - 120, 119, 115, 111, 115, 71, 63, 73, 60, 65, 71, 71, 57, 34, 83, 95, - 95, 93, 95, 80, 103, 84, 57, 65, 60, 38, 67, 107, 103, 75, 84, 65, - 89, 88, 88, 79, 77, 119, 148, 142, 142, 178, 216, 237, 242, 234, 209, 119, - 77, 51, 29, 26, 32, 26, 25, 28, 32, 30, 32, 30, 93, 30, 36, 89, - 81, 61, 61, 65, 65, 64, 61, 61, 61, 42, 72, 83, 63, 76, 68, 59, - 59, 60, 73, 52, 30, 0, 67, 77, 65, 63, 63, 67, 67, 76, 73, 61, - 40, 40, 48, 83, 76, 238, 242, 238, 115, 97, 108, 132, 143, 154, 161, 167, - 175, 174, 173, 171, 161, 144, 140, 132, 122, 10, 10, 9, 13, 21, 12, 8, - 10, 32, 24, 4, 9, 14, 44, 65, 83, 83, 79, 84, 89, 63, 51, 45, - 44, 37, 83, 84, 76, 111, 108, 92, 100, 107, 108, 110, 116, 114, 108, 114, - 120, 118, 122, 124, 126, 124, 127, 115, 119, 112, 112, 91, 48, 16, 12, 34, - 28, 16, 20, 18, 30, 9, 53, 81, 71, 233, 240, 233, 107, 97, 110, 124, - 131, 143, 151, 163, 169, 171, 169, 162, 163, 144, 139, 138, 134, 132, 128, 127, - 124, 124, 123, 122, 120, 116, 114, 112, 104, 112, 110, 110, 89, 95, 72, 93, - 87, 92, 85, 88, 89, 91, 93, 93, 95, 99, 102, 102, 103, 104, 107, 110, - 110, 112, 114, 119, 120, 115, 122, 119, 163, 194, 123, 115, 120, 124, 128, 130, - 130, 127, 123, 126, 122, 65, 18, 18, 17, 8, 64, 79, 84, 89, 83, 84, - 81, 87, 81, 84, 79, 85, 87, 73, 68, 61, 68, 85, 85, 108, 108, 110, - 114, 116, 116, 118, 118, 120, 120, 122, 120, 119, 116, 161, 85, 30, 33, 53, - 73, 69, 57, 46, 48, 53, 42, 59, 28, 18, 53, 49, 65, 69, 79, 80, - 81, 81, 89, 88, 92, 95, 99, 102, 103, 106, 104, 108, 118, 122, 124, 122, - 91, 79, 115, 163, 155, 126, 106, 128, 134, 140, 138, 139, 138, 138, 139, 127, - 79, 14, 33, 44, 49, 51, 61, 103, 163, 162, 140, 131, 154, 154, 155, 155, - 159, 159, 161, 159, 155, 142, 122, 95, 40, 79, 81, 75, 73, 73, 53, 96, - 191, 179, 162, 161, 132, 126, 128, 134, 122, 128, 144, 124, 104, 38, 14, 8, - 22, 26, 8, 63, 80, 79, 100, 202, 220, 229, 162, 116, 108, 127, 147, 158, - 162, 165, 165, 170, 166, 162, 150, 139, 136, 124, 33, 14, 20, 40, 55, 61, - 67, 71, 73, 64, 92, 89, 76, 85, 88, 84, 75, 69, 75, 71, 67, 57, - 33, 63, 122, 112, 84, 87, 84, 63, 111, 75, 40, 32, 84, 104, 95, 95, - 85, 100, 89, 79, 240, 232, 234, 107, 95, 110, 123, 135, 138, 150, 154, 159, - 161, 154, 142, 131, 126, 20, 9, 10, 18, 30, 42, 41, 57, 85, 61, 41, - 53, 96, 96, 92, 167, 179, 161, 115, 134, 159, 126, 128, 138, 148, 134, 132, - 136, 147, 134, 138, 144, 138, 143, 144, 143, 140, 136, 134, 134, 132, 138, 139, - 140, 143, 146, 150, 150, 150, 150, 144, 127, 132, 99, 97, 132, 130, 102, 72, - 65, 79, 103, 119, 154, 131, 134, 153, 135, 135, 134, 131, 130, 126, 115, 131, - 89, 52, 69, 71, 68, 60, 79, 60, 33, 41, 91, 96, 108, 96, 79, 102, - 83, 52, 68, 56, 40, 93, 96, 103, 88, 97, 91, 107, 126, 144, 151, 161, - 190, 206, 212, 217, 221, 236, 242, 244, 233, 169, 92, 45, 52, 37, 46, 41, - 46, 41, 37, 36, 37, 37, 40, 40, 42, 29, 69, 77, 65, 68, 68, 67, - 73, 65, 65, 61, 40, 67, 72, 61, 75, 67, 61, 63, 65, 75, 57, 28, - 1, 60, 79, 73, 75, 72, 79, 76, 73, 77, 55, 25, 18, 49, 76, 53, - 237, 244, 241, 112, 99, 108, 135, 146, 151, 161, 166, 171, 173, 173, 171, 162, - 144, 136, 134, 122, 10, 8, 14, 9, 14, 8, 9, 2, 24, 10, 13, 6, - 14, 40, 61, 79, 89, 83, 79, 67, 63, 52, 52, 48, 32, 83, 83, 88, - 76, 80, 73, 76, 124, 130, 103, 116, 122, 128, 131, 130, 122, 123, 124, 126, - 122, 118, 120, 118, 116, 104, 87, 33, 17, 16, 28, 34, 16, 21, 22, 34, - 9, 56, 73, 75, 228, 238, 237, 108, 99, 111, 124, 134, 143, 153, 165, 169, - 170, 169, 155, 147, 116, 91, 85, 106, 100, 114, 112, 112, 108, 106, 102, 99, - 91, 88, 88, 88, 81, 80, 73, 67, 61, 57, 53, 56, 64, 53, 63, 170, - 99, 100, 97, 104, 103, 108, 111, 111, 112, 118, 122, 122, 123, 124, 126, 128, - 128, 130, 120, 122, 119, 118, 126, 135, 139, 138, 138, 135, 134, 132, 128, 110, - 41, 21, 13, 17, 12, 52, 79, 76, 84, 88, 88, 91, 79, 75, 65, 57, - 45, 41, 37, 29, 36, 36, 51, 65, 80, 93, 112, 110, 118, 116, 122, 115, - 119, 124, 130, 130, 128, 127, 124, 122, 59, 14, 51, 53, 42, 38, 55, 46, - 49, 42, 49, 28, 25, 49, 45, 45, 53, 52, 134, 89, 96, 102, 106, 104, - 108, 112, 111, 114, 115, 114, 114, 126, 128, 131, 131, 126, 85, 106, 151, 130, - 123, 134, 144, 140, 143, 139, 140, 144, 142, 140, 128, 61, 30, 29, 37, 30, - 42, 57, 63, 130, 170, 155, 134, 132, 153, 163, 163, 161, 166, 166, 170, 170, - 166, 148, 108, 77, 68, 40, 63, 71, 56, 60, 110, 191, 190, 177, 136, 150, - 134, 135, 135, 140, 147, 144, 118, 120, 30, 16, 20, 24, 8, 0, 57, 77, - 77, 96, 199, 221, 233, 139, 116, 107, 126, 140, 155, 161, 161, 163, 170, 166, - 165, 151, 143, 134, 126, 30, 14, 17, 36, 56, 64, 64, 84, 87, 56, 89, - 84, 77, 84, 84, 87, 75, 69, 69, 67, 65, 60, 33, 63, 128, 142, 93, - 91, 92, 92, 65, 76, 45, 25, 81, 100, 93, 93, 87, 93, 85, 76, 241, - 238, 233, 104, 96, 110, 124, 139, 147, 159, 165, 163, 165, 157, 144, 132, 126, - 17, 9, 9, 20, 38, 41, 41, 46, 64, 61, 45, 42, 80, 87, 91, 195, - 190, 124, 107, 118, 136, 134, 151, 157, 136, 138, 147, 151, 142, 146, 142, 148, - 148, 147, 159, 159, 163, 157, 148, 144, 146, 151, 155, 154, 158, 157, 161, 161, - 161, 159, 155, 140, 140, 140, 134, 106, 60, 38, 28, 30, 41, 77, 111, 130, - 170, 179, 177, 163, 170, 169, 155, 135, 132, 124, 115, 104, 57, 51, 68, 65, - 63, 64, 63, 46, 36, 83, 83, 73, 93, 84, 85, 61, 61, 57, 46, 61, - 91, 84, 126, 140, 171, 195, 218, 222, 237, 237, 244, 244, 246, 248, 246, 246, - 248, 248, 238, 213, 134, 89, 56, 29, 40, 38, 38, 41, 37, 38, 40, 44, - 44, 38, 40, 40, 34, 67, 85, 80, 79, 80, 76, 80, 72, 63, 56, 40, - 71, 77, 64, 67, 77, 72, 88, 75, 65, 61, 25, 0, 64, 88, 76, 87, - 83, 75, 81, 79, 71, 56, 26, 20, 45, 73, 51, 237, 244, 240, 110, 97, - 108, 132, 143, 151, 158, 162, 167, 174, 171, 171, 165, 146, 139, 132, 123, 10, - 10, 9, 12, 18, 20, 20, 8, 6, 10, 6, 6, 18, 29, 56, 56, 57, - 55, 57, 56, 44, 48, 49, 45, 33, 57, 77, 77, 69, 68, 65, 65, 73, - 57, 79, 157, 119, 112, 118, 134, 135, 140, 142, 147, 147, 150, 142, 147, 112, - 106, 89, 21, 12, 16, 20, 16, 29, 33, 17, 28, 20, 48, 69, 77, 216, - 238, 238, 107, 99, 108, 124, 135, 144, 153, 165, 169, 170, 166, 157, 124, 65, - 26, 24, 24, 64, 81, 108, 106, 111, 108, 108, 110, 110, 108, 112, 112, 111, - 108, 59, 55, 59, 56, 53, 52, 48, 51, 57, 174, 178, 108, 88, 114, 120, - 112, 115, 119, 119, 120, 126, 128, 131, 134, 135, 135, 135, 128, 127, 116, 112, - 138, 143, 143, 146, 140, 140, 139, 134, 135, 124, 79, 20, 17, 13, 17, 13, - 34, 73, 77, 75, 65, 55, 41, 45, 45, 45, 38, 49, 49, 48, 45, 61, - 59, 37, 32, 61, 99, 112, 167, 170, 166, 144, 153, 166, 151, 151, 147, 132, - 136, 126, 153, 91, 29, 18, 51, 51, 46, 41, 45, 44, 45, 55, 25, 21, - 37, 46, 52, 38, 45, 131, 158, 100, 99, 108, 119, 116, 118, 120, 122, 120, - 120, 123, 128, 138, 135, 136, 135, 131, 89, 89, 131, 143, 147, 147, 147, 146, - 138, 143, 143, 142, 138, 96, 41, 33, 32, 9, 34, 34, 55, 51, 57, 148, - 163, 139, 127, 136, 153, 161, 166, 169, 173, 173, 174, 175, 167, 138, 72, 67, - 48, 67, 61, 67, 60, 119, 202, 195, 212, 147, 153, 136, 135, 138, 139, 151, - 144, 118, 118, 26, 14, 6, 12, 8, 0, 56, 59, 67, 89, 208, 220, 234, - 140, 102, 111, 130, 144, 153, 157, 159, 165, 167, 166, 162, 155, 136, 131, 123, - 33, 16, 18, 37, 53, 53, 63, 65, 72, 55, 99, 97, 76, 65, 64, 67, - 64, 64, 61, 63, 65, 61, 44, 69, 87, 110, 95, 33, 44, 40, 38, 37, - 34, 24, 49, 79, 77, 69, 68, 87, 77, 75, 242, 240, 233, 103, 96, 108, - 123, 138, 150, 163, 166, 163, 166, 158, 143, 132, 124, 17, 9, 9, 18, 22, - 34, 37, 36, 41, 34, 38, 46, 79, 93, 87, 198, 195, 167, 112, 115, 123, - 139, 139, 144, 157, 154, 142, 155, 146, 150, 148, 148, 155, 166, 170, 178, 185, - 185, 179, 159, 158, 161, 167, 166, 167, 166, 167, 169, 169, 166, 162, 144, 144, - 142, 110, 60, 28, 28, 24, 20, 29, 57, 87, 119, 173, 177, 190, 181, 175, - 151, 170, 163, 150, 131, 119, 116, 71, 42, 49, 61, 64, 63, 59, 59, 51, - 44, 46, 52, 52, 55, 55, 55, 56, 49, 77, 88, 115, 177, 214, 234, 240, - 240, 245, 249, 252, 252, 252, 252, 252, 250, 252, 249, 248, 245, 233, 171, 122, - 93, 53, 26, 38, 36, 34, 34, 38, 37, 38, 38, 42, 37, 41, 38, 36, - 36, 52, 56, 52, 64, 56, 60, 57, 56, 59, 37, 67, 67, 67, 55, 60, - 59, 61, 56, 57, 44, 28, 2, 59, 65, 72, 77, 71, 71, 69, 71, 59, - 52, 25, 21, 36, 71, 46, 237, 242, 237, 108, 95, 108, 134, 144, 153, 158, - 159, 162, 171, 173, 171, 161, 151, 139, 131, 120, 9, 8, 9, 12, 14, 12, - 14, 16, 17, 16, 33, 24, 20, 32, 38, 44, 37, 37, 41, 45, 40, 44, - 49, 40, 28, 65, 72, 67, 64, 63, 65, 64, 65, 61, 59, 161, 167, 112, - 111, 122, 127, 135, 140, 147, 148, 144, 150, 147, 119, 107, 91, 21, 13, 17, - 13, 10, 20, 22, 12, 17, 24, 37, 51, 73, 224, 242, 238, 112, 99, 110, - 124, 136, 142, 150, 165, 170, 167, 178, 146, 77, 34, 16, 12, 9, 26, 73, - 123, 163, 167, 162, 119, 151, 154, 153, 150, 122, 119, 114, 80, 49, 63, 53, - 52, 49, 48, 40, 45, 161, 187, 161, 103, 103, 122, 123, 127, 127, 131, 131, - 134, 138, 138, 139, 139, 143, 140, 138, 136, 136, 148, 147, 151, 146, 142, 127, - 120, 110, 96, 95, 69, 30, 16, 10, 12, 17, 13, 25, 32, 37, 34, 38, - 40, 40, 51, 52, 57, 49, 63, 60, 60, 56, 57, 60, 60, 61, 77, 104, - 175, 187, 189, 179, 171, 171, 174, 170, 163, 167, 157, 143, 138, 126, 115, 63, - 16, 24, 59, 57, 40, 41, 40, 36, 52, 29, 21, 30, 48, 44, 40, 48, - 126, 166, 155, 97, 100, 120, 122, 126, 126, 124, 128, 128, 126, 142, 148, 151, - 148, 147, 139, 143, 151, 153, 150, 150, 144, 140, 132, 126, 116, 111, 108, 84, - 45, 26, 21, 30, 21, 26, 13, 28, 32, 20, 92, 169, 163, 132, 126, 136, - 153, 159, 167, 171, 174, 174, 177, 177, 161, 111, 56, 67, 77, 77, 65, 59, - 155, 204, 199, 187, 165, 162, 144, 140, 146, 150, 148, 144, 116, 114, 24, 9, - 5, 17, 13, 13, 53, 51, 59, 88, 197, 221, 234, 131, 97, 107, 128, 144, - 155, 158, 165, 166, 167, 159, 155, 157, 139, 132, 124, 36, 14, 20, 36, 37, - 56, 64, 60, 69, 57, 91, 84, 60, 61, 59, 64, 61, 60, 57, 65, 65, - 55, 41, 49, 37, 24, 22, 22, 22, 20, 17, 20, 20, 22, 29, 32, 37, - 44, 45, 57, 77, 76, 241, 240, 229, 103, 96, 108, 127, 139, 150, 162, 169, - 169, 162, 157, 142, 130, 122, 14, 8, 8, 16, 14, 32, 36, 28, 29, 30, - 28, 33, 48, 87, 87, 205, 198, 193, 114, 110, 122, 135, 165, 163, 144, 154, - 148, 150, 157, 161, 163, 167, 170, 174, 178, 169, 153, 174, 183, 190, 181, 163, - 178, 178, 175, 171, 183, 178, 175, 178, 174, 181, 150, 144, 100, 45, 28, 21, - 17, 17, 20, 48, 81, 114, 182, 190, 161, 165, 183, 179, 159, 155, 161, 135, - 124, 131, 80, 44, 42, 57, 59, 57, 52, 55, 53, 57, 55, 52, 56, 56, - 53, 57, 46, 87, 95, 140, 218, 241, 242, 244, 248, 249, 252, 252, 250, 241, - 236, 230, 229, 229, 222, 220, 213, 209, 175, 140, 128, 102, 55, 49, 38, 41, - 38, 38, 42, 40, 40, 41, 40, 40, 42, 40, 38, 42, 42, 42, 42, 42, - 45, 42, 42, 42, 42, 40, 41, 34, 40, 40, 49, 32, 36, 34, 32, 28, - 33, 4, 16, 28, 30, 33, 32, 33, 32, 42, 36, 22, 12, 34, 33, 64, - 53, 240, 242, 238, 110, 95, 103, 130, 140, 153, 158, 163, 170, 170, 173, 163, - 157, 148, 139, 131, 123, 8, 10, 10, 14, 14, 16, 22, 12, 14, 13, 10, - 16, 18, 18, 18, 28, 25, 24, 22, 22, 24, 25, 24, 38, 42, 40, 46, - 38, 30, 59, 60, 55, 57, 61, 52, 142, 173, 162, 112, 116, 130, 128, 136, - 143, 139, 146, 148, 150, 123, 112, 83, 18, 10, 9, 14, 12, 16, 26, 25, - 13, 16, 36, 49, 75, 233, 242, 241, 112, 100, 110, 124, 135, 144, 153, 166, - 170, 163, 157, 112, 40, 20, 9, 10, 12, 18, 59, 142, 179, 128, 162, 154, - 154, 158, 167, 140, 146, 122, 118, 107, 44, 41, 45, 51, 49, 45, 52, 38, - 89, 197, 179, 114, 104, 112, 136, 131, 134, 135, 136, 138, 140, 142, 143, 144, - 146, 148, 153, 155, 151, 153, 151, 136, 104, 65, 41, 22, 16, 16, 17, 14, - 13, 9, 13, 10, 18, 14, 30, 28, 30, 34, 44, 64, 106, 177, 195, 209, - 210, 208, 199, 186, 177, 103, 92, 85, 85, 108, 186, 213, 163, 191, 183, 185, - 182, 174, 178, 177, 170, 163, 155, 142, 132, 147, 91, 29, 16, 29, 34, 38, - 40, 37, 41, 42, 44, 28, 29, 40, 45, 29, 38, 104, 175, 173, 108, 100, - 110, 123, 132, 130, 130, 135, 143, 146, 153, 157, 157, 157, 154, 151, 155, 155, - 151, 146, 130, 95, 67, 38, 26, 20, 13, 21, 21, 22, 25, 25, 1, 4, - 4, 34, 36, 25, 22, 32, 118, 171, 146, 120, 122, 143, 154, 159, 166, 171, - 175, 178, 181, 177, 135, 68, 37, 45, 63, 75, 88, 187, 201, 202, 189, 161, - 151, 154, 153, 154, 155, 148, 147, 128, 110, 21, 10, 6, 9, 13, 10, 33, - 41, 40, 72, 190, 222, 221, 130, 107, 110, 128, 144, 154, 159, 162, 166, 165, - 151, 158, 150, 139, 132, 124, 44, 17, 18, 25, 29, 30, 37, 67, 65, 52, - 60, 60, 53, 41, 38, 40, 36, 32, 28, 21, 29, 29, 37, 17, 41, 45, - 48, 52, 55, 52, 61, 53, 37, 18, 59, 104, 104, 81, 87, 87, 83, 77, - 242, 237, 222, 104, 96, 107, 126, 134, 150, 162, 169, 167, 163, 158, 142, 127, - 126, 18, 9, 9, 13, 13, 10, 21, 25, 26, 24, 26, 30, 38, 88, 91, - 208, 206, 204, 116, 126, 116, 132, 161, 165, 151, 153, 154, 165, 173, 173, 173, - 171, 169, 178, 143, 89, 59, 80, 150, 183, 185, 169, 161, 174, 175, 177, 175, - 175, 179, 181, 183, 185, 154, 151, 95, 42, 25, 21, 17, 17, 20, 49, 73, - 106, 195, 197, 163, 186, 189, 187, 165, 181, 170, 140, 128, 118, 100, 53, 38, - 48, 44, 37, 32, 38, 36, 36, 37, 40, 40, 38, 42, 55, 68, 106, 165, - 236, 245, 246, 244, 250, 249, 238, 220, 191, 167, 124, 112, 115, 108, 111, 116, - 114, 110, 115, 131, 118, 124, 116, 89, 63, 20, 18, 16, 13, 12, 12, 10, - 9, 8, 9, 9, 5, 4, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 2, 6, 8, 6, 1, 1, 0, 2, 5, 6, 2, 16, 14, 14, 6, - 17, 16, 13, 13, 17, 18, 17, 30, 25, 24, 75, 57, 240, 244, 242, 114, - 96, 106, 130, 142, 154, 161, 169, 173, 171, 169, 159, 161, 144, 136, 132, 120, - 6, 9, 12, 10, 9, 9, 8, 9, 8, 10, 9, 9, 9, 14, 24, 57, - 64, 75, 71, 73, 67, 67, 63, 56, 56, 80, 85, 77, 48, 38, 37, 34, - 53, 67, 57, 76, 185, 179, 119, 115, 126, 128, 134, 135, 136, 150, 146, 146, - 116, 111, 84, 18, 8, 13, 17, 12, 20, 21, 24, 22, 28, 55, 51, 80, - 233, 244, 241, 107, 97, 108, 122, 134, 140, 154, 166, 169, 165, 144, 73, 26, - 14, 10, 10, 10, 28, 72, 185, 193, 162, 130, 159, 162, 150, 142, 131, 151, - 126, 120, 111, 41, 40, 41, 45, 46, 42, 51, 45, 75, 210, 201, 126, 103, - 115, 130, 139, 139, 138, 139, 138, 142, 144, 147, 147, 158, 162, 159, 155, 157, - 148, 100, 53, 16, 10, 9, 8, 8, 8, 9, 8, 9, 10, 13, 10, 21, - 29, 30, 46, 55, 72, 126, 185, 234, 242, 244, 244, 244, 242, 240, 240, 237, - 237, 236, 232, 224, 229, 229, 224, 208, 190, 183, 179, 179, 177, 175, 178, 174, - 170, 169, 150, 140, 127, 115, 61, 18, 21, 22, 28, 20, 25, 28, 26, 33, - 33, 32, 33, 29, 33, 42, 97, 186, 183, 120, 106, 107, 120, 130, 134, 138, - 153, 157, 162, 161, 159, 157, 159, 163, 159, 157, 153, 134, 91, 46, 13, 9, - 6, 8, 9, 10, 14, 12, 2, 6, 4, 6, 13, 5, 5, 10, 16, 8, - 20, 64, 151, 165, 128, 118, 132, 147, 155, 159, 167, 174, 177, 182, 185, 158, - 100, 75, 75, 76, 73, 112, 201, 205, 208, 194, 166, 157, 167, 155, 150, 157, - 146, 147, 123, 119, 21, 9, 10, 2, 2, 1, 144, 134, 128, 85, 186, 221, - 222, 140, 110, 107, 126, 144, 154, 158, 162, 163, 159, 159, 161, 140, 138, 132, - 127, 49, 17, 18, 24, 45, 41, 37, 37, 41, 46, 37, 44, 61, 73, 71, - 84, 89, 92, 100, 99, 91, 73, 22, 67, 79, 104, 110, 102, 93, 93, 91, - 68, 44, 17, 92, 104, 102, 100, 104, 104, 84, 84, 245, 233, 233, 104, 93, - 104, 127, 135, 148, 162, 166, 165, 161, 158, 143, 132, 127, 20, 10, 9, 16, - 12, 18, 32, 30, 38, 5, 36, 30, 84, 87, 99, 216, 212, 210, 130, 126, - 131, 123, 154, 162, 155, 153, 167, 177, 177, 177, 175, 167, 169, 155, 91, 34, - 36, 59, 108, 174, 197, 178, 157, 174, 179, 178, 181, 182, 183, 186, 187, 185, - 159, 155, 103, 48, 32, 24, 22, 20, 22, 52, 85, 103, 199, 204, 169, 166, - 170, 189, 189, 186, 173, 151, 134, 122, 126, 76, 37, 42, 49, 56, 52, 59, - 80, 88, 97, 91, 99, 95, 84, 96, 135, 183, 240, 242, 245, 249, 244, 221, - 186, 143, 118, 112, 104, 97, 107, 110, 111, 97, 115, 114, 110, 104, 123, 126, - 127, 122, 116, 76, 80, 61, 59, 60, 65, 60, 60, 57, 51, 55, 41, 49, - 73, 92, 95, 108, 102, 99, 111, 114, 97, 75, 69, 79, 122, 97, 100, 128, - 124, 99, 89, 91, 110, 83, 10, 0, 22, 45, 60, 32, 38, 33, 29, 26, - 5, 14, 21, 49, 77, 73, 65, 241, 244, 241, 112, 95, 110, 131, 143, 153, - 161, 170, 170, 171, 166, 162, 161, 143, 135, 132, 124, 8, 14, 12, 24, 48, - 61, 67, 71, 77, 75, 73, 63, 72, 72, 71, 83, 106, 97, 97, 80, 87, - 84, 89, 89, 80, 93, 103, 99, 79, 56, 49, 45, 42, 53, 59, 71, 193, - 187, 136, 115, 122, 132, 130, 132, 146, 148, 147, 146, 122, 110, 77, 16, 8, - 14, 22, 29, 36, 46, 45, 57, 57, 41, 77, 81, 233, 244, 240, 106, 97, - 108, 124, 135, 143, 155, 167, 166, 178, 134, 40, 20, 16, 13, 16, 8, 44, - 72, 195, 198, 187, 130, 154, 155, 157, 139, 130, 130, 127, 123, 112, 44, 34, - 38, 53, 49, 44, 45, 37, 65, 212, 209, 182, 110, 107, 122, 134, 143, 148, - 140, 144, 144, 151, 151, 158, 167, 162, 159, 159, 144, 83, 25, 9, 6, 9, - 9, 13, 14, 14, 14, 13, 13, 13, 12, 18, 22, 32, 42, 60, 107, 204, - 236, 240, 242, 242, 242, 240, 241, 241, 241, 240, 238, 236, 234, 233, 230, 230, - 230, 226, 222, 169, 165, 182, 183, 190, 173, 185, 178, 175, 171, 161, 146, 132, - 138, 87, 26, 26, 28, 36, 33, 45, 38, 33, 24, 18, 22, 29, 29, 36, - 53, 96, 191, 197, 166, 103, 104, 112, 127, 134, 148, 162, 162, 159, 161, 162, - 161, 162, 165, 159, 155, 138, 77, 17, 12, 5, 4, 0, 1, 1, 5, 4, - 10, 18, 13, 16, 14, 20, 26, 17, 17, 9, 9, 21, 37, 135, 162, 139, - 118, 118, 134, 151, 157, 165, 170, 177, 181, 183, 183, 131, 73, 65, 59, 89, - 146, 210, 208, 216, 206, 171, 161, 166, 151, 154, 154, 150, 148, 127, 118, 25, - 14, 12, 12, 34, 42, 103, 88, 93, 80, 155, 216, 224, 146, 110, 107, 126, - 140, 154, 159, 162, 163, 157, 159, 157, 140, 135, 132, 126, 57, 18, 20, 29, - 41, 55, 64, 64, 64, 45, 68, 99, 119, 112, 115, 122, 122, 116, 110, 116, - 104, 76, 22, 67, 138, 122, 123, 104, 106, 110, 80, 69, 44, 20, 100, 102, - 87, 80, 80, 96, 84, 85, 245, 236, 233, 104, 92, 106, 128, 134, 148, 162, - 169, 167, 162, 157, 143, 134, 128, 20, 10, 10, 13, 14, 26, 34, 24, 37, - 12, 29, 32, 84, 95, 106, 214, 216, 213, 131, 107, 114, 123, 134, 161, 158, - 162, 175, 178, 177, 179, 178, 173, 167, 122, 45, 30, 32, 37, 63, 153, 199, - 185, 158, 159, 174, 189, 190, 193, 194, 195, 195, 191, 185, 163, 134, 65, 34, - 26, 25, 21, 40, 65, 89, 97, 201, 209, 183, 166, 186, 189, 174, 187, 170, - 163, 136, 127, 119, 99, 45, 36, 51, 48, 81, 69, 76, 92, 96, 112, 87, - 100, 103, 139, 222, 241, 244, 245, 249, 230, 182, 136, 114, 108, 108, 111, 122, - 72, 41, 34, 37, 48, 99, 106, 114, 151, 174, 181, 171, 128, 124, 112, 91, - 63, 85, 83, 65, 69, 63, 64, 57, 76, 88, 59, 93, 112, 108, 107, 72, - 96, 118, 119, 100, 96, 80, 73, 112, 111, 119, 115, 120, 107, 110, 104, 96, - 93, 64, 0, 60, 52, 55, 65, 53, 46, 55, 45, 22, 18, 20, 77, 77, - 65, 76, 244, 244, 241, 103, 99, 110, 132, 142, 153, 162, 169, 169, 174, 165, - 159, 158, 142, 135, 132, 120, 8, 10, 17, 38, 60, 56, 60, 63, 64, 73, - 68, 77, 59, 80, 108, 88, 79, 77, 81, 93, 80, 79, 93, 134, 147, 199, - 185, 131, 96, 73, 59, 60, 57, 55, 55, 61, 199, 198, 169, 116, 120, 130, - 132, 130, 139, 153, 146, 151, 120, 112, 80, 17, 10, 16, 28, 48, 52, 51, - 49, 55, 34, 64, 91, 138, 234, 244, 238, 111, 99, 110, 126, 136, 143, 159, - 167, 165, 158, 114, 36, 20, 10, 12, 18, 9, 52, 83, 204, 202, 194, 158, - 151, 151, 159, 142, 144, 132, 128, 130, 118, 41, 37, 32, 42, 52, 55, 37, - 33, 59, 213, 206, 190, 108, 107, 115, 130, 140, 148, 148, 150, 165, 169, 167, - 169, 169, 161, 159, 146, 87, 20, 5, 6, 8, 9, 16, 14, 17, 17, 17, - 17, 17, 22, 22, 22, 20, 33, 48, 95, 221, 238, 238, 242, 241, 238, 229, - 218, 197, 194, 185, 186, 190, 201, 205, 208, 218, 221, 224, 220, 224, 210, 171, - 198, 197, 206, 205, 197, 178, 182, 175, 167, 150, 139, 132, 110, 55, 22, 20, - 48, 41, 46, 61, 60, 56, 49, 56, 64, 65, 64, 52, 104, 193, 201, 183, - 106, 104, 114, 127, 139, 151, 162, 165, 167, 165, 166, 163, 167, 165, 161, 136, - 77, 16, 12, 4, 2, 4, 6, 2, 4, 9, 6, 20, 30, 37, 30, 44, - 40, 41, 44, 48, 40, 41, 13, 42, 122, 159, 158, 118, 114, 128, 144, 154, - 159, 166, 173, 178, 185, 191, 178, 118, 56, 79, 102, 174, 212, 210, 210, 193, - 178, 166, 161, 158, 162, 155, 150, 148, 128, 119, 17, 12, 13, 22, 20, 6, - 103, 97, 93, 97, 107, 208, 213, 175, 114, 107, 120, 142, 151, 158, 161, 159, - 159, 157, 146, 128, 135, 131, 126, 81, 22, 20, 36, 45, 61, 68, 60, 63, - 34, 100, 116, 122, 118, 112, 134, 128, 131, 122, 123, 97, 73, 20, 84, 146, - 139, 142, 136, 126, 104, 92, 61, 41, 22, 93, 102, 87, 87, 83, 92, 83, - 81, 241, 230, 233, 102, 92, 107, 130, 136, 148, 162, 167, 170, 159, 158, 144, - 135, 128, 21, 12, 10, 12, 6, 29, 29, 14, 26, 12, 44, 21, 102, 95, - 143, 221, 220, 216, 115, 106, 114, 136, 135, 146, 157, 169, 178, 179, 179, 177, - 174, 170, 161, 92, 34, 29, 30, 37, 64, 126, 201, 198, 163, 153, 171, 177, - 189, 195, 198, 198, 198, 197, 191, 167, 155, 88, 41, 24, 25, 22, 53, 75, - 91, 100, 194, 214, 198, 170, 186, 187, 185, 186, 171, 170, 140, 132, 123, 116, - 68, 37, 49, 44, 46, 61, 95, 76, 81, 79, 88, 85, 104, 199, 244, 242, - 246, 248, 218, 158, 116, 111, 111, 115, 134, 120, 63, 32, 28, 32, 29, 48, - 97, 179, 193, 185, 159, 166, 166, 171, 130, 127, 118, 93, 49, 67, 64, 75, - 59, 61, 60, 61, 56, 63, 128, 123, 116, 107, 111, 106, 95, 100, 88, 76, - 69, 93, 123, 118, 107, 104, 99, 103, 103, 112, 100, 100, 76, 16, 69, 44, - 25, 17, 13, 21, 26, 49, 29, 12, 22, 75, 88, 72, 108, 244, 244, 238, - 106, 99, 111, 132, 142, 151, 161, 169, 169, 173, 163, 158, 142, 131, 134, 131, - 120, 9, 14, 18, 48, 49, 61, 60, 71, 56, 61, 61, 52, 37, 81, 104, - 91, 75, 73, 83, 81, 84, 87, 163, 224, 205, 217, 205, 161, 100, 80, 60, - 69, 57, 51, 55, 56, 199, 199, 187, 118, 120, 131, 139, 134, 135, 146, 140, - 135, 122, 115, 69, 18, 9, 21, 36, 48, 42, 45, 65, 40, 33, 64, 93, - 142, 234, 242, 240, 118, 102, 114, 127, 140, 147, 161, 167, 162, 154, 84, 32, - 17, 12, 13, 20, 8, 57, 89, 202, 206, 204, 124, 147, 150, 157, 128, 134, - 138, 127, 128, 115, 38, 29, 30, 38, 40, 46, 46, 38, 59, 218, 209, 193, - 107, 108, 114, 127, 140, 148, 154, 167, 170, 174, 175, 170, 167, 165, 150, 85, - 22, 5, 9, 10, 9, 14, 16, 24, 30, 28, 29, 25, 26, 22, 26, 32, - 25, 36, 65, 169, 238, 238, 238, 234, 230, 197, 175, 151, 150, 147, 151, 154, - 158, 163, 167, 171, 174, 178, 181, 191, 195, 204, 198, 199, 195, 194, 197, 198, - 195, 187, 178, 169, 154, 146, 128, 119, 75, 28, 32, 44, 49, 42, 51, 40, - 46, 55, 60, 59, 48, 44, 45, 88, 197, 205, 193, 107, 104, 114, 128, 138, - 154, 162, 165, 166, 167, 166, 169, 166, 165, 150, 96, 26, 13, 4, 6, 9, - 6, 8, 8, 14, 12, 9, 33, 40, 42, 41, 44, 32, 28, 22, 30, 33, - 45, 1, 44, 100, 143, 170, 134, 112, 120, 138, 148, 155, 162, 170, 177, 182, - 195, 194, 185, 138, 110, 148, 204, 204, 212, 208, 189, 191, 173, 179, 165, 162, - 161, 154, 150, 135, 119, 24, 12, 5, 30, 5, 59, 69, 89, 93, 81, 88, - 191, 216, 197, 114, 103, 116, 139, 151, 155, 158, 161, 157, 154, 138, 136, 135, - 131, 126, 97, 25, 22, 36, 48, 60, 64, 55, 69, 41, 103, 132, 126, 130, - 128, 122, 126, 124, 128, 112, 93, 76, 20, 91, 139, 166, 189, 162, 140, 116, - 103, 67, 44, 24, 87, 97, 89, 102, 84, 89, 79, 91, 240, 237, 232, 93, - 93, 106, 127, 134, 147, 162, 169, 167, 162, 157, 147, 138, 127, 18, 13, 10, - 10, 16, 29, 29, 17, 17, 14, 34, 21, 88, 100, 143, 226, 225, 217, 118, - 118, 114, 123, 136, 155, 158, 171, 177, 181, 181, 177, 174, 167, 143, 53, 29, - 25, 30, 49, 53, 107, 191, 204, 171, 150, 154, 173, 182, 191, 198, 198, 199, - 199, 195, 191, 169, 124, 51, 29, 25, 29, 55, 76, 91, 91, 190, 220, 212, - 175, 170, 185, 174, 185, 173, 166, 147, 136, 128, 131, 85, 36, 37, 45, 41, - 60, 83, 89, 93, 88, 77, 93, 130, 229, 237, 242, 245, 224, 146, 114, 114, - 114, 120, 139, 140, 83, 49, 26, 29, 32, 30, 51, 112, 197, 191, 162, 165, - 170, 169, 174, 134, 130, 115, 107, 84, 46, 56, 51, 56, 49, 60, 59, 52, - 22, 118, 128, 100, 115, 110, 116, 126, 120, 97, 76, 67, 88, 126, 111, 107, - 99, 97, 103, 100, 96, 99, 108, 42, 14, 44, 51, 38, 13, 16, 14, 20, - 37, 25, 13, 18, 75, 85, 67, 91, 242, 244, 240, 110, 100, 110, 132, 143, - 150, 161, 167, 170, 174, 162, 158, 136, 131, 131, 131, 119, 9, 14, 14, 25, - 51, 57, 72, 65, 52, 72, 55, 59, 41, 72, 108, 80, 95, 77, 69, 87, - 77, 95, 198, 226, 208, 213, 183, 139, 97, 67, 49, 53, 59, 49, 55, 57, - 206, 204, 194, 122, 123, 131, 136, 139, 140, 131, 146, 132, 120, 115, 59, 17, - 10, 20, 38, 46, 40, 44, 76, 41, 29, 63, 95, 138, 232, 241, 240, 120, - 103, 114, 126, 138, 146, 161, 165, 163, 144, 61, 24, 14, 12, 13, 24, 10, - 56, 85, 205, 208, 232, 127, 147, 147, 148, 139, 131, 130, 127, 124, 112, 34, - 30, 24, 38, 37, 46, 36, 42, 59, 222, 220, 204, 107, 106, 115, 126, 138, - 148, 154, 166, 173, 173, 171, 167, 163, 158, 111, 32, 6, 9, 9, 8, 9, - 17, 26, 33, 33, 33, 26, 28, 26, 28, 28, 34, 32, 42, 89, 218, 236, - 236, 229, 214, 179, 146, 134, 135, 140, 148, 157, 166, 173, 183, 193, 197, 201, - 202, 199, 183, 187, 191, 194, 195, 198, 202, 201, 205, 202, 182, 178, 163, 154, - 147, 132, 128, 95, 36, 30, 34, 41, 59, 46, 48, 52, 38, 33, 49, 60, - 60, 60, 76, 198, 210, 199, 110, 106, 115, 128, 139, 154, 162, 165, 167, 166, - 171, 169, 165, 157, 116, 40, 16, 6, 6, 9, 9, 8, 10, 12, 8, 9, - 5, 36, 42, 33, 26, 28, 33, 28, 18, 36, 37, 37, 4, 46, 91, 115, - 165, 146, 116, 110, 128, 136, 154, 161, 169, 173, 182, 187, 199, 198, 195, 182, - 204, 210, 210, 212, 212, 193, 181, 179, 173, 167, 169, 159, 153, 151, 135, 123, - 18, 12, 9, 20, 6, 1, 120, 81, 84, 80, 71, 130, 213, 205, 120, 102, - 112, 130, 144, 153, 158, 161, 159, 157, 147, 132, 136, 128, 128, 111, 32, 25, - 36, 44, 57, 68, 59, 76, 40, 77, 118, 126, 124, 120, 123, 123, 134, 119, - 115, 95, 77, 24, 118, 159, 210, 216, 225, 183, 140, 115, 81, 42, 22, 88, - 96, 97, 87, 85, 87, 80, 84, 238, 241, 225, 97, 92, 103, 122, 134, 146, - 162, 169, 167, 162, 158, 147, 138, 128, 20, 9, 16, 10, 14, 25, 33, 30, - 30, 8, 30, 29, 87, 96, 114, 228, 225, 221, 127, 118, 126, 122, 142, 138, - 162, 167, 179, 173, 181, 178, 169, 165, 123, 41, 28, 22, 32, 42, 55, 88, - 183, 208, 189, 151, 148, 167, 178, 187, 191, 198, 199, 201, 199, 195, 175, 157, - 69, 32, 24, 26, 55, 75, 89, 91, 170, 224, 216, 183, 185, 181, 186, 186, - 177, 161, 148, 139, 130, 122, 102, 44, 34, 45, 41, 56, 87, 96, 80, 80, - 92, 88, 181, 234, 241, 244, 233, 157, 116, 116, 120, 127, 143, 142, 146, 71, - 45, 26, 18, 34, 37, 68, 89, 202, 198, 165, 166, 170, 163, 165, 166, 132, - 124, 120, 93, 46, 44, 52, 55, 48, 51, 57, 56, 42, 122, 136, 106, 115, - 110, 116, 126, 107, 92, 88, 59, 99, 127, 116, 96, 102, 96, 108, 104, 102, - 106, 100, 60, 0, 53, 41, 25, 13, 30, 41, 51, 38, 13, 12, 16, 71, - 83, 61, 89, 244, 242, 232, 108, 99, 111, 131, 139, 154, 161, 166, 170, 173, - 161, 154, 146, 136, 131, 130, 115, 9, 14, 17, 32, 53, 65, 67, 63, 51, - 64, 55, 53, 38, 81, 97, 75, 84, 89, 80, 79, 75, 100, 214, 220, 224, - 218, 177, 115, 85, 49, 32, 53, 49, 49, 51, 60, 210, 208, 202, 126, 123, - 134, 138, 142, 139, 132, 150, 130, 116, 110, 46, 17, 10, 18, 38, 45, 38, - 45, 64, 42, 25, 77, 89, 95, 229, 241, 237, 119, 104, 114, 124, 135, 143, - 162, 163, 161, 142, 41, 17, 14, 14, 14, 17, 9, 53, 88, 205, 206, 208, - 146, 138, 143, 143, 139, 131, 130, 123, 122, 107, 29, 25, 24, 34, 37, 41, - 37, 34, 52, 228, 224, 210, 111, 106, 116, 127, 136, 147, 155, 166, 173, 173, - 169, 157, 161, 136, 49, 6, 10, 10, 9, 14, 16, 20, 38, 41, 36, 32, - 30, 33, 30, 29, 42, 30, 29, 63, 179, 216, 230, 218, 195, 159, 135, 124, - 132, 142, 157, 166, 175, 182, 190, 201, 210, 213, 216, 217, 216, 213, 198, 193, - 194, 189, 185, 183, 206, 206, 206, 183, 178, 161, 158, 150, 136, 128, 106, 52, - 30, 28, 49, 46, 56, 49, 44, 40, 42, 26, 38, 56, 33, 64, 195, 216, - 206, 108, 106, 115, 130, 138, 154, 161, 165, 167, 167, 170, 166, 162, 136, 53, - 14, 12, 9, 12, 9, 13, 13, 12, 8, 8, 9, 5, 41, 42, 24, 26, - 25, 30, 18, 22, 42, 29, 44, 5, 42, 73, 95, 126, 165, 124, 112, 116, - 132, 148, 158, 166, 170, 177, 186, 194, 201, 202, 205, 208, 205, 209, 221, 208, - 190, 183, 183, 175, 170, 163, 161, 153, 150, 135, 122, 16, 12, 5, 12, 63, - 72, 114, 68, 80, 83, 79, 95, 193, 206, 132, 103, 111, 124, 142, 150, 154, - 158, 163, 165, 158, 148, 126, 126, 127, 116, 44, 22, 34, 37, 55, 68, 59, - 65, 61, 51, 111, 126, 126, 130, 124, 126, 126, 123, 108, 99, 81, 34, 155, - 193, 226, 209, 204, 198, 209, 139, 102, 46, 24, 81, 89, 91, 79, 77, 81, - 72, 79, 240, 240, 230, 102, 95, 99, 118, 132, 148, 161, 170, 170, 162, 158, - 147, 138, 126, 17, 12, 13, 13, 12, 24, 29, 37, 34, 30, 26, 32, 79, - 89, 104, 226, 226, 222, 128, 104, 114, 124, 134, 136, 153, 163, 174, 181, 183, - 178, 167, 157, 100, 34, 26, 22, 32, 48, 60, 81, 171, 216, 198, 155, 144, - 158, 173, 182, 190, 193, 197, 201, 202, 198, 193, 174, 102, 36, 25, 28, 55, - 75, 80, 83, 144, 221, 221, 187, 169, 181, 187, 177, 165, 146, 140, 140, 134, - 123, 115, 60, 36, 40, 38, 55, 87, 97, 85, 85, 87, 79, 197, 238, 241, - 242, 190, 124, 118, 124, 130, 130, 144, 148, 148, 65, 26, 24, 22, 29, 36, - 55, 92, 205, 206, 183, 163, 169, 167, 165, 167, 136, 132, 119, 91, 40, 40, - 51, 44, 51, 55, 59, 40, 71, 111, 122, 106, 99, 97, 106, 102, 106, 89, - 72, 41, 107, 127, 116, 96, 106, 96, 106, 104, 103, 96, 97, 56, 0, 51, - 42, 33, 13, 16, 22, 16, 12, 24, 16, 17, 72, 83, 68, 85, 241, 240, - 226, 104, 99, 112, 132, 143, 153, 161, 167, 166, 173, 173, 161, 154, 139, 124, - 127, 112, 10, 16, 16, 46, 51, 57, 67, 73, 71, 69, 52, 56, 38, 75, - 97, 73, 72, 84, 67, 83, 76, 110, 218, 232, 222, 169, 118, 106, 61, 42, - 41, 48, 45, 42, 48, 60, 213, 216, 210, 130, 124, 135, 143, 158, 144, 144, - 148, 120, 115, 107, 33, 14, 10, 17, 38, 41, 38, 45, 64, 41, 22, 88, - 91, 71, 225, 240, 234, 120, 104, 114, 126, 138, 146, 162, 162, 158, 132, 34, - 16, 14, 13, 13, 17, 10, 44, 96, 209, 214, 206, 140, 135, 139, 144, 138, - 132, 132, 131, 115, 104, 25, 22, 18, 30, 32, 34, 45, 53, 55, 228, 228, - 216, 112, 108, 118, 127, 138, 148, 157, 161, 173, 169, 163, 159, 151, 96, 21, - 8, 10, 10, 9, 8, 14, 18, 38, 42, 60, 59, 57, 52, 42, 34, 30, - 40, 48, 122, 217, 225, 212, 179, 144, 126, 124, 136, 146, 157, 169, 175, 185, - 191, 199, 208, 199, 148, 116, 144, 193, 217, 214, 201, 193, 187, 195, 197, 206, - 204, 202, 183, 175, 163, 157, 147, 134, 127, 112, 71, 32, 22, 40, 44, 55, - 60, 45, 40, 42, 34, 41, 57, 20, 77, 204, 218, 213, 112, 107, 118, 131, - 138, 154, 161, 166, 169, 170, 170, 163, 153, 96, 25, 16, 12, 12, 10, 17, - 18, 13, 10, 10, 9, 12, 9, 40, 46, 30, 26, 16, 20, 22, 40, 33, - 25, 26, 2, 44, 63, 81, 104, 159, 158, 114, 106, 124, 142, 155, 162, 169, - 175, 185, 186, 191, 199, 197, 198, 212, 217, 209, 195, 189, 186, 179, 175, 170, - 163, 161, 153, 150, 132, 120, 13, 9, 9, 17, 5, 10, 97, 110, 87, 75, - 71, 64, 132, 204, 162, 104, 107, 118, 134, 144, 150, 158, 166, 161, 162, 153, - 126, 122, 128, 123, 61, 25, 28, 44, 49, 65, 63, 71, 59, 48, 106, 123, - 130, 126, 130, 130, 128, 124, 114, 102, 79, 34, 167, 206, 224, 216, 220, 201, - 179, 142, 100, 42, 25, 80, 97, 91, 93, 80, 83, 75, 96, 240, 241, 233, - 107, 93, 97, 112, 136, 146, 161, 167, 167, 163, 158, 147, 139, 128, 22, 14, - 8, 13, 14, 21, 21, 36, 33, 42, 16, 13, 79, 87, 103, 225, 225, 220, - 115, 103, 115, 127, 122, 127, 142, 158, 170, 177, 177, 174, 161, 147, 73, 29, - 26, 20, 34, 63, 53, 77, 153, 216, 206, 159, 142, 148, 167, 177, 183, 189, - 190, 195, 201, 201, 194, 181, 142, 48, 30, 24, 51, 72, 79, 84, 120, 218, - 224, 191, 171, 182, 182, 175, 154, 143, 136, 143, 139, 126, 124, 76, 34, 34, - 40, 53, 84, 102, 81, 72, 75, 85, 208, 232, 240, 238, 157, 118, 123, 131, - 135, 139, 148, 151, 154, 59, 28, 24, 17, 29, 34, 55, 81, 205, 212, 204, - 169, 170, 169, 165, 171, 142, 136, 116, 88, 33, 33, 42, 48, 44, 48, 51, - 46, 60, 120, 118, 108, 103, 103, 104, 100, 112, 88, 65, 56, 85, 108, 114, - 102, 104, 104, 104, 107, 103, 103, 95, 57, 13, 53, 40, 34, 8, 16, 40, - 12, 12, 25, 10, 18, 79, 81, 69, 89, 240, 236, 178, 100, 99, 112, 132, - 139, 148, 155, 163, 166, 173, 174, 169, 158, 144, 128, 126, 116, 10, 17, 18, - 49, 42, 59, 61, 64, 72, 55, 53, 48, 36, 83, 88, 73, 79, 80, 75, - 83, 77, 118, 230, 234, 221, 139, 107, 88, 49, 38, 33, 51, 45, 41, 55, - 67, 213, 216, 210, 131, 126, 139, 163, 162, 161, 154, 147, 118, 116, 107, 29, - 16, 12, 18, 37, 40, 38, 46, 52, 34, 22, 60, 89, 103, 224, 238, 236, - 123, 103, 115, 124, 138, 146, 163, 163, 159, 124, 30, 16, 13, 16, 13, 18, - 10, 48, 88, 209, 213, 228, 119, 132, 134, 140, 132, 136, 139, 134, 114, 92, - 25, 22, 22, 29, 32, 29, 38, 32, 53, 232, 221, 214, 111, 108, 119, 130, - 139, 151, 159, 161, 171, 167, 161, 159, 139, 52, 10, 10, 10, 10, 12, 14, - 16, 38, 40, 53, 46, 48, 55, 64, 42, 32, 26, 36, 73, 199, 222, 220, - 197, 136, 112, 124, 135, 147, 158, 167, 174, 182, 186, 195, 202, 202, 104, 64, - 59, 69, 106, 154, 218, 209, 204, 190, 197, 205, 208, 208, 195, 179, 175, 167, - 159, 147, 134, 122, 116, 83, 38, 40, 41, 46, 51, 48, 44, 38, 45, 41, - 37, 56, 34, 64, 217, 220, 216, 112, 108, 119, 131, 139, 153, 162, 165, 167, - 171, 166, 158, 136, 56, 14, 12, 13, 13, 21, 17, 16, 10, 9, 13, 10, - 13, 12, 45, 49, 32, 29, 34, 29, 33, 41, 20, 26, 29, 1, 41, 59, - 77, 81, 134, 171, 123, 104, 120, 135, 151, 161, 169, 174, 181, 187, 189, 189, - 187, 187, 190, 198, 199, 195, 193, 193, 182, 174, 171, 163, 162, 154, 151, 135, - 116, 12, 10, 6, 25, 9, 9, 95, 92, 93, 67, 72, 67, 96, 183, 189, - 108, 106, 114, 123, 140, 153, 159, 167, 165, 165, 154, 123, 123, 128, 126, 92, - 29, 26, 32, 37, 48, 69, 68, 64, 45, 87, 126, 127, 123, 128, 126, 128, - 124, 111, 97, 87, 28, 182, 213, 224, 217, 185, 163, 134, 107, 95, 40, 25, - 56, 93, 96, 100, 75, 81, 73, 85, 241, 242, 234, 107, 97, 96, 115, 130, - 143, 158, 166, 167, 165, 155, 144, 140, 127, 21, 16, 20, 14, 17, 32, 24, - 24, 29, 37, 25, 26, 69, 81, 96, 222, 233, 222, 126, 115, 115, 120, 120, - 126, 132, 146, 159, 177, 175, 162, 158, 140, 57, 30, 22, 20, 34, 55, 49, - 68, 138, 210, 212, 174, 138, 140, 159, 170, 175, 182, 186, 189, 194, 197, 195, - 181, 169, 79, 29, 25, 48, 63, 77, 81, 106, 213, 224, 194, 170, 181, 185, - 166, 150, 131, 128, 130, 136, 128, 126, 97, 44, 30, 38, 49, 81, 88, 80, - 75, 87, 88, 209, 232, 241, 218, 142, 122, 128, 135, 134, 150, 154, 159, 161, - 56, 28, 26, 22, 28, 38, 44, 75, 206, 216, 212, 171, 170, 174, 167, 170, - 143, 134, 118, 88, 29, 29, 38, 38, 37, 41, 45, 16, 64, 112, 111, 108, - 108, 107, 102, 99, 122, 91, 63, 51, 107, 123, 99, 106, 108, 116, 123, 114, - 106, 100, 102, 41, 16, 36, 37, 41, 10, 16, 14, 12, 12, 10, 13, 18, - 73, 81, 68, 81, 236, 236, 166, 99, 96, 111, 120, 132, 142, 151, 162, 166, - 175, 173, 169, 158, 146, 126, 128, 115, 12, 18, 16, 33, 41, 48, 60, 64, - 64, 56, 53, 52, 34, 64, 84, 73, 75, 72, 68, 72, 79, 157, 244, 236, - 210, 122, 103, 77, 34, 37, 37, 48, 44, 40, 49, 67, 216, 217, 210, 131, - 127, 139, 163, 157, 161, 148, 150, 116, 116, 106, 30, 14, 10, 20, 34, 38, - 37, 37, 48, 34, 17, 61, 95, 99, 224, 237, 236, 120, 104, 112, 126, 138, - 148, 165, 161, 163, 123, 26, 14, 14, 17, 13, 24, 12, 41, 79, 206, 214, - 210, 134, 127, 131, 140, 135, 132, 136, 132, 114, 85, 20, 20, 20, 26, 30, - 33, 34, 34, 76, 232, 233, 217, 112, 108, 119, 130, 139, 153, 159, 163, 170, - 165, 161, 157, 110, 30, 10, 12, 13, 9, 12, 9, 10, 44, 46, 55, 71, - 59, 44, 64, 41, 38, 34, 42, 132, 213, 218, 210, 167, 112, 119, 132, 142, - 157, 166, 170, 179, 179, 190, 194, 205, 165, 72, 37, 22, 28, 46, 103, 198, - 218, 209, 195, 186, 208, 206, 206, 204, 189, 175, 169, 158, 147, 131, 118, 118, - 92, 42, 40, 36, 53, 45, 48, 57, 37, 45, 36, 46, 51, 25, 72, 217, - 226, 217, 114, 110, 119, 131, 138, 154, 161, 161, 166, 166, 161, 155, 110, 33, - 14, 12, 17, 18, 24, 20, 13, 10, 12, 16, 9, 13, 9, 42, 37, 42, - 24, 37, 33, 33, 33, 33, 28, 24, 4, 36, 55, 64, 63, 92, 162, 138, - 103, 110, 131, 146, 157, 166, 173, 178, 185, 191, 191, 194, 193, 190, 189, 191, - 202, 193, 194, 185, 177, 169, 165, 165, 155, 148, 134, 120, 13, 9, 6, 18, - 12, 9, 69, 69, 72, 79, 63, 61, 67, 128, 185, 122, 102, 107, 115, 138, - 150, 158, 162, 167, 161, 147, 128, 123, 130, 124, 110, 36, 30, 41, 38, 44, - 67, 56, 72, 49, 81, 112, 122, 131, 128, 132, 126, 120, 103, 100, 88, 32, - 181, 224, 229, 218, 165, 124, 97, 92, 73, 34, 25, 44, 83, 93, 97, 77, - 76, 71, 87, 240, 241, 230, 103, 95, 99, 119, 131, 140, 158, 163, 167, 162, - 155, 146, 142, 124, 22, 18, 17, 14, 17, 26, 24, 13, 25, 26, 30, 36, - 56, 88, 112, 228, 230, 222, 127, 118, 123, 119, 118, 123, 136, 150, 146, 154, - 157, 153, 154, 131, 40, 26, 20, 20, 33, 37, 52, 67, 99, 202, 213, 183, - 138, 135, 151, 163, 170, 171, 175, 181, 189, 194, 194, 189, 181, 106, 34, 24, - 49, 56, 75, 80, 91, 205, 222, 204, 173, 179, 185, 167, 157, 147, 147, 143, - 130, 131, 122, 108, 53, 33, 36, 34, 68, 83, 76, 72, 85, 81, 208, 234, - 241, 187, 134, 127, 131, 136, 135, 147, 154, 159, 161, 55, 25, 24, 17, 25, - 41, 61, 72, 204, 218, 217, 171, 174, 173, 163, 171, 147, 134, 120, 84, 29, - 25, 30, 34, 36, 40, 48, 29, 84, 115, 120, 116, 108, 118, 104, 107, 92, - 88, 84, 45, 99, 115, 123, 119, 128, 118, 115, 107, 114, 108, 93, 61, 0, - 51, 36, 12, 14, 10, 6, 12, 10, 16, 14, 18, 59, 80, 61, 84, 233, - 230, 178, 103, 100, 108, 114, 126, 134, 148, 161, 167, 173, 174, 162, 157, 143, - 128, 132, 111, 13, 17, 18, 33, 40, 49, 57, 61, 56, 67, 53, 49, 34, - 63, 77, 79, 63, 77, 75, 69, 91, 197, 237, 237, 208, 122, 103, 63, 34, - 32, 36, 36, 42, 36, 48, 63, 212, 218, 206, 130, 128, 142, 167, 162, 154, - 148, 147, 119, 115, 102, 24, 14, 14, 22, 30, 38, 36, 45, 46, 37, 16, - 69, 89, 69, 221, 237, 232, 118, 106, 116, 126, 138, 153, 165, 162, 159, 116, - 32, 16, 14, 10, 17, 21, 12, 34, 67, 206, 212, 201, 130, 126, 130, 140, - 138, 130, 134, 132, 114, 85, 17, 16, 13, 24, 28, 34, 32, 30, 57, 233, - 226, 220, 112, 108, 119, 131, 140, 153, 161, 163, 169, 161, 155, 146, 75, 14, - 13, 14, 12, 12, 16, 13, 12, 38, 49, 55, 65, 68, 45, 59, 42, 40, - 34, 37, 158, 209, 216, 201, 135, 107, 120, 134, 147, 159, 163, 175, 181, 185, - 191, 197, 208, 130, 42, 20, 18, 22, 41, 81, 159, 221, 212, 206, 182, 206, - 210, 213, 205, 193, 177, 170, 161, 147, 134, 123, 122, 107, 52, 41, 32, 36, - 45, 48, 42, 21, 42, 29, 57, 44, 36, 60, 210, 226, 224, 112, 107, 118, - 131, 138, 153, 162, 158, 166, 165, 159, 144, 81, 21, 16, 16, 17, 21, 17, - 14, 14, 13, 14, 13, 12, 13, 9, 41, 42, 25, 38, 38, 34, 36, 34, - 34, 24, 21, 1, 29, 45, 51, 64, 79, 124, 155, 119, 100, 119, 139, 154, - 162, 173, 177, 183, 187, 183, 182, 186, 195, 191, 185, 189, 201, 194, 186, 179, - 173, 166, 165, 157, 150, 139, 120, 8, 12, 8, 10, 16, 2, 60, 59, 60, - 53, 48, 53, 55, 84, 174, 167, 102, 104, 115, 136, 148, 155, 157, 155, 151, - 148, 122, 123, 123, 126, 123, 65, 30, 30, 36, 40, 64, 64, 73, 55, 61, - 100, 111, 114, 116, 110, 114, 114, 107, 100, 89, 44, 186, 225, 233, 197, 150, - 102, 95, 95, 68, 34, 28, 34, 52, 60, 73, 65, 76, 67, 79, 238, 240, - 222, 104, 93, 102, 116, 126, 136, 157, 167, 165, 162, 155, 143, 142, 124, 22, - 20, 22, 13, 17, 8, 22, 24, 12, 29, 34, 28, 49, 81, 106, 226, 229, - 221, 128, 104, 111, 127, 128, 127, 138, 140, 139, 151, 150, 150, 148, 127, 41, - 29, 25, 21, 33, 42, 56, 69, 80, 191, 214, 193, 142, 132, 140, 157, 163, - 166, 169, 174, 181, 189, 190, 189, 182, 140, 49, 28, 42, 55, 69, 69, 79, - 194, 225, 212, 174, 175, 185, 173, 161, 157, 150, 147, 144, 130, 122, 120, 76, - 36, 36, 33, 63, 89, 100, 77, 80, 71, 187, 236, 241, 181, 128, 132, 139, - 142, 136, 148, 158, 162, 162, 53, 26, 21, 17, 24, 32, 49, 77, 213, 220, - 218, 173, 173, 174, 167, 171, 147, 135, 123, 85, 28, 25, 28, 32, 48, 33, - 46, 30, 80, 88, 77, 85, 84, 85, 84, 87, 83, 83, 60, 32, 96, 108, - 110, 100, 115, 106, 99, 95, 106, 102, 85, 40, 0, 44, 14, 18, 13, 24, - 12, 30, 12, 17, 17, 16, 60, 77, 71, 84, 237, 238, 220, 104, 100, 106, - 114, 114, 134, 153, 162, 173, 175, 167, 157, 147, 132, 127, 123, 107, 16, 20, - 20, 30, 44, 44, 53, 57, 57, 63, 51, 48, 34, 61, 80, 79, 69, 67, - 73, 72, 107, 220, 237, 241, 209, 126, 100, 52, 32, 26, 38, 29, 42, 41, - 38, 53, 214, 213, 206, 126, 128, 140, 159, 154, 153, 144, 136, 118, 114, 97, - 25, 12, 13, 18, 26, 37, 34, 38, 65, 36, 13, 76, 87, 80, 214, 234, - 226, 122, 107, 116, 127, 140, 154, 158, 161, 162, 131, 41, 16, 17, 17, 16, - 22, 12, 30, 60, 206, 205, 199, 122, 127, 130, 140, 131, 132, 130, 132, 114, - 80, 16, 17, 10, 29, 25, 26, 25, 29, 55, 230, 228, 220, 114, 107, 118, - 128, 139, 153, 162, 166, 166, 158, 155, 140, 53, 13, 13, 13, 13, 10, 9, - 16, 12, 49, 55, 49, 44, 38, 44, 41, 41, 38, 30, 37, 165, 208, 201, - 191, 119, 108, 120, 134, 147, 166, 166, 178, 182, 185, 191, 197, 201, 116, 37, - 24, 18, 18, 33, 60, 135, 222, 214, 208, 190, 204, 208, 209, 208, 201, 179, - 174, 161, 153, 135, 126, 119, 112, 72, 45, 45, 36, 40, 49, 42, 38, 29, - 25, 25, 26, 25, 57, 197, 225, 225, 115, 107, 118, 131, 136, 153, 159, 158, - 165, 162, 154, 136, 59, 17, 16, 16, 20, 18, 20, 16, 13, 13, 12, 12, - 12, 16, 13, 33, 36, 37, 42, 38, 38, 37, 34, 37, 20, 21, 1, 26, - 38, 52, 57, 71, 80, 162, 138, 102, 110, 135, 150, 159, 169, 177, 181, 181, - 182, 179, 183, 187, 197, 197, 183, 190, 194, 189, 183, 174, 167, 167, 157, 151, - 139, 120, 8, 9, 8, 18, 13, 5, 59, 46, 52, 60, 42, 41, 38, 48, - 100, 186, 114, 102, 112, 126, 142, 148, 155, 158, 150, 134, 122, 122, 122, 123, - 126, 99, 41, 36, 40, 42, 49, 53, 53, 57, 69, 84, 73, 75, 81, 77, - 80, 77, 108, 100, 85, 36, 170, 224, 236, 179, 120, 102, 95, 92, 67, 32, - 26, 34, 40, 42, 46, 48, 49, 75, 83, 240, 238, 229, 107, 88, 97, 115, - 116, 134, 148, 158, 163, 161, 154, 142, 140, 126, 24, 20, 9, 9, 12, 13, - 17, 5, 5, 20, 29, 30, 42, 80, 92, 224, 228, 228, 123, 99, 111, 122, - 130, 142, 143, 138, 134, 140, 135, 147, 144, 122, 45, 26, 26, 14, 36, 34, - 56, 53, 73, 182, 214, 195, 139, 130, 135, 150, 155, 162, 163, 169, 177, 183, - 187, 186, 181, 161, 73, 34, 34, 51, 60, 68, 79, 175, 226, 217, 179, 169, - 183, 187, 161, 169, 162, 154, 148, 144, 131, 122, 111, 52, 34, 32, 55, 85, - 89, 68, 69, 76, 177, 221, 240, 169, 126, 135, 142, 143, 136, 150, 166, 170, - 170, 61, 34, 20, 21, 24, 33, 65, 89, 221, 224, 221, 177, 175, 175, 169, - 170, 151, 138, 126, 81, 25, 28, 25, 28, 29, 28, 33, 40, 42, 64, 64, - 67, 68, 73, 69, 64, 77, 80, 42, 40, 37, 83, 75, 65, 60, 77, 63, - 53, 51, 72, 49, 9, 24, 16, 12, 10, 12, 17, 14, 13, 13, 22, 17, - 17, 55, 67, 73, 97, 238, 234, 226, 106, 104, 108, 114, 122, 135, 159, 161, - 167, 174, 170, 159, 146, 122, 130, 132, 103, 17, 21, 21, 26, 32, 37, 44, - 51, 53, 49, 49, 46, 32, 64, 69, 73, 63, 65, 65, 75, 130, 240, 245, - 240, 190, 120, 100, 44, 29, 28, 30, 34, 33, 36, 40, 48, 214, 218, 209, - 130, 130, 139, 153, 155, 154, 151, 119, 119, 114, 95, 20, 14, 10, 20, 24, - 32, 36, 37, 49, 30, 20, 42, 77, 76, 206, 230, 228, 122, 108, 118, 128, - 143, 154, 165, 163, 162, 139, 46, 16, 17, 17, 14, 18, 10, 49, 79, 199, - 212, 209, 128, 124, 124, 134, 134, 131, 128, 126, 112, 72, 16, 13, 12, 20, - 17, 22, 28, 30, 49, 230, 229, 225, 116, 110, 115, 124, 140, 154, 162, 166, - 167, 158, 154, 139, 45, 13, 16, 16, 25, 17, 12, 18, 17, 44, 52, 41, - 46, 46, 44, 41, 49, 41, 32, 34, 163, 202, 199, 167, 106, 111, 119, 130, - 148, 163, 166, 171, 175, 183, 189, 194, 208, 107, 37, 26, 21, 21, 21, 42, - 127, 225, 220, 210, 189, 194, 206, 206, 213, 208, 191, 174, 163, 153, 143, 134, - 119, 119, 88, 51, 52, 29, 30, 34, 29, 40, 21, 4, 18, 13, 22, 61, - 181, 221, 226, 115, 108, 119, 131, 135, 151, 159, 161, 163, 159, 151, 130, 52, - 20, 16, 18, 24, 20, 25, 14, 18, 18, 20, 18, 21, 20, 14, 14, 30, - 51, 17, 20, 29, 30, 26, 32, 24, 21, 1, 25, 29, 34, 32, 59, 61, - 99, 153, 104, 99, 127, 143, 157, 166, 173, 174, 177, 177, 181, 182, 185, 187, - 195, 194, 185, 189, 189, 185, 178, 170, 167, 158, 154, 140, 122, 9, 9, 6, - 10, 4, 2, 55, 63, 68, 64, 61, 72, 68, 64, 49, 148, 167, 110, 106, - 112, 130, 142, 147, 153, 147, 138, 127, 122, 115, 126, 127, 120, 63, 40, 30, - 33, 34, 36, 33, 33, 37, 40, 40, 48, 53, 60, 64, 65, 80, 97, 92, - 38, 171, 220, 230, 169, 112, 93, 93, 91, 65, 30, 20, 26, 36, 36, 36, - 42, 42, 68, 68, 240, 237, 226, 107, 99, 96, 115, 127, 127, 143, 155, 166, - 162, 151, 142, 142, 118, 24, 24, 24, 17, 17, 24, 21, 22, 22, 38, 21, - 25, 42, 72, 102, 224, 229, 224, 126, 111, 114, 123, 128, 140, 134, 136, 132, - 135, 135, 144, 140, 118, 41, 37, 25, 26, 51, 67, 63, 65, 68, 171, 209, - 205, 144, 126, 134, 146, 153, 155, 162, 165, 170, 178, 183, 185, 182, 173, 95, - 38, 26, 40, 55, 64, 73, 153, 226, 220, 183, 169, 177, 187, 183, 154, 169, - 159, 155, 143, 144, 130, 123, 85, 37, 37, 52, 59, 65, 60, 76, 72, 134, - 226, 240, 169, 131, 136, 146, 142, 143, 157, 167, 173, 175, 68, 41, 26, 22, - 49, 64, 65, 100, 222, 226, 224, 183, 175, 178, 171, 171, 155, 140, 124, 89, - 24, 22, 22, 8, 6, 5, 8, 8, 20, 18, 9, 9, 18, 20, 18, 17, - 24, 28, 26, 38, 13, 13, 8, 10, 13, 14, 4, 9, 13, 14, 2, 8, - 38, 5, 30, 42, 48, 49, 56, 55, 53, 51, 44, 18, 77, 72, 77, 108, - 237, 238, 226, 106, 104, 111, 116, 127, 140, 155, 158, 163, 167, 171, 158, 146, - 126, 130, 127, 99, 21, 24, 21, 24, 29, 28, 29, 32, 33, 38, 37, 33, - 32, 55, 60, 53, 55, 63, 75, 75, 190, 241, 245, 236, 166, 115, 97, 37, - 28, 24, 20, 22, 25, 29, 40, 53, 220, 222, 208, 128, 123, 123, 144, 151, - 151, 144, 116, 108, 118, 88, 18, 12, 12, 14, 21, 26, 29, 28, 30, 28, - 16, 21, 80, 81, 199, 226, 226, 123, 110, 119, 128, 142, 153, 165, 167, 166, - 146, 68, 24, 18, 18, 10, 17, 29, 59, 112, 208, 214, 197, 126, 122, 123, - 130, 130, 134, 130, 123, 111, 65, 13, 12, 9, 12, 14, 13, 29, 34, 45, - 229, 233, 228, 114, 106, 114, 124, 140, 154, 162, 169, 166, 157, 151, 140, 42, - 13, 16, 16, 20, 26, 24, 13, 12, 26, 29, 25, 28, 34, 33, 28, 28, - 34, 37, 41, 150, 201, 183, 144, 100, 110, 116, 130, 147, 165, 171, 178, 173, - 183, 185, 187, 204, 131, 42, 29, 17, 26, 30, 52, 131, 222, 221, 216, 191, - 178, 202, 208, 208, 206, 194, 174, 166, 157, 151, 136, 118, 119, 102, 56, 56, - 44, 37, 33, 29, 4, 16, 12, 17, 13, 21, 72, 174, 228, 224, 115, 110, - 120, 131, 135, 151, 159, 161, 165, 158, 151, 131, 51, 18, 20, 22, 17, 17, - 14, 13, 12, 12, 9, 9, 8, 5, 14, 14, 5, 14, 10, 9, 5, 6, - 14, 22, 22, 16, 2, 28, 29, 32, 29, 25, 33, 67, 136, 122, 95, 120, - 140, 153, 162, 167, 170, 170, 169, 170, 171, 174, 183, 191, 198, 187, 186, 193, - 186, 178, 170, 167, 158, 154, 142, 123, 6, 6, 6, 10, 5, 4, 143, 134, - 119, 119, 119, 111, 118, 75, 69, 89, 161, 114, 104, 107, 115, 128, 143, 143, - 142, 134, 140, 140, 128, 116, 123, 127, 108, 51, 45, 59, 64, 67, 60, 64, - 71, 77, 92, 81, 87, 81, 65, 68, 59, 68, 88, 42, 159, 222, 233, 189, - 114, 96, 95, 85, 53, 26, 25, 26, 49, 63, 73, 72, 69, 72, 81, 226, - 232, 224, 100, 91, 106, 118, 118, 120, 130, 151, 165, 157, 150, 139, 139, 122, - 25, 24, 26, 9, 21, 24, 24, 17, 29, 45, 26, 24, 75, 72, 124, 221, - 226, 222, 123, 112, 122, 130, 128, 138, 124, 146, 139, 138, 132, 143, 136, 111, - 41, 36, 22, 34, 60, 69, 67, 68, 69, 151, 214, 201, 150, 123, 130, 139, - 148, 151, 159, 162, 166, 174, 179, 181, 178, 175, 124, 44, 40, 41, 63, 68, - 85, 142, 221, 224, 183, 166, 173, 182, 186, 179, 154, 166, 162, 155, 146, 144, - 127, 116, 57, 37, 38, 40, 48, 67, 83, 72, 118, 217, 228, 173, 134, 142, - 151, 139, 140, 155, 175, 179, 179, 80, 32, 24, 16, 38, 64, 73, 147, 226, - 226, 224, 179, 179, 175, 169, 169, 155, 140, 126, 88, 28, 24, 24, 18, 30, - 20, 29, 18, 77, 83, 76, 65, 73, 75, 76, 69, 75, 72, 29, 17, 29, - 96, 88, 75, 73, 88, 84, 73, 68, 65, 63, 37, 4, 26, 81, 89, 93, - 83, 91, 84, 85, 53, 37, 16, 81, 81, 83, 163, 234, 238, 216, 104, 104, - 108, 118, 130, 143, 151, 151, 150, 155, 167, 159, 147, 130, 136, 138, 100, 25, - 26, 28, 36, 41, 44, 30, 42, 42, 40, 36, 46, 41, 51, 55, 65, 64, - 68, 79, 148, 234, 241, 244, 236, 144, 110, 95, 33, 25, 21, 24, 25, 32, - 36, 40, 63, 217, 221, 210, 126, 124, 127, 134, 139, 153, 142, 120, 114, 119, - 97, 20, 14, 13, 18, 21, 21, 24, 24, 20, 26, 12, 32, 67, 72, 195, - 222, 220, 126, 110, 119, 128, 139, 153, 159, 163, 165, 153, 91, 25, 20, 16, - 20, 20, 44, 69, 181, 221, 221, 206, 123, 122, 126, 127, 126, 138, 136, 118, - 111, 55, 13, 9, 9, 21, 21, 28, 34, 36, 56, 229, 228, 226, 115, 106, - 118, 130, 142, 153, 163, 167, 163, 155, 147, 142, 46, 17, 20, 29, 36, 42, - 40, 20, 17, 20, 18, 26, 18, 22, 20, 25, 16, 24, 20, 26, 138, 197, - 187, 131, 100, 112, 116, 128, 131, 162, 171, 169, 173, 177, 187, 191, 202, 150, - 56, 33, 24, 40, 32, 75, 135, 224, 222, 218, 189, 174, 193, 206, 205, 202, - 195, 178, 173, 157, 158, 142, 127, 120, 110, 67, 48, 57, 55, 48, 33, 5, - 21, 85, 115, 88, 85, 122, 194, 216, 221, 111, 110, 116, 130, 130, 147, 157, - 162, 159, 158, 148, 134, 55, 22, 24, 36, 42, 64, 76, 81, 81, 77, 88, - 84, 77, 33, 14, 45, 63, 61, 53, 57, 57, 38, 16, 8, 6, 17, 20, - 13, 17, 17, 24, 24, 17, 30, 102, 134, 100, 99, 134, 140, 150, 157, 153, - 155, 150, 151, 139, 146, 146, 183, 197, 205, 178, 191, 186, 177, 169, 166, 157, - 153, 143, 119, 6, 6, 6, 6, 22, 24, 144, 124, 136, 126, 124, 136, 89, - 103, 72, 36, 158, 140, 110, 106, 108, 108, 118, 130, 132, 143, 136, 134, 142, - 132, 122, 131, 122, 95, 49, 46, 37, 57, 65, 65, 80, 91, 115, 97, 102, - 103, 91, 83, 92, 96, 89, 60, 181, 230, 236, 186, 114, 92, 89, 71, 38, - 24, 25, 26, 59, 69, 69, 71, 67, 71, 83, 210, 225, 222, 95, 89, 106, - 119, 118, 118, 127, 139, 159, 157, 148, 136, 138, 123, 33, 29, 24, 20, 36, - 49, 67, 72, 73, 80, 76, 73, 60, 85, 191, 214, 221, 220, 120, 104, 114, - 115, 130, 139, 119, 130, 138, 142, 134, 140, 139, 115, 36, 29, 26, 32, 65, - 60, 63, 59, 68, 132, 206, 204, 158, 120, 128, 131, 140, 151, 157, 163, 163, - 171, 177, 177, 174, 174, 148, 69, 40, 37, 72, 75, 77, 120, 212, 221, 189, - 163, 169, 178, 186, 187, 163, 153, 165, 167, 157, 151, 139, 126, 100, 64, 60, - 63, 87, 91, 89, 79, 97, 199, 225, 175, 140, 144, 154, 138, 142, 157, 179, - 186, 185, 130, 56, 26, 13, 48, 71, 87, 175, 230, 229, 225, 179, 178, 177, - 170, 166, 155, 140, 126, 81, 25, 22, 22, 34, 32, 33, 32, 17, 91, 91, - 80, 63, 59, 68, 60, 67, 71, 75, 37, 13, 73, 93, 76, 81, 81, 77, - 84, 75, 81, 73, 77, 34, 4, 77, 91, 87, 87, 77, 79, 64, 76, 64, - 51, 14, 84, 85, 85, 186, 238, 240, 220, 104, 103, 107, 116, 132, 146, 157, - 154, 140, 150, 151, 147, 126, 126, 139, 140, 100, 28, 28, 25, 38, 29, 41, - 46, 46, 53, 57, 59, 53, 61, 72, 73, 80, 85, 92, 131, 204, 242, 244, - 241, 213, 122, 111, 68, 29, 22, 21, 26, 32, 30, 38, 41, 71, 220, 225, - 220, 119, 118, 128, 114, 130, 131, 131, 114, 119, 118, 103, 21, 13, 13, 20, - 25, 38, 34, 40, 30, 26, 9, 88, 80, 81, 173, 218, 214, 131, 112, 119, - 127, 138, 147, 162, 163, 167, 167, 130, 40, 24, 18, 24, 40, 53, 89, 194, - 222, 222, 208, 123, 122, 124, 122, 131, 128, 126, 118, 100, 29, 12, 8, 14, - 28, 32, 32, 37, 33, 67, 226, 229, 228, 116, 107, 116, 126, 140, 153, 162, - 167, 159, 150, 144, 132, 59, 25, 17, 30, 46, 53, 53, 38, 13, 28, 91, - 88, 85, 81, 91, 81, 81, 80, 80, 48, 122, 187, 183, 120, 100, 114, 119, - 123, 124, 150, 155, 173, 169, 166, 179, 189, 193, 194, 107, 46, 40, 46, 53, - 123, 194, 226, 224, 220, 183, 173, 187, 197, 198, 197, 195, 171, 171, 163, 154, - 154, 135, 120, 120, 72, 69, 88, 130, 118, 36, 10, 67, 123, 111, 120, 142, - 151, 210, 220, 208, 112, 108, 118, 127, 124, 143, 153, 161, 161, 154, 147, 132, - 61, 26, 21, 42, 73, 88, 85, 80, 84, 85, 85, 85, 88, 57, 20, 59, - 71, 69, 69, 64, 65, 60, 60, 48, 17, 8, 20, 36, 83, 89, 57, 72, - 77, 64, 34, 144, 122, 91, 112, 124, 132, 139, 142, 120, 122, 130, 67, 55, - 77, 162, 197, 209, 185, 182, 185, 175, 167, 165, 157, 148, 139, 114, 5, 8, - 9, 17, 57, 64, 123, 120, 99, 124, 122, 112, 79, 102, 71, 30, 143, 139, - 103, 107, 106, 106, 104, 106, 112, 132, 147, 139, 132, 140, 127, 120, 124, 116, - 84, 46, 55, 63, 34, 57, 76, 111, 102, 95, 97, 87, 83, 79, 92, 72, - 56, 123, 210, 234, 230, 199, 112, 88, 81, 59, 32, 22, 25, 24, 56, 71, - 63, 63, 57, 71, 115, 228, 222, 204, 100, 100, 108, 120, 124, 119, 126, 132, - 148, 153, 143, 128, 139, 124, 30, 30, 9, 61, 51, 59, 60, 73, 84, 76, - 75, 60, 80, 102, 221, 220, 220, 209, 123, 97, 107, 118, 142, 143, 127, 116, - 124, 131, 128, 139, 138, 114, 49, 26, 26, 33, 65, 65, 75, 52, 60, 110, - 197, 199, 165, 122, 127, 127, 140, 144, 154, 161, 157, 165, 169, 174, 170, 170, - 161, 92, 44, 30, 61, 73, 76, 102, 194, 218, 198, 163, 166, 177, 185, 189, - 182, 153, 154, 166, 170, 159, 150, 138, 128, 96, 87, 84, 87, 83, 77, 75, - 81, 179, 229, 178, 142, 150, 158, 138, 140, 169, 181, 187, 190, 158, 42, 26, - 25, 61, 80, 96, 186, 233, 230, 225, 179, 178, 170, 169, 166, 158, 140, 123, - 76, 24, 22, 21, 30, 41, 42, 30, 18, 84, 99, 85, 96, 83, 83, 99, - 83, 73, 73, 37, 34, 89, 99, 77, 83, 76, 64, 57, 77, 63, 49, 73, - 25, 1, 76, 95, 80, 65, 59, 67, 75, 80, 56, 41, 17, 84, 85, 91, - 208, 238, 233, 213, 108, 104, 110, 114, 126, 147, 157, 159, 159, 153, 138, 131, - 122, 134, 138, 144, 104, 56, 29, 28, 40, 34, 40, 53, 56, 48, 45, 49, - 48, 69, 85, 95, 100, 93, 126, 198, 241, 246, 244, 236, 155, 118, 108, 55, - 26, 24, 20, 29, 33, 32, 37, 41, 69, 221, 222, 217, 127, 128, 123, 131, - 116, 110, 106, 111, 122, 112, 102, 21, 17, 12, 22, 32, 40, 41, 42, 44, - 24, 10, 81, 92, 77, 139, 208, 216, 147, 114, 120, 128, 139, 146, 155, 162, - 159, 167, 150, 103, 48, 45, 49, 72, 100, 170, 197, 221, 214, 214, 123, 120, - 124, 124, 124, 131, 119, 114, 69, 17, 13, 6, 16, 26, 30, 38, 44, 40, - 79, 224, 226, 225, 114, 110, 119, 134, 142, 153, 163, 167, 158, 151, 147, 134, - 71, 26, 18, 34, 53, 46, 49, 55, 13, 99, 97, 88, 84, 80, 92, 91, - 84, 87, 75, 52, 59, 177, 175, 118, 103, 114, 118, 122, 127, 130, 162, 170, - 178, 158, 173, 179, 189, 202, 155, 76, 52, 68, 112, 135, 213, 222, 224, 220, - 185, 167, 174, 183, 179, 183, 185, 175, 171, 166, 162, 161, 151, 127, 120, 81, - 85, 127, 136, 131, 28, 5, 76, 126, 112, 136, 143, 158, 214, 221, 217, 108, - 107, 118, 128, 120, 134, 154, 165, 158, 151, 143, 131, 88, 32, 25, 45, 79, - 76, 81, 73, 84, 80, 69, 72, 85, 88, 18, 61, 68, 63, 41, 32, 29, - 32, 40, 59, 34, 9, 14, 79, 79, 79, 80, 83, 68, 61, 56, 41, 45, - 52, 72, 102, 97, 107, 89, 65, 42, 38, 28, 33, 65, 139, 197, 209, 191, - 175, 183, 174, 169, 166, 155, 148, 139, 106, 4, 8, 13, 26, 41, 44, 134, - 102, 96, 102, 83, 100, 81, 75, 64, 36, 139, 134, 97, 115, 107, 103, 106, - 104, 102, 108, 131, 150, 139, 128, 138, 123, 128, 120, 116, 79, 63, 60, 57, - 53, 73, 108, 89, 87, 83, 79, 80, 75, 76, 91, 132, 183, 226, 232, 229, - 185, 110, 88, 64, 36, 25, 21, 25, 24, 41, 65, 64, 52, 57, 85, 191, - 228, 225, 208, 104, 99, 108, 123, 124, 138, 126, 120, 135, 148, 146, 134, 138, - 114, 33, 29, 14, 51, 53, 51, 76, 59, 59, 61, 57, 57, 80, 153, 212, - 216, 220, 209, 123, 118, 106, 116, 132, 131, 142, 131, 115, 115, 124, 130, 138, - 116, 55, 24, 21, 33, 68, 81, 57, 56, 64, 92, 185, 199, 163, 124, 119, - 124, 136, 142, 150, 158, 155, 157, 159, 165, 169, 163, 163, 120, 53, 51, 68, - 67, 81, 89, 151, 217, 201, 162, 162, 173, 186, 186, 187, 173, 148, 153, 167, - 165, 159, 148, 132, 127, 119, 112, 92, 77, 81, 79, 68, 114, 216, 189, 147, - 148, 166, 140, 140, 174, 183, 194, 197, 179, 75, 32, 25, 30, 85, 104, 204, - 233, 233, 228, 175, 177, 171, 167, 170, 159, 139, 115, 48, 22, 22, 13, 33, - 32, 38, 34, 22, 52, 71, 95, 59, 84, 79, 77, 77, 81, 71, 40, 30, - 60, 97, 87, 91, 59, 59, 76, 53, 59, 64, 64, 26, 0, 76, 84, 65, - 73, 83, 73, 76, 63, 51, 46, 24, 71, 76, 102, 218, 237, 236, 210, 111, - 107, 111, 112, 122, 143, 155, 163, 157, 151, 150, 147, 130, 135, 144, 144, 111, - 87, 32, 29, 40, 32, 34, 34, 38, 41, 40, 40, 63, 68, 97, 102, 95, - 127, 185, 234, 244, 248, 245, 221, 128, 114, 100, 41, 24, 20, 21, 30, 30, - 30, 37, 55, 110, 205, 216, 217, 128, 112, 119, 123, 114, 118, 107, 107, 119, - 120, 102, 22, 14, 16, 17, 18, 40, 44, 40, 37, 29, 8, 88, 88, 75, - 95, 189, 213, 181, 118, 116, 128, 135, 144, 151, 162, 161, 171, 171, 151, 107, - 107, 128, 159, 187, 202, 197, 225, 209, 209, 124, 123, 124, 126, 132, 126, 114, - 92, 24, 9, 10, 9, 24, 21, 28, 41, 40, 40, 81, 218, 228, 222, 112, - 104, 114, 123, 142, 153, 161, 166, 158, 150, 143, 134, 111, 36, 18, 34, 45, - 48, 45, 41, 13, 102, 100, 115, 95, 85, 91, 73, 73, 79, 85, 72, 36, - 122, 174, 127, 97, 114, 119, 123, 130, 126, 150, 155, 167, 155, 166, 171, 183, - 191, 202, 165, 131, 150, 177, 213, 221, 224, 218, 218, 181, 166, 163, 173, 177, - 174, 179, 177, 177, 170, 162, 154, 161, 144, 124, 87, 93, 114, 143, 123, 24, - 5, 64, 108, 126, 124, 140, 171, 218, 216, 220, 110, 106, 116, 131, 126, 142, - 154, 163, 159, 151, 140, 134, 108, 42, 32, 45, 76, 76, 75, 83, 92, 89, - 83, 71, 87, 63, 28, 53, 67, 60, 34, 37, 36, 25, 24, 57, 45, 10, - 13, 83, 67, 73, 71, 64, 63, 49, 40, 41, 34, 37, 32, 34, 49, 44, - 29, 26, 29, 24, 18, 36, 64, 147, 205, 216, 194, 171, 181, 177, 170, 166, - 158, 144, 136, 97, 2, 6, 12, 28, 4, 2, 132, 97, 107, 107, 96, 89, - 119, 81, 64, 30, 142, 128, 100, 80, 104, 112, 106, 106, 106, 102, 111, 131, - 142, 139, 138, 135, 114, 123, 123, 114, 97, 84, 88, 79, 97, 96, 115, 93, - 84, 81, 83, 93, 132, 181, 214, 232, 236, 232, 208, 163, 96, 75, 46, 28, - 21, 21, 25, 28, 51, 60, 61, 59, 67, 122, 214, 218, 226, 204, 93, 93, - 111, 119, 120, 136, 115, 119, 123, 142, 136, 131, 136, 116, 37, 33, 45, 80, - 77, 49, 60, 51, 67, 53, 56, 52, 79, 165, 210, 213, 208, 191, 124, 104, - 112, 128, 142, 136, 144, 147, 135, 116, 112, 127, 132, 118, 49, 37, 37, 40, - 69, 73, 67, 52, 57, 64, 179, 201, 163, 116, 123, 123, 135, 140, 147, 157, - 161, 148, 148, 153, 153, 161, 162, 138, 84, 55, 40, 53, 75, 77, 127, 208, - 209, 163, 161, 171, 179, 185, 187, 187, 177, 146, 153, 171, 165, 154, 148, 138, - 128, 130, 132, 106, 83, 72, 72, 83, 181, 213, 163, 153, 165, 140, 143, 179, - 189, 201, 201, 194, 140, 69, 29, 30, 92, 148, 214, 233, 233, 229, 183, 178, - 166, 167, 167, 158, 134, 103, 29, 22, 21, 17, 40, 32, 34, 37, 25, 32, - 93, 99, 85, 89, 83, 80, 76, 73, 67, 38, 34, 63, 100, 69, 77, 63, - 80, 63, 52, 63, 64, 61, 34, 6, 79, 88, 61, 64, 64, 52, 67, 53, - 42, 40, 40, 72, 88, 157, 222, 241, 233, 208, 111, 110, 115, 107, 118, 138, - 151, 159, 165, 161, 154, 148, 142, 126, 131, 147, 130, 93, 33, 34, 33, 40, - 38, 53, 57, 51, 42, 46, 61, 77, 100, 96, 115, 175, 232, 241, 246, 246, - 242, 166, 116, 114, 87, 30, 21, 14, 21, 28, 29, 38, 40, 56, 171, 206, - 214, 204, 123, 116, 122, 127, 115, 115, 118, 102, 106, 119, 107, 28, 16, 13, - 16, 33, 41, 42, 34, 37, 29, 6, 80, 87, 80, 80, 115, 197, 197, 124, - 116, 124, 132, 140, 142, 150, 147, 174, 177, 175, 166, 182, 195, 198, 206, 205, - 213, 202, 209, 161, 124, 124, 132, 135, 130, 120, 114, 34, 13, 12, 8, 14, - 24, 25, 33, 36, 37, 41, 161, 221, 224, 222, 112, 99, 114, 120, 140, 148, - 159, 159, 162, 153, 147, 144, 138, 56, 30, 26, 48, 48, 45, 42, 16, 73, - 103, 115, 106, 97, 110, 91, 92, 84, 77, 84, 38, 61, 166, 143, 102, 103, - 118, 120, 124, 127, 131, 155, 157, 154, 163, 166, 178, 183, 199, 209, 205, 214, - 216, 221, 220, 218, 224, 204, 182, 161, 162, 142, 162, 167, 177, 177, 175, 177, - 167, 166, 159, 159, 140, 118, 96, 131, 139, 63, 20, 5, 56, 108, 108, 115, - 127, 155, 216, 226, 214, 110, 104, 115, 126, 120, 147, 155, 159, 155, 151, 143, - 136, 122, 63, 33, 51, 76, 72, 81, 81, 84, 83, 84, 87, 72, 75, 22, - 42, 65, 55, 26, 34, 18, 20, 29, 32, 36, 12, 16, 40, 63, 36, 52, - 53, 63, 38, 33, 29, 28, 22, 30, 29, 36, 24, 22, 25, 21, 24, 20, - 59, 65, 170, 212, 218, 182, 167, 179, 175, 170, 166, 158, 143, 132, 52, 2, - 6, 13, 38, 2, 1, 135, 111, 89, 100, 102, 87, 85, 88, 64, 26, 128, - 119, 96, 85, 71, 85, 115, 110, 106, 104, 102, 107, 132, 146, 143, 143, 136, - 118, 116, 119, 148, 126, 116, 115, 120, 124, 131, 132, 134, 134, 154, 186, 212, - 225, 236, 234, 229, 216, 186, 111, 84, 51, 30, 22, 18, 22, 26, 41, 55, - 48, 59, 61, 127, 182, 228, 225, 226, 212, 108, 93, 104, 115, 130, 132, 122, - 126, 119, 128, 130, 132, 135, 123, 91, 67, 37, 69, 80, 80, 60, 59, 64, - 77, 55, 65, 99, 185, 205, 209, 212, 155, 110, 112, 118, 126, 131, 143, 143, - 144, 143, 134, 111, 116, 130, 123, 95, 49, 44, 44, 73, 56, 59, 52, 56, - 55, 158, 198, 163, 114, 119, 123, 135, 143, 147, 154, 158, 146, 144, 139, 139, - 146, 154, 147, 100, 56, 29, 49, 68, 79, 107, 190, 209, 170, 158, 169, 178, - 181, 183, 185, 187, 177, 150, 154, 166, 163, 155, 147, 143, 132, 132, 131, 100, - 72, 77, 77, 127, 218, 175, 154, 162, 144, 179, 183, 199, 205, 204, 206, 186, - 110, 40, 45, 102, 179, 230, 232, 233, 222, 178, 177, 174, 169, 166, 146, 134, - 83, 24, 21, 21, 22, 37, 37, 32, 38, 29, 29, 81, 97, 84, 89, 77, - 76, 84, 75, 75, 46, 34, 64, 91, 76, 76, 57, 67, 52, 60, 56, 61, - 63, 32, 1, 84, 88, 52, 64, 53, 60, 44, 36, 45, 63, 59, 71, 96, - 206, 233, 228, 237, 197, 112, 115, 115, 116, 110, 127, 147, 157, 159, 161, 158, - 154, 150, 136, 139, 132, 154, 108, 89, 69, 65, 71, 73, 71, 69, 75, 75, - 69, 71, 91, 108, 96, 171, 228, 234, 238, 245, 241, 216, 122, 118, 108, 56, - 28, 21, 17, 25, 26, 34, 36, 49, 171, 208, 206, 216, 195, 110, 124, 132, - 123, 128, 130, 134, 123, 104, 120, 115, 41, 13, 12, 25, 29, 30, 40, 44, - 30, 26, 5, 79, 80, 75, 81, 84, 122, 195, 132, 118, 122, 126, 131, 134, - 134, 135, 138, 153, 182, 181, 190, 193, 204, 210, 212, 201, 206, 186, 124, 123, - 132, 134, 131, 122, 122, 57, 13, 10, 9, 5, 21, 26, 32, 41, 38, 38, - 65, 199, 213, 221, 218, 112, 102, 108, 118, 132, 144, 157, 159, 159, 155, 146, - 139, 124, 107, 46, 25, 28, 49, 46, 45, 20, 69, 103, 116, 93, 102, 110, - 71, 103, 83, 77, 76, 45, 37, 153, 175, 110, 95, 112, 122, 124, 123, 126, - 139, 140, 151, 163, 169, 170, 175, 181, 195, 194, 204, 210, 212, 216, 213, 206, - 189, 173, 161, 139, 139, 138, 142, 159, 167, 175, 174, 171, 161, 161, 162, 159, - 132, 102, 138, 91, 28, 8, 8, 53, 103, 111, 124, 138, 162, 216, 221, 217, - 115, 107, 114, 122, 122, 157, 157, 157, 155, 151, 143, 132, 123, 106, 44, 56, - 80, 85, 75, 75, 80, 80, 85, 84, 92, 84, 36, 37, 67, 55, 29, 21, - 29, 29, 32, 28, 33, 9, 16, 69, 60, 57, 49, 38, 40, 29, 34, 29, - 38, 29, 25, 36, 29, 28, 22, 22, 17, 21, 16, 53, 79, 199, 214, 217, - 162, 162, 179, 178, 170, 165, 157, 142, 130, 42, 2, 4, 12, 32, 4, 10, - 124, 116, 91, 93, 102, 107, 73, 92, 64, 30, 122, 119, 97, 91, 85, 69, - 68, 87, 111, 111, 107, 104, 106, 127, 144, 139, 130, 123, 119, 148, 165, 175, - 175, 183, 189, 185, 191, 189, 194, 206, 213, 225, 228, 232, 230, 218, 217, 177, - 127, 81, 52, 33, 24, 21, 22, 34, 42, 52, 46, 71, 120, 159, 183, 210, - 213, 220, 225, 206, 114, 87, 114, 107, 116, 130, 144, 147, 130, 122, 120, 136, - 135, 140, 119, 106, 108, 110, 116, 104, 84, 68, 55, 75, 53, 72, 140, 198, - 209, 209, 201, 153, 118, 107, 110, 126, 138, 143, 132, 147, 147, 140, 131, 110, - 123, 122, 108, 92, 57, 53, 75, 71, 59, 53, 44, 53, 124, 202, 177, 111, - 116, 124, 138, 142, 148, 157, 139, 134, 130, 127, 126, 128, 142, 146, 127, 92, - 60, 32, 56, 71, 93, 150, 204, 174, 155, 161, 171, 175, 179, 178, 181, 182, - 170, 151, 159, 166, 159, 155, 143, 132, 131, 127, 93, 75, 68, 72, 79, 178, - 210, 158, 155, 140, 185, 195, 204, 208, 210, 209, 208, 178, 124, 132, 182, 222, - 234, 233, 233, 214, 186, 179, 173, 170, 159, 136, 120, 46, 20, 18, 20, 25, - 41, 36, 45, 45, 36, 30, 85, 100, 64, 84, 77, 71, 83, 88, 77, 61, - 34, 48, 95, 65, 77, 56, 51, 51, 63, 57, 49, 65, 25, 4, 76, 81, - 51, 63, 42, 59, 59, 53, 61, 65, 75, 130, 201, 222, 234, 236, 228, 182, - 114, 119, 108, 119, 123, 112, 136, 148, 153, 155, 154, 155, 153, 151, 143, 127, - 142, 157, 108, 103, 103, 100, 97, 100, 96, 91, 91, 87, 83, 89, 128, 181, - 226, 230, 237, 241, 240, 230, 142, 116, 120, 104, 42, 22, 18, 21, 29, 33, - 32, 48, 175, 204, 209, 210, 205, 197, 119, 111, 124, 119, 138, 120, 126, 122, - 130, 112, 115, 95, 17, 22, 16, 16, 30, 41, 41, 34, 21, 10, 71, 80, - 76, 67, 72, 83, 103, 173, 170, 124, 124, 123, 126, 127, 128, 128, 130, 130, - 131, 140, 159, 163, 166, 177, 182, 159, 124, 128, 127, 126, 124, 122, 115, 46, - 13, 9, 8, 4, 6, 14, 21, 30, 40, 37, 44, 158, 213, 214, 217, 212, - 114, 103, 114, 120, 134, 143, 153, 161, 161, 157, 150, 151, 134, 136, 100, 63, - 40, 33, 34, 48, 21, 71, 103, 111, 110, 92, 93, 73, 79, 96, 73, 79, - 42, 29, 124, 167, 135, 95, 103, 118, 123, 126, 120, 122, 126, 150, 161, 158, - 167, 163, 162, 158, 153, 173, 185, 189, 197, 194, 183, 158, 136, 140, 139, 136, - 138, 139, 136, 139, 151, 157, 154, 151, 158, 148, 140, 114, 131, 91, 28, 0, - 9, 5, 46, 91, 120, 142, 138, 189, 205, 216, 216, 118, 106, 108, 123, 144, - 154, 166, 155, 153, 151, 142, 134, 124, 123, 91, 56, 44, 55, 73, 79, 87, - 80, 77, 89, 68, 103, 29, 20, 56, 37, 42, 30, 30, 37, 33, 25, 33, - 10, 12, 59, 61, 63, 65, 65, 57, 48, 44, 33, 40, 37, 18, 34, 37, - 37, 28, 25, 21, 20, 30, 40, 108, 210, 224, 217, 154, 157, 173, 177, 170, - 163, 157, 144, 128, 30, 2, 4, 10, 30, 4, 1, 118, 85, 85, 79, 81, - 73, 73, 72, 60, 30, 114, 112, 97, 84, 81, 80, 68, 53, 61, 84, 104, - 107, 103, 106, 112, 120, 128, 135, 135, 139, 139, 150, 171, 185, 194, 198, 208, - 204, 209, 216, 220, 221, 217, 217, 214, 197, 158, 118, 79, 48, 32, 24, 20, - 20, 30, 38, 53, 42, 128, 166, 202, 212, 199, 206, 208, 213, 209, 154, 110, - 89, 135, 116, 124, 131, 132, 126, 132, 139, 132, 127, 146, 135, 136, 130, 139, - 144, 159, 140, 127, 100, 80, 46, 45, 75, 163, 199, 202, 201, 206, 144, 119, - 115, 116, 144, 146, 138, 138, 132, 131, 132, 139, 128, 108, 123, 119, 106, 81, - 106, 91, 84, 51, 59, 48, 51, 89, 185, 187, 128, 108, 124, 135, 139, 138, - 138, 134, 127, 124, 118, 118, 116, 118, 132, 134, 108, 75, 26, 42, 65, 79, - 104, 179, 193, 151, 155, 163, 171, 174, 175, 175, 181, 179, 158, 150, 163, 165, - 153, 138, 136, 128, 103, 64, 41, 63, 68, 72, 99, 204, 170, 163, 147, 187, - 195, 209, 210, 213, 209, 216, 210, 205, 209, 226, 230, 230, 233, 232, 201, 181, - 182, 177, 166, 140, 131, 85, 25, 20, 18, 21, 30, 42, 38, 46, 41, 38, - 25, 71, 73, 92, 76, 85, 93, 91, 88, 77, 73, 33, 38, 64, 85, 88, - 49, 55, 49, 57, 63, 63, 60, 26, 1, 72, 73, 69, 52, 60, 53, 59, - 68, 106, 167, 187, 218, 216, 232, 221, 226, 224, 150, 116, 118, 124, 130, 142, - 123, 116, 135, 140, 142, 142, 144, 148, 148, 153, 142, 138, 148, 159, 146, 169, - 179, 189, 198, 204, 208, 212, 217, 220, 217, 222, 222, 226, 232, 237, 237, 224, - 154, 118, 122, 118, 81, 26, 18, 18, 21, 30, 36, 76, 150, 221, 206, 201, - 214, 216, 158, 124, 128, 135, 130, 131, 124, 138, 119, 122, 111, 112, 96, 67, - 48, 20, 17, 12, 36, 41, 32, 28, 9, 69, 71, 65, 65, 72, 61, 79, - 91, 99, 107, 112, 151, 155, 150, 147, 147, 143, 140, 136, 131, 131, 128, 128, - 128, 130, 127, 124, 124, 122, 120, 118, 81, 29, 12, 9, 9, 4, 4, 22, - 20, 32, 37, 38, 41, 136, 197, 206, 209, 214, 205, 108, 104, 107, 120, 134, - 136, 139, 146, 153, 153, 148, 140, 146, 138, 142, 112, 93, 79, 59, 32, 21, - 55, 104, 95, 107, 80, 99, 95, 93, 97, 73, 77, 59, 25, 81, 148, 177, - 114, 102, 110, 118, 119, 122, 123, 124, 127, 130, 132, 131, 132, 140, 130, 128, - 126, 128, 130, 127, 126, 128, 131, 131, 136, 136, 139, 142, 139, 139, 142, 135, - 130, 130, 128, 127, 123, 135, 138, 99, 26, 0, 5, 5, 5, 45, 89, 97, - 132, 191, 197, 195, 213, 206, 115, 111, 116, 120, 147, 151, 153, 144, 153, 150, - 143, 136, 127, 122, 120, 119, 97, 67, 63, 49, 84, 79, 75, 76, 65, 89, - 32, 13, 72, 26, 26, 28, 41, 36, 38, 25, 30, 12, 12, 51, 55, 56, - 52, 40, 42, 30, 24, 20, 24, 26, 18, 30, 41, 36, 29, 32, 34, 14, - 42, 51, 138, 220, 222, 210, 146, 151, 161, 173, 173, 163, 157, 143, 126, 25, - 4, 4, 12, 24, 6, 2, 77, 76, 75, 79, 73, 73, 80, 67, 61, 26, - 93, 104, 97, 88, 99, 85, 77, 68, 55, 48, 53, 71, 95, 104, 106, 104, - 104, 111, 108, 116, 118, 122, 127, 142, 165, 177, 186, 201, 205, 202, 202, 202, - 199, 181, 158, 118, 84, 65, 44, 30, 24, 18, 18, 21, 29, 38, 38, 104, - 225, 193, 202, 194, 206, 201, 210, 177, 140, 118, 104, 115, 115, 116, 112, 118, - 111, 116, 115, 120, 119, 123, 127, 120, 130, 142, 134, 138, 138, 135, 139, 148, - 79, 45, 63, 96, 216, 190, 193, 197, 202, 138, 122, 126, 136, 119, 140, 138, - 135, 123, 126, 123, 123, 123, 120, 120, 122, 108, 114, 108, 102, 77, 49, 51, - 52, 46, 57, 144, 191, 151, 106, 123, 127, 131, 134, 132, 127, 126, 119, 118, - 114, 110, 107, 103, 108, 122, 85, 72, 65, 49, 61, 77, 130, 197, 161, 151, - 158, 161, 159, 166, 169, 174, 178, 174, 155, 153, 159, 147, 136, 136, 115, 69, - 34, 33, 32, 71, 65, 63, 157, 182, 174, 134, 182, 197, 198, 205, 210, 217, - 217, 221, 220, 222, 230, 228, 230, 226, 217, 190, 186, 179, 175, 161, 134, 99, - 38, 22, 20, 18, 17, 34, 40, 37, 40, 45, 41, 26, 56, 79, 92, 89, - 73, 76, 71, 83, 65, 41, 33, 32, 64, 89, 73, 46, 60, 57, 59, 63, - 72, 38, 29, 4, 64, 69, 59, 67, 32, 52, 79, 185, 210, 205, 213, 234, - 212, 225, 240, 221, 190, 120, 118, 119, 138, 140, 131, 139, 131, 127, 127, 124, - 127, 130, 123, 127, 130, 136, 146, 143, 132, 167, 170, 182, 190, 198, 202, 208, - 213, 216, 218, 222, 224, 229, 229, 230, 226, 199, 138, 115, 118, 124, 114, 49, - 20, 17, 18, 28, 34, 83, 181, 190, 190, 202, 208, 228, 205, 140, 120, 111, - 119, 116, 131, 126, 115, 128, 115, 114, 126, 96, 83, 73, 63, 44, 16, 21, - 40, 28, 28, 8, 64, 73, 61, 46, 38, 48, 52, 53, 51, 56, 57, 75, - 96, 103, 106, 103, 100, 107, 111, 111, 112, 111, 110, 111, 118, 115, 114, 107, - 102, 72, 30, 17, 9, 8, 5, 2, 4, 8, 18, 22, 40, 37, 44, 140, - 190, 197, 198, 202, 209, 147, 108, 100, 110, 126, 122, 127, 135, 136, 144, 140, - 153, 148, 138, 143, 126, 138, 148, 144, 103, 67, 38, 24, 69, 106, 85, 100, - 79, 93, 89, 97, 71, 79, 73, 20, 69, 135, 144, 150, 144, 139, 136, 143, - 138, 116, 115, 118, 118, 123, 126, 126, 123, 122, 127, 119, 102, 96, 89, 81, - 85, 97, 114, 123, 130, 134, 135, 132, 127, 132, 132, 135, 138, 136, 132, 132, - 123, 96, 28, 9, 1, 2, 5, 6, 44, 99, 132, 194, 204, 201, 198, 214, - 187, 114, 106, 120, 128, 126, 140, 147, 150, 146, 147, 143, 139, 135, 128, 120, - 118, 114, 126, 111, 76, 53, 53, 56, 68, 61, 88, 29, 12, 67, 42, 28, - 33, 45, 28, 29, 32, 22, 14, 17, 55, 71, 49, 45, 34, 33, 32, 22, - 24, 32, 20, 38, 34, 28, 20, 20, 21, 26, 14, 42, 51, 158, 220, 225, - 208, 142, 146, 150, 163, 171, 163, 155, 143, 118, 13, 5, 2, 12, 24, 14, - 17, 72, 75, 76, 80, 72, 77, 84, 85, 59, 25, 99, 99, 93, 97, 84, - 80, 72, 67, 59, 55, 45, 38, 42, 48, 65, 83, 96, 97, 103, 103, 103, - 104, 106, 111, 119, 124, 128, 135, 153, 150, 144, 142, 115, 91, 76, 57, 34, - 29, 28, 22, 17, 18, 22, 21, 42, 49, 41, 146, 191, 212, 193, 194, 178, - 155, 134, 122, 108, 89, 83, 79, 81, 85, 88, 91, 91, 95, 99, 100, 99, - 102, 104, 110, 115, 119, 118, 116, 120, 126, 126, 114, 80, 42, 72, 154, 175, - 181, 155, 158, 135, 128, 107, 110, 115, 110, 116, 115, 119, 111, 122, 123, 114, - 127, 123, 118, 108, 106, 106, 102, 93, 45, 25, 33, 48, 41, 45, 100, 171, - 178, 104, 115, 112, 115, 116, 116, 114, 118, 112, 112, 108, 106, 103, 103, 100, - 99, 91, 80, 46, 42, 48, 60, 92, 155, 173, 147, 153, 157, 155, 150, 159, - 165, 166, 170, 167, 158, 140, 136, 139, 123, 85, 46, 32, 26, 26, 49, 63, - 65, 126, 195, 175, 151, 162, 182, 195, 198, 201, 201, 201, 199, 201, 198, 199, - 199, 201, 199, 191, 182, 177, 174, 165, 139, 111, 37, 18, 18, 18, 20, 20, - 34, 32, 34, 42, 40, 41, 34, 33, 36, 40, 49, 33, 36, 42, 36, 34, - 44, 42, 38, 37, 48, 52, 57, 44, 45, 44, 42, 41, 44, 22, 2, 24, - 52, 56, 36, 40, 61, 154, 202, 198, 204, 218, 242, 212, 206, 198, 148, 120, - 114, 122, 132, 135, 134, 136, 136, 134, 132, 126, 130, 131, 128, 127, 123, 120, - 122, 123, 124, 122, 122, 123, 123, 132, 140, 159, 182, 187, 201, 201, 198, 195, - 197, 198, 185, 158, 119, 114, 116, 123, 123, 97, 25, 16, 12, 28, 32, 59, - 165, 186, 191, 201, 193, 201, 170, 139, 127, 111, 128, 115, 116, 118, 124, 107, - 112, 100, 107, 100, 120, 100, 103, 89, 79, 20, 18, 38, 26, 25, 9, 72, - 67, 34, 30, 26, 30, 29, 34, 25, 26, 21, 20, 20, 22, 22, 18, 20, - 18, 17, 17, 16, 16, 13, 14, 18, 14, 13, 10, 10, 10, 6, 6, 6, - 2, 2, 5, 13, 20, 13, 41, 33, 52, 136, 181, 181, 178, 193, 201, 171, - 122, 104, 112, 122, 116, 120, 127, 126, 128, 126, 130, 139, 135, 124, 140, 135, - 118, 115, 116, 153, 130, 37, 25, 57, 53, 57, 59, 63, 64, 68, 68, 73, - 73, 56, 16, 38, 84, 97, 88, 87, 83, 91, 95, 99, 103, 103, 99, 99, - 111, 112, 103, 99, 96, 73, 34, 13, 8, 4, 4, 5, 12, 53, 91, 100, - 104, 106, 102, 95, 96, 100, 99, 96, 95, 92, 80, 38, 16, 2, 0, 1, - 12, 10, 14, 84, 140, 179, 195, 183, 181, 201, 199, 134, 110, 114, 124, 118, - 119, 118, 127, 128, 130, 134, 130, 122, 124, 123, 123, 120, 112, 112, 128, 114, - 96, 84, 85, 76, 75, 57, 46, 14, 38, 53, 60, 45, 46, 32, 28, 29, - 24, 10, 16, 51, 40, 26, 33, 22, 16, 14, 21, 21, 21, 26, 22, 18, - 17, 13, 18, 14, 17, 37, 48, 63, 178, 225, 225, 204, 138, 143, 148, 158, - 166, 161, 154, 139, 96, 8, 4, 2, 6, 16, 10, 5, 84, 80, 79, 80, - 79, 87, 80, 73, 56, 25, 88, 95, 77, 83, 75, 75, 64, 65, 57, 56, - 49, 45, 40, 38, 33, 32, 33, 41, 46, 57, 68, 88, 88, 89, 89, 85, - 85, 80, 77, 76, 72, 63, 42, 32, 28, 24, 24, 18, 16, 16, 25, 33, - 33, 29, 37, 26, 26, 80, 126, 144, 139, 134, 135, 87, 75, 64, 59, 44, - 25, 28, 28, 24, 22, 22, 25, 26, 28, 33, 33, 30, 37, 68, 77, 84, - 81, 80, 79, 95, 88, 61, 33, 46, 68, 130, 131, 142, 139, 143, 115, 92, - 81, 81, 96, 97, 96, 93, 99, 100, 106, 103, 102, 102, 104, 99, 92, 89, - 89, 83, 49, 22, 22, 20, 24, 44, 34, 42, 103, 122, 104, 110, 88, 106, - 107, 111, 108, 110, 107, 103, 96, 96, 89, 97, 89, 92, 91, 76, 24, 26, - 59, 40, 67, 93, 157, 166, 146, 153, 151, 151, 151, 154, 154, 153, 148, 143, - 138, 138, 123, 97, 49, 32, 30, 30, 32, 38, 68, 61, 161, 183, 178, 163, - 118, 150, 181, 183, 187, 190, 189, 187, 185, 182, 175, 174, 177, 178, 177, 174, - 159, 143, 131, 103, 40, 21, 18, 18, 24, 28, 25, 30, 22, 22, 33, 34, - 38, 37, 42, 42, 56, 44, 46, 44, 48, 46, 46, 44, 44, 42, 37, 45, - 44, 30, 26, 13, 13, 20, 20, 18, 18, 2, 9, 13, 21, 38, 33, 57, - 144, 193, 209, 197, 199, 173, 143, 128, 119, 111, 120, 114, 130, 128, 128, 128, - 130, 130, 130, 126, 126, 123, 122, 122, 120, 112, 118, 119, 119, 119, 119, 116, - 119, 116, 114, 112, 111, 111, 112, 115, 116, 116, 114, 111, 111, 110, 111, 111, - 118, 120, 126, 119, 49, 13, 14, 17, 28, 30, 128, 186, 171, 182, 197, 169, - 135, 128, 111, 110, 96, 103, 100, 97, 104, 100, 97, 88, 93, 93, 92, 89, - 97, 91, 83, 76, 20, 21, 33, 26, 20, 12, 61, 65, 30, 24, 24, 24, - 22, 22, 20, 17, 14, 12, 13, 12, 12, 10, 12, 9, 9, 9, 6, 6, - 6, 8, 6, 5, 4, 5, 2, 2, 2, 4, 8, 6, 9, 17, 13, 16, - 26, 41, 41, 87, 166, 173, 185, 177, 154, 140, 115, 104, 114, 110, 116, 110, - 114, 111, 110, 112, 119, 124, 126, 119, 116, 126, 126, 114, 111, 120, 126, 100, - 24, 46, 55, 52, 52, 46, 55, 53, 55, 51, 60, 56, 28, 17, 20, 24, - 21, 16, 13, 14, 12, 9, 9, 10, 9, 8, 6, 8, 5, 5, 5, 5, - 4, 2, 2, 2, 1, 1, 2, 4, 2, 4, 2, 1, 1, 2, 2, 1, - 1, 2, 1, 1, 1, 2, 0, 0, 0, 1, 4, 8, 12, 14, 89, 157, - 198, 189, 195, 185, 154, 126, 115, 108, 112, 115, 108, 106, 114, 118, 116, 120, - 123, 119, 115, 112, 112, 108, 100, 104, 114, 111, 106, 77, 69, 56, 60, 51, - 33, 29, 25, 26, 25, 29, 28, 28, 25, 36, 28, 24, 13, 9, 45, 41, - 20, 14, 40, 71, 115, 153, 140, 84, 18, 30, 34, 9, 14, 14, 22, 14, - 41, 36, 88, 202, 224, 230, 199, 135, 138, 143, 154, 163, 159, 148, 135, 60, - 2, 5, 2, 2, 1, 1, 0, 29, 29, 32, 51, 52, 53, 61, 57, 53, - 24, 38, 44, 40, 41, 42, 40, 38, 36, 34, 34, 33, 30, 26, 29, 25, - 24, 22, 24, 22, 25, 24, 21, 21, 21, 24, 22, 24, 22, 22, 22, 22, - 22, 22, 17, 14, 12, 14, 21, 33, 25, 34, 40, 37, 25, 25, 36, 26, - 14, 26, 34, 33, 30, 28, 18, 26, 28, 20, 14, 16, 16, 16, 14, 13, - 14, 13, 13, 13, 16, 14, 12, 8, 12, 14, 13, 13, 18, 22, 5, 9, - 20, 20, 25, 14, 32, 42, 44, 63, 29, 4, 5, 16, 16, 13, 13, 14, - 17, 13, 13, 16, 13, 13, 14, 16, 20, 20, 18, 18, 17, 22, 26, 34, - 44, 41, 34, 26, 33, 30, 24, 20, 9, 10, 16, 13, 12, 10, 10, 8, - 6, 10, 6, 5, 10, 14, 6, 6, 13, 10, 12, 16, 13, 25, 59, 91, - 151, 154, 142, 140, 144, 143, 146, 148, 146, 143, 138, 134, 123, 85, 44, 32, - 29, 29, 28, 18, 41, 64, 60, 147, 181, 194, 175, 132, 107, 108, 124, 119, - 119, 112, 127, 122, 118, 115, 115, 115, 118, 114, 112, 108, 65, 49, 28, 20, - 18, 20, 21, 18, 18, 10, 8, 18, 8, 8, 8, 8, 20, 6, 6, 5, - 6, 8, 6, 6, 8, 8, 6, 6, 10, 21, 22, 34, 37, 65, 75, 79, - 80, 64, 57, 30, 5, 45, 55, 52, 28, 34, 55, 88, 120, 139, 126, 124, - 110, 93, 92, 93, 99, 100, 102, 126, 126, 120, 124, 124, 126, 126, 124, 124, - 123, 120, 122, 122, 118, 120, 120, 120, 120, 118, 116, 116, 115, 116, 115, 115, - 115, 114, 112, 114, 114, 112, 112, 112, 114, 116, 119, 123, 126, 122, 88, 21, - 12, 13, 14, 20, 29, 87, 151, 173, 138, 131, 102, 88, 83, 84, 85, 88, - 89, 89, 91, 91, 93, 92, 91, 91, 92, 87, 87, 83, 81, 76, 48, 21, - 18, 20, 21, 21, 10, 59, 22, 22, 14, 14, 13, 17, 9, 10, 12, 10, - 6, 6, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5, 6, 8, 9, 10, - 10, 10, 10, 12, 13, 16, 17, 25, 12, 17, 29, 49, 41, 51, 143, 140, - 130, 123, 118, 108, 107, 99, 93, 99, 100, 106, 103, 100, 102, 108, 106, 106, - 111, 110, 108, 108, 104, 100, 95, 93, 95, 92, 33, 38, 5, 4, 5, 4, - 2, 4, 2, 4, 4, 1, 4, 2, 1, 10, 9, 6, 2, 9, 4, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 2, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 4, 4, 13, 9, 12, 17, 107, 150, 170, 154, 157, 131, 112, - 106, 100, 97, 100, 93, 99, 100, 96, 96, 106, 107, 110, 107, 106, 102, 96, - 96, 97, 95, 93, 87, 53, 20, 9, 5, 5, 5, 5, 4, 5, 4, 2, - 4, 5, 5, 5, 5, 6, 6, 13, 9, 41, 14, 32, 75, 138, 158, 171, - 186, 182, 169, 100, 21, 17, 49, 65, 56, 57, 48, 34, 60, 112, 214, 230, - 230, 189, 132, 138, 142, 154, 161, 158, 146, 130, 28, 2, 4, 5, 9, 14, - 29, 41, 85, 84, 83, 79, 57, 32, 40, 26, 38, 13, 0, 2, 2, 16, - 1, 2, 9, 12, 2, 2, 9, 10, 10, 6, 10, 10, 10, 5, 5, 14, - 13, 13, 12, 12, 12, 10, 9, 9, 9, 9, 9, 12, 10, 13, 20, 21, - 30, 28, 37, 42, 40, 44, 48, 51, 63, 59, 30, 34, 42, 52, 37, 33, - 29, 28, 32, 30, 28, 26, 28, 29, 29, 26, 25, 24, 22, 25, 29, 26, - 24, 22, 20, 17, 14, 20, 29, 33, 14, 24, 37, 17, 20, 17, 38, 34, - 44, 48, 46, 40, 33, 30, 34, 33, 30, 28, 32, 30, 30, 28, 29, 32, - 32, 29, 30, 30, 24, 26, 26, 30, 24, 29, 55, 48, 49, 49, 52, 46, - 33, 38, 33, 33, 36, 38, 36, 30, 32, 32, 30, 26, 29, 30, 28, 25, - 32, 32, 29, 28, 34, 41, 42, 53, 57, 48, 46, 92, 140, 148, 158, 142, - 147, 142, 146, 136, 139, 126, 114, 67, 36, 32, 30, 21, 20, 18, 32, 56, - 63, 128, 165, 190, 199, 171, 119, 81, 61, 59, 55, 51, 51, 41, 41, 38, - 42, 36, 38, 37, 37, 33, 36, 30, 30, 29, 32, 22, 36, 29, 33, 29, - 29, 29, 29, 28, 21, 20, 18, 6, 5, 26, 83, 110, 72, 77, 79, 79, - 73, 64, 69, 77, 83, 103, 89, 102, 103, 75, 81, 76, 84, 72, 45, 9, - 55, 49, 61, 57, 26, 41, 55, 73, 60, 60, 60, 52, 52, 44, 40, 37, - 32, 34, 32, 33, 28, 28, 25, 24, 22, 26, 22, 26, 24, 24, 22, 24, - 21, 22, 20, 22, 21, 26, 24, 25, 24, 21, 24, 29, 34, 55, 89, 104, - 114, 116, 118, 120, 120, 123, 124, 120, 106, 34, 13, 10, 12, 17, 28, 26, - 45, 53, 52, 56, 59, 60, 17, 12, 12, 12, 9, 9, 9, 9, 6, 8, - 8, 8, 9, 9, 9, 10, 9, 9, 10, 10, 8, 5, 8, 6, 8, 12, - 14, 30, 38, 37, 45, 51, 41, 36, 36, 36, 25, 5, 32, 46, 40, 38, - 26, 29, 25, 30, 20, 10, 16, 28, 49, 55, 52, 49, 45, 51, 45, 46, - 48, 41, 36, 8, 33, 49, 51, 41, 65, 88, 84, 93, 81, 76, 71, 69, - 68, 61, 38, 51, 36, 40, 36, 32, 28, 30, 29, 29, 28, 29, 28, 28, - 29, 29, 28, 32, 32, 28, 8, 10, 55, 60, 61, 67, 68, 61, 72, 60, - 56, 56, 21, 5, 53, 56, 63, 52, 56, 45, 51, 21, 12, 9, 8, 4, - 9, 9, 8, 6, 5, 4, 6, 5, 2, 5, 4, 4, 2, 9, 12, 10, - 5, 13, 10, 5, 2, 2, 5, 4, 6, 8, 8, 6, 6, 6, 8, 18, - 24, 10, 17, 13, 96, 99, 104, 95, 102, 88, 76, 52, 40, 38, 25, 24, - 22, 25, 18, 18, 18, 18, 13, 16, 14, 10, 9, 10, 13, 12, 10, 10, - 8, 9, 22, 24, 34, 36, 21, 32, 40, 46, 52, 48, 45, 24, 22, 17, - 12, 33, 34, 28, 13, 44, 81, 144, 189, 191, 187, 198, 186, 147, 100, 24, - 24, 49, 63, 53, 41, 51, 49, 81, 159, 220, 230, 232, 175, 130, 132, 140, - 151, 158, 153, 142, 106, 12, 4, 2, 5, 20, 41, 48, 55, 139, 128, 122, - 116, 88, 77, 71, 64, 42, 5, 26, 89, 103, 87, 83, 93, 104, 89, 85, - 84, 84, 84, 85, 91, 89, 89, 77, 65, 40, 33, 26, 18, 17, 16, 17, - 18, 25, 26, 24, 26, 29, 37, 36, 38, 41, 40, 38, 46, 57, 68, 75, - 72, 83, 76, 85, 71, 52, 25, 80, 68, 45, 41, 41, 37, 38, 37, 38, - 40, 37, 26, 34, 44, 46, 41, 40, 41, 44, 37, 29, 22, 18, 17, 10, - 13, 26, 28, 24, 21, 28, 26, 26, 30, 24, 5, 56, 45, 38, 37, 36, - 33, 41, 33, 29, 29, 32, 29, 28, 18, 21, 33, 26, 29, 30, 32, 25, - 32, 26, 25, 26, 51, 55, 48, 49, 49, 52, 49, 52, 44, 10, 67, 56, - 40, 41, 30, 34, 37, 33, 30, 33, 33, 32, 34, 34, 37, 37, 34, 36, - 37, 37, 46, 51, 53, 41, 48, 127, 136, 136, 140, 131, 128, 126, 124, 107, - 64, 49, 38, 36, 32, 34, 22, 18, 29, 56, 85, 76, 131, 186, 195, 201, - 158, 99, 51, 34, 29, 57, 34, 34, 32, 38, 40, 36, 33, 34, 36, 34, - 34, 28, 30, 26, 28, 25, 28, 24, 18, 24, 29, 29, 28, 32, 33, 28, - 36, 18, 6, 5, 91, 107, 97, 91, 77, 83, 79, 97, 88, 92, 52, 72, - 80, 77, 76, 84, 84, 73, 72, 80, 84, 44, 5, 34, 61, 57, 65, 48, - 25, 37, 41, 25, 20, 20, 34, 22, 24, 22, 22, 22, 22, 21, 17, 17, - 16, 20, 13, 14, 14, 17, 14, 17, 14, 14, 14, 14, 14, 13, 10, 13, - 13, 12, 12, 12, 12, 12, 12, 12, 13, 17, 22, 30, 41, 55, 69, 79, - 87, 87, 71, 33, 13, 13, 12, 17, 18, 32, 33, 34, 28, 29, 30, 25, - 33, 25, 25, 24, 20, 24, 21, 18, 17, 18, 17, 16, 16, 13, 14, 14, - 13, 13, 12, 12, 13, 12, 12, 18, 12, 18, 14, 56, 84, 87, 84, 81, - 87, 79, 76, 77, 49, 26, 1, 65, 51, 45, 41, 38, 49, 59, 40, 44, - 29, 16, 60, 71, 65, 63, 61, 68, 63, 63, 61, 55, 49, 36, 8, 55, - 48, 44, 63, 75, 64, 69, 61, 64, 61, 68, 45, 28, 29, 33, 29, 22, - 20, 18, 17, 17, 18, 16, 16, 16, 16, 12, 12, 10, 8, 12, 9, 9, - 6, 9, 12, 69, 71, 65, 64, 59, 55, 53, 56, 61, 72, 24, 5, 72, - 56, 42, 56, 46, 48, 45, 41, 37, 26, 12, 4, 18, 42, 36, 22, 26, - 37, 36, 22, 26, 33, 26, 16, 14, 26, 30, 29, 38, 34, 32, 26, 26, - 12, 2, 10, 22, 30, 24, 22, 26, 18, 21, 22, 22, 12, 17, 6, 69, - 77, 63, 45, 51, 48, 44, 26, 29, 29, 30, 20, 22, 20, 25, 18, 18, - 16, 16, 13, 17, 14, 13, 17, 20, 17, 17, 17, 21, 26, 24, 26, 32, - 38, 37, 26, 40, 57, 56, 26, 26, 49, 56, 51, 36, 34, 16, 12, 49, - 76, 134, 190, 189, 174, 187, 136, 112, 91, 99, 24, 26, 49, 76, 75, 80, - 65, 51, 88, 191, 222, 229, 228, 159, 128, 134, 139, 150, 151, 144, 134, 61, - 5, 5, 2, 4, 21, 44, 41, 69, 107, 107, 111, 108, 95, 108, 91, 83, - 45, 2, 107, 102, 93, 91, 91, 91, 85, 92, 89, 88, 83, 84, 85, 83, - 79, 80, 80, 79, 91, 84, 61, 40, 36, 24, 42, 57, 59, 56, 56, 53, - 52, 49, 52, 48, 42, 29, 36, 71, 80, 88, 83, 85, 81, 84, 87, 80, - 64, 28, 79, 69, 67, 61, 63, 61, 57, 56, 51, 49, 45, 26, 42, 56, - 65, 61, 60, 56, 59, 52, 42, 41, 38, 33, 10, 48, 49, 48, 59, 32, - 37, 55, 34, 32, 33, 12, 56, 71, 61, 64, 61, 49, 48, 36, 32, 38, - 30, 12, 21, 67, 36, 60, 45, 52, 38, 51, 38, 25, 17, 14, 26, 46, - 56, 55, 52, 52, 63, 52, 46, 40, 9, 67, 71, 41, 48, 40, 40, 40, - 40, 45, 37, 37, 26, 18, 32, 36, 45, 34, 40, 41, 48, 45, 46, 51, - 51, 41, 103, 132, 115, 84, 69, 65, 61, 51, 49, 42, 42, 34, 30, 33, - 26, 21, 37, 51, 55, 77, 79, 173, 186, 198, 197, 150, 97, 40, 34, 34, - 33, 34, 33, 36, 42, 41, 41, 59, 84, 124, 136, 154, 162, 153, 142, 97, - 52, 36, 29, 24, 26, 26, 21, 14, 17, 16, 21, 30, 21, 16, 17, 96, - 107, 68, 56, 55, 59, 55, 51, 75, 48, 63, 88, 88, 75, 95, 67, 69, - 63, 71, 73, 88, 41, 4, 45, 51, 72, 49, 41, 45, 25, 21, 21, 33, - 37, 13, 17, 14, 16, 18, 9, 14, 12, 12, 9, 6, 9, 9, 10, 12, - 12, 12, 10, 10, 10, 10, 12, 9, 12, 12, 12, 14, 14, 20, 14, 17, - 17, 20, 14, 13, 10, 13, 13, 14, 14, 16, 14, 14, 16, 13, 13, 12, - 12, 8, 17, 30, 40, 37, 30, 30, 28, 26, 24, 25, 24, 22, 28, 21, - 24, 21, 20, 20, 17, 17, 14, 14, 14, 14, 16, 13, 12, 14, 12, 14, - 16, 22, 26, 26, 22, 36, 67, 83, 79, 69, 68, 67, 69, 67, 75, 55, - 30, 2, 57, 53, 60, 33, 48, 48, 44, 40, 44, 34, 16, 63, 80, 84, - 79, 72, 77, 83, 77, 64, 64, 55, 38, 6, 55, 46, 51, 85, 88, 72, - 64, 87, 57, 26, 29, 32, 33, 36, 24, 21, 20, 17, 17, 17, 17, 16, - 13, 14, 14, 14, 12, 9, 9, 9, 10, 10, 8, 8, 10, 21, 68, 64, - 53, 56, 59, 52, 44, 44, 46, 91, 22, 6, 67, 64, 65, 64, 61, 60, - 53, 40, 41, 29, 12, 4, 37, 46, 45, 34, 32, 21, 26, 33, 24, 16, - 17, 9, 21, 40, 59, 53, 55, 41, 48, 42, 25, 14, 5, 42, 51, 32, - 32, 26, 26, 26, 25, 18, 16, 13, 17, 9, 48, 91, 65, 57, 42, 37, - 44, 29, 29, 29, 28, 21, 21, 24, 25, 17, 20, 20, 17, 20, 16, 16, - 18, 21, 18, 22, 24, 20, 21, 25, 26, 34, 25, 33, 13, 18, 57, 55, - 77, 51, 25, 22, 26, 18, 22, 18, 12, 46, 79, 85, 171, 189, 173, 170, - 139, 96, 89, 93, 68, 40, 32, 45, 69, 45, 51, 46, 63, 120, 204, 222, - 229, 222, 142, 127, 132, 139, 148, 147, 140, 112, 20, 4, 5, 1, 4, 22, - 41, 44, 59, 81, 88, 84, 77, 81, 79, 102, 79, 45, 10, 91, 108, 96, - 107, 92, 89, 91, 84, 80, 77, 61, 49, 64, 84, 97, 97, 91, 93, 72, - 80, 84, 67, 41, 29, 51, 63, 60, 63, 59, 61, 61, 57, 57, 61, 33, - 28, 57, 85, 92, 88, 87, 80, 85, 84, 76, 64, 53, 30, 75, 73, 67, - 67, 68, 63, 67, 56, 57, 59, 48, 28, 51, 55, 63, 63, 64, 75, 71, - 68, 56, 55, 41, 33, 13, 51, 60, 49, 59, 59, 53, 51, 55, 34, 30, - 9, 49, 69, 85, 88, 89, 64, 65, 53, 48, 34, 32, 9, 51, 75, 73, - 65, 63, 59, 59, 60, 49, 44, 28, 13, 34, 53, 59, 44, 42, 51, 55, - 53, 57, 28, 2, 75, 76, 71, 53, 33, 37, 28, 40, 34, 32, 36, 24, - 16, 30, 67, 56, 56, 55, 55, 49, 49, 48, 51, 59, 41, 119, 127, 108, - 85, 75, 61, 60, 53, 49, 41, 41, 33, 22, 21, 28, 33, 51, 53, 87, - 81, 112, 170, 198, 197, 201, 136, 96, 63, 59, 60, 49, 45, 49, 64, 80, - 112, 146, 179, 204, 216, 221, 225, 224, 217, 217, 208, 183, 153, 120, 65, 40, - 25, 22, 20, 20, 16, 12, 26, 17, 13, 4, 69, 107, 55, 45, 57, 60, - 56, 51, 71, 51, 67, 77, 85, 80, 85, 92, 83, 73, 75, 73, 81, 38, - 5, 45, 49, 57, 48, 41, 24, 25, 26, 22, 21, 20, 12, 55, 34, 26, - 24, 26, 40, 24, 30, 26, 25, 20, 21, 26, 16, 25, 29, 28, 25, 22, - 22, 21, 18, 18, 20, 20, 32, 28, 30, 28, 30, 28, 28, 25, 28, 18, - 16, 13, 14, 13, 10, 12, 12, 12, 13, 12, 13, 10, 5, 22, 37, 40, - 42, 45, 41, 44, 38, 38, 28, 26, 24, 52, 53, 34, 32, 30, 24, 25, - 29, 26, 10, 6, 25, 32, 36, 22, 17, 22, 29, 18, 33, 26, 30, 20, - 30, 65, 77, 69, 71, 73, 64, 64, 53, 61, 65, 22, 4, 37, 60, 56, - 55, 51, 61, 65, 44, 57, 29, 16, 59, 81, 81, 84, 80, 79, 85, 73, - 79, 63, 55, 45, 8, 53, 40, 45, 57, 68, 107, 83, 64, 29, 33, 30, - 46, 64, 61, 56, 40, 44, 44, 45, 37, 36, 25, 25, 24, 26, 22, 21, - 20, 17, 17, 16, 14, 18, 13, 12, 10, 51, 75, 84, 56, 40, 52, 73, - 49, 51, 71, 21, 8, 57, 63, 60, 56, 55, 49, 81, 36, 38, 37, 12, - 5, 41, 46, 32, 44, 28, 33, 17, 18, 20, 29, 14, 10, 38, 57, 63, - 60, 42, 30, 32, 53, 25, 16, 12, 46, 45, 29, 24, 25, 20, 32, 20, - 21, 12, 13, 16, 5, 51, 72, 44, 63, 49, 56, 56, 36, 28, 29, 32, - 25, 29, 28, 13, 20, 20, 20, 21, 18, 22, 21, 16, 21, 26, 26, 28, - 24, 25, 26, 30, 28, 45, 34, 22, 5, 46, 59, 51, 42, 42, 16, 26, - 16, 12, 21, 10, 51, 81, 102, 183, 179, 177, 146, 103, 93, 89, 110, 57, - 40, 29, 51, 56, 57, 48, 48, 64, 143, 212, 220, 226, 205, 131, 128, 134, - 140, 147, 143, 135, 71, 9, 5, 4, 1, 2, 22, 34, 26, 77, 77, 75, - 88, 88, 84, 80, 84, 65, 42, 20, 72, 102, 103, 96, 106, 92, 95, 91, - 93, 79, 60, 44, 83, 92, 93, 84, 77, 77, 80, 77, 79, 80, 49, 30, - 64, 72, 71, 72, 67, 67, 65, 60, 59, 69, 33, 26, 59, 88, 89, 95, - 93, 72, 73, 76, 75, 68, 45, 33, 73, 68, 65, 68, 64, 72, 67, 61, - 60, 64, 51, 36, 53, 63, 76, 65, 53, 76, 64, 80, 64, 57, 49, 37, - 14, 44, 64, 63, 53, 49, 49, 51, 55, 38, 34, 9, 60, 77, 83, 80, - 83, 88, 67, 73, 57, 48, 34, 6, 60, 73, 85, 73, 69, 68, 72, 65, - 64, 60, 26, 13, 57, 60, 67, 61, 45, 53, 72, 60, 52, 40, 8, 79, - 75, 64, 59, 44, 36, 37, 48, 51, 48, 44, 28, 13, 61, 69, 71, 68, - 67, 57, 59, 53, 55, 60, 57, 51, 108, 124, 111, 97, 84, 69, 63, 56, - 46, 41, 41, 24, 21, 30, 30, 49, 49, 63, 83, 71, 84, 182, 191, 208, - 177, 131, 99, 115, 119, 108, 118, 126, 150, 169, 194, 208, 218, 224, 225, 224, - 222, 220, 220, 220, 217, 212, 213, 206, 206, 175, 108, 42, 22, 21, 17, 24, - 18, 24, 32, 5, 4, 68, 103, 67, 51, 84, 59, 80, 67, 55, 42, 67, - 93, 89, 72, 83, 77, 93, 88, 65, 65, 76, 46, 8, 52, 48, 59, 52, - 52, 34, 33, 14, 24, 13, 29, 21, 41, 60, 52, 32, 36, 28, 38, 32, - 32, 32, 33, 20, 18, 32, 33, 34, 37, 30, 30, 30, 32, 32, 33, 28, - 26, 32, 38, 33, 34, 29, 32, 29, 30, 28, 18, 32, 37, 37, 37, 32, - 33, 20, 17, 17, 12, 13, 10, 6, 28, 40, 46, 41, 36, 37, 40, 44, - 41, 33, 26, 28, 48, 60, 38, 49, 46, 45, 33, 26, 28, 24, 8, 40, - 40, 37, 38, 38, 34, 32, 28, 28, 25, 25, 24, 21, 60, 75, 76, 69, - 68, 61, 63, 52, 59, 42, 29, 5, 53, 60, 72, 56, 48, 48, 53, 60, - 53, 33, 22, 71, 84, 77, 76, 79, 84, 87, 84, 83, 75, 61, 41, 6, - 53, 44, 55, 38, 52, 72, 93, 81, 29, 33, 28, 49, 67, 55, 52, 51, - 52, 49, 51, 52, 51, 33, 33, 22, 34, 33, 29, 28, 28, 24, 21, 25, - 25, 14, 12, 44, 65, 73, 60, 56, 48, 57, 48, 55, 53, 83, 28, 9, - 69, 64, 59, 76, 51, 53, 48, 53, 37, 37, 13, 4, 40, 52, 34, 71, - 40, 41, 40, 32, 24, 26, 14, 6, 49, 63, 64, 33, 26, 25, 26, 46, - 25, 12, 5, 38, 45, 30, 26, 22, 21, 16, 18, 17, 16, 16, 18, 10, - 57, 76, 64, 42, 49, 46, 60, 44, 46, 25, 24, 10, 8, 22, 18, 21, - 18, 21, 14, 17, 20, 10, 12, 21, 38, 41, 40, 44, 22, 16, 18, 22, - 29, 30, 25, 9, 52, 53, 49, 42, 32, 20, 24, 18, 14, 10, 10, 52, - 81, 106, 185, 179, 146, 112, 96, 85, 103, 100, 73, 37, 30, 38, 61, 52, - 40, 53, 96, 187, 216, 222, 228, 185, 124, 127, 132, 146, 143, 138, 114, 20, - 5, 5, 4, 1, 2, 12, 40, 21, 49, 108, 76, 76, 80, 73, 81, 81, - 88, 38, 2, 72, 108, 100, 97, 104, 99, 92, 89, 92, 71, 61, 42, 80, - 87, 76, 84, 85, 87, 103, 91, 80, 83, 60, 38, 71, 76, 80, 73, 80, - 73, 75, 64, 57, 64, 34, 24, 73, 91, 88, 89, 87, 71, 84, 77, 80, - 65, 56, 37, 69, 76, 61, 77, 76, 61, 64, 69, 67, 68, 55, 36, 59, - 72, 71, 68, 53, 65, 61, 75, 71, 64, 52, 37, 5, 46, 52, 63, 56, - 51, 49, 52, 55, 38, 34, 10, 55, 76, 79, 71, 67, 67, 68, 64, 63, - 49, 32, 8, 68, 85, 83, 73, 73, 67, 77, 75, 68, 59, 37, 14, 57, - 63, 69, 53, 64, 53, 65, 59, 49, 41, 6, 76, 67, 59, 53, 53, 41, - 42, 56, 59, 53, 44, 26, 13, 63, 65, 75, 69, 71, 59, 63, 63, 56, - 49, 46, 44, 95, 119, 116, 92, 96, 88, 72, 67, 52, 48, 25, 17, 25, - 45, 52, 52, 65, 53, 77, 69, 80, 155, 201, 204, 171, 119, 91, 111, 182, - 186, 191, 199, 204, 209, 218, 220, 220, 220, 213, 208, 193, 190, 190, 179, 170, - 159, 162, 166, 182, 198, 197, 151, 61, 29, 20, 16, 20, 20, 18, 1, 5, - 89, 114, 80, 56, 55, 67, 52, 65, 64, 37, 67, 88, 84, 68, 65, 67, - 68, 72, 72, 69, 71, 46, 9, 55, 34, 57, 44, 57, 52, 34, 30, 16, - 12, 21, 21, 49, 53, 37, 45, 45, 32, 38, 44, 46, 38, 29, 13, 30, - 48, 64, 60, 34, 34, 34, 40, 40, 38, 37, 21, 30, 57, 49, 51, 49, - 34, 33, 33, 30, 29, 21, 30, 44, 38, 42, 36, 36, 30, 28, 28, 25, - 25, 12, 5, 33, 40, 45, 51, 55, 55, 44, 30, 45, 34, 28, 22, 45, - 45, 61, 44, 41, 44, 41, 33, 34, 26, 4, 46, 40, 25, 41, 37, 22, - 24, 38, 30, 36, 28, 24, 16, 59, 75, 77, 59, 57, 51, 49, 61, 41, - 48, 30, 1, 55, 60, 69, 53, 42, 38, 42, 49, 63, 36, 24, 77, 85, - 93, 87, 80, 73, 75, 84, 85, 80, 67, 41, 6, 53, 40, 45, 36, 60, - 68, 67, 49, 30, 34, 33, 52, 63, 61, 53, 52, 49, 52, 46, 45, 52, - 52, 32, 26, 34, 37, 32, 30, 29, 29, 26, 30, 28, 17, 8, 59, 51, - 71, 42, 52, 51, 56, 53, 48, 53, 65, 32, 9, 68, 64, 72, 75, 76, - 75, 48, 53, 38, 37, 14, 4, 32, 53, 44, 46, 51, 38, 33, 38, 36, - 28, 14, 14, 53, 63, 59, 25, 24, 37, 37, 40, 24, 16, 5, 56, 33, - 36, 17, 17, 16, 17, 17, 20, 18, 16, 17, 8, 41, 85, 63, 55, 46, - 59, 37, 48, 40, 37, 26, 6, 10, 18, 29, 25, 16, 16, 14, 17, 21, - 12, 13, 42, 40, 40, 40, 30, 41, 36, 41, 28, 29, 25, 25, 16, 51, - 56, 44, 40, 32, 18, 12, 16, 16, 13, 12, 44, 77, 84, 178, 177, 131, - 102, 97, 95, 118, 112, 73, 25, 30, 40, 55, 52, 46, 72, 159, 202, 208, - 222, 217, 146, 122, 127, 139, 142, 136, 123, 48, 6, 4, 4, 2, 1, 4, - 20, 34, 25, 17, 108, 77, 76, 81, 85, 88, 83, 80, 37, 2, 80, 100, - 95, 104, 102, 100, 97, 97, 85, 71, 56, 38, 79, 75, 84, 83, 96, 93, - 95, 85, 87, 80, 72, 41, 75, 85, 87, 85, 77, 80, 71, 67, 61, 60, - 32, 48, 80, 87, 87, 76, 81, 61, 65, 65, 67, 67, 64, 38, 60, 73, - 63, 56, 61, 68, 72, 77, 64, 64, 65, 34, 59, 69, 67, 61, 60, 72, - 67, 79, 71, 71, 53, 37, 8, 42, 60, 65, 52, 67, 55, 51, 52, 38, - 36, 14, 56, 80, 72, 72, 72, 73, 72, 67, 67, 51, 32, 8, 63, 67, - 76, 76, 77, 77, 81, 77, 76, 59, 32, 25, 61, 60, 69, 59, 65, 65, - 79, 56, 46, 36, 6, 76, 76, 63, 57, 53, 69, 69, 69, 68, 63, 45, - 26, 10, 65, 72, 72, 67, 68, 64, 67, 72, 57, 59, 61, 40, 83, 111, - 112, 102, 84, 92, 77, 71, 56, 64, 29, 14, 38, 51, 65, 68, 65, 53, - 100, 72, 93, 108, 177, 197, 174, 115, 103, 111, 148, 183, 193, 195, 202, 205, - 206, 208, 199, 193, 185, 166, 147, 143, 143, 144, 136, 140, 136, 143, 146, 144, - 155, 179, 169, 73, 18, 16, 22, 18, 16, 12, 14, 91, 95, 81, 56, 57, - 65, 53, 64, 59, 37, 64, 88, 79, 69, 75, 68, 67, 63, 77, 76, 68, - 45, 9, 46, 33, 67, 72, 60, 40, 29, 22, 21, 13, 26, 9, 42, 59, - 44, 46, 34, 37, 42, 44, 44, 41, 28, 14, 42, 60, 59, 63, 65, 45, - 44, 42, 38, 44, 33, 22, 56, 52, 56, 52, 51, 48, 36, 34, 36, 32, - 21, 41, 40, 49, 44, 46, 42, 36, 29, 30, 30, 25, 12, 5, 37, 46, - 45, 42, 38, 44, 44, 30, 37, 37, 29, 18, 46, 45, 56, 52, 57, 60, - 44, 53, 32, 26, 4, 51, 41, 34, 40, 34, 44, 37, 44, 40, 41, 34, - 24, 29, 59, 83, 59, 60, 56, 65, 52, 55, 64, 42, 32, 1, 65, 60, - 55, 52, 61, 65, 67, 64, 51, 38, 21, 72, 80, 88, 99, 92, 85, 83, - 84, 77, 83, 67, 41, 5, 52, 48, 46, 42, 71, 26, 29, 28, 29, 36, - 30, 52, 61, 59, 63, 48, 61, 55, 53, 46, 49, 48, 40, 26, 30, 34, - 44, 41, 44, 38, 37, 36, 28, 18, 8, 51, 75, 69, 51, 55, 71, 64, - 63, 49, 45, 67, 24, 12, 64, 68, 55, 53, 56, 56, 56, 53, 37, 37, - 17, 5, 41, 61, 32, 40, 34, 55, 44, 45, 37, 24, 13, 20, 53, 67, - 38, 30, 26, 41, 42, 41, 22, 12, 5, 52, 57, 34, 30, 22, 25, 24, - 24, 26, 21, 18, 18, 9, 48, 72, 81, 59, 53, 42, 29, 36, 36, 33, - 22, 5, 22, 41, 38, 32, 26, 26, 25, 32, 22, 12, 8, 41, 34, 37, - 26, 36, 41, 28, 40, 32, 30, 25, 14, 16, 49, 65, 32, 34, 25, 20, - 14, 16, 14, 14, 10, 45, 67, 79, 127, 171, 143, 107, 99, 102, 126, 114, - 53, 44, 36, 45, 49, 41, 69, 134, 198, 208, 212, 220, 193, 124, 123, 128, - 143, 136, 128, 80, 10, 4, 8, 4, 2, 1, 2, 21, 34, 38, 18, 76, - 80, 85, 99, 96, 89, 81, 80, 38, 4, 92, 103, 97, 102, 102, 100, 91, - 99, 79, 68, 56, 36, 75, 100, 108, 100, 100, 97, 87, 83, 81, 81, 75, - 44, 45, 69, 75, 69, 73, 72, 72, 65, 64, 60, 32, 52, 85, 89, 72, - 69, 68, 71, 69, 71, 69, 64, 61, 38, 55, 80, 68, 65, 56, 67, 53, - 61, 53, 52, 65, 38, 63, 72, 68, 67, 71, 73, 71, 60, 63, 73, 53, - 36, 6, 46, 53, 65, 56, 56, 61, 52, 49, 42, 37, 9, 45, 79, 73, - 73, 75, 73, 69, 71, 63, 49, 33, 5, 44, 83, 71, 83, 77, 80, 81, - 80, 73, 72, 30, 10, 55, 67, 72, 65, 60, 61, 57, 59, 55, 28, 1, - 72, 69, 52, 63, 56, 52, 51, 56, 53, 60, 44, 25, 9, 67, 59, 65, - 65, 64, 65, 73, 85, 63, 59, 59, 46, 63, 107, 110, 100, 81, 88, 77, - 76, 68, 60, 34, 17, 45, 64, 67, 61, 57, 56, 100, 77, 102, 77, 147, - 205, 177, 107, 99, 100, 120, 130, 157, 166, 175, 178, 179, 173, 158, 140, 134, - 138, 139, 140, 144, 154, 157, 161, 146, 139, 134, 128, 135, 136, 173, 146, 69, - 16, 22, 16, 12, 8, 5, 75, 89, 79, 44, 55, 69, 57, 64, 55, 38, - 64, 84, 87, 79, 68, 75, 69, 68, 81, 75, 71, 44, 12, 38, 40, 42, - 46, 51, 51, 30, 22, 21, 13, 36, 8, 33, 48, 53, 52, 68, 65, 75, - 73, 69, 45, 34, 6, 46, 60, 55, 65, 55, 53, 55, 67, 71, 49, 37, - 20, 55, 49, 65, 52, 46, 52, 46, 45, 36, 33, 24, 42, 45, 45, 45, - 41, 41, 38, 36, 32, 29, 24, 13, 4, 37, 48, 40, 34, 44, 60, 37, - 40, 41, 34, 29, 18, 55, 52, 55, 46, 51, 51, 52, 55, 40, 21, 4, - 49, 48, 57, 45, 42, 45, 52, 40, 38, 37, 42, 29, 18, 41, 75, 81, - 81, 79, 73, 80, 81, 59, 55, 22, 0, 49, 61, 60, 68, 77, 64, 63, - 61, 48, 38, 21, 56, 85, 83, 85, 81, 83, 84, 85, 93, 88, 80, 41, - 5, 52, 36, 52, 65, 37, 56, 38, 44, 28, 36, 34, 51, 56, 69, 69, - 53, 56, 61, 64, 57, 59, 51, 48, 29, 34, 44, 38, 41, 45, 42, 41, - 41, 32, 17, 9, 64, 73, 67, 75, 59, 60, 57, 48, 48, 55, 68, 24, - 14, 36, 68, 57, 48, 56, 56, 52, 46, 37, 34, 14, 5, 45, 53, 44, - 40, 45, 46, 49, 37, 29, 20, 17, 12, 53, 64, 38, 25, 38, 33, 38, - 37, 22, 14, 4, 51, 38, 40, 33, 45, 44, 53, 51, 45, 26, 20, 20, - 9, 42, 76, 87, 85, 61, 64, 32, 32, 34, 28, 20, 14, 33, 33, 22, - 30, 40, 40, 41, 29, 18, 12, 9, 46, 33, 33, 18, 42, 41, 34, 38, - 28, 30, 29, 21, 9, 48, 63, 40, 32, 20, 20, 17, 30, 10, 17, 9, - 33, 52, 72, 95, 131, 166, 111, 99, 126, 136, 96, 45, 45, 57, 44, 53, - 71, 132, 186, 208, 209, 220, 209, 150, 120, 127, 138, 135, 124, 96, 20, 5, - 5, 5, 5, 2, 1, 1, 14, 33, 5, 28, 77, 79, 79, 77, 79, 81, - 83, 69, 33, 5, 65, 103, 96, 97, 96, 97, 100, 89, 71, 65, 57, 29, - 84, 83, 91, 81, 95, 84, 83, 76, 72, 72, 68, 67, 46, 51, 60, 59, - 69, 71, 72, 61, 63, 61, 28, 55, 81, 80, 69, 75, 76, 75, 69, 75, - 65, 81, 57, 42, 55, 79, 75, 77, 67, 72, 61, 59, 57, 67, 51, 42, - 67, 76, 71, 80, 63, 64, 73, 69, 71, 56, 53, 40, 10, 38, 60, 63, - 63, 57, 64, 55, 55, 44, 40, 13, 72, 80, 85, 87, 77, 73, 73, 72, - 68, 48, 33, 4, 61, 84, 72, 79, 81, 80, 88, 80, 76, 65, 42, 12, - 59, 73, 77, 63, 64, 61, 61, 65, 49, 44, 5, 67, 81, 67, 81, 69, - 81, 72, 71, 67, 63, 44, 25, 9, 71, 68, 69, 77, 64, 63, 61, 72, - 72, 57, 63, 45, 55, 99, 102, 97, 97, 84, 80, 79, 73, 65, 36, 17, - 53, 67, 68, 68, 69, 91, 75, 100, 65, 107, 84, 190, 189, 120, 108, 102, - 107, 114, 127, 131, 132, 136, 132, 130, 123, 115, 114, 112, 116, 130, 140, 150, - 154, 155, 158, 143, 140, 142, 139, 128, 138, 167, 80, 17, 16, 17, 13, 5, - 5, 67, 93, 75, 57, 59, 61, 59, 65, 49, 32, 61, 83, 93, 93, 81, - 80, 83, 83, 87, 73, 69, 44, 17, 37, 38, 51, 40, 37, 26, 24, 12, - 18, 24, 21, 28, 41, 69, 67, 65, 65, 59, 67, 51, 44, 45, 29, 9, - 44, 64, 67, 55, 56, 56, 53, 57, 55, 44, 37, 20, 72, 46, 69, 45, - 56, 49, 48, 46, 49, 36, 22, 37, 45, 38, 38, 38, 44, 36, 36, 33, - 33, 25, 14, 5, 37, 46, 40, 30, 40, 36, 36, 28, 29, 34, 26, 20, - 51, 61, 57, 48, 46, 48, 53, 55, 36, 28, 12, 49, 46, 45, 59, 46, - 45, 45, 48, 46, 51, 52, 40, 22, 38, 61, 71, 72, 69, 52, 56, 51, - 51, 44, 32, 4, 52, 60, 59, 64, 61, 57, 51, 49, 51, 44, 32, 36, - 73, 77, 79, 77, 76, 79, 79, 76, 77, 69, 46, 5, 49, 48, 33, 38, - 28, 33, 33, 33, 33, 37, 37, 33, 57, 46, 49, 45, 51, 46, 49, 46, - 51, 48, 48, 41, 32, 32, 32, 28, 32, 36, 37, 42, 32, 21, 9, 63, - 73, 61, 49, 48, 55, 48, 49, 57, 68, 69, 34, 12, 21, 63, 71, 63, - 71, 59, 53, 33, 34, 25, 14, 5, 38, 49, 53, 63, 49, 53, 46, 41, - 38, 18, 16, 18, 52, 76, 51, 24, 26, 41, 42, 53, 26, 10, 4, 33, - 51, 37, 36, 38, 30, 26, 30, 33, 40, 21, 22, 9, 38, 64, 77, 71, - 53, 55, 24, 32, 33, 29, 16, 13, 40, 29, 32, 26, 25, 20, 22, 26, - 20, 9, 9, 45, 26, 36, 38, 38, 32, 33, 33, 30, 30, 32, 22, 8, - 46, 53, 33, 17, 26, 20, 17, 12, 14, 9, 14, 34, 40, 34, 59, 77, - 155, 143, 100, 110, 132, 123, 56, 42, 52, 67, 107, 148, 185, 198, 204, 217, - 213, 162, 119, 123, 135, 131, 120, 87, 18, 6, 5, 6, 5, 4, 2, 1, - 1, 20, 25, 57, 65, 67, 65, 65, 65, 65, 65, 63, 61, 32, 13, 37, - 71, 103, 107, 87, 88, 71, 69, 69, 51, 51, 29, 79, 77, 75, 76, 76, - 79, 75, 64, 59, 57, 59, 56, 60, 71, 71, 61, 57, 57, 57, 55, 60, - 48, 26, 71, 80, 87, 69, 69, 61, 64, 61, 60, 59, 64, 63, 52, 45, - 61, 60, 55, 60, 59, 73, 64, 63, 67, 64, 57, 56, 55, 59, 68, 61, - 56, 55, 55, 53, 52, 49, 38, 5, 36, 60, 56, 55, 53, 53, 53, 55, - 56, 37, 16, 51, 68, 65, 67, 67, 68, 64, 77, 68, 48, 30, 6, 65, - 84, 79, 73, 72, 76, 68, 75, 73, 61, 34, 6, 56, 61, 72, 71, 63, - 71, 71, 64, 46, 42, 5, 61, 68, 67, 67, 64, 64, 63, 61, 59, 59, - 42, 24, 8, 65, 67, 72, 68, 73, 68, 75, 61, 68, 68, 60, 48, 45, - 76, 100, 87, 81, 71, 59, 61, 65, 63, 41, 16, 46, 64, 84, 75, 95, - 107, 77, 112, 112, 100, 69, 111, 174, 132, 100, 102, 108, 111, 112, 107, 120, - 116, 120, 112, 108, 104, 104, 108, 147, 153, 128, 148, 159, 154, 154, 162, 147, - 146, 143, 143, 139, 163, 81, 13, 12, 14, 13, 2, 4, 63, 85, 75, 60, - 55, 61, 59, 65, 52, 30, 63, 69, 83, 80, 73, 72, 68, 71, 68, 59, - 56, 45, 16, 8, 28, 26, 9, 5, 20, 21, 2, 5, 12, 14, 30, 44, - 60, 68, 56, 53, 48, 48, 45, 45, 49, 26, 9, 38, 59, 69, 61, 64, - 67, 57, 61, 59, 46, 38, 21, 52, 45, 60, 48, 40, 40, 33, 30, 40, - 37, 33, 33, 28, 32, 29, 29, 26, 25, 26, 28, 25, 24, 13, 4, 38, - 53, 22, 22, 25, 21, 22, 24, 24, 26, 24, 25, 25, 36, 48, 48, 36, - 34, 33, 32, 26, 29, 4, 46, 45, 42, 40, 40, 41, 42, 40, 40, 37, - 38, 37, 34, 26, 24, 30, 32, 30, 28, 30, 30, 30, 32, 34, 1, 26, - 52, 53, 51, 49, 49, 29, 26, 29, 33, 46, 48, 40, 52, 64, 57, 60, - 59, 63, 69, 68, 57, 41, 5, 41, 29, 26, 29, 29, 29, 32, 34, 20, - 18, 20, 38, 38, 41, 41, 45, 42, 44, 44, 45, 44, 45, 44, 44, 42, - 48, 42, 42, 40, 30, 32, 40, 30, 24, 12, 60, 75, 55, 60, 64, 48, - 67, 71, 57, 49, 46, 36, 13, 16, 59, 55, 59, 32, 29, 29, 20, 24, - 20, 14, 4, 36, 41, 36, 21, 34, 34, 37, 26, 26, 21, 16, 17, 49, - 61, 32, 33, 29, 38, 40, 56, 18, 13, 4, 48, 41, 42, 36, 32, 29, - 29, 29, 26, 24, 24, 25, 10, 21, 34, 57, 51, 34, 24, 29, 25, 22, - 29, 25, 13, 40, 30, 34, 24, 32, 25, 24, 21, 20, 10, 9, 38, 40, - 36, 32, 33, 33, 32, 25, 28, 24, 22, 14, 9, 40, 49, 24, 9, 10, - 13, 16, 14, 13, 10, 12, 24, 33, 32, 37, 57, 73, 170, 112, 107, 138, - 130, 124, 120, 123, 150, 177, 182, 193, 195, 209, 206, 162, 116, 122, 130, 119, - 111, 81, 22, 6, 6, 6, 5, 4, 4, 4, 1, 1, 12, 14, 12, 10, - 38, 36, 34, 30, 26, 25, 21, 20, 16, 18, 20, 26, 32, 30, 38, 40, - 48, 38, 48, 52, 42, 28, 42, 34, 40, 37, 30, 30, 36, 29, 28, 25, - 29, 28, 34, 28, 34, 34, 49, 67, 69, 69, 49, 38, 26, 61, 67, 69, - 61, 59, 53, 63, 60, 55, 64, 63, 59, 55, 59, 64, 72, 64, 63, 63, - 61, 61, 61, 59, 57, 57, 56, 56, 34, 36, 25, 18, 17, 17, 16, 16, - 13, 17, 5, 14, 16, 18, 20, 21, 25, 44, 52, 45, 37, 20, 5, 42, - 60, 32, 40, 46, 60, 32, 45, 44, 24, 6, 32, 44, 36, 36, 44, 44, - 37, 37, 45, 45, 18, 8, 32, 41, 30, 41, 37, 37, 28, 42, 34, 20, - 6, 16, 38, 38, 37, 36, 40, 40, 38, 38, 41, 40, 21, 8, 48, 71, - 65, 51, 49, 61, 61, 44, 49, 56, 61, 52, 56, 59, 53, 49, 56, 53, - 55, 48, 45, 45, 36, 16, 49, 75, 76, 65, 64, 79, 80, 76, 85, 107, - 108, 142, 174, 167, 112, 106, 97, 108, 99, 56, 45, 45, 46, 45, 42, 44, - 44, 81, 103, 163, 123, 126, 153, 155, 159, 157, 154, 161, 147, 147, 140, 162, - 91, 20, 12, 13, 2, 9, 8, 22, 42, 64, 83, 81, 75, 84, 55, 48, - 30, 55, 56, 71, 69, 65, 52, 46, 44, 40, 40, 30, 22, 21, 25, 10, - 13, 12, 10, 8, 9, 6, 6, 5, 5, 6, 14, 40, 46, 46, 44, 40, - 60, 46, 56, 42, 16, 9, 32, 55, 49, 42, 51, 52, 49, 46, 49, 46, - 38, 24, 63, 45, 37, 40, 38, 38, 38, 38, 36, 34, 33, 32, 33, 32, - 32, 32, 30, 29, 28, 28, 28, 25, 25, 4, 18, 21, 17, 17, 20, 21, - 20, 21, 21, 24, 21, 21, 24, 24, 25, 25, 24, 24, 24, 25, 24, 21, - 4, 25, 29, 26, 28, 28, 29, 29, 29, 30, 30, 32, 32, 26, 30, 33, - 32, 28, 34, 33, 29, 24, 34, 29, 22, 9, 33, 20, 17, 16, 20, 12, - 18, 21, 13, 13, 22, 13, 28, 34, 30, 28, 42, 48, 44, 33, 48, 49, - 29, 6, 37, 9, 10, 10, 10, 8, 8, 9, 9, 6, 6, 8, 6, 6, - 6, 8, 8, 8, 8, 10, 10, 9, 10, 12, 14, 14, 16, 18, 21, 40, - 38, 45, 32, 21, 9, 51, 69, 56, 67, 71, 64, 63, 51, 52, 36, 33, - 24, 20, 12, 18, 18, 20, 22, 21, 14, 14, 12, 10, 17, 6, 12, 12, - 12, 13, 13, 20, 28, 17, 14, 17, 16, 25, 32, 28, 21, 29, 20, 24, - 28, 25, 20, 12, 4, 38, 36, 38, 38, 33, 30, 29, 28, 29, 26, 25, - 26, 24, 25, 22, 22, 22, 22, 20, 22, 21, 22, 21, 20, 14, 36, 21, - 25, 24, 22, 21, 14, 18, 20, 12, 6, 5, 8, 6, 8, 8, 6, 5, - 6, 20, 18, 17, 9, 9, 33, 14, 9, 8, 10, 9, 5, 8, 8, 6, - 21, 24, 12, 26, 26, 37, 42, 88, 132, 112, 123, 148, 151, 159, 167, 174, - 181, 191, 194, 205, 198, 165, 120, 120, 119, 110, 96, 60, 18, 9, 6, 8, - 4, 5, 5, 6, 2, 4, 0, 0, 0, 0, 0, 65, 60, 75, 77, 69, - 63, 84, 80, 29, 6, 44, 73, 68, 52, 63, 57, 33, 29, 34, 32, 30, - 28, 17, 21, 40, 48, 63, 68, 81, 81, 96, 103, 84, 67, 85, 93, 85, - 76, 48, 37, 34, 30, 52, 45, 26, 42, 44, 36, 37, 29, 30, 22, 25, - 24, 22, 24, 21, 17, 16, 13, 13, 12, 12, 12, 12, 12, 12, 13, 12, - 10, 12, 21, 53, 69, 79, 77, 81, 80, 81, 75, 75, 42, 6, 79, 108, - 107, 89, 53, 52, 44, 28, 26, 37, 29, 5, 1, 13, 9, 10, 1, 10, - 6, 1, 1, 8, 6, 0, 0, 10, 2, 1, 1, 5, 2, 1, 4, 8, - 8, 1, 1, 4, 13, 1, 0, 4, 1, 2, 0, 0, 4, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 2, 14, 5, 16, 13, 17, 16, 18, 24, 29, - 44, 44, 46, 55, 37, 36, 29, 33, 29, 28, 28, 22, 21, 32, 26, 28, - 18, 48, 52, 51, 60, 72, 72, 67, 96, 76, 110, 132, 146, 194, 189, 150, - 110, 100, 102, 100, 32, 29, 28, 37, 34, 32, 37, 36, 56, 95, 154, 161, - 126, 122, 150, 153, 155, 155, 162, 143, 144, 158, 151, 85, 17, 13, 10, 4, - 2, 13, 18, 20, 26, 18, 17, 29, 29, 37, 51, 30, 51, 52, 46, 33, - 34, 37, 34, 22, 24, 25, 18, 12, 6, 8, 9, 5, 4, 4, 2, 4, - 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 2, 4, 5, 5, 5, - 6, 12, 14, 20, 18, 21, 21, 26, 34, 46, 49, 38, 25, 46, 34, 34, - 28, 21, 22, 20, 16, 14, 14, 10, 8, 8, 8, 5, 4, 4, 6, 2, - 2, 2, 6, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 2, 2, - 2, 4, 5, 1, 2, 8, 9, 1, 4, 12, 13, 10, 2, 10, 9, 1, - 1, 8, 1, 1, 5, 5, 0, 0, 0, 4, 1, 0, 2, 2, 0, 0, - 0, 2, 0, 0, 8, 10, 20, 40, 63, 42, 48, 57, 71, 60, 45, 25, - 17, 42, 60, 60, 45, 46, 22, 12, 12, 9, 13, 9, 5, 6, 26, 28, - 22, 22, 33, 29, 33, 26, 41, 20, 1, 16, 75, 96, 59, 69, 77, 88, - 67, 69, 64, 64, 60, 68, 76, 76, 65, 32, 22, 21, 21, 32, 18, 9, - 24, 22, 22, 21, 24, 21, 21, 22, 24, 22, 24, 21, 20, 16, 9, 6, - 14, 21, 10, 12, 38, 59, 64, 36, 6, 45, 59, 56, 22, 20, 18, 22, - 14, 20, 10, 34, 17, 12, 8, 8, 13, 8, 20, 17, 21, 13, 14, 17, - 6, 18, 18, 30, 14, 17, 16, 18, 16, 20, 20, 16, 16, 18, 18, 16, - 17, 20, 17, 16, 16, 21, 17, 6, 18, 36, 26, 26, 21, 25, 28, 30, - 41, 29, 21, 8, 45, 65, 65, 51, 64, 61, 59, 29, 21, 17, 8, 4, - 2, 9, 25, 33, 33, 36, 29, 32, 20, 28, 14, 14, 36, 75, 96, 65, - 63, 65, 53, 127, 151, 138, 146, 123, 126, 128, 144, 147, 154, 153, 155, 140, - 127, 131, 107, 72, 53, 29, 10, 9, 9, 8, 5, 9, 12, 18, 17, 21, - 1, 0, 18, 64, 64, 61, 115, 114, 110, 108, 96, 102, 96, 92, 61, 18, - 44, 59, 55, 59, 68, 63, 63, 64, 53, 55, 30, 18, 52, 112, 123, 115, - 116, 115, 114, 107, 103, 89, 102, 107, 106, 107, 99, 108, 106, 97, 87, 76, - 51, 48, 25, 28, 33, 42, 48, 61, 67, 91, 76, 83, 67, 48, 45, 53, - 100, 107, 100, 89, 112, 103, 80, 108, 95, 96, 88, 93, 91, 97, 112, 96, - 89, 76, 87, 91, 79, 87, 77, 45, 9, 80, 106, 106, 99, 107, 107, 83, - 93, 57, 38, 29, 42, 60, 60, 59, 51, 46, 34, 46, 36, 12, 14, 4, - 24, 108, 104, 72, 76, 99, 97, 76, 76, 73, 28, 2, 18, 67, 81, 53, - 56, 53, 52, 61, 52, 26, 10, 44, 57, 60, 46, 42, 46, 46, 44, 42, - 33, 29, 4, 6, 81, 99, 96, 80, 95, 69, 30, 21, 18, 17, 14, 16, - 20, 34, 52, 56, 61, 61, 65, 73, 71, 69, 51, 18, 85, 87, 88, 75, - 107, 80, 88, 75, 84, 126, 143, 199, 202, 190, 177, 119, 104, 100, 110, 30, - 28, 30, 29, 32, 26, 28, 42, 55, 92, 175, 177, 119, 126, 110, 127, 134, - 130, 126, 154, 150, 138, 97, 68, 17, 13, 5, 20, 16, 20, 69, 80, 63, - 63, 38, 30, 30, 28, 44, 22, 18, 29, 41, 44, 46, 37, 42, 41, 60, - 56, 59, 61, 96, 91, 100, 89, 97, 91, 84, 102, 97, 89, 91, 83, 81, - 84, 88, 100, 81, 85, 73, 44, 52, 41, 30, 2, 9, 69, 103, 108, 77, - 73, 61, 55, 45, 48, 30, 34, 26, 28, 42, 40, 44, 29, 41, 41, 64, - 36, 33, 37, 72, 96, 100, 83, 71, 84, 87, 80, 79, 85, 77, 13, 2, - 45, 104, 75, 77, 72, 80, 77, 85, 95, 91, 88, 77, 88, 89, 104, 88, - 87, 87, 88, 84, 81, 16, 5, 26, 91, 110, 84, 87, 89, 89, 87, 95, - 92, 93, 95, 89, 97, 108, 104, 102, 96, 92, 88, 80, 85, 80, 18, 1, - 44, 72, 83, 88, 81, 79, 83, 73, 80, 71, 34, 14, 44, 73, 59, 59, - 53, 51, 56, 48, 45, 36, 9, 28, 69, 79, 76, 75, 69, 64, 40, 42, - 53, 36, 22, 1, 80, 84, 67, 72, 68, 77, 65, 80, 63, 65, 59, 63, - 42, 59, 72, 60, 55, 65, 64, 57, 45, 26, 9, 8, 8, 6, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 6, 13, 61, 76, 69, 61, 67, 57, 60, - 65, 64, 46, 6, 53, 69, 60, 55, 44, 42, 36, 48, 49, 38, 8, 13, - 63, 75, 72, 65, 59, 44, 22, 12, 12, 10, 4, 0, 0, 4, 2, 0, - 0, 2, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 6, 1, 1, 1, - 10, 2, 2, 17, 33, 49, 79, 80, 83, 81, 79, 73, 36, 26, 8, 53, - 65, 42, 48, 53, 45, 44, 42, 55, 46, 32, 10, 5, 45, 65, 73, 72, - 67, 75, 65, 65, 29, 16, 14, 100, 110, 88, 97, 85, 97, 89, 99, 41, - 61, 61, 88, 89, 99, 134, 135, 132, 127, 132, 131, 116, 84, 57, 22, 12, - 13, 14, 13, 8, 6, 10, 17, 13, 20, 29, 8, 1, 4, 42, 68, 83, - 84, 84, 91, 91, 103, 99, 104, 95, 100, 63, 18, 59, 61, 72, 52, 65, - 65, 48, 72, 72, 55, 29, 14, 103, 111, 104, 80, 85, 81, 75, 79, 84, - 79, 91, 67, 84, 89, 110, 111, 103, 106, 97, 97, 64, 59, 25, 69, 97, - 93, 97, 92, 97, 92, 106, 119, 83, 73, 73, 56, 72, 111, 103, 84, 89, - 104, 111, 118, 112, 96, 95, 97, 77, 79, 92, 92, 87, 88, 80, 76, 76, - 77, 80, 53, 6, 91, 108, 102, 104, 97, 97, 96, 102, 80, 56, 30, 53, - 65, 63, 68, 61, 60, 65, 75, 65, 30, 9, 12, 83, 107, 95, 89, 89, - 91, 96, 96, 93, 88, 33, 0, 89, 96, 100, 95, 88, 84, 88, 81, 76, - 51, 13, 67, 59, 56, 44, 48, 36, 37, 26, 25, 25, 32, 1, 5, 83, - 97, 99, 96, 93, 88, 85, 92, 84, 80, 67, 75, 59, 72, 89, 80, 88, - 84, 99, 100, 93, 84, 51, 18, 92, 104, 96, 112, 87, 100, 80, 83, 111, - 144, 197, 198, 194, 198, 170, 111, 104, 106, 110, 36, 28, 25, 30, 32, 28, - 46, 40, 60, 87, 186, 186, 123, 120, 127, 123, 92, 103, 99, 83, 76, 87, - 72, 49, 13, 13, 6, 18, 14, 45, 85, 77, 79, 71, 76, 76, 65, 68, - 36, 25, 42, 100, 104, 96, 95, 93, 104, 85, 99, 53, 83, 71, 69, 87, - 81, 93, 85, 77, 81, 88, 75, 72, 80, 73, 76, 65, 46, 33, 61, 38, - 42, 37, 36, 41, 33, 2, 8, 83, 118, 100, 96, 108, 107, 87, 96, 104, - 69, 52, 28, 55, 95, 99, 96, 95, 87, 95, 99, 93, 110, 89, 64, 61, - 65, 64, 61, 69, 76, 64, 77, 69, 76, 38, 4, 99, 91, 60, 71, 85, - 79, 85, 69, 81, 91, 88, 79, 59, 55, 61, 51, 46, 59, 59, 52, 48, - 18, 0, 97, 119, 115, 116, 112, 116, 111, 112, 106, 104, 108, 103, 80, 63, - 75, 77, 76, 81, 81, 81, 64, 63, 68, 18, 12, 60, 79, 80, 60, 52, - 61, 56, 57, 57, 76, 37, 20, 55, 71, 52, 59, 56, 69, 53, 34, 55, - 37, 9, 22, 73, 72, 57, 75, 61, 65, 71, 57, 36, 32, 22, 4, 79, - 79, 60, 59, 51, 64, 72, 72, 64, 73, 40, 32, 59, 72, 60, 57, 53, - 51, 49, 57, 32, 32, 12, 17, 80, 89, 71, 60, 81, 89, 85, 81, 85, - 77, 75, 68, 71, 75, 92, 93, 87, 83, 64, 60, 52, 59, 42, 8, 48, - 68, 65, 64, 61, 61, 56, 36, 30, 12, 8, 49, 104, 102, 110, 97, 100, - 89, 85, 77, 48, 22, 5, 57, 64, 75, 61, 76, 61, 69, 55, 65, 60, - 63, 51, 52, 85, 69, 83, 76, 83, 84, 63, 73, 100, 75, 25, 18, 60, - 83, 75, 72, 59, 57, 48, 57, 45, 21, 6, 51, 64, 67, 42, 48, 53, - 52, 48, 44, 41, 44, 13, 6, 55, 64, 72, 67, 67, 67, 59, 36, 22, - 12, 9, 108, 85, 96, 96, 95, 75, 130, 127, 56, 44, 36, 32, 38, 42, - 59, 65, 56, 59, 57, 51, 33, 18, 13, 10, 13, 13, 13, 2, 4, 9, - 20, 21, 13, 25, 10, 9, 0, 2, 38, 73, 55, 57, 77, 80, 87, 96, - 102, 96, 95, 97, 55, 8, 42, 59, 67, 60, 57, 52, 68, 63, 68, 49, - 29, 16, 107, 108, 83, 73, 87, 85, 102, 89, 73, 79, 83, 61, 81, 99, - 81, 97, 92, 97, 99, 96, 93, 57, 26, 87, 99, 104, 84, 80, 76, 76, - 71, 69, 64, 76, 71, 53, 108, 115, 106, 97, 103, 99, 97, 87, 100, 83, - 80, 60, 96, 99, 80, 75, 73, 79, 77, 81, 69, 77, 67, 49, 6, 84, - 97, 92, 104, 99, 96, 89, 92, 75, 57, 32, 59, 51, 72, 79, 77, 84, - 88, 80, 63, 33, 9, 2, 111, 104, 81, 84, 84, 81, 80, 75, 81, 77, - 33, 10, 95, 72, 77, 79, 83, 89, 88, 89, 71, 63, 17, 61, 49, 41, - 34, 21, 14, 34, 24, 13, 26, 34, 1, 2, 76, 96, 83, 79, 71, 77, - 89, 91, 83, 79, 52, 42, 87, 103, 99, 92, 85, 91, 87, 93, 93, 80, - 55, 20, 88, 93, 107, 99, 123, 104, 83, 91, 116, 173, 199, 197, 195, 194, - 138, 107, 106, 103, 97, 26, 24, 25, 28, 22, 36, 46, 36, 56, 88, 201, - 193, 175, 122, 124, 144, 135, 134, 134, 130, 130, 111, 100, 48, 13, 10, 6, - 21, 13, 48, 87, 69, 84, 75, 71, 65, 69, 61, 38, 22, 76, 88, 79, - 85, 88, 80, 72, 68, 65, 89, 73, 60, 83, 93, 95, 87, 75, 76, 60, - 67, 64, 76, 64, 61, 33, 52, 48, 28, 28, 30, 29, 41, 38, 45, 28, - 6, 6, 77, 123, 104, 108, 95, 93, 103, 103, 108, 112, 63, 29, 77, 100, - 103, 96, 107, 92, 99, 92, 81, 85, 57, 71, 88, 83, 80, 73, 68, 71, - 80, 80, 73, 75, 51, 5, 95, 57, 96, 88, 60, 64, 89, 75, 69, 69, - 72, 45, 64, 77, 88, 92, 81, 79, 80, 59, 57, 21, 8, 102, 115, 110, - 89, 93, 97, 104, 100, 107, 99, 104, 83, 61, 88, 89, 85, 80, 80, 81, - 69, 69, 64, 56, 25, 1, 59, 80, 71, 56, 59, 56, 72, 73, 67, 71, - 36, 18, 59, 64, 38, 57, 36, 44, 38, 36, 67, 37, 9, 21, 67, 65, - 61, 59, 57, 67, 64, 63, 36, 33, 21, 2, 51, 77, 64, 64, 48, 46, - 60, 45, 63, 48, 38, 29, 56, 72, 67, 59, 52, 61, 56, 48, 37, 32, - 12, 46, 92, 84, 83, 81, 84, 87, 84, 80, 71, 68, 64, 40, 72, 93, - 75, 61, 71, 64, 63, 67, 52, 69, 34, 9, 45, 51, 75, 38, 36, 37, - 22, 17, 22, 8, 5, 64, 104, 102, 84, 89, 91, 102, 95, 96, 68, 36, - 9, 49, 56, 33, 48, 63, 79, 44, 34, 56, 38, 37, 48, 57, 63, 85, - 99, 97, 95, 83, 81, 83, 93, 80, 46, 30, 64, 72, 55, 59, 59, 63, - 63, 64, 34, 22, 6, 55, 65, 65, 38, 38, 49, 37, 49, 51, 49, 41, - 12, 5, 57, 69, 63, 51, 57, 56, 52, 32, 18, 10, 6, 81, 97, 81, - 107, 115, 97, 97, 48, 65, 56, 51, 29, 33, 24, 24, 29, 20, 24, 20, - 21, 18, 16, 14, 10, 13, 5, 5, 13, 22, 21, 18, 17, 18, 26, 10, - 2, 0, 0, 44, 67, 48, 12, 112, 106, 102, 79, 80, 99, 91, 91, 55, - 6, 53, 64, 68, 81, 61, 57, 52, 60, 61, 34, 24, 14, 83, 111, 79, - 83, 69, 88, 76, 89, 73, 81, 85, 63, 77, 93, 75, 79, 87, 107, 100, - 87, 93, 65, 26, 83, 104, 79, 81, 75, 73, 73, 68, 65, 73, 71, 37, - 22, 111, 112, 100, 107, 95, 99, 95, 95, 107, 77, 81, 55, 91, 93, 77, - 79, 79, 73, 89, 89, 80, 72, 81, 45, 6, 80, 99, 93, 97, 92, 85, - 76, 106, 96, 59, 41, 37, 60, 61, 77, 69, 51, 63, 71, 57, 5, 9, - 2, 72, 103, 79, 84, 81, 88, 79, 87, 85, 84, 36, 1, 61, 85, 89, - 68, 67, 72, 73, 103, 84, 41, 20, 26, 46, 46, 33, 18, 24, 10, 17, - 16, 14, 22, 1, 4, 71, 92, 93, 72, 64, 69, 71, 69, 67, 51, 55, - 46, 102, 102, 91, 112, 83, 89, 87, 91, 93, 84, 60, 24, 93, 96, 92, - 69, 67, 85, 77, 103, 144, 202, 198, 198, 190, 140, 111, 100, 103, 114, 56, - 24, 24, 24, 25, 36, 38, 48, 46, 69, 92, 201, 202, 187, 122, 124, 128, - 143, 147, 148, 147, 143, 135, 116, 56, 12, 14, 5, 18, 10, 37, 83, 71, - 75, 73, 88, 87, 71, 67, 46, 24, 79, 81, 81, 72, 79, 85, 71, 68, - 71, 72, 69, 52, 79, 93, 69, 64, 81, 67, 71, 61, 61, 65, 68, 59, - 30, 49, 67, 64, 55, 34, 17, 46, 21, 22, 25, 6, 8, 91, 112, 95, - 99, 104, 106, 102, 99, 97, 93, 71, 36, 85, 102, 87, 84, 85, 83, 81, - 85, 77, 59, 52, 76, 91, 68, 76, 76, 75, 72, 73, 73, 76, 83, 32, - 5, 51, 87, 65, 79, 79, 76, 83, 87, 84, 76, 59, 41, 65, 77, 71, - 61, 52, 60, 61, 73, 65, 18, 6, 75, 115, 107, 114, 102, 100, 103, 108, - 106, 111, 93, 79, 60, 91, 95, 73, 81, 77, 79, 80, 81, 76, 52, 22, - 1, 57, 84, 69, 52, 53, 56, 61, 55, 60, 65, 38, 25, 44, 75, 42, - 44, 48, 42, 52, 41, 51, 29, 9, 21, 44, 68, 57, 49, 48, 59, 63, - 64, 36, 36, 22, 0, 49, 85, 52, 65, 46, 51, 56, 41, 63, 41, 33, - 21, 65, 73, 71, 61, 38, 45, 48, 60, 55, 45, 12, 63, 93, 77, 59, - 61, 64, 75, 64, 77, 68, 60, 42, 37, 72, 88, 69, 72, 68, 64, 55, - 53, 56, 64, 34, 10, 51, 57, 36, 38, 18, 25, 22, 24, 9, 6, 2, - 52, 102, 99, 83, 89, 88, 88, 84, 103, 75, 40, 6, 48, 49, 79, 64, - 73, 87, 34, 55, 57, 36, 44, 53, 42, 80, 97, 89, 88, 75, 84, 85, - 84, 81, 76, 55, 20, 72, 64, 61, 42, 46, 40, 46, 60, 44, 22, 9, - 49, 69, 72, 38, 37, 36, 41, 36, 33, 46, 26, 10, 4, 56, 60, 64, - 37, 42, 30, 30, 29, 21, 13, 9, 88, 93, 95, 79, 89, 68, 104, 64, - 67, 56, 53, 45, 36, 25, 24, 21, 21, 18, 17, 14, 16, 14, 13, 10, - 5, 6, 16, 21, 22, 30, 17, 14, 17, 30, 12, 21, 0, 0, 41, 67, - 37, 59, 77, 80, 80, 96, 80, 77, 89, 84, 60, 14, 52, 52, 64, 60, - 60, 63, 57, 69, 55, 40, 36, 13, 85, 103, 89, 71, 88, 77, 77, 72, - 75, 85, 75, 57, 87, 99, 93, 84, 93, 108, 95, 85, 102, 64, 32, 71, - 96, 75, 76, 71, 67, 84, 79, 77, 75, 68, 46, 20, 111, 112, 106, 99, - 92, 100, 83, 84, 88, 71, 73, 53, 91, 93, 79, 81, 79, 84, 69, 77, - 88, 71, 72, 48, 8, 83, 96, 85, 115, 100, 83, 89, 99, 88, 64, 42, - 55, 51, 56, 45, 32, 42, 45, 38, 49, 12, 6, 1, 71, 99, 76, 83, - 87, 85, 85, 89, 87, 80, 34, 1, 68, 81, 80, 76, 69, 67, 68, 83, - 77, 44, 18, 56, 65, 24, 29, 13, 32, 13, 12, 28, 24, 22, 0, 2, - 79, 93, 88, 69, 73, 76, 80, 75, 64, 55, 36, 42, 97, 106, 89, 97, - 77, 91, 103, 102, 91, 76, 56, 29, 79, 85, 93, 73, 68, 79, 67, 100, - 181, 198, 197, 194, 146, 115, 100, 107, 111, 65, 38, 21, 25, 25, 26, 36, - 41, 48, 48, 64, 89, 209, 206, 195, 120, 122, 128, 131, 139, 143, 146, 147, - 140, 120, 57, 10, 10, 5, 21, 9, 42, 84, 68, 73, 71, 87, 87, 68, - 79, 38, 24, 71, 79, 87, 96, 96, 100, 71, 63, 61, 71, 60, 49, 73, - 92, 75, 75, 61, 73, 75, 76, 60, 80, 65, 53, 36, 61, 57, 48, 28, - 21, 10, 16, 18, 25, 21, 4, 6, 91, 114, 111, 92, 114, 99, 97, 97, - 91, 96, 68, 42, 73, 97, 80, 77, 72, 95, 79, 67, 75, 63, 44, 79, - 93, 69, 68, 75, 67, 75, 69, 72, 76, 79, 33, 5, 55, 83, 92, 56, - 59, 81, 67, 68, 69, 71, 57, 38, 63, 93, 81, 48, 71, 87, 73, 56, - 56, 17, 0, 89, 110, 108, 106, 99, 100, 92, 93, 93, 102, 95, 75, 57, - 87, 85, 67, 69, 75, 79, 79, 81, 64, 61, 22, 1, 51, 75, 63, 60, - 52, 59, 45, 60, 60, 65, 42, 24, 48, 64, 34, 32, 46, 46, 45, 51, - 52, 29, 12, 18, 60, 67, 48, 75, 52, 68, 65, 41, 38, 37, 18, 1, - 73, 71, 57, 64, 44, 42, 52, 38, 73, 42, 33, 25, 56, 68, 80, 65, - 68, 56, 44, 42, 49, 32, 14, 53, 95, 88, 85, 67, 71, 52, 59, 59, - 65, 32, 30, 21, 67, 80, 59, 56, 53, 44, 52, 53, 65, 57, 37, 14, - 44, 61, 34, 29, 24, 38, 24, 25, 9, 6, 4, 56, 103, 100, 83, 99, - 89, 83, 81, 93, 67, 42, 6, 34, 41, 56, 67, 46, 51, 48, 57, 29, - 51, 49, 52, 8, 77, 95, 76, 88, 92, 84, 96, 100, 96, 81, 52, 22, - 63, 67, 51, 45, 44, 44, 59, 60, 65, 33, 8, 52, 55, 65, 38, 40, - 44, 41, 37, 53, 44, 40, 14, 2, 49, 76, 60, 41, 33, 42, 34, 28, - 24, 13, 8, 100, 104, 88, 91, 63, 65, 83, 64, 65, 52, 56, 55, 48, - 22, 33, 21, 24, 22, 21, 16, 14, 14, 17, 9, 2, 6, 17, 26, 29, - 26, 30, 22, 22, 21, 13, 5, 0, 6, 49, 61, 40, 30, 114, 114, 93, - 92, 96, 91, 89, 102, 63, 10, 34, 60, 65, 52, 75, 55, 59, 45, 57, - 36, 24, 12, 85, 108, 87, 89, 89, 77, 85, 84, 77, 84, 69, 56, 81, - 88, 85, 72, 93, 99, 93, 83, 100, 64, 34, 75, 96, 83, 83, 61, 69, - 83, 72, 69, 69, 68, 59, 41, 116, 120, 92, 104, 77, 92, 85, 88, 83, - 79, 77, 53, 92, 87, 80, 83, 87, 72, 81, 85, 85, 69, 73, 49, 8, - 79, 91, 97, 92, 102, 81, 85, 107, 81, 65, 36, 59, 69, 48, 55, 59, - 55, 53, 41, 32, 20, 5, 10, 77, 100, 91, 87, 89, 96, 97, 89, 92, - 79, 34, 0, 79, 83, 64, 77, 76, 67, 69, 72, 67, 53, 24, 51, 57, - 40, 24, 16, 29, 6, 13, 17, 16, 20, 0, 2, 83, 93, 88, 79, 79, - 72, 81, 88, 69, 55, 40, 53, 107, 99, 96, 84, 72, 92, 95, 84, 80, - 79, 56, 29, 81, 89, 96, 79, 91, 64, 61, 99, 190, 199, 193, 155, 116, - 97, 119, 57, 55, 37, 22, 24, 22, 26, 25, 32, 40, 42, 49, 75, 115, - 208, 205, 198, 118, 118, 126, 128, 131, 135, 143, 147, 140, 116, 48, 9, 8, - 5, 16, 13, 48, 83, 68, 72, 71, 88, 73, 80, 56, 44, 30, 71, 92, - 77, 93, 83, 81, 91, 80, 59, 68, 59, 46, 80, 92, 89, 55, 89, 65, - 71, 60, 79, 72, 65, 46, 40, 32, 53, 38, 24, 12, 12, 20, 20, 28, - 17, 1, 5, 95, 112, 92, 95, 103, 114, 103, 91, 103, 97, 72, 42, 64, - 102, 85, 79, 97, 84, 67, 75, 64, 53, 40, 79, 95, 69, 79, 88, 81, - 87, 92, 76, 72, 75, 38, 9, 60, 76, 84, 60, 73, 85, 77, 68, 76, - 68, 57, 36, 60, 76, 73, 65, 60, 59, 59, 59, 59, 18, 0, 88, 112, - 108, 108, 103, 107, 99, 93, 95, 99, 91, 52, 63, 89, 76, 67, 79, 89, - 88, 71, 63, 63, 56, 21, 17, 69, 76, 60, 56, 52, 68, 53, 64, 64, - 65, 44, 29, 52, 75, 34, 30, 51, 53, 55, 44, 44, 26, 10, 17, 57, - 64, 55, 65, 55, 64, 45, 41, 41, 40, 21, 8, 68, 67, 45, 56, 40, - 41, 55, 36, 56, 42, 32, 25, 51, 69, 67, 72, 72, 59, 34, 45, 46, - 32, 17, 41, 89, 81, 84, 63, 60, 63, 89, 65, 59, 33, 33, 34, 67, - 77, 61, 55, 52, 68, 71, 61, 68, 61, 42, 14, 44, 56, 37, 25, 12, - 18, 16, 33, 13, 6, 6, 65, 102, 96, 84, 99, 84, 84, 91, 95, 69, - 41, 6, 53, 44, 53, 57, 40, 51, 59, 38, 26, 37, 44, 25, 5, 79, - 93, 89, 96, 95, 85, 83, 84, 80, 81, 53, 26, 57, 69, 61, 40, 44, - 41, 49, 55, 56, 33, 6, 42, 63, 59, 38, 40, 33, 38, 33, 33, 42, - 34, 14, 4, 55, 63, 61, 40, 24, 33, 30, 18, 22, 12, 6, 102, 93, - 93, 64, 76, 81, 49, 65, 55, 59, 56, 52, 44, 26, 37, 25, 22, 16, - 18, 13, 22, 21, 17, 9, 4, 8, 17, 26, 21, 25, 29, 14, 20, 6, - 18, 5, 0, 1, 36, 63, 24, 18, 88, 100, 104, 97, 95, 88, 91, 88, - 59, 10, 46, 55, 61, 59, 52, 51, 55, 53, 56, 38, 25, 13, 77, 100, - 77, 77, 80, 80, 85, 81, 79, 67, 68, 45, 84, 89, 88, 65, 91, 83, - 83, 81, 87, 64, 36, 53, 89, 81, 87, 71, 75, 81, 81, 85, 80, 65, - 65, 38, 118, 106, 100, 108, 85, 102, 83, 88, 79, 83, 75, 56, 88, 87, - 80, 71, 76, 71, 87, 75, 81, 69, 63, 48, 8, 84, 81, 79, 92, 92, - 83, 84, 92, 81, 68, 37, 49, 44, 52, 41, 34, 34, 49, 48, 18, 10, - 8, 2, 76, 100, 77, 83, 99, 97, 83, 88, 93, 77, 36, 12, 83, 80, - 65, 79, 73, 64, 71, 69, 72, 64, 28, 56, 52, 61, 26, 18, 41, 12, - 12, 13, 28, 20, 0, 1, 83, 81, 92, 80, 75, 61, 77, 87, 71, 57, - 38, 63, 110, 96, 84, 80, 79, 97, 85, 77, 68, 71, 60, 30, 76, 91, - 89, 88, 65, 63, 72, 93, 183, 191, 166, 118, 99, 106, 56, 34, 24, 21, - 21, 22, 21, 25, 22, 33, 42, 44, 63, 81, 166, 210, 206, 199, 119, 119, - 126, 130, 130, 134, 143, 144, 138, 112, 26, 9, 9, 6, 16, 13, 44, 80, - 64, 73, 72, 83, 76, 77, 59, 40, 25, 72, 83, 85, 81, 73, 64, 64, - 65, 63, 65, 46, 42, 75, 89, 91, 65, 73, 61, 75, 73, 79, 68, 59, - 49, 30, 42, 52, 37, 37, 44, 46, 38, 28, 32, 16, 5, 4, 75, 112, - 91, 95, 87, 104, 114, 99, 93, 96, 69, 48, 64, 96, 79, 89, 87, 93, - 68, 71, 65, 52, 41, 83, 97, 79, 75, 91, 84, 85, 79, 76, 72, 67, - 51, 10, 69, 76, 84, 61, 72, 81, 72, 73, 71, 68, 53, 32, 53, 79, - 75, 81, 60, 65, 73, 63, 56, 20, 5, 89, 108, 118, 91, 85, 103, 100, - 99, 91, 93, 89, 46, 63, 95, 77, 71, 79, 97, 88, 77, 69, 55, 51, - 22, 2, 72, 75, 55, 53, 51, 64, 60, 64, 60, 64, 48, 22, 41, 71, - 41, 73, 37, 26, 38, 53, 40, 25, 9, 14, 63, 61, 45, 71, 51, 44, - 42, 38, 42, 38, 20, 5, 37, 56, 49, 38, 42, 40, 63, 36, 52, 40, - 30, 20, 55, 67, 77, 68, 76, 71, 57, 40, 44, 29, 16, 46, 85, 83, - 76, 49, 63, 53, 67, 57, 41, 37, 34, 32, 69, 71, 56, 61, 63, 51, - 45, 53, 48, 52, 38, 12, 38, 53, 41, 26, 21, 9, 9, 8, 14, 5, - 5, 67, 97, 96, 84, 88, 92, 85, 85, 100, 59, 41, 9, 48, 30, 51, - 40, 45, 36, 40, 41, 36, 38, 18, 37, 21, 77, 91, 89, 103, 77, 84, - 91, 87, 85, 77, 52, 28, 59, 61, 45, 30, 48, 59, 46, 56, 25, 28, - 8, 30, 38, 60, 32, 37, 41, 42, 32, 32, 38, 34, 12, 2, 53, 61, - 59, 34, 36, 29, 44, 21, 34, 10, 6, 59, 102, 79, 81, 79, 73, 59, - 65, 64, 63, 57, 61, 45, 28, 29, 25, 13, 28, 25, 24, 13, 16, 12, - 13, 4, 13, 20, 34, 37, 30, 25, 21, 8, 12, 12, 2, 0, 1, 49, - 38, 49, 20, 75, 106, 110, 89, 92, 95, 87, 81, 56, 5, 38, 61, 64, - 59, 56, 59, 68, 68, 48, 32, 24, 12, 72, 95, 79, 100, 80, 88, 80, - 72, 81, 73, 71, 41, 69, 103, 76, 63, 91, 87, 83, 83, 91, 65, 40, - 51, 89, 75, 89, 63, 76, 71, 75, 87, 75, 65, 41, 10, 115, 108, 95, - 89, 99, 88, 96, 92, 88, 76, 77, 52, 87, 84, 73, 77, 69, 71, 79, - 80, 75, 71, 67, 46, 8, 80, 93, 89, 95, 89, 73, 81, 87, 89, 69, - 53, 40, 51, 69, 60, 55, 61, 37, 33, 18, 1, 5, 1, 67, 96, 92, - 84, 87, 96, 85, 91, 83, 69, 37, 2, 60, 79, 61, 80, 73, 77, 59, - 68, 81, 52, 33, 16, 49, 49, 21, 20, 30, 13, 9, 17, 16, 16, 0, - 0, 79, 89, 89, 80, 80, 83, 81, 79, 68, 52, 41, 67, 108, 81, 91, - 92, 85, 85, 84, 97, 89, 67, 60, 32, 76, 87, 91, 88, 84, 75, 61, - 87, 170, 197, 162, 107, 89, 96, 44, 32, 24, 20, 25, 21, 20, 25, 22, - 45, 42, 41, 67, 93, 182, 217, 210, 204, 120, 119, 124, 130, 132, 138, 142, - 143, 130, 84, 13, 9, 8, 8, 16, 13, 51, 75, 65, 73, 75, 68, 80, - 71, 40, 46, 25, 65, 81, 76, 72, 71, 69, 81, 69, 64, 68, 57, 40, - 79, 80, 102, 72, 67, 68, 72, 73, 75, 59, 57, 30, 38, 28, 38, 33, - 32, 29, 29, 13, 18, 28, 18, 5, 4, 97, 114, 99, 88, 88, 88, 91, - 91, 89, 87, 81, 59, 67, 100, 79, 95, 83, 84, 61, 72, 53, 53, 38, - 77, 92, 73, 75, 81, 95, 76, 77, 75, 72, 64, 37, 9, 40, 56, 79, - 69, 83, 69, 68, 81, 68, 61, 48, 32, 48, 68, 69, 85, 80, 76, 59, - 63, 65, 18, 4, 76, 111, 110, 103, 99, 92, 97, 95, 95, 97, 72, 41, - 65, 88, 80, 63, 79, 99, 81, 72, 63, 57, 45, 24, 1, 57, 77, 53, - 46, 56, 55, 55, 60, 59, 61, 44, 36, 34, 63, 38, 36, 67, 26, 26, - 36, 32, 25, 8, 13, 56, 55, 48, 61, 61, 59, 48, 40, 48, 40, 22, - 5, 49, 67, 44, 37, 37, 32, 46, 46, 36, 38, 25, 14, 49, 63, 71, - 61, 69, 63, 60, 40, 42, 30, 17, 34, 73, 73, 103, 61, 68, 42, 37, - 44, 29, 28, 34, 28, 69, 69, 52, 45, 61, 49, 49, 44, 48, 44, 38, - 13, 37, 55, 42, 34, 26, 16, 26, 18, 8, 6, 2, 68, 96, 89, 92, - 95, 88, 75, 88, 103, 64, 42, 6, 49, 34, 63, 37, 25, 25, 57, 42, - 28, 25, 20, 45, 26, 81, 92, 92, 87, 87, 83, 83, 77, 83, 80, 73, - 29, 33, 64, 55, 46, 51, 49, 34, 30, 33, 25, 9, 20, 51, 56, 40, - 32, 29, 30, 34, 38, 36, 24, 9, 1, 41, 49, 53, 34, 44, 24, 30, - 22, 20, 10, 5, 89, 96, 76, 85, 80, 80, 65, 69, 69, 61, 57, 56, - 48, 28, 45, 30, 13, 13, 10, 9, 16, 10, 16, 8, 4, 17, 29, 28, - 13, 9, 10, 10, 8, 21, 13, 4, 0, 0, 22, 57, 21, 24, 80, 96, - 114, 107, 88, 83, 88, 81, 59, 8, 38, 56, 64, 69, 73, 65, 55, 52, - 45, 26, 17, 13, 71, 83, 97, 81, 100, 88, 81, 81, 80, 84, 65, 38, - 80, 89, 81, 80, 64, 71, 76, 71, 71, 69, 41, 53, 76, 73, 79, 80, - 76, 75, 75, 75, 75, 73, 46, 18, 106, 102, 77, 80, 88, 102, 100, 84, - 100, 75, 72, 46, 77, 85, 79, 72, 77, 73, 73, 76, 67, 69, 71, 46, - 9, 80, 83, 61, 75, 73, 59, 59, 75, 69, 72, 55, 34, 44, 30, 44, - 25, 28, 28, 34, 32, 1, 5, 8, 65, 92, 73, 80, 81, 80, 83, 93, - 87, 61, 36, 1, 59, 77, 64, 76, 77, 69, 68, 72, 69, 53, 22, 12, - 29, 21, 29, 21, 28, 24, 29, 22, 25, 16, 0, 0, 83, 92, 80, 83, - 85, 99, 89, 73, 59, 56, 29, 79, 108, 97, 102, 91, 93, 87, 72, 79, - 84, 77, 63, 34, 71, 85, 91, 87, 83, 61, 56, 69, 126, 198, 163, 114, - 97, 97, 49, 36, 22, 29, 29, 24, 24, 24, 24, 30, 42, 61, 83, 136, - 205, 216, 213, 198, 122, 119, 126, 131, 138, 143, 144, 139, 119, 41, 10, 8, - 5, 10, 21, 10, 42, 72, 71, 81, 76, 80, 77, 71, 53, 42, 24, 36, - 76, 79, 56, 61, 60, 52, 69, 67, 65, 52, 34, 68, 76, 79, 79, 73, - 73, 72, 71, 71, 64, 52, 32, 30, 45, 53, 57, 45, 42, 29, 45, 34, - 14, 13, 1, 2, 96, 110, 99, 68, 67, 67, 76, 63, 72, 73, 75, 60, - 55, 87, 83, 84, 83, 83, 59, 72, 51, 49, 32, 71, 85, 76, 75, 80, - 76, 76, 73, 76, 75, 72, 33, 9, 61, 73, 100, 79, 81, 79, 68, 65, - 63, 60, 49, 28, 38, 51, 60, 69, 76, 65, 72, 59, 64, 17, 10, 77, - 97, 102, 100, 92, 97, 99, 96, 95, 91, 73, 36, 61, 65, 91, 88, 95, - 88, 77, 65, 63, 51, 52, 21, 1, 67, 65, 55, 46, 53, 49, 48, 44, - 45, 45, 49, 37, 20, 44, 64, 49, 52, 18, 26, 38, 38, 26, 14, 10, - 57, 49, 44, 52, 46, 49, 46, 45, 45, 41, 20, 8, 48, 46, 42, 30, - 29, 26, 29, 33, 32, 36, 26, 14, 38, 57, 69, 68, 59, 49, 37, 42, - 44, 32, 18, 22, 46, 71, 68, 67, 34, 38, 36, 37, 34, 26, 25, 14, - 67, 69, 42, 56, 60, 56, 56, 41, 55, 46, 41, 21, 17, 52, 33, 36, - 14, 9, 16, 22, 20, 6, 14, 60, 91, 79, 93, 92, 91, 87, 88, 99, - 56, 41, 5, 48, 48, 52, 37, 24, 21, 18, 25, 36, 17, 33, 45, 4, - 68, 83, 81, 87, 79, 85, 76, 84, 79, 83, 64, 29, 33, 52, 53, 37, - 44, 33, 34, 36, 24, 29, 12, 16, 45, 25, 24, 17, 20, 25, 34, 37, - 25, 24, 14, 0, 44, 51, 61, 56, 38, 36, 37, 26, 21, 12, 4, 100, - 106, 72, 71, 73, 72, 73, 68, 68, 55, 59, 60, 48, 25, 22, 20, 10, - 9, 14, 16, 13, 10, 13, 9, 2, 17, 34, 9, 22, 40, 25, 26, 18, - 10, 9, 5, 0, 1, 45, 33, 30, 20, 81, 85, 88, 89, 99, 91, 91, - 73, 56, 6, 32, 48, 51, 49, 45, 48, 45, 46, 40, 29, 24, 12, 65, - 89, 97, 96, 87, 84, 85, 85, 84, 81, 57, 36, 77, 77, 81, 81, 83, - 72, 75, 72, 68, 68, 64, 60, 46, 48, 49, 46, 51, 49, 51, 55, 53, - 55, 56, 24, 116, 97, 92, 97, 88, 89, 89, 89, 88, 83, 76, 49, 89, - 87, 73, 73, 72, 64, 68, 61, 65, 64, 68, 46, 10, 77, 80, 73, 73, - 69, 84, 68, 65, 57, 71, 38, 33, 38, 28, 25, 24, 21, 21, 18, 17, - 13, 4, 1, 48, 91, 84, 84, 83, 91, 87, 91, 73, 73, 38, 1, 57, - 73, 63, 56, 77, 75, 71, 59, 61, 45, 40, 30, 18, 18, 12, 8, 5, - 5, 6, 5, 2, 4, 0, 1, 89, 89, 89, 83, 80, 77, 73, 73, 46, - 48, 29, 71, 103, 95, 84, 80, 80, 80, 72, 71, 71, 68, 63, 36, 46, - 76, 83, 77, 68, 44, 63, 59, 100, 182, 183, 143, 92, 119, 85, 44, 36, - 29, 33, 30, 30, 33, 38, 36, 65, 73, 116, 195, 216, 214, 216, 191, 120, - 120, 127, 135, 140, 146, 140, 128, 65, 12, 10, 8, 6, 9, 14, 16, 41, - 63, 67, 65, 64, 63, 59, 53, 56, 53, 30, 37, 72, 80, 55, 59, 64, - 60, 63, 61, 53, 48, 32, 46, 71, 75, 59, 56, 68, 71, 59, 59, 59, - 45, 29, 30, 29, 10, 14, 12, 25, 9, 12, 8, 4, 10, 0, 2, 84, - 97, 103, 96, 88, 87, 91, 88, 83, 81, 76, 75, 75, 52, 57, 63, 61, - 60, 72, 69, 64, 49, 29, 68, 84, 79, 81, 75, 76, 75, 77, 73, 72, - 68, 42, 13, 56, 59, 60, 60, 60, 60, 64, 57, 60, 49, 46, 25, 38, - 44, 57, 57, 52, 51, 51, 51, 44, 18, 0, 13, 48, 60, 49, 49, 57, - 67, 59, 56, 65, 57, 29, 26, 32, 34, 37, 41, 45, 41, 46, 44, 52, - 46, 18, 8, 64, 63, 64, 67, 59, 67, 56, 53, 49, 45, 41, 41, 20, - 18, 29, 37, 28, 20, 38, 37, 32, 25, 12, 9, 52, 45, 64, 49, 48, - 51, 49, 48, 46, 44, 24, 0, 38, 49, 25, 25, 28, 32, 30, 44, 33, - 38, 22, 14, 22, 45, 48, 37, 34, 38, 41, 32, 32, 37, 29, 18, 28, - 46, 45, 32, 32, 49, 36, 29, 32, 26, 25, 22, 60, 64, 63, 60, 55, - 60, 56, 49, 48, 53, 45, 17, 12, 38, 42, 42, 33, 12, 25, 25, 16, - 6, 6, 65, 93, 85, 88, 91, 92, 96, 88, 96, 69, 41, 5, 38, 45, - 36, 18, 25, 17, 17, 21, 17, 21, 25, 28, 12, 56, 68, 71, 49, 53, - 64, 64, 67, 59, 55, 46, 41, 42, 38, 33, 33, 32, 42, 30, 30, 25, - 25, 24, 10, 13, 16, 13, 17, 17, 20, 13, 37, 26, 17, 13, 0, 37, - 44, 42, 45, 41, 55, 24, 17, 20, 12, 2, 92, 92, 76, 65, 68, 60, - 59, 59, 60, 59, 55, 52, 44, 28, 30, 14, 22, 17, 13, 14, 10, 12, - 8, 8, 2, 20, 37, 44, 21, 16, 12, 8, 9, 8, 6, 4, 0, 0, - 32, 36, 25, 24, 72, 69, 69, 68, 69, 67, 69, 59, 41, 6, 29, 40, - 34, 25, 38, 40, 32, 29, 36, 32, 22, 10, 46, 89, 88, 85, 83, 63, - 56, 53, 64, 60, 51, 33, 53, 59, 59, 57, 56, 57, 60, 56, 56, 55, - 55, 51, 52, 37, 26, 21, 22, 32, 16, 12, 13, 10, 10, 21, 114, 77, - 92, 48, 88, 85, 83, 53, 84, 79, 72, 46, 81, 84, 65, 61, 57, 56, - 49, 53, 53, 53, 41, 21, 13, 44, 38, 41, 38, 37, 40, 37, 38, 36, - 33, 30, 26, 22, 21, 22, 20, 14, 13, 14, 12, 10, 12, 0, 18, 68, - 73, 51, 56, 77, 71, 64, 67, 65, 36, 16, 48, 64, 65, 61, 53, 51, - 49, 46, 42, 44, 18, 10, 6, 5, 9, 18, 22, 16, 8, 10, 10, 8, - 1, 0, 80, 51, 61, 59, 60, 64, 65, 71, 49, 42, 26, 63, 79, 85, - 83, 76, 79, 73, 69, 67, 71, 76, 67, 63, 64, 61, 41, 45, 59, 57, - 51, 56, 65, 162, 193, 157, 111, 111, 107, 72, 44, 30, 42, 41, 38, 36, - 40, 63, 73, 114, 183, 216, 216, 217, 213, 161, 119, 122, 128, 140, 143, 142, - 132, 92, 21, 10, 9, 8, 10, 10, 14, 17, 25, 52, 52, 48, 38, 51, - 49, 38, 41, 46, 36, 34, 67, 53, 51, 41, 40, 38, 37, 38, 40, 48, - 26, 16, 16, 22, 18, 17, 18, 24, 32, 44, 49, 34, 28, 8, 8, 5, - 5, 4, 4, 2, 0, 2, 4, 0, 5, 1, 10, 52, 63, 53, 53, 56, - 67, 60, 59, 61, 61, 61, 53, 63, 60, 63, 60, 67, 63, 65, 55, 48, - 34, 55, 75, 75, 77, 67, 64, 61, 60, 53, 56, 53, 38, 14, 24, 26, - 25, 26, 28, 30, 32, 36, 34, 36, 36, 24, 24, 13, 17, 17, 13, 9, - 9, 12, 12, 10, 2, 2, 5, 13, 5, 4, 12, 17, 8, 9, 16, 18, - 18, 16, 5, 13, 13, 12, 18, 26, 21, 26, 32, 32, 21, 0, 14, 24, - 28, 26, 26, 29, 30, 24, 25, 25, 22, 24, 20, 24, 33, 24, 22, 22, - 14, 22, 20, 24, 13, 16, 45, 40, 49, 46, 45, 44, 44, 40, 40, 38, - 18, 12, 34, 12, 16, 9, 9, 12, 14, 6, 5, 9, 13, 13, 9, 10, - 13, 12, 12, 14, 14, 17, 20, 28, 30, 30, 29, 32, 29, 26, 26, 28, - 26, 25, 24, 28, 28, 22, 57, 53, 51, 51, 41, 40, 38, 34, 33, 32, - 18, 21, 21, 18, 22, 16, 14, 9, 9, 9, 10, 5, 5, 61, 67, 83, - 85, 79, 76, 75, 81, 72, 53, 38, 8, 48, 33, 24, 21, 22, 20, 20, - 22, 22, 21, 22, 36, 17, 13, 14, 14, 13, 18, 21, 24, 24, 26, 34, - 38, 32, 29, 25, 26, 25, 25, 24, 25, 22, 22, 20, 18, 17, 20, 18, - 18, 16, 17, 16, 16, 12, 16, 16, 12, 0, 21, 29, 41, 17, 20, 25, - 36, 25, 16, 10, 2, 59, 92, 75, 63, 61, 61, 60, 55, 40, 38, 34, - 29, 29, 29, 16, 9, 20, 17, 13, 16, 13, 16, 10, 10, 2, 9, 18, - 16, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 45, 42, 38, 32, 30, 29, 25, 22, 0, 4, 8, 8, 6, 8, 14, 12, - 13, 18, 30, 17, 9, 64, 34, 33, 32, 32, 44, 33, 25, 22, 40, 36, - 20, 17, 13, 16, 13, 13, 12, 16, 13, 12, 10, 13, 12, 13, 29, 42, - 52, 52, 57, 91, 76, 95, 76, 55, 8, 122, 83, 96, 75, 63, 56, 57, - 57, 71, 73, 71, 44, 45, 46, 46, 40, 36, 33, 28, 25, 21, 22, 16, - 13, 12, 10, 9, 8, 6, 6, 5, 5, 4, 4, 4, 2, 1, 5, 6, - 1, 0, 1, 4, 0, 0, 1, 2, 0, 17, 13, 13, 17, 16, 34, 61, - 37, 46, 55, 33, 1, 44, 14, 20, 16, 17, 12, 17, 12, 16, 9, 8, - 9, 10, 24, 49, 44, 57, 61, 67, 59, 68, 64, 38, 0, 92, 79, 77, - 68, 61, 59, 59, 45, 55, 44, 25, 48, 49, 52, 49, 49, 51, 52, 52, - 53, 49, 55, 52, 51, 51, 33, 25, 26, 28, 37, 64, 63, 65, 108, 181, - 171, 114, 81, 151, 100, 77, 76, 80, 81, 81, 80, 79, 102, 150, 197, 216, - 216, 214, 214, 199, 132, 119, 127, 139, 142, 139, 132, 103, 29, 12, 10, 8, - 10, 14, 16, 8, 17, 24, 21, 25, 28, 28, 28, 29, 30, 34, 42, 42, - 36, 38, 30, 33, 40, 33, 37, 45, 61, 52, 46, 32, 37, 79, 81, 71, - 63, 46, 45, 41, 37, 13, 9, 6, 4, 0, 13, 2, 1, 2, 9, 0, - 2, 4, 0, 0, 5, 8, 2, 2, 2, 6, 5, 5, 6, 8, 9, 10, - 12, 13, 16, 18, 25, 25, 29, 30, 36, 37, 45, 33, 37, 51, 51, 32, - 33, 36, 37, 22, 22, 26, 21, 12, 2, 8, 2, 13, 14, 8, 6, 12, - 12, 6, 8, 10, 13, 45, 57, 69, 68, 60, 72, 64, 68, 36, 32, 1, - 14, 102, 108, 72, 67, 84, 92, 60, 64, 61, 21, 10, 40, 89, 85, 48, - 45, 48, 26, 25, 20, 25, 13, 10, 4, 1, 0, 8, 1, 0, 0, 6, - 4, 0, 2, 9, 8, 10, 6, 12, 9, 8, 20, 14, 10, 13, 21, 5, - 8, 37, 8, 12, 8, 9, 9, 9, 6, 6, 4, 4, 9, 6, 22, 34, - 40, 40, 42, 52, 59, 48, 46, 24, 10, 51, 76, 85, 64, 65, 42, 29, - 24, 16, 16, 13, 12, 14, 12, 17, 10, 12, 14, 12, 14, 16, 17, 17, - 13, 25, 21, 30, 24, 24, 18, 22, 21, 20, 18, 18, 16, 13, 6, 2, - 1, 1, 2, 2, 2, 2, 6, 4, 12, 18, 25, 21, 36, 37, 33, 24, - 40, 44, 25, 6, 34, 18, 25, 21, 18, 20, 22, 29, 33, 34, 33, 45, - 1, 32, 103, 103, 65, 65, 57, 56, 48, 34, 17, 13, 10, 8, 8, 8, - 6, 6, 6, 5, 5, 4, 6, 6, 4, 1, 0, 0, 1, 0, 0, 0, - 0, 1, 1, 0, 0, 4, 2, 6, 4, 5, 5, 6, 6, 17, 10, 1, - 55, 87, 61, 53, 51, 46, 45, 45, 41, 40, 48, 37, 41, 13, 17, 25, - 16, 13, 6, 4, 2, 2, 2, 1, 1, 2, 1, 1, 1, 4, 4, 1, - 1, 2, 1, 0, 0, 0, 1, 0, 0, 0, 52, 63, 64, 56, 68, 57, - 68, 67, 52, 0, 32, 83, 80, 55, 60, 65, 53, 36, 25, 20, 12, 12, - 22, 53, 56, 48, 59, 65, 88, 76, 68, 64, 52, 14, 65, 87, 89, 80, - 69, 83, 73, 84, 80, 77, 36, 9, 68, 119, 115, 110, 108, 103, 102, 102, - 111, 88, 51, 10, 122, 84, 88, 123, 115, 99, 81, 84, 61, 45, 25, 38, - 44, 51, 53, 59, 59, 57, 65, 69, 68, 46, 64, 61, 112, 115, 115, 116, - 122, 118, 111, 115, 123, 110, 93, 89, 110, 106, 100, 108, 107, 102, 91, 83, - 102, 81, 20, 1, 65, 106, 104, 81, 67, 49, 40, 36, 20, 14, 10, 1, - 10, 44, 51, 56, 48, 57, 61, 64, 61, 65, 41, 1, 52, 111, 123, 126, - 122, 120, 104, 114, 103, 76, 37, 0, 88, 77, 92, 89, 96, 88, 87, 75, - 63, 44, 25, 9, 9, 9, 9, 10, 10, 10, 13, 12, 12, 12, 16, 17, - 18, 59, 61, 79, 79, 76, 103, 97, 76, 69, 120, 179, 128, 88, 114, 126, - 123, 135, 131, 118, 124, 138, 148, 191, 210, 214, 218, 216, 213, 212, 150, 122, - 126, 135, 138, 134, 126, 89, 28, 13, 13, 10, 16, 14, 12, 17, 25, 32, - 38, 73, 88, 80, 63, 61, 48, 45, 45, 36, 32, 29, 53, 84, 99, 91, - 104, 75, 76, 88, 67, 49, 29, 55, 99, 80, 65, 64, 80, 72, 73, 46, - 42, 36, 0, 16, 118, 110, 85, 73, 87, 85, 81, 76, 84, 65, 33, 0, - 30, 76, 88, 87, 88, 88, 91, 83, 81, 76, 69, 63, 75, 76, 77, 79, - 73, 51, 37, 30, 24, 24, 25, 17, 22, 42, 38, 49, 42, 51, 48, 55, - 56, 45, 33, 4, 18, 61, 67, 77, 69, 64, 65, 57, 65, 67, 60, 60, - 59, 80, 89, 93, 88, 87, 79, 65, 61, 34, 4, 91, 88, 67, 84, 72, - 80, 68, 81, 75, 61, 25, 6, 83, 100, 96, 93, 93, 88, 79, 57, 64, - 65, 26, 18, 4, 14, 100, 93, 60, 45, 91, 85, 61, 49, 61, 55, 24, - 2, 36, 89, 84, 48, 46, 41, 34, 25, 17, 9, 4, 6, 33, 34, 37, - 28, 41, 45, 36, 40, 40, 29, 0, 30, 92, 87, 83, 85, 88, 77, 79, - 75, 59, 24, 9, 59, 85, 63, 60, 80, 80, 79, 79, 56, 29, 22, 5, - 37, 122, 115, 75, 68, 67, 60, 51, 24, 10, 12, 5, 5, 6, 6, 4, - 5, 4, 4, 1, 4, 2, 2, 2, 5, 12, 55, 64, 65, 63, 49, 72, - 57, 16, 5, 40, 79, 72, 67, 29, 24, 16, 12, 10, 6, 9, 2, 14, - 34, 76, 75, 75, 77, 75, 79, 69, 72, 53, 45, 4, 85, 119, 111, 95, - 112, 99, 100, 99, 99, 89, 89, 68, 63, 81, 61, 45, 57, 69, 60, 57, - 46, 34, 2, 0, 14, 68, 95, 64, 59, 63, 79, 64, 60, 52, 4, 0, - 48, 64, 60, 38, 64, 53, 53, 12, 6, 10, 1, 64, 68, 72, 69, 76, - 73, 72, 72, 73, 75, 68, 38, 24, 18, 21, 45, 40, 34, 38, 37, 25, - 18, 9, 12, 4, 2, 14, 37, 40, 52, 38, 44, 45, 60, 60, 67, 56, - 72, 76, 83, 81, 83, 120, 103, 110, 104, 99, 100, 64, 68, 53, 0, 67, - 77, 95, 91, 84, 87, 83, 81, 80, 75, 33, 12, 73, 112, 114, 108, 106, - 97, 110, 107, 96, 67, 57, 16, 91, 92, 85, 76, 73, 92, 81, 77, 75, - 77, 41, 8, 96, 118, 93, 99, 108, 119, 99, 102, 83, 92, 57, 14, 130, - 106, 81, 79, 59, 80, 93, 111, 119, 104, 85, 99, 116, 106, 108, 116, 106, - 107, 112, 103, 108, 92, 102, 88, 76, 110, 97, 85, 93, 96, 83, 76, 72, - 76, 91, 64, 76, 93, 110, 114, 99, 99, 88, 83, 92, 91, 45, 0, 84, - 102, 127, 89, 95, 71, 80, 77, 71, 55, 33, 8, 69, 112, 108, 108, 100, - 99, 64, 84, 87, 71, 46, 1, 102, 124, 106, 91, 77, 100, 89, 81, 84, - 73, 36, 0, 104, 75, 81, 87, 83, 80, 83, 84, 71, 56, 25, 30, 100, - 81, 76, 80, 93, 93, 77, 75, 72, 68, 67, 63, 69, 65, 104, 108, 106, - 89, 89, 91, 85, 56, 73, 169, 146, 97, 79, 158, 169, 177, 190, 199, 205, - 206, 210, 213, 214, 213, 209, 212, 205, 155, 124, 130, 134, 130, 126, 99, 56, - 26, 16, 13, 10, 18, 13, 18, 25, 40, 25, 26, 64, 103, 114, 100, 103, - 106, 112, 111, 112, 92, 83, 84, 87, 102, 99, 83, 72, 83, 72, 71, 71, - 52, 32, 51, 97, 93, 81, 67, 63, 59, 73, 80, 52, 40, 0, 118, 120, - 95, 97, 92, 93, 89, 67, 64, 59, 55, 65, 0, 110, 104, 92, 93, 81, - 92, 77, 80, 80, 81, 77, 55, 49, 77, 80, 72, 72, 60, 59, 64, 72, - 40, 22, 41, 91, 89, 96, 85, 87, 87, 81, 85, 83, 64, 36, 2, 99, - 93, 102, 96, 85, 80, 73, 65, 71, 67, 48, 59, 95, 114, 108, 93, 93, - 79, 83, 85, 59, 36, 2, 104, 84, 83, 73, 65, 64, 63, 63, 69, 75, - 26, 9, 96, 108, 85, 51, 68, 55, 83, 76, 60, 38, 33, 20, 0, 104, - 115, 96, 48, 65, 84, 75, 61, 59, 59, 56, 29, 2, 87, 96, 75, 72, - 77, 68, 83, 45, 30, 21, 2, 36, 87, 96, 102, 88, 83, 75, 72, 76, - 71, 41, 14, 80, 97, 92, 83, 71, 73, 71, 72, 69, 75, 28, 8, 67, - 93, 63, 65, 52, 52, 55, 67, 71, 60, 25, 4, 106, 126, 104, 102, 108, - 104, 100, 73, 85, 83, 81, 81, 92, 99, 89, 87, 91, 80, 97, 87, 88, - 87, 71, 69, 75, 61, 63, 60, 68, 56, 75, 63, 60, 20, 5, 52, 104, - 72, 64, 71, 48, 57, 51, 36, 28, 14, 24, 63, 85, 89, 97, 88, 88, - 80, 84, 71, 65, 55, 33, 12, 100, 110, 115, 103, 103, 93, 76, 71, 80, - 68, 65, 76, 77, 67, 40, 41, 57, 61, 28, 34, 24, 59, 2, 0, 71, - 96, 63, 60, 55, 49, 57, 49, 55, 61, 9, 0, 56, 56, 45, 55, 69, - 52, 53, 52, 16, 10, 0, 91, 72, 67, 67, 65, 61, 38, 53, 64, 52, - 49, 30, 21, 16, 30, 37, 21, 24, 17, 20, 17, 25, 21, 2, 0, 34, - 64, 75, 75, 79, 71, 63, 53, 67, 52, 61, 56, 57, 46, 65, 84, 72, - 143, 128, 106, 114, 122, 108, 119, 67, 55, 0, 71, 85, 92, 89, 73, 76, - 53, 67, 65, 73, 38, 13, 97, 118, 107, 100, 97, 100, 104, 111, 106, 72, - 57, 18, 91, 102, 111, 122, 104, 112, 102, 99, 83, 79, 46, 8, 88, 116, - 95, 96, 79, 83, 88, 81, 68, 68, 52, 13, 130, 102, 99, 69, 77, 77, - 81, 84, 65, 84, 95, 91, 65, 64, 77, 77, 79, 60, 55, 80, 61, 64, - 95, 64, 111, 97, 104, 100, 88, 95, 92, 95, 91, 79, 81, 57, 103, 124, - 110, 92, 103, 97, 96, 102, 96, 91, 49, 1, 89, 104, 131, 88, 75, 93, - 67, 84, 68, 60, 37, 21, 88, 107, 96, 102, 102, 91, 85, 91, 88, 83, - 46, 0, 99, 124, 71, 80, 85, 85, 77, 103, 79, 85, 41, 0, 97, 71, - 79, 75, 73, 75, 73, 76, 76, 53, 25, 92, 93, 89, 77, 65, 83, 89, - 80, 72, 84, 72, 84, 65, 46, 103, 114, 97, 76, 68, 73, 89, 93, 53, - 55, 124, 154, 104, 73, 112, 118, 136, 154, 179, 191, 199, 204, 202, 204, 208, - 193, 170, 147, 119, 132, 128, 112, 92, 56, 28, 16, 17, 14, 13, 16, 13, - 17, 22, 34, 26, 29, 29, 64, 104, 112, 112, 110, 106, 100, 102, 104, 85, - 83, 64, 103, 95, 69, 72, 84, 87, 84, 73, 52, 67, 30, 52, 85, 80, - 69, 72, 69, 64, 71, 71, 52, 38, 0, 122, 118, 114, 87, 79, 77, 73, - 57, 57, 57, 73, 67, 0, 107, 87, 80, 84, 96, 88, 87, 97, 83, 81, - 63, 36, 69, 116, 87, 72, 67, 65, 63, 75, 71, 40, 30, 85, 89, 83, - 75, 64, 77, 88, 69, 71, 64, 53, 40, 9, 97, 76, 73, 76, 96, 84, - 69, 63, 67, 51, 42, 84, 118, 91, 77, 91, 81, 60, 48, 71, 42, 34, - 0, 68, 81, 71, 56, 45, 53, 68, 67, 87, 64, 28, 6, 85, 107, 64, - 57, 41, 46, 49, 60, 37, 30, 32, 18, 2, 88, 91, 84, 65, 69, 57, - 53, 64, 56, 80, 61, 30, 4, 91, 95, 61, 53, 55, 51, 53, 63, 34, - 29, 4, 75, 95, 91, 87, 79, 87, 84, 77, 52, 49, 29, 8, 80, 95, - 84, 68, 69, 59, 63, 63, 63, 56, 25, 8, 65, 88, 72, 69, 67, 52, - 51, 46, 57, 65, 24, 5, 93, 115, 112, 111, 97, 91, 81, 95, 80, 76, - 65, 72, 89, 89, 103, 69, 84, 88, 80, 80, 65, 83, 69, 46, 42, 83, - 91, 67, 61, 40, 34, 65, 48, 25, 5, 42, 102, 77, 65, 63, 53, 65, - 51, 52, 32, 16, 30, 65, 95, 84, 73, 69, 69, 71, 69, 76, 83, 37, - 40, 10, 89, 106, 112, 106, 100, 69, 71, 99, 96, 92, 81, 61, 34, 73, - 73, 44, 41, 30, 26, 9, 32, 41, 1, 4, 85, 85, 59, 61, 51, 68, - 69, 61, 55, 52, 10, 0, 38, 45, 41, 29, 22, 22, 18, 36, 32, 10, - 0, 102, 81, 59, 67, 46, 42, 33, 42, 45, 48, 42, 29, 16, 22, 40, - 33, 21, 8, 4, 4, 5, 12, 20, 0, 4, 53, 93, 95, 61, 67, 60, - 61, 68, 53, 33, 40, 44, 51, 89, 107, 131, 136, 84, 89, 115, 108, 79, - 95, 116, 68, 53, 0, 64, 99, 89, 67, 65, 75, 72, 64, 52, 65, 38, - 16, 80, 120, 103, 108, 99, 95, 93, 95, 111, 73, 60, 25, 59, 104, 104, - 89, 97, 111, 107, 79, 77, 77, 45, 6, 104, 110, 112, 88, 97, 97, 88, - 99, 75, 87, 57, 5, 124, 107, 97, 68, 65, 71, 87, 80, 81, 77, 61, - 67, 60, 97, 71, 69, 87, 80, 83, 80, 79, 61, 56, 37, 111, 100, 103, - 95, 83, 85, 76, 73, 92, 84, 75, 59, 119, 122, 93, 87, 83, 91, 96, - 88, 85, 104, 45, 0, 93, 110, 114, 71, 76, 91, 84, 100, 99, 81, 40, - 6, 106, 106, 110, 92, 104, 97, 88, 89, 85, 69, 46, 0, 93, 118, 69, - 81, 77, 93, 96, 97, 83, 67, 40, 0, 99, 80, 80, 87, 84, 73, 75, - 73, 79, 59, 25, 92, 89, 79, 84, 89, 85, 77, 79, 79, 71, 71, 57, - 38, 61, 110, 104, 96, 69, 72, 76, 64, 89, 56, 48, 108, 153, 104, 67, - 81, 99, 111, 118, 124, 150, 161, 170, 169, 163, 159, 139, 126, 126, 119, 100, - 77, 45, 29, 17, 14, 14, 13, 17, 13, 13, 24, 22, 29, 32, 32, 28, - 25, 67, 116, 119, 112, 88, 97, 88, 80, 72, 71, 52, 88, 107, 69, 75, - 97, 77, 69, 65, 73, 55, 69, 37, 42, 87, 83, 75, 87, 71, 83, 69, - 67, 60, 37, 0, 76, 111, 92, 97, 111, 88, 81, 76, 60, 59, 63, 36, - 4, 76, 75, 87, 96, 84, 85, 83, 77, 76, 55, 51, 34, 73, 108, 71, - 67, 84, 97, 92, 73, 60, 38, 21, 83, 88, 76, 64, 60, 56, 77, 76, - 63, 53, 49, 40, 2, 91, 65, 76, 57, 83, 97, 85, 64, 67, 41, 26, - 80, 119, 89, 85, 89, 79, 55, 65, 55, 46, 37, 0, 87, 91, 91, 42, - 57, 63, 59, 77, 72, 79, 29, 5, 88, 104, 59, 52, 41, 53, 53, 42, - 45, 29, 25, 20, 1, 77, 95, 53, 69, 75, 61, 56, 55, 51, 63, 53, - 41, 4, 79, 89, 59, 44, 61, 63, 59, 59, 56, 29, 0, 81, 100, 77, - 73, 73, 59, 53, 46, 40, 45, 28, 1, 76, 96, 76, 56, 69, 55, 53, - 57, 55, 63, 26, 5, 64, 88, 84, 65, 79, 79, 75, 53, 52, 49, 25, - 5, 81, 108, 111, 106, 110, 100, 107, 107, 104, 95, 64, 91, 106, 83, 63, - 57, 59, 64, 59, 46, 51, 55, 34, 30, 55, 96, 89, 33, 53, 55, 87, - 46, 49, 24, 6, 52, 95, 73, 48, 68, 71, 56, 64, 52, 38, 17, 26, - 64, 95, 80, 68, 68, 80, 80, 65, 64, 76, 38, 41, 1, 88, 102, 99, - 103, 108, 68, 75, 83, 93, 88, 79, 56, 60, 84, 63, 24, 44, 18, 29, - 28, 33, 34, 1, 0, 68, 72, 63, 60, 49, 56, 64, 61, 59, 44, 10, - 0, 65, 57, 26, 37, 34, 28, 17, 33, 44, 12, 0, 96, 64, 61, 65, - 42, 67, 36, 33, 57, 49, 36, 33, 16, 12, 40, 29, 8, 12, 16, 10, - 8, 9, 16, 0, 10, 73, 96, 61, 53, 60, 37, 51, 84, 57, 41, 51, - 38, 51, 93, 131, 77, 30, 111, 112, 120, 83, 92, 97, 110, 64, 53, 1, - 64, 95, 91, 56, 61, 64, 77, 51, 51, 71, 40, 17, 72, 110, 104, 100, - 110, 114, 93, 91, 97, 76, 61, 22, 100, 112, 103, 89, 93, 106, 106, 80, - 79, 80, 45, 6, 93, 110, 87, 96, 99, 91, 96, 85, 77, 75, 55, 5, - 122, 97, 95, 68, 71, 68, 92, 84, 84, 73, 53, 73, 92, 89, 95, 91, - 68, 71, 80, 68, 72, 76, 77, 32, 110, 110, 100, 83, 85, 77, 93, 73, - 84, 81, 77, 61, 118, 119, 77, 79, 84, 85, 72, 84, 85, 83, 48, 1, - 93, 107, 123, 83, 93, 76, 67, 68, 92, 59, 40, 0, 93, 97, 116, 96, - 106, 92, 91, 87, 69, 79, 48, 0, 106, 118, 79, 91, 89, 88, 79, 95, - 89, 77, 40, 0, 89, 89, 81, 81, 80, 75, 73, 73, 75, 56, 28, 57, - 76, 93, 81, 71, 85, 76, 75, 80, 75, 67, 56, 36, 87, 111, 102, 91, - 81, 65, 72, 77, 95, 63, 46, 99, 154, 115, 84, 60, 64, 64, 69, 89, - 110, 114, 118, 122, 118, 116, 112, 87, 65, 44, 29, 21, 18, 18, 14, 10, - 16, 17, 12, 25, 26, 28, 29, 36, 37, 32, 32, 25, 60, 112, 96, 83, - 71, 81, 87, 84, 69, 55, 51, 93, 97, 71, 87, 77, 77, 60, 56, 79, - 65, 72, 38, 34, 81, 80, 71, 71, 75, 68, 61, 63, 46, 38, 0, 80, - 108, 106, 119, 95, 51, 49, 64, 52, 72, 72, 37, 2, 79, 89, 87, 91, - 72, 76, 77, 76, 56, 67, 53, 32, 75, 115, 83, 63, 65, 57, 60, 79, - 64, 38, 21, 71, 87, 73, 79, 71, 56, 71, 65, 52, 53, 42, 37, 1, - 73, 80, 76, 56, 76, 92, 85, 60, 51, 42, 30, 83, 123, 71, 77, 65, - 76, 56, 56, 46, 52, 34, 2, 92, 88, 79, 45, 52, 67, 72, 64, 75, - 65, 30, 4, 103, 106, 56, 42, 41, 38, 49, 48, 36, 38, 26, 18, 0, - 83, 111, 75, 73, 67, 59, 44, 77, 55, 57, 59, 28, 1, 77, 93, 51, - 45, 52, 49, 48, 53, 33, 28, 0, 84, 93, 57, 75, 55, 46, 52, 41, - 44, 37, 28, 9, 85, 95, 68, 65, 49, 55, 53, 51, 41, 60, 26, 5, - 63, 83, 77, 56, 45, 53, 45, 48, 53, 49, 26, 2, 97, 120, 110, 115, - 88, 91, 92, 100, 92, 91, 42, 89, 91, 84, 65, 57, 46, 55, 52, 52, - 53, 34, 46, 28, 91, 104, 102, 29, 67, 65, 73, 42, 44, 41, 10, 53, - 99, 76, 67, 69, 72, 53, 49, 65, 52, 17, 9, 51, 93, 64, 56, 51, - 59, 65, 59, 55, 83, 49, 41, 2, 99, 103, 96, 103, 95, 76, 73, 67, - 103, 83, 79, 51, 64, 92, 51, 21, 33, 10, 18, 26, 28, 30, 1, 0, - 57, 83, 53, 51, 46, 46, 49, 48, 40, 49, 10, 0, 42, 44, 42, 37, - 51, 41, 17, 24, 36, 12, 0, 106, 61, 59, 65, 37, 72, 36, 33, 32, - 38, 30, 30, 14, 18, 34, 24, 2, 9, 2, 4, 1, 5, 20, 0, 32, - 85, 87, 45, 48, 60, 48, 41, 68, 32, 28, 42, 33, 71, 108, 107, 24, - 32, 116, 119, 80, 87, 95, 83, 103, 79, 52, 0, 69, 100, 91, 59, 57, - 64, 71, 52, 51, 65, 42, 18, 68, 115, 108, 104, 92, 103, 104, 92, 93, - 89, 64, 25, 99, 104, 103, 96, 81, 84, 92, 77, 79, 75, 45, 5, 95, - 114, 91, 92, 92, 89, 102, 91, 77, 80, 59, 6, 124, 111, 91, 71, 68, - 69, 69, 76, 85, 79, 51, 97, 102, 89, 88, 71, 69, 91, 99, 68, 88, - 83, 84, 46, 119, 95, 84, 79, 84, 73, 93, 72, 89, 79, 65, 65, 122, - 110, 79, 87, 71, 83, 88, 103, 81, 81, 51, 0, 89, 110, 123, 83, 81, - 79, 71, 69, 103, 57, 42, 5, 100, 112, 99, 87, 99, 81, 81, 87, 71, - 81, 49, 1, 102, 122, 79, 76, 87, 85, 88, 95, 88, 72, 41, 0, 92, - 83, 83, 89, 76, 75, 76, 71, 67, 56, 30, 60, 81, 85, 83, 80, 85, - 75, 67, 71, 65, 71, 60, 29, 89, 110, 104, 75, 84, 64, 75, 87, 77, - 69, 42, 89, 150, 123, 93, 77, 60, 52, 46, 48, 42, 41, 41, 41, 45, - 38, 33, 30, 22, 22, 20, 18, 16, 14, 14, 16, 10, 18, 29, 34, 44, - 44, 41, 38, 32, 33, 33, 25, 63, 116, 85, 88, 88, 83, 72, 95, 83, - 69, 37, 87, 100, 69, 91, 67, 55, 55, 53, 73, 67, 73, 41, 24, 83, - 87, 92, 87, 88, 81, 73, 63, 51, 40, 0, 76, 102, 85, 104, 51, 48, - 59, 64, 51, 60, 61, 59, 0, 106, 96, 68, 100, 72, 64, 61, 64, 55, - 80, 57, 30, 81, 103, 76, 75, 59, 61, 53, 75, 65, 40, 24, 68, 83, - 99, 112, 65, 53, 49, 52, 53, 56, 49, 37, 0, 114, 72, 65, 59, 72, - 71, 85, 59, 52, 46, 29, 81, 122, 89, 83, 60, 72, 51, 51, 44, 56, - 40, 0, 96, 88, 91, 48, 51, 52, 77, 80, 77, 75, 30, 5, 95, 110, - 59, 42, 33, 37, 34, 49, 28, 37, 28, 21, 1, 115, 115, 73, 88, 38, - 59, 79, 42, 48, 63, 53, 30, 0, 84, 87, 55, 41, 49, 102, 55, 65, - 32, 26, 0, 83, 96, 60, 69, 42, 60, 45, 40, 40, 52, 28, 16, 79, - 91, 56, 69, 52, 51, 49, 51, 45, 61, 26, 4, 57, 85, 65, 44, 44, - 53, 77, 49, 49, 59, 28, 2, 91, 126, 107, 102, 85, 89, 88, 88, 93, - 85, 41, 91, 103, 69, 96, 72, 53, 48, 51, 46, 38, 37, 44, 28, 89, - 95, 87, 37, 75, 83, 42, 44, 25, 22, 9, 55, 100, 60, 61, 64, 38, - 32, 28, 52, 59, 17, 12, 67, 92, 79, 53, 52, 49, 53, 48, 65, 75, - 51, 37, 5, 97, 115, 97, 97, 69, 68, 71, 65, 97, 77, 79, 45, 64, - 91, 57, 13, 32, 9, 20, 22, 28, 28, 0, 0, 71, 75, 59, 48, 44, - 60, 59, 49, 34, 51, 10, 0, 61, 46, 32, 29, 18, 53, 26, 26, 26, - 12, 0, 91, 75, 69, 36, 21, 75, 33, 30, 26, 48, 20, 30, 14, 14, - 26, 21, 13, 34, 20, 21, 6, 6, 13, 0, 41, 89, 79, 41, 46, 48, - 41, 55, 75, 32, 29, 33, 33, 63, 108, 46, 38, 33, 118, 107, 77, 89, - 95, 80, 104, 67, 55, 0, 60, 93, 84, 59, 65, 57, 77, 49, 63, 72, - 46, 21, 45, 102, 114, 100, 104, 100, 89, 85, 93, 96, 60, 29, 73, 110, - 87, 97, 102, 87, 96, 81, 77, 87, 49, 6, 95, 111, 81, 83, 107, 89, - 87, 75, 68, 71, 59, 5, 123, 110, 106, 72, 72, 68, 72, 72, 84, 76, - 49, 103, 99, 91, 73, 68, 77, 114, 68, 69, 68, 81, 96, 42, 108, 89, - 88, 85, 83, 76, 100, 72, 83, 76, 45, 71, 123, 123, 79, 112, 79, 77, - 89, 107, 79, 79, 57, 0, 88, 103, 112, 81, 89, 76, 71, 65, 99, 61, - 44, 13, 96, 112, 92, 92, 83, 79, 104, 87, 77, 72, 51, 0, 99, 123, - 68, 89, 85, 80, 83, 102, 79, 71, 41, 0, 88, 83, 85, 80, 68, 72, - 73, 71, 77, 52, 30, 57, 93, 64, 77, 81, 89, 77, 85, 84, 53, 76, - 51, 26, 100, 116, 102, 85, 83, 61, 65, 85, 73, 71, 44, 84, 143, 127, - 104, 92, 81, 75, 53, 44, 41, 37, 34, 34, 29, 29, 28, 25, 22, 20, - 18, 18, 18, 18, 17, 6, 17, 29, 46, 51, 41, 42, 42, 42, 42, 36, - 36, 30, 59, 127, 88, 76, 92, 85, 85, 80, 76, 75, 30, 88, 88, 71, - 68, 69, 55, 76, 64, 60, 65, 77, 41, 20, 69, 84, 93, 71, 64, 60, - 68, 60, 51, 40, 0, 92, 99, 89, 97, 48, 49, 73, 51, 51, 71, 72, - 60, 0, 100, 87, 75, 99, 64, 61, 69, 53, 51, 76, 55, 26, 73, 122, - 72, 63, 65, 63, 57, 76, 64, 40, 25, 61, 95, 96, 68, 56, 67, 49, - 71, 68, 59, 51, 40, 6, 104, 59, 77, 51, 72, 49, 100, 55, 53, 45, - 30, 79, 120, 77, 88, 67, 65, 68, 45, 44, 41, 36, 0, 89, 87, 87, - 45, 61, 45, 56, 59, 81, 57, 30, 4, 97, 111, 65, 55, 36, 33, 32, - 63, 29, 33, 30, 20, 0, 106, 124, 67, 80, 38, 61, 53, 64, 53, 52, - 49, 30, 2, 73, 102, 53, 49, 84, 79, 60, 55, 33, 29, 5, 88, 97, - 51, 57, 45, 45, 40, 53, 38, 52, 29, 6, 76, 95, 67, 72, 67, 73, - 71, 73, 45, 67, 28, 2, 68, 77, 59, 51, 89, 44, 42, 46, 48, 65, - 26, 4, 124, 122, 110, 91, 91, 104, 88, 91, 91, 91, 45, 95, 87, 92, - 68, 89, 61, 44, 49, 34, 37, 36, 49, 25, 95, 107, 83, 29, 71, 63, - 41, 40, 41, 26, 10, 59, 106, 45, 51, 36, 28, 28, 25, 26, 51, 17, - 28, 64, 92, 91, 52, 48, 48, 61, 48, 51, 69, 55, 37, 4, 92, 115, - 93, 91, 77, 68, 67, 71, 84, 77, 73, 41, 76, 96, 46, 16, 13, 5, - 18, 21, 21, 46, 0, 2, 73, 80, 53, 53, 56, 51, 36, 57, 44, 48, - 12, 0, 67, 56, 29, 33, 29, 20, 28, 28, 21, 12, 1, 77, 83, 46, - 53, 34, 75, 30, 28, 28, 38, 21, 26, 9, 16, 21, 22, 24, 16, 20, - 21, 5, 6, 6, 0, 41, 97, 65, 42, 51, 53, 46, 57, 96, 36, 34, - 34, 30, 76, 107, 41, 63, 63, 122, 81, 76, 88, 88, 77, 116, 64, 56, - 0, 61, 84, 91, 60, 79, 59, 68, 48, 53, 61, 52, 29, 52, 96, 114, - 112, 108, 88, 112, 96, 91, 100, 61, 30, 46, 108, 107, 89, 88, 89, 77, - 89, 81, 76, 51, 5, 104, 116, 83, 83, 80, 88, 92, 72, 68, 73, 59, - 2, 123, 110, 100, 71, 68, 65, 91, 75, 73, 73, 45, 108, 84, 75, 69, - 76, 107, 73, 69, 75, 81, 69, 80, 24, 112, 95, 80, 81, 72, 76, 103, - 68, 84, 72, 51, 85, 124, 110, 83, 108, 83, 72, 81, 111, 76, 75, 56, - 0, 88, 92, 122, 80, 77, 67, 72, 68, 114, 75, 53, 5, 99, 114, 85, - 85, 77, 77, 103, 80, 77, 67, 55, 0, 85, 123, 81, 76, 79, 79, 76, - 102, 72, 71, 41, 0, 96, 69, 80, 71, 68, 65, 72, 68, 71, 55, 32, - 26, 57, 104, 77, 71, 57, 71, 59, 59, 57, 79, 53, 22, 111, 112, 108, - 72, 92, 65, 63, 85, 67, 69, 46, 75, 130, 123, 127, 95, 91, 79, 71, - 57, 53, 44, 40, 34, 30, 30, 28, 30, 26, 29, 26, 26, 24, 20, 30, - 6, 28, 51, 49, 45, 57, 51, 59, 64, 61, 37, 34, 24, 55, 131, 88, - 99, 63, 91, 102, 65, 75, 72, 33, 80, 89, 72, 75, 59, 55, 87, 67, - 64, 64, 83, 44, 21, 75, 81, 84, 69, 60, 61, 67, 61, 48, 38, 0, - 93, 95, 85, 114, 48, 49, 61, 49, 49, 56, 57, 38, 1, 67, 81, 64, - 110, 67, 64, 67, 53, 53, 83, 59, 24, 67, 120, 65, 63, 68, 57, 67, - 60, 56, 41, 24, 73, 92, 102, 53, 52, 51, 64, 60, 51, 49, 46, 40, - 0, 100, 61, 69, 52, 77, 51, 84, 55, 53, 40, 16, 71, 120, 83, 92, - 67, 63, 53, 49, 49, 44, 36, 0, 91, 75, 106, 42, 48, 45, 45, 57, - 85, 60, 32, 2, 99, 118, 69, 73, 29, 42, 29, 73, 30, 29, 28, 20, - 0, 91, 99, 51, 93, 38, 59, 45, 68, 49, 53, 48, 30, 2, 87, 108, - 55, 38, 80, 52, 53, 57, 42, 30, 0, 79, 87, 57, 42, 42, 40, 38, - 72, 40, 68, 32, 1, 61, 91, 83, 51, 64, 59, 51, 44, 44, 73, 29, - 1, 63, 77, 56, 79, 95, 68, 41, 45, 46, 60, 28, 2, 108, 114, 108, - 85, 92, 107, 87, 87, 87, 89, 44, 100, 102, 75, 75, 81, 53, 38, 60, - 36, 36, 40, 37, 21, 97, 96, 37, 87, 38, 42, 51, 38, 41, 29, 13, - 32, 97, 46, 40, 28, 25, 26, 24, 25, 52, 20, 10, 56, 84, 99, 48, - 41, 46, 71, 48, 51, 83, 41, 41, 1, 93, 116, 95, 67, 69, 67, 67, - 97, 83, 72, 71, 34, 76, 88, 67, 13, 13, 10, 12, 22, 20, 26, 0, - 0, 48, 69, 38, 33, 30, 46, 37, 60, 36, 73, 12, 0, 53, 53, 25, - 17, 24, 30, 25, 17, 30, 13, 2, 25, 96, 41, 36, 30, 59, 26, 24, - 24, 48, 17, 18, 5, 20, 14, 2, 6, 5, 18, 6, 4, 13, 1, 0, - 45, 91, 55, 32, 51, 38, 45, 45, 81, 42, 37, 33, 25, 71, 111, 45, - 61, 5, 122, 79, 81, 87, 89, 73, 116, 65, 51, 0, 55, 77, 97, 56, - 87, 56, 64, 49, 56, 46, 59, 29, 33, 88, 118, 115, 119, 87, 108, 122, - 80, 107, 57, 33, 26, 119, 112, 76, 76, 81, 93, 92, 76, 75, 52, 4, - 108, 120, 84, 77, 80, 80, 73, 75, 68, 73, 60, 2, 123, 111, 111, 71, - 68, 68, 73, 76, 73, 68, 37, 112, 77, 72, 65, 110, 88, 68, 71, 75, - 84, 72, 67, 21, 99, 97, 77, 72, 72, 76, 112, 67, 79, 71, 46, 96, - 128, 115, 80, 110, 71, 77, 81, 114, 76, 76, 60, 0, 80, 88, 122, 68, - 81, 68, 77, 67, 134, 61, 51, 0, 110, 115, 81, 83, 75, 75, 111, 77, - 73, 68, 52, 0, 79, 122, 76, 76, 73, 71, 76, 112, 76, 75, 42, 0, - 84, 76, 75, 67, 64, 73, 67, 68, 64, 51, 34, 32, 56, 107, 106, 59, - 71, 61, 53, 56, 53, 96, 52, 21, 108, 118, 120, 75, 100, 97, 60, 77, - 69, 60, 45, 69, 115, 126, 118, 114, 93, 85, 76, 71, 63, 55, 41, 42, - 41, 37, 36, 36, 22, 24, 24, 22, 20, 20, 36, 5, 28, 55, 37, 63, - 44, 45, 63, 85, 81, 52, 36, 32, 48, 136, 79, 108, 64, 102, 77, 68, - 72, 60, 29, 80, 84, 68, 72, 60, 55, 99, 61, 65, 60, 97, 46, 24, - 79, 75, 59, 60, 61, 61, 61, 63, 48, 38, 0, 96, 80, 80, 130, 48, - 48, 56, 49, 51, 55, 64, 42, 0, 69, 85, 67, 110, 64, 64, 63, 53, - 49, 92, 52, 20, 69, 134, 60, 65, 61, 53, 55, 56, 56, 41, 25, 65, - 97, 60, 52, 51, 52, 49, 52, 55, 51, 41, 38, 1, 115, 63, 61, 51, - 92, 49, 100, 51, 46, 37, 17, 65, 119, 67, 102, 57, 57, 53, 44, 38, - 48, 37, 0, 104, 73, 93, 42, 51, 81, 84, 56, 96, 59, 33, 1, 115, - 127, 77, 75, 25, 32, 30, 81, 37, 26, 28, 20, 0, 89, 111, 63, 95, - 38, 52, 44, 77, 48, 53, 48, 32, 0, 91, 99, 51, 42, 88, 44, 57, - 55, 34, 30, 0, 89, 106, 53, 42, 41, 38, 38, 81, 40, 40, 29, 0, - 55, 96, 97, 46, 44, 42, 41, 38, 38, 85, 29, 1, 57, 65, 55, 83, - 110, 45, 40, 40, 45, 77, 29, 1, 112, 126, 120, 84, 85, 115, 85, 84, - 85, 87, 26, 104, 99, 93, 57, 92, 51, 38, 44, 33, 36, 33, 37, 17, - 102, 97, 36, 97, 37, 40, 38, 37, 37, 29, 14, 22, 97, 42, 30, 29, - 68, 26, 24, 26, 40, 20, 10, 51, 56, 107, 44, 44, 45, 56, 48, 48, - 68, 45, 38, 1, 84, 119, 87, 71, 67, 67, 64, 99, 80, 75, 72, 28, - 81, 89, 71, 16, 5, 12, 17, 10, 17, 22, 0, 0, 40, 68, 21, 17, - 17, 24, 33, 72, 34, 45, 13, 0, 45, 44, 29, 17, 25, 24, 22, 26, - 30, 13, 8, 5, 97, 45, 33, 29, 48, 28, 22, 22, 26, 18, 16, 8, - 6, 14, 1, 30, 1, 0, 2, 5, 4, 1, 0, 38, 83, 40, 37, 53, - 41, 33, 53, 91, 28, 26, 38, 21, 92, 106, 9, 8, 0, 162, 165, 161, - 159, 159, 170, 173, 154, 132, 0, 162, 179, 179, 175, 181, 155, 165, 177, 178, - 148, 84, 124, 179, 181, 165, 181, 163, 165, 165, 174, 159, 153, 140, 0, 170, - 185, 182, 151, 186, 155, 153, 155, 169, 161, 72, 100, 169, 169, 170, 174, 175, - 173, 161, 158, 170, 163, 169, 46, 161, 157, 150, 150, 165, 171, 154, 140, 139, - 122, 130, 65, 148, 170, 148, 150, 147, 131, 161, 131, 155, 142, 126, 68, 102, - 170, 138, 146, 146, 169, 165, 146, 163, 124, 130, 8, 163, 166, 143, 171, 185, - 151, 134, 165, 144, 153, 77, 73, 153, 158, 158, 120, 115, 123, 138, 124, 142, - 123, 115, 30, 155, 163, 170, 166, 153, 157, 153, 138, 135, 115, 100, 0, 150, - 157, 153, 159, 140, 138, 128, 153, 173, 139, 136, 37, 148, 171, 158, 135, 134, - 150, 130, 131, 120, 119, 79, 102, 174, 159, 135, 157, 148, 130, 132, 130, 147, - 171, 114, 1, 153, 139, 154, 153, 138, 123, 131, 146, 148, 142, 33, 151, 154, - 127, 132, 128, 126, 153, 132, 114, 128, 147, 34, 144, 147, 134, 150, 148, 142, - 135, 130, 128, 110, 110, 99, 4, 104, 151, 127, 135, 112, 132, 102, 135, 111, - 106, 96, 34, 142, 147, 123, 148, 132, 116, 112, 104, 100, 104, 85, 13, 135, - 136, 144, 143, 112, 115, 123, 107, 135, 84, 17, 169, 153, 153, 132, 171, 151, - 148, 123, 135, 130, 130, 115, 65, 91, 147, 138, 120, 112, 118, 138, 115, 132, - 97, 56, 73, 163, 177, 162, 182, 144, 139, 140, 163, 132, 128, 38, 106, 135, - 138, 131, 107, 104, 107, 139, 104, 104, 108, 49, 91, 136, 157, 130, 162, 106, - 103, 95, 103, 92, 104, 99, 28, 124, 104, 108, 103, 126, 106, 97, 100, 122, - 83, 99, 26, 150, 130, 124, 126, 127, 108, 110, 132, 93, 92, 83, 8, 91, - 139, 120, 140, 87, 89, 87, 107, 88, 88, 36, 114, 124, 123, 122, 119, 95, - 99, 126, 126, 92, 84, 69, 4, 122, 102, 123, 123, 88, 99, 80, 85, 83, - 110, 81, 4, 146, 123, 154, 107, 95, 115, 84, 80, 80, 77, 38, 76, 116, - 84, 127, 114, 72, 111, 114, 64, 75, 69, 8, 119, 161, 136, 114, 104, 107, - 161, 131, 102, 103, 89, 85, 2, 91, 97, 97, 57, 52, 51, 57, 53, 55, - 56, 49, 16, 104, 106, 73, 119, 92, 103, 63, 68, 63, 63, 61, 8, 110, - 127, 111, 114, 130, 65, 106, 111, 73, 68, 61, 40, 0, 123, 131, 118, 110, - 110, 91, 87, 84, 76, 81, 4, 124, 103, 128, 87, 53, 93, 61, 99, 57, - 52, 13, 92, 122, 76, 88, 56, 87, 45, 84, 111, 76, 53, 41, 25, 56, - 103, 96, 103, 102, 68, 46, 48, 53, 56, 44, 12, 89, 89, 52, 84, 56, - 91, 48, 45, 42, 37, 1, 123, 116, 107, 42, 44, 93, 83, 87, 111, 49, - 38, 33, 2, 91, 38, 38, 36, 36, 104, 84, 55, 32, 32, 26, 2, 51, - 84, 60, 84, 100, 22, 30, 36, 24, 29, 20, 0, 77, 83, 33, 26, 21, - 22, 34, 76, 25, 22, 13, 8, 40, 97, 68, 42, 29, 97, 30, 30, 33, - 24, 59, 18, 12, 97, 38, 114, 30, 181, 178, 181, 158, 159, 167, 173, 155, - 127, 1, 163, 183, 177, 170, 183, 161, 162, 175, 178, 134, 75, 128, 173, 179, - 177, 161, 162, 158, 162, 174, 162, 153, 140, 0, 167, 181, 178, 155, 179, 157, - 150, 162, 162, 154, 88, 103, 159, 167, 170, 159, 162, 153, 155, 163, 158, 157, - 162, 67, 155, 159, 150, 151, 153, 169, 167, 158, 136, 122, 126, 83, 150, 173, - 151, 148, 158, 144, 167, 143, 157, 139, 111, 64, 106, 170, 140, 144, 144, 166, - 162, 147, 159, 120, 122, 5, 157, 159, 155, 169, 181, 155, 135, 163, 147, 144, - 64, 73, 142, 150, 122, 115, 118, 124, 127, 131, 127, 122, 110, 46, 150, 159, - 158, 178, 163, 150, 151, 153, 135, 116, 104, 0, 146, 154, 165, 155, 140, 139, - 136, 147, 162, 148, 134, 42, 143, 167, 157, 136, 135, 147, 150, 126, 112, 119, - 75, 103, 166, 148, 134, 140, 142, 142, 130, 130, 140, 162, 102, 0, 151, 143, - 144, 151, 139, 128, 134, 140, 147, 140, 40, 155, 148, 135, 135, 118, 144, 146, - 119, 126, 115, 135, 52, 136, 147, 143, 144, 132, 132, 134, 128, 136, 110, 112, - 88, 2, 111, 139, 119, 108, 119, 120, 108, 124, 110, 108, 99, 48, 135, 150, - 126, 143, 139, 123, 127, 127, 115, 103, 97, 12, 131, 132, 132, 116, 114, 128, - 112, 115, 127, 91, 22, 158, 151, 151, 140, 150, 151, 144, 128, 142, 131, 135, - 115, 60, 93, 148, 136, 108, 119, 134, 130, 114, 128, 103, 55, 77, 159, 169, - 157, 167, 142, 136, 140, 158, 132, 126, 46, 111, 134, 136, 123, 106, 110, 108, - 132, 106, 102, 100, 48, 89, 136, 148, 130, 147, 114, 107, 100, 100, 93, 103, - 99, 40, 107, 110, 111, 127, 124, 111, 97, 99, 111, 89, 96, 26, 146, 134, - 114, 116, 100, 100, 112, 128, 87, 93, 84, 6, 99, 128, 114, 138, 83, 91, - 91, 99, 85, 84, 34, 108, 120, 122, 118, 102, 119, 119, 120, 104, 91, 85, - 68, 4, 122, 104, 120, 114, 89, 95, 92, 75, 92, 99, 76, 4, 138, 136, - 128, 103, 84, 115, 84, 84, 77, 76, 36, 80, 111, 112, 120, 89, 71, 108, - 111, 65, 75, 68, 9, 112, 150, 132, 128, 96, 97, 134, 127, 99, 108, 95, - 89, 14, 89, 92, 91, 55, 51, 51, 46, 53, 52, 51, 48, 20, 103, 106, - 79, 106, 89, 102, 64, 67, 71, 61, 51, 9, 106, 107, 107, 114, 102, 69, - 99, 104, 81, 68, 56, 40, 0, 130, 135, 110, 104, 89, 88, 87, 79, 75, - 75, 0, 114, 116, 126, 76, 53, 87, 64, 97, 63, 49, 17, 89, 123, 84, - 81, 56, 79, 46, 51, 49, 49, 53, 41, 22, 56, 110, 80, 95, 99, 63, - 49, 51, 77, 60, 49, 14, 88, 79, 57, 64, 68, 87, 49, 45, 42, 30, - 1, 111, 102, 91, 59, 45, 96, 88, 71, 65, 57, 38, 30, 2, 88, 55, - 46, 37, 34, 44, 93, 83, 33, 40, 25, 1, 61, 83, 68, 93, 63, 38, - 29, 37, 24, 22, 18, 0, 81, 80, 30, 30, 24, 22, 24, 76, 29, 42, - 13, 8, 36, 87, 63, 48, 28, 80, 34, 28, 29, 21, 52, 16, 12, 104, - 51, 104, 41, 169, 174, 169, 161, 159, 162, 173, 155, 147, 17, 162, 179, 173, - 173, 178, 162, 162, 169, 175, 140, 69, 131, 175, 175, 179, 166, 155, 151, 158, - 169, 159, 155, 138, 0, 165, 174, 157, 173, 165, 154, 153, 155, 166, 153, 84, - 110, 170, 163, 153, 155, 163, 166, 166, 161, 158, 154, 166, 71, 150, 158, 153, - 150, 148, 158, 159, 162, 146, 123, 120, 80, 153, 175, 150, 148, 143, 146, 148, - 157, 151, 140, 136, 60, 118, 162, 144, 144, 154, 165, 153, 157, 155, 118, 123, - 6, 153, 163, 147, 150, 148, 139, 136, 162, 147, 139, 57, 76, 139, 151, 126, - 106, 119, 110, 115, 120, 116, 116, 111, 48, 144, 159, 158, 158, 169, 159, 140, - 147, 135, 122, 102, 1, 146, 162, 161, 150, 144, 136, 139, 136, 131, 142, 134, - 52, 135, 166, 153, 136, 132, 138, 151, 116, 124, 122, 72, 107, 165, 157, 153, - 142, 142, 142, 139, 131, 136, 148, 123, 4, 144, 144, 148, 144, 144, 132, 135, - 136, 143, 135, 48, 148, 150, 127, 123, 143, 127, 110, 128, 127, 107, 130, 56, - 132, 146, 138, 135, 139, 136, 131, 131, 123, 108, 108, 112, 18, 99, 134, 114, - 119, 116, 116, 114, 116, 108, 107, 99, 53, 131, 147, 126, 140, 130, 128, 119, - 122, 116, 111, 95, 10, 127, 131, 123, 115, 127, 107, 114, 106, 123, 79, 32, - 150, 150, 150, 144, 136, 126, 128, 139, 131, 135, 130, 115, 56, 97, 144, 134, - 114, 118, 146, 132, 118, 119, 107, 55, 110, 159, 158, 154, 159, 150, 140, 144, - 157, 131, 128, 56, 107, 134, 135, 122, 106, 112, 108, 130, 104, 97, 95, 44, - 93, 132, 143, 131, 143, 123, 104, 102, 96, 92, 102, 99, 44, 116, 114, 107, - 135, 108, 107, 99, 97, 110, 91, 99, 40, 135, 128, 111, 118, 136, 138, 136, - 124, 88, 95, 73, 13, 99, 120, 110, 108, 81, 85, 95, 81, 84, 84, 46, - 102, 120, 122, 118, 104, 100, 92, 103, 92, 88, 85, 67, 14, 127, 110, 131, - 87, 76, 84, 88, 75, 84, 88, 76, 5, 134, 120, 136, 123, 103, 120, 87, - 84, 83, 64, 42, 92, 100, 120, 104, 71, 77, 108, 112, 68, 71, 68, 10, - 107, 150, 134, 122, 112, 100, 107, 99, 100, 106, 95, 84, 8, 88, 99, 71, - 49, 48, 46, 46, 48, 56, 49, 38, 20, 97, 107, 88, 95, 77, 95, 64, - 64, 67, 64, 61, 1, 103, 106, 110, 123, 79, 69, 88, 107, 76, 71, 59, - 40, 0, 112, 136, 108, 102, 88, 92, 88, 93, 72, 76, 0, 107, 103, 77, - 56, 81, 77, 80, 92, 57, 51, 20, 83, 115, 77, 102, 55, 49, 48, 48, - 48, 49, 53, 36, 20, 55, 100, 87, 91, 92, 65, 51, 52, 55, 60, 45, - 20, 80, 73, 75, 75, 69, 80, 48, 44, 44, 37, 2, 107, 85, 77, 51, - 44, 91, 88, 65, 60, 52, 48, 33, 0, 96, 38, 41, 44, 36, 34, 33, - 85, 61, 38, 25, 1, 60, 72, 77, 110, 37, 28, 51, 51, 22, 22, 18, - 0, 72, 79, 51, 40, 26, 21, 55, 41, 26, 26, 12, 6, 34, 36, 64, - 51, 25, 22, 25, 28, 25, 25, 44, 13, 16, 96, 63, 93, 83, 166, 171, - 169, 155, 158, 162, 169, 150, 142, 0, 162, 183, 169, 169, 178, 173, 159, 167, - 169, 138, 60, 132, 174, 165, 153, 154, 170, 166, 166, 167, 166, 153, 136, 17, - 163, 171, 154, 163, 159, 155, 150, 158, 158, 135, 81, 115, 166, 162, 174, 162, - 171, 166, 162, 157, 155, 159, 158, 79, 147, 165, 154, 148, 150, 144, 151, 158, - 130, 131, 111, 85, 159, 182, 135, 138, 143, 153, 139, 142, 136, 135, 134, 55, - 115, 165, 143, 146, 158, 154, 154, 153, 138, 122, 118, 8, 155, 162, 159, 158, - 155, 136, 153, 150, 154, 120, 53, 75, 131, 111, 114, 100, 103, 106, 107, 112, - 111, 112, 103, 53, 139, 158, 153, 154, 165, 167, 146, 134, 139, 119, 88, 1, - 143, 155, 159, 147, 147, 154, 144, 144, 140, 142, 135, 60, 131, 153, 151, 138, - 132, 136, 146, 134, 120, 92, 64, 108, 161, 153, 155, 159, 147, 158, 147, 138, - 132, 143, 118, 1, 142, 147, 135, 139, 143, 134, 124, 136, 127, 131, 55, 144, - 148, 127, 130, 130, 128, 111, 111, 127, 102, 122, 63, 128, 142, 140, 142, 138, - 132, 131, 132, 134, 110, 111, 110, 5, 103, 119, 108, 104, 114, 112, 108, 120, - 100, 107, 100, 61, 126, 146, 128, 140, 144, 110, 123, 122, 116, 107, 85, 20, - 116, 128, 139, 122, 100, 127, 115, 118, 120, 75, 29, 136, 153, 148, 142, 127, - 134, 136, 131, 128, 135, 132, 116, 48, 103, 143, 128, 108, 122, 127, 122, 112, - 116, 106, 55, 87, 155, 165, 148, 139, 139, 144, 154, 151, 134, 127, 63, 106, - 131, 140, 108, 112, 108, 104, 136, 106, 85, 88, 41, 93, 134, 130, 124, 130, - 135, 104, 108, 97, 95, 103, 97, 48, 110, 112, 114, 118, 110, 110, 104, 99, - 104, 91, 99, 44, 132, 130, 111, 119, 115, 119, 106, 103, 103, 102, 69, 20, - 96, 111, 118, 106, 81, 89, 92, 77, 84, 88, 49, 102, 118, 119, 115, 122, - 97, 95, 96, 103, 80, 84, 68, 6, 114, 100, 100, 114, 69, 102, 102, 76, - 73, 92, 79, 6, 122, 124, 135, 108, 99, 132, 93, 88, 81, 73, 45, 92, - 84, 114, 99, 72, 75, 100, 100, 65, 72, 65, 9, 111, 143, 127, 99, 107, - 103, 99, 95, 102, 110, 95, 83, 10, 68, 95, 55, 44, 48, 40, 51, 48, - 53, 41, 37, 18, 92, 87, 79, 83, 75, 88, 71, 73, 69, 63, 61, 0, - 100, 103, 102, 120, 69, 76, 85, 96, 87, 65, 59, 38, 0, 119, 136, 100, - 96, 88, 92, 88, 93, 71, 72, 0, 100, 106, 73, 51, 76, 51, 67, 59, - 73, 51, 24, 80, 93, 97, 77, 65, 46, 46, 48, 48, 48, 59, 42, 17, - 63, 96, 91, 81, 83, 76, 51, 52, 61, 60, 49, 21, 85, 72, 71, 63, - 69, 64, 46, 44, 41, 38, 2, 100, 77, 68, 53, 45, 89, 95, 97, 72, - 57, 40, 34, 0, 93, 55, 51, 45, 29, 34, 33, 33, 52, 38, 26, 2, - 65, 75, 65, 48, 21, 33, 33, 29, 22, 21, 17, 0, 67, 77, 32, 41, - 30, 21, 40, 34, 36, 28, 12, 5, 20, 59, 55, 52, 24, 21, 21, 21, - 14, 18, 28, 10, 18, 80, 63, 64, 92, 153, 159, 162, 158, 158, 163, 166, - 148, 126, 0, 161, 170, 167, 174, 175, 173, 163, 163, 148, 135, 57, 131, 177, - 177, 165, 169, 174, 169, 167, 166, 158, 146, 132, 0, 162, 166, 151, 167, 157, - 155, 151, 153, 159, 124, 81, 112, 162, 170, 165, 163, 167, 171, 163, 161, 163, - 157, 158, 84, 97, 157, 157, 147, 150, 148, 147, 144, 143, 122, 114, 88, 153, - 157, 146, 158, 150, 158, 154, 146, 139, 136, 112, 49, 115, 162, 143, 155, 155, - 148, 153, 154, 131, 120, 119, 24, 153, 154, 154, 147, 140, 148, 142, 148, 154, - 116, 48, 77, 134, 112, 95, 104, 104, 108, 104, 108, 106, 111, 103, 59, 138, - 157, 154, 151, 166, 150, 148, 135, 138, 112, 88, 0, 138, 146, 163, 153, 136, - 142, 146, 150, 148, 140, 136, 68, 89, 150, 155, 144, 131, 130, 142, 135, 114, - 91, 61, 110, 158, 155, 139, 147, 153, 144, 142, 146, 131, 142, 100, 0, 146, - 151, 150, 139, 143, 136, 135, 136, 131, 132, 60, 139, 144, 143, 126, 136, 118, - 106, 107, 128, 128, 123, 64, 127, 136, 134, 134, 136, 135, 138, 136, 134, 107, - 111, 89, 8, 93, 120, 103, 115, 110, 100, 110, 110, 108, 102, 99, 64, 84, - 140, 126, 144, 143, 118, 123, 108, 114, 92, 84, 20, 122, 123, 119, 108, 127, - 130, 131, 124, 124, 72, 29, 85, 154, 146, 138, 131, 135, 132, 130, 131, 135, - 111, 114, 44, 110, 142, 130, 118, 126, 116, 115, 115, 115, 97, 53, 85, 157, - 146, 155, 135, 155, 143, 150, 138, 132, 131, 71, 81, 128, 140, 107, 112, 116, - 118, 130, 104, 81, 83, 41, 93, 128, 119, 120, 114, 116, 110, 107, 112, 92, - 103, 97, 51, 111, 114, 112, 114, 106, 106, 110, 99, 96, 93, 96, 48, 123, - 127, 120, 116, 93, 114, 104, 108, 103, 92, 83, 17, 102, 116, 104, 97, 77, - 89, 85, 77, 80, 77, 48, 63, 112, 118, 115, 118, 95, 87, 106, 92, 81, - 81, 65, 8, 111, 116, 95, 104, 93, 106, 108, 72, 80, 88, 75, 10, 118, - 118, 131, 99, 118, 122, 104, 88, 73, 72, 46, 89, 97, 108, 99, 96, 69, - 96, 97, 65, 71, 65, 16, 99, 147, 123, 106, 103, 100, 107, 104, 103, 106, - 104, 77, 18, 57, 89, 49, 46, 52, 41, 46, 38, 44, 38, 37, 20, 49, - 96, 67, 102, 76, 81, 79, 77, 71, 72, 55, 0, 100, 104, 104, 77, 92, - 93, 80, 97, 93, 71, 69, 37, 0, 122, 131, 102, 96, 91, 93, 89, 79, - 69, 80, 8, 106, 95, 64, 56, 83, 79, 61, 67, 76, 49, 28, 38, 84, - 102, 100, 60, 55, 53, 48, 44, 46, 53, 38, 17, 59, 95, 81, 81, 77, - 72, 48, 46, 59, 63, 44, 21, 79, 75, 68, 61, 68, 81, 49, 46, 41, - 36, 2, 104, 87, 68, 41, 48, 41, 51, 52, 42, 56, 38, 30, 6, 81, - 46, 38, 26, 29, 26, 28, 29, 37, 29, 24, 2, 63, 69, 65, 21, 40, - 26, 69, 38, 34, 32, 16, 0, 53, 69, 38, 51, 44, 20, 32, 41, 30, - 24, 12, 5, 10, 16, 29, 38, 51, 38, 14, 12, 10, 38, 18, 8, 26, - 84, 68, 41, 32, 154, 158, 159, 157, 158, 158, 167, 155, 116, 2, 157, 175, - 163, 173, 177, 173, 165, 170, 167, 110, 51, 134, 174, 179, 167, 166, 171, 171, - 170, 169, 159, 158, 135, 1, 159, 173, 157, 167, 157, 150, 151, 155, 157, 95, - 79, 111, 142, 173, 157, 167, 157, 163, 161, 162, 144, 161, 130, 89, 96, 150, - 157, 153, 150, 148, 147, 150, 136, 120, 102, 96, 150, 178, 151, 158, 150, 144, - 158, 146, 135, 138, 99, 40, 122, 163, 142, 157, 147, 148, 159, 153, 128, 110, - 114, 13, 146, 150, 159, 154, 148, 153, 155, 148, 151, 114, 44, 77, 143, 106, - 111, 107, 128, 111, 99, 100, 104, 111, 96, 71, 89, 155, 154, 147, 162, 159, - 163, 157, 130, 107, 112, 1, 134, 153, 163, 151, 146, 143, 140, 139, 140, 139, - 135, 75, 80, 136, 142, 151, 130, 110, 135, 134, 104, 89, 55, 99, 158, 151, - 148, 146, 146, 139, 144, 131, 131, 144, 87, 0, 143, 143, 143, 135, 143, 138, - 128, 123, 140, 135, 71, 100, 130, 151, 132, 150, 123, 119, 134, 138, 100, 120, - 71, 93, 128, 134, 134, 128, 128, 127, 128, 108, 106, 112, 72, 4, 91, 122, - 119, 99, 93, 103, 97, 97, 97, 102, 96, 68, 75, 132, 140, 140, 108, 122, - 118, 104, 112, 95, 97, 18, 118, 119, 114, 102, 107, 97, 118, 115, 130, 72, - 32, 83, 153, 147, 136, 130, 131, 134, 140, 136, 138, 119, 96, 36, 106, 136, - 123, 118, 136, 115, 114, 112, 112, 95, 52, 81, 147, 144, 134, 139, 132, 140, - 146, 135, 131, 132, 72, 45, 120, 135, 106, 116, 115, 127, 122, 93, 85, 76, - 33, 92, 122, 123, 128, 114, 108, 112, 92, 96, 92, 102, 97, 53, 102, 110, - 115, 114, 108, 107, 106, 110, 99, 92, 99, 51, 71, 128, 122, 106, 111, 118, - 103, 114, 91, 92, 87, 16, 99, 116, 99, 75, 77, 91, 85, 80, 77, 81, - 65, 60, 107, 112, 112, 107, 97, 112, 84, 88, 79, 72, 64, 8, 110, 103, - 87, 96, 103, 75, 92, 73, 72, 83, 83, 13, 108, 131, 114, 95, 91, 93, - 108, 93, 72, 75, 42, 85, 91, 112, 103, 93, 71, 93, 68, 68, 72, 68, - 17, 108, 138, 122, 93, 87, 110, 88, 108, 104, 111, 96, 89, 13, 77, 81, - 48, 34, 37, 52, 37, 40, 37, 30, 33, 18, 45, 89, 110, 79, 69, 57, - 64, 80, 68, 64, 41, 13, 84, 103, 77, 80, 87, 80, 93, 80, 80, 73, - 60, 36, 0, 115, 122, 96, 95, 89, 91, 91, 77, 68, 68, 8, 93, 97, - 61, 48, 79, 79, 71, 56, 72, 49, 41, 33, 79, 99, 102, 60, 45, 46, - 44, 44, 49, 55, 37, 12, 81, 87, 79, 99, 75, 61, 48, 51, 49, 65, - 48, 24, 32, 81, 69, 65, 60, 59, 53, 46, 42, 28, 4, 103, 76, 65, - 48, 48, 56, 51, 46, 45, 59, 36, 30, 5, 79, 41, 29, 29, 26, 28, - 51, 37, 33, 29, 24, 2, 61, 61, 77, 44, 41, 52, 53, 24, 36, 22, - 16, 0, 38, 67, 41, 40, 40, 44, 46, 38, 30, 22, 10, 4, 10, 8, - 21, 24, 24, 34, 14, 10, 10, 26, 13, 4, 36, 72, 37, 36, 32, 171, - 167, 163, 162, 161, 159, 158, 158, 143, 33, 155, 167, 163, 166, 167, 174, 169, - 169, 167, 130, 44, 134, 171, 169, 169, 159, 167, 166, 169, 154, 158, 153, 134, - 1, 157, 167, 162, 153, 153, 163, 159, 163, 127, 116, 71, 124, 159, 169, 170, - 163, 127, 118, 130, 140, 140, 128, 130, 136, 128, 108, 119, 148, 153, 153, 150, - 130, 127, 114, 92, 108, 153, 175, 154, 159, 147, 158, 146, 134, 144, 132, 130, - 36, 128, 159, 139, 161, 157, 158, 151, 154, 140, 108, 116, 16, 150, 155, 159, - 153, 151, 158, 154, 154, 150, 87, 38, 77, 93, 87, 89, 106, 103, 108, 104, - 84, 88, 88, 111, 77, 83, 142, 151, 150, 148, 143, 142, 142, 123, 119, 91, - 4, 134, 130, 161, 147, 147, 143, 134, 130, 134, 128, 126, 123, 120, 83, 89, - 100, 111, 111, 127, 134, 120, 112, 60, 114, 154, 140, 142, 131, 140, 142, 142, - 140, 142, 142, 114, 5, 139, 143, 144, 131, 142, 140, 122, 139, 138, 132, 79, - 76, 89, 124, 120, 142, 131, 112, 104, 134, 110, 81, 73, 76, 87, 127, 96, - 97, 102, 100, 102, 102, 102, 114, 107, 29, 95, 114, 93, 95, 88, 103, 93, - 91, 104, 95, 95, 100, 68, 88, 123, 124, 96, 92, 106, 102, 115, 108, 95, - 13, 112, 118, 103, 119, 112, 112, 107, 112, 104, 67, 76, 69, 148, 144, 139, - 139, 131, 132, 130, 132, 131, 116, 111, 32, 110, 132, 123, 110, 115, 120, 110, - 110, 112, 97, 46, 127, 153, 131, 128, 139, 140, 140, 128, 136, 136, 131, 80, - 67, 112, 131, 104, 122, 119, 111, 108, 103, 85, 73, 30, 93, 119, 111, 93, - 95, 93, 96, 93, 96, 99, 102, 97, 57, 63, 112, 115, 114, 111, 102, 102, - 108, 95, 93, 93, 67, 65, 119, 119, 108, 112, 128, 111, 104, 83, 92, 81, - 20, 93, 96, 79, 76, 77, 77, 68, 76, 57, 71, 80, 56, 71, 97, 97, - 104, 81, 84, 79, 77, 79, 85, 60, 10, 100, 118, 122, 97, 102, 100, 71, - 96, 83, 76, 71, 12, 112, 118, 107, 124, 84, 83, 95, 91, 81, 59, 34, - 93, 93, 108, 97, 85, 72, 87, 72, 71, 71, 61, 18, 96, 143, 124, 114, - 103, 104, 108, 107, 103, 99, 97, 83, 14, 64, 37, 37, 34, 25, 34, 33, - 32, 33, 32, 28, 24, 44, 84, 65, 56, 57, 52, 59, 61, 63, 65, 57, - 2, 92, 95, 76, 75, 93, 83, 76, 76, 76, 75, 57, 33, 0, 118, 124, - 95, 93, 97, 91, 91, 97, 65, 71, 1, 88, 87, 63, 48, 77, 76, 76, - 60, 60, 48, 42, 32, 72, 87, 79, 41, 42, 52, 44, 46, 49, 52, 42, - 13, 64, 87, 93, 55, 64, 61, 45, 53, 60, 67, 52, 34, 24, 49, 79, - 77, 68, 69, 65, 55, 46, 37, 4, 93, 79, 63, 40, 46, 48, 55, 52, - 46, 57, 32, 33, 0, 75, 36, 28, 29, 25, 29, 42, 55, 33, 30, 22, - 4, 63, 88, 60, 44, 38, 59, 29, 37, 37, 22, 14, 0, 18, 49, 52, - 52, 41, 40, 44, 42, 37, 17, 10, 4, 9, 14, 9, 12, 10, 9, 10, - 10, 10, 24, 26, 4, 71, 85, 64, 46, 41, 151, 154, 151, 157, 155, 161, - 157, 144, 128, 0, 153, 159, 161, 157, 159, 159, 162, 158, 151, 124, 32, 135, - 144, 144, 140, 144, 142, 144, 151, 143, 143, 134, 131, 26, 151, 165, 165, 161, - 163, 153, 159, 157, 122, 110, 71, 119, 153, 166, 163, 127, 136, 118, 116, 128, - 138, 126, 122, 114, 122, 123, 130, 142, 139, 138, 136, 135, 111, 108, 83, 108, - 157, 157, 153, 139, 132, 140, 147, 127, 127, 130, 130, 28, 122, 161, 154, 142, - 139, 148, 155, 147, 138, 120, 114, 17, 144, 153, 162, 153, 154, 159, 155, 148, - 119, 106, 33, 83, 104, 73, 80, 72, 91, 81, 85, 85, 84, 80, 83, 84, - 110, 91, 97, 103, 107, 107, 108, 115, 127, 103, 77, 8, 128, 142, 143, 140, - 136, 104, 131, 93, 103, 104, 122, 99, 102, 115, 126, 115, 118, 123, 122, 138, - 122, 84, 46, 111, 122, 130, 123, 120, 124, 127, 128, 130, 123, 115, 114, 4, - 134, 135, 139, 134, 130, 128, 128, 127, 126, 119, 116, 118, 122, 102, 97, 102, - 103, 99, 112, 107, 118, 112, 110, 111, 111, 97, 93, 116, 112, 97, 115, 118, - 115, 112, 110, 10, 81, 107, 110, 95, 77, 80, 87, 88, 89, 91, 100, 92, - 96, 102, 106, 107, 106, 106, 107, 110, 111, 99, 81, 26, 106, 108, 106, 97, - 92, 87, 95, 81, 75, 67, 59, 68, 91, 139, 147, 108, 127, 127, 132, 114, - 115, 111, 111, 25, 106, 103, 106, 96, 100, 100, 108, 108, 111, 96, 48, 93, - 140, 130, 127, 116, 119, 119, 114, 106, 93, 96, 80, 67, 106, 116, 112, 107, - 104, 104, 104, 107, 77, 73, 26, 93, 120, 114, 107, 110, 103, 108, 102, 106, - 110, 102, 91, 93, 61, 68, 75, 99, 72, 76, 102, 104, 103, 104, 91, 83, - 60, 77, 124, 112, 111, 108, 80, 83, 93, 83, 65, 32, 84, 100, 81, 69, - 67, 65, 60, 60, 69, 59, 59, 68, 79, 81, 91, 85, 88, 83, 84, 85, - 87, 83, 64, 12, 93, 106, 114, 99, 69, 103, 99, 102, 83, 81, 77, 17, - 104, 118, 97, 88, 103, 102, 97, 97, 75, 72, 41, 93, 87, 83, 75, 87, - 68, 67, 72, 69, 68, 65, 14, 99, 130, 111, 75, 103, 102, 76, 92, 97, - 96, 92, 42, 18, 21, 36, 40, 25, 24, 36, 26, 28, 28, 34, 36, 26, - 38, 51, 53, 49, 51, 55, 57, 55, 56, 55, 56, 0, 80, 87, 84, 81, - 80, 79, 77, 67, 71, 69, 53, 30, 0, 108, 120, 93, 92, 91, 92, 91, - 97, 63, 65, 13, 77, 85, 60, 46, 41, 51, 45, 45, 32, 33, 42, 34, - 36, 38, 40, 46, 49, 48, 49, 46, 51, 49, 38, 12, 29, 65, 63, 38, - 45, 59, 56, 41, 49, 49, 51, 36, 28, 30, 41, 37, 37, 36, 37, 42, - 46, 36, 5, 64, 75, 69, 63, 60, 59, 56, 45, 51, 57, 34, 32, 1, - 71, 48, 28, 25, 24, 41, 37, 37, 33, 32, 24, 4, 57, 84, 41, 44, - 18, 41, 40, 20, 22, 33, 12, 0, 17, 30, 45, 17, 20, 25, 33, 30, - 18, 18, 9, 2, 8, 13, 12, 10, 9, 10, 9, 12, 9, 18, 12, 2, - 56, 85, 42, 24, 24, 119, 114, 132, 108, 106, 99, 131, 96, 40, 0, 72, - 88, 83, 84, 96, 92, 91, 93, 103, 91, 38, 92, 106, 103, 99, 92, 91, - 85, 87, 84, 83, 81, 67, 0, 72, 79, 76, 89, 91, 80, 83, 102, 97, - 73, 71, 79, 119, 123, 84, 80, 85, 76, 72, 71, 68, 72, 65, 67, 64, - 65, 75, 85, 89, 92, 96, 104, 107, 102, 80, 95, 114, 126, 110, 103, 110, - 122, 102, 100, 114, 103, 68, 25, 80, 110, 127, 115, 120, 119, 128, 122, 124, - 111, 110, 22, 138, 151, 153, 153, 140, 136, 144, 135, 97, 95, 25, 102, 79, - 61, 75, 61, 65, 64, 76, 68, 56, 67, 60, 59, 61, 60, 48, 75, 80, - 84, 88, 88, 93, 96, 81, 4, 53, 77, 81, 59, 57, 57, 61, 48, 45, - 41, 59, 56, 41, 40, 55, 56, 59, 45, 107, 114, 111, 71, 42, 75, 88, - 85, 83, 83, 97, 87, 79, 72, 72, 63, 34, 64, 67, 75, 91, 93, 84, - 84, 95, 93, 92, 93, 97, 95, 102, 104, 111, 107, 106, 104, 107, 106, 114, - 99, 95, 93, 114, 100, 93, 87, 110, 87, 80, 77, 110, 77, 18, 16, 79, - 63, 63, 65, 44, 55, 37, 34, 40, 48, 42, 41, 44, 44, 44, 44, 57, - 64, 71, 75, 96, 80, 75, 26, 40, 42, 48, 45, 51, 41, 48, 45, 53, - 41, 38, 59, 89, 77, 92, 96, 89, 85, 91, 91, 88, 80, 76, 22, 77, - 84, 85, 89, 85, 85, 89, 97, 89, 83, 46, 37, 107, 119, 96, 99, 102, - 114, 103, 102, 108, 112, 103, 76, 69, 75, 84, 91, 93, 95, 104, 110, 72, - 67, 24, 87, 110, 118, 114, 96, 103, 104, 103, 91, 91, 89, 80, 77, 84, - 89, 89, 88, 88, 85, 88, 88, 87, 80, 80, 85, 83, 85, 89, 91, 88, - 87, 85, 85, 84, 75, 81, 21, 84, 55, 49, 46, 42, 41, 45, 38, 34, - 33, 36, 34, 36, 52, 36, 37, 37, 41, 38, 57, 60, 55, 53, 13, 36, - 97, 95, 51, 53, 84, 84, 53, 64, 77, 65, 16, 72, 106, 102, 79, 81, - 96, 92, 73, 73, 69, 42, 91, 85, 67, 61, 56, 56, 59, 56, 57, 60, - 60, 24, 85, 107, 96, 38, 34, 34, 38, 40, 29, 30, 18, 51, 25, 1, - 2, 12, 4, 17, 2, 8, 10, 17, 14, 20, 29, 36, 48, 45, 36, 51, - 46, 49, 33, 53, 52, 40, 1, 25, 30, 32, 30, 30, 28, 29, 29, 29, - 29, 28, 26, 0, 51, 108, 106, 103, 103, 102, 100, 95, 60, 81, 16, 55, - 73, 40, 42, 38, 40, 49, 45, 44, 42, 42, 41, 40, 28, 25, 22, 20, - 21, 20, 18, 17, 16, 16, 9, 16, 14, 17, 21, 17, 20, 22, 24, 29, - 28, 24, 29, 28, 32, 30, 34, 34, 33, 30, 34, 36, 32, 6, 18, 30, - 41, 26, 30, 33, 51, 52, 59, 37, 34, 26, 9, 65, 32, 33, 36, 29, - 30, 26, 30, 24, 24, 18, 5, 14, 22, 38, 8, 8, 8, 9, 8, 5, - 5, 17, 0, 5, 5, 5, 9, 6, 8, 6, 16, 18, 22, 8, 2, 13, - 6, 16, 6, 10, 14, 14, 10, 17, 20, 12, 5, 37, 85, 30, 29, 25, - 8, 4, 8, 28, 29, 4, 4, 40, 42, 13, 44, 34, 26, 24, 21, 49, - 18, 17, 13, 53, 42, 5, 38, 9, 6, 5, 24, 6, 5, 4, 2, 4, - 2, 6, 12, 16, 10, 16, 14, 14, 16, 20, 20, 20, 79, 76, 73, 107, - 107, 123, 124, 126, 132, 138, 136, 131, 132, 131, 134, 151, 134, 134, 95, 95, - 93, 88, 80, 80, 67, 44, 46, 42, 40, 36, 36, 36, 34, 34, 37, 40, - 40, 42, 46, 55, 56, 63, 69, 73, 80, 81, 85, 92, 99, 34, 34, 73, - 76, 76, 73, 77, 77, 79, 77, 69, 28, 79, 41, 71, 40, 56, 37, 40, - 68, 85, 110, 112, 96, 100, 116, 126, 140, 130, 119, 103, 95, 87, 87, 42, - 76, 5, 32, 30, 51, 53, 61, 73, 89, 102, 138, 130, 102, 95, 135, 139, - 122, 134, 138, 107, 89, 81, 71, 44, 22, 40, 33, 17, 24, 24, 21, 12, - 13, 13, 10, 8, 5, 6, 4, 5, 2, 2, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 0, - 0, 0, 25, 0, 0, 0, 38, 0, 0, 9, 26, 33, 38, 37, 92, 123, - 127, 134, 128, 122, 92, 106, 127, 126, 116, 124, 120, 112, 96, 72, 69, 36, - 59, 29, 2, 1, 26, 22, 1, 0, 17, 5, 8, 1, 6, 9, 9, 1, - 5, 4, 1, 6, 18, 21, 1, 8, 4, 2, 36, 37, 2, 2, 21, 22, - 25, 26, 33, 29, 59, 21, 20, 32, 24, 20, 22, 32, 22, 20, 22, 30, - 24, 22, 22, 56, 25, 24, 24, 30, 36, 45, 41, 65, 22, 59, 80, 79, - 61, 61, 75, 73, 59, 60, 64, 60, 55, 42, 46, 49, 37, 41, 41, 45, - 51, 46, 69, 69, 67, 63, 69, 67, 51, 48, 60, 48, 38, 34, 59, 34, - 52, 26, 44, 63, 75, 75, 76, 87, 111, 93, 69, 73, 61, 59, 64, 97, - 95, 97, 89, 72, 57, 46, 42, 36, 29, 29, 32, 46, 36, 44, 32, 36, - 44, 49, 33, 34, 26, 52, 51, 52, 56, 55, 52, 46, 53, 53, 52, 49, - 44, 88, 59, 45, 56, 44, 48, 45, 45, 40, 40, 42, 53, 29, 41, 56, - 63, 71, 72, 75, 73, 69, 75, 64, 51, 12, 34, 119, 83, 77, 60, 34, - 34, 28, 25, 10, 9, 8, 5, 16, 12, 6, 5, 17, 17, 13, 5, 17, - 17, 5, 4, 13, 14, 13, 1, 9, 2, 9, 1, 5, 2, 0, 0, 26, - 30, 36, 38, 42, 46, 49, 53, 59, 56, 13, 60, 28, 29, 22, 22, 25, - 24, 21, 18, 21, 14, 16, 38, 51, 56, 69, 71, 73, 75, 68, 60, 53, - 34, 12, 68, 80, 79, 57, 72, 67, 60, 26, 14, 13, 6, 10, 10, 10, - 9, 13, 12, 8, 5, 6, 6, 4, 6, 17, 14, 18, 12, 12, 17, 25, - 26, 29, 29, 28, 25, 1, 55, 9, 9, 16, 10, 8, 6, 6, 9, 5, - 4, 5, 10, 21, 36, 32, 33, 44, 48, 45, 42, 34, 17, 0, 48, 75, - 68, 67, 67, 61, 30, 20, 10, 6, 2, 2, 0, 4, 1, 1, 6, 6, - 6, 4, 6, 4, 9, 4, 24, 76, 42, 40, 29, 191, 187, 182, 177, 171, - 159, 166, 135, 73, 32, 80, 151, 161, 147, 136, 142, 139, 139, 144, 123, 57, - 68, 155, 161, 162, 157, 165, 163, 162, 157, 163, 147, 157, 150, 162, 165, 162, - 167, 167, 163, 161, 151, 96, 64, 80, 114, 157, 167, 162, 159, 165, 166, 163, - 155, 165, 167, 162, 124, 114, 131, 122, 143, 143, 136, 146, 139, 75, 100, 69, - 64, 154, 153, 140, 136, 139, 136, 126, 128, 126, 114, 106, 116, 134, 151, 143, - 138, 112, 88, 61, 45, 56, 41, 24, 37, 42, 36, 34, 41, 48, 37, 30, - 34, 57, 51, 64, 59, 87, 100, 108, 119, 111, 122, 131, 126, 118, 132, 118, - 119, 91, 107, 134, 116, 119, 122, 126, 123, 131, 106, 97, 9, 57, 148, 153, - 153, 157, 148, 143, 130, 131, 150, 138, 88, 116, 134, 154, 143, 140, 136, 122, - 135, 102, 89, 48, 67, 114, 119, 134, 135, 134, 115, 126, 139, 139, 96, 92, - 97, 153, 150, 155, 154, 153, 148, 154, 150, 144, 97, 106, 138, 143, 148, 142, - 130, 134, 147, 130, 130, 128, 136, 114, 33, 64, 132, 142, 103, 120, 128, 140, - 102, 124, 124, 60, 55, 53, 136, 124, 130, 132, 136, 132, 142, 135, 97, 107, - 91, 95, 110, 130, 123, 127, 120, 107, 108, 114, 79, 45, 6, 44, 108, 126, - 102, 96, 108, 99, 97, 93, 75, 42, 0, 52, 110, 142, 106, 107, 106, 103, - 116, 122, 118, 71, 48, 61, 132, 139, 127, 131, 134, 136, 99, 120, 56, 63, - 56, 112, 122, 120, 104, 107, 99, 95, 115, 108, 92, 51, 57, 64, 100, 108, - 100, 104, 71, 71, 34, 32, 26, 25, 36, 37, 45, 49, 45, 48, 48, 48, - 57, 61, 59, 55, 53, 21, 73, 110, 116, 89, 107, 84, 83, 40, 46, 33, - 21, 30, 46, 71, 77, 75, 80, 85, 83, 81, 72, 60, 68, 95, 127, 138, - 127, 123, 123, 116, 115, 114, 114, 59, 57, 87, 119, 116, 122, 116, 112, 107, - 114, 107, 81, 60, 57, 85, 87, 92, 88, 77, 72, 75, 63, 37, 29, 21, - 30, 29, 41, 41, 34, 18, 21, 18, 37, 16, 17, 42, 37, 61, 77, 79, - 93, 96, 103, 96, 104, 92, 57, 52, 72, 89, 96, 100, 97, 100, 100, 102, - 93, 108, 84, 69, 1, 99, 87, 83, 67, 93, 92, 79, 72, 67, 85, 71, - 64, 96, 107, 95, 99, 107, 100, 92, 88, 85, 79, 28, 0, 22, 81, 114, - 87, 81, 81, 85, 76, 65, 88, 72, 26, 0, 77, 92, 88, 87, 80, 63, - 24, 46, 42, 40, 2, 24, 33, 52, 57, 57, 69, 79, 84, 68, 81, 68, - 83, 68, 73, 79, 75, 71, 80, 77, 87, 72, 59, 37, 13, 79, 81, 59, - 64, 72, 52, 57, 53, 61, 55, 34, 44, 34, 69, 77, 79, 69, 80, 76, - 69, 68, 24, 6, 34, 71, 68, 53, 56, 56, 51, 21, 12, 9, 8, 6, - 1, 4, 34, 36, 36, 37, 45, 48, 49, 49, 51, 24, 6, 46, 80, 76, - 79, 76, 71, 67, 61, 56, 37, 17, 0, 56, 84, 68, 63, 59, 67, 57, - 61, 53, 30, 12, 1, 42, 59, 57, 17, 13, 12, 9, 16, 10, 5, 10, - 2, 71, 48, 106, 116, 120, 186, 179, 173, 174, 167, 173, 166, 161, 87, 42, - 162, 161, 158, 153, 161, 159, 159, 157, 154, 158, 57, 166, 173, 170, 170, 166, - 173, 167, 174, 166, 175, 161, 155, 150, 165, 158, 163, 162, 165, 157, 157, 161, - 154, 153, 85, 147, 169, 157, 162, 165, 157, 163, 158, 161, 155, 120, 131, 107, - 126, 140, 136, 139, 130, 131, 134, 134, 143, 103, 91, 127, 158, 155, 155, 161, - 151, 154, 151, 153, 150, 144, 130, 143, 142, 146, 144, 140, 144, 138, 138, 140, - 135, 138, 104, 28, 56, 127, 136, 120, 123, 127, 135, 130, 123, 84, 61, 93, - 131, 134, 138, 128, 144, 151, 154, 147, 131, 147, 134, 73, 112, 146, 158, 154, - 123, 138, 140, 131, 136, 116, 99, 12, 124, 158, 147, 144, 143, 135, 148, 124, - 128, 158, 143, 95, 119, 158, 154, 147, 151, 148, 151, 123, 138, 100, 45, 116, - 132, 143, 130, 134, 134, 140, 130, 143, 140, 143, 138, 126, 107, 111, 115, 119, - 115, 116, 118, 122, 120, 128, 124, 95, 123, 132, 120, 114, 127, 136, 134, 135, - 140, 143, 140, 34, 147, 158, 147, 144, 147, 140, 134, 135, 131, 130, 72, 45, - 104, 123, 128, 127, 136, 136, 139, 138, 132, 123, 111, 85, 93, 128, 139, 127, - 130, 130, 124, 116, 118, 88, 49, 20, 123, 134, 135, 126, 130, 132, 128, 124, - 123, 107, 48, 2, 153, 155, 151, 150, 153, 151, 146, 139, 154, 147, 108, 51, - 138, 153, 151, 143, 143, 132, 138, 130, 127, 87, 63, 114, 136, 122, 116, 114, - 131, 132, 126, 128, 127, 128, 119, 56, 100, 119, 122, 118, 116, 112, 108, 100, - 73, 51, 24, 80, 100, 81, 93, 96, 92, 102, 92, 92, 85, 76, 61, 46, - 17, 100, 119, 107, 104, 102, 108, 119, 100, 112, 95, 77, 99, 76, 96, 103, - 111, 100, 114, 97, 107, 84, 69, 75, 115, 138, 108, 111, 111, 107, 95, 110, - 104, 93, 99, 77, 112, 106, 111, 103, 102, 100, 108, 103, 99, 91, 103, 92, - 99, 100, 102, 88, 102, 96, 97, 87, 81, 80, 76, 107, 100, 103, 106, 110, - 112, 108, 114, 120, 122, 57, 63, 80, 136, 139, 140, 138, 140, 136, 131, 134, - 132, 88, 52, 79, 106, 102, 97, 96, 89, 91, 81, 79, 83, 93, 57, 10, - 72, 91, 81, 69, 69, 77, 65, 81, 77, 61, 65, 71, 64, 77, 80, 77, - 67, 73, 73, 77, 69, 91, 34, 0, 112, 118, 120, 122, 116, 114, 111, 100, - 108, 103, 84, 48, 0, 81, 89, 95, 97, 97, 92, 87, 77, 69, 40, 9, - 63, 95, 99, 102, 103, 102, 102, 93, 84, 81, 42, 64, 93, 95, 95, 96, - 89, 81, 71, 71, 73, 60, 42, 14, 80, 85, 61, 56, 49, 55, 72, 64, - 79, 69, 30, 24, 72, 93, 91, 91, 89, 80, 76, 83, 80, 29, 8, 57, - 75, 75, 75, 77, 71, 71, 60, 57, 52, 40, 17, 40, 75, 91, 88, 85, - 81, 83, 80, 69, 76, 55, 32, 6, 68, 71, 61, 59, 59, 45, 46, 34, - 44, 55, 21, 2, 40, 83, 71, 59, 42, 46, 45, 46, 61, 49, 17, 1, - 61, 61, 69, 59, 55, 38, 48, 53, 51, 9, 12, 1, 69, 64, 85, 84, - 92, 191, 191, 185, 178, 175, 175, 150, 134, 87, 46, 155, 161, 153, 153, 154, - 111, 153, 151, 148, 80, 64, 171, 183, 182, 190, 201, 205, 209, 214, 217, 220, - 224, 228, 230, 226, 226, 226, 226, 218, 209, 189, 173, 167, 161, 142, 167, 159, - 158, 154, 148, 151, 150, 135, 112, 118, 128, 114, 96, 130, 144, 157, 142, 139, - 143, 144, 146, 144, 139, 65, 151, 161, 153, 154, 148, 148, 151, 148, 144, 146, - 147, 138, 139, 150, 154, 153, 147, 144, 139, 138, 146, 147, 131, 111, 34, 142, - 146, 157, 157, 148, 153, 153, 150, 150, 131, 56, 118, 162, 154, 138, 157, 150, - 138, 138, 150, 150, 151, 132, 77, 110, 151, 159, 148, 147, 150, 150, 148, 132, - 119, 108, 9, 132, 153, 154, 143, 134, 143, 130, 147, 138, 151, 144, 76, 107, - 148, 142, 148, 140, 142, 126, 126, 136, 107, 57, 126, 122, 128, 138, 124, 139, - 140, 147, 146, 138, 127, 97, 130, 123, 139, 139, 140, 139, 135, 127, 114, 112, - 104, 88, 118, 144, 134, 135, 146, 143, 140, 144, 143, 142, 140, 135, 33, 150, - 158, 131, 127, 130, 124, 126, 120, 131, 128, 72, 46, 103, 128, 132, 126, 126, - 122, 127, 127, 135, 124, 115, 67, 85, 126, 118, 123, 131, 132, 119, 108, 112, - 95, 81, 29, 123, 127, 128, 127, 127, 120, 120, 120, 114, 110, 64, 1, 131, - 150, 151, 153, 148, 151, 153, 146, 143, 147, 124, 60, 146, 143, 142, 130, 123, - 126, 115, 120, 120, 127, 112, 132, 119, 112, 116, 106, 115, 92, 96, 95, 99, - 80, 79, 64, 123, 142, 116, 119, 118, 122, 112, 108, 110, 64, 22, 89, 96, - 85, 99, 91, 84, 95, 89, 84, 87, 69, 65, 56, 22, 97, 130, 104, 104, - 118, 106, 107, 104, 93, 103, 59, 67, 127, 122, 120, 128, 123, 118, 112, 106, - 93, 76, 71, 127, 132, 103, 106, 106, 99, 92, 103, 116, 111, 116, 112, 122, - 120, 130, 123, 122, 123, 147, 123, 128, 123, 127, 116, 126, 126, 128, 122, 120, - 123, 122, 122, 104, 85, 59, 108, 108, 106, 110, 106, 103, 92, 103, 102, 97, - 69, 48, 108, 143, 135, 132, 130, 136, 134, 140, 128, 111, 104, 61, 81, 100, - 103, 87, 85, 93, 84, 83, 91, 93, 85, 56, 10, 61, 95, 83, 93, 75, - 89, 79, 92, 92, 80, 68, 61, 81, 99, 92, 107, 104, 100, 88, 106, 93, - 85, 36, 9, 104, 116, 110, 110, 112, 111, 107, 106, 99, 114, 87, 42, 0, - 88, 96, 89, 79, 79, 67, 83, 91, 73, 29, 14, 60, 102, 103, 93, 77, - 71, 88, 68, 67, 52, 45, 76, 100, 87, 87, 73, 65, 71, 83, 75, 65, - 42, 37, 9, 79, 88, 80, 59, 60, 67, 72, 69, 67, 64, 32, 45, 88, - 92, 87, 73, 87, 69, 68, 72, 85, 29, 8, 65, 77, 56, 55, 49, 41, - 44, 40, 45, 63, 53, 18, 36, 81, 77, 84, 91, 72, 60, 61, 77, 68, - 67, 30, 8, 67, 57, 38, 63, 49, 48, 41, 34, 40, 33, 18, 0, 55, - 77, 59, 67, 55, 42, 44, 68, 49, 45, 18, 1, 30, 65, 57, 65, 57, - 61, 51, 57, 46, 20, 13, 1, 83, 103, 84, 75, 84, 179, 171, 175, 171, - 166, 154, 157, 166, 92, 68, 106, 158, 154, 127, 122, 119, 120, 122, 116, 153, - 154, 178, 221, 220, 228, 229, 226, 225, 226, 229, 233, 236, 238, 240, 240, 236, - 234, 236, 234, 234, 232, 232, 216, 178, 167, 161, 173, 179, 205, 179, 167, 148, - 138, 104, 119, 122, 111, 96, 146, 157, 150, 151, 143, 151, 157, 155, 143, 153, - 132, 150, 144, 151, 115, 155, 148, 153, 147, 153, 143, 143, 140, 146, 153, 155, - 147, 147, 143, 161, 158, 131, 123, 131, 107, 34, 148, 153, 155, 155, 157, 147, - 147, 148, 143, 130, 83, 126, 148, 153, 151, 148, 146, 134, 144, 148, 154, 140, - 127, 69, 103, 150, 163, 150, 146, 150, 153, 142, 132, 114, 95, 10, 116, 144, - 147, 143, 140, 143, 131, 118, 157, 157, 136, 83, 114, 150, 147, 139, 134, 131, - 124, 130, 140, 111, 80, 80, 126, 130, 138, 146, 151, 132, 134, 136, 123, 126, - 89, 122, 143, 127, 143, 139, 140, 127, 134, 135, 134, 95, 81, 127, 142, 131, - 139, 132, 139, 138, 112, 138, 139, 95, 97, 45, 99, 161, 132, 123, 127, 112, - 119, 123, 130, 126, 77, 42, 103, 123, 127, 116, 119, 120, 122, 124, 138, 123, - 108, 61, 92, 118, 114, 103, 134, 139, 119, 110, 118, 83, 81, 26, 93, 136, - 126, 124, 127, 116, 128, 128, 111, 102, 55, 6, 84, 148, 142, 134, 130, 130, - 135, 136, 128, 124, 130, 126, 131, 143, 144, 136, 127, 139, 120, 128, 110, 116, - 104, 115, 106, 116, 115, 110, 108, 112, 114, 111, 106, 110, 106, 108, 111, 122, - 130, 100, 108, 108, 132, 108, 106, 60, 20, 79, 89, 85, 92, 97, 99, 93, - 93, 88, 80, 71, 57, 51, 20, 95, 115, 100, 108, 118, 118, 118, 114, 104, - 103, 55, 111, 135, 130, 122, 111, 112, 110, 103, 106, 81, 75, 80, 110, 128, - 96, 107, 100, 99, 104, 136, 206, 209, 201, 213, 224, 224, 212, 221, 230, 234, - 230, 228, 233, 244, 229, 230, 225, 242, 221, 212, 216, 246, 222, 167, 112, 84, - 63, 107, 127, 139, 136, 132, 132, 122, 116, 115, 99, 71, 63, 123, 138, 130, - 128, 134, 134, 143, 138, 110, 122, 97, 69, 69, 100, 93, 87, 83, 88, 85, - 83, 83, 93, 83, 46, 6, 71, 108, 96, 112, 88, 79, 91, 85, 76, 77, - 68, 36, 89, 99, 91, 93, 96, 95, 73, 96, 95, 87, 32, 9, 68, 112, - 107, 100, 96, 96, 89, 93, 97, 107, 85, 41, 0, 84, 84, 80, 61, 81, - 80, 75, 77, 79, 44, 17, 72, 100, 87, 83, 81, 76, 83, 56, 64, 56, - 33, 72, 91, 77, 71, 68, 84, 67, 67, 57, 49, 52, 38, 13, 76, 88, - 80, 76, 83, 84, 56, 64, 60, 64, 22, 36, 92, 91, 84, 61, 81, 72, - 85, 83, 80, 30, 9, 67, 61, 51, 51, 41, 41, 41, 41, 41, 57, 51, - 20, 32, 76, 75, 81, 100, 75, 56, 61, 65, 56, 51, 30, 9, 60, 67, - 41, 71, 41, 52, 37, 40, 49, 34, 17, 0, 56, 77, 61, 55, 49, 52, - 48, 64, 44, 26, 18, 1, 49, 46, 56, 57, 42, 45, 44, 34, 42, 36, - 13, 2, 67, 61, 59, 28, 17, 163, 163, 166, 162, 162, 154, 169, 157, 93, - 59, 114, 161, 157, 127, 124, 110, 103, 161, 167, 197, 214, 222, 228, 236, 233, - 233, 229, 229, 224, 230, 237, 238, 238, 236, 234, 233, 230, 225, 229, 230, 232, - 229, 233, 230, 221, 225, 222, 209, 202, 216, 157, 144, 131, 106, 123, 123, 114, - 110, 163, 193, 198, 194, 198, 205, 209, 210, 208, 208, 204, 206, 208, 177, 166, - 162, 155, 159, 153, 150, 154, 151, 169, 185, 199, 205, 202, 195, 190, 155, 139, - 131, 108, 130, 103, 44, 104, 151, 146, 148, 146, 147, 140, 148, 153, 132, 84, - 96, 150, 159, 142, 144, 148, 136, 134, 138, 154, 140, 128, 67, 112, 148, 158, - 147, 146, 147, 151, 139, 138, 115, 103, 14, 112, 151, 157, 150, 143, 155, 124, - 148, 148, 148, 135, 67, 116, 139, 148, 134, 134, 139, 128, 143, 134, 111, 76, - 75, 140, 146, 127, 131, 132, 143, 131, 135, 128, 116, 81, 127, 143, 135, 134, - 131, 130, 134, 148, 140, 134, 120, 76, 130, 140, 140, 126, 138, 136, 135, 138, - 130, 136, 138, 128, 49, 102, 158, 135, 123, 118, 106, 114, 111, 127, 126, 77, - 38, 104, 123, 122, 112, 112, 112, 115, 119, 128, 116, 102, 65, 84, 112, 110, - 103, 124, 110, 103, 108, 114, 85, 48, 10, 95, 139, 118, 116, 124, 127, 122, - 118, 115, 100, 55, 4, 134, 142, 136, 134, 138, 135, 128, 132, 157, 194, 205, - 209, 218, 222, 230, 232, 236, 237, 248, 248, 246, 238, 238, 224, 232, 236, 232, - 230, 225, 228, 222, 224, 204, 205, 187, 206, 198, 228, 191, 182, 177, 178, 199, - 155, 114, 63, 26, 85, 77, 92, 99, 91, 89, 97, 79, 81, 55, 68, 49, - 42, 13, 93, 122, 106, 111, 122, 122, 119, 104, 92, 104, 42, 116, 132, 124, - 108, 107, 114, 118, 111, 115, 89, 71, 56, 106, 126, 93, 99, 96, 97, 97, - 142, 199, 205, 206, 213, 213, 217, 216, 213, 217, 221, 224, 225, 226, 225, 224, - 222, 221, 213, 214, 210, 208, 209, 202, 154, 106, 79, 22, 100, 118, 122, 126, - 124, 123, 136, 135, 107, 106, 72, 71, 97, 136, 128, 144, 140, 124, 120, 97, - 103, 110, 103, 67, 64, 104, 96, 83, 87, 85, 85, 83, 87, 75, 80, 60, - 1, 73, 108, 83, 97, 80, 89, 88, 107, 71, 71, 67, 46, 79, 104, 99, - 104, 106, 104, 103, 93, 81, 81, 32, 0, 71, 112, 99, 91, 88, 93, 104, - 104, 107, 111, 91, 40, 0, 79, 80, 77, 65, 95, 76, 76, 80, 64, 38, - 10, 60, 106, 92, 77, 72, 68, 83, 60, 59, 44, 34, 68, 97, 69, 83, - 87, 76, 68, 63, 68, 72, 49, 38, 18, 72, 77, 71, 75, 65, 65, 59, - 69, 57, 63, 24, 40, 89, 83, 69, 80, 75, 95, 83, 81, 77, 32, 12, - 55, 76, 53, 52, 42, 40, 38, 38, 40, 40, 40, 18, 2, 75, 76, 88, - 95, 56, 63, 64, 57, 67, 51, 33, 10, 53, 68, 41, 75, 29, 52, 37, - 34, 44, 30, 17, 0, 42, 75, 67, 69, 53, 55, 45, 63, 49, 29, 17, - 1, 46, 59, 55, 29, 34, 32, 33, 24, 37, 18, 13, 8, 68, 60, 45, - 56, 18, 161, 161, 162, 163, 161, 154, 167, 151, 93, 65, 153, 150, 123, 119, - 128, 158, 159, 205, 233, 234, 236, 237, 230, 228, 228, 228, 204, 175, 162, 167, - 170, 163, 147, 136, 131, 127, 116, 112, 120, 128, 143, 191, 214, 228, 228, 228, - 225, 221, 221, 209, 157, 139, 119, 106, 124, 104, 115, 151, 175, 206, 205, 213, - 204, 214, 220, 218, 216, 226, 224, 229, 226, 225, 222, 225, 221, 218, 213, 206, - 210, 214, 218, 216, 222, 214, 213, 208, 208, 155, 135, 126, 102, 127, 104, 48, - 106, 154, 139, 140, 161, 154, 153, 151, 147, 131, 85, 67, 142, 154, 153, 148, - 150, 155, 155, 155, 155, 139, 128, 63, 107, 162, 163, 144, 150, 147, 153, 139, - 138, 115, 96, 17, 126, 153, 144, 146, 140, 148, 138, 142, 151, 142, 138, 67, - 118, 138, 144, 136, 134, 140, 138, 139, 135, 110, 77, 61, 139, 131, 131, 134, - 140, 130, 142, 135, 120, 108, 77, 116, 139, 131, 127, 131, 139, 136, 134, 136, - 126, 95, 77, 131, 143, 150, 140, 139, 120, 143, 136, 127, 138, 135, 131, 53, - 104, 155, 138, 118, 116, 104, 107, 119, 128, 127, 80, 37, 111, 116, 118, 115, - 115, 110, 110, 120, 124, 115, 106, 64, 89, 108, 107, 97, 95, 132, 131, 106, - 111, 88, 48, 21, 106, 139, 124, 124, 123, 118, 116, 102, 115, 119, 51, 4, - 148, 148, 135, 132, 139, 127, 136, 199, 202, 216, 212, 214, 220, 232, 233, 234, - 238, 241, 245, 248, 248, 244, 242, 242, 226, 236, 240, 229, 224, 228, 233, 229, - 221, 226, 216, 213, 205, 214, 206, 201, 186, 212, 199, 169, 107, 61, 28, 83, - 76, 92, 93, 88, 93, 87, 85, 81, 59, 65, 48, 40, 12, 100, 119, 106, - 115, 112, 122, 122, 112, 93, 95, 37, 115, 128, 110, 119, 119, 120, 127, 122, - 119, 104, 76, 81, 103, 131, 100, 104, 107, 96, 95, 116, 144, 190, 201, 206, - 208, 204, 210, 201, 205, 212, 214, 216, 222, 222, 224, 216, 210, 217, 209, 201, - 197, 204, 178, 116, 97, 51, 33, 106, 122, 107, 120, 120, 126, 126, 134, 110, - 110, 73, 67, 99, 132, 120, 116, 97, 99, 103, 97, 103, 107, 114, 83, 61, - 100, 96, 89, 80, 84, 85, 85, 79, 87, 100, 57, 8, 95, 84, 99, 80, - 84, 91, 96, 87, 87, 75, 65, 45, 81, 108, 87, 103, 89, 87, 85, 87, - 92, 87, 29, 1, 114, 103, 95, 99, 102, 100, 100, 108, 107, 104, 88, 57, - 1, 77, 96, 73, 102, 75, 63, 77, 72, 65, 36, 6, 56, 103, 89, 85, - 80, 83, 81, 71, 55, 49, 33, 72, 95, 67, 75, 89, 77, 68, 71, 71, - 57, 53, 42, 24, 75, 91, 83, 84, 85, 68, 59, 63, 60, 75, 28, 48, - 85, 79, 63, 87, 92, 95, 77, 81, 69, 36, 10, 59, 71, 59, 51, 41, - 40, 51, 37, 42, 53, 60, 20, 4, 69, 69, 63, 56, 59, 56, 56, 53, - 55, 53, 34, 12, 46, 72, 51, 87, 28, 51, 32, 46, 40, 36, 20, 4, - 53, 73, 69, 64, 52, 45, 52, 52, 53, 38, 20, 0, 48, 63, 36, 30, - 18, 22, 22, 26, 33, 14, 13, 1, 63, 56, 34, 13, 2, 173, 161, 158, - 158, 154, 154, 170, 140, 102, 69, 153, 159, 122, 131, 159, 179, 225, 236, 233, - 232, 233, 234, 229, 216, 185, 150, 118, 107, 103, 104, 104, 104, 104, 104, 103, - 106, 106, 107, 104, 107, 108, 111, 126, 136, 166, 197, 206, 214, 202, 162, 140, - 124, 93, 104, 115, 110, 118, 159, 178, 232, 234, 218, 229, 224, 232, 228, 232, - 230, 225, 225, 230, 234, 232, 229, 226, 221, 220, 228, 222, 221, 222, 222, 225, - 220, 216, 216, 208, 146, 127, 116, 99, 122, 107, 55, 139, 150, 143, 150, 158, - 139, 150, 151, 154, 155, 126, 56, 135, 153, 159, 161, 161, 157, 157, 151, 150, - 135, 127, 63, 100, 154, 158, 150, 146, 146, 154, 142, 140, 132, 100, 16, 120, - 151, 147, 153, 146, 148, 151, 153, 154, 128, 116, 53, 112, 134, 147, 135, 146, - 139, 136, 134, 136, 120, 110, 63, 131, 132, 135, 132, 128, 132, 135, 134, 118, - 89, 69, 112, 131, 127, 123, 134, 140, 134, 132, 128, 120, 81, 72, 124, 138, - 142, 142, 135, 122, 138, 131, 138, 115, 136, 126, 59, 79, 108, 155, 136, 114, - 110, 107, 116, 132, 119, 80, 44, 99, 114, 115, 106, 107, 104, 103, 127, 127, - 122, 100, 61, 80, 102, 102, 95, 92, 131, 108, 106, 108, 91, 67, 25, 110, - 123, 118, 128, 123, 126, 123, 115, 118, 104, 57, 1, 118, 146, 134, 134, 132, - 126, 189, 201, 208, 214, 217, 221, 220, 225, 230, 234, 234, 237, 241, 245, 244, - 246, 245, 244, 238, 230, 240, 233, 230, 232, 222, 222, 225, 229, 220, 220, 209, - 205, 202, 199, 195, 202, 159, 138, 73, 63, 28, 83, 81, 87, 99, 92, 88, - 81, 76, 79, 59, 60, 55, 46, 14, 75, 127, 108, 118, 108, 114, 119, 112, - 106, 88, 45, 112, 119, 126, 131, 132, 143, 139, 135, 128, 120, 104, 87, 114, - 136, 106, 104, 88, 87, 99, 93, 104, 112, 122, 122, 120, 112, 110, 107, 110, - 108, 108, 108, 114, 118, 118, 114, 114, 116, 111, 108, 108, 107, 106, 92, 87, - 49, 53, 103, 119, 106, 106, 126, 119, 120, 124, 108, 104, 76, 73, 93, 130, - 132, 112, 112, 132, 118, 120, 126, 92, 102, 102, 57, 89, 106, 95, 81, 85, - 80, 85, 91, 87, 91, 53, 9, 67, 93, 89, 80, 81, 80, 76, 85, 91, - 79, 63, 45, 72, 111, 77, 108, 110, 96, 100, 97, 96, 75, 38, 8, 111, - 112, 102, 106, 97, 102, 100, 112, 106, 106, 87, 44, 1, 84, 96, 80, 80, - 75, 76, 65, 79, 49, 30, 16, 56, 97, 93, 71, 84, 77, 69, 67, 57, - 56, 37, 75, 95, 81, 81, 84, 75, 67, 67, 84, 60, 41, 42, 16, 81, - 87, 79, 65, 76, 72, 57, 67, 56, 63, 25, 68, 81, 63, 81, 80, 77, - 73, 83, 84, 72, 32, 14, 36, 56, 68, 52, 52, 40, 55, 52, 38, 49, - 60, 20, 24, 65, 76, 65, 55, 55, 59, 55, 55, 55, 51, 36, 13, 48, - 72, 42, 59, 32, 44, 32, 49, 41, 30, 17, 1, 64, 75, 72, 71, 52, - 48, 60, 56, 55, 41, 18, 0, 30, 48, 29, 18, 13, 10, 12, 20, 26, - 16, 13, 1, 64, 77, 28, 2, 25, 189, 165, 163, 163, 162, 159, 158, 162, - 102, 87, 118, 118, 134, 162, 198, 229, 240, 233, 233, 225, 216, 195, 170, 126, - 110, 103, 104, 104, 106, 104, 106, 106, 112, 111, 103, 92, 88, 93, 97, 107, - 128, 108, 111, 114, 114, 122, 126, 127, 130, 127, 131, 102, 87, 104, 116, 100, - 111, 143, 162, 204, 212, 208, 174, 142, 128, 134, 138, 134, 131, 134, 140, 167, - 195, 204, 210, 216, 221, 220, 213, 201, 206, 213, 216, 212, 201, 159, 138, 123, - 119, 89, 89, 120, 99, 55, 97, 147, 148, 150, 150, 157, 157, 151, 151, 157, - 103, 68, 122, 153, 151, 153, 155, 151, 153, 153, 151, 128, 130, 56, 96, 139, - 158, 158, 159, 154, 155, 143, 140, 120, 92, 16, 116, 146, 148, 151, 144, 150, - 146, 147, 144, 142, 89, 42, 112, 134, 146, 128, 138, 142, 139, 134, 128, 128, - 103, 61, 95, 138, 132, 139, 130, 132, 132, 126, 116, 88, 61, 106, 144, 132, - 126, 134, 135, 136, 132, 134, 123, 83, 65, 130, 127, 138, 135, 135, 134, 139, - 138, 136, 114, 97, 115, 67, 72, 111, 134, 147, 123, 110, 103, 118, 126, 123, - 88, 38, 96, 118, 110, 112, 103, 103, 123, 147, 118, 114, 95, 41, 88, 106, - 88, 87, 93, 93, 102, 102, 99, 81, 68, 28, 80, 138, 130, 131, 123, 112, - 114, 124, 114, 108, 51, 8, 88, 143, 134, 132, 139, 124, 122, 161, 201, 208, - 204, 183, 139, 130, 126, 123, 128, 123, 111, 106, 110, 111, 114, 114, 112, 110, - 106, 107, 110, 110, 107, 102, 103, 111, 116, 112, 111, 104, 99, 104, 84, 79, - 77, 76, 65, 33, 22, 80, 88, 92, 87, 91, 85, 80, 80, 79, 55, 56, - 49, 40, 12, 92, 108, 111, 106, 112, 118, 103, 108, 99, 79, 48, 115, 123, - 139, 153, 181, 187, 195, 178, 177, 158, 135, 123, 111, 135, 97, 110, 95, 84, - 87, 89, 104, 95, 87, 92, 96, 97, 96, 95, 96, 95, 95, 95, 96, 96, - 97, 99, 99, 96, 97, 99, 96, 93, 97, 96, 36, 29, 48, 104, 114, 107, - 116, 112, 112, 116, 128, 107, 102, 88, 60, 72, 115, 126, 108, 95, 122, 130, - 127, 102, 99, 103, 89, 64, 75, 95, 97, 85, 87, 87, 85, 85, 87, 87, - 41, 6, 64, 100, 93, 77, 85, 81, 76, 83, 92, 72, 63, 29, 89, 106, - 88, 91, 108, 111, 93, 107, 96, 72, 30, 6, 69, 102, 92, 104, 108, 96, - 102, 104, 104, 106, 84, 42, 2, 79, 75, 93, 80, 64, 55, 69, 45, 44, - 37, 18, 57, 91, 91, 83, 89, 77, 72, 68, 68, 44, 24, 84, 91, 83, - 89, 88, 69, 68, 79, 65, 55, 45, 41, 21, 83, 79, 65, 79, 67, 60, - 63, 69, 55, 57, 21, 48, 89, 87, 91, 73, 48, 76, 77, 95, 73, 29, - 16, 29, 56, 68, 55, 51, 48, 55, 36, 37, 51, 49, 22, 21, 59, 75, - 69, 61, 65, 59, 60, 60, 57, 52, 40, 14, 25, 67, 49, 37, 33, 38, - 33, 45, 46, 33, 17, 1, 40, 73, 56, 64, 48, 57, 46, 48, 55, 28, - 18, 0, 57, 55, 18, 17, 12, 21, 10, 16, 28, 22, 9, 2, 64, 81, - 20, 6, 51, 177, 178, 169, 173, 161, 170, 157, 158, 104, 81, 120, 128, 170, - 218, 236, 236, 234, 237, 236, 191, 143, 114, 106, 106, 107, 110, 114, 102, 118, - 116, 108, 87, 67, 53, 56, 53, 61, 60, 63, 67, 85, 97, 126, 115, 116, - 119, 119, 120, 120, 128, 126, 83, 77, 89, 110, 106, 116, 124, 140, 134, 142, - 127, 127, 110, 103, 100, 107, 99, 103, 96, 104, 100, 103, 110, 111, 115, 115, - 115, 114, 111, 112, 116, 122, 124, 118, 119, 112, 110, 81, 85, 108, 112, 99, - 57, 85, 134, 154, 151, 159, 153, 155, 155, 151, 146, 108, 80, 100, 144, 148, - 151, 146, 148, 151, 151, 147, 127, 124, 44, 104, 126, 150, 153, 150, 147, 142, - 146, 132, 126, 97, 18, 118, 142, 151, 148, 151, 148, 148, 151, 140, 138, 114, - 44, 110, 130, 146, 143, 135, 138, 127, 130, 106, 103, 97, 75, 83, 84, 107, - 104, 100, 103, 107, 107, 116, 108, 64, 114, 140, 128, 123, 131, 132, 132, 132, - 131, 127, 93, 57, 127, 127, 127, 124, 120, 128, 126, 131, 128, 130, 128, 126, - 96, 73, 112, 128, 123, 103, 99, 102, 119, 120, 120, 89, 33, 106, 124, 115, - 110, 102, 99, 123, 136, 116, 110, 96, 45, 80, 99, 88, 87, 80, 83, 85, - 92, 84, 79, 55, 29, 76, 136, 112, 83, 103, 119, 120, 103, 108, 110, 48, - 8, 128, 135, 132, 128, 131, 128, 131, 131, 130, 128, 126, 118, 116, 112, 112, - 111, 111, 106, 100, 97, 99, 97, 99, 99, 97, 95, 93, 92, 92, 91, 92, - 84, 88, 88, 87, 87, 88, 83, 83, 84, 77, 72, 56, 56, 32, 24, 30, - 77, 75, 88, 83, 72, 57, 60, 51, 40, 55, 51, 56, 41, 6, 93, 128, - 114, 110, 110, 108, 111, 103, 96, 49, 75, 124, 138, 186, 202, 213, 212, 205, - 197, 201, 201, 197, 178, 151, 132, 103, 79, 80, 87, 72, 81, 72, 84, 83, - 81, 92, 103, 103, 102, 103, 102, 99, 100, 104, 106, 107, 107, 104, 104, 106, - 106, 103, 107, 83, 30, 38, 32, 14, 96, 104, 115, 100, 110, 97, 93, 89, - 111, 95, 84, 61, 77, 96, 106, 100, 119, 108, 107, 96, 91, 88, 89, 99, - 67, 67, 83, 108, 103, 99, 92, 99, 100, 87, 83, 63, 5, 72, 100, 100, - 92, 84, 91, 83, 87, 100, 60, 63, 33, 69, 108, 93, 102, 89, 72, 75, - 84, 85, 80, 30, 2, 71, 108, 95, 97, 97, 97, 103, 106, 99, 100, 95, - 38, 2, 76, 89, 67, 55, 56, 49, 45, 59, 45, 34, 18, 60, 91, 89, - 93, 75, 67, 76, 72, 72, 48, 28, 63, 85, 76, 81, 72, 69, 71, 68, - 68, 67, 44, 41, 24, 87, 79, 75, 61, 63, 60, 56, 64, 59, 32, 20, - 73, 76, 92, 73, 53, 65, 61, 80, 63, 73, 26, 20, 24, 55, 61, 59, - 64, 57, 49, 38, 38, 40, 45, 18, 4, 63, 72, 75, 59, 61, 61, 53, - 49, 53, 56, 32, 20, 21, 63, 55, 37, 42, 41, 33, 40, 37, 26, 17, - 1, 56, 71, 65, 53, 41, 46, 45, 53, 55, 40, 32, 1, 30, 45, 14, - 25, 14, 24, 14, 16, 29, 17, 9, 13, 55, 52, 26, 42, 95, 144, 140, - 143, 135, 124, 130, 128, 110, 83, 142, 132, 169, 226, 241, 238, 238, 236, 240, - 198, 131, 108, 110, 111, 116, 116, 111, 115, 120, 118, 92, 61, 48, 44, 45, - 48, 48, 56, 57, 61, 64, 69, 81, 103, 119, 154, 115, 120, 122, 124, 132, - 118, 79, 75, 76, 97, 103, 85, 127, 120, 119, 114, 106, 114, 111, 110, 110, - 108, 107, 108, 106, 104, 104, 104, 106, 104, 103, 104, 103, 104, 104, 103, 104, - 110, 108, 108, 111, 95, 72, 76, 75, 106, 108, 99, 61, 72, 128, 143, 154, - 139, 107, 122, 108, 104, 97, 96, 107, 84, 103, 123, 140, 136, 139, 139, 139, - 142, 122, 127, 41, 103, 120, 148, 150, 150, 146, 144, 128, 124, 122, 92, 24, - 123, 128, 131, 130, 127, 127, 127, 132, 135, 116, 112, 44, 104, 126, 138, 131, - 104, 120, 118, 107, 108, 115, 106, 103, 108, 120, 102, 123, 116, 118, 104, 119, - 116, 75, 64, 97, 115, 131, 115, 122, 126, 126, 119, 126, 122, 91, 57, 128, - 126, 126, 119, 123, 123, 123, 119, 119, 115, 122, 112, 114, 76, 87, 95, 97, - 99, 102, 107, 110, 120, 119, 92, 30, 110, 107, 116, 107, 100, 97, 95, 100, - 107, 107, 85, 64, 77, 92, 79, 72, 75, 76, 79, 77, 79, 77, 40, 30, - 59, 110, 118, 89, 104, 115, 114, 108, 115, 120, 45, 4, 122, 139, 132, 131, - 126, 124, 128, 123, 119, 108, 111, 106, 89, 99, 81, 87, 93, 83, 115, 114, - 111, 112, 111, 111, 111, 111, 108, 107, 104, 107, 104, 100, 96, 103, 99, 97, - 102, 97, 77, 48, 32, 28, 24, 24, 21, 14, 34, 29, 40, 42, 37, 34, - 34, 37, 36, 38, 36, 42, 40, 34, 6, 68, 115, 118, 116, 114, 122, 115, - 102, 95, 42, 85, 130, 174, 217, 216, 209, 218, 206, 208, 214, 210, 194, 190, - 166, 102, 88, 96, 87, 92, 89, 88, 77, 88, 96, 57, 65, 64, 102, 163, - 110, 116, 122, 119, 131, 126, 128, 132, 134, 134, 134, 131, 116, 92, 61, 26, - 45, 33, 20, 75, 99, 104, 106, 104, 107, 104, 108, 104, 100, 96, 93, 99, - 100, 79, 79, 84, 77, 76, 79, 89, 91, 79, 72, 80, 79, 77, 80, 76, - 76, 75, 61, 73, 71, 73, 40, 9, 67, 81, 84, 88, 87, 87, 84, 87, - 85, 72, 59, 30, 102, 112, 92, 89, 68, 87, 87, 77, 76, 79, 29, 4, - 99, 103, 93, 97, 91, 100, 92, 96, 92, 96, 79, 59, 2, 75, 87, 59, - 68, 48, 53, 46, 49, 44, 32, 8, 60, 84, 83, 80, 60, 64, 73, 73, - 55, 44, 25, 60, 72, 73, 68, 68, 71, 71, 71, 72, 67, 45, 51, 30, - 92, 79, 61, 60, 61, 59, 49, 60, 52, 28, 20, 64, 52, 65, 72, 68, - 64, 55, 59, 56, 53, 29, 24, 20, 40, 51, 52, 36, 42, 42, 49, 46, - 46, 45, 24, 2, 57, 63, 60, 55, 51, 48, 45, 45, 41, 40, 28, 26, - 25, 20, 21, 20, 29, 29, 22, 40, 34, 33, 17, 8, 51, 67, 61, 48, - 42, 41, 41, 44, 42, 34, 22, 1, 51, 48, 14, 20, 17, 24, 20, 20, - 13, 13, 8, 1, 42, 60, 45, 38, 30, 91, 80, 92, 91, 88, 83, 88, - 102, 134, 123, 150, 217, 241, 237, 238, 237, 241, 191, 136, 108, 116, 122, 120, - 112, 103, 120, 127, 122, 89, 49, 40, 42, 38, 42, 55, 73, 79, 80, 87, - 84, 80, 76, 89, 106, 147, 159, 120, 119, 119, 132, 119, 73, 68, 69, 92, - 104, 83, 116, 127, 124, 122, 120, 119, 118, 116, 115, 119, 116, 115, 116, 118, - 118, 111, 108, 108, 108, 108, 111, 107, 110, 107, 108, 107, 115, 104, 72, 69, - 68, 67, 56, 60, 100, 99, 93, 59, 71, 83, 95, 103, 76, 69, 67, 59, - 57, 51, 52, 56, 80, 80, 96, 107, 111, 115, 122, 122, 126, 111, 42, 92, - 112, 138, 143, 135, 130, 97, 61, 71, 60, 38, 26, 83, 87, 87, 89, 92, - 91, 91, 95, 99, 96, 69, 60, 81, 91, 92, 65, 60, 59, 60, 45, 30, - 46, 37, 29, 28, 21, 25, 22, 22, 30, 33, 33, 36, 37, 48, 36, 38, - 38, 38, 40, 65, 68, 48, 56, 63, 97, 55, 99, 114, 106, 100, 102, 102, - 100, 102, 103, 103, 106, 102, 99, 100, 106, 111, 111, 112, 115, 115, 116, 115, - 114, 92, 37, 100, 106, 99, 95, 89, 95, 89, 80, 97, 97, 69, 32, 68, - 60, 44, 32, 29, 28, 25, 28, 26, 20, 21, 32, 38, 36, 44, 37, 36, - 37, 37, 52, 52, 65, 49, 0, 18, 73, 81, 80, 79, 84, 91, 88, 91, - 87, 87, 49, 81, 111, 122, 134, 135, 130, 126, 127, 120, 127, 126, 127, 127, - 126, 123, 123, 120, 119, 116, 115, 115, 110, 114, 104, 84, 60, 28, 21, 21, - 18, 12, 13, 12, 10, 37, 37, 33, 40, 38, 36, 29, 33, 33, 32, 29, - 37, 30, 34, 10, 44, 99, 103, 96, 106, 108, 89, 72, 92, 36, 93, 144, - 205, 220, 217, 216, 220, 225, 202, 177, 146, 140, 123, 106, 91, 89, 68, 56, - 73, 76, 73, 72, 76, 69, 53, 68, 60, 102, 174, 150, 111, 110, 135, 132, - 134, 136, 139, 144, 142, 140, 136, 119, 83, 29, 25, 21, 52, 40, 46, 83, - 83, 73, 80, 84, 80, 79, 84, 83, 84, 81, 83, 87, 89, 88, 89, 88, - 88, 89, 85, 88, 88, 84, 76, 80, 80, 77, 67, 87, 75, 68, 56, 73, - 71, 38, 8, 30, 73, 76, 51, 59, 79, 77, 64, 65, 69, 53, 42, 87, - 124, 73, 64, 73, 73, 53, 55, 63, 52, 44, 8, 83, 110, 103, 104, 97, - 102, 91, 91, 97, 93, 60, 41, 4, 77, 84, 53, 56, 44, 40, 42, 41, - 38, 21, 17, 53, 26, 32, 33, 36, 33, 32, 32, 24, 22, 29, 30, 34, - 34, 33, 32, 38, 51, 60, 61, 61, 38, 38, 20, 88, 73, 57, 52, 55, - 38, 36, 36, 32, 30, 24, 44, 26, 37, 25, 28, 45, 41, 46, 41, 42, - 41, 28, 16, 33, 40, 42, 37, 33, 32, 33, 32, 30, 28, 22, 16, 28, - 29, 21, 21, 25, 25, 22, 24, 24, 22, 26, 25, 24, 26, 25, 26, 28, - 29, 28, 30, 28, 30, 16, 1, 45, 44, 41, 37, 38, 37, 36, 36, 34, - 21, 24, 0, 42, 36, 9, 9, 8, 8, 8, 6, 8, 10, 5, 1, 5, - 9, 8, 12, 2, 143, 140, 136, 132, 130, 126, 128, 144, 126, 139, 190, 240, - 241, 240, 238, 238, 190, 135, 111, 115, 126, 114, 106, 100, 124, 131, 126, 97, - 49, 37, 37, 37, 37, 59, 69, 68, 60, 60, 52, 59, 33, 38, 93, 110, - 134, 170, 143, 122, 120, 135, 123, 69, 64, 67, 88, 97, 77, 55, 56, 61, - 61, 57, 60, 73, 135, 171, 115, 116, 118, 119, 115, 104, 99, 99, 103, 107, - 116, 118, 119, 114, 112, 118, 116, 93, 60, 59, 57, 46, 49, 56, 49, 57, - 63, 61, 67, 55, 55, 55, 51, 87, 91, 96, 99, 106, 111, 108, 53, 122, - 127, 100, 92, 89, 91, 85, 80, 95, 111, 38, 84, 65, 55, 51, 46, 46, - 34, 33, 34, 28, 32, 17, 22, 21, 18, 18, 21, 22, 24, 22, 26, 29, - 30, 64, 29, 36, 64, 71, 77, 73, 81, 93, 128, 108, 116, 111, 132, 142, - 130, 142, 142, 136, 130, 127, 110, 63, 48, 102, 144, 147, 116, 112, 97, 83, - 75, 69, 26, 25, 20, 18, 18, 18, 18, 17, 18, 20, 21, 21, 24, 28, - 29, 32, 30, 34, 41, 46, 49, 57, 63, 95, 99, 112, 93, 41, 95, 87, - 69, 55, 52, 48, 44, 46, 46, 40, 38, 29, 25, 44, 72, 71, 79, 111, - 122, 120, 130, 119, 79, 25, 84, 130, 130, 99, 77, 79, 80, 67, 67, 26, - 18, 2, 9, 9, 34, 20, 17, 18, 36, 28, 29, 29, 42, 61, 91, 126, - 175, 174, 124, 131, 144, 138, 135, 138, 136, 136, 134, 132, 132, 131, 130, 128, - 126, 120, 119, 106, 112, 102, 55, 24, 21, 16, 16, 17, 20, 24, 26, 45, - 38, 44, 71, 80, 87, 92, 95, 88, 84, 69, 65, 32, 29, 20, 10, 36, - 36, 37, 52, 55, 91, 93, 85, 85, 28, 103, 157, 209, 234, 220, 222, 213, - 163, 136, 111, 110, 104, 96, 95, 91, 49, 64, 55, 61, 59, 51, 46, 51, - 49, 52, 71, 75, 102, 182, 178, 115, 103, 114, 128, 139, 142, 147, 148, 146, - 146, 139, 120, 75, 26, 26, 26, 32, 24, 10, 9, 12, 6, 5, 4, 6, - 2, 1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 9, 20, 20, - 22, 22, 22, 28, 29, 37, 40, 46, 61, 26, 60, 79, 76, 59, 59, 69, - 67, 51, 53, 61, 26, 6, 13, 52, 56, 48, 42, 56, 60, 48, 44, 63, - 57, 12, 4, 30, 71, 71, 32, 21, 17, 14, 13, 20, 44, 32, 25, 37, - 30, 45, 44, 49, 53, 55, 53, 48, 22, 63, 67, 75, 69, 44, 20, 17, - 25, 17, 33, 36, 46, 29, 72, 45, 44, 48, 42, 56, 64, 59, 65, 51, - 20, 60, 67, 71, 67, 40, 34, 36, 20, 25, 25, 17, 22, 36, 34, 25, - 28, 25, 24, 21, 20, 21, 17, 10, 12, 13, 4, 2, 2, 1, 1, 1, - 1, 0, 0, 0, 2, 5, 1, 5, 2, 5, 9, 8, 14, 18, 22, 22, - 13, 2, 18, 14, 16, 13, 12, 12, 13, 12, 10, 10, 12, 0, 4, 4, - 4, 4, 2, 2, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 173, - 165, 163, 159, 158, 161, 154, 127, 138, 181, 232, 241, 241, 241, 240, 191, 127, - 114, 123, 128, 110, 102, 108, 126, 139, 132, 115, 55, 36, 33, 30, 33, 48, - 60, 52, 48, 45, 52, 68, 76, 93, 95, 97, 107, 128, 174, 159, 127, 122, - 136, 122, 71, 64, 65, 87, 100, 61, 65, 128, 143, 144, 138, 143, 144, 143, - 182, 154, 116, 110, 103, 97, 103, 114, 118, 127, 132, 135, 134, 139, 138, 131, - 116, 114, 60, 55, 52, 45, 44, 42, 46, 46, 45, 45, 55, 56, 81, 96, - 112, 124, 140, 143, 146, 153, 144, 143, 115, 69, 138, 144, 123, 112, 116, 122, - 110, 100, 99, 110, 37, 42, 46, 71, 71, 81, 120, 135, 146, 112, 88, 85, - 150, 153, 159, 144, 148, 138, 150, 142, 138, 140, 135, 69, 36, 96, 157, 151, - 159, 153, 131, 122, 134, 154, 126, 143, 128, 128, 107, 131, 147, 144, 128, 134, - 127, 143, 75, 45, 110, 157, 146, 144, 161, 159, 162, 165, 150, 139, 81, 41, - 120, 136, 135, 136, 135, 138, 144, 138, 136, 138, 135, 127, 127, 134, 134, 139, - 132, 130, 124, 87, 72, 73, 64, 93, 37, 53, 56, 87, 97, 96, 103, 118, - 110, 103, 93, 83, 51, 111, 142, 144, 143, 142, 144, 142, 138, 134, 122, 84, - 30, 102, 134, 135, 128, 130, 128, 128, 124, 95, 77, 69, 6, 75, 96, 97, - 91, 96, 104, 104, 103, 108, 108, 48, 57, 102, 123, 197, 182, 132, 122, 128, - 147, 146, 143, 147, 155, 157, 155, 155, 155, 147, 144, 122, 116, 106, 126, 111, - 93, 36, 24, 18, 17, 22, 25, 29, 40, 46, 51, 40, 61, 100, 103, 118, - 124, 127, 119, 116, 106, 100, 95, 81, 60, 8, 100, 108, 108, 106, 55, 55, - 52, 87, 83, 21, 116, 178, 216, 218, 225, 210, 148, 119, 110, 102, 92, 93, - 89, 95, 55, 38, 72, 69, 79, 83, 89, 79, 81, 79, 83, 88, 116, 103, - 191, 187, 153, 111, 110, 118, 139, 148, 144, 148, 151, 146, 135, 123, 71, 25, - 32, 32, 37, 22, 24, 65, 73, 72, 76, 71, 76, 67, 106, 92, 61, 64, - 115, 99, 118, 124, 123, 128, 126, 118, 131, 131, 127, 120, 99, 102, 119, 120, - 112, 111, 116, 112, 110, 83, 64, 37, 9, 68, 100, 91, 79, 76, 59, 45, - 44, 17, 26, 26, 29, 5, 4, 17, 4, 4, 1, 10, 0, 2, 1, 5, - 4, 1, 4, 1, 0, 0, 1, 1, 0, 0, 0, 2, 0, 6, 20, 17, - 22, 30, 46, 61, 38, 32, 53, 10, 30, 75, 87, 93, 89, 88, 92, 96, - 100, 67, 49, 24, 67, 79, 83, 92, 85, 77, 75, 69, 56, 56, 48, 63, - 48, 64, 72, 60, 67, 67, 79, 76, 79, 81, 51, 20, 72, 69, 52, 80, - 76, 72, 67, 57, 45, 38, 30, 21, 21, 8, 14, 33, 28, 45, 46, 48, - 34, 30, 25, 10, 13, 28, 79, 88, 69, 75, 80, 76, 68, 71, 48, 53, - 64, 71, 73, 84, 83, 76, 33, 10, 5, 4, 10, 4, 2, 9, 9, 5, - 6, 9, 8, 5, 5, 4, 2, 2, 9, 21, 25, 29, 20, 30, 45, 55, - 40, 25, 18, 4, 17, 69, 85, 71, 72, 83, 155, 158, 158, 161, 155, 154, - 132, 150, 179, 229, 237, 241, 241, 238, 183, 126, 116, 124, 132, 107, 104, 118, - 130, 146, 142, 131, 88, 40, 34, 32, 34, 48, 63, 60, 51, 60, 114, 115, - 112, 115, 115, 102, 107, 104, 112, 174, 181, 150, 120, 126, 115, 65, 61, 64, - 87, 93, 56, 110, 155, 166, 166, 159, 153, 146, 134, 194, 178, 134, 108, 97, - 110, 119, 132, 136, 139, 144, 146, 151, 148, 143, 134, 122, 102, 53, 51, 45, - 42, 46, 63, 68, 65, 71, 69, 75, 80, 136, 153, 158, 157, 154, 157, 150, - 138, 135, 120, 120, 51, 138, 136, 126, 122, 115, 126, 128, 126, 96, 118, 38, - 107, 147, 150, 157, 154, 159, 128, 158, 127, 159, 126, 116, 140, 143, 144, 148, - 139, 139, 140, 132, 148, 150, 83, 32, 126, 155, 158, 153, 154, 154, 148, 134, - 128, 146, 142, 95, 123, 144, 151, 151, 142, 148, 151, 139, 143, 77, 64, 130, - 159, 155, 134, 153, 150, 151, 143, 150, 159, 110, 42, 151, 161, 161, 115, 108, - 107, 108, 118, 119, 112, 139, 124, 87, 96, 114, 139, 120, 123, 123, 127, 136, - 123, 83, 100, 33, 76, 126, 138, 140, 138, 140, 135, 135, 134, 106, 85, 45, - 110, 142, 134, 131, 130, 128, 128, 128, 112, 126, 93, 30, 96, 132, 136, 131, - 124, 130, 131, 128, 123, 95, 69, 21, 122, 144, 142, 110, 106, 100, 123, 108, - 102, 107, 63, 56, 103, 120, 191, 202, 162, 119, 122, 143, 144, 158, 162, 171, - 175, 171, 174, 166, 159, 153, 118, 108, 126, 123, 112, 84, 29, 20, 17, 25, - 32, 34, 38, 49, 51, 59, 44, 83, 108, 124, 120, 116, 108, 112, 107, 114, - 115, 116, 96, 67, 8, 95, 106, 120, 114, 110, 103, 104, 89, 83, 21, 118, - 189, 218, 224, 217, 162, 123, 111, 97, 104, 87, 84, 100, 102, 45, 36, 63, - 52, 63, 60, 64, 67, 69, 59, 92, 126, 111, 115, 195, 193, 181, 112, 107, - 116, 139, 151, 151, 157, 155, 146, 136, 120, 56, 29, 21, 29, 37, 29, 44, - 93, 112, 99, 92, 89, 89, 89, 91, 91, 84, 87, 96, 120, 114, 115, 111, - 115, 96, 100, 122, 135, 107, 99, 103, 83, 99, 95, 99, 96, 96, 93, 93, - 96, 93, 42, 9, 67, 106, 99, 100, 83, 87, 80, 84, 61, 61, 46, 26, - 20, 104, 107, 83, 81, 83, 73, 68, 71, 60, 33, 9, 33, 106, 97, 76, - 80, 97, 96, 89, 75, 95, 80, 30, 5, 37, 73, 71, 34, 38, 42, 46, - 49, 37, 12, 57, 110, 103, 100, 87, 85, 73, 79, 65, 64, 53, 25, 73, - 87, 89, 80, 71, 68, 65, 63, 69, 77, 71, 61, 64, 75, 80, 81, 73, - 79, 88, 85, 75, 72, 52, 21, 71, 73, 71, 59, 61, 64, 68, 72, 71, - 60, 33, 36, 18, 55, 63, 55, 60, 48, 38, 16, 33, 37, 20, 13, 6, - 61, 79, 75, 67, 71, 67, 77, 61, 68, 60, 53, 52, 51, 67, 63, 56, - 59, 60, 57, 63, 55, 52, 42, 42, 71, 73, 84, 76, 87, 84, 76, 76, - 60, 67, 64, 68, 51, 53, 53, 64, 67, 38, 53, 40, 51, 32, 8, 56, - 87, 88, 63, 44, 29, 161, 161, 162, 155, 151, 138, 153, 151, 212, 233, 237, - 238, 238, 194, 130, 116, 127, 138, 115, 104, 131, 140, 148, 143, 139, 119, 61, - 34, 32, 36, 51, 64, 67, 52, 56, 115, 127, 128, 126, 123, 148, 148, 111, - 116, 116, 158, 186, 167, 124, 122, 108, 64, 59, 61, 87, 95, 67, 140, 170, - 158, 162, 150, 154, 155, 139, 198, 182, 167, 108, 97, 114, 126, 138, 144, 151, - 147, 151, 150, 153, 147, 128, 122, 73, 51, 45, 42, 64, 69, 76, 77, 76, - 87, 85, 73, 120, 165, 166, 159, 158, 143, 151, 135, 127, 136, 114, 119, 56, - 131, 143, 135, 120, 123, 123, 126, 132, 99, 119, 40, 114, 146, 143, 142, 162, - 130, 144, 153, 128, 142, 99, 132, 158, 155, 148, 148, 143, 146, 144, 147, 144, - 144, 75, 33, 139, 151, 151, 146, 153, 155, 144, 143, 144, 140, 127, 87, 118, - 148, 159, 148, 148, 150, 148, 138, 142, 75, 48, 123, 151, 158, 151, 147, 134, - 148, 135, 151, 140, 140, 49, 135, 130, 167, 155, 162, 161, 157, 158, 154, 148, - 131, 122, 81, 138, 150, 143, 148, 142, 142, 142, 130, 128, 107, 106, 38, 104, - 142, 138, 130, 126, 127, 119, 116, 127, 119, 87, 45, 106, 132, 136, 126, 132, - 127, 124, 127, 128, 119, 95, 37, 100, 112, 136, 122, 122, 126, 116, 132, 132, - 96, 76, 0, 120, 126, 135, 135, 142, 138, 127, 138, 110, 112, 68, 51, 104, - 126, 190, 214, 197, 132, 116, 132, 147, 155, 163, 177, 179, 178, 177, 179, 170, - 157, 119, 119, 135, 126, 114, 85, 26, 20, 20, 33, 44, 53, 52, 49, 56, - 55, 41, 95, 114, 122, 116, 104, 104, 103, 110, 102, 104, 110, 107, 67, 8, - 107, 110, 108, 104, 102, 104, 89, 61, 85, 29, 111, 193, 214, 226, 201, 124, - 108, 102, 106, 87, 85, 107, 107, 91, 46, 37, 40, 69, 65, 60, 57, 73, - 68, 55, 96, 124, 119, 114, 199, 205, 193, 111, 103, 115, 127, 142, 148, 153, - 159, 150, 135, 122, 61, 26, 18, 36, 49, 21, 56, 106, 92, 95, 95, 97, - 95, 102, 97, 80, 75, 79, 112, 131, 122, 111, 108, 100, 110, 104, 115, 118, - 116, 110, 77, 100, 115, 119, 119, 124, 120, 119, 106, 91, 57, 44, 12, 79, - 102, 99, 100, 99, 96, 79, 81, 77, 71, 49, 28, 73, 107, 95, 92, 92, - 89, 99, 93, 77, 80, 37, 6, 84, 104, 83, 76, 87, 91, 83, 84, 89, - 79, 75, 37, 6, 59, 64, 48, 32, 45, 28, 41, 53, 26, 12, 48, 110, - 91, 87, 68, 67, 65, 68, 69, 97, 52, 28, 65, 75, 65, 89, 97, 83, - 71, 77, 60, 67, 59, 37, 67, 83, 92, 91, 88, 102, 84, 89, 55, 81, - 55, 24, 68, 67, 71, 63, 49, 46, 51, 57, 52, 71, 42, 37, 5, 60, - 63, 63, 59, 34, 45, 33, 32, 34, 36, 13, 9, 77, 75, 46, 55, 49, - 56, 65, 71, 71, 61, 68, 29, 59, 52, 64, 56, 55, 55, 45, 41, 52, - 67, 22, 75, 84, 75, 75, 79, 69, 61, 69, 75, 72, 67, 30, 34, 60, - 84, 67, 68, 59, 45, 28, 56, 56, 40, 5, 64, 85, 64, 56, 28, 13, - 155, 153, 154, 163, 132, 147, 153, 175, 233, 233, 238, 240, 218, 150, 122, 123, - 136, 132, 106, 123, 147, 154, 150, 144, 135, 93, 41, 30, 30, 40, 52, 68, - 67, 30, 53, 122, 135, 150, 146, 140, 142, 140, 123, 115, 120, 138, 193, 182, - 132, 124, 100, 63, 57, 60, 87, 99, 83, 106, 167, 159, 159, 159, 157, 161, - 146, 204, 194, 179, 102, 99, 114, 134, 142, 153, 150, 159, 151, 148, 153, 140, - 127, 124, 53, 45, 42, 41, 69, 83, 81, 79, 87, 87, 81, 92, 148, 163, - 163, 158, 139, 146, 142, 139, 132, 131, 127, 114, 53, 128, 134, 139, 132, 131, - 126, 116, 116, 100, 115, 33, 124, 142, 161, 132, 139, 140, 132, 140, 143, 140, - 97, 127, 159, 154, 150, 151, 157, 151, 153, 144, 135, 135, 80, 40, 118, 155, - 144, 155, 142, 118, 146, 144, 140, 140, 130, 81, 126, 143, 158, 147, 158, 151, - 140, 143, 139, 75, 48, 122, 151, 148, 146, 143, 144, 134, 131, 140, 144, 151, - 55, 93, 157, 119, 147, 154, 142, 161, 154, 143, 151, 140, 107, 77, 140, 147, - 134, 127, 126, 122, 135, 139, 128, 124, 106, 45, 124, 138, 134, 136, 123, 112, - 114, 120, 127, 106, 83, 28, 111, 132, 127, 135, 127, 126, 130, 127, 127, 108, - 96, 49, 92, 119, 135, 131, 131, 116, 130, 124, 126, 92, 67, 0, 116, 131, - 132, 132, 138, 126, 146, 144, 143, 131, 72, 60, 106, 127, 190, 206, 197, 132, - 115, 128, 143, 147, 159, 177, 182, 183, 182, 174, 170, 151, 119, 132, 138, 130, - 122, 69, 25, 20, 24, 49, 55, 52, 49, 53, 61, 64, 48, 100, 122, 123, - 106, 111, 115, 112, 107, 106, 106, 107, 89, 68, 8, 106, 93, 114, 110, 108, - 103, 87, 64, 80, 24, 116, 187, 210, 222, 179, 118, 108, 99, 99, 87, 91, - 115, 107, 93, 45, 32, 33, 52, 64, 69, 59, 68, 68, 46, 91, 122, 108, - 120, 199, 198, 198, 110, 102, 110, 119, 134, 140, 155, 162, 154, 138, 115, 59, - 29, 18, 25, 51, 25, 57, 106, 108, 93, 91, 85, 85, 76, 85, 76, 68, - 24, 104, 127, 118, 106, 104, 103, 114, 118, 119, 104, 120, 107, 76, 106, 116, - 126, 118, 110, 102, 93, 102, 96, 97, 46, 12, 76, 83, 103, 89, 84, 72, - 80, 83, 88, 99, 52, 25, 91, 107, 79, 87, 75, 91, 95, 97, 87, 80, - 41, 6, 97, 103, 87, 79, 91, 102, 97, 96, 99, 87, 87, 38, 5, 64, - 55, 30, 33, 48, 26, 28, 40, 34, 9, 49, 93, 92, 67, 81, 83, 67, - 68, 71, 63, 65, 24, 59, 79, 69, 88, 72, 60, 67, 59, 71, 71, 63, - 41, 87, 75, 72, 67, 77, 85, 95, 77, 75, 69, 53, 25, 65, 65, 79, - 67, 55, 57, 53, 57, 60, 67, 60, 36, 28, 46, 71, 61, 41, 38, 57, - 32, 42, 26, 24, 13, 10, 38, 75, 71, 46, 49, 46, 45, 36, 46, 41, - 32, 26, 67, 59, 65, 48, 44, 41, 37, 40, 41, 65, 28, 76, 80, 76, - 59, 63, 52, 51, 57, 51, 48, 36, 33, 36, 61, 56, 51, 45, 36, 25, - 38, 38, 46, 44, 5, 28, 88, 57, 57, 14, 0, 171, 169, 165, 150, 135, - 150, 157, 208, 232, 241, 236, 229, 169, 128, 122, 134, 139, 122, 110, 144, 159, - 159, 151, 143, 124, 65, 33, 28, 34, 46, 65, 69, 67, 30, 108, 134, 134, - 146, 140, 144, 148, 143, 122, 118, 112, 132, 199, 193, 165, 123, 97, 61, 55, - 59, 81, 99, 73, 92, 169, 161, 158, 159, 157, 154, 142, 209, 199, 178, 102, - 103, 116, 128, 143, 151, 154, 154, 150, 151, 153, 138, 123, 123, 49, 41, 40, - 68, 79, 83, 87, 91, 87, 87, 80, 89, 154, 161, 162, 144, 143, 140, 146, - 139, 135, 127, 123, 123, 65, 139, 132, 124, 131, 126, 138, 111, 120, 97, 115, - 30, 122, 134, 142, 126, 143, 128, 148, 114, 140, 134, 89, 130, 158, 150, 153, - 153, 154, 157, 148, 147, 146, 134, 80, 33, 124, 148, 147, 155, 153, 150, 144, - 148, 135, 142, 127, 84, 123, 142, 143, 148, 158, 147, 135, 140, 132, 81, 46, - 127, 154, 157, 151, 143, 142, 140, 135, 135, 135, 151, 73, 60, 155, 162, 162, - 154, 154, 155, 148, 151, 159, 144, 119, 75, 136, 144, 138, 136, 143, 131, 127, - 126, 132, 114, 108, 44, 111, 140, 123, 126, 122, 116, 126, 116, 122, 110, 84, - 29, 104, 128, 127, 142, 124, 122, 120, 115, 111, 120, 97, 52, 95, 130, 134, - 138, 123, 126, 124, 128, 122, 96, 77, 10, 123, 124, 122, 139, 140, 128, 134, - 142, 146, 122, 65, 68, 107, 120, 163, 214, 202, 136, 111, 123, 143, 147, 159, - 173, 171, 174, 178, 179, 169, 132, 115, 134, 142, 131, 122, 51, 22, 20, 37, - 49, 56, 53, 55, 60, 73, 60, 55, 102, 123, 114, 112, 107, 108, 103, 108, - 111, 100, 104, 87, 63, 6, 88, 111, 107, 107, 104, 104, 77, 67, 85, 29, - 120, 199, 210, 216, 153, 118, 100, 107, 91, 81, 103, 108, 111, 93, 44, 32, - 34, 41, 65, 71, 72, 65, 75, 46, 88, 123, 118, 122, 199, 206, 202, 108, - 97, 106, 120, 126, 135, 154, 161, 155, 139, 110, 59, 32, 21, 29, 38, 29, - 52, 96, 99, 92, 87, 97, 87, 87, 88, 77, 65, 61, 122, 128, 122, 111, - 119, 112, 116, 116, 104, 103, 116, 99, 79, 108, 122, 119, 110, 103, 97, 97, - 103, 96, 95, 48, 13, 75, 99, 95, 81, 83, 84, 85, 79, 88, 73, 51, - 25, 55, 99, 76, 84, 87, 95, 87, 100, 91, 73, 44, 9, 55, 103, 79, - 88, 79, 88, 83, 81, 80, 76, 83, 36, 10, 60, 46, 38, 40, 51, 24, - 28, 30, 25, 10, 51, 97, 91, 76, 91, 99, 85, 68, 69, 71, 51, 28, - 56, 88, 69, 83, 71, 56, 64, 81, 68, 76, 65, 37, 87, 83, 80, 77, - 93, 89, 77, 51, 76, 71, 53, 26, 64, 61, 80, 87, 76, 71, 68, 72, - 61, 57, 41, 38, 28, 56, 72, 48, 46, 32, 48, 37, 55, 24, 20, 10, - 9, 40, 79, 73, 51, 42, 41, 42, 44, 42, 36, 34, 26, 64, 40, 59, - 57, 48, 44, 34, 36, 49, 42, 16, 57, 77, 69, 56, 48, 44, 45, 51, - 37, 56, 40, 22, 32, 65, 59, 63, 51, 46, 20, 42, 41, 42, 30, 6, - 29, 69, 57, 26, 1, 0, 171, 161, 163, 131, 146, 155, 179, 226, 234, 236, - 236, 193, 128, 124, 131, 139, 132, 108, 124, 155, 162, 157, 148, 138, 106, 42, - 29, 29, 38, 52, 57, 68, 71, 30, 124, 138, 138, 147, 146, 151, 150, 143, - 126, 124, 112, 120, 199, 197, 174, 123, 96, 61, 55, 57, 85, 96, 88, 81, - 165, 162, 159, 158, 155, 155, 136, 212, 201, 174, 106, 100, 114, 127, 139, 139, - 153, 148, 153, 153, 147, 131, 120, 123, 46, 38, 36, 69, 85, 77, 83, 97, - 95, 91, 85, 85, 154, 163, 158, 142, 136, 148, 131, 135, 143, 130, 120, 123, - 53, 134, 132, 136, 146, 142, 142, 118, 118, 95, 120, 40, 122, 138, 158, 143, - 138, 142, 123, 132, 139, 139, 92, 131, 154, 147, 154, 153, 157, 146, 140, 143, - 140, 136, 87, 34, 119, 147, 143, 155, 159, 154, 146, 144, 139, 139, 123, 76, - 124, 136, 135, 146, 153, 157, 154, 153, 131, 76, 48, 116, 154, 155, 154, 142, - 139, 140, 151, 130, 142, 148, 118, 61, 140, 158, 143, 142, 131, 150, 158, 159, - 138, 132, 108, 80, 139, 144, 124, 132, 131, 127, 126, 143, 134, 106, 108, 51, - 107, 123, 132, 123, 122, 114, 114, 128, 126, 107, 87, 40, 115, 131, 131, 147, - 131, 132, 118, 124, 135, 123, 110, 55, 97, 132, 123, 119, 123, 122, 114, 118, - 122, 97, 76, 10, 115, 126, 120, 128, 131, 130, 116, 130, 126, 103, 80, 67, - 95, 127, 155, 213, 213, 158, 107, 112, 140, 148, 162, 173, 178, 183, 178, 169, - 163, 123, 128, 143, 138, 132, 119, 32, 22, 17, 34, 53, 57, 55, 61, 68, - 68, 67, 56, 102, 120, 119, 114, 116, 104, 116, 108, 112, 100, 106, 97, 65, - 8, 97, 92, 102, 132, 103, 103, 100, 69, 80, 26, 114, 190, 214, 214, 142, - 106, 96, 97, 84, 89, 108, 108, 112, 106, 38, 29, 28, 37, 63, 72, 68, - 57, 73, 49, 93, 130, 112, 127, 204, 208, 201, 107, 100, 107, 111, 123, 138, - 151, 162, 158, 142, 123, 56, 30, 30, 26, 42, 33, 52, 95, 96, 91, 83, - 95, 68, 80, 102, 69, 69, 64, 123, 122, 108, 99, 108, 112, 120, 99, 95, - 103, 118, 91, 73, 104, 126, 111, 97, 103, 89, 95, 88, 103, 107, 49, 14, - 72, 93, 100, 79, 81, 84, 73, 80, 71, 76, 52, 25, 71, 95, 68, 81, - 84, 87, 100, 99, 81, 81, 45, 10, 53, 99, 79, 77, 77, 79, 75, 76, - 95, 79, 76, 40, 9, 72, 51, 34, 41, 49, 26, 24, 25, 20, 9, 65, - 100, 87, 95, 103, 104, 91, 76, 75, 69, 51, 29, 55, 93, 77, 81, 72, - 55, 56, 67, 57, 73, 68, 26, 91, 76, 80, 72, 83, 73, 57, 51, 80, - 65, 53, 29, 65, 63, 77, 57, 64, 67, 63, 65, 65, 53, 44, 37, 12, - 46, 72, 67, 30, 29, 46, 30, 44, 46, 36, 12, 9, 34, 77, 69, 41, - 48, 34, 38, 37, 40, 30, 30, 24, 59, 72, 46, 46, 44, 55, 42, 34, - 44, 52, 21, 59, 67, 61, 52, 33, 32, 42, 59, 45, 42, 25, 28, 42, - 60, 69, 40, 29, 34, 29, 40, 28, 49, 32, 9, 38, 60, 44, 30, 0, - 0, 183, 163, 148, 131, 150, 155, 206, 229, 236, 232, 222, 159, 124, 123, 136, - 142, 132, 112, 143, 161, 161, 155, 148, 135, 84, 34, 26, 30, 46, 55, 72, - 67, 71, 34, 130, 138, 146, 143, 148, 154, 148, 140, 127, 128, 116, 126, 199, - 199, 185, 120, 100, 64, 55, 57, 89, 99, 89, 67, 158, 165, 157, 166, 158, - 159, 147, 213, 194, 177, 108, 103, 114, 127, 135, 139, 147, 151, 153, 153, 136, - 128, 116, 119, 45, 36, 36, 72, 91, 95, 85, 84, 92, 93, 79, 103, 154, - 162, 147, 143, 139, 144, 144, 147, 136, 138, 115, 120, 56, 136, 136, 130, 131, - 136, 138, 111, 116, 95, 110, 38, 123, 142, 143, 127, 138, 131, 136, 132, 122, - 134, 89, 130, 153, 157, 154, 157, 147, 144, 146, 143, 138, 132, 83, 33, 116, - 142, 143, 139, 147, 148, 143, 142, 139, 135, 120, 67, 114, 139, 154, 148, 155, - 147, 143, 131, 143, 72, 51, 106, 153, 150, 150, 139, 144, 148, 140, 130, 140, - 144, 114, 48, 111, 157, 161, 132, 143, 157, 146, 139, 144, 131, 95, 85, 138, - 142, 124, 130, 139, 130, 130, 116, 130, 130, 107, 55, 112, 132, 128, 131, 130, - 112, 111, 111, 123, 116, 88, 44, 115, 136, 122, 126, 134, 120, 130, 131, 132, - 122, 106, 56, 99, 116, 130, 120, 120, 119, 126, 122, 115, 99, 79, 0, 127, - 127, 116, 99, 132, 127, 136, 134, 127, 110, 77, 59, 89, 130, 120, 214, 217, - 183, 110, 111, 135, 146, 158, 170, 174, 174, 173, 175, 153, 124, 134, 148, 139, - 131, 119, 29, 22, 20, 33, 59, 65, 63, 71, 83, 71, 63, 57, 91, 119, - 118, 120, 104, 114, 108, 107, 112, 97, 103, 100, 68, 9, 96, 99, 102, 103, - 130, 115, 106, 69, 79, 21, 103, 181, 208, 233, 153, 106, 91, 97, 83, 103, - 110, 110, 115, 91, 37, 32, 25, 38, 57, 71, 73, 60, 72, 45, 99, 120, - 116, 136, 210, 216, 199, 102, 95, 106, 118, 124, 140, 150, 163, 158, 142, 132, - 57, 36, 18, 30, 46, 36, 48, 95, 95, 92, 96, 87, 81, 87, 76, 85, - 57, 53, 110, 118, 116, 110, 114, 96, 92, 106, 100, 110, 112, 77, 84, 111, - 124, 106, 95, 97, 97, 89, 103, 96, 93, 51, 17, 77, 88, 92, 73, 88, - 75, 83, 79, 76, 65, 53, 24, 75, 104, 69, 76, 87, 89, 91, 92, 71, - 81, 46, 8, 57, 97, 83, 87, 83, 77, 83, 99, 71, 72, 73, 37, 9, - 59, 44, 36, 45, 46, 41, 22, 18, 14, 10, 57, 96, 77, 96, 93, 93, - 89, 99, 95, 72, 48, 28, 61, 84, 59, 85, 67, 56, 59, 67, 67, 76, - 64, 25, 83, 84, 92, 73, 76, 71, 59, 49, 48, 60, 52, 28, 46, 59, - 75, 71, 67, 67, 59, 67, 64, 67, 42, 37, 8, 45, 81, 63, 51, 26, - 42, 37, 41, 22, 28, 10, 9, 36, 76, 71, 53, 53, 40, 38, 37, 36, - 34, 46, 22, 49, 55, 30, 37, 37, 32, 40, 37, 38, 51, 29, 68, 77, - 75, 61, 26, 52, 48, 49, 38, 46, 34, 25, 46, 55, 36, 57, 33, 21, - 30, 29, 29, 24, 14, 8, 38, 55, 49, 21, 0, 0, 157, 170, 150, 142, - 151, 170, 221, 233, 229, 232, 182, 135, 124, 134, 139, 142, 122, 126, 158, 163, - 161, 154, 144, 127, 52, 30, 26, 33, 48, 68, 72, 72, 72, 33, 138, 136, - 144, 142, 151, 146, 144, 142, 131, 126, 111, 146, 199, 197, 191, 124, 97, 64, - 56, 57, 87, 95, 85, 64, 161, 158, 162, 162, 161, 157, 146, 217, 191, 189, - 110, 102, 112, 123, 132, 140, 144, 147, 153, 146, 135, 128, 114, 116, 42, 34, - 33, 71, 96, 91, 93, 91, 99, 92, 80, 107, 161, 162, 148, 143, 150, 154, - 142, 144, 147, 134, 116, 116, 56, 132, 131, 132, 135, 115, 118, 119, 111, 96, - 107, 36, 126, 148, 150, 139, 139, 144, 116, 140, 134, 135, 83, 139, 155, 155, - 148, 146, 150, 146, 147, 146, 140, 99, 95, 38, 112, 135, 146, 144, 140, 146, - 143, 139, 140, 136, 123, 60, 128, 135, 150, 150, 151, 148, 144, 150, 140, 71, - 51, 99, 139, 150, 148, 127, 146, 144, 127, 139, 139, 128, 120, 64, 108, 154, - 162, 158, 128, 144, 123, 139, 134, 124, 69, 100, 135, 140, 135, 131, 119, 115, - 120, 114, 116, 127, 110, 60, 89, 122, 132, 111, 100, 111, 120, 112, 114, 100, - 89, 22, 112, 127, 126, 122, 120, 112, 120, 128, 123, 118, 107, 63, 68, 112, - 128, 130, 132, 130, 130, 128, 114, 92, 71, 0, 119, 122, 115, 118, 111, 136, - 134, 131, 103, 134, 83, 73, 61, 127, 118, 220, 222, 216, 111, 111, 134, 151, - 154, 158, 175, 177, 174, 174, 142, 128, 150, 151, 139, 130, 119, 29, 22, 17, - 38, 64, 60, 68, 72, 81, 76, 72, 63, 83, 115, 116, 115, 114, 115, 115, - 112, 108, 106, 103, 99, 63, 10, 93, 89, 87, 102, 138, 106, 100, 69, 76, - 16, 84, 136, 189, 234, 159, 106, 100, 100, 102, 110, 106, 112, 106, 63, 36, - 30, 26, 38, 57, 72, 72, 68, 71, 36, 93, 116, 112, 131, 209, 208, 205, - 104, 96, 108, 120, 131, 140, 150, 161, 161, 151, 139, 59, 33, 17, 25, 42, - 33, 37, 89, 88, 96, 91, 89, 92, 84, 75, 80, 56, 16, 107, 120, 102, - 92, 99, 104, 106, 107, 108, 112, 114, 77, 88, 116, 107, 88, 111, 91, 88, - 91, 92, 96, 91, 55, 17, 69, 93, 97, 80, 75, 77, 79, 75, 85, 85, - 57, 21, 91, 97, 75, 79, 87, 85, 87, 88, 72, 69, 51, 5, 61, 89, - 84, 81, 80, 97, 96, 73, 69, 68, 79, 36, 8, 71, 48, 33, 30, 29, - 46, 18, 20, 16, 10, 51, 89, 87, 89, 88, 102, 84, 80, 76, 69, 56, - 26, 57, 87, 76, 79, 59, 56, 65, 68, 60, 80, 65, 28, 81, 76, 93, - 65, 65, 88, 59, 49, 56, 48, 53, 29, 37, 65, 55, 67, 88, 77, 63, - 63, 71, 63, 44, 37, 32, 46, 81, 49, 30, 38, 40, 25, 13, 14, 14, - 14, 10, 30, 49, 67, 49, 44, 48, 42, 40, 37, 36, 26, 20, 37, 36, - 34, 33, 36, 33, 44, 37, 41, 26, 25, 72, 75, 72, 68, 33, 53, 36, - 34, 56, 28, 36, 29, 51, 37, 26, 28, 18, 29, 13, 14, 9, 21, 12, - 9, 25, 55, 14, 14, 2, 0, 167, 155, 128, 146, 154, 185, 218, 233, 228, - 218, 148, 136, 132, 136, 142, 140, 114, 144, 166, 165, 161, 153, 143, 120, 44, - 29, 26, 37, 49, 55, 55, 73, 69, 30, 135, 135, 150, 146, 144, 143, 144, - 135, 128, 132, 107, 155, 198, 201, 185, 122, 95, 64, 56, 60, 88, 102, 96, - 76, 136, 171, 158, 158, 161, 155, 144, 221, 193, 198, 111, 103, 112, 123, 132, - 143, 148, 150, 150, 132, 131, 130, 118, 122, 40, 32, 32, 76, 93, 87, 92, - 87, 103, 93, 76, 114, 154, 158, 146, 115, 116, 132, 140, 126, 123, 127, 123, - 123, 65, 144, 136, 130, 120, 120, 118, 122, 110, 93, 104, 29, 124, 135, 148, - 127, 142, 143, 135, 143, 143, 130, 73, 128, 155, 161, 158, 158, 150, 142, 132, - 140, 112, 100, 91, 41, 99, 124, 128, 107, 120, 138, 132, 112, 122, 130, 116, - 61, 119, 128, 150, 153, 132, 124, 122, 118, 102, 85, 44, 95, 146, 151, 148, - 146, 134, 131, 128, 136, 127, 134, 131, 71, 91, 151, 159, 146, 122, 151, 144, - 134, 127, 118, 69, 83, 132, 139, 132, 126, 115, 118, 112, 114, 112, 120, 110, - 59, 81, 100, 100, 100, 103, 100, 106, 104, 114, 114, 87, 25, 111, 128, 128, - 122, 123, 120, 115, 118, 111, 110, 107, 68, 81, 106, 128, 130, 138, 128, 120, - 127, 91, 96, 83, 8, 116, 120, 112, 119, 100, 122, 127, 130, 119, 124, 69, - 69, 52, 124, 123, 222, 228, 220, 112, 108, 134, 148, 153, 157, 169, 174, 171, - 162, 130, 142, 148, 150, 142, 136, 122, 26, 21, 18, 38, 63, 65, 67, 71, - 79, 79, 75, 64, 72, 110, 118, 120, 108, 112, 114, 107, 107, 103, 96, 83, - 61, 10, 84, 92, 103, 100, 100, 95, 84, 79, 80, 17, 65, 111, 155, 150, - 112, 99, 89, 76, 93, 92, 97, 92, 60, 37, 33, 29, 28, 36, 60, 69, - 72, 67, 71, 37, 97, 115, 104, 103, 202, 217, 213, 104, 95, 108, 122, 131, - 142, 150, 165, 159, 139, 130, 56, 34, 18, 24, 42, 37, 33, 68, 91, 88, - 92, 88, 89, 87, 79, 83, 55, 38, 119, 115, 95, 103, 115, 116, 114, 116, - 112, 116, 108, 73, 95, 123, 102, 103, 103, 92, 93, 102, 95, 96, 87, 55, - 17, 76, 91, 95, 77, 72, 72, 71, 83, 87, 77, 56, 25, 61, 92, 72, - 65, 69, 72, 72, 68, 73, 77, 55, 13, 61, 59, 100, 95, 97, 99, 100, - 65, 75, 72, 75, 44, 14, 60, 37, 32, 25, 36, 30, 40, 21, 20, 10, - 46, 88, 84, 85, 100, 76, 79, 75, 65, 71, 51, 30, 59, 85, 65, 61, - 64, 85, 67, 83, 73, 67, 60, 32, 73, 76, 73, 75, 77, 71, 68, 64, - 52, 63, 57, 36, 34, 51, 63, 56, 44, 40, 40, 52, 46, 44, 42, 37, - 33, 65, 81, 51, 24, 6, 8, 20, 18, 8, 9, 17, 16, 21, 36, 42, - 41, 34, 33, 32, 30, 32, 34, 33, 29, 37, 36, 49, 37, 40, 30, 32, - 34, 34, 29, 33, 45, 67, 79, 53, 34, 30, 29, 32, 26, 22, 22, 26, - 29, 26, 26, 29, 25, 17, 38, 34, 38, 33, 20, 28, 30, 38, 38, 30, - 18, 12, 157, 158, 116, 142, 157, 189, 222, 228, 229, 169, 140, 132, 135, 140, - 146, 138, 119, 158, 169, 166, 159, 151, 139, 107, 38, 28, 25, 36, 48, 69, - 73, 76, 73, 36, 138, 142, 143, 148, 143, 138, 134, 136, 130, 124, 115, 165, - 195, 198, 182, 123, 91, 64, 57, 63, 89, 102, 97, 72, 127, 169, 163, 144, - 161, 153, 140, 221, 199, 210, 111, 104, 112, 127, 140, 139, 143, 142, 134, 123, - 130, 128, 119, 122, 36, 30, 29, 79, 87, 83, 87, 87, 76, 110, 103, 111, - 122, 130, 122, 122, 126, 122, 120, 127, 140, 134, 122, 116, 57, 135, 134, 115, - 110, 114, 116, 111, 103, 104, 114, 45, 126, 142, 143, 132, 127, 124, 112, 130, - 126, 123, 83, 111, 135, 148, 118, 122, 114, 114, 110, 95, 79, 67, 96, 84, - 93, 93, 95, 97, 85, 87, 88, 88, 89, 81, 73, 55, 93, 93, 97, 91, - 77, 79, 84, 85, 73, 72, 88, 87, 126, 138, 132, 112, 128, 132, 136, 120, - 118, 136, 128, 118, 84, 96, 148, 139, 110, 130, 131, 131, 128, 107, 72, 76, - 119, 124, 108, 108, 111, 122, 123, 110, 107, 108, 104, 102, 92, 107, 108, 108, - 95, 104, 88, 107, 100, 110, 91, 38, 119, 112, 112, 112, 112, 111, 110, 112, - 107, 108, 89, 104, 61, 72, 76, 83, 79, 83, 83, 84, 83, 93, 77, 5, - 51, 124, 119, 68, 91, 110, 115, 107, 99, 112, 104, 83, 59, 81, 103, 213, - 229, 220, 107, 104, 128, 143, 148, 147, 154, 167, 169, 161, 135, 153, 155, 154, - 144, 136, 122, 25, 20, 20, 34, 59, 65, 71, 73, 71, 75, 80, 79, 63, - 73, 95, 103, 102, 100, 99, 102, 103, 103, 97, 96, 61, 12, 80, 93, 96, - 85, 88, 76, 77, 77, 77, 32, 49, 68, 87, 108, 79, 48, 41, 30, 29, - 32, 30, 30, 29, 33, 30, 25, 25, 32, 63, 65, 65, 55, 71, 40, 91, - 103, 119, 102, 189, 214, 212, 102, 96, 112, 124, 136, 140, 153, 165, 159, 140, - 128, 51, 36, 37, 22, 44, 42, 34, 42, 64, 72, 71, 79, 76, 85, 76, - 75, 65, 52, 118, 107, 111, 110, 103, 103, 97, 100, 106, 102, 85, 72, 83, - 103, 112, 107, 103, 107, 102, 96, 75, 67, 69, 53, 20, 64, 75, 85, 95, - 102, 85, 92, 83, 72, 53, 59, 24, 64, 84, 89, 80, 79, 77, 75, 65, - 71, 65, 56, 12, 51, 41, 44, 55, 64, 67, 49, 53, 65, 42, 49, 41, - 14, 60, 37, 42, 40, 40, 30, 28, 28, 20, 16, 45, 48, 45, 48, 38, - 57, 68, 71, 71, 61, 46, 36, 36, 67, 59, 68, 55, 61, 60, 65, 59, - 53, 61, 17, 60, 72, 69, 53, 59, 61, 61, 53, 53, 56, 52, 44, 49, - 51, 48, 44, 44, 44, 42, 48, 42, 40, 38, 37, 6, 60, 5, 28, 4, - 25, 6, 9, 24, 22, 9, 13, 18, 20, 20, 20, 21, 21, 21, 22, 24, - 24, 22, 28, 21, 26, 29, 26, 32, 28, 24, 24, 26, 28, 28, 25, 37, - 49, 32, 46, 28, 29, 65, 71, 65, 34, 55, 52, 26, 25, 21, 22, 26, - 24, 25, 20, 17, 14, 16, 20, 41, 18, 17, 56, 60, 71, 104, 106, 111, - 146, 150, 201, 230, 179, 171, 151, 124, 148, 143, 140, 143, 132, 131, 165, 169, - 165, 158, 150, 134, 93, 33, 26, 26, 40, 52, 71, 76, 72, 72, 21, 134, - 136, 136, 136, 108, 119, 126, 118, 132, 130, 116, 175, 202, 195, 182, 119, 89, - 65, 59, 63, 92, 97, 108, 97, 95, 132, 161, 148, 147, 144, 140, 221, 210, - 214, 112, 104, 110, 126, 126, 126, 127, 126, 131, 134, 132, 131, 124, 123, 34, - 29, 30, 69, 76, 81, 89, 91, 87, 96, 91, 97, 110, 110, 99, 106, 107, - 110, 112, 112, 115, 120, 118, 118, 112, 119, 115, 112, 111, 108, 106, 104, 97, - 106, 93, 51, 119, 147, 120, 112, 106, 107, 110, 104, 102, 103, 87, 102, 103, - 99, 99, 93, 89, 84, 85, 81, 77, 65, 53, 32, 33, 30, 30, 29, 26, - 25, 25, 22, 25, 21, 21, 22, 22, 29, 34, 33, 29, 32, 42, 61, 56, - 60, 57, 76, 107, 102, 122, 130, 118, 108, 122, 124, 123, 120, 120, 106, 95, - 107, 96, 91, 77, 64, 63, 63, 73, 63, 51, 69, 73, 81, 80, 79, 107, - 110, 108, 88, 85, 69, 64, 75, 83, 95, 97, 96, 79, 69, 72, 92, 100, - 99, 88, 37, 69, 77, 68, 79, 79, 80, 80, 84, 84, 87, 89, 89, 87, - 93, 67, 67, 57, 40, 29, 26, 36, 42, 33, 0, 26, 26, 38, 34, 40, - 44, 52, 55, 65, 77, 104, 88, 79, 73, 114, 212, 230, 220, 106, 103, 110, - 119, 135, 146, 157, 154, 159, 154, 138, 155, 155, 153, 143, 131, 119, 24, 20, - 18, 26, 36, 52, 51, 60, 65, 68, 71, 67, 67, 83, 85, 88, 85, 88, - 87, 89, 88, 93, 93, 87, 63, 16, 88, 92, 72, 63, 63, 57, 48, 68, - 64, 36, 32, 33, 53, 41, 37, 32, 34, 28, 29, 37, 36, 28, 28, 28, - 29, 38, 40, 40, 41, 44, 44, 45, 71, 36, 53, 56, 68, 104, 178, 217, - 208, 104, 100, 111, 120, 134, 144, 153, 167, 158, 139, 126, 52, 40, 16, 30, - 32, 36, 34, 41, 40, 41, 38, 40, 41, 44, 41, 40, 51, 34, 48, 91, - 91, 79, 77, 87, 89, 80, 77, 80, 77, 73, 77, 76, 77, 79, 85, 73, - 75, 64, 57, 46, 56, 51, 52, 56, 53, 32, 59, 59, 46, 63, 46, 41, - 60, 52, 52, 55, 56, 53, 51, 51, 45, 46, 41, 55, 38, 34, 6, 16, - 14, 24, 24, 21, 22, 29, 26, 28, 36, 51, 33, 22, 33, 32, 24, 26, - 29, 29, 28, 48, 33, 37, 29, 34, 40, 37, 33, 33, 41, 48, 45, 42, - 42, 45, 42, 44, 45, 46, 44, 44, 42, 44, 44, 42, 37, 18, 29, 45, - 32, 33, 33, 45, 32, 33, 34, 40, 38, 32, 30, 37, 34, 33, 32, 30, - 30, 30, 30, 29, 28, 26, 2, 37, 34, 34, 32, 46, 42, 41, 42, 46, - 48, 51, 51, 59, 64, 68, 72, 83, 107, 128, 150, 163, 171, 228, 226, 222, - 209, 202, 205, 199, 204, 191, 187, 178, 162, 80, 36, 32, 29, 29, 22, 73, - 65, 155, 185, 165, 161, 159, 100, 83, 83, 61, 51, 48, 57, 87, 111, 144, - 162, 154, 116, 76, 45, 16, 9, 9, 142, 139, 140, 161, 159, 205, 140, 147, - 130, 124, 127, 135, 132, 143, 148, 140, 139, 169, 170, 162, 154, 140, 128, 55, - 29, 25, 30, 45, 56, 40, 67, 67, 55, 29, 77, 95, 88, 91, 91, 93, - 93, 99, 140, 119, 91, 166, 193, 198, 182, 118, 83, 63, 59, 68, 91, 91, - 95, 96, 102, 108, 106, 112, 114, 150, 118, 225, 218, 218, 111, 102, 108, 123, - 116, 116, 115, 116, 119, 131, 131, 134, 124, 120, 29, 24, 25, 42, 38, 42, - 45, 48, 38, 40, 46, 53, 60, 77, 73, 80, 84, 85, 83, 89, 93, 97, - 102, 96, 87, 100, 106, 99, 104, 110, 116, 146, 132, 92, 99, 110, 108, 95, - 92, 87, 80, 79, 72, 72, 63, 56, 56, 57, 49, 64, 59, 57, 56, 63, - 56, 61, 56, 89, 112, 146, 150, 144, 155, 147, 153, 146, 158, 157, 136, 110, - 111, 107, 116, 136, 136, 120, 110, 93, 73, 60, 51, 42, 29, 29, 25, 25, - 21, 21, 22, 24, 20, 24, 26, 26, 25, 24, 29, 37, 107, 114, 120, 126, - 132, 128, 96, 106, 57, 134, 130, 143, 116, 68, 64, 84, 60, 63, 111, 118, - 124, 114, 115, 123, 128, 123, 112, 103, 92, 84, 60, 59, 84, 40, 22, 21, - 21, 22, 16, 16, 17, 20, 13, 14, 16, 16, 16, 18, 52, 60, 91, 107, - 103, 106, 97, 65, 61, 0, 84, 124, 114, 80, 115, 81, 92, 89, 68, 57, - 55, 63, 60, 63, 106, 201, 216, 208, 95, 92, 103, 104, 99, 112, 130, 147, - 154, 159, 132, 148, 158, 154, 140, 134, 118, 20, 17, 17, 14, 14, 14, 16, - 16, 14, 17, 28, 25, 17, 21, 42, 59, 41, 44, 25, 30, 28, 49, 33, - 71, 24, 16, 92, 48, 38, 37, 37, 33, 40, 32, 26, 29, 26, 28, 29, - 28, 34, 30, 24, 24, 26, 25, 26, 28, 26, 28, 26, 28, 30, 32, 36, - 46, 53, 56, 73, 34, 83, 104, 104, 103, 177, 202, 193, 107, 100, 112, 124, - 132, 142, 155, 166, 159, 136, 111, 46, 42, 14, 24, 17, 22, 6, 6, 6, - 4, 5, 5, 4, 4, 2, 2, 2, 2, 4, 5, 5, 5, 8, 9, 9, - 10, 13, 14, 16, 16, 21, 21, 26, 28, 29, 33, 36, 36, 45, 68, 73, - 64, 57, 63, 49, 49, 52, 48, 44, 48, 49, 55, 71, 76, 85, 77, 72, - 69, 67, 71, 76, 68, 63, 49, 52, 56, 26, 38, 88, 96, 69, 60, 65, - 40, 29, 22, 24, 20, 24, 18, 25, 37, 36, 29, 34, 34, 30, 25, 33, - 38, 42, 55, 46, 48, 42, 45, 40, 36, 28, 24, 21, 22, 18, 20, 18, - 18, 17, 20, 18, 20, 17, 21, 21, 51, 20, 16, 14, 14, 12, 10, 10, - 9, 8, 6, 5, 4, 5, 4, 1, 1, 0, 18, 1, 0, 0, 1, 1, - 8, 44, 40, 56, 60, 85, 108, 146, 150, 165, 174, 165, 151, 140, 132, 120, - 122, 131, 118, 108, 118, 124, 139, 155, 165, 177, 186, 185, 182, 178, 179, 175, - 174, 169, 159, 147, 150, 139, 28, 22, 18, 72, 40, 132, 189, 194, 197, 194, - 191, 198, 190, 187, 195, 201, 190, 197, 197, 204, 201, 189, 197, 195, 138, 59, - 51, 13, 10, 173, 173, 178, 170, 199, 169, 173, 163, 140, 151, 103, 103, 108, - 111, 111, 132, 140, 167, 167, 163, 150, 139, 124, 52, 29, 26, 41, 46, 63, - 64, 73, 60, 67, 67, 71, 87, 96, 99, 112, 119, 130, 120, 110, 135, 103, - 161, 193, 197, 147, 120, 83, 64, 59, 81, 87, 85, 76, 81, 93, 99, 99, - 110, 130, 147, 147, 221, 218, 218, 110, 100, 108, 115, 112, 122, 128, 131, 132, - 130, 132, 140, 126, 126, 33, 26, 26, 41, 55, 75, 77, 84, 99, 175, 185, - 193, 198, 198, 193, 201, 208, 210, 205, 202, 195, 191, 197, 197, 194, 189, 190, - 185, 182, 178, 183, 178, 183, 142, 120, 80, 88, 91, 119, 157, 178, 194, 191, - 182, 177, 169, 167, 174, 167, 161, 142, 134, 140, 143, 136, 148, 161, 130, 163, - 178, 190, 195, 199, 198, 193, 193, 189, 169, 148, 130, 150, 147, 140, 151, 150, - 155, 146, 154, 140, 139, 124, 97, 75, 45, 112, 135, 128, 124, 124, 130, 128, - 135, 130, 130, 122, 120, 122, 120, 116, 135, 134, 134, 140, 132, 115, 115, 53, - 138, 151, 122, 119, 150, 148, 144, 132, 116, 140, 163, 174, 179, 171, 175, 175, - 171, 165, 154, 131, 118, 112, 92, 85, 38, 52, 131, 140, 116, 119, 110, 132, - 118, 122, 115, 110, 103, 112, 128, 120, 112, 110, 122, 106, 108, 122, 93, 65, - 2, 110, 128, 136, 142, 104, 138, 135, 115, 119, 96, 80, 77, 99, 104, 108, - 220, 229, 222, 107, 103, 114, 111, 111, 111, 114, 114, 119, 118, 139, 157, 159, - 151, 139, 130, 111, 22, 20, 18, 37, 48, 48, 53, 51, 52, 51, 59, 51, - 30, 56, 107, 104, 89, 93, 95, 61, 38, 36, 40, 42, 46, 33, 61, 80, - 88, 88, 95, 103, 100, 87, 79, 87, 102, 110, 97, 89, 81, 83, 73, 75, - 44, 44, 40, 34, 37, 45, 55, 53, 53, 59, 73, 77, 72, 76, 77, 32, - 103, 103, 111, 108, 187, 213, 179, 106, 102, 111, 126, 134, 146, 154, 169, 161, - 159, 130, 55, 44, 12, 12, 21, 22, 41, 83, 87, 91, 92, 92, 99, 97, - 96, 93, 57, 36, 84, 106, 118, 111, 108, 111, 119, 115, 108, 104, 108, 104, - 116, 134, 123, 122, 119, 103, 95, 99, 110, 169, 179, 190, 175, 154, 115, 81, - 72, 71, 77, 87, 124, 143, 162, 146, 150, 144, 136, 144, 123, 120, 115, 110, - 77, 57, 55, 44, 20, 85, 102, 124, 127, 102, 106, 79, 72, 76, 80, 67, - 64, 85, 134, 144, 154, 155, 155, 157, 157, 150, 157, 165, 181, 187, 185, 170, - 155, 110, 91, 51, 49, 44, 44, 32, 12, 32, 77, 92, 68, 77, 75, 69, - 64, 52, 41, 18, 34, 83, 95, 84, 84, 97, 96, 81, 110, 110, 110, 80, - 85, 120, 128, 157, 157, 153, 158, 147, 140, 132, 84, 48, 45, 67, 120, 158, - 170, 183, 194, 193, 193, 198, 201, 190, 179, 189, 175, 161, 159, 161, 148, 142, - 143, 143, 138, 140, 135, 148, 147, 153, 179, 179, 162, 150, 159, 146, 139, 134, - 150, 136, 114, 119, 102, 53, 167, 212, 202, 220, 179, 218, 174, 214, 204, 224, - 206, 212, 195, 205, 202, 201, 195, 202, 198, 147, 67, 68, 63, 64, 182, 189, - 171, 183, 210, 197, 238, 198, 135, 104, 108, 124, 128, 136, 123, 132, 148, 170, - 167, 153, 144, 139, 126, 49, 29, 26, 67, 65, 83, 97, 106, 110, 108, 132, - 147, 154, 157, 162, 162, 165, 163, 166, 144, 135, 91, 127, 169, 195, 136, 108, - 72, 68, 67, 84, 107, 107, 103, 96, 91, 134, 155, 155, 157, 153, 142, 226, - 221, 220, 108, 100, 110, 116, 131, 136, 135, 136, 135, 134, 130, 138, 124, 124, - 33, 25, 26, 57, 80, 95, 151, 110, 170, 191, 201, 210, 208, 210, 212, 220, - 222, 222, 222, 230, 232, 232, 233, 234, 234, 230, 236, 225, 233, 237, 237, 229, - 225, 225, 220, 224, 224, 216, 216, 218, 216, 221, 216, 214, 205, 204, 201, 204, - 199, 195, 187, 174, 174, 134, 132, 157, 174, 181, 193, 202, 210, 212, 209, 213, - 210, 210, 208, 204, 199, 186, 151, 139, 130, 122, 139, 139, 143, 148, 148, 148, - 146, 118, 92, 46, 142, 134, 147, 140, 143, 142, 130, 128, 130, 136, 135, 115, - 93, 140, 151, 157, 153, 147, 138, 130, 136, 112, 56, 147, 148, 146, 124, 154, - 120, 131, 147, 159, 193, 213, 222, 221, 220, 218, 214, 210, 206, 195, 193, 181, - 171, 116, 85, 46, 131, 139, 123, 120, 130, 134, 138, 118, 115, 130, 132, 123, - 99, 126, 126, 126, 126, 123, 123, 123, 116, 110, 76, 0, 99, 124, 132, 127, - 100, 104, 124, 123, 102, 112, 116, 65, 102, 126, 110, 228, 236, 222, 106, 97, - 108, 124, 131, 136, 140, 139, 138, 138, 143, 159, 155, 147, 139, 131, 118, 20, - 20, 20, 46, 48, 60, 76, 71, 72, 64, 61, 55, 40, 91, 118, 124, 122, - 124, 118, 108, 99, 111, 104, 88, 93, 103, 110, 100, 104, 100, 107, 116, 118, - 96, 106, 102, 123, 140, 135, 128, 143, 142, 140, 100, 88, 84, 75, 72, 65, - 72, 67, 57, 45, 61, 65, 59, 57, 59, 77, 40, 102, 111, 111, 108, 210, - 217, 187, 102, 99, 108, 124, 135, 143, 155, 167, 161, 143, 135, 55, 56, 61, - 64, 65, 92, 88, 99, 102, 103, 102, 107, 89, 93, 93, 92, 95, 42, 112, - 108, 111, 122, 116, 143, 159, 171, 174, 179, 179, 181, 189, 194, 191, 186, 187, - 185, 185, 183, 186, 193, 194, 195, 193, 186, 177, 177, 153, 146, 159, 146, 158, - 181, 186, 199, 195, 190, 189, 187, 174, 175, 182, 177, 155, 80, 51, 55, 26, - 97, 118, 106, 123, 128, 110, 124, 120, 97, 118, 130, 165, 165, 182, 186, 193, - 186, 189, 187, 190, 194, 194, 199, 206, 206, 208, 205, 205, 198, 179, 159, 110, - 69, 59, 30, 9, 84, 93, 80, 89, 95, 80, 89, 79, 67, 33, 21, 93, - 170, 181, 185, 178, 182, 189, 198, 206, 202, 197, 199, 195, 197, 194, 195, 179, - 193, 193, 185, 148, 171, 140, 65, 46, 96, 153, 178, 186, 194, 195, 201, 205, - 204, 205, 202, 179, 204, 198, 161, 110, 104, 151, 170, 167, 165, 150, 157, 153, - 142, 122, 120, 106, 116, 112, 107, 146, 150, 97, 150, 158, 118, 112, 110, 59, - 41, 93, 157, 187, 144, 126, 97, 102, 110, 110, 138, 179, 185, 185, 193, 173, - 178, 189, 193, 112, 79, 67, 88, 103, 115, 163, 162, 173, 189, 187, 204, 242, - 216, 138, 104, 122, 131, 139, 151, 158, 162, 166, 163, 154, 153, 143, 139, 126, - 46, 28, 29, 63, 80, 91, 124, 115, 134, 142, 131, 136, 140, 159, 163, 157, - 166, 161, 159, 155, 140, 130, 116, 124, 181, 127, 96, 77, 69, 65, 99, 104, - 99, 95, 75, 124, 162, 159, 157, 153, 153, 148, 233, 224, 218, 103, 99, 115, - 122, 136, 132, 138, 140, 138, 132, 130, 135, 124, 123, 33, 25, 26, 57, 77, - 144, 95, 104, 119, 135, 189, 197, 202, 212, 213, 216, 218, 221, 225, 226, 226, - 232, 233, 234, 234, 233, 236, 229, 236, 237, 236, 232, 225, 218, 213, 216, 217, - 222, 224, 221, 218, 220, 214, 199, 202, 189, 181, 198, 186, 187, 143, 122, 150, - 163, 171, 186, 201, 202, 197, 191, 204, 209, 209, 213, 213, 212, 210, 208, 205, - 202, 197, 185, 167, 138, 120, 118, 139, 135, 135, 140, 136, 135, 100, 61, 146, - 143, 146, 139, 139, 131, 128, 130, 130, 128, 127, 92, 111, 153, 140, 127, 151, - 153, 147, 119, 111, 108, 56, 153, 147, 157, 148, 155, 158, 150, 169, 214, 225, - 234, 232, 222, 216, 206, 194, 171, 159, 136, 116, 99, 92, 159, 102, 60, 142, - 134, 139, 144, 140, 138, 134, 126, 134, 127, 115, 87, 123, 135, 131, 118, 118, - 126, 120, 114, 123, 89, 71, 0, 104, 95, 103, 119, 124, 123, 131, 139, 134, - 120, 116, 72, 99, 124, 110, 233, 237, 233, 108, 100, 111, 132, 140, 148, 154, - 155, 154, 157, 153, 151, 144, 143, 142, 135, 124, 21, 20, 21, 45, 65, 64, - 61, 71, 71, 73, 64, 63, 42, 99, 124, 130, 127, 123, 128, 115, 116, 120, - 130, 119, 100, 88, 108, 150, 179, 185, 194, 201, 210, 212, 205, 209, 216, 220, - 218, 218, 226, 226, 217, 210, 214, 194, 201, 199, 204, 195, 169, 85, 46, 41, - 57, 55, 60, 55, 77, 42, 91, 102, 112, 120, 217, 224, 213, 97, 95, 108, - 123, 135, 144, 154, 166, 167, 159, 171, 97, 88, 84, 85, 88, 92, 93, 111, - 115, 120, 103, 106, 102, 115, 102, 97, 93, 93, 75, 108, 102, 93, 118, 177, - 187, 187, 173, 182, 194, 189, 197, 185, 182, 198, 185, 198, 199, 190, 186, 185, - 178, 181, 182, 187, 195, 185, 178, 139, 144, 182, 197, 197, 195, 189, 201, 189, - 174, 140, 143, 127, 119, 127, 115, 91, 42, 52, 28, 83, 91, 111, 96, 100, - 118, 97, 92, 115, 151, 158, 178, 182, 181, 178, 170, 178, 183, 190, 183, 182, - 178, 171, 175, 179, 185, 195, 201, 202, 202, 201, 191, 128, 60, 38, 9, 92, - 92, 81, 77, 73, 68, 73, 88, 80, 46, 30, 122, 178, 181, 174, 190, 204, - 204, 204, 205, 204, 208, 199, 189, 183, 187, 179, 174, 167, 151, 158, 150, 146, - 123, 73, 55, 119, 155, 177, 185, 190, 197, 208, 208, 170, 169, 151, 140, 142, - 138, 116, 73, 77, 99, 167, 171, 154, 144, 134, 134, 130, 128, 126, 120, 126, - 127, 134, 134, 142, 143, 144, 146, 107, 99, 102, 114, 53, 61, 75, 83, 79, - 77, 75, 73, 75, 79, 77, 79, 80, 84, 88, 91, 92, 85, 81, 76, 63, - 89, 22, 18, 13, 155, 155, 177, 182, 202, 208, 201, 205, 144, 110, 115, 138, - 161, 162, 162, 166, 166, 161, 155, 148, 142, 139, 127, 45, 28, 29, 67, 88, - 97, 126, 130, 136, 110, 154, 159, 154, 155, 163, 154, 166, 166, 165, 157, 142, - 123, 75, 116, 178, 131, 99, 73, 68, 71, 102, 111, 96, 97, 85, 146, 166, - 158, 153, 150, 148, 148, 238, 228, 221, 110, 100, 115, 124, 134, 135, 143, 140, - 134, 127, 126, 131, 124, 120, 32, 24, 26, 57, 83, 104, 110, 108, 161, 158, - 175, 177, 142, 165, 146, 148, 146, 142, 138, 136, 134, 132, 130, 130, 126, 123, - 123, 128, 123, 119, 118, 119, 112, 110, 112, 115, 169, 186, 220, 193, 185, 181, - 166, 144, 120, 115, 118, 120, 127, 120, 123, 144, 140, 174, 198, 199, 201, 206, - 189, 173, 175, 171, 162, 153, 143, 146, 144, 148, 148, 171, 186, 187, 194, 143, - 126, 107, 120, 130, 102, 124, 131, 135, 107, 59, 118, 142, 151, 135, 130, 134, - 139, 128, 122, 116, 131, 83, 106, 154, 153, 131, 135, 144, 122, 122, 116, 108, - 65, 155, 155, 142, 155, 155, 159, 165, 218, 234, 240, 230, 221, 197, 148, 124, - 110, 106, 99, 96, 85, 69, 72, 93, 93, 38, 93, 132, 128, 132, 124, 119, - 114, 119, 115, 131, 119, 67, 116, 130, 126, 118, 126, 120, 119, 112, 123, 93, - 64, 0, 102, 104, 124, 122, 120, 110, 114, 122, 120, 126, 88, 53, 103, 134, - 99, 232, 238, 234, 111, 103, 111, 138, 144, 153, 151, 159, 159, 165, 159, 161, - 155, 146, 140, 136, 124, 18, 17, 18, 44, 69, 67, 63, 68, 71, 89, 64, - 63, 33, 92, 120, 120, 122, 128, 126, 122, 126, 114, 111, 97, 63, 111, 126, - 115, 173, 195, 204, 210, 212, 216, 217, 221, 222, 226, 226, 232, 232, 228, 228, - 225, 222, 225, 224, 221, 218, 214, 190, 96, 52, 48, 56, 65, 53, 63, 76, - 41, 67, 93, 111, 107, 226, 230, 222, 102, 93, 108, 122, 134, 144, 154, 166, - 170, 166, 139, 173, 130, 135, 185, 198, 202, 204, 204, 205, 204, 201, 199, 202, - 199, 193, 185, 128, 92, 95, 96, 65, 111, 120, 122, 187, 198, 179, 195, 198, - 198, 173, 157, 135, 147, 166, 185, 185, 182, 165, 167, 146, 158, 157, 154, 151, - 148, 134, 122, 167, 197, 201, 199, 193, 189, 162, 144, 118, 111, 111, 106, 107, - 106, 115, 52, 44, 48, 26, 91, 95, 112, 120, 92, 102, 114, 85, 115, 147, - 165, 186, 191, 169, 157, 134, 132, 132, 139, 134, 134, 126, 123, 120, 127, 128, - 146, 154, 155, 167, 177, 190, 173, 88, 49, 14, 59, 97, 81, 72, 75, 72, - 79, 79, 84, 48, 26, 115, 165, 186, 197, 199, 230, 194, 201, 201, 199, 193, - 181, 175, 189, 181, 171, 167, 102, 88, 84, 79, 87, 79, 75, 64, 115, 162, - 177, 190, 205, 175, 166, 147, 123, 130, 120, 118, 122, 114, 119, 69, 60, 88, - 107, 167, 165, 144, 158, 132, 128, 116, 132, 130, 134, 134, 134, 134, 139, 140, - 143, 134, 103, 91, 95, 111, 61, 65, 67, 69, 65, 72, 80, 83, 79, 72, - 77, 69, 81, 75, 77, 76, 77, 75, 71, 91, 79, 16, 12, 12, 46, 144, - 147, 167, 175, 199, 212, 240, 199, 131, 106, 127, 144, 158, 165, 161, 163, 162, - 163, 155, 153, 144, 139, 122, 41, 26, 29, 65, 83, 108, 122, 130, 143, 119, - 151, 158, 148, 158, 150, 158, 150, 171, 163, 148, 136, 132, 77, 108, 175, 135, - 124, 92, 76, 71, 99, 99, 95, 79, 68, 154, 167, 158, 157, 153, 148, 147, - 238, 228, 222, 108, 102, 114, 126, 131, 138, 138, 130, 126, 124, 127, 126, 123, - 116, 30, 24, 24, 56, 72, 85, 108, 95, 126, 151, 151, 126, 148, 130, 119, - 119, 119, 119, 108, 114, 115, 114, 107, 107, 106, 107, 104, 104, 100, 103, 99, - 99, 99, 97, 97, 97, 106, 108, 110, 107, 106, 104, 106, 106, 96, 97, 100, - 104, 106, 110, 112, 144, 136, 190, 197, 208, 206, 189, 158, 132, 118, 111, 114, - 108, 106, 110, 112, 111, 114, 116, 132, 136, 163, 169, 126, 104, 127, 123, 132, - 134, 128, 130, 104, 61, 136, 150, 147, 139, 142, 134, 154, 127, 118, 114, 127, - 79, 114, 155, 150, 134, 120, 122, 114, 119, 116, 103, 63, 146, 157, 147, 166, - 161, 166, 216, 232, 242, 240, 222, 169, 103, 92, 83, 85, 85, 84, 77, 73, - 61, 57, 72, 91, 63, 99, 124, 132, 122, 116, 114, 112, 111, 116, 122, 111, - 81, 118, 134, 119, 119, 128, 127, 115, 118, 124, 108, 63, 5, 100, 115, 126, - 116, 130, 138, 131, 127, 126, 118, 85, 51, 96, 116, 96, 237, 242, 236, 111, - 103, 111, 138, 148, 157, 155, 163, 169, 171, 167, 162, 157, 147, 142, 134, 120, - 16, 18, 21, 42, 65, 61, 67, 67, 79, 77, 68, 59, 45, 87, 120, 122, - 110, 119, 128, 120, 123, 108, 96, 89, 64, 107, 122, 138, 124, 146, 166, 201, - 213, 210, 214, 220, 226, 226, 229, 216, 236, 234, 232, 218, 230, 234, 229, 206, - 234, 234, 190, 95, 46, 37, 65, 68, 55, 65, 73, 53, 52, 97, 110, 106, - 229, 234, 228, 103, 95, 108, 119, 132, 147, 153, 165, 171, 171, 163, 178, 183, - 190, 197, 204, 204, 205, 204, 204, 201, 202, 198, 199, 197, 193, 190, 187, 178, - 123, 104, 100, 99, 75, 93, 112, 130, 116, 111, 115, 103, 100, 97, 95, 102, - 100, 107, 107, 106, 104, 104, 103, 102, 104, 110, 110, 108, 136, 124, 165, 199, - 198, 190, 191, 142, 119, 112, 111, 110, 115, 114, 116, 123, 93, 42, 36, 37, - 20, 89, 97, 107, 111, 110, 96, 118, 119, 124, 167, 166, 153, 165, 153, 115, - 99, 96, 97, 99, 100, 100, 99, 99, 102, 104, 106, 110, 111, 116, 120, 126, - 135, 174, 128, 63, 14, 68, 95, 80, 79, 77, 73, 71, 68, 84, 49, 29, - 51, 87, 148, 166, 161, 151, 139, 116, 108, 102, 87, 80, 85, 80, 83, 80, - 73, 69, 71, 67, 67, 67, 63, 79, 69, 118, 166, 177, 178, 170, 131, 126, - 104, 110, 123, 124, 131, 123, 130, 114, 67, 68, 67, 72, 106, 190, 163, 154, - 147, 140, 136, 135, 136, 138, 134, 134, 138, 138, 132, 119, 135, 95, 37, 88, - 88, 89, 93, 96, 59, 68, 99, 128, 112, 114, 102, 99, 88, 91, 88, 83, - 96, 81, 81, 96, 85, 25, 10, 9, 16, 21, 138, 139, 142, 165, 195, 213, - 244, 185, 130, 110, 128, 153, 162, 165, 165, 169, 173, 165, 158, 151, 144, 136, - 123, 41, 26, 32, 68, 76, 102, 104, 119, 130, 108, 148, 155, 143, 170, 150, - 148, 163, 147, 146, 130, 132, 128, 87, 119, 169, 171, 138, 119, 96, 95, 96, - 97, 91, 79, 107, 151, 165, 159, 155, 148, 143, 140, 242, 232, 230, 103, 100, - 114, 123, 131, 138, 128, 127, 124, 136, 135, 132, 127, 122, 30, 22, 24, 55, - 67, 84, 122, 115, 88, 119, 148, 134, 134, 138, 126, 124, 112, 122, 124, 118, - 115, 111, 115, 115, 115, 115, 114, 111, 112, 114, 112, 114, 118, 119, 115, 112, - 99, 99, 97, 97, 97, 99, 97, 102, 108, 112, 116, 119, 122, 122, 120, 146, - 131, 157, 201, 186, 163, 142, 114, 122, 122, 119, 119, 119, 120, 120, 120, 118, - 116, 115, 110, 110, 115, 138, 128, 103, 123, 123, 127, 130, 130, 128, 107, 63, - 136, 150, 150, 146, 148, 126, 150, 131, 115, 123, 127, 73, 106, 146, 143, 134, - 134, 130, 126, 120, 120, 108, 71, 153, 161, 170, 155, 162, 208, 232, 242, 244, - 233, 171, 118, 84, 75, 68, 64, 61, 65, 64, 64, 49, 59, 64, 92, 64, - 67, 136, 134, 119, 115, 115, 119, 116, 108, 119, 116, 79, 115, 131, 118, 127, - 130, 118, 115, 120, 118, 118, 68, 1, 107, 111, 130, 111, 116, 112, 118, 124, - 127, 107, 79, 63, 85, 126, 100, 229, 238, 237, 110, 99, 111, 136, 151, 158, - 163, 169, 179, 179, 177, 165, 161, 150, 143, 132, 122, 16, 16, 20, 41, 67, - 68, 64, 71, 76, 81, 67, 59, 45, 88, 116, 119, 120, 124, 118, 123, 120, - 107, 93, 97, 59, 100, 130, 115, 136, 135, 136, 138, 147, 154, 148, 139, 138, - 139, 140, 142, 159, 153, 148, 163, 173, 146, 142, 155, 171, 135, 118, 88, 40, - 41, 67, 68, 59, 64, 67, 72, 33, 88, 100, 104, 233, 234, 232, 107, 96, - 108, 120, 132, 147, 155, 167, 174, 174, 170, 165, 135, 178, 189, 195, 204, 204, - 205, 202, 202, 202, 201, 199, 198, 198, 194, 189, 181, 177, 163, 158, 103, 97, - 96, 75, 77, 85, 97, 84, 95, 92, 95, 93, 97, 96, 103, 102, 102, 103, - 104, 106, 107, 106, 108, 112, 115, 138, 128, 157, 190, 183, 185, 126, 114, 116, - 112, 123, 122, 124, 122, 127, 124, 83, 32, 32, 41, 24, 87, 97, 104, 104, - 114, 110, 92, 110, 138, 142, 148, 128, 126, 100, 92, 100, 107, 106, 104, 106, - 106, 110, 110, 111, 110, 112, 111, 111, 112, 114, 115, 115, 126, 151, 73, 18, - 61, 87, 75, 80, 79, 80, 76, 72, 75, 63, 42, 44, 46, 65, 73, 76, - 71, 79, 80, 71, 71, 68, 71, 68, 75, 75, 72, 69, 72, 80, 108, 112, - 115, 114, 85, 77, 123, 197, 186, 144, 111, 111, 123, 126, 134, 135, 138, 136, - 136, 138, 102, 55, 24, 57, 75, 65, 89, 183, 165, 150, 151, 151, 146, 148, - 147, 153, 151, 153, 153, 148, 139, 111, 100, 89, 92, 80, 77, 81, 96, 87, - 65, 97, 185, 187, 136, 135, 118, 120, 120, 112, 126, 127, 128, 118, 114, 37, - 16, 10, 20, 25, 40, 132, 136, 131, 169, 202, 216, 244, 171, 132, 110, 130, - 154, 161, 165, 169, 170, 174, 170, 165, 148, 143, 135, 124, 41, 28, 33, 75, - 72, 97, 120, 111, 130, 114, 151, 154, 136, 165, 151, 147, 143, 174, 144, 132, - 131, 123, 72, 103, 162, 159, 134, 139, 126, 104, 111, 96, 80, 67, 107, 163, - 159, 163, 150, 159, 162, 147, 240, 232, 233, 108, 96, 114, 123, 134, 127, 138, - 140, 143, 150, 148, 140, 130, 126, 30, 22, 24, 60, 72, 87, 102, 96, 123, - 84, 103, 150, 130, 132, 120, 128, 144, 150, 134, 134, 134, 147, 131, 134, 134, - 140, 130, 128, 131, 140, 134, 135, 142, 143, 138, 135, 126, 118, 114, 115, 116, - 116, 118, 122, 126, 132, 135, 140, 140, 142, 130, 126, 120, 134, 148, 138, 114, - 127, 128, 148, 147, 131, 130, 131, 130, 131, 131, 131, 128, 127, 123, 122, 118, - 114, 134, 102, 108, 131, 123, 124, 130, 126, 108, 73, 132, 147, 144, 144, 148, - 136, 154, 142, 112, 120, 112, 68, 104, 144, 144, 118, 128, 100, 135, 132, 132, - 120, 110, 155, 178, 171, 171, 198, 225, 242, 246, 240, 217, 132, 89, 71, 46, - 46, 55, 51, 51, 56, 64, 57, 63, 60, 127, 68, 61, 135, 131, 118, 119, - 120, 122, 120, 115, 111, 114, 73, 112, 132, 119, 127, 122, 116, 115, 114, 120, - 96, 65, 2, 106, 111, 107, 116, 116, 119, 119, 126, 120, 107, 65, 73, 91, - 122, 119, 241, 244, 238, 116, 100, 111, 135, 147, 158, 163, 170, 179, 178, 177, - 175, 163, 146, 142, 134, 123, 16, 17, 18, 40, 64, 65, 67, 71, 81, 76, - 67, 63, 42, 76, 106, 120, 122, 119, 123, 126, 107, 87, 85, 77, 59, 107, - 120, 115, 139, 139, 122, 126, 128, 127, 127, 131, 128, 124, 128, 132, 131, 134, - 135, 136, 135, 136, 126, 130, 124, 123, 99, 64, 34, 32, 68, 64, 59, 63, - 63, 68, 22, 85, 111, 107, 233, 241, 233, 110, 99, 111, 124, 134, 146, 155, - 167, 173, 175, 174, 166, 167, 148, 143, 143, 140, 138, 135, 134, 131, 132, 130, - 128, 128, 126, 122, 122, 116, 122, 120, 122, 108, 114, 97, 110, 103, 107, 103, - 103, 103, 104, 106, 104, 104, 108, 110, 108, 108, 111, 114, 115, 115, 116, 119, - 122, 124, 118, 127, 124, 167, 198, 130, 120, 124, 128, 132, 134, 135, 132, 130, - 131, 127, 72, 32, 32, 38, 14, 79, 95, 102, 107, 100, 100, 97, 102, 96, - 97, 92, 97, 97, 85, 80, 73, 79, 95, 95, 115, 114, 115, 118, 120, 120, - 122, 122, 124, 124, 124, 123, 122, 119, 163, 92, 37, 41, 73, 91, 87, 77, - 68, 71, 73, 64, 76, 48, 28, 63, 60, 69, 73, 83, 83, 84, 84, 92, - 89, 95, 97, 102, 103, 107, 108, 106, 111, 122, 124, 128, 124, 95, 80, 116, - 166, 158, 130, 108, 132, 136, 144, 142, 143, 142, 142, 142, 132, 83, 22, 40, - 53, 61, 60, 71, 110, 169, 165, 142, 132, 158, 157, 158, 158, 162, 162, 163, - 161, 157, 144, 123, 96, 44, 81, 85, 79, 79, 79, 59, 100, 194, 182, 166, - 163, 136, 130, 131, 136, 124, 132, 148, 126, 107, 38, 14, 8, 22, 26, 8, - 126, 130, 126, 165, 210, 221, 237, 166, 122, 110, 130, 151, 162, 166, 167, 169, - 173, 170, 165, 153, 140, 138, 127, 44, 28, 36, 69, 89, 108, 112, 119, 123, - 106, 147, 148, 139, 157, 153, 148, 144, 127, 131, 138, 130, 115, 65, 102, 155, - 157, 143, 150, 138, 122, 163, 128, 76, 61, 131, 162, 157, 155, 147, 157, 153, - 143, 241, 233, 234, 108, 96, 111, 123, 136, 139, 153, 158, 163, 165, 158, 144, - 132, 128, 30, 22, 25, 56, 63, 84, 85, 108, 136, 115, 83, 91, 142, 146, - 122, 174, 182, 162, 134, 148, 166, 142, 142, 148, 154, 143, 140, 144, 151, 142, - 144, 148, 143, 147, 148, 147, 144, 140, 136, 136, 135, 140, 143, 143, 147, 148, - 154, 154, 153, 154, 147, 128, 153, 116, 112, 136, 132, 112, 88, 81, 95, 119, - 134, 161, 134, 136, 159, 138, 138, 136, 134, 132, 128, 118, 134, 112, 85, 122, - 128, 127, 122, 132, 112, 73, 80, 143, 148, 154, 148, 132, 154, 142, 106, 123, - 106, 65, 132, 135, 142, 135, 136, 134, 147, 162, 174, 179, 186, 208, 217, 225, - 226, 229, 241, 246, 248, 238, 177, 104, 60, 73, 69, 81, 68, 83, 77, 75, - 72, 72, 72, 76, 72, 84, 57, 108, 127, 120, 122, 123, 122, 126, 120, 114, - 115, 68, 111, 126, 118, 127, 120, 116, 118, 118, 123, 102, 63, 4, 103, 115, - 120, 126, 122, 122, 123, 123, 123, 93, 45, 60, 83, 122, 106, 238, 245, 241, - 114, 102, 110, 136, 148, 155, 163, 170, 174, 177, 177, 175, 166, 146, 138, 135, - 123, 14, 16, 22, 37, 59, 63, 67, 68, 77, 68, 68, 57, 41, 69, 99, - 114, 127, 119, 116, 110, 107, 84, 88, 83, 46, 110, 119, 124, 115, 116, 108, - 110, 148, 150, 123, 134, 136, 142, 143, 142, 135, 135, 136, 136, 134, 130, 131, - 128, 126, 114, 97, 46, 33, 33, 64, 69, 59, 65, 65, 69, 28, 85, 104, - 108, 229, 238, 237, 110, 100, 112, 124, 135, 146, 157, 169, 173, 175, 174, 159, - 151, 120, 96, 89, 110, 107, 120, 119, 119, 116, 115, 112, 108, 102, 100, 102, - 102, 96, 96, 91, 88, 84, 83, 79, 83, 91, 83, 87, 174, 111, 108, 108, - 114, 112, 116, 118, 118, 119, 123, 127, 127, 128, 128, 131, 134, 132, 135, 126, - 127, 124, 124, 131, 140, 144, 144, 144, 142, 139, 138, 134, 115, 52, 32, 25, - 37, 22, 65, 95, 93, 102, 104, 104, 106, 95, 89, 80, 73, 61, 57, 51, - 45, 51, 52, 64, 77, 89, 102, 119, 116, 123, 123, 127, 122, 126, 130, 135, - 134, 131, 130, 127, 126, 65, 18, 65, 72, 61, 59, 73, 68, 71, 64, 68, - 48, 40, 64, 57, 55, 67, 63, 138, 93, 100, 106, 108, 108, 112, 116, 115, - 118, 118, 116, 116, 128, 132, 134, 134, 128, 87, 108, 153, 132, 126, 139, 148, - 144, 147, 144, 146, 148, 146, 146, 134, 67, 37, 36, 45, 44, 56, 67, 72, - 139, 174, 157, 134, 135, 157, 167, 167, 165, 170, 170, 174, 174, 169, 150, 111, - 81, 72, 45, 67, 76, 61, 65, 112, 193, 193, 182, 140, 153, 136, 139, 139, - 144, 151, 150, 120, 122, 30, 16, 20, 24, 8, 0, 119, 126, 123, 161, 210, - 224, 238, 148, 119, 108, 128, 144, 159, 165, 165, 166, 173, 170, 167, 154, 144, - 136, 130, 41, 28, 36, 64, 92, 111, 108, 144, 136, 95, 138, 144, 140, 158, - 158, 147, 140, 135, 135, 132, 131, 119, 63, 104, 167, 186, 147, 142, 144, 142, - 120, 131, 87, 53, 127, 159, 154, 157, 148, 151, 148, 142, 242, 238, 233, 107, - 97, 111, 126, 140, 150, 163, 169, 169, 169, 161, 147, 134, 128, 28, 22, 24, - 57, 73, 80, 84, 92, 120, 115, 91, 81, 131, 142, 127, 198, 193, 127, 124, - 132, 150, 146, 161, 163, 147, 148, 153, 155, 148, 151, 148, 153, 153, 150, 163, - 163, 167, 159, 153, 148, 150, 155, 159, 157, 162, 161, 163, 165, 165, 163, 159, - 142, 157, 157, 138, 110, 77, 59, 48, 51, 60, 96, 130, 143, 177, 182, 181, - 167, 174, 171, 161, 139, 135, 127, 116, 123, 85, 89, 118, 120, 120, 122, 116, - 95, 75, 136, 139, 120, 147, 138, 140, 112, 115, 111, 80, 95, 130, 132, 165, - 175, 197, 213, 230, 230, 242, 241, 248, 246, 250, 250, 249, 249, 250, 250, 244, - 220, 143, 102, 76, 42, 73, 79, 79, 75, 77, 76, 79, 83, 77, 73, 76, - 83, 72, 104, 134, 130, 130, 130, 126, 132, 124, 110, 108, 72, 111, 128, 118, - 120, 123, 119, 132, 122, 114, 108, 60, 6, 107, 128, 115, 134, 128, 124, 130, - 126, 116, 95, 46, 64, 88, 119, 103, 238, 245, 240, 111, 100, 110, 135, 147, - 154, 162, 167, 170, 177, 175, 175, 167, 147, 140, 135, 126, 13, 18, 18, 37, - 61, 63, 69, 67, 67, 71, 65, 59, 52, 57, 93, 96, 100, 96, 97, 97, - 80, 84, 87, 83, 53, 80, 115, 116, 108, 108, 104, 103, 112, 93, 106, 173, - 134, 127, 131, 146, 147, 151, 151, 155, 155, 158, 147, 153, 122, 114, 99, 37, - 28, 32, 56, 53, 68, 71, 56, 65, 41, 79, 100, 110, 220, 240, 238, 110, - 100, 111, 126, 138, 147, 157, 170, 174, 174, 170, 161, 130, 69, 38, 34, 34, - 73, 92, 111, 110, 114, 112, 112, 112, 112, 111, 115, 115, 114, 110, 64, 68, - 81, 79, 77, 76, 76, 80, 84, 177, 179, 118, 100, 122, 130, 120, 122, 126, - 126, 127, 132, 134, 136, 139, 140, 139, 139, 132, 132, 122, 119, 143, 148, 150, - 151, 146, 146, 144, 139, 140, 130, 85, 32, 26, 25, 36, 25, 46, 89, 92, - 91, 81, 69, 55, 59, 59, 60, 49, 61, 63, 61, 59, 73, 69, 52, 48, - 75, 107, 119, 171, 174, 170, 148, 157, 170, 155, 155, 151, 138, 140, 128, 155, - 96, 36, 28, 67, 72, 65, 60, 64, 65, 65, 73, 42, 36, 48, 60, 65, - 52, 59, 136, 163, 103, 103, 112, 123, 120, 122, 124, 124, 124, 124, 127, 131, - 140, 139, 140, 139, 134, 92, 91, 135, 147, 151, 151, 151, 151, 143, 147, 148, - 146, 143, 102, 46, 40, 37, 18, 46, 48, 64, 61, 67, 155, 166, 140, 128, - 140, 157, 163, 171, 174, 177, 178, 178, 178, 171, 140, 76, 69, 52, 71, 65, - 72, 65, 123, 204, 198, 216, 151, 155, 140, 138, 142, 142, 155, 148, 120, 120, - 26, 14, 6, 12, 8, 0, 110, 110, 111, 153, 222, 224, 240, 147, 103, 112, - 132, 147, 155, 159, 162, 169, 171, 170, 165, 157, 138, 132, 126, 42, 29, 37, - 67, 89, 91, 108, 118, 120, 92, 155, 153, 138, 131, 128, 130, 127, 127, 126, - 124, 132, 124, 81, 116, 134, 161, 143, 72, 88, 83, 83, 79, 67, 51, 92, - 130, 131, 126, 124, 147, 142, 139, 244, 240, 233, 104, 97, 110, 124, 139, 153, - 167, 171, 166, 169, 162, 146, 134, 127, 28, 21, 25, 55, 51, 72, 84, 79, - 91, 76, 83, 87, 112, 144, 126, 201, 198, 170, 127, 128, 136, 153, 150, 154, - 162, 159, 150, 159, 150, 151, 150, 151, 158, 170, 174, 181, 187, 187, 183, 163, - 162, 165, 171, 170, 171, 171, 171, 173, 173, 170, 165, 147, 159, 158, 114, 75, - 46, 46, 42, 38, 48, 77, 106, 136, 178, 181, 194, 185, 179, 155, 174, 167, - 154, 134, 120, 130, 93, 75, 95, 114, 119, 118, 112, 114, 102, 89, 95, 103, - 103, 106, 104, 104, 106, 83, 116, 126, 155, 201, 226, 238, 242, 242, 246, 250, - 253, 253, 253, 252, 253, 252, 252, 250, 250, 248, 238, 178, 138, 103, 73, 40, - 73, 69, 69, 69, 73, 73, 76, 76, 81, 75, 81, 79, 76, 75, 93, 99, - 97, 108, 104, 107, 106, 104, 111, 68, 106, 115, 115, 103, 108, 108, 111, 106, - 106, 93, 60, 5, 102, 114, 118, 122, 116, 115, 115, 115, 102, 92, 41, 69, - 84, 116, 96, 238, 242, 238, 110, 96, 110, 135, 147, 155, 161, 162, 163, 175, - 177, 175, 163, 153, 140, 132, 122, 12, 16, 17, 36, 57, 57, 56, 65, 68, - 65, 75, 68, 64, 64, 71, 77, 71, 73, 77, 81, 75, 80, 85, 73, 48, - 87, 108, 104, 102, 102, 103, 104, 104, 100, 91, 175, 179, 126, 124, 132, 136, - 146, 150, 155, 155, 150, 155, 151, 126, 115, 99, 34, 26, 30, 44, 45, 56, - 61, 49, 51, 48, 56, 80, 107, 228, 241, 237, 115, 100, 112, 126, 139, 144, - 154, 169, 174, 173, 182, 151, 83, 45, 26, 21, 18, 37, 85, 131, 165, 169, - 162, 120, 153, 155, 153, 151, 123, 120, 115, 83, 55, 79, 77, 76, 75, 76, - 73, 76, 163, 190, 169, 111, 112, 130, 131, 134, 134, 136, 138, 139, 142, 142, - 143, 143, 147, 144, 142, 140, 142, 154, 153, 155, 151, 146, 132, 126, 116, 103, - 100, 77, 40, 25, 22, 24, 36, 25, 38, 45, 51, 46, 52, 56, 55, 65, - 67, 71, 60, 77, 75, 75, 71, 71, 73, 73, 75, 87, 111, 179, 190, 191, - 183, 174, 174, 177, 173, 166, 170, 161, 147, 142, 128, 120, 67, 20, 34, 77, - 76, 59, 61, 59, 56, 71, 49, 37, 42, 60, 57, 56, 61, 131, 169, 159, - 102, 104, 124, 126, 130, 130, 128, 132, 131, 130, 144, 151, 155, 151, 150, 143, - 147, 157, 157, 154, 154, 150, 144, 136, 131, 122, 116, 112, 89, 49, 32, 28, - 37, 28, 38, 26, 41, 42, 33, 100, 171, 165, 134, 127, 140, 157, 162, 170, - 175, 178, 179, 182, 181, 165, 114, 60, 71, 80, 83, 71, 64, 158, 206, 202, - 191, 170, 165, 147, 144, 150, 153, 151, 148, 120, 116, 24, 9, 5, 17, 13, - 13, 114, 107, 97, 150, 214, 225, 240, 139, 99, 108, 132, 148, 158, 161, 167, - 170, 171, 161, 158, 158, 140, 134, 128, 45, 28, 37, 63, 67, 93, 112, 110, - 119, 96, 150, 138, 119, 122, 116, 124, 124, 122, 115, 130, 134, 110, 73, 88, - 76, 53, 51, 51, 49, 44, 42, 45, 45, 46, 57, 63, 72, 80, 84, 110, - 138, 140, 242, 240, 229, 104, 97, 111, 130, 140, 153, 167, 174, 173, 165, 159, - 144, 132, 123, 24, 20, 22, 49, 56, 63, 73, 65, 67, 76, 65, 73, 85, - 139, 128, 208, 201, 197, 126, 122, 132, 147, 170, 169, 153, 159, 150, 153, 159, - 165, 167, 171, 174, 178, 181, 173, 161, 179, 187, 193, 185, 167, 183, 182, 181, - 177, 189, 182, 179, 183, 178, 186, 166, 159, 106, 61, 46, 38, 36, 34, 36, - 67, 102, 134, 189, 193, 165, 169, 186, 183, 163, 159, 165, 138, 126, 132, 99, - 68, 77, 95, 110, 108, 104, 104, 102, 112, 110, 104, 107, 106, 104, 108, 77, - 126, 135, 175, 228, 244, 244, 244, 248, 249, 252, 253, 252, 245, 240, 234, 234, - 233, 229, 225, 220, 216, 183, 147, 138, 110, 69, 69, 67, 75, 72, 75, 79, - 77, 80, 81, 80, 81, 84, 81, 79, 89, 89, 91, 91, 89, 92, 91, 91, - 88, 87, 83, 84, 73, 84, 84, 84, 68, 76, 73, 68, 59, 65, 8, 33, - 57, 63, 67, 65, 67, 64, 79, 69, 44, 24, 88, 69, 108, 104, 241, 244, - 238, 110, 95, 104, 131, 144, 157, 162, 166, 173, 174, 177, 165, 159, 148, 140, - 134, 126, 13, 18, 18, 42, 45, 48, 49, 45, 51, 45, 42, 49, 51, 49, - 51, 61, 59, 56, 56, 53, 55, 56, 53, 63, 71, 64, 71, 61, 59, 93, - 97, 92, 95, 100, 84, 155, 185, 173, 124, 127, 138, 136, 146, 150, 148, 150, - 154, 154, 130, 119, 91, 30, 24, 25, 42, 41, 46, 61, 60, 45, 45, 55, - 77, 108, 234, 244, 241, 115, 103, 114, 126, 138, 147, 157, 170, 174, 169, 161, - 116, 48, 30, 20, 24, 21, 32, 71, 148, 179, 131, 163, 155, 155, 159, 169, - 143, 147, 124, 119, 110, 51, 51, 65, 75, 73, 72, 80, 69, 111, 199, 189, - 120, 111, 120, 144, 139, 142, 142, 142, 144, 146, 146, 148, 148, 150, 153, 157, - 161, 157, 157, 155, 142, 108, 71, 49, 30, 24, 24, 25, 24, 22, 20, 24, - 22, 34, 24, 46, 41, 45, 48, 57, 77, 116, 183, 201, 212, 214, 212, 204, - 190, 181, 112, 100, 95, 95, 116, 191, 216, 166, 194, 187, 189, 186, 177, 182, - 181, 173, 166, 159, 146, 135, 150, 95, 32, 22, 45, 52, 57, 60, 57, 60, - 63, 63, 45, 40, 53, 61, 41, 52, 112, 178, 177, 112, 103, 114, 127, 138, - 134, 134, 138, 147, 150, 157, 161, 161, 161, 158, 157, 159, 159, 155, 150, 134, - 99, 72, 42, 32, 25, 18, 26, 26, 28, 32, 30, 9, 12, 12, 44, 46, - 37, 34, 42, 124, 175, 147, 122, 123, 147, 158, 163, 170, 175, 179, 183, 185, - 179, 138, 71, 41, 49, 67, 79, 92, 190, 204, 205, 194, 166, 155, 157, 155, - 157, 158, 153, 151, 131, 112, 21, 10, 6, 9, 13, 10, 53, 63, 69, 120, - 208, 228, 232, 139, 110, 110, 132, 147, 157, 163, 166, 170, 169, 154, 161, 151, - 139, 134, 127, 52, 30, 34, 49, 53, 55, 67, 114, 112, 87, 114, 112, 106, - 83, 75, 84, 76, 67, 59, 44, 60, 60, 68, 33, 68, 72, 79, 87, 89, - 85, 100, 93, 80, 40, 99, 153, 150, 124, 131, 135, 143, 140, 244, 240, 222, - 106, 97, 108, 126, 135, 151, 166, 173, 170, 166, 162, 143, 127, 127, 29, 22, - 24, 51, 56, 55, 68, 69, 69, 67, 69, 69, 69, 135, 128, 212, 210, 206, - 127, 132, 128, 142, 166, 170, 159, 155, 157, 167, 178, 178, 178, 177, 173, 182, - 150, 99, 76, 97, 162, 189, 187, 173, 165, 178, 179, 181, 179, 179, 183, 183, - 189, 190, 169, 165, 100, 57, 44, 38, 34, 34, 36, 71, 97, 130, 202, 199, - 166, 190, 191, 191, 169, 185, 174, 143, 131, 119, 114, 76, 68, 85, 72, 67, - 59, 63, 57, 60, 57, 61, 61, 61, 67, 84, 97, 144, 191, 240, 245, 246, - 244, 252, 250, 242, 225, 197, 173, 130, 118, 120, 112, 115, 120, 118, 115, 120, - 136, 126, 131, 124, 97, 83, 25, 22, 20, 17, 14, 14, 14, 12, 10, 13, - 13, 8, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 10, - 12, 9, 2, 2, 8, 6, 9, 10, 8, 30, 28, 30, 13, 30, 32, 30, - 26, 33, 34, 33, 81, 51, 48, 115, 103, 241, 244, 242, 114, 97, 106, 132, - 146, 158, 165, 173, 177, 177, 173, 162, 165, 146, 138, 134, 122, 10, 16, 21, - 25, 17, 14, 14, 17, 16, 17, 18, 20, 20, 25, 36, 76, 83, 96, 91, - 97, 91, 93, 88, 81, 79, 108, 115, 108, 75, 63, 64, 63, 88, 104, 95, - 100, 195, 189, 130, 124, 135, 136, 142, 144, 144, 154, 150, 148, 123, 118, 91, - 29, 22, 26, 38, 24, 36, 40, 42, 37, 48, 83, 77, 111, 234, 245, 241, - 111, 99, 110, 123, 136, 143, 157, 170, 173, 169, 148, 77, 37, 24, 22, 25, - 18, 38, 85, 186, 194, 165, 132, 162, 165, 153, 143, 132, 153, 127, 122, 112, - 46, 49, 57, 64, 68, 67, 80, 75, 97, 212, 202, 132, 111, 122, 138, 147, - 146, 144, 144, 143, 146, 147, 151, 151, 162, 167, 165, 161, 161, 153, 104, 57, - 22, 17, 16, 14, 14, 16, 16, 17, 20, 22, 22, 24, 38, 45, 44, 63, - 71, 85, 135, 190, 236, 242, 245, 245, 244, 242, 240, 240, 237, 238, 237, 233, - 225, 230, 229, 225, 210, 191, 186, 182, 182, 179, 178, 181, 178, 174, 171, 153, - 144, 130, 119, 65, 21, 29, 36, 44, 36, 41, 45, 44, 52, 52, 52, 53, - 48, 44, 56, 104, 189, 187, 124, 108, 111, 126, 134, 138, 140, 155, 161, 167, - 166, 165, 162, 165, 169, 163, 161, 157, 138, 93, 51, 17, 13, 10, 12, 13, - 14, 18, 16, 8, 10, 9, 14, 18, 13, 13, 17, 28, 22, 32, 71, 157, - 166, 130, 119, 135, 151, 159, 163, 171, 178, 181, 186, 187, 161, 102, 77, 77, - 81, 79, 116, 204, 208, 210, 201, 171, 161, 170, 158, 154, 159, 148, 151, 127, - 122, 21, 9, 10, 2, 2, 1, 194, 189, 183, 143, 209, 228, 230, 150, 112, - 108, 128, 148, 157, 161, 166, 166, 161, 162, 163, 140, 136, 135, 130, 57, 30, - 36, 49, 83, 76, 71, 68, 75, 80, 73, 77, 99, 115, 112, 130, 136, 136, - 144, 148, 140, 128, 42, 96, 119, 144, 153, 142, 138, 135, 134, 107, 93, 37, - 140, 158, 158, 158, 161, 162, 144, 147, 246, 233, 236, 106, 95, 104, 128, 136, - 151, 165, 171, 169, 163, 161, 144, 134, 130, 30, 24, 25, 57, 59, 73, 87, - 100, 108, 72, 100, 65, 127, 138, 138, 218, 213, 213, 136, 131, 136, 134, 159, - 167, 158, 155, 170, 182, 182, 181, 179, 171, 173, 159, 103, 55, 57, 81, 128, - 183, 199, 182, 161, 178, 183, 182, 183, 186, 187, 190, 191, 189, 162, 170, 108, - 60, 51, 44, 40, 38, 38, 69, 110, 127, 206, 205, 173, 170, 174, 191, 193, - 190, 175, 155, 136, 123, 134, 93, 61, 75, 89, 92, 88, 89, 119, 127, 134, - 132, 140, 132, 115, 134, 174, 205, 242, 244, 245, 250, 246, 225, 190, 147, 122, - 115, 108, 103, 111, 114, 115, 103, 118, 116, 115, 111, 127, 128, 130, 127, 123, - 87, 102, 80, 79, 83, 91, 84, 84, 84, 79, 77, 68, 69, 99, 124, 127, - 143, 132, 124, 143, 147, 130, 102, 93, 103, 155, 126, 127, 163, 161, 126, 116, - 116, 144, 106, 16, 0, 48, 92, 110, 75, 76, 73, 72, 71, 46, 59, 44, - 76, 116, 115, 112, 242, 244, 241, 114, 96, 111, 134, 147, 155, 165, 174, 174, - 175, 169, 165, 163, 144, 135, 135, 127, 12, 20, 21, 32, 63, 80, 85, 93, - 100, 99, 97, 87, 93, 95, 91, 107, 131, 123, 124, 108, 114, 116, 118, 120, - 108, 122, 126, 123, 102, 91, 79, 76, 69, 92, 93, 95, 202, 197, 147, 124, - 131, 140, 135, 139, 150, 151, 150, 148, 127, 115, 87, 26, 21, 28, 40, 51, - 57, 71, 72, 83, 83, 68, 103, 114, 234, 245, 241, 107, 99, 111, 126, 138, - 146, 159, 171, 170, 182, 136, 48, 30, 25, 26, 28, 16, 56, 84, 197, 199, - 189, 132, 157, 158, 158, 140, 131, 131, 128, 124, 115, 48, 42, 52, 72, 68, - 67, 72, 67, 88, 213, 210, 189, 116, 114, 128, 140, 151, 155, 146, 148, 148, - 155, 155, 162, 171, 166, 163, 163, 148, 87, 30, 17, 14, 16, 17, 21, 21, - 22, 22, 22, 22, 25, 25, 37, 36, 48, 60, 75, 119, 208, 237, 240, 242, - 242, 244, 241, 242, 244, 244, 242, 241, 237, 237, 234, 232, 233, 233, 229, 224, - 170, 167, 185, 187, 193, 177, 187, 181, 178, 174, 163, 148, 135, 140, 91, 29, - 32, 37, 45, 42, 56, 48, 42, 34, 28, 32, 38, 40, 46, 65, 103, 194, - 201, 170, 107, 107, 116, 132, 138, 151, 166, 166, 163, 166, 166, 163, 166, 170, - 163, 158, 140, 80, 21, 16, 9, 8, 5, 6, 5, 8, 8, 18, 24, 17, - 18, 18, 24, 33, 24, 24, 14, 17, 32, 45, 142, 163, 139, 119, 119, 135, - 157, 161, 169, 174, 179, 186, 186, 186, 134, 76, 68, 64, 92, 148, 213, 209, - 218, 212, 175, 165, 170, 154, 158, 158, 153, 154, 130, 120, 25, 14, 12, 12, - 34, 42, 165, 157, 157, 136, 193, 225, 232, 157, 114, 108, 128, 144, 157, 162, - 165, 166, 158, 162, 158, 140, 135, 135, 128, 64, 32, 37, 57, 73, 103, 115, - 119, 115, 87, 104, 146, 167, 162, 167, 177, 178, 171, 170, 174, 157, 132, 45, - 99, 183, 170, 169, 155, 157, 157, 128, 111, 95, 42, 148, 161, 151, 148, 142, - 154, 146, 144, 246, 234, 234, 106, 93, 107, 131, 136, 151, 166, 173, 170, 165, - 161, 146, 135, 130, 32, 24, 25, 57, 67, 79, 106, 92, 106, 88, 99, 64, - 131, 134, 143, 217, 218, 214, 136, 115, 122, 131, 142, 165, 161, 166, 179, 183, - 182, 183, 182, 175, 173, 128, 63, 52, 53, 60, 85, 167, 202, 189, 162, 163, - 179, 194, 195, 198, 199, 202, 202, 197, 189, 177, 138, 75, 49, 46, 45, 40, - 57, 84, 116, 127, 208, 210, 186, 169, 189, 191, 177, 190, 173, 166, 139, 130, - 120, 111, 67, 63, 85, 89, 120, 108, 107, 131, 134, 147, 127, 138, 151, 175, - 230, 244, 244, 245, 250, 233, 187, 139, 116, 112, 111, 114, 126, 80, 60, 57, - 60, 69, 115, 120, 128, 158, 178, 185, 175, 131, 130, 118, 97, 87, 112, 111, - 93, 95, 91, 89, 85, 107, 123, 84, 123, 153, 148, 151, 104, 135, 155, 158, - 135, 128, 112, 96, 142, 147, 157, 154, 157, 146, 147, 144, 131, 128, 92, 0, - 108, 107, 111, 118, 108, 104, 108, 88, 72, 68, 38, 116, 116, 112, 116, 244, - 244, 241, 104, 100, 112, 135, 144, 157, 166, 173, 171, 177, 166, 162, 159, 143, - 135, 134, 123, 10, 18, 38, 53, 84, 81, 89, 92, 95, 100, 97, 104, 92, - 102, 135, 122, 116, 115, 119, 124, 114, 114, 122, 155, 165, 208, 195, 147, 116, - 99, 92, 93, 91, 91, 92, 85, 208, 208, 179, 124, 128, 135, 138, 134, 140, - 155, 147, 154, 126, 116, 85, 28, 22, 34, 46, 72, 80, 84, 85, 91, 59, - 87, 122, 158, 236, 244, 238, 114, 100, 112, 127, 139, 146, 163, 171, 169, 162, - 118, 42, 30, 21, 25, 32, 18, 63, 95, 205, 205, 197, 161, 154, 154, 159, - 142, 146, 134, 128, 131, 119, 45, 42, 41, 60, 72, 75, 68, 68, 85, 214, - 212, 197, 115, 114, 122, 136, 147, 154, 154, 154, 169, 173, 171, 173, 174, 165, - 163, 150, 92, 25, 13, 14, 16, 17, 26, 22, 28, 28, 28, 29, 29, 38, - 40, 44, 33, 49, 64, 107, 224, 240, 238, 244, 242, 240, 230, 220, 199, 197, - 186, 189, 193, 204, 206, 209, 220, 222, 226, 222, 225, 213, 175, 201, 199, 209, - 209, 199, 181, 185, 179, 170, 153, 140, 135, 112, 57, 26, 28, 59, 53, 59, - 73, 73, 68, 61, 69, 76, 77, 77, 63, 111, 195, 204, 187, 108, 107, 118, - 131, 143, 154, 166, 170, 171, 169, 169, 169, 171, 169, 165, 140, 80, 20, 14, - 9, 8, 9, 12, 8, 9, 17, 9, 24, 37, 45, 37, 51, 48, 49, 53, - 57, 48, 49, 26, 49, 127, 162, 158, 118, 115, 130, 148, 159, 163, 171, 177, - 182, 189, 194, 181, 120, 59, 83, 106, 178, 213, 212, 213, 198, 183, 170, 165, - 161, 165, 158, 154, 154, 131, 122, 17, 12, 13, 22, 20, 6, 166, 161, 155, - 153, 161, 224, 222, 186, 120, 108, 123, 146, 155, 161, 165, 161, 162, 158, 146, - 128, 135, 134, 128, 87, 37, 38, 65, 76, 116, 132, 118, 114, 71, 147, 174, - 181, 178, 171, 190, 186, 186, 179, 182, 148, 128, 37, 120, 189, 179, 175, 174, - 165, 151, 143, 104, 89, 46, 142, 159, 150, 151, 148, 153, 147, 148, 241, 229, - 234, 102, 92, 107, 131, 139, 151, 166, 171, 173, 162, 161, 147, 138, 131, 32, - 26, 29, 59, 57, 84, 102, 92, 93, 87, 107, 49, 147, 135, 173, 224, 221, - 217, 123, 114, 120, 140, 143, 154, 159, 173, 183, 185, 183, 182, 179, 174, 165, - 100, 52, 48, 52, 59, 89, 148, 205, 201, 167, 157, 175, 182, 194, 201, 204, - 205, 204, 204, 197, 178, 167, 95, 55, 44, 46, 41, 73, 102, 118, 132, 204, - 216, 201, 174, 190, 191, 186, 190, 175, 174, 144, 135, 126, 126, 84, 61, 80, - 83, 84, 99, 131, 126, 131, 127, 134, 132, 151, 213, 245, 244, 246, 248, 222, - 163, 119, 115, 114, 118, 138, 126, 75, 55, 49, 57, 49, 68, 115, 183, 195, - 189, 163, 170, 170, 174, 131, 131, 122, 99, 64, 97, 99, 108, 96, 95, 95, - 99, 88, 89, 165, 162, 158, 153, 150, 144, 136, 144, 128, 114, 95, 119, 161, - 159, 151, 150, 144, 148, 148, 155, 144, 142, 106, 29, 115, 104, 93, 87, 85, - 91, 95, 107, 83, 63, 41, 116, 127, 119, 144, 245, 244, 238, 107, 100, 114, - 135, 144, 154, 165, 171, 173, 175, 165, 161, 142, 131, 134, 134, 122, 13, 22, - 38, 71, 77, 95, 95, 103, 87, 92, 97, 87, 57, 106, 132, 124, 114, 110, - 119, 115, 118, 119, 179, 228, 216, 218, 208, 174, 119, 103, 85, 103, 91, 87, - 92, 83, 206, 208, 195, 126, 128, 138, 144, 138, 139, 147, 140, 139, 126, 120, - 77, 28, 22, 42, 57, 75, 76, 83, 96, 73, 57, 85, 123, 163, 236, 244, - 240, 120, 104, 115, 128, 144, 151, 165, 171, 166, 158, 88, 40, 26, 24, 28, - 33, 18, 69, 104, 204, 208, 204, 128, 150, 153, 158, 128, 135, 138, 128, 130, - 116, 45, 37, 41, 55, 60, 67, 75, 72, 87, 220, 214, 199, 114, 114, 119, - 132, 147, 155, 159, 171, 175, 178, 179, 175, 171, 169, 154, 89, 28, 13, 17, - 17, 17, 24, 24, 34, 42, 45, 46, 42, 45, 41, 45, 51, 41, 53, 80, - 175, 240, 240, 241, 237, 232, 197, 177, 154, 153, 151, 155, 158, 162, 167, 171, - 175, 179, 183, 186, 197, 198, 206, 201, 202, 199, 199, 201, 202, 199, 191, 181, - 171, 157, 148, 131, 122, 77, 30, 38, 53, 59, 55, 65, 51, 60, 69, 71, - 71, 59, 56, 56, 97, 199, 208, 197, 110, 107, 116, 132, 142, 158, 166, 170, - 170, 171, 170, 173, 170, 169, 153, 99, 29, 16, 9, 12, 12, 12, 13, 13, - 22, 18, 12, 40, 49, 53, 51, 53, 42, 40, 34, 44, 46, 56, 12, 51, - 107, 146, 170, 132, 112, 122, 142, 153, 159, 166, 173, 179, 186, 199, 198, 187, - 139, 114, 153, 208, 206, 214, 212, 195, 197, 178, 183, 169, 165, 163, 157, 154, - 138, 122, 24, 12, 5, 30, 5, 59, 146, 155, 155, 146, 147, 214, 226, 208, - 122, 106, 118, 143, 154, 159, 161, 162, 159, 155, 136, 136, 135, 132, 127, 103, - 40, 42, 67, 88, 118, 126, 111, 123, 83, 151, 190, 186, 189, 187, 183, 186, - 186, 187, 171, 144, 130, 36, 127, 182, 194, 204, 186, 171, 157, 148, 114, 92, - 51, 134, 154, 151, 159, 150, 148, 142, 153, 241, 236, 232, 93, 93, 106, 128, - 136, 148, 165, 173, 170, 165, 161, 150, 139, 130, 32, 28, 25, 60, 71, 84, - 104, 95, 95, 87, 103, 51, 136, 142, 175, 229, 226, 220, 124, 120, 119, 128, - 142, 158, 162, 175, 182, 186, 186, 182, 179, 171, 147, 67, 49, 44, 52, 77, - 83, 135, 198, 206, 175, 154, 157, 177, 187, 198, 204, 204, 205, 205, 201, 197, - 181, 131, 63, 48, 44, 52, 76, 106, 122, 128, 201, 221, 213, 178, 174, 189, - 177, 189, 175, 169, 151, 138, 130, 134, 97, 57, 67, 83, 80, 96, 120, 140, - 143, 135, 126, 146, 167, 233, 238, 244, 245, 228, 148, 116, 116, 118, 123, 142, - 144, 92, 63, 48, 41, 53, 52, 73, 131, 199, 194, 167, 169, 174, 171, 178, - 142, 135, 118, 111, 89, 61, 85, 83, 92, 83, 93, 95, 83, 37, 154, 166, - 143, 159, 153, 159, 166, 162, 143, 114, 93, 112, 165, 155, 153, 146, 144, 148, - 147, 144, 146, 151, 65, 30, 81, 106, 100, 88, 88, 88, 91, 99, 68, 63, - 38, 118, 128, 115, 131, 242, 245, 241, 111, 102, 112, 134, 146, 151, 165, 171, - 174, 178, 165, 161, 136, 130, 131, 132, 120, 13, 22, 26, 42, 79, 92, 107, - 103, 92, 106, 89, 95, 61, 93, 136, 115, 127, 115, 107, 120, 115, 126, 208, - 228, 213, 217, 195, 153, 115, 89, 75, 85, 92, 87, 93, 85, 213, 210, 202, - 130, 130, 136, 140, 143, 144, 134, 147, 136, 123, 119, 65, 28, 24, 41, 63, - 75, 75, 81, 106, 76, 52, 84, 124, 159, 234, 242, 240, 123, 106, 116, 127, - 140, 148, 166, 169, 167, 147, 67, 33, 25, 25, 29, 38, 24, 69, 102, 205, - 209, 233, 130, 150, 150, 150, 140, 134, 130, 128, 124, 114, 40, 37, 34, 56, - 56, 67, 65, 75, 88, 224, 221, 209, 114, 111, 120, 131, 144, 155, 159, 171, - 177, 178, 177, 173, 169, 162, 115, 37, 14, 17, 17, 14, 18, 24, 36, 46, - 52, 52, 45, 46, 45, 46, 49, 49, 52, 59, 100, 220, 237, 237, 230, 217, - 181, 147, 135, 138, 143, 151, 161, 170, 178, 190, 199, 202, 206, 208, 205, 189, - 193, 198, 199, 202, 205, 209, 208, 209, 206, 185, 181, 166, 157, 150, 135, 131, - 97, 37, 36, 44, 51, 68, 60, 61, 65, 48, 45, 64, 72, 71, 73, 87, - 201, 213, 202, 112, 108, 118, 132, 143, 157, 166, 170, 171, 171, 175, 174, 170, - 161, 119, 42, 20, 10, 12, 14, 16, 13, 14, 17, 17, 17, 8, 44, 52, - 45, 40, 41, 46, 41, 34, 48, 51, 48, 14, 53, 96, 120, 166, 144, 116, - 112, 131, 140, 158, 165, 171, 177, 186, 193, 204, 201, 199, 185, 208, 213, 213, - 214, 216, 199, 187, 185, 178, 171, 173, 163, 157, 155, 139, 127, 18, 12, 9, - 20, 6, 1, 169, 146, 148, 143, 124, 175, 225, 217, 130, 104, 114, 132, 148, - 155, 161, 162, 162, 159, 147, 131, 136, 130, 131, 115, 46, 45, 65, 75, 112, - 130, 116, 135, 81, 120, 179, 187, 185, 183, 183, 185, 190, 181, 169, 148, 134, - 42, 157, 194, 218, 218, 226, 197, 167, 153, 131, 91, 49, 135, 154, 158, 151, - 147, 148, 142, 148, 240, 241, 225, 99, 92, 103, 122, 135, 148, 166, 171, 171, - 165, 162, 151, 140, 131, 33, 28, 33, 61, 69, 79, 89, 107, 108, 76, 99, - 69, 131, 139, 157, 230, 226, 224, 131, 122, 128, 128, 146, 143, 166, 171, 185, - 178, 186, 183, 173, 169, 130, 56, 45, 37, 52, 65, 85, 119, 193, 209, 191, - 155, 153, 171, 183, 194, 197, 204, 205, 208, 205, 201, 186, 167, 79, 48, 42, - 49, 79, 106, 122, 130, 186, 225, 218, 187, 187, 185, 189, 189, 179, 163, 151, - 140, 131, 123, 111, 64, 61, 80, 79, 91, 126, 146, 123, 123, 136, 140, 201, - 237, 241, 245, 234, 159, 119, 119, 123, 130, 146, 144, 150, 81, 60, 46, 33, - 59, 57, 88, 112, 205, 201, 169, 170, 174, 166, 169, 169, 135, 128, 124, 99, - 60, 65, 81, 85, 81, 84, 95, 92, 64, 159, 173, 148, 159, 154, 158, 166, - 151, 138, 132, 81, 131, 166, 158, 143, 147, 144, 154, 150, 148, 150, 144, 92, - 0, 102, 102, 91, 85, 89, 106, 110, 93, 65, 63, 34, 108, 124, 110, 130, - 245, 242, 232, 110, 100, 114, 132, 142, 157, 165, 169, 174, 175, 162, 157, 146, - 136, 131, 130, 116, 14, 24, 29, 49, 80, 99, 106, 102, 93, 103, 91, 89, - 57, 103, 126, 110, 118, 122, 116, 114, 112, 130, 220, 226, 230, 226, 189, 127, - 102, 72, 65, 87, 81, 85, 89, 88, 217, 213, 209, 132, 130, 140, 142, 147, - 142, 135, 153, 134, 119, 115, 55, 26, 22, 38, 63, 75, 72, 81, 93, 81, - 46, 103, 120, 126, 232, 241, 237, 122, 107, 116, 126, 139, 147, 167, 167, 165, - 144, 49, 28, 24, 26, 30, 33, 21, 67, 103, 206, 208, 209, 148, 140, 144, - 143, 139, 132, 131, 124, 122, 107, 36, 32, 33, 52, 57, 63, 68, 69, 83, - 229, 224, 216, 116, 111, 122, 132, 142, 154, 161, 171, 177, 178, 173, 161, 166, - 140, 53, 14, 17, 18, 16, 25, 26, 26, 55, 60, 56, 53, 52, 55, 51, - 52, 59, 49, 46, 76, 183, 217, 233, 220, 197, 162, 138, 126, 134, 144, 159, - 171, 181, 187, 197, 206, 216, 218, 221, 222, 221, 218, 202, 197, 201, 194, 190, - 189, 213, 212, 210, 187, 182, 163, 159, 153, 139, 131, 107, 53, 34, 36, 60, - 59, 69, 61, 57, 48, 55, 40, 51, 67, 45, 73, 198, 217, 209, 112, 108, - 118, 134, 142, 158, 165, 169, 171, 173, 175, 170, 166, 140, 56, 18, 14, 13, - 16, 16, 18, 18, 17, 14, 17, 17, 8, 48, 52, 38, 40, 38, 42, 32, - 37, 55, 41, 55, 13, 51, 80, 102, 130, 163, 123, 112, 118, 135, 153, 163, - 169, 173, 181, 190, 199, 206, 206, 209, 212, 208, 212, 224, 213, 195, 189, 189, - 179, 174, 165, 165, 157, 155, 138, 124, 16, 12, 5, 12, 63, 72, 162, 135, - 144, 140, 135, 153, 213, 220, 144, 104, 112, 127, 144, 153, 157, 159, 166, 167, - 161, 150, 124, 124, 128, 122, 57, 44, 67, 69, 110, 127, 115, 118, 114, 85, - 165, 186, 187, 190, 187, 187, 186, 182, 165, 153, 139, 57, 195, 212, 228, 212, - 205, 201, 214, 165, 142, 93, 52, 130, 148, 147, 139, 142, 146, 135, 138, 241, - 241, 230, 103, 95, 99, 116, 132, 150, 165, 174, 173, 165, 162, 150, 140, 130, - 34, 28, 33, 65, 68, 77, 92, 108, 104, 102, 93, 72, 124, 139, 147, 230, - 229, 225, 130, 110, 119, 128, 135, 139, 155, 166, 178, 186, 187, 183, 170, 161, - 110, 49, 44, 36, 52, 77, 92, 115, 186, 217, 201, 159, 148, 161, 178, 187, - 197, 197, 202, 206, 208, 205, 198, 183, 108, 49, 44, 49, 79, 107, 115, 123, - 166, 225, 222, 191, 173, 183, 190, 179, 167, 146, 140, 142, 135, 124, 122, 79, - 61, 75, 75, 91, 124, 147, 132, 127, 132, 131, 209, 240, 242, 242, 193, 126, - 120, 127, 132, 132, 148, 151, 153, 76, 48, 44, 36, 52, 57, 77, 115, 208, - 209, 187, 167, 173, 170, 167, 171, 139, 136, 122, 96, 53, 56, 84, 71, 80, - 85, 100, 71, 97, 154, 159, 151, 146, 144, 151, 148, 150, 136, 111, 64, 139, - 165, 158, 144, 151, 144, 151, 151, 148, 142, 140, 83, 0, 106, 99, 96, 85, - 91, 76, 68, 65, 75, 64, 34, 111, 123, 116, 126, 241, 241, 226, 106, 100, - 114, 135, 146, 155, 165, 170, 169, 177, 175, 163, 155, 139, 124, 126, 114, 14, - 24, 34, 63, 79, 93, 106, 106, 110, 107, 88, 95, 57, 97, 127, 110, 107, - 118, 104, 118, 112, 138, 222, 233, 230, 179, 128, 118, 80, 64, 69, 80, 79, - 77, 84, 88, 218, 220, 216, 135, 130, 139, 146, 159, 148, 147, 150, 122, 118, - 111, 41, 25, 24, 37, 63, 71, 73, 81, 95, 81, 41, 112, 122, 104, 228, - 240, 236, 123, 106, 116, 127, 142, 148, 167, 166, 161, 136, 42, 26, 25, 29, - 28, 30, 24, 61, 111, 210, 216, 208, 143, 138, 140, 146, 139, 134, 132, 132, - 115, 104, 32, 29, 29, 48, 51, 53, 71, 81, 83, 229, 229, 220, 118, 112, - 123, 131, 143, 155, 162, 166, 178, 173, 167, 165, 155, 100, 28, 16, 18, 18, - 18, 17, 21, 26, 49, 64, 84, 83, 81, 79, 68, 57, 46, 59, 68, 131, - 220, 228, 213, 179, 144, 127, 126, 139, 148, 161, 174, 181, 190, 197, 204, 213, - 204, 154, 123, 150, 198, 222, 220, 205, 198, 193, 201, 202, 213, 209, 206, 186, - 178, 166, 159, 150, 135, 128, 114, 72, 36, 29, 51, 55, 68, 72, 57, 46, - 53, 48, 55, 68, 32, 87, 205, 220, 216, 115, 108, 120, 134, 142, 158, 165, - 170, 173, 174, 175, 167, 155, 99, 29, 18, 16, 16, 17, 21, 22, 18, 17, - 17, 18, 20, 12, 48, 57, 45, 40, 30, 36, 37, 52, 48, 38, 40, 12, - 52, 69, 88, 110, 162, 157, 114, 106, 127, 147, 159, 167, 173, 179, 190, 191, - 197, 205, 202, 204, 216, 220, 213, 202, 194, 191, 186, 181, 173, 166, 166, 157, - 154, 136, 123, 13, 9, 9, 17, 5, 10, 155, 166, 144, 136, 134, 119, 175, - 218, 175, 106, 108, 119, 136, 147, 153, 159, 169, 163, 165, 155, 124, 120, 130, - 126, 73, 44, 56, 76, 99, 127, 124, 128, 110, 84, 161, 185, 190, 186, 189, - 187, 187, 185, 169, 157, 135, 57, 201, 218, 225, 217, 220, 202, 195, 162, 138, - 88, 56, 124, 154, 147, 154, 142, 146, 135, 155, 241, 241, 233, 108, 95, 97, - 111, 138, 148, 165, 171, 171, 166, 161, 150, 142, 132, 37, 32, 25, 65, 72, - 67, 80, 107, 110, 114, 76, 48, 120, 134, 148, 230, 228, 221, 122, 108, 119, - 130, 126, 130, 144, 161, 174, 182, 181, 179, 165, 151, 84, 44, 42, 33, 55, - 88, 87, 112, 173, 217, 208, 163, 146, 151, 171, 182, 189, 194, 195, 199, 206, - 208, 199, 190, 151, 60, 46, 44, 75, 104, 114, 124, 150, 224, 225, 194, 174, - 185, 185, 177, 155, 144, 136, 143, 142, 127, 127, 92, 59, 67, 75, 87, 126, - 150, 128, 116, 119, 138, 217, 234, 242, 238, 159, 120, 127, 134, 138, 142, 151, - 154, 158, 72, 49, 42, 28, 53, 57, 77, 108, 208, 214, 206, 173, 173, 173, - 169, 174, 144, 140, 120, 93, 46, 49, 65, 79, 71, 83, 85, 83, 83, 161, - 158, 153, 147, 150, 151, 147, 157, 132, 99, 81, 108, 151, 157, 147, 150, 150, - 148, 150, 148, 148, 138, 83, 24, 103, 96, 96, 81, 88, 95, 71, 72, 84, - 56, 36, 120, 124, 116, 131, 240, 236, 179, 102, 100, 114, 134, 142, 151, 158, - 166, 169, 177, 177, 171, 161, 146, 126, 126, 118, 16, 26, 37, 72, 71, 95, - 99, 103, 108, 96, 92, 83, 55, 110, 119, 108, 111, 115, 110, 118, 116, 144, - 233, 236, 229, 150, 118, 102, 69, 60, 65, 80, 76, 76, 88, 97, 216, 220, - 216, 136, 130, 143, 166, 163, 163, 158, 148, 119, 118, 111, 37, 26, 25, 40, - 61, 72, 73, 83, 84, 68, 42, 79, 119, 131, 226, 238, 237, 126, 106, 118, - 126, 140, 148, 169, 167, 162, 128, 40, 26, 25, 30, 30, 33, 25, 61, 107, - 209, 214, 229, 122, 135, 136, 142, 134, 138, 142, 135, 114, 92, 30, 29, 30, - 49, 49, 49, 67, 64, 84, 234, 225, 218, 116, 112, 123, 134, 144, 157, 163, - 166, 177, 171, 165, 163, 142, 56, 18, 18, 18, 18, 24, 26, 22, 56, 61, - 79, 73, 75, 80, 88, 69, 51, 45, 56, 89, 204, 225, 222, 195, 135, 114, - 126, 136, 148, 161, 173, 179, 187, 190, 201, 206, 208, 111, 72, 67, 77, 112, - 161, 224, 213, 208, 194, 202, 210, 214, 212, 199, 182, 179, 171, 162, 150, 135, - 123, 118, 84, 41, 45, 51, 56, 63, 61, 56, 45, 56, 53, 51, 67, 46, - 72, 218, 221, 218, 116, 111, 122, 135, 143, 157, 165, 169, 171, 175, 170, 162, - 139, 59, 18, 14, 17, 20, 25, 22, 21, 17, 17, 22, 21, 22, 13, 53, - 61, 46, 44, 49, 44, 48, 53, 33, 40, 41, 10, 49, 65, 85, 89, 138, - 171, 122, 104, 123, 139, 157, 165, 173, 178, 185, 191, 194, 194, 193, 193, 197, - 204, 206, 202, 198, 198, 187, 178, 174, 165, 166, 158, 155, 138, 118, 12, 10, - 6, 25, 9, 9, 148, 147, 144, 130, 134, 122, 153, 206, 205, 111, 107, 115, - 124, 143, 154, 161, 170, 166, 167, 155, 120, 122, 130, 127, 100, 48, 51, 60, - 72, 95, 135, 124, 112, 79, 138, 186, 187, 186, 189, 186, 189, 185, 167, 153, - 144, 45, 212, 224, 225, 218, 202, 181, 155, 138, 127, 84, 55, 95, 148, 154, - 165, 138, 143, 136, 146, 242, 242, 234, 108, 97, 95, 114, 131, 144, 162, 170, - 171, 167, 158, 147, 143, 132, 37, 33, 38, 69, 75, 89, 93, 93, 103, 106, - 89, 72, 110, 130, 142, 229, 236, 225, 130, 118, 118, 123, 123, 126, 134, 147, - 162, 181, 181, 165, 163, 146, 69, 44, 38, 29, 53, 81, 85, 104, 163, 213, - 213, 178, 143, 144, 163, 174, 181, 187, 191, 194, 199, 204, 201, 190, 178, 87, - 45, 42, 75, 97, 114, 124, 142, 220, 225, 198, 173, 183, 187, 167, 150, 131, - 126, 130, 135, 130, 127, 107, 64, 59, 73, 81, 120, 139, 126, 116, 131, 140, - 216, 233, 241, 221, 144, 124, 131, 138, 136, 153, 157, 162, 165, 69, 49, 45, - 32, 53, 64, 71, 106, 208, 218, 214, 175, 174, 177, 170, 173, 147, 138, 120, - 92, 42, 44, 64, 64, 61, 71, 79, 32, 84, 154, 148, 151, 153, 153, 147, - 147, 162, 134, 93, 73, 140, 163, 146, 151, 153, 159, 163, 157, 146, 146, 144, - 63, 32, 79, 92, 93, 79, 85, 72, 71, 75, 68, 63, 37, 115, 123, 116, - 126, 237, 234, 165, 99, 97, 112, 122, 134, 144, 154, 165, 169, 179, 175, 171, - 161, 147, 126, 127, 119, 17, 28, 29, 52, 69, 80, 97, 103, 103, 97, 92, - 89, 53, 89, 116, 106, 107, 106, 104, 108, 116, 175, 244, 236, 220, 131, 114, - 95, 56, 59, 63, 76, 73, 75, 85, 96, 218, 220, 214, 136, 131, 142, 166, - 159, 163, 151, 153, 116, 118, 108, 38, 25, 25, 41, 61, 69, 75, 75, 79, - 69, 34, 80, 123, 128, 228, 238, 236, 123, 107, 114, 126, 142, 151, 169, 163, - 166, 127, 36, 25, 26, 34, 28, 42, 26, 57, 97, 206, 214, 210, 135, 130, - 132, 142, 136, 135, 138, 134, 112, 85, 28, 26, 29, 45, 48, 53, 61, 68, - 100, 233, 234, 221, 116, 111, 123, 134, 144, 158, 165, 167, 174, 169, 165, 161, - 112, 36, 18, 20, 21, 18, 22, 18, 16, 63, 67, 80, 95, 84, 71, 89, - 68, 61, 55, 64, 142, 216, 220, 212, 166, 111, 120, 134, 144, 159, 171, 174, - 185, 185, 194, 201, 209, 170, 80, 46, 33, 37, 55, 110, 204, 222, 213, 199, - 191, 213, 213, 210, 208, 193, 178, 173, 161, 148, 132, 118, 119, 93, 45, 44, - 45, 65, 56, 61, 69, 44, 55, 49, 59, 60, 36, 81, 218, 228, 218, 116, - 112, 122, 135, 140, 157, 165, 165, 169, 170, 165, 159, 112, 37, 17, 16, 21, - 24, 28, 25, 20, 18, 20, 25, 20, 22, 12, 49, 49, 56, 41, 52, 48, - 48, 48, 46, 41, 37, 14, 45, 61, 71, 72, 97, 162, 136, 103, 111, 134, - 151, 162, 170, 175, 182, 189, 197, 197, 198, 197, 195, 194, 198, 209, 199, 199, - 190, 182, 173, 167, 169, 158, 153, 136, 123, 13, 9, 6, 18, 12, 9, 136, - 134, 130, 132, 119, 119, 119, 173, 204, 136, 102, 107, 116, 140, 153, 159, 165, - 171, 163, 148, 128, 123, 131, 126, 116, 55, 56, 76, 72, 89, 128, 111, 130, - 89, 132, 169, 182, 190, 187, 190, 186, 179, 155, 155, 146, 52, 212, 229, 229, - 220, 167, 144, 127, 120, 103, 73, 55, 79, 132, 148, 159, 136, 135, 132, 148, - 241, 241, 230, 104, 95, 99, 119, 131, 142, 162, 167, 170, 165, 158, 148, 146, - 131, 40, 36, 38, 69, 75, 83, 83, 76, 99, 93, 95, 84, 91, 134, 155, - 233, 233, 226, 130, 120, 126, 122, 120, 124, 136, 151, 147, 157, 159, 154, 158, - 138, 53, 40, 36, 29, 49, 56, 79, 104, 134, 208, 213, 187, 140, 142, 154, - 167, 175, 177, 179, 186, 194, 201, 199, 195, 190, 114, 48, 41, 76, 89, 111, - 120, 132, 214, 225, 206, 177, 182, 187, 167, 158, 148, 147, 142, 127, 131, 123, - 114, 71, 59, 69, 67, 111, 131, 114, 111, 128, 134, 217, 236, 241, 190, 135, - 130, 135, 140, 138, 151, 157, 162, 165, 68, 46, 44, 30, 53, 61, 84, 102, - 208, 220, 220, 177, 178, 175, 166, 175, 150, 138, 123, 88, 42, 38, 46, 57, - 61, 67, 83, 52, 122, 155, 161, 157, 150, 158, 147, 151, 134, 134, 128, 67, - 134, 155, 163, 161, 167, 161, 158, 151, 157, 150, 136, 93, 0, 91, 93, 81, - 79, 76, 71, 68, 71, 69, 67, 36, 96, 122, 108, 127, 234, 229, 178, 103, - 102, 110, 114, 126, 135, 151, 163, 171, 175, 178, 165, 159, 143, 127, 132, 114, - 18, 28, 30, 52, 65, 81, 96, 100, 93, 106, 92, 87, 49, 91, 107, 110, - 97, 110, 108, 104, 124, 209, 240, 237, 216, 130, 114, 76, 55, 52, 61, 63, - 71, 65, 84, 92, 214, 220, 210, 134, 132, 144, 169, 163, 157, 151, 148, 119, - 118, 106, 33, 24, 28, 41, 57, 69, 72, 81, 80, 76, 30, 93, 118, 104, - 224, 237, 232, 122, 108, 119, 127, 142, 157, 169, 166, 163, 120, 41, 28, 25, - 22, 33, 38, 24, 48, 87, 206, 212, 202, 132, 128, 131, 142, 140, 130, 135, - 134, 114, 87, 25, 24, 22, 38, 46, 56, 59, 64, 87, 234, 228, 222, 116, - 111, 123, 135, 144, 158, 166, 169, 173, 163, 161, 148, 77, 22, 21, 22, 20, - 21, 28, 26, 16, 51, 69, 81, 89, 88, 72, 83, 71, 59, 55, 57, 166, - 212, 220, 202, 134, 107, 122, 135, 150, 163, 169, 181, 186, 190, 197, 202, 212, - 136, 53, 29, 28, 33, 51, 89, 167, 225, 214, 209, 186, 213, 217, 218, 209, - 197, 181, 173, 163, 148, 135, 123, 123, 108, 53, 45, 41, 45, 57, 61, 55, - 30, 53, 41, 71, 55, 45, 69, 212, 228, 226, 115, 110, 120, 134, 142, 155, - 166, 162, 170, 169, 163, 148, 84, 25, 18, 20, 21, 26, 24, 25, 25, 22, - 25, 24, 22, 22, 12, 49, 55, 40, 51, 52, 48, 49, 48, 48, 36, 34, - 6, 38, 52, 59, 72, 87, 128, 155, 118, 102, 122, 143, 159, 167, 177, 179, - 186, 193, 187, 186, 189, 199, 195, 190, 195, 208, 201, 191, 183, 177, 169, 170, - 159, 154, 143, 123, 8, 12, 8, 10, 16, 2, 127, 126, 126, 114, 104, 102, - 108, 142, 201, 185, 102, 106, 116, 139, 151, 158, 159, 158, 154, 150, 120, 122, - 123, 128, 131, 79, 55, 61, 69, 79, 122, 123, 126, 103, 104, 157, 169, 173, - 178, 167, 170, 171, 161, 158, 150, 64, 216, 230, 234, 198, 163, 126, 119, 123, - 93, 73, 60, 69, 88, 106, 120, 114, 135, 123, 136, 240, 240, 222, 104, 95, - 102, 116, 126, 138, 159, 170, 167, 165, 158, 146, 146, 130, 42, 38, 42, 65, - 75, 60, 84, 84, 69, 96, 104, 80, 85, 128, 147, 233, 233, 225, 131, 107, - 114, 130, 130, 128, 139, 142, 139, 151, 150, 153, 154, 134, 52, 41, 40, 29, - 51, 63, 83, 107, 120, 199, 214, 195, 147, 139, 144, 159, 167, 169, 173, 179, - 187, 194, 197, 194, 191, 148, 60, 44, 68, 85, 104, 110, 122, 205, 226, 214, - 178, 178, 187, 174, 163, 158, 151, 148, 144, 127, 120, 123, 91, 59, 68, 65, - 104, 131, 150, 124, 122, 124, 198, 237, 241, 185, 130, 135, 142, 144, 140, 151, - 161, 165, 166, 68, 48, 41, 30, 44, 57, 76, 107, 216, 221, 221, 177, 177, - 178, 170, 174, 151, 138, 126, 89, 41, 38, 44, 53, 77, 57, 87, 51, 115, - 128, 118, 127, 128, 130, 127, 131, 127, 127, 95, 53, 131, 146, 150, 143, 155, - 147, 139, 136, 148, 144, 126, 61, 0, 92, 76, 76, 69, 81, 72, 85, 69, - 77, 61, 34, 99, 118, 115, 124, 238, 237, 220, 106, 102, 106, 115, 114, 135, - 155, 165, 177, 179, 170, 159, 148, 132, 127, 124, 111, 22, 29, 33, 48, 68, - 79, 92, 96, 100, 102, 88, 84, 51, 89, 110, 108, 100, 102, 106, 108, 136, - 226, 238, 241, 217, 131, 110, 67, 51, 45, 71, 56, 68, 69, 72, 83, 214, - 213, 209, 130, 132, 143, 162, 157, 155, 146, 138, 119, 115, 100, 33, 22, 26, - 40, 51, 68, 71, 76, 96, 75, 28, 104, 118, 111, 220, 236, 228, 126, 110, - 118, 128, 144, 157, 163, 165, 166, 134, 49, 28, 28, 33, 33, 40, 25, 45, - 81, 206, 202, 199, 124, 131, 130, 142, 132, 134, 131, 134, 114, 81, 22, 24, - 21, 46, 42, 45, 48, 61, 83, 233, 230, 224, 118, 111, 120, 131, 144, 158, - 166, 171, 171, 161, 159, 144, 57, 21, 21, 21, 22, 20, 20, 29, 16, 69, - 75, 76, 68, 63, 71, 69, 68, 61, 51, 59, 173, 210, 202, 190, 118, 110, - 122, 135, 148, 170, 170, 183, 189, 189, 197, 202, 205, 122, 48, 33, 28, 28, - 41, 68, 142, 226, 218, 212, 194, 209, 213, 214, 213, 205, 182, 178, 163, 154, - 136, 126, 120, 114, 75, 48, 51, 46, 51, 63, 55, 44, 41, 38, 37, 36, - 34, 65, 198, 226, 226, 118, 110, 120, 134, 139, 155, 162, 161, 169, 166, 157, - 139, 63, 21, 18, 20, 24, 26, 29, 25, 24, 24, 22, 22, 22, 26, 16, - 42, 49, 51, 56, 52, 51, 51, 49, 51, 32, 36, 6, 37, 46, 60, 65, - 79, 87, 162, 136, 102, 112, 139, 154, 165, 174, 181, 183, 185, 186, 183, 186, - 190, 201, 201, 189, 197, 199, 195, 189, 178, 169, 171, 161, 157, 142, 123, 8, - 9, 8, 18, 13, 5, 127, 102, 114, 126, 92, 88, 84, 95, 146, 209, 128, - 102, 112, 128, 144, 150, 158, 159, 151, 132, 119, 120, 120, 124, 127, 110, 63, - 65, 73, 76, 91, 100, 99, 106, 124, 146, 127, 130, 138, 131, 134, 127, 162, - 157, 146, 56, 195, 230, 236, 182, 138, 124, 119, 116, 92, 67, 59, 72, 76, - 87, 92, 91, 92, 130, 136, 241, 238, 229, 108, 88, 96, 114, 115, 135, 151, - 162, 167, 165, 158, 144, 143, 132, 42, 38, 24, 61, 65, 68, 76, 57, 53, - 75, 89, 83, 75, 124, 136, 232, 233, 232, 127, 102, 114, 123, 131, 143, 144, - 140, 136, 142, 136, 151, 150, 128, 56, 38, 40, 24, 49, 52, 81, 91, 114, - 193, 214, 198, 147, 136, 139, 153, 159, 165, 167, 174, 182, 190, 193, 191, 189, - 169, 81, 48, 56, 81, 96, 108, 123, 193, 229, 220, 183, 173, 187, 190, 161, - 170, 165, 155, 150, 144, 130, 122, 116, 71, 64, 61, 96, 130, 140, 115, 107, - 128, 191, 225, 240, 171, 128, 138, 144, 147, 139, 153, 169, 171, 173, 75, 55, - 38, 29, 42, 55, 89, 116, 222, 225, 222, 182, 179, 178, 173, 174, 155, 142, - 128, 87, 38, 41, 41, 44, 48, 46, 60, 71, 71, 103, 103, 107, 108, 116, - 110, 100, 124, 123, 60, 61, 51, 122, 110, 96, 89, 116, 95, 83, 77, 110, - 76, 14, 51, 75, 64, 45, 48, 56, 48, 44, 44, 61, 49, 37, 89, 104, - 118, 135, 240, 234, 228, 107, 106, 110, 114, 122, 136, 162, 165, 170, 177, 173, - 162, 147, 120, 130, 131, 108, 25, 33, 34, 41, 52, 61, 79, 89, 92, 89, - 85, 84, 46, 92, 99, 104, 95, 96, 99, 111, 155, 242, 245, 241, 198, 127, - 111, 60, 48, 44, 59, 67, 57, 63, 73, 80, 216, 218, 212, 135, 134, 142, - 155, 157, 155, 154, 119, 120, 115, 97, 28, 24, 24, 42, 45, 61, 69, 73, - 79, 64, 38, 60, 106, 107, 212, 232, 229, 126, 112, 120, 130, 146, 157, 169, - 167, 166, 142, 55, 30, 29, 32, 26, 34, 24, 63, 96, 199, 210, 210, 131, - 128, 126, 135, 135, 132, 130, 126, 111, 73, 24, 20, 21, 38, 32, 37, 46, - 61, 77, 233, 232, 228, 120, 114, 119, 127, 144, 159, 167, 171, 171, 161, 159, - 142, 49, 21, 24, 24, 37, 28, 22, 30, 22, 65, 73, 63, 71, 68, 65, - 61, 69, 60, 53, 56, 171, 205, 202, 166, 104, 111, 120, 131, 151, 167, 170, - 177, 181, 189, 193, 199, 212, 114, 46, 36, 32, 32, 32, 52, 134, 229, 222, - 214, 194, 199, 213, 212, 220, 212, 195, 177, 166, 154, 144, 135, 119, 119, 88, - 53, 56, 37, 40, 45, 37, 45, 29, 17, 26, 20, 30, 68, 182, 221, 228, - 116, 110, 122, 134, 139, 155, 163, 163, 166, 163, 155, 132, 55, 25, 18, 24, - 32, 28, 32, 25, 28, 28, 29, 28, 30, 28, 17, 22, 41, 61, 28, 32, - 42, 44, 40, 45, 37, 33, 6, 36, 37, 42, 40, 65, 69, 100, 151, 104, - 100, 130, 147, 161, 170, 177, 178, 182, 181, 185, 186, 189, 191, 199, 198, 190, - 195, 194, 190, 182, 173, 171, 162, 158, 144, 124, 9, 9, 6, 10, 4, 2, - 87, 99, 104, 104, 110, 118, 120, 134, 97, 181, 190, 111, 107, 112, 132, 144, - 148, 154, 148, 136, 126, 120, 112, 126, 130, 130, 80, 65, 61, 61, 63, 63, - 60, 59, 65, 68, 71, 84, 89, 97, 104, 107, 131, 153, 154, 59, 201, 232, - 232, 170, 130, 118, 118, 115, 91, 64, 46, 55, 73, 72, 72, 79, 80, 119, - 111, 241, 237, 226, 107, 99, 95, 114, 128, 127, 144, 159, 170, 165, 155, 144, - 146, 126, 42, 46, 45, 56, 60, 71, 68, 72, 73, 93, 65, 69, 76, 119, - 140, 232, 234, 225, 131, 114, 116, 126, 130, 143, 136, 139, 135, 138, 136, 150, - 146, 124, 52, 49, 38, 32, 73, 91, 88, 104, 110, 186, 210, 206, 153, 132, - 136, 148, 155, 159, 166, 170, 175, 183, 189, 190, 190, 181, 104, 51, 45, 65, - 88, 102, 115, 175, 229, 224, 186, 173, 179, 189, 186, 154, 170, 161, 157, 144, - 144, 131, 126, 95, 61, 67, 89, 106, 111, 99, 111, 123, 162, 230, 238, 171, - 132, 139, 148, 146, 146, 161, 171, 175, 179, 81, 60, 48, 36, 67, 85, 93, - 127, 226, 228, 226, 189, 179, 182, 174, 174, 159, 144, 126, 95, 34, 33, 36, - 13, 13, 9, 12, 13, 34, 36, 16, 14, 32, 33, 25, 25, 36, 41, 36, - 61, 30, 30, 18, 24, 29, 32, 9, 22, 30, 34, 6, 24, 76, 22, 51, - 64, 71, 75, 84, 84, 87, 85, 88, 40, 118, 112, 120, 143, 238, 240, 229, - 107, 106, 112, 118, 127, 142, 158, 161, 166, 170, 174, 161, 146, 124, 130, 127, - 103, 29, 34, 34, 42, 53, 53, 55, 57, 60, 72, 68, 56, 46, 85, 91, - 84, 81, 93, 107, 107, 202, 242, 246, 238, 173, 122, 107, 53, 45, 38, 36, - 40, 44, 51, 71, 79, 221, 224, 208, 131, 127, 124, 147, 154, 153, 146, 118, - 110, 118, 89, 25, 22, 26, 36, 44, 55, 59, 59, 64, 57, 33, 41, 104, - 112, 206, 228, 228, 127, 114, 122, 130, 146, 155, 169, 171, 170, 148, 73, 34, - 29, 34, 24, 29, 44, 75, 124, 208, 214, 197, 128, 124, 123, 131, 131, 135, - 131, 123, 110, 67, 21, 18, 17, 25, 28, 30, 49, 63, 68, 233, 236, 230, - 118, 110, 118, 127, 144, 159, 167, 174, 170, 159, 157, 143, 46, 22, 22, 25, - 26, 37, 32, 24, 17, 44, 49, 44, 45, 56, 55, 46, 46, 55, 56, 61, - 159, 204, 187, 143, 99, 111, 118, 131, 150, 169, 177, 183, 178, 189, 190, 193, - 208, 136, 52, 37, 25, 33, 38, 61, 138, 226, 224, 218, 195, 183, 209, 213, - 213, 212, 198, 177, 169, 158, 153, 138, 118, 119, 102, 59, 61, 49, 41, 38, - 33, 12, 21, 17, 22, 20, 26, 80, 175, 229, 225, 118, 112, 123, 134, 139, - 155, 163, 163, 169, 162, 154, 134, 55, 22, 22, 29, 21, 20, 16, 14, 14, - 12, 10, 10, 10, 6, 17, 21, 13, 21, 18, 16, 12, 14, 24, 34, 34, - 25, 8, 37, 36, 38, 36, 34, 40, 72, 135, 120, 95, 123, 143, 157, 166, - 171, 174, 174, 173, 174, 175, 178, 187, 194, 202, 191, 191, 199, 191, 183, 173, - 173, 162, 159, 146, 127, 6, 6, 6, 10, 5, 4, 197, 191, 183, 179, 179, - 177, 179, 126, 138, 135, 194, 136, 104, 108, 115, 130, 146, 144, 143, 132, 139, - 139, 126, 115, 124, 130, 120, 76, 75, 93, 99, 104, 97, 104, 106, 123, 136, - 126, 132, 126, 106, 110, 95, 104, 143, 64, 187, 232, 233, 191, 128, 118, 116, - 106, 83, 55, 56, 52, 79, 102, 115, 115, 114, 124, 132, 228, 234, 224, 102, - 91, 104, 118, 116, 120, 131, 154, 167, 159, 153, 140, 143, 128, 41, 42, 48, - 30, 34, 40, 40, 30, 48, 67, 44, 40, 118, 110, 163, 230, 232, 226, 128, - 118, 126, 132, 130, 140, 127, 148, 143, 140, 134, 148, 142, 118, 51, 49, 38, - 45, 81, 95, 99, 110, 111, 173, 216, 202, 158, 132, 134, 142, 151, 155, 162, - 165, 170, 179, 186, 189, 185, 185, 132, 55, 56, 65, 95, 107, 126, 167, 225, - 226, 187, 171, 177, 185, 189, 181, 154, 169, 163, 157, 147, 144, 127, 120, 76, - 65, 69, 73, 79, 96, 115, 122, 154, 222, 229, 175, 135, 144, 154, 142, 143, - 159, 178, 181, 183, 92, 52, 44, 25, 61, 88, 102, 162, 229, 229, 225, 185, - 183, 179, 171, 171, 159, 143, 127, 93, 40, 36, 38, 29, 53, 33, 56, 38, - 112, 124, 119, 106, 116, 120, 119, 107, 119, 120, 63, 37, 51, 138, 132, 114, - 114, 134, 126, 111, 108, 108, 103, 72, 32, 52, 118, 134, 138, 131, 135, 130, - 132, 93, 84, 37, 119, 123, 122, 182, 236, 240, 218, 106, 106, 110, 119, 131, - 144, 153, 153, 151, 158, 170, 162, 148, 128, 136, 138, 106, 34, 38, 41, 57, - 67, 69, 49, 68, 69, 67, 60, 72, 65, 76, 81, 92, 95, 99, 112, 169, - 237, 244, 246, 240, 150, 116, 103, 49, 42, 38, 41, 45, 56, 61, 75, 91, - 220, 222, 212, 130, 127, 130, 136, 142, 154, 143, 119, 115, 119, 99, 28, 24, - 28, 40, 45, 42, 44, 48, 38, 57, 25, 48, 89, 103, 202, 224, 221, 130, - 114, 122, 130, 142, 155, 163, 167, 169, 157, 95, 38, 32, 28, 33, 34, 59, - 87, 185, 221, 222, 208, 126, 124, 127, 128, 127, 139, 136, 116, 110, 57, 21, - 17, 24, 38, 40, 49, 56, 67, 83, 232, 230, 230, 119, 110, 122, 134, 144, - 158, 169, 173, 167, 159, 153, 144, 51, 25, 29, 40, 46, 55, 52, 26, 22, - 25, 24, 33, 25, 29, 25, 30, 21, 30, 25, 37, 147, 199, 191, 128, 99, - 112, 118, 128, 132, 166, 177, 174, 177, 181, 191, 197, 206, 154, 65, 41, 32, - 48, 40, 83, 143, 228, 225, 222, 193, 179, 199, 212, 210, 208, 199, 182, 177, - 158, 161, 143, 128, 120, 111, 68, 55, 64, 61, 57, 41, 9, 25, 89, 120, - 93, 91, 128, 194, 216, 222, 114, 111, 120, 134, 132, 151, 159, 166, 162, 161, - 153, 136, 59, 26, 26, 41, 46, 68, 83, 88, 88, 84, 93, 91, 84, 37, - 16, 53, 73, 72, 63, 67, 67, 49, 26, 14, 13, 25, 24, 14, 18, 20, - 25, 25, 18, 34, 104, 132, 100, 100, 138, 144, 155, 162, 157, 159, 154, 154, - 143, 150, 148, 186, 201, 209, 183, 197, 191, 182, 171, 171, 161, 158, 146, 122, - 6, 6, 6, 6, 22, 24, 198, 187, 193, 186, 182, 194, 148, 173, 140, 60, - 194, 171, 112, 107, 107, 108, 119, 131, 134, 144, 135, 132, 140, 131, 122, 134, - 134, 110, 80, 80, 75, 96, 108, 106, 115, 126, 158, 135, 150, 148, 138, 120, - 146, 150, 143, 88, 208, 234, 237, 190, 126, 112, 111, 95, 69, 51, 55, 53, - 97, 111, 112, 116, 115, 126, 128, 212, 226, 222, 96, 89, 104, 118, 118, 118, - 127, 140, 163, 159, 153, 138, 143, 131, 52, 48, 46, 34, 57, 75, 102, 110, - 114, 122, 118, 116, 102, 122, 213, 217, 222, 225, 127, 110, 118, 118, 132, 142, - 120, 132, 142, 146, 138, 146, 144, 123, 46, 42, 41, 41, 88, 88, 99, 100, - 110, 161, 209, 204, 167, 131, 131, 132, 144, 154, 161, 167, 169, 177, 183, 185, - 181, 183, 158, 77, 53, 60, 106, 114, 122, 155, 220, 226, 193, 167, 173, 182, - 189, 189, 163, 153, 167, 169, 159, 154, 139, 127, 107, 84, 84, 88, 114, 120, - 122, 128, 139, 209, 226, 177, 142, 147, 157, 140, 146, 161, 183, 189, 186, 138, - 72, 48, 22, 68, 95, 114, 187, 233, 230, 228, 183, 181, 181, 173, 170, 159, - 143, 127, 85, 37, 34, 38, 63, 55, 59, 64, 38, 131, 139, 124, 110, 107, - 116, 103, 107, 112, 123, 75, 29, 106, 139, 128, 131, 131, 128, 132, 124, 130, - 123, 126, 76, 28, 115, 136, 132, 132, 127, 128, 116, 124, 106, 99, 37, 126, - 126, 124, 199, 240, 241, 221, 106, 103, 108, 118, 134, 147, 159, 155, 140, 151, - 153, 148, 124, 124, 139, 139, 106, 36, 40, 40, 64, 49, 60, 69, 73, 80, - 85, 85, 79, 88, 100, 103, 110, 116, 124, 155, 214, 244, 245, 242, 218, 127, - 118, 80, 44, 37, 37, 49, 53, 56, 68, 72, 96, 222, 228, 221, 123, 122, - 131, 115, 131, 132, 131, 114, 120, 118, 104, 29, 24, 26, 45, 49, 65, 69, - 69, 61, 59, 20, 112, 107, 111, 183, 221, 216, 135, 115, 122, 130, 142, 150, - 166, 167, 171, 170, 135, 52, 38, 33, 37, 56, 72, 103, 197, 222, 224, 208, - 126, 124, 126, 122, 132, 130, 127, 116, 100, 34, 18, 14, 28, 45, 52, 53, - 64, 63, 89, 232, 232, 232, 120, 112, 122, 131, 144, 158, 167, 173, 163, 153, - 148, 136, 61, 33, 26, 40, 60, 68, 67, 52, 17, 32, 106, 107, 97, 96, - 106, 100, 93, 95, 99, 64, 132, 190, 185, 118, 100, 114, 119, 124, 124, 153, - 158, 178, 173, 170, 183, 194, 197, 198, 114, 56, 48, 55, 63, 131, 201, 229, - 226, 222, 187, 177, 193, 204, 204, 202, 199, 175, 175, 166, 157, 155, 136, 122, - 122, 73, 76, 93, 132, 122, 46, 16, 75, 131, 119, 128, 150, 158, 210, 220, - 209, 115, 110, 120, 131, 127, 147, 157, 163, 165, 157, 150, 135, 65, 30, 25, - 45, 80, 95, 93, 87, 92, 93, 93, 93, 96, 63, 22, 67, 81, 80, 80, - 75, 76, 72, 71, 59, 29, 21, 22, 38, 88, 95, 61, 75, 83, 68, 38, - 144, 120, 91, 115, 128, 136, 142, 144, 123, 124, 131, 71, 57, 81, 165, 199, - 213, 190, 187, 190, 179, 170, 170, 159, 153, 143, 116, 5, 8, 9, 17, 57, - 64, 186, 183, 161, 187, 185, 173, 140, 171, 139, 60, 182, 177, 116, 108, 106, - 104, 103, 104, 112, 134, 148, 139, 131, 139, 124, 120, 126, 131, 104, 81, 89, - 103, 73, 99, 112, 155, 147, 140, 154, 138, 132, 122, 147, 111, 89, 146, 226, - 237, 232, 202, 127, 110, 104, 85, 61, 46, 56, 46, 95, 110, 104, 108, 111, - 123, 162, 229, 225, 204, 102, 99, 108, 119, 124, 118, 124, 132, 151, 155, 146, - 130, 146, 132, 49, 51, 22, 83, 83, 93, 97, 111, 123, 118, 116, 103, 115, - 136, 232, 228, 226, 212, 130, 103, 111, 120, 144, 147, 130, 119, 127, 135, 134, - 144, 144, 123, 60, 40, 40, 40, 88, 93, 112, 95, 104, 144, 201, 199, 166, - 132, 130, 130, 143, 147, 158, 163, 161, 170, 175, 182, 177, 177, 170, 99, 56, - 51, 97, 115, 122, 140, 205, 222, 201, 167, 170, 179, 187, 191, 183, 153, 154, - 169, 173, 162, 153, 138, 130, 104, 108, 110, 116, 116, 112, 126, 130, 193, 230, - 179, 142, 153, 161, 140, 143, 173, 185, 190, 191, 163, 63, 51, 41, 81, 103, - 122, 197, 234, 232, 228, 185, 182, 173, 173, 171, 162, 143, 124, 81, 36, 36, - 36, 53, 76, 83, 63, 41, 123, 143, 131, 142, 134, 132, 142, 131, 123, 120, - 77, 59, 134, 143, 128, 124, 120, 114, 110, 123, 114, 103, 122, 56, 26, 118, - 136, 127, 118, 112, 118, 123, 127, 99, 91, 40, 124, 127, 128, 218, 238, 234, - 216, 110, 104, 110, 114, 126, 150, 159, 161, 159, 151, 136, 130, 119, 131, 138, - 144, 111, 65, 41, 42, 68, 52, 64, 77, 81, 76, 76, 80, 79, 95, 115, - 123, 131, 123, 151, 209, 241, 246, 245, 238, 161, 123, 115, 67, 42, 40, 34, - 51, 56, 57, 67, 72, 96, 222, 225, 220, 131, 131, 126, 132, 116, 110, 106, - 112, 123, 112, 103, 29, 28, 25, 48, 63, 76, 77, 72, 76, 53, 21, 106, - 118, 107, 157, 212, 217, 151, 116, 123, 130, 142, 148, 159, 166, 163, 170, 153, - 108, 60, 60, 65, 87, 112, 174, 198, 221, 216, 217, 126, 123, 126, 124, 124, - 132, 118, 112, 71, 24, 18, 16, 30, 44, 51, 61, 71, 71, 102, 229, 230, - 229, 119, 114, 123, 136, 146, 158, 169, 173, 162, 155, 151, 138, 75, 34, 28, - 45, 65, 63, 64, 68, 18, 116, 118, 110, 104, 102, 111, 108, 100, 106, 95, - 69, 77, 179, 177, 116, 104, 115, 118, 122, 127, 131, 166, 175, 182, 161, 177, - 183, 194, 205, 161, 85, 61, 77, 122, 143, 220, 225, 226, 222, 189, 171, 178, - 189, 185, 187, 189, 179, 174, 169, 165, 162, 153, 127, 120, 84, 91, 130, 139, - 135, 38, 10, 84, 134, 122, 144, 150, 162, 216, 222, 217, 110, 108, 120, 131, - 122, 138, 158, 169, 162, 154, 146, 135, 91, 36, 29, 49, 85, 84, 89, 83, - 93, 89, 79, 81, 93, 96, 22, 71, 80, 73, 56, 48, 46, 48, 53, 71, - 46, 22, 16, 85, 85, 85, 87, 89, 75, 68, 63, 44, 48, 52, 75, 104, - 99, 108, 92, 68, 45, 42, 32, 36, 69, 143, 201, 213, 197, 181, 189, 177, - 171, 171, 158, 151, 143, 108, 4, 8, 13, 26, 41, 44, 191, 173, 166, 171, - 163, 169, 143, 138, 131, 64, 185, 177, 136, 119, 107, 103, 104, 104, 100, 108, - 134, 151, 138, 128, 138, 120, 130, 122, 132, 104, 99, 99, 93, 89, 107, 151, - 138, 132, 127, 127, 123, 116, 120, 134, 171, 208, 233, 232, 229, 186, 124, 108, - 88, 65, 53, 45, 51, 45, 75, 103, 108, 100, 110, 130, 209, 229, 228, 208, - 106, 99, 108, 123, 124, 139, 124, 119, 135, 150, 148, 139, 140, 123, 55, 51, - 38, 79, 85, 83, 110, 97, 95, 99, 95, 99, 112, 183, 220, 225, 228, 217, - 131, 123, 110, 119, 135, 134, 147, 135, 119, 119, 130, 135, 144, 126, 64, 37, - 34, 40, 91, 106, 99, 100, 106, 134, 191, 198, 165, 126, 131, 126, 139, 146, - 154, 162, 159, 161, 166, 171, 177, 171, 173, 128, 63, 68, 102, 107, 123, 134, - 175, 222, 208, 166, 165, 177, 189, 190, 190, 174, 148, 153, 170, 167, 161, 150, - 132, 128, 126, 120, 107, 110, 115, 118, 119, 151, 220, 190, 148, 151, 167, 143, - 144, 178, 189, 197, 198, 182, 89, 56, 41, 52, 106, 128, 210, 234, 234, 230, - 179, 179, 174, 170, 174, 163, 142, 118, 57, 34, 34, 24, 59, 60, 72, 69, - 51, 79, 102, 139, 96, 134, 131, 127, 124, 130, 119, 80, 57, 92, 143, 128, - 135, 110, 114, 124, 108, 112, 112, 112, 64, 24, 115, 130, 116, 123, 128, 122, - 124, 104, 95, 95, 52, 111, 118, 136, 225, 237, 237, 214, 112, 108, 111, 112, - 123, 144, 158, 166, 158, 153, 150, 146, 128, 134, 143, 144, 118, 95, 44, 45, - 67, 46, 59, 60, 67, 69, 71, 69, 93, 96, 124, 130, 126, 153, 198, 236, - 244, 248, 245, 225, 132, 119, 107, 56, 40, 36, 37, 51, 53, 60, 68, 83, - 127, 205, 216, 221, 132, 116, 123, 124, 115, 119, 108, 108, 119, 120, 103, 30, - 24, 34, 38, 40, 77, 81, 71, 68, 63, 17, 111, 115, 104, 120, 197, 214, - 183, 122, 119, 131, 138, 147, 153, 165, 163, 174, 175, 155, 114, 115, 135, 165, - 190, 205, 197, 226, 210, 210, 127, 124, 126, 126, 134, 124, 114, 91, 30, 17, - 17, 21, 41, 40, 46, 65, 67, 71, 103, 224, 232, 225, 118, 108, 118, 128, - 146, 158, 167, 171, 162, 154, 148, 139, 114, 42, 28, 46, 59, 61, 60, 55, - 18, 122, 120, 134, 118, 108, 111, 93, 93, 102, 107, 89, 55, 130, 177, 126, - 97, 114, 119, 123, 130, 126, 151, 158, 171, 158, 169, 175, 189, 197, 206, 170, - 138, 158, 185, 217, 225, 226, 221, 222, 185, 170, 166, 178, 181, 178, 183, 181, - 181, 174, 165, 155, 162, 146, 124, 88, 99, 119, 146, 126, 33, 12, 71, 118, - 135, 134, 148, 175, 220, 216, 221, 111, 108, 120, 134, 127, 144, 158, 167, 162, - 154, 143, 136, 112, 46, 36, 48, 84, 84, 84, 92, 100, 97, 92, 79, 95, - 68, 30, 63, 77, 72, 51, 53, 52, 42, 41, 68, 56, 25, 16, 89, 76, - 80, 77, 71, 71, 57, 49, 49, 42, 45, 38, 41, 53, 48, 33, 30, 33, - 28, 22, 38, 69, 150, 209, 220, 198, 177, 187, 181, 174, 170, 161, 148, 140, - 99, 2, 6, 12, 28, 4, 2, 190, 171, 179, 173, 170, 163, 183, 144, 130, - 59, 187, 173, 142, 106, 115, 114, 106, 106, 104, 100, 111, 132, 142, 139, 136, - 134, 114, 124, 124, 131, 123, 115, 124, 119, 136, 136, 154, 146, 135, 132, 130, - 135, 173, 208, 228, 234, 236, 232, 208, 170, 112, 97, 75, 56, 42, 45, 51, - 52, 88, 100, 103, 110, 112, 158, 222, 218, 229, 205, 96, 95, 110, 119, 120, - 136, 115, 118, 123, 143, 138, 136, 140, 124, 59, 56, 71, 106, 102, 80, 91, - 84, 102, 95, 95, 91, 112, 195, 226, 224, 216, 193, 132, 111, 118, 134, 148, - 144, 153, 153, 140, 120, 118, 134, 142, 127, 64, 48, 49, 48, 89, 99, 102, - 95, 102, 107, 189, 199, 175, 130, 124, 124, 138, 143, 150, 159, 165, 153, 153, - 158, 159, 169, 170, 147, 92, 67, 65, 93, 118, 124, 159, 216, 217, 167, 163, - 174, 183, 187, 191, 190, 178, 144, 154, 173, 167, 157, 150, 139, 128, 128, 135, - 116, 104, 111, 122, 130, 194, 214, 163, 154, 166, 142, 146, 183, 193, 204, 202, - 195, 150, 87, 51, 53, 115, 165, 221, 233, 234, 232, 186, 182, 169, 170, 171, - 162, 134, 107, 40, 34, 33, 29, 65, 61, 68, 72, 53, 57, 138, 144, 135, - 138, 135, 128, 128, 126, 115, 79, 64, 93, 144, 112, 119, 110, 128, 116, 107, - 115, 112, 111, 71, 28, 116, 132, 112, 110, 110, 97, 112, 102, 91, 73, 77, - 112, 124, 179, 226, 242, 234, 213, 112, 111, 116, 107, 118, 139, 153, 162, 167, - 162, 155, 147, 140, 124, 130, 147, 134, 103, 46, 48, 52, 59, 60, 76, 80, - 75, 71, 76, 88, 108, 128, 127, 142, 189, 233, 241, 246, 246, 244, 170, 120, - 119, 95, 44, 36, 24, 40, 46, 55, 67, 69, 83, 179, 208, 214, 206, 127, - 120, 126, 128, 118, 118, 119, 103, 107, 119, 108, 34, 25, 26, 37, 63, 75, - 81, 64, 67, 61, 14, 106, 114, 107, 108, 134, 201, 198, 127, 120, 127, 135, - 143, 146, 153, 150, 177, 181, 178, 169, 185, 198, 201, 208, 206, 213, 202, 212, - 163, 127, 127, 134, 136, 130, 119, 114, 38, 20, 17, 14, 28, 38, 44, 51, - 61, 65, 72, 173, 226, 228, 226, 118, 104, 118, 126, 143, 153, 165, 165, 167, - 159, 153, 147, 140, 61, 38, 36, 60, 63, 61, 57, 22, 88, 123, 135, 127, - 119, 130, 112, 112, 106, 99, 106, 55, 76, 171, 142, 100, 104, 118, 122, 124, - 127, 132, 158, 161, 157, 165, 169, 182, 189, 204, 213, 208, 217, 218, 225, 222, - 221, 226, 209, 186, 165, 166, 143, 165, 171, 181, 182, 181, 181, 170, 169, 161, - 162, 142, 118, 100, 132, 143, 69, 29, 10, 63, 118, 119, 124, 135, 158, 217, - 228, 217, 112, 107, 118, 130, 122, 151, 158, 163, 158, 155, 146, 139, 126, 67, - 37, 56, 83, 80, 89, 91, 93, 92, 93, 96, 80, 80, 26, 53, 76, 68, - 44, 51, 37, 38, 46, 48, 48, 25, 18, 48, 72, 46, 60, 61, 69, 48, - 42, 40, 37, 32, 38, 36, 40, 30, 26, 30, 26, 29, 26, 64, 71, 173, - 214, 221, 187, 173, 185, 179, 174, 171, 162, 146, 135, 52, 2, 6, 13, 38, - 2, 1, 189, 177, 161, 169, 170, 163, 159, 162, 130, 52, 177, 169, 140, 127, - 103, 100, 118, 110, 104, 103, 102, 107, 134, 146, 142, 143, 135, 118, 116, 136, - 158, 144, 139, 143, 150, 154, 159, 166, 170, 171, 185, 206, 224, 230, 236, 234, - 229, 217, 187, 124, 103, 77, 61, 48, 41, 49, 53, 73, 92, 88, 100, 111, - 154, 190, 229, 232, 229, 213, 111, 95, 103, 115, 131, 134, 120, 124, 119, 130, - 131, 139, 144, 131, 107, 88, 61, 93, 106, 108, 89, 88, 97, 119, 95, 102, - 130, 209, 220, 220, 220, 163, 118, 120, 124, 131, 136, 151, 150, 153, 151, 139, - 115, 124, 138, 132, 107, 60, 55, 51, 95, 83, 97, 93, 99, 100, 175, 198, - 177, 127, 120, 124, 136, 146, 151, 157, 162, 151, 150, 144, 144, 154, 163, 155, - 110, 65, 45, 81, 111, 126, 147, 202, 217, 174, 161, 173, 181, 185, 187, 187, - 190, 178, 150, 154, 169, 166, 157, 150, 144, 132, 132, 135, 118, 111, 120, 126, - 158, 222, 177, 155, 163, 147, 183, 187, 202, 208, 205, 206, 190, 123, 64, 69, - 126, 191, 233, 233, 234, 226, 181, 179, 177, 171, 170, 150, 135, 88, 36, 33, - 34, 46, 65, 71, 57, 76, 65, 55, 128, 143, 134, 138, 128, 128, 136, 126, - 123, 87, 67, 97, 138, 127, 119, 114, 119, 100, 115, 111, 111, 115, 68, 18, - 122, 130, 106, 112, 104, 107, 93, 75, 77, 108, 99, 112, 131, 216, 236, 230, - 238, 202, 115, 116, 116, 118, 110, 127, 150, 159, 162, 163, 159, 155, 148, 135, - 138, 131, 154, 118, 102, 85, 83, 92, 95, 96, 96, 104, 104, 100, 99, 118, - 134, 127, 186, 229, 233, 238, 245, 242, 220, 126, 122, 114, 65, 41, 36, 30, - 44, 49, 61, 67, 76, 179, 209, 208, 216, 198, 114, 128, 135, 124, 130, 131, - 134, 124, 104, 120, 115, 46, 22, 25, 53, 60, 63, 77, 81, 60, 56, 13, - 103, 107, 104, 110, 110, 138, 198, 136, 120, 124, 128, 134, 135, 136, 138, 140, - 155, 185, 183, 193, 195, 206, 212, 213, 202, 208, 189, 127, 126, 134, 135, 132, - 122, 120, 59, 20, 17, 16, 13, 37, 44, 48, 64, 65, 68, 93, 206, 220, - 226, 224, 119, 107, 115, 123, 135, 148, 162, 165, 166, 162, 151, 144, 127, 110, - 53, 34, 37, 64, 61, 59, 28, 84, 123, 135, 112, 123, 130, 95, 123, 104, - 99, 97, 63, 51, 159, 175, 108, 95, 112, 122, 124, 123, 124, 140, 142, 154, - 166, 171, 173, 179, 185, 201, 198, 208, 214, 216, 220, 217, 210, 194, 177, 165, - 142, 140, 139, 144, 165, 171, 181, 179, 175, 165, 163, 165, 162, 134, 107, 140, - 96, 36, 14, 12, 59, 112, 122, 134, 144, 166, 218, 221, 220, 118, 108, 116, - 124, 124, 159, 159, 161, 158, 155, 146, 135, 126, 110, 49, 63, 87, 92, 83, - 85, 89, 89, 95, 93, 99, 91, 40, 48, 77, 68, 46, 38, 46, 46, 46, - 45, 45, 24, 18, 75, 69, 65, 59, 48, 49, 40, 45, 40, 49, 40, 34, - 42, 36, 33, 28, 28, 22, 26, 20, 59, 84, 202, 217, 220, 166, 167, 185, - 183, 174, 169, 161, 144, 132, 42, 2, 4, 12, 32, 4, 10, 181, 182, 162, - 165, 173, 174, 154, 165, 130, 60, 170, 167, 143, 130, 122, 111, 91, 96, 114, - 112, 107, 103, 104, 127, 147, 139, 130, 123, 131, 151, 163, 177, 181, 189, 194, - 193, 201, 198, 204, 216, 218, 225, 228, 230, 229, 218, 217, 181, 136, 102, 76, - 63, 51, 44, 45, 63, 75, 88, 81, 106, 144, 171, 187, 212, 220, 226, 229, - 209, 118, 89, 112, 106, 115, 131, 146, 148, 131, 122, 120, 144, 144, 143, 130, - 119, 122, 124, 130, 123, 108, 97, 85, 115, 95, 104, 169, 208, 224, 221, 204, - 161, 127, 115, 116, 132, 147, 154, 143, 155, 155, 147, 136, 118, 131, 134, 120, - 100, 65, 64, 96, 99, 93, 93, 89, 97, 154, 202, 177, 126, 119, 127, 140, - 146, 151, 159, 142, 136, 132, 130, 130, 134, 148, 154, 135, 97, 72, 61, 93, - 115, 138, 174, 212, 185, 158, 163, 174, 179, 182, 181, 185, 185, 171, 151, 162, - 169, 161, 157, 144, 134, 132, 132, 108, 111, 110, 120, 127, 193, 212, 158, 157, - 143, 189, 199, 208, 212, 212, 208, 208, 183, 139, 146, 191, 225, 236, 236, 234, - 218, 189, 183, 177, 173, 162, 139, 123, 56, 32, 30, 34, 51, 72, 71, 87, - 85, 75, 55, 131, 146, 107, 134, 118, 115, 135, 138, 123, 111, 68, 79, 140, - 107, 118, 111, 107, 106, 116, 111, 102, 118, 53, 24, 115, 127, 103, 107, 92, - 95, 104, 102, 104, 108, 114, 153, 209, 226, 234, 237, 232, 189, 116, 120, 110, - 119, 123, 112, 138, 150, 154, 158, 155, 157, 154, 151, 143, 126, 140, 157, 119, - 115, 116, 115, 115, 120, 119, 118, 118, 115, 110, 120, 148, 191, 226, 229, 236, - 241, 241, 233, 146, 120, 123, 110, 55, 36, 32, 36, 56, 59, 60, 73, 182, - 206, 210, 214, 206, 199, 123, 116, 128, 122, 139, 123, 130, 124, 131, 111, 115, - 97, 26, 41, 30, 32, 63, 79, 79, 64, 46, 22, 95, 106, 107, 95, 99, - 107, 122, 178, 173, 127, 127, 124, 128, 130, 130, 130, 131, 132, 132, 143, 162, - 166, 170, 179, 183, 161, 126, 130, 128, 126, 124, 120, 115, 49, 20, 16, 14, - 12, 17, 29, 37, 49, 64, 64, 73, 173, 220, 220, 224, 217, 120, 110, 118, - 126, 136, 146, 158, 166, 166, 163, 157, 154, 138, 138, 104, 69, 48, 42, 46, - 61, 29, 88, 123, 131, 130, 115, 114, 99, 102, 118, 93, 100, 59, 41, 134, - 169, 135, 93, 102, 119, 123, 126, 120, 122, 126, 153, 163, 159, 170, 165, 165, - 159, 154, 175, 187, 193, 202, 198, 187, 162, 139, 143, 139, 138, 139, 142, 138, - 143, 155, 161, 157, 155, 162, 151, 142, 119, 132, 96, 34, 8, 14, 10, 53, - 102, 128, 150, 143, 189, 206, 216, 218, 120, 108, 110, 124, 147, 158, 170, 158, - 155, 155, 143, 136, 127, 126, 95, 60, 49, 60, 80, 87, 95, 89, 87, 99, - 76, 110, 34, 30, 69, 53, 57, 49, 48, 52, 49, 42, 45, 25, 14, 65, - 69, 72, 73, 73, 65, 56, 53, 44, 52, 48, 26, 42, 44, 44, 34, 30, - 28, 26, 34, 44, 112, 212, 225, 218, 157, 161, 178, 182, 174, 169, 159, 146, - 131, 30, 2, 4, 10, 30, 4, 1, 183, 162, 163, 159, 161, 151, 150, 138, - 124, 56, 165, 165, 143, 128, 126, 119, 106, 83, 80, 95, 108, 108, 103, 106, - 112, 120, 128, 135, 136, 140, 140, 151, 173, 185, 194, 197, 206, 202, 206, 214, - 220, 221, 217, 217, 214, 199, 162, 128, 97, 72, 60, 49, 41, 42, 53, 69, - 88, 75, 147, 173, 204, 213, 209, 216, 216, 217, 212, 158, 114, 92, 139, 120, - 127, 132, 136, 130, 134, 143, 138, 134, 148, 147, 142, 138, 146, 148, 162, 147, - 136, 122, 112, 83, 81, 103, 193, 218, 218, 216, 217, 154, 131, 126, 124, 155, - 155, 147, 146, 142, 140, 142, 147, 135, 115, 134, 131, 119, 91, 111, 100, 108, - 84, 97, 92, 93, 124, 189, 187, 143, 126, 127, 138, 142, 142, 140, 136, 131, - 128, 120, 120, 120, 122, 140, 142, 119, 83, 44, 75, 110, 126, 144, 194, 204, - 155, 159, 166, 174, 177, 178, 179, 185, 182, 158, 151, 165, 166, 154, 138, 138, - 132, 114, 81, 68, 91, 111, 119, 140, 208, 171, 165, 150, 191, 199, 213, 213, - 216, 210, 216, 210, 206, 212, 228, 232, 230, 234, 233, 205, 183, 185, 181, 170, - 143, 132, 92, 36, 32, 30, 37, 61, 73, 73, 84, 80, 81, 53, 115, 112, - 139, 127, 135, 140, 138, 135, 124, 120, 65, 72, 104, 134, 128, 96, 110, 102, - 110, 115, 114, 111, 63, 22, 112, 119, 119, 102, 99, 97, 103, 108, 134, 182, - 198, 222, 217, 232, 226, 230, 228, 157, 118, 119, 126, 131, 143, 123, 116, 135, - 142, 142, 143, 144, 150, 150, 153, 142, 136, 148, 157, 148, 169, 178, 187, 197, - 202, 206, 210, 216, 218, 216, 221, 221, 225, 230, 237, 238, 226, 157, 120, 124, - 122, 89, 38, 32, 30, 40, 59, 61, 93, 159, 222, 208, 205, 218, 218, 163, - 130, 132, 138, 132, 134, 127, 139, 123, 127, 115, 112, 97, 71, 55, 33, 32, - 30, 73, 77, 60, 60, 20, 95, 99, 95, 92, 96, 88, 103, 111, 116, 120, - 124, 154, 158, 153, 150, 148, 144, 142, 138, 132, 134, 130, 130, 130, 131, 130, - 126, 124, 122, 120, 116, 83, 34, 20, 16, 14, 12, 14, 40, 34, 48, 61, - 65, 69, 150, 206, 214, 216, 220, 212, 118, 111, 114, 126, 136, 139, 143, 151, - 158, 158, 154, 146, 150, 140, 144, 115, 99, 87, 67, 42, 28, 67, 126, 118, - 128, 100, 120, 116, 115, 119, 96, 99, 72, 41, 95, 154, 177, 112, 102, 110, - 118, 119, 120, 123, 124, 128, 130, 134, 132, 132, 142, 130, 128, 126, 127, 131, - 128, 126, 130, 132, 132, 138, 138, 140, 143, 140, 139, 143, 138, 134, 132, 131, - 131, 127, 138, 139, 103, 33, 8, 12, 16, 10, 52, 100, 107, 136, 193, 198, - 198, 214, 208, 118, 114, 118, 122, 150, 155, 157, 148, 157, 153, 146, 139, 130, - 124, 123, 123, 103, 72, 69, 55, 92, 88, 84, 85, 73, 96, 37, 22, 83, - 44, 45, 45, 57, 52, 52, 41, 42, 25, 14, 59, 65, 67, 63, 49, 53, - 40, 36, 30, 34, 36, 25, 40, 48, 42, 36, 37, 40, 24, 48, 56, 140, - 221, 224, 212, 148, 155, 165, 178, 178, 167, 159, 146, 127, 25, 4, 4, 12, - 24, 6, 2, 162, 161, 157, 154, 154, 154, 151, 128, 127, 52, 132, 158, 147, - 135, 139, 130, 118, 106, 89, 75, 71, 81, 102, 107, 107, 106, 106, 112, 110, - 118, 119, 124, 130, 144, 166, 178, 186, 199, 204, 201, 202, 202, 199, 182, 162, - 127, 99, 85, 69, 57, 48, 38, 40, 46, 55, 69, 68, 126, 228, 206, 214, - 206, 217, 208, 217, 183, 146, 122, 107, 119, 119, 120, 116, 123, 116, 122, 120, - 127, 126, 132, 138, 130, 139, 144, 142, 150, 151, 153, 163, 155, 110, 83, 95, - 118, 222, 208, 210, 210, 216, 150, 134, 136, 148, 131, 151, 148, 144, 134, 134, - 132, 134, 132, 131, 132, 134, 120, 127, 124, 120, 100, 87, 88, 92, 87, 97, - 162, 191, 169, 123, 124, 130, 134, 136, 136, 130, 130, 122, 120, 119, 114, 111, - 108, 115, 134, 96, 83, 87, 87, 107, 126, 159, 209, 165, 155, 162, 162, 162, - 169, 173, 178, 182, 177, 155, 154, 162, 147, 136, 139, 124, 85, 59, 57, 59, - 106, 108, 112, 175, 185, 174, 138, 185, 201, 202, 209, 214, 220, 218, 221, 218, - 222, 230, 228, 232, 229, 221, 194, 190, 183, 179, 165, 135, 104, 51, 34, 32, - 30, 30, 65, 73, 73, 77, 85, 85, 57, 89, 123, 138, 132, 116, 122, 116, - 132, 110, 85, 72, 64, 104, 136, 111, 92, 112, 108, 110, 114, 120, 84, 61, - 16, 100, 115, 107, 107, 71, 95, 111, 195, 216, 212, 216, 236, 220, 229, 242, - 226, 199, 128, 119, 120, 140, 142, 134, 142, 132, 127, 127, 124, 127, 130, 123, - 127, 130, 136, 146, 143, 131, 166, 169, 181, 189, 198, 202, 208, 212, 216, 218, - 221, 222, 228, 228, 230, 226, 201, 140, 118, 122, 127, 118, 59, 33, 29, 32, - 48, 59, 97, 186, 193, 197, 208, 212, 232, 210, 146, 126, 116, 123, 120, 134, - 128, 119, 131, 119, 118, 127, 99, 84, 77, 68, 53, 29, 42, 76, 56, 57, - 17, 91, 100, 91, 71, 64, 69, 77, 77, 73, 75, 75, 89, 108, 114, 115, - 112, 107, 112, 116, 116, 116, 115, 112, 114, 119, 118, 115, 108, 104, 76, 37, - 24, 16, 14, 12, 9, 12, 17, 33, 38, 63, 64, 72, 155, 201, 205, 206, - 209, 216, 155, 118, 108, 118, 132, 127, 131, 139, 139, 148, 147, 158, 154, 144, - 147, 132, 140, 151, 147, 108, 73, 51, 32, 88, 126, 104, 122, 99, 116, 108, - 115, 92, 100, 95, 33, 84, 142, 148, 151, 146, 139, 138, 142, 138, 115, 114, - 118, 119, 124, 126, 127, 124, 123, 128, 120, 104, 99, 92, 85, 89, 100, 116, - 124, 131, 136, 138, 134, 127, 134, 134, 136, 139, 138, 135, 135, 126, 102, 34, - 17, 9, 8, 16, 10, 51, 110, 139, 195, 205, 202, 199, 216, 189, 116, 108, - 123, 131, 130, 144, 150, 154, 151, 151, 147, 142, 138, 131, 122, 120, 118, 130, - 118, 83, 60, 60, 61, 75, 68, 95, 34, 21, 77, 59, 46, 49, 60, 42, - 44, 46, 34, 26, 20, 63, 79, 60, 56, 45, 42, 41, 32, 33, 40, 29, - 46, 42, 37, 30, 28, 29, 33, 18, 49, 57, 161, 221, 226, 209, 143, 148, - 154, 169, 175, 166, 159, 147, 120, 13, 5, 2, 12, 24, 14, 17, 150, 153, - 154, 158, 151, 151, 155, 159, 120, 49, 154, 154, 147, 146, 136, 132, 124, 115, - 99, 91, 76, 65, 64, 64, 76, 91, 100, 103, 107, 107, 107, 108, 110, 115, - 122, 127, 131, 138, 154, 153, 148, 146, 123, 103, 91, 76, 57, 53, 53, 42, - 36, 38, 45, 46, 76, 84, 75, 166, 208, 220, 206, 206, 187, 165, 142, 128, - 114, 95, 87, 83, 84, 88, 92, 95, 93, 100, 104, 107, 106, 110, 115, 122, - 128, 134, 131, 131, 135, 147, 140, 134, 107, 77, 107, 181, 198, 198, 171, 174, - 150, 143, 120, 115, 127, 122, 128, 127, 128, 120, 132, 134, 124, 138, 134, 130, - 122, 119, 122, 118, 112, 69, 45, 56, 87, 80, 83, 131, 175, 177, 126, 134, - 131, 131, 132, 131, 127, 128, 123, 122, 119, 114, 111, 111, 108, 106, 97, 89, - 63, 75, 87, 106, 135, 178, 187, 150, 157, 159, 158, 153, 162, 167, 169, 174, - 171, 161, 140, 138, 142, 131, 97, 65, 55, 44, 45, 77, 103, 112, 154, 199, - 175, 155, 165, 185, 199, 202, 205, 205, 204, 202, 204, 201, 202, 202, 205, 202, - 195, 186, 181, 179, 169, 140, 116, 48, 29, 30, 30, 33, 36, 65, 64, 71, - 81, 79, 83, 75, 68, 69, 76, 89, 69, 72, 81, 72, 72, 92, 89, 77, - 79, 88, 93, 108, 96, 97, 97, 97, 92, 95, 53, 13, 55, 96, 100, 77, - 83, 97, 170, 208, 210, 214, 225, 244, 218, 214, 206, 157, 130, 122, 124, 134, - 136, 136, 139, 139, 136, 134, 127, 130, 132, 130, 127, 123, 120, 122, 123, 124, - 122, 122, 123, 123, 132, 140, 159, 182, 189, 201, 202, 199, 195, 198, 199, 186, - 159, 120, 116, 119, 127, 127, 104, 36, 28, 20, 53, 53, 79, 171, 189, 193, - 205, 199, 204, 178, 146, 132, 118, 132, 120, 119, 123, 127, 111, 115, 106, 111, - 103, 123, 106, 108, 96, 81, 30, 36, 76, 53, 53, 21, 96, 93, 60, 57, - 53, 56, 53, 57, 46, 46, 41, 37, 34, 36, 36, 32, 32, 30, 30, 29, - 26, 25, 22, 24, 28, 24, 22, 21, 18, 20, 14, 14, 12, 10, 10, 14, - 24, 34, 28, 63, 59, 76, 151, 191, 191, 187, 201, 209, 181, 131, 114, 120, - 130, 124, 127, 132, 131, 134, 132, 134, 143, 139, 130, 143, 140, 123, 122, 123, - 154, 135, 49, 32, 73, 72, 76, 79, 83, 84, 88, 88, 93, 93, 71, 22, - 56, 96, 111, 100, 95, 89, 97, 100, 104, 108, 107, 103, 103, 114, 115, 107, - 103, 100, 77, 41, 21, 16, 12, 12, 13, 20, 57, 93, 103, 108, 110, 106, - 97, 100, 103, 103, 102, 99, 96, 84, 44, 24, 12, 8, 6, 18, 22, 18, - 95, 148, 182, 198, 186, 181, 202, 202, 136, 112, 116, 127, 122, 122, 122, 130, - 132, 134, 136, 132, 126, 127, 126, 127, 123, 115, 116, 132, 119, 103, 89, 91, - 81, 80, 64, 52, 25, 51, 64, 71, 59, 60, 45, 42, 45, 37, 24, 18, - 59, 49, 37, 42, 30, 25, 22, 32, 30, 30, 34, 30, 26, 28, 25, 29, - 25, 26, 41, 53, 69, 179, 225, 226, 206, 140, 147, 151, 162, 170, 163, 158, - 142, 99, 8, 4, 2, 6, 16, 10, 5, 162, 158, 158, 158, 154, 162, 153, - 144, 118, 52, 143, 153, 132, 139, 130, 130, 116, 118, 108, 104, 93, 87, 73, - 69, 60, 56, 53, 57, 60, 68, 79, 95, 96, 99, 97, 95, 95, 91, 89, - 88, 85, 77, 63, 52, 49, 46, 45, 37, 33, 36, 48, 61, 63, 59, 69, - 49, 49, 99, 143, 159, 153, 146, 144, 93, 80, 69, 64, 49, 34, 37, 38, - 32, 30, 30, 33, 34, 34, 40, 38, 36, 44, 72, 81, 88, 88, 85, 83, - 114, 110, 68, 40, 59, 99, 157, 151, 159, 157, 159, 130, 107, 87, 88, 102, - 106, 103, 102, 107, 108, 112, 112, 114, 114, 115, 111, 106, 102, 103, 96, 67, - 42, 40, 36, 41, 76, 68, 76, 131, 146, 128, 130, 108, 124, 124, 127, 123, - 124, 122, 115, 110, 108, 102, 111, 103, 106, 106, 91, 38, 44, 80, 76, 112, - 132, 178, 169, 150, 155, 154, 154, 153, 155, 157, 155, 150, 144, 139, 140, 131, - 108, 65, 53, 48, 49, 56, 63, 106, 108, 178, 189, 179, 167, 120, 151, 183, - 187, 191, 194, 193, 191, 189, 185, 178, 177, 181, 182, 181, 178, 163, 146, 135, - 108, 51, 33, 30, 30, 42, 55, 49, 60, 45, 46, 69, 73, 80, 79, 83, - 87, 103, 92, 96, 92, 100, 99, 97, 93, 93, 91, 79, 97, 95, 65, 56, - 30, 28, 42, 40, 38, 38, 14, 34, 40, 55, 80, 73, 95, 163, 205, 218, - 210, 210, 183, 157, 140, 130, 123, 130, 124, 131, 128, 130, 130, 131, 131, 131, - 126, 126, 123, 123, 122, 120, 112, 118, 119, 119, 119, 119, 118, 120, 116, 114, - 112, 111, 112, 114, 116, 118, 118, 115, 112, 112, 111, 114, 112, 119, 123, 128, - 123, 57, 22, 25, 29, 55, 51, 139, 189, 183, 193, 205, 175, 143, 135, 119, - 115, 103, 108, 106, 102, 108, 103, 102, 92, 97, 99, 97, 95, 102, 96, 88, - 84, 32, 42, 57, 51, 42, 26, 89, 92, 60, 52, 52, 51, 49, 49, 45, - 38, 34, 26, 30, 26, 25, 26, 25, 22, 22, 22, 18, 17, 16, 18, 17, - 16, 14, 13, 12, 10, 9, 9, 13, 12, 17, 30, 22, 29, 40, 61, 65, - 107, 179, 183, 193, 186, 163, 151, 124, 115, 124, 120, 126, 119, 123, 118, 116, - 120, 126, 131, 132, 127, 124, 131, 131, 122, 118, 124, 131, 110, 30, 60, 69, - 69, 68, 63, 73, 71, 73, 68, 80, 76, 38, 24, 36, 41, 40, 34, 30, - 26, 25, 21, 21, 21, 21, 17, 17, 17, 16, 14, 14, 14, 13, 12, 10, - 9, 8, 9, 10, 12, 10, 13, 12, 10, 10, 12, 10, 9, 8, 10, 10, - 9, 10, 10, 9, 9, 8, 4, 8, 20, 24, 20, 100, 161, 201, 191, 197, - 186, 157, 130, 118, 112, 116, 119, 111, 108, 116, 122, 120, 126, 128, 124, 119, - 116, 116, 112, 104, 108, 119, 116, 111, 83, 77, 65, 69, 60, 44, 41, 36, - 38, 40, 42, 40, 42, 38, 49, 42, 36, 25, 10, 55, 52, 29, 22, 48, - 76, 118, 155, 142, 89, 28, 36, 40, 13, 20, 20, 28, 18, 45, 42, 93, - 205, 225, 232, 202, 136, 140, 146, 158, 169, 163, 151, 138, 61, 2, 5, 2, - 2, 1, 1, 0, 61, 60, 65, 106, 110, 111, 126, 119, 111, 49, 79, 88, - 87, 87, 87, 83, 83, 79, 76, 75, 73, 67, 59, 63, 57, 53, 49, 52, - 49, 51, 46, 42, 41, 40, 44, 42, 44, 42, 44, 44, 44, 44, 42, 36, - 30, 26, 30, 40, 56, 44, 60, 67, 63, 52, 51, 65, 45, 28, 38, 45, - 41, 38, 34, 26, 38, 40, 30, 24, 25, 25, 25, 22, 21, 22, 20, 18, - 20, 21, 20, 17, 12, 16, 20, 17, 17, 24, 28, 6, 12, 26, 26, 33, - 18, 34, 45, 48, 67, 32, 5, 8, 20, 20, 17, 18, 20, 22, 18, 18, - 22, 20, 21, 22, 25, 30, 30, 30, 29, 26, 34, 41, 48, 61, 61, 51, - 44, 56, 53, 44, 37, 17, 18, 28, 24, 22, 17, 20, 17, 13, 17, 13, - 10, 16, 22, 13, 13, 20, 20, 24, 26, 26, 44, 96, 132, 173, 158, 146, - 144, 148, 147, 150, 153, 147, 144, 142, 142, 131, 97, 61, 51, 46, 46, 49, - 36, 64, 103, 106, 167, 186, 195, 178, 136, 111, 112, 128, 123, 123, 118, 131, - 126, 122, 119, 118, 119, 122, 118, 116, 112, 73, 60, 40, 30, 29, 33, 34, - 30, 29, 14, 13, 33, 13, 13, 13, 14, 38, 13, 10, 29, 30, 12, 12, - 29, 13, 13, 13, 16, 26, 44, 41, 59, 56, 97, 111, 119, 118, 104, 95, - 63, 13, 92, 100, 100, 56, 76, 89, 118, 142, 157, 143, 140, 128, 114, 108, - 110, 112, 114, 112, 127, 127, 120, 126, 126, 127, 127, 126, 124, 124, 122, 123, - 123, 120, 120, 122, 122, 122, 119, 116, 118, 116, 118, 116, 116, 116, 115, 114, - 115, 115, 115, 115, 114, 115, 118, 120, 124, 127, 126, 95, 29, 21, 24, 24, - 38, 48, 102, 161, 178, 148, 140, 111, 96, 91, 92, 93, 96, 97, 96, 97, - 97, 100, 100, 100, 97, 102, 95, 95, 92, 92, 89, 63, 40, 38, 46, 48, - 42, 24, 84, 48, 44, 34, 32, 32, 33, 24, 25, 22, 20, 14, 13, 12, - 12, 12, 12, 12, 12, 10, 9, 9, 9, 10, 12, 13, 13, 16, 14, 16, - 17, 18, 24, 26, 38, 21, 29, 41, 71, 64, 76, 157, 154, 143, 135, 130, - 122, 120, 112, 107, 112, 112, 115, 114, 110, 111, 115, 112, 112, 118, 115, 116, - 115, 111, 106, 100, 100, 102, 99, 37, 49, 9, 6, 9, 6, 5, 6, 5, - 8, 9, 4, 10, 8, 4, 24, 21, 13, 4, 18, 9, 1, 1, 2, 2, - 4, 4, 5, 6, 5, 5, 5, 5, 4, 5, 6, 9, 9, 9, 9, 10, - 10, 10, 9, 8, 8, 8, 8, 8, 5, 8, 8, 8, 6, 6, 5, 2, - 5, 8, 18, 21, 25, 22, 118, 154, 173, 158, 159, 135, 116, 111, 104, 102, - 104, 97, 103, 104, 99, 100, 108, 111, 114, 111, 110, 106, 100, 99, 102, 97, - 97, 91, 60, 26, 13, 9, 9, 10, 10, 9, 12, 10, 6, 10, 14, 16, - 14, 14, 17, 18, 22, 12, 51, 24, 41, 81, 143, 162, 174, 186, 183, 171, - 104, 30, 20, 52, 69, 61, 61, 52, 41, 65, 116, 216, 232, 232, 191, 134, - 140, 144, 158, 165, 161, 148, 132, 29, 2, 4, 5, 9, 14, 29, 41, 139, - 138, 132, 130, 103, 60, 81, 51, 83, 20, 0, 5, 5, 32, 2, 5, 20, - 22, 4, 5, 17, 20, 18, 12, 18, 17, 17, 9, 9, 32, 30, 29, 28, - 28, 25, 24, 21, 21, 21, 20, 20, 22, 21, 24, 33, 36, 49, 49, 60, - 73, 72, 72, 76, 80, 102, 95, 63, 63, 64, 73, 59, 53, 48, 46, 52, - 48, 45, 42, 46, 45, 45, 41, 38, 38, 36, 38, 44, 42, 37, 34, 30, - 26, 22, 30, 44, 49, 22, 37, 57, 28, 30, 28, 57, 45, 56, 61, 59, - 52, 45, 42, 46, 45, 42, 40, 45, 41, 42, 40, 41, 44, 45, 41, 44, - 45, 38, 40, 41, 44, 37, 44, 85, 75, 85, 85, 91, 69, 52, 64, 51, - 59, 64, 57, 53, 46, 48, 48, 45, 41, 42, 46, 42, 40, 48, 49, 45, - 45, 52, 63, 64, 84, 92, 76, 79, 131, 166, 153, 162, 147, 153, 147, 150, - 143, 146, 134, 123, 79, 52, 46, 45, 32, 33, 36, 52, 93, 104, 153, 177, - 193, 199, 175, 124, 92, 73, 71, 68, 64, 65, 59, 56, 52, 56, 51, 52, - 52, 52, 48, 49, 44, 51, 49, 52, 38, 59, 46, 60, 51, 52, 51, 52, - 52, 52, 52, 53, 46, 12, 38, 114, 147, 103, 108, 111, 112, 110, 93, 103, - 107, 122, 144, 136, 144, 144, 114, 120, 119, 131, 116, 96, 22, 103, 100, 115, - 114, 64, 79, 88, 104, 92, 87, 87, 77, 79, 68, 65, 61, 53, 55, 41, - 41, 36, 34, 33, 30, 30, 33, 30, 33, 30, 30, 29, 30, 29, 29, 28, - 28, 28, 32, 30, 32, 32, 29, 32, 37, 41, 60, 92, 107, 115, 119, 120, - 123, 123, 126, 127, 123, 111, 42, 24, 18, 17, 28, 56, 45, 61, 68, 67, - 68, 69, 71, 26, 20, 20, 18, 17, 17, 17, 16, 14, 14, 16, 16, 18, - 20, 18, 22, 22, 22, 24, 24, 12, 6, 12, 9, 13, 25, 32, 51, 63, - 57, 72, 76, 67, 59, 67, 64, 52, 9, 41, 59, 55, 55, 38, 46, 37, - 48, 29, 18, 25, 37, 64, 69, 65, 64, 61, 65, 61, 63, 64, 56, 53, - 20, 46, 68, 73, 67, 88, 107, 107, 112, 100, 96, 88, 87, 81, 71, 52, - 60, 45, 49, 44, 41, 36, 38, 36, 37, 36, 37, 36, 36, 37, 37, 36, - 41, 41, 36, 12, 17, 71, 76, 79, 87, 87, 81, 92, 81, 80, 81, 41, - 12, 69, 72, 79, 69, 72, 63, 68, 34, 21, 13, 10, 6, 13, 13, 12, - 9, 9, 6, 9, 8, 5, 9, 6, 8, 4, 12, 14, 13, 8, 16, 13, - 8, 4, 4, 8, 6, 8, 10, 10, 10, 9, 10, 12, 24, 30, 24, 30, - 20, 108, 107, 111, 102, 108, 95, 81, 59, 46, 44, 32, 30, 28, 30, 24, - 22, 22, 24, 18, 21, 20, 16, 14, 14, 17, 14, 14, 14, 12, 13, 28, - 29, 41, 42, 30, 40, 46, 55, 61, 56, 51, 30, 29, 22, 17, 40, 40, - 34, 22, 52, 85, 148, 191, 193, 187, 201, 187, 150, 104, 32, 29, 53, 68, - 60, 49, 56, 55, 85, 162, 221, 232, 232, 178, 132, 135, 143, 154, 161, 155, - 144, 107, 12, 4, 2, 5, 20, 41, 48, 55, 194, 189, 185, 178, 154, 134, - 124, 115, 87, 13, 44, 131, 159, 127, 127, 140, 162, 136, 134, 134, 132, 130, - 131, 134, 138, 138, 124, 104, 71, 61, 53, 29, 28, 25, 26, 29, 38, 40, - 40, 42, 48, 63, 60, 65, 68, 65, 69, 69, 91, 111, 119, 119, 132, 126, - 140, 116, 102, 52, 120, 115, 79, 77, 75, 72, 71, 71, 75, 75, 72, 52, - 60, 83, 85, 79, 79, 81, 84, 75, 57, 45, 36, 32, 18, 20, 44, 46, - 42, 42, 51, 49, 52, 59, 46, 8, 88, 71, 64, 64, 63, 61, 67, 48, - 45, 42, 45, 42, 42, 34, 37, 48, 42, 45, 46, 46, 41, 48, 41, 38, - 44, 84, 87, 77, 85, 91, 95, 95, 99, 89, 14, 100, 92, 76, 75, 55, - 60, 55, 53, 53, 57, 56, 52, 56, 57, 61, 61, 61, 65, 65, 69, 81, - 87, 93, 77, 83, 159, 162, 142, 146, 138, 136, 134, 132, 116, 77, 64, 53, - 51, 41, 51, 40, 33, 49, 87, 120, 118, 157, 194, 198, 202, 162, 104, 71, - 56, 51, 69, 55, 55, 51, 56, 56, 55, 52, 57, 59, 60, 59, 56, 56, - 53, 53, 53, 55, 53, 52, 59, 64, 65, 67, 72, 73, 73, 77, 71, 48, - 9, 122, 146, 138, 134, 119, 119, 114, 138, 122, 132, 81, 114, 123, 120, 114, - 127, 131, 120, 122, 124, 128, 85, 16, 92, 110, 112, 118, 96, 68, 79, 87, - 61, 51, 49, 64, 46, 48, 45, 45, 42, 42, 30, 26, 26, 24, 26, 21, - 22, 24, 25, 24, 24, 22, 22, 22, 22, 22, 20, 20, 18, 21, 20, 20, - 20, 20, 20, 21, 20, 22, 25, 30, 38, 49, 61, 76, 84, 92, 92, 77, - 41, 24, 24, 22, 24, 33, 59, 59, 57, 44, 46, 49, 42, 51, 42, 41, - 37, 36, 37, 34, 29, 26, 28, 25, 22, 22, 18, 21, 20, 17, 17, 14, - 14, 16, 16, 18, 33, 21, 40, 28, 76, 112, 118, 118, 115, 118, 112, 111, - 111, 81, 59, 2, 85, 68, 67, 60, 56, 71, 83, 59, 61, 51, 26, 75, - 91, 87, 84, 81, 87, 81, 83, 80, 72, 67, 53, 20, 76, 75, 67, 85, - 95, 91, 93, 84, 84, 76, 80, 59, 42, 44, 45, 41, 33, 30, 28, 25, - 25, 25, 21, 22, 22, 21, 17, 17, 14, 13, 16, 14, 13, 10, 16, 16, - 85, 89, 85, 85, 85, 83, 81, 84, 87, 95, 46, 13, 93, 81, 72, 81, - 73, 75, 72, 63, 55, 42, 24, 6, 24, 53, 48, 26, 32, 45, 44, 26, - 32, 40, 34, 21, 24, 38, 40, 41, 46, 48, 41, 38, 36, 17, 4, 13, - 26, 37, 28, 26, 30, 25, 26, 29, 33, 28, 32, 13, 81, 84, 73, 52, - 60, 55, 51, 33, 36, 37, 37, 26, 26, 28, 30, 24, 24, 22, 22, 20, - 21, 20, 18, 22, 24, 22, 21, 22, 25, 32, 29, 34, 41, 46, 49, 36, - 45, 65, 61, 37, 40, 60, 65, 61, 45, 45, 26, 18, 57, 81, 139, 193, - 190, 177, 187, 142, 116, 93, 104, 32, 32, 53, 80, 79, 84, 71, 57, 93, - 194, 222, 230, 229, 163, 131, 136, 142, 153, 154, 147, 136, 63, 5, 5, 2, - 4, 21, 44, 41, 69, 177, 174, 179, 174, 170, 175, 158, 147, 92, 6, 165, - 163, 159, 155, 155, 159, 151, 155, 154, 151, 147, 146, 147, 147, 146, 147, 142, - 143, 147, 138, 110, 79, 69, 46, 75, 93, 95, 88, 87, 87, 84, 81, 83, - 79, 75, 56, 60, 114, 132, 142, 140, 140, 138, 130, 135, 135, 114, 59, 122, - 116, 116, 112, 115, 112, 104, 104, 95, 93, 85, 52, 75, 97, 111, 108, 104, - 106, 106, 97, 84, 83, 80, 68, 18, 79, 84, 85, 99, 57, 65, 91, 64, - 60, 65, 20, 81, 106, 99, 106, 103, 89, 88, 65, 60, 67, 56, 29, 40, - 102, 59, 93, 76, 87, 63, 81, 64, 44, 30, 22, 44, 85, 89, 92, 85, - 91, 115, 99, 95, 79, 12, 106, 103, 73, 88, 79, 73, 75, 75, 81, 69, - 68, 52, 42, 52, 61, 77, 64, 69, 76, 85, 83, 85, 92, 93, 76, 142, - 161, 140, 95, 81, 76, 75, 65, 63, 56, 55, 44, 41, 49, 45, 38, 56, - 80, 95, 116, 119, 189, 195, 201, 198, 154, 104, 63, 56, 55, 56, 55, 56, - 56, 61, 61, 64, 77, 100, 136, 148, 165, 173, 165, 154, 115, 75, 63, 57, - 53, 57, 60, 59, 59, 63, 63, 65, 73, 72, 72, 34, 135, 143, 123, 110, - 110, 110, 107, 104, 119, 80, 97, 134, 138, 119, 131, 115, 122, 112, 122, 119, - 132, 88, 14, 97, 103, 120, 110, 99, 92, 61, 59, 55, 72, 71, 45, 37, - 36, 36, 42, 26, 32, 22, 22, 21, 20, 20, 20, 18, 20, 20, 21, 20, - 20, 20, 21, 20, 20, 20, 20, 20, 21, 25, 32, 28, 30, 32, 30, 26, - 22, 20, 21, 21, 24, 25, 25, 24, 25, 26, 24, 24, 21, 22, 13, 25, - 60, 67, 65, 59, 59, 56, 53, 49, 45, 42, 41, 45, 40, 38, 37, 33, - 33, 30, 30, 26, 26, 26, 25, 28, 24, 24, 24, 21, 24, 29, 38, 46, - 48, 46, 59, 93, 116, 114, 108, 107, 100, 99, 100, 107, 88, 64, 6, 80, - 73, 79, 60, 71, 72, 69, 61, 64, 59, 26, 80, 102, 108, 103, 95, 100, - 107, 103, 87, 85, 73, 56, 18, 69, 68, 80, 110, 111, 88, 81, 102, 75, - 46, 46, 46, 49, 51, 37, 33, 32, 26, 26, 26, 25, 24, 20, 21, 21, - 20, 18, 16, 14, 14, 16, 16, 13, 12, 22, 30, 88, 81, 76, 80, 84, - 80, 75, 75, 75, 111, 46, 16, 89, 89, 91, 91, 88, 87, 81, 68, 64, - 46, 28, 6, 48, 61, 64, 48, 45, 29, 34, 42, 36, 24, 26, 18, 28, - 55, 73, 69, 69, 60, 65, 59, 40, 26, 6, 55, 63, 46, 46, 40, 40, - 40, 37, 32, 30, 29, 34, 16, 61, 103, 73, 65, 49, 42, 51, 36, 34, - 36, 34, 25, 25, 28, 29, 20, 22, 24, 20, 24, 18, 18, 21, 24, 21, - 26, 28, 24, 25, 32, 34, 42, 34, 42, 22, 26, 63, 63, 85, 61, 38, - 36, 40, 33, 34, 29, 22, 53, 85, 92, 175, 190, 175, 171, 139, 96, 91, - 96, 73, 46, 37, 48, 75, 53, 57, 52, 69, 124, 206, 222, 230, 224, 144, - 130, 135, 140, 153, 150, 142, 114, 21, 4, 5, 1, 4, 22, 41, 44, 59, - 163, 169, 163, 158, 163, 159, 174, 144, 95, 22, 155, 173, 170, 175, 162, 162, - 162, 154, 147, 143, 120, 104, 115, 147, 158, 159, 153, 155, 130, 143, 143, 123, - 80, 55, 91, 104, 104, 106, 102, 103, 102, 100, 99, 103, 69, 52, 95, 136, - 147, 146, 136, 140, 138, 143, 144, 114, 108, 63, 119, 123, 118, 120, 120, 116, - 122, 107, 107, 110, 91, 56, 95, 102, 114, 116, 119, 132, 127, 124, 108, 108, - 83, 68, 18, 80, 103, 87, 99, 107, 93, 95, 93, 65, 63, 17, 72, 107, - 142, 144, 146, 107, 110, 96, 89, 64, 59, 26, 75, 114, 122, 112, 108, 103, - 104, 107, 87, 75, 53, 21, 56, 92, 96, 81, 69, 91, 99, 99, 110, 63, - 5, 114, 111, 118, 110, 68, 72, 56, 75, 71, 67, 69, 46, 33, 49, 108, - 92, 92, 91, 91, 84, 84, 83, 93, 111, 73, 154, 159, 139, 99, 87, 72, - 69, 61, 61, 51, 51, 42, 40, 37, 46, 55, 77, 83, 122, 120, 142, 186, - 204, 202, 202, 139, 103, 83, 77, 81, 71, 68, 71, 80, 95, 124, 155, 186, - 208, 218, 224, 226, 226, 218, 220, 212, 190, 163, 138, 88, 67, 57, 60, 60, - 63, 60, 60, 71, 69, 68, 12, 96, 142, 100, 97, 114, 114, 107, 107, 114, - 81, 102, 123, 135, 132, 126, 131, 127, 120, 127, 123, 126, 81, 14, 97, 102, - 112, 108, 97, 64, 63, 61, 61, 67, 49, 29, 80, 68, 56, 49, 56, 68, - 48, 52, 49, 44, 40, 38, 44, 40, 51, 51, 51, 44, 42, 42, 40, 37, - 34, 36, 33, 55, 48, 51, 49, 57, 55, 57, 51, 48, 38, 29, 22, 26, - 24, 21, 21, 20, 20, 22, 20, 24, 22, 9, 33, 64, 77, 81, 84, 81, - 85, 79, 79, 67, 56, 48, 76, 80, 60, 57, 59, 48, 48, 57, 55, 24, - 9, 38, 53, 61, 40, 32, 40, 48, 32, 55, 48, 52, 45, 53, 95, 114, - 108, 107, 108, 100, 99, 84, 95, 102, 48, 8, 59, 84, 77, 87, 85, 95, - 96, 72, 87, 51, 28, 73, 104, 110, 110, 104, 103, 112, 99, 104, 85, 75, - 64, 20, 71, 64, 72, 83, 96, 128, 107, 93, 53, 56, 46, 61, 85, 81, - 76, 55, 61, 61, 64, 55, 53, 44, 40, 34, 37, 34, 32, 30, 28, 28, - 26, 25, 28, 22, 25, 16, 68, 95, 104, 83, 72, 80, 99, 80, 79, 96, - 45, 18, 77, 89, 88, 84, 83, 77, 104, 65, 63, 60, 28, 8, 51, 63, - 48, 64, 45, 53, 34, 37, 38, 51, 28, 21, 48, 72, 80, 77, 65, 56, - 55, 68, 40, 30, 13, 59, 60, 46, 42, 44, 38, 48, 37, 37, 25, 32, - 34, 13, 63, 83, 61, 79, 65, 71, 72, 51, 41, 41, 40, 33, 37, 36, - 21, 28, 28, 28, 28, 26, 29, 28, 24, 29, 32, 33, 33, 30, 32, 33, - 38, 34, 52, 48, 33, 12, 53, 65, 57, 51, 53, 30, 38, 29, 25, 32, - 21, 59, 88, 106, 186, 181, 175, 144, 103, 96, 93, 112, 64, 45, 33, 55, - 60, 61, 55, 55, 71, 147, 213, 220, 228, 208, 134, 131, 136, 143, 150, 146, - 138, 72, 9, 5, 4, 1, 2, 22, 34, 26, 77, 162, 157, 167, 165, 162, - 155, 157, 128, 88, 38, 110, 171, 174, 170, 175, 166, 163, 165, 163, 147, 120, - 97, 143, 155, 159, 154, 150, 146, 151, 136, 143, 139, 96, 61, 107, 128, 132, - 131, 127, 127, 127, 118, 110, 119, 67, 48, 97, 143, 146, 148, 148, 132, 131, - 138, 132, 120, 89, 71, 118, 118, 123, 114, 115, 127, 124, 116, 114, 118, 97, - 67, 96, 115, 131, 124, 106, 134, 122, 132, 123, 111, 103, 77, 25, 67, 110, - 103, 97, 95, 95, 92, 102, 72, 69, 17, 97, 115, 143, 138, 139, 144, 115, - 120, 106, 92, 63, 13, 95, 116, 131, 127, 119, 118, 120, 115, 111, 104, 52, - 21, 100, 102, 104, 104, 79, 96, 120, 110, 102, 85, 12, 118, 120, 110, 103, - 89, 75, 79, 99, 103, 97, 91, 56, 20, 99, 110, 115, 114, 104, 95, 96, - 91, 91, 102, 103, 91, 146, 159, 148, 130, 106, 87, 77, 69, 61, 53, 55, - 45, 37, 48, 52, 79, 79, 100, 118, 112, 123, 195, 198, 210, 183, 135, 104, - 122, 127, 118, 126, 136, 158, 174, 198, 210, 221, 225, 226, 225, 224, 221, 220, - 221, 218, 213, 213, 208, 210, 181, 127, 71, 61, 59, 61, 65, 61, 69, 76, - 51, 10, 99, 146, 120, 106, 132, 114, 132, 116, 99, 71, 100, 139, 138, 127, - 132, 124, 138, 132, 118, 116, 122, 97, 18, 103, 102, 114, 111, 110, 87, 83, - 63, 75, 65, 67, 49, 72, 89, 87, 68, 67, 59, 65, 63, 60, 59, 59, - 40, 33, 49, 51, 55, 60, 52, 56, 57, 57, 59, 57, 49, 45, 53, 64, - 60, 63, 57, 59, 57, 57, 56, 37, 59, 63, 64, 63, 56, 56, 34, 32, - 30, 28, 28, 24, 10, 41, 71, 85, 85, 83, 85, 85, 89, 83, 75, 63, - 53, 71, 89, 68, 80, 77, 77, 61, 52, 60, 53, 13, 64, 65, 67, 64, - 64, 59, 55, 52, 51, 46, 49, 51, 44, 85, 107, 111, 104, 106, 95, 95, - 85, 95, 77, 64, 12, 76, 81, 95, 80, 77, 81, 84, 88, 84, 57, 37, - 91, 106, 103, 104, 106, 112, 115, 112, 110, 99, 83, 60, 20, 71, 67, 83, - 69, 84, 99, 119, 107, 56, 57, 46, 67, 91, 77, 75, 73, 75, 71, 73, - 75, 71, 53, 52, 41, 57, 59, 56, 53, 53, 44, 40, 46, 46, 32, 22, - 56, 87, 93, 81, 83, 76, 87, 79, 84, 81, 106, 53, 21, 88, 89, 87, - 100, 79, 81, 75, 79, 60, 63, 28, 6, 53, 69, 56, 88, 59, 60, 63, - 53, 44, 49, 28, 18, 63, 80, 80, 57, 51, 51, 52, 67, 41, 25, 5, - 48, 60, 49, 52, 42, 41, 32, 37, 36, 33, 34, 37, 21, 71, 85, 80, - 60, 68, 65, 76, 61, 63, 40, 37, 18, 14, 32, 28, 32, 29, 30, 24, - 26, 29, 20, 17, 26, 46, 51, 51, 52, 29, 25, 25, 30, 38, 45, 37, - 17, 57, 60, 57, 51, 44, 33, 36, 32, 28, 24, 22, 60, 88, 110, 186, - 182, 146, 112, 99, 89, 107, 104, 80, 44, 36, 44, 65, 56, 48, 61, 102, - 189, 217, 224, 228, 187, 127, 130, 135, 148, 146, 140, 116, 20, 5, 5, 4, - 1, 4, 12, 40, 21, 49, 181, 162, 162, 161, 155, 159, 155, 153, 79, 5, - 122, 174, 171, 170, 174, 169, 165, 162, 165, 135, 118, 93, 142, 155, 146, 153, - 150, 157, 165, 157, 148, 144, 114, 71, 120, 138, 140, 124, 139, 135, 135, 124, - 108, 106, 69, 45, 120, 147, 147, 151, 140, 130, 143, 136, 138, 119, 111, 79, - 116, 126, 114, 135, 124, 114, 115, 127, 124, 127, 104, 69, 103, 128, 131, 130, - 107, 118, 119, 127, 123, 119, 107, 79, 8, 71, 97, 108, 100, 95, 93, 97, - 100, 72, 69, 20, 88, 116, 138, 132, 127, 131, 130, 115, 111, 96, 60, 28, - 108, 126, 130, 127, 130, 122, 132, 131, 119, 107, 71, 20, 104, 104, 108, 96, - 104, 100, 111, 108, 100, 85, 10, 118, 104, 97, 92, 102, 87, 91, 114, 116, - 103, 91, 55, 36, 102, 110, 124, 124, 123, 102, 103, 107, 102, 92, 92, 83, - 136, 157, 154, 132, 132, 123, 95, 91, 71, 64, 48, 33, 42, 71, 80, 81, - 100, 96, 118, 116, 122, 178, 206, 208, 179, 122, 96, 114, 183, 187, 193, 201, - 205, 212, 220, 221, 221, 221, 214, 209, 194, 193, 193, 181, 171, 161, 162, 166, - 182, 199, 199, 161, 87, 67, 57, 60, 61, 64, 67, 42, 9, 118, 154, 128, - 115, 110, 119, 107, 114, 111, 63, 102, 132, 135, 122, 122, 122, 123, 124, 122, - 119, 116, 96, 20, 102, 95, 112, 107, 111, 107, 99, 81, 73, 64, 55, 52, - 80, 88, 79, 81, 81, 64, 81, 85, 87, 75, 53, 38, 44, 79, 95, 91, - 59, 59, 60, 64, 65, 65, 68, 37, 51, 87, 83, 84, 83, 65, 64, 67, - 63, 63, 42, 59, 72, 69, 73, 65, 65, 56, 52, 51, 48, 45, 25, 8, - 64, 72, 87, 93, 97, 95, 85, 73, 91, 79, 68, 44, 71, 73, 91, 75, - 73, 80, 76, 67, 67, 57, 6, 72, 69, 53, 75, 72, 42, 48, 72, 64, - 68, 53, 51, 37, 83, 110, 112, 96, 95, 89, 87, 97, 76, 83, 64, 2, - 76, 83, 102, 83, 73, 71, 75, 83, 96, 60, 38, 97, 110, 116, 114, 107, - 100, 102, 112, 115, 104, 89, 61, 20, 69, 63, 69, 63, 85, 99, 96, 81, - 57, 59, 52, 69, 88, 85, 79, 76, 75, 76, 72, 71, 73, 73, 53, 44, - 60, 63, 63, 60, 59, 57, 56, 56, 55, 34, 16, 77, 67, 88, 72, 80, - 80, 84, 84, 77, 80, 92, 57, 22, 89, 89, 95, 99, 100, 99, 75, 81, - 63, 63, 30, 6, 46, 71, 67, 68, 65, 57, 53, 59, 59, 51, 29, 24, - 71, 81, 79, 46, 48, 60, 60, 63, 38, 28, 5, 72, 53, 53, 40, 41, - 41, 44, 42, 45, 45, 36, 40, 18, 59, 97, 77, 72, 65, 76, 57, 65, - 59, 55, 44, 13, 20, 29, 42, 38, 28, 29, 29, 32, 34, 24, 18, 49, - 48, 53, 51, 40, 52, 49, 51, 37, 42, 38, 37, 21, 56, 61, 53, 49, - 44, 32, 25, 29, 29, 26, 22, 51, 85, 91, 183, 178, 130, 103, 100, 99, - 120, 118, 80, 32, 36, 44, 59, 57, 53, 79, 163, 204, 208, 224, 220, 148, - 124, 130, 142, 143, 138, 126, 49, 6, 4, 4, 2, 1, 4, 20, 34, 25, - 17, 178, 166, 161, 161, 165, 161, 159, 147, 76, 6, 132, 170, 166, 174, 169, - 171, 169, 167, 157, 132, 112, 89, 136, 140, 155, 154, 161, 155, 150, 153, 154, - 142, 134, 80, 122, 130, 136, 132, 126, 131, 130, 126, 119, 108, 68, 83, 135, - 146, 146, 134, 140, 123, 128, 135, 128, 123, 122, 83, 103, 127, 123, 108, 111, - 123, 126, 135, 122, 123, 119, 72, 106, 130, 128, 116, 110, 124, 128, 128, 126, - 126, 111, 77, 13, 77, 108, 110, 99, 111, 100, 99, 97, 75, 73, 26, 81, - 122, 131, 134, 136, 136, 136, 131, 116, 97, 60, 28, 100, 112, 118, 126, 134, - 135, 135, 134, 128, 108, 64, 46, 107, 104, 108, 103, 123, 118, 122, 104, 96, - 72, 9, 123, 118, 107, 102, 108, 124, 126, 126, 124, 118, 96, 55, 18, 107, - 120, 130, 127, 127, 127, 128, 130, 108, 107, 108, 79, 124, 153, 151, 143, 128, - 131, 116, 111, 83, 96, 52, 30, 59, 75, 100, 103, 104, 96, 136, 118, 131, - 144, 191, 204, 175, 118, 106, 112, 151, 185, 194, 197, 204, 206, 206, 209, 201, - 195, 186, 167, 150, 144, 144, 147, 139, 142, 138, 144, 147, 144, 155, 181, 173, - 96, 57, 60, 64, 63, 67, 63, 29, 128, 132, 132, 115, 111, 118, 107, 111, - 102, 64, 96, 136, 131, 123, 128, 120, 122, 114, 128, 127, 115, 92, 20, 97, - 92, 118, 122, 114, 100, 87, 73, 75, 68, 55, 29, 76, 99, 83, 89, 77, - 80, 92, 93, 95, 84, 55, 37, 64, 95, 95, 103, 100, 75, 76, 73, 67, - 77, 63, 36, 81, 85, 91, 89, 91, 84, 71, 68, 69, 67, 45, 71, 73, - 81, 77, 77, 73, 65, 57, 57, 52, 48, 25, 6, 69, 84, 89, 75, 85, - 93, 95, 73, 83, 81, 68, 37, 72, 76, 88, 83, 89, 93, 76, 83, 67, - 60, 6, 80, 72, 65, 69, 67, 73, 71, 76, 73, 75, 68, 52, 55, 85, - 116, 96, 97, 93, 102, 89, 89, 97, 77, 68, 4, 85, 84, 80, 79, 99, - 95, 100, 89, 81, 63, 36, 92, 104, 112, 120, 118, 111, 110, 111, 104, 110, - 89, 61, 20, 68, 68, 71, 69, 96, 55, 60, 63, 56, 61, 51, 71, 87, - 85, 88, 71, 85, 80, 79, 73, 76, 73, 63, 44, 55, 64, 73, 72, 72, - 68, 67, 65, 56, 36, 16, 69, 96, 89, 77, 84, 93, 91, 89, 77, 73, - 92, 51, 26, 87, 93, 84, 83, 84, 83, 84, 80, 61, 63, 33, 9, 57, - 79, 52, 61, 49, 73, 63, 69, 61, 46, 28, 30, 68, 85, 60, 55, 49, - 64, 65, 63, 37, 25, 5, 68, 73, 53, 51, 45, 48, 49, 51, 51, 46, - 38, 41, 22, 61, 85, 92, 71, 67, 60, 49, 55, 53, 52, 41, 9, 32, - 53, 55, 46, 42, 40, 44, 48, 36, 25, 14, 48, 46, 49, 42, 48, 53, - 41, 52, 45, 46, 38, 28, 21, 55, 72, 41, 45, 37, 33, 28, 29, 28, - 25, 20, 52, 73, 85, 131, 173, 142, 108, 103, 106, 130, 118, 60, 51, 40, - 48, 53, 48, 76, 138, 201, 208, 212, 221, 194, 126, 124, 131, 146, 139, 130, - 81, 12, 4, 8, 4, 2, 1, 2, 21, 34, 38, 18, 162, 163, 165, 174, - 171, 166, 157, 150, 80, 9, 154, 171, 170, 171, 171, 171, 165, 165, 144, 130, - 112, 81, 130, 154, 167, 165, 162, 159, 153, 151, 148, 143, 135, 87, 85, 119, - 128, 123, 131, 131, 126, 123, 124, 107, 65, 92, 143, 144, 130, 130, 130, 138, - 138, 135, 134, 115, 119, 83, 102, 135, 126, 123, 110, 128, 104, 120, 103, 96, - 123, 77, 108, 132, 131, 115, 122, 134, 132, 118, 112, 127, 111, 75, 9, 81, - 103, 115, 102, 102, 107, 99, 93, 81, 77, 20, 75, 124, 132, 128, 130, 128, - 124, 134, 116, 99, 65, 25, 73, 127, 116, 132, 135, 138, 138, 138, 128, 126, - 61, 18, 104, 112, 111, 112, 107, 115, 110, 110, 110, 61, 4, 120, 116, 97, - 115, 108, 102, 95, 108, 99, 119, 92, 52, 16, 108, 110, 118, 124, 119, 128, - 132, 138, 110, 108, 108, 89, 103, 148, 150, 142, 128, 134, 119, 118, 112, 99, - 63, 32, 72, 97, 106, 102, 100, 99, 135, 123, 136, 122, 171, 209, 178, 110, - 103, 106, 120, 131, 158, 167, 177, 178, 181, 174, 159, 143, 135, 140, 142, 143, - 146, 157, 158, 163, 147, 140, 135, 130, 136, 136, 173, 153, 93, 53, 63, 60, - 60, 59, 14, 103, 128, 127, 96, 112, 122, 114, 114, 96, 65, 99, 134, 136, - 130, 122, 127, 123, 122, 131, 126, 116, 89, 25, 92, 97, 99, 104, 107, 107, - 89, 72, 77, 73, 60, 29, 55, 91, 93, 92, 103, 104, 119, 118, 115, 89, - 60, 16, 68, 96, 96, 103, 91, 84, 89, 108, 100, 80, 67, 34, 83, 87, - 95, 87, 84, 88, 84, 84, 71, 67, 49, 69, 80, 81, 80, 76, 77, 73, - 67, 61, 57, 46, 28, 6, 71, 88, 69, 73, 81, 102, 88, 84, 88, 77, - 68, 40, 83, 81, 88, 80, 87, 83, 85, 87, 71, 46, 8, 79, 79, 95, - 77, 76, 79, 89, 77, 75, 73, 81, 60, 42, 68, 104, 114, 115, 108, 103, - 110, 115, 92, 85, 46, 1, 69, 88, 87, 96, 106, 95, 95, 93, 80, 64, - 34, 73, 107, 107, 111, 108, 111, 112, 111, 118, 114, 106, 63, 21, 67, 60, - 73, 88, 65, 83, 67, 68, 53, 63, 55, 71, 77, 95, 93, 76, 79, 88, - 89, 83, 85, 79, 72, 48, 57, 75, 60, 69, 76, 75, 72, 71, 59, 38, - 18, 87, 95, 91, 97, 87, 87, 84, 77, 77, 81, 95, 51, 33, 53, 92, - 84, 77, 83, 81, 79, 75, 61, 59, 32, 9, 59, 73, 65, 61, 68, 67, - 69, 59, 53, 41, 32, 24, 69, 80, 63, 46, 61, 55, 61, 60, 38, 29, - 4, 64, 60, 57, 53, 68, 68, 75, 73, 69, 53, 41, 42, 24, 57, 91, - 97, 96, 77, 77, 51, 51, 53, 46, 33, 22, 45, 48, 40, 46, 55, 55, - 53, 44, 34, 25, 14, 53, 48, 46, 32, 55, 52, 48, 51, 44, 46, 42, - 34, 13, 53, 68, 48, 41, 32, 33, 30, 41, 24, 29, 18, 42, 60, 79, - 102, 135, 167, 112, 103, 130, 139, 100, 52, 51, 60, 48, 57, 77, 135, 187, - 208, 209, 221, 210, 151, 120, 130, 140, 138, 126, 97, 18, 5, 5, 5, 5, - 2, 1, 1, 14, 33, 5, 28, 158, 159, 157, 154, 157, 155, 154, 138, 71, - 12, 116, 171, 169, 169, 169, 171, 171, 158, 134, 126, 112, 72, 150, 147, 158, - 148, 157, 148, 146, 142, 138, 138, 132, 130, 91, 96, 108, 107, 124, 130, 134, - 119, 123, 116, 60, 93, 142, 146, 124, 134, 135, 136, 131, 135, 122, 143, 106, - 88, 100, 135, 126, 128, 119, 130, 114, 111, 107, 123, 96, 84, 112, 134, 127, - 139, 111, 114, 132, 128, 130, 115, 110, 84, 21, 68, 107, 110, 112, 104, 108, - 103, 103, 83, 81, 26, 119, 127, 128, 139, 127, 122, 123, 124, 120, 96, 64, - 8, 108, 130, 119, 130, 134, 132, 140, 134, 128, 120, 83, 20, 114, 122, 120, - 110, 118, 115, 118, 123, 99, 93, 9, 118, 134, 123, 130, 122, 123, 124, 119, - 114, 118, 95, 52, 13, 119, 118, 122, 135, 126, 116, 114, 130, 127, 108, 111, - 91, 96, 143, 147, 142, 142, 134, 128, 127, 118, 107, 68, 32, 80, 100, 106, - 108, 116, 132, 119, 136, 114, 140, 126, 201, 191, 123, 111, 107, 115, 119, 127, - 132, 134, 139, 134, 132, 126, 118, 115, 115, 118, 132, 143, 153, 157, 158, 159, - 144, 142, 142, 140, 130, 139, 170, 100, 53, 59, 60, 63, 51, 14, 102, 140, - 128, 116, 114, 116, 115, 118, 95, 52, 96, 130, 142, 139, 134, 132, 132, 132, - 135, 122, 114, 95, 34, 93, 99, 107, 100, 91, 84, 81, 65, 76, 79, 52, - 64, 76, 106, 116, 102, 107, 103, 116, 99, 92, 89, 55, 16, 76, 100, 106, - 95, 97, 97, 96, 99, 97, 75, 69, 30, 97, 87, 96, 83, 91, 85, 88, - 89, 89, 71, 49, 67, 75, 73, 75, 73, 76, 69, 68, 65, 65, 48, 30, - 9, 73, 89, 87, 67, 89, 73, 72, 79, 79, 76, 65, 44, 79, 91, 91, - 83, 80, 81, 87, 87, 67, 64, 22, 80, 80, 80, 93, 83, 81, 81, 87, - 87, 88, 87, 76, 51, 68, 91, 99, 102, 99, 83, 91, 85, 85, 80, 69, - 8, 72, 91, 89, 92, 93, 89, 83, 80, 81, 75, 55, 52, 95, 103, 103, - 103, 102, 104, 104, 103, 103, 95, 68, 21, 65, 67, 56, 64, 55, 69, 64, - 63, 63, 72, 64, 55, 79, 71, 73, 69, 75, 72, 75, 73, 77, 75, 75, - 69, 55, 61, 61, 55, 63, 67, 65, 72, 63, 44, 16, 76, 95, 85, 79, - 79, 83, 77, 79, 85, 93, 96, 60, 28, 38, 87, 95, 88, 95, 84, 79, - 57, 59, 49, 32, 9, 55, 71, 73, 81, 71, 76, 69, 65, 63, 38, 32, - 28, 69, 93, 72, 45, 48, 63, 64, 75, 42, 24, 5, 45, 68, 57, 60, - 61, 53, 49, 53, 57, 64, 42, 44, 24, 55, 80, 92, 85, 71, 71, 42, - 51, 52, 49, 29, 18, 52, 46, 51, 44, 41, 37, 40, 42, 34, 21, 14, - 55, 44, 48, 52, 52, 48, 49, 48, 45, 46, 48, 36, 10, 52, 59, 41, - 29, 38, 32, 29, 24, 26, 20, 20, 45, 49, 42, 65, 81, 157, 144, 103, - 114, 135, 127, 61, 49, 56, 72, 111, 150, 186, 198, 202, 217, 213, 165, 119, - 124, 136, 134, 122, 87, 18, 6, 5, 6, 5, 5, 2, 1, 2, 21, 25, - 57, 65, 139, 138, 138, 138, 136, 138, 131, 130, 67, 26, 79, 128, 173, 174, - 151, 155, 134, 134, 132, 104, 99, 72, 142, 146, 144, 140, 143, 147, 142, 132, - 126, 122, 124, 119, 124, 138, 134, 123, 110, 110, 110, 106, 111, 97, 59, 119, - 140, 148, 127, 128, 118, 124, 120, 119, 114, 123, 122, 107, 92, 111, 114, 108, - 116, 115, 127, 122, 122, 123, 123, 116, 111, 99, 104, 128, 123, 118, 114, 115, - 112, 108, 103, 81, 9, 64, 107, 104, 102, 104, 102, 100, 102, 93, 77, 30, - 83, 119, 119, 122, 120, 123, 120, 128, 122, 95, 59, 30, 112, 128, 123, 122, - 122, 127, 115, 128, 123, 108, 72, 12, 108, 106, 124, 124, 120, 122, 126, 116, - 96, 88, 9, 110, 120, 119, 118, 119, 118, 116, 115, 114, 115, 89, 49, 29, - 112, 116, 124, 119, 123, 118, 124, 114, 118, 119, 111, 97, 85, 120, 146, 138, - 131, 124, 110, 115, 122, 106, 71, 30, 80, 103, 126, 122, 134, 146, 127, 150, - 147, 135, 116, 144, 182, 134, 103, 106, 110, 118, 119, 115, 124, 123, 126, 120, - 118, 115, 116, 120, 151, 155, 131, 150, 161, 157, 157, 165, 148, 147, 143, 144, - 140, 166, 96, 46, 52, 57, 61, 44, 9, 92, 124, 127, 118, 111, 118, 115, - 106, 95, 51, 96, 115, 132, 130, 124, 122, 119, 119, 116, 108, 104, 93, 29, - 48, 84, 85, 61, 55, 75, 73, 49, 52, 60, 61, 67, 79, 99, 108, 99, - 96, 93, 96, 93, 92, 91, 48, 30, 68, 95, 110, 104, 104, 110, 97, 102, - 97, 77, 68, 33, 85, 83, 89, 84, 79, 77, 67, 64, 80, 76, 72, 71, - 56, 59, 59, 59, 55, 53, 55, 57, 52, 51, 29, 6, 77, 95, 59, 60, - 64, 60, 61, 61, 65, 69, 63, 61, 59, 64, 76, 76, 65, 65, 63, 64, - 59, 67, 5, 79, 79, 80, 76, 76, 79, 81, 79, 79, 75, 79, 77, 72, - 53, 52, 61, 65, 63, 61, 65, 65, 65, 69, 73, 5, 41, 85, 85, 83, - 83, 80, 53, 51, 53, 59, 73, 73, 59, 73, 85, 79, 83, 80, 85, 91, - 91, 81, 63, 21, 57, 51, 52, 57, 55, 56, 60, 63, 40, 38, 41, 69, - 71, 73, 75, 76, 75, 76, 77, 79, 75, 77, 73, 73, 72, 77, 75, 76, - 73, 60, 60, 71, 60, 46, 20, 85, 96, 81, 87, 92, 79, 93, 96, 84, - 73, 71, 63, 32, 32, 83, 77, 85, 55, 53, 53, 42, 46, 42, 32, 9, - 53, 63, 60, 42, 59, 59, 63, 49, 51, 42, 30, 25, 68, 81, 55, 56, - 49, 60, 60, 76, 34, 26, 5, 67, 63, 60, 57, 55, 52, 52, 52, 49, - 48, 46, 46, 26, 34, 52, 73, 67, 52, 41, 48, 44, 41, 49, 45, 18, - 52, 48, 51, 42, 48, 42, 40, 37, 34, 24, 14, 48, 53, 49, 46, 48, - 48, 46, 41, 42, 40, 36, 24, 13, 44, 56, 34, 21, 22, 25, 28, 26, - 25, 21, 21, 33, 42, 41, 46, 67, 77, 171, 114, 110, 140, 134, 128, 124, - 126, 153, 179, 182, 193, 195, 210, 206, 163, 116, 124, 131, 120, 111, 83, 22, - 6, 6, 6, 5, 4, 5, 4, 1, 2, 12, 14, 12, 10, 81, 77, 75, - 67, 60, 56, 49, 45, 36, 40, 40, 56, 65, 63, 80, 84, 95, 77, 97, - 107, 84, 69, 106, 75, 99, 93, 65, 67, 85, 71, 60, 55, 68, 64, 77, - 60, 76, 75, 99, 131, 134, 132, 95, 81, 56, 114, 123, 127, 118, 116, 110, - 123, 118, 115, 126, 127, 120, 115, 119, 130, 135, 134, 130, 132, 128, 130, 128, - 124, 122, 122, 119, 119, 75, 76, 53, 40, 37, 36, 33, 33, 28, 36, 10, - 32, 32, 37, 41, 44, 55, 84, 99, 89, 76, 37, 10, 85, 112, 68, 83, - 95, 114, 68, 91, 91, 48, 29, 60, 83, 68, 67, 84, 80, 69, 67, 84, - 85, 38, 13, 63, 83, 61, 87, 77, 77, 59, 91, 75, 42, 10, 33, 80, - 81, 80, 79, 87, 88, 83, 84, 88, 87, 45, 17, 85, 122, 118, 96, 92, - 108, 111, 84, 95, 103, 115, 102, 107, 111, 104, 93, 107, 103, 103, 95, 92, - 89, 69, 33, 76, 112, 112, 103, 100, 112, 112, 103, 106, 130, 136, 167, 182, - 170, 115, 108, 103, 110, 106, 65, 56, 56, 57, 57, 56, 60, 60, 97, 116, - 165, 124, 130, 154, 158, 161, 158, 155, 162, 148, 148, 142, 163, 102, 46, 46, - 55, 44, 53, 18, 48, 75, 102, 128, 126, 120, 132, 97, 87, 55, 91, 100, - 122, 122, 115, 95, 87, 83, 77, 77, 60, 48, 63, 69, 61, 65, 63, 61, - 53, 55, 53, 53, 44, 45, 45, 55, 87, 85, 93, 100, 96, 104, 87, 97, - 83, 32, 28, 63, 91, 87, 77, 88, 89, 85, 81, 85, 80, 68, 36, 87, - 84, 72, 79, 77, 76, 76, 77, 73, 71, 69, 67, 71, 69, 67, 68, 67, - 64, 61, 61, 60, 56, 53, 6, 49, 59, 53, 55, 56, 59, 57, 60, 61, - 63, 61, 57, 63, 60, 61, 61, 59, 57, 56, 60, 53, 46, 5, 52, 60, - 55, 59, 59, 63, 64, 64, 65, 67, 68, 68, 59, 67, 73, 68, 60, 73, - 71, 63, 51, 75, 63, 48, 18, 52, 38, 33, 33, 36, 26, 32, 34, 29, - 30, 34, 29, 46, 55, 46, 44, 64, 72, 65, 51, 71, 72, 44, 25, 51, - 21, 22, 22, 21, 18, 18, 20, 20, 14, 14, 20, 14, 13, 13, 17, 16, - 16, 17, 20, 21, 20, 21, 24, 28, 29, 32, 34, 40, 72, 69, 76, 60, - 41, 17, 73, 93, 80, 89, 93, 88, 87, 75, 76, 63, 60, 48, 45, 28, - 41, 40, 44, 48, 44, 33, 32, 28, 25, 34, 13, 24, 21, 21, 28, 29, - 36, 48, 34, 30, 33, 29, 34, 46, 49, 45, 51, 41, 46, 48, 45, 34, - 24, 5, 60, 57, 61, 60, 56, 55, 53, 52, 53, 52, 49, 49, 46, 48, - 45, 45, 46, 45, 44, 45, 44, 44, 42, 38, 18, 46, 37, 41, 40, 38, - 36, 28, 34, 36, 24, 13, 12, 13, 13, 16, 13, 13, 12, 14, 29, 26, - 25, 18, 12, 38, 21, 16, 16, 18, 17, 13, 16, 14, 12, 30, 30, 13, - 33, 33, 42, 49, 93, 132, 114, 126, 151, 153, 161, 169, 174, 181, 191, 194, - 205, 199, 166, 120, 122, 119, 110, 97, 61, 18, 10, 8, 8, 4, 5, 5, - 8, 4, 4, 0, 0, 0, 0, 0, 99, 88, 118, 123, 102, 92, 135, 134, - 64, 13, 84, 131, 127, 95, 107, 99, 60, 53, 65, 61, 57, 69, 34, 36, - 60, 71, 89, 102, 119, 122, 140, 151, 127, 108, 127, 143, 131, 122, 87, 76, - 75, 68, 108, 93, 56, 88, 92, 73, 73, 61, 60, 49, 51, 51, 46, 51, - 42, 37, 32, 26, 26, 24, 24, 25, 25, 24, 22, 26, 24, 21, 24, 37, - 88, 112, 124, 124, 128, 131, 131, 127, 128, 89, 10, 120, 161, 161, 138, 88, - 89, 76, 56, 55, 71, 57, 10, 1, 29, 20, 21, 1, 21, 12, 2, 2, - 14, 32, 1, 0, 41, 22, 2, 1, 21, 16, 4, 6, 20, 17, 5, 4, - 9, 30, 2, 1, 10, 2, 6, 0, 1, 9, 0, 0, 1, 4, 2, 2, - 1, 2, 2, 4, 26, 8, 34, 29, 38, 37, 42, 51, 63, 85, 87, 95, - 106, 79, 76, 69, 72, 65, 61, 60, 51, 46, 67, 57, 59, 36, 67, 72, - 73, 81, 93, 93, 93, 118, 120, 142, 161, 163, 199, 190, 153, 114, 104, 106, - 107, 48, 49, 49, 56, 53, 51, 57, 56, 73, 111, 158, 162, 127, 126, 151, - 154, 157, 157, 163, 144, 146, 159, 153, 97, 42, 41, 45, 32, 10, 33, 45, - 46, 55, 41, 41, 57, 61, 72, 96, 53, 83, 95, 89, 68, 64, 67, 64, - 44, 45, 46, 34, 25, 14, 16, 16, 12, 9, 9, 8, 8, 5, 5, 5, - 4, 2, 2, 1, 1, 0, 0, 0, 6, 8, 12, 12, 14, 16, 22, 26, - 36, 33, 38, 49, 46, 61, 79, 83, 65, 37, 76, 64, 64, 53, 44, 44, - 38, 33, 29, 29, 22, 16, 14, 20, 10, 9, 8, 21, 6, 5, 5, 24, - 4, 2, 1, 2, 2, 0, 1, 4, 2, 2, 5, 8, 5, 6, 9, 12, - 4, 6, 18, 20, 4, 8, 26, 28, 24, 6, 21, 21, 4, 2, 16, 4, - 4, 12, 13, 1, 1, 0, 8, 2, 0, 5, 8, 0, 0, 0, 6, 0, - 0, 17, 22, 29, 55, 84, 63, 71, 87, 99, 89, 73, 51, 34, 64, 92, - 92, 76, 80, 36, 26, 25, 22, 25, 21, 16, 13, 40, 44, 38, 41, 53, - 52, 52, 51, 65, 45, 5, 21, 95, 116, 76, 85, 97, 110, 85, 88, 87, - 84, 81, 87, 97, 99, 85, 49, 36, 41, 41, 60, 41, 18, 45, 46, 46, - 44, 48, 46, 46, 48, 48, 46, 52, 45, 44, 34, 21, 17, 24, 34, 18, - 21, 52, 76, 84, 57, 13, 56, 75, 73, 37, 32, 28, 36, 22, 28, 18, - 49, 30, 24, 18, 18, 25, 20, 30, 30, 34, 26, 26, 22, 17, 36, 37, - 46, 33, 37, 36, 38, 36, 41, 42, 37, 36, 38, 40, 37, 37, 42, 38, - 34, 34, 42, 36, 14, 25, 48, 38, 38, 30, 36, 38, 42, 52, 42, 37, - 14, 56, 77, 77, 61, 75, 72, 69, 38, 30, 28, 14, 9, 5, 14, 30, - 40, 38, 42, 37, 40, 29, 37, 26, 17, 38, 80, 102, 69, 67, 69, 59, - 132, 154, 138, 148, 123, 126, 130, 144, 147, 155, 154, 157, 140, 128, 131, 107, - 72, 55, 29, 12, 9, 9, 8, 6, 10, 12, 18, 18, 22, 2, 0, 18, - 64, 64, 61, 178, 178, 174, 174, 166, 170, 165, 150, 124, 38, 87, 142, 130, - 136, 138, 130, 130, 130, 112, 119, 85, 40, 79, 158, 173, 177, 177, 175, 174, - 173, 169, 157, 165, 170, 167, 167, 165, 165, 162, 153, 143, 127, 104, 95, 53, - 56, 63, 73, 79, 93, 103, 136, 115, 124, 108, 77, 79, 81, 148, 161, 150, - 135, 167, 158, 135, 159, 147, 150, 140, 143, 140, 147, 166, 154, 139, 134, 139, - 143, 139, 144, 135, 95, 16, 122, 162, 163, 159, 163, 163, 127, 147, 110, 73, - 61, 88, 116, 122, 112, 108, 106, 100, 103, 97, 65, 53, 8, 36, 155, 158, - 112, 119, 151, 151, 123, 128, 122, 63, 6, 30, 102, 126, 95, 95, 91, 91, - 111, 97, 53, 29, 76, 97, 99, 87, 84, 84, 83, 79, 77, 73, 72, 37, - 9, 123, 142, 139, 116, 139, 106, 56, 42, 40, 37, 33, 36, 40, 63, 84, - 93, 96, 107, 108, 119, 120, 118, 100, 34, 116, 134, 132, 114, 143, 127, 130, - 120, 123, 157, 162, 206, 205, 191, 179, 123, 108, 104, 116, 46, 48, 48, 49, - 51, 41, 41, 61, 72, 110, 178, 178, 120, 127, 114, 132, 136, 135, 131, 157, - 153, 143, 106, 83, 41, 40, 38, 38, 45, 45, 100, 114, 96, 97, 73, 61, - 63, 57, 76, 40, 37, 45, 61, 64, 68, 59, 61, 60, 84, 80, 80, 84, - 130, 132, 140, 131, 139, 134, 128, 139, 136, 132, 131, 120, 122, 123, 127, 135, - 123, 127, 118, 93, 96, 89, 79, 33, 14, 92, 135, 143, 104, 100, 85, 79, - 67, 72, 51, 57, 41, 46, 61, 61, 65, 51, 60, 65, 89, 60, 55, 60, - 99, 131, 135, 112, 100, 122, 123, 107, 103, 122, 112, 26, 5, 61, 134, 96, - 100, 97, 104, 103, 111, 119, 119, 115, 110, 116, 120, 135, 119, 119, 119, 120, - 116, 114, 34, 12, 33, 108, 135, 103, 108, 111, 111, 110, 118, 119, 120, 119, - 114, 124, 135, 130, 128, 126, 123, 119, 103, 116, 112, 38, 2, 64, 96, 115, - 120, 115, 114, 115, 110, 114, 102, 67, 32, 69, 106, 97, 97, 93, 92, 95, - 87, 83, 76, 37, 36, 91, 107, 106, 104, 102, 96, 68, 75, 88, 63, 53, - 4, 103, 106, 92, 99, 95, 102, 93, 104, 92, 93, 87, 89, 59, 84, 99, - 88, 76, 92, 88, 81, 71, 51, 20, 17, 14, 13, 13, 13, 12, 13, 12, - 10, 12, 12, 12, 12, 20, 77, 93, 85, 79, 87, 76, 76, 85, 88, 67, - 14, 67, 87, 76, 71, 61, 61, 53, 65, 69, 53, 20, 18, 73, 85, 84, - 77, 72, 56, 33, 21, 22, 20, 9, 0, 0, 9, 5, 0, 0, 6, 4, - 0, 0, 4, 2, 0, 2, 2, 2, 1, 9, 2, 2, 4, 14, 4, 5, - 24, 46, 61, 91, 93, 95, 95, 92, 88, 49, 45, 14, 64, 79, 61, 64, - 69, 63, 59, 59, 69, 59, 44, 21, 8, 53, 75, 84, 84, 77, 85, 76, - 76, 38, 29, 17, 106, 115, 95, 103, 91, 103, 95, 104, 46, 65, 65, 91, - 92, 102, 135, 136, 134, 128, 134, 132, 118, 85, 59, 24, 13, 13, 14, 13, - 10, 8, 12, 18, 14, 22, 32, 10, 4, 4, 42, 68, 83, 84, 166, 170, - 169, 174, 171, 174, 167, 167, 124, 38, 111, 142, 140, 135, 136, 136, 128, 144, - 139, 122, 88, 32, 144, 169, 170, 144, 155, 153, 136, 155, 153, 153, 158, 115, - 144, 158, 170, 173, 166, 169, 159, 155, 118, 120, 53, 110, 150, 143, 150, 144, - 144, 139, 161, 174, 130, 120, 119, 93, 106, 157, 150, 138, 140, 157, 159, 169, - 165, 150, 146, 148, 120, 120, 150, 151, 151, 154, 147, 143, 143, 138, 139, 112, - 13, 135, 165, 155, 162, 161, 158, 157, 162, 131, 107, 64, 123, 128, 130, 130, - 128, 126, 131, 135, 124, 96, 53, 24, 122, 162, 155, 151, 151, 151, 155, 155, - 154, 140, 71, 1, 130, 143, 155, 144, 142, 142, 147, 140, 138, 100, 33, 119, - 119, 118, 110, 111, 104, 102, 95, 95, 93, 92, 36, 9, 123, 142, 146, 146, - 139, 135, 130, 136, 131, 122, 107, 116, 93, 106, 130, 128, 128, 128, 143, 147, - 140, 131, 100, 37, 128, 150, 140, 150, 130, 139, 130, 127, 150, 166, 204, 204, - 198, 201, 174, 115, 108, 110, 115, 48, 46, 42, 53, 51, 44, 64, 60, 80, - 107, 189, 187, 126, 123, 130, 123, 100, 107, 104, 93, 89, 95, 87, 68, 37, - 38, 37, 49, 42, 75, 128, 123, 126, 111, 114, 116, 107, 107, 76, 46, 63, - 138, 144, 135, 131, 135, 142, 123, 139, 93, 127, 110, 96, 120, 118, 130, 124, - 111, 122, 126, 112, 115, 120, 111, 115, 111, 81, 83, 99, 89, 81, 88, 84, - 87, 79, 34, 14, 110, 151, 139, 132, 144, 143, 118, 131, 139, 103, 85, 42, - 79, 128, 134, 132, 131, 124, 131, 134, 128, 142, 126, 92, 89, 95, 97, 97, - 102, 107, 99, 112, 107, 118, 67, 8, 132, 128, 84, 99, 119, 116, 123, 99, - 118, 127, 123, 112, 83, 88, 95, 88, 83, 93, 92, 88, 83, 40, 0, 119, - 146, 138, 143, 139, 144, 139, 140, 135, 135, 138, 132, 108, 81, 103, 107, 107, - 111, 111, 110, 99, 97, 99, 40, 24, 85, 110, 114, 97, 93, 100, 96, 97, - 97, 108, 71, 40, 83, 106, 92, 97, 93, 104, 92, 77, 89, 77, 41, 30, - 96, 99, 88, 106, 88, 99, 103, 93, 76, 61, 53, 8, 100, 102, 85, 84, - 80, 93, 99, 99, 92, 99, 67, 48, 79, 100, 91, 87, 84, 83, 83, 85, - 55, 57, 24, 29, 100, 111, 88, 80, 99, 108, 100, 97, 104, 95, 91, 84, - 89, 92, 112, 112, 107, 103, 89, 81, 80, 84, 68, 17, 65, 85, 81, 79, - 76, 76, 71, 53, 49, 26, 17, 59, 118, 116, 124, 112, 116, 106, 100, 93, - 64, 34, 12, 65, 80, 88, 75, 87, 76, 83, 65, 77, 75, 73, 61, 61, - 97, 87, 96, 89, 97, 99, 77, 87, 112, 88, 32, 25, 72, 95, 89, 87, - 75, 75, 65, 75, 57, 38, 14, 63, 79, 79, 60, 64, 68, 68, 64, 60, - 59, 59, 28, 9, 63, 77, 84, 79, 79, 79, 72, 52, 34, 24, 10, 114, - 92, 102, 102, 100, 81, 135, 132, 63, 48, 38, 36, 41, 46, 60, 68, 59, - 61, 59, 53, 36, 21, 14, 10, 13, 13, 13, 4, 5, 12, 21, 22, 16, - 28, 12, 12, 4, 2, 38, 73, 55, 57, 161, 161, 165, 171, 174, 171, 169, - 167, 118, 17, 79, 140, 143, 140, 136, 118, 143, 139, 142, 119, 88, 34, 155, - 173, 155, 144, 162, 162, 173, 162, 151, 157, 151, 108, 140, 162, 151, 165, 142, - 163, 163, 162, 150, 119, 56, 138, 153, 166, 143, 138, 134, 143, 136, 142, 134, - 139, 128, 89, 153, 170, 165, 161, 158, 157, 155, 147, 151, 142, 140, 100, 143, - 158, 142, 139, 138, 143, 143, 150, 135, 142, 123, 103, 13, 131, 154, 151, 162, - 161, 159, 154, 155, 130, 110, 65, 122, 118, 130, 131, 131, 136, 139, 135, 124, - 100, 55, 5, 159, 161, 147, 147, 147, 144, 144, 140, 139, 131, 75, 25, 138, - 132, 140, 142, 144, 148, 147, 147, 126, 120, 40, 116, 103, 100, 85, 99, 95, - 103, 92, 91, 89, 92, 41, 5, 124, 143, 142, 135, 128, 131, 140, 142, 131, - 131, 96, 73, 126, 148, 151, 144, 140, 144, 144, 148, 142, 132, 110, 38, 127, - 142, 151, 142, 161, 146, 126, 135, 150, 186, 205, 202, 199, 198, 142, 112, 110, - 108, 106, 40, 41, 42, 49, 33, 53, 64, 56, 79, 111, 201, 194, 177, 123, - 126, 147, 136, 135, 134, 131, 131, 112, 102, 67, 37, 36, 40, 48, 38, 79, - 130, 119, 128, 124, 120, 116, 120, 104, 84, 42, 110, 131, 128, 132, 132, 128, - 122, 118, 107, 132, 118, 88, 116, 138, 138, 132, 120, 123, 107, 112, 108, 123, - 110, 103, 68, 99, 99, 87, 88, 88, 88, 95, 95, 96, 73, 42, 12, 102, - 157, 142, 143, 135, 135, 144, 143, 147, 147, 95, 45, 107, 138, 140, 135, 143, - 131, 136, 132, 123, 123, 89, 99, 126, 123, 122, 115, 108, 112, 119, 120, 114, - 114, 84, 13, 130, 83, 132, 127, 93, 96, 126, 112, 103, 103, 111, 67, 91, - 115, 123, 126, 118, 114, 118, 100, 99, 42, 18, 124, 144, 138, 124, 126, 130, - 135, 132, 136, 131, 134, 111, 85, 120, 122, 119, 115, 115, 115, 104, 104, 103, - 91, 52, 5, 81, 112, 107, 95, 97, 96, 108, 108, 104, 108, 69, 40, 85, - 97, 84, 95, 80, 87, 80, 81, 99, 77, 38, 29, 89, 93, 91, 96, 92, - 103, 100, 97, 77, 65, 49, 6, 65, 99, 88, 87, 79, 76, 89, 76, 93, - 76, 63, 45, 77, 100, 95, 89, 84, 91, 87, 80, 63, 60, 24, 61, 112, - 104, 104, 103, 106, 106, 104, 102, 92, 89, 87, 55, 91, 114, 99, 88, 95, - 91, 88, 92, 80, 93, 61, 18, 63, 68, 92, 59, 55, 57, 42, 40, 40, - 21, 14, 75, 119, 118, 103, 108, 107, 118, 112, 111, 83, 51, 17, 60, 65, - 45, 65, 81, 95, 53, 46, 71, 53, 48, 60, 73, 73, 97, 110, 110, 106, - 95, 93, 96, 106, 92, 56, 40, 76, 87, 72, 76, 76, 77, 76, 79, 49, - 40, 13, 65, 79, 79, 56, 57, 67, 55, 65, 65, 65, 57, 26, 8, 67, - 83, 75, 64, 68, 69, 65, 46, 30, 22, 9, 87, 104, 87, 112, 120, 104, - 103, 53, 73, 63, 57, 34, 38, 26, 25, 30, 21, 25, 21, 22, 20, 17, - 16, 12, 13, 8, 8, 14, 24, 24, 21, 18, 21, 29, 12, 5, 2, 0, - 44, 67, 48, 12, 178, 177, 174, 161, 161, 173, 165, 150, 116, 13, 110, 142, - 146, 148, 136, 136, 127, 138, 132, 100, 83, 34, 134, 167, 154, 158, 143, 162, - 155, 163, 148, 159, 146, 102, 128, 162, 130, 151, 143, 169, 163, 155, 151, 131, - 59, 134, 167, 143, 148, 142, 143, 146, 142, 139, 146, 146, 80, 42, 155, 169, - 155, 167, 158, 157, 155, 161, 163, 138, 143, 92, 139, 155, 138, 139, 140, 138, - 147, 146, 142, 136, 136, 97, 12, 130, 154, 151, 158, 155, 150, 130, 166, 158, - 114, 79, 81, 123, 127, 131, 128, 115, 123, 126, 123, 55, 56, 5, 110, 161, - 144, 147, 143, 151, 138, 150, 140, 135, 77, 4, 91, 147, 150, 136, 134, 138, - 139, 157, 146, 85, 46, 76, 100, 107, 92, 100, 102, 93, 92, 99, 99, 81, - 40, 5, 114, 139, 150, 130, 124, 126, 131, 127, 124, 103, 100, 77, 146, 154, - 146, 161, 142, 147, 144, 146, 146, 132, 114, 42, 127, 142, 143, 123, 120, 131, - 124, 142, 167, 212, 205, 204, 195, 146, 118, 107, 106, 118, 67, 42, 41, 42, - 45, 57, 56, 65, 65, 95, 115, 202, 205, 190, 123, 126, 131, 146, 148, 151, - 150, 146, 138, 118, 73, 36, 38, 37, 46, 34, 67, 124, 120, 126, 124, 135, - 130, 123, 108, 91, 46, 112, 127, 128, 126, 130, 135, 120, 119, 110, 118, 112, - 79, 112, 136, 116, 115, 130, 116, 118, 112, 111, 114, 119, 100, 64, 97, 114, - 110, 103, 92, 83, 100, 80, 85, 71, 41, 12, 123, 146, 135, 136, 142, 143, - 143, 142, 139, 128, 104, 52, 116, 139, 128, 127, 126, 126, 123, 126, 120, 97, - 80, 108, 127, 112, 116, 118, 119, 116, 118, 118, 116, 120, 59, 12, 69, 124, - 92, 119, 120, 115, 119, 123, 120, 114, 95, 63, 92, 116, 111, 104, 96, 103, - 104, 112, 104, 40, 14, 95, 143, 135, 143, 134, 130, 134, 138, 135, 140, 123, - 107, 85, 122, 127, 110, 115, 115, 112, 116, 116, 110, 84, 51, 2, 77, 114, - 104, 91, 93, 96, 102, 96, 99, 99, 71, 48, 72, 108, 85, 83, 89, 83, - 93, 85, 87, 68, 38, 28, 65, 92, 87, 84, 85, 93, 96, 99, 76, 65, - 52, 0, 63, 106, 80, 91, 79, 80, 87, 73, 93, 69, 55, 34, 85, 100, - 97, 92, 72, 79, 80, 89, 83, 73, 24, 84, 115, 102, 84, 89, 91, 97, - 89, 100, 93, 84, 64, 52, 89, 111, 93, 96, 93, 89, 83, 81, 83, 89, - 60, 24, 64, 73, 57, 59, 41, 45, 44, 44, 29, 20, 10, 61, 116, 115, - 102, 108, 106, 106, 103, 119, 89, 56, 14, 59, 59, 91, 73, 81, 103, 51, - 72, 75, 51, 63, 71, 52, 89, 110, 103, 102, 91, 99, 99, 99, 96, 91, - 65, 28, 84, 80, 77, 61, 64, 59, 61, 76, 57, 41, 17, 61, 83, 87, - 57, 53, 53, 59, 55, 52, 63, 41, 21, 5, 67, 73, 75, 53, 56, 48, - 44, 41, 34, 25, 10, 93, 100, 100, 85, 96, 73, 110, 69, 72, 63, 60, - 52, 40, 29, 25, 24, 22, 20, 18, 16, 17, 14, 14, 10, 9, 10, 18, - 24, 25, 36, 18, 17, 20, 34, 14, 24, 2, 0, 41, 67, 37, 59, 163, - 165, 163, 169, 159, 157, 167, 151, 126, 30, 110, 138, 142, 131, 138, 142, 134, - 139, 128, 111, 89, 29, 131, 163, 162, 146, 165, 157, 157, 148, 148, 162, 138, - 99, 146, 165, 159, 157, 161, 170, 162, 155, 159, 130, 69, 120, 155, 142, 144, - 140, 140, 154, 147, 148, 143, 142, 95, 38, 155, 169, 163, 159, 154, 161, 146, - 148, 150, 130, 134, 88, 136, 150, 139, 140, 140, 142, 134, 140, 147, 132, 131, - 102, 16, 131, 154, 151, 169, 162, 150, 155, 161, 151, 120, 87, 107, 120, 126, - 116, 115, 118, 120, 114, 122, 68, 52, 4, 108, 154, 144, 146, 151, 150, 150, - 147, 146, 136, 75, 2, 93, 143, 142, 139, 136, 135, 136, 143, 131, 93, 48, - 108, 104, 87, 92, 97, 104, 95, 92, 97, 104, 76, 41, 2, 124, 142, 146, - 128, 132, 139, 142, 139, 118, 106, 75, 72, 144, 155, 144, 150, 138, 148, 150, - 150, 142, 128, 108, 55, 116, 135, 144, 130, 119, 126, 114, 136, 195, 206, 205, - 201, 153, 122, 107, 108, 115, 73, 53, 40, 41, 45, 44, 57, 59, 68, 69, - 89, 115, 210, 208, 198, 123, 124, 131, 134, 142, 147, 148, 151, 143, 123, 75, - 34, 34, 33, 49, 30, 72, 126, 118, 123, 123, 132, 131, 119, 122, 81, 46, - 102, 130, 135, 142, 142, 144, 120, 114, 107, 119, 100, 75, 108, 136, 123, 122, - 114, 124, 124, 122, 108, 127, 118, 96, 61, 107, 107, 102, 88, 84, 77, 80, - 79, 83, 67, 34, 10, 123, 148, 148, 132, 151, 138, 134, 138, 131, 134, 103, - 63, 103, 136, 123, 122, 118, 134, 119, 106, 116, 100, 71, 107, 131, 115, 115, - 116, 114, 119, 114, 115, 119, 120, 60, 10, 85, 122, 126, 91, 93, 118, 111, - 108, 108, 112, 96, 59, 88, 128, 119, 92, 112, 124, 112, 99, 99, 37, 0, - 114, 138, 139, 136, 131, 134, 124, 127, 128, 130, 124, 100, 80, 120, 119, 106, - 108, 112, 116, 115, 115, 100, 97, 51, 5, 84, 107, 99, 99, 92, 97, 87, - 100, 100, 100, 77, 46, 77, 100, 80, 79, 91, 91, 89, 92, 91, 69, 42, - 24, 81, 93, 81, 108, 91, 102, 100, 80, 77, 71, 46, 2, 95, 91, 81, - 88, 75, 73, 81, 71, 100, 72, 55, 38, 79, 96, 106, 93, 96, 87, 77, - 76, 79, 61, 29, 68, 114, 111, 106, 93, 93, 77, 83, 84, 88, 53, 49, - 33, 85, 103, 85, 83, 80, 72, 80, 81, 91, 84, 60, 28, 57, 80, 55, - 49, 48, 61, 46, 49, 28, 24, 9, 65, 119, 116, 100, 115, 107, 102, 100, - 110, 80, 57, 14, 46, 55, 65, 80, 65, 65, 67, 75, 52, 67, 69, 69, - 13, 87, 107, 92, 103, 107, 97, 110, 112, 110, 96, 60, 30, 76, 81, 67, - 60, 61, 61, 75, 73, 81, 52, 17, 64, 71, 80, 57, 59, 61, 59, 55, - 68, 60, 55, 29, 4, 59, 88, 71, 57, 48, 56, 46, 40, 36, 26, 10, - 107, 111, 93, 96, 69, 71, 87, 72, 71, 57, 63, 61, 53, 26, 38, 26, - 29, 28, 26, 20, 18, 20, 22, 13, 5, 8, 20, 29, 34, 32, 36, 26, - 25, 24, 14, 9, 4, 6, 49, 61, 40, 30, 181, 178, 170, 167, 167, 163, - 165, 167, 126, 24, 83, 140, 142, 127, 146, 135, 139, 123, 130, 104, 83, 28, - 132, 171, 161, 163, 166, 153, 161, 159, 151, 161, 131, 100, 144, 153, 140, 143, - 161, 163, 161, 153, 157, 128, 76, 126, 157, 155, 150, 134, 144, 153, 144, 139, - 140, 143, 104, 69, 162, 173, 153, 163, 142, 155, 151, 150, 142, 138, 138, 87, - 142, 144, 140, 142, 143, 132, 143, 146, 146, 131, 132, 106, 17, 132, 154, 154, - 151, 162, 144, 151, 166, 138, 124, 76, 114, 134, 114, 115, 115, 112, 115, 102, - 111, 83, 51, 20, 120, 159, 153, 147, 150, 158, 158, 151, 154, 136, 75, 1, - 118, 143, 127, 140, 140, 134, 138, 138, 126, 108, 57, 110, 104, 95, 87, 99, - 104, 92, 99, 93, 97, 77, 38, 4, 132, 143, 146, 136, 139, 132, 143, 147, - 124, 104, 79, 91, 151, 150, 147, 142, 132, 148, 146, 135, 132, 130, 107, 56, - 118, 138, 146, 130, 138, 115, 110, 135, 202, 208, 201, 161, 123, 104, 123, 71, - 69, 56, 41, 41, 40, 46, 42, 45, 59, 64, 73, 102, 136, 209, 208, 199, - 120, 120, 130, 131, 132, 138, 147, 150, 143, 119, 65, 33, 30, 32, 40, 37, - 79, 124, 116, 122, 122, 135, 123, 126, 103, 91, 60, 100, 136, 128, 139, 131, - 131, 135, 128, 107, 116, 100, 71, 111, 135, 131, 108, 134, 115, 116, 108, 124, - 120, 114, 85, 65, 91, 106, 93, 87, 79, 76, 80, 79, 87, 61, 36, 9, - 123, 148, 132, 132, 142, 150, 142, 132, 144, 136, 107, 64, 96, 139, 127, 119, - 136, 126, 112, 118, 103, 88, 64, 108, 134, 115, 123, 127, 123, 128, 131, 120, - 115, 118, 69, 18, 89, 118, 123, 96, 114, 119, 116, 110, 115, 108, 95, 55, - 85, 116, 114, 107, 103, 103, 103, 100, 100, 41, 0, 110, 139, 139, 139, 135, - 138, 132, 128, 128, 130, 122, 69, 89, 122, 112, 106, 116, 123, 118, 106, 97, - 96, 92, 48, 30, 99, 108, 99, 95, 92, 104, 93, 104, 103, 103, 79, 55, - 81, 107, 80, 75, 91, 93, 93, 84, 81, 68, 42, 22, 79, 89, 91, 100, - 91, 99, 84, 80, 79, 72, 51, 14, 88, 88, 72, 80, 69, 72, 89, 68, - 87, 72, 53, 37, 72, 97, 96, 99, 99, 91, 68, 77, 75, 63, 33, 57, - 111, 103, 104, 85, 85, 88, 110, 88, 83, 56, 52, 53, 87, 102, 88, 83, - 80, 93, 93, 87, 92, 87, 68, 29, 60, 73, 57, 46, 34, 42, 40, 57, - 34, 20, 12, 76, 118, 114, 103, 115, 103, 103, 108, 111, 87, 57, 16, 64, - 55, 63, 72, 57, 67, 79, 56, 49, 53, 64, 40, 10, 89, 107, 104, 110, - 108, 100, 96, 99, 95, 95, 63, 34, 71, 85, 73, 55, 61, 57, 67, 72, - 71, 52, 17, 56, 79, 73, 57, 59, 51, 57, 51, 49, 59, 51, 29, 5, - 64, 76, 73, 56, 40, 46, 41, 32, 36, 24, 9, 107, 99, 99, 71, 83, - 88, 55, 73, 60, 67, 63, 59, 51, 29, 42, 30, 30, 25, 26, 21, 29, - 29, 25, 14, 5, 10, 20, 32, 25, 30, 33, 18, 24, 9, 21, 9, 4, - 1, 36, 63, 24, 18, 167, 173, 177, 169, 169, 162, 166, 161, 123, 24, 87, - 138, 142, 134, 134, 132, 132, 130, 134, 106, 84, 32, 119, 169, 151, 154, 157, - 155, 161, 155, 154, 138, 128, 83, 144, 158, 157, 132, 161, 154, 154, 153, 151, - 130, 79, 102, 148, 154, 153, 142, 148, 154, 146, 155, 151, 139, 123, 65, 165, - 161, 163, 163, 151, 163, 144, 153, 132, 144, 132, 91, 138, 143, 139, 132, 136, - 135, 147, 142, 144, 131, 118, 102, 17, 136, 146, 140, 155, 154, 150, 150, 155, - 140, 127, 79, 102, 93, 126, 116, 104, 104, 123, 119, 89, 67, 52, 6, 114, - 158, 144, 146, 158, 153, 143, 153, 154, 135, 79, 25, 127, 134, 132, 142, 139, - 134, 138, 135, 131, 123, 64, 115, 122, 122, 91, 102, 110, 97, 97, 96, 106, - 76, 40, 2, 131, 131, 148, 136, 138, 120, 142, 147, 126, 110, 75, 100, 158, - 148, 140, 139, 138, 146, 139, 134, 120, 124, 115, 59, 112, 136, 136, 135, 111, - 116, 119, 131, 198, 201, 174, 126, 108, 108, 69, 56, 42, 38, 37, 40, 38, - 45, 34, 48, 59, 67, 89, 111, 177, 212, 209, 202, 122, 122, 130, 131, 132, - 136, 146, 147, 140, 116, 46, 33, 32, 20, 40, 37, 79, 123, 114, 123, 123, - 131, 123, 124, 103, 84, 53, 108, 124, 131, 131, 124, 119, 120, 118, 114, 110, - 87, 65, 110, 134, 135, 116, 120, 110, 124, 123, 126, 118, 107, 85, 61, 96, - 104, 95, 92, 95, 96, 93, 88, 87, 52, 36, 8, 97, 147, 134, 132, 120, - 144, 151, 139, 136, 136, 106, 69, 97, 135, 122, 130, 126, 134, 111, 114, 106, - 85, 65, 118, 135, 120, 120, 131, 126, 127, 122, 120, 116, 108, 84, 22, 103, - 116, 122, 99, 112, 118, 112, 112, 110, 107, 91, 49, 80, 119, 114, 119, 103, - 107, 114, 104, 99, 42, 12, 111, 138, 146, 120, 118, 134, 131, 130, 122, 124, - 119, 61, 88, 127, 115, 110, 115, 128, 122, 111, 103, 88, 85, 53, 6, 92, - 108, 95, 93, 91, 102, 99, 103, 100, 103, 83, 48, 73, 104, 85, 106, 75, - 69, 84, 91, 81, 67, 40, 20, 81, 84, 77, 104, 89, 83, 83, 79, 80, - 72, 49, 13, 55, 79, 75, 67, 72, 69, 96, 67, 83, 69, 51, 30, 77, - 95, 106, 96, 104, 99, 88, 73, 72, 59, 33, 64, 107, 103, 99, 73, 88, - 81, 91, 84, 65, 60, 53, 48, 89, 96, 81, 87, 88, 76, 71, 79, 75, - 77, 65, 28, 56, 71, 63, 46, 44, 34, 34, 33, 36, 17, 10, 79, 112, - 114, 100, 106, 110, 103, 104, 115, 73, 56, 18, 59, 45, 63, 60, 61, 53, - 61, 57, 55, 56, 36, 55, 29, 89, 104, 104, 116, 93, 99, 104, 102, 100, - 92, 63, 37, 71, 77, 65, 51, 65, 72, 63, 71, 42, 46, 18, 42, 49, - 75, 51, 56, 59, 60, 51, 51, 55, 51, 28, 2, 63, 75, 71, 51, 51, - 44, 59, 33, 46, 24, 8, 64, 107, 85, 88, 84, 79, 65, 72, 72, 68, - 65, 68, 51, 30, 36, 32, 24, 36, 33, 32, 22, 24, 20, 20, 8, 17, - 25, 37, 41, 36, 29, 24, 12, 14, 14, 6, 5, 1, 49, 38, 49, 20, - 155, 177, 177, 163, 167, 166, 163, 147, 120, 12, 89, 139, 142, 136, 136, 136, - 143, 140, 128, 96, 84, 28, 118, 159, 153, 167, 158, 159, 153, 139, 154, 140, - 130, 69, 122, 166, 139, 126, 157, 157, 148, 151, 153, 131, 87, 103, 151, 144, - 155, 134, 148, 147, 147, 155, 147, 138, 89, 21, 165, 167, 157, 154, 161, 151, - 157, 158, 146, 131, 135, 84, 135, 139, 132, 135, 132, 135, 144, 142, 136, 134, - 127, 100, 16, 135, 146, 154, 158, 151, 140, 147, 146, 151, 128, 102, 83, 102, - 130, 122, 115, 128, 100, 111, 92, 51, 52, 2, 106, 157, 154, 147, 151, 157, - 147, 154, 146, 123, 79, 5, 87, 132, 130, 143, 138, 140, 123, 135, 144, 104, - 71, 65, 108, 103, 83, 97, 106, 97, 97, 102, 99, 72, 38, 0, 130, 135, - 144, 138, 135, 143, 143, 142, 123, 107, 77, 104, 157, 139, 148, 148, 143, 143, - 143, 151, 147, 119, 114, 61, 111, 135, 142, 139, 134, 124, 110, 126, 190, 208, - 171, 116, 93, 107, 63, 55, 41, 37, 42, 38, 38, 48, 40, 69, 60, 63, - 92, 122, 190, 220, 212, 205, 123, 122, 128, 132, 136, 142, 144, 146, 132, 95, - 34, 30, 30, 28, 42, 36, 77, 118, 114, 123, 124, 120, 126, 119, 85, 92, - 52, 99, 122, 123, 122, 120, 123, 131, 119, 112, 116, 100, 59, 114, 127, 143, - 122, 116, 119, 120, 120, 123, 107, 103, 63, 80, 89, 96, 92, 89, 87, 91, - 80, 84, 85, 61, 41, 6, 131, 148, 134, 127, 123, 127, 130, 134, 128, 124, - 116, 81, 100, 138, 123, 135, 126, 126, 100, 115, 88, 88, 60, 111, 130, 116, - 119, 124, 134, 119, 122, 118, 115, 104, 65, 20, 63, 91, 118, 111, 122, 111, - 111, 120, 110, 100, 80, 46, 71, 107, 111, 123, 119, 116, 102, 103, 106, 41, - 8, 100, 140, 140, 134, 131, 126, 130, 126, 126, 130, 100, 55, 96, 120, 116, - 102, 115, 130, 114, 107, 96, 92, 77, 59, 5, 77, 110, 93, 84, 95, 93, - 92, 102, 97, 96, 77, 63, 68, 97, 83, 83, 100, 68, 69, 72, 72, 67, - 36, 18, 72, 77, 76, 97, 97, 95, 85, 79, 85, 72, 52, 12, 63, 87, - 69, 64, 65, 65, 76, 77, 65, 68, 45, 24, 72, 91, 100, 91, 97, 93, - 91, 71, 72, 60, 34, 52, 96, 95, 123, 85, 93, 68, 63, 69, 51, 48, - 53, 38, 89, 93, 80, 75, 88, 76, 77, 72, 75, 71, 64, 29, 51, 71, - 63, 56, 48, 37, 49, 42, 33, 18, 9, 80, 111, 107, 110, 112, 107, 93, - 107, 118, 80, 56, 14, 60, 48, 79, 55, 45, 46, 77, 60, 51, 44, 38, - 64, 33, 93, 103, 107, 102, 102, 97, 97, 92, 96, 95, 84, 38, 46, 80, - 71, 64, 64, 64, 51, 46, 52, 44, 21, 32, 64, 73, 57, 51, 48, 49, - 53, 56, 52, 38, 20, 1, 52, 63, 67, 51, 60, 41, 44, 34, 34, 24, - 6, 96, 102, 83, 91, 85, 87, 72, 75, 76, 67, 64, 64, 53, 30, 51, - 37, 24, 24, 21, 17, 25, 21, 25, 17, 8, 20, 33, 32, 18, 16, 14, - 14, 12, 24, 17, 9, 5, 0, 22, 57, 21, 24, 157, 169, 181, 177, 163, - 158, 166, 150, 124, 17, 79, 135, 140, 146, 146, 140, 134, 131, 128, 91, 79, - 32, 118, 136, 166, 155, 169, 155, 154, 153, 155, 157, 126, 68, 147, 159, 148, - 150, 135, 138, 144, 135, 139, 138, 89, 106, 138, 144, 150, 146, 142, 144, 146, - 147, 147, 139, 100, 33, 153, 159, 144, 148, 150, 163, 163, 153, 158, 131, 128, - 72, 127, 138, 135, 130, 135, 131, 138, 134, 128, 131, 128, 99, 18, 136, 140, - 132, 136, 136, 126, 127, 135, 131, 130, 104, 72, 108, 107, 112, 93, 97, 107, - 115, 112, 52, 46, 16, 100, 153, 142, 144, 146, 143, 144, 154, 148, 111, 76, - 2, 85, 139, 124, 142, 142, 135, 134, 138, 131, 108, 59, 60, 77, 79, 99, - 96, 104, 99, 103, 99, 104, 67, 33, 0, 131, 143, 138, 139, 139, 153, 147, - 131, 115, 110, 60, 122, 157, 153, 157, 146, 146, 140, 131, 134, 138, 131, 115, - 63, 110, 134, 142, 139, 135, 110, 108, 115, 155, 210, 174, 124, 100, 108, 68, - 52, 41, 46, 48, 42, 45, 44, 42, 46, 63, 87, 111, 157, 206, 218, 216, - 201, 123, 122, 130, 134, 142, 147, 148, 142, 122, 57, 32, 28, 26, 29, 49, - 32, 73, 118, 116, 128, 124, 127, 124, 120, 97, 85, 51, 67, 116, 122, 107, - 112, 111, 99, 119, 118, 114, 92, 56, 102, 123, 126, 126, 120, 120, 120, 119, - 118, 111, 97, 57, 65, 96, 102, 106, 97, 95, 87, 97, 89, 73, 52, 29, - 5, 131, 146, 140, 104, 103, 102, 115, 95, 110, 112, 107, 85, 84, 122, 126, - 123, 122, 122, 97, 115, 84, 81, 51, 100, 126, 120, 120, 123, 120, 119, 116, - 118, 116, 114, 60, 20, 93, 114, 134, 115, 120, 118, 110, 108, 103, 100, 85, - 42, 65, 76, 102, 111, 116, 106, 112, 100, 104, 36, 22, 102, 127, 132, 130, - 124, 128, 130, 128, 126, 122, 99, 46, 92, 96, 122, 120, 127, 119, 110, 100, - 97, 83, 88, 46, 2, 99, 102, 95, 81, 92, 88, 85, 84, 83, 83, 85, - 64, 45, 83, 102, 80, 84, 61, 69, 76, 77, 69, 51, 14, 76, 76, 83, - 89, 84, 87, 84, 84, 83, 77, 51, 17, 64, 69, 68, 59, 56, 52, 57, - 61, 61, 64, 45, 22, 52, 85, 97, 97, 88, 79, 67, 72, 72, 61, 38, - 41, 67, 92, 89, 89, 60, 64, 60, 63, 63, 45, 42, 24, 88, 93, 71, - 83, 85, 81, 83, 71, 81, 72, 67, 40, 32, 69, 56, 57, 41, 33, 37, - 46, 41, 16, 22, 71, 108, 96, 111, 108, 108, 104, 106, 114, 71, 56, 14, - 60, 60, 68, 57, 42, 41, 38, 45, 56, 37, 52, 63, 8, 79, 96, 95, - 100, 92, 99, 88, 97, 93, 97, 75, 38, 46, 67, 67, 55, 61, 51, 52, - 55, 42, 46, 28, 28, 60, 45, 44, 33, 36, 40, 52, 55, 41, 40, 32, - 1, 55, 64, 75, 68, 53, 51, 53, 40, 36, 26, 6, 106, 111, 79, 79, - 80, 79, 80, 75, 75, 61, 65, 67, 53, 28, 29, 28, 18, 18, 22, 24, - 20, 18, 22, 17, 6, 20, 38, 16, 28, 42, 29, 30, 20, 13, 13, 10, - 6, 1, 45, 33, 30, 20, 162, 163, 165, 159, 171, 162, 161, 144, 118, 16, - 71, 128, 131, 134, 127, 130, 127, 130, 124, 93, 87, 29, 112, 153, 166, 162, - 154, 154, 157, 157, 155, 153, 115, 67, 146, 146, 146, 148, 147, 140, 143, 139, - 136, 136, 131, 126, 100, 103, 107, 103, 111, 107, 110, 119, 114, 115, 111, 40, - 166, 154, 154, 161, 150, 153, 153, 154, 147, 144, 135, 75, 140, 138, 130, 130, - 134, 123, 128, 122, 127, 126, 128, 97, 22, 138, 135, 128, 124, 120, 130, 119, - 115, 104, 124, 104, 103, 107, 91, 87, 87, 81, 84, 77, 76, 69, 46, 2, - 73, 153, 147, 148, 147, 153, 150, 151, 131, 130, 83, 2, 87, 138, 123, 126, - 140, 136, 127, 112, 115, 89, 83, 93, 91, 92, 73, 61, 53, 49, 53, 55, - 51, 49, 29, 1, 140, 140, 142, 135, 135, 132, 130, 127, 91, 97, 59, 115, - 151, 148, 142, 134, 138, 136, 131, 128, 130, 123, 115, 71, 77, 118, 126, 126, - 108, 85, 111, 104, 135, 198, 195, 155, 99, 124, 97, 57, 56, 52, 56, 53, - 55, 56, 60, 56, 91, 97, 139, 201, 217, 217, 218, 194, 122, 123, 130, 138, - 144, 150, 144, 132, 79, 32, 29, 28, 29, 28, 37, 41, 68, 106, 110, 111, - 111, 110, 103, 100, 104, 99, 64, 72, 116, 123, 103, 107, 114, 110, 110, 112, - 99, 88, 55, 80, 116, 122, 104, 100, 115, 119, 106, 107, 106, 84, 51, 61, - 69, 63, 63, 61, 68, 63, 53, 52, 41, 42, 26, 6, 116, 135, 140, 134, - 127, 126, 130, 130, 123, 123, 118, 119, 118, 84, 92, 96, 97, 97, 118, 115, - 106, 83, 46, 95, 123, 120, 123, 118, 119, 118, 120, 114, 114, 110, 73, 28, - 91, 95, 100, 102, 100, 100, 106, 97, 100, 85, 84, 37, 64, 71, 99, 96, - 93, 92, 91, 89, 84, 40, 0, 22, 68, 81, 71, 69, 80, 89, 83, 77, - 89, 79, 36, 49, 56, 63, 65, 75, 77, 72, 77, 76, 89, 80, 41, 25, - 99, 97, 100, 102, 93, 95, 93, 91, 87, 84, 79, 80, 53, 56, 64, 71, - 67, 61, 81, 80, 64, 69, 51, 12, 71, 69, 100, 85, 84, 87, 84, 83, - 81, 79, 55, 1, 53, 69, 51, 49, 53, 59, 57, 68, 61, 67, 38, 21, - 36, 75, 76, 65, 64, 69, 71, 61, 61, 65, 57, 36, 46, 64, 64, 52, - 52, 65, 55, 48, 53, 48, 44, 40, 83, 89, 88, 84, 80, 84, 83, 75, - 75, 79, 72, 37, 28, 55, 60, 61, 52, 32, 44, 45, 40, 18, 13, 76, - 110, 103, 104, 108, 108, 112, 106, 112, 85, 56, 14, 52, 57, 55, 37, 46, - 37, 36, 40, 36, 38, 44, 44, 16, 68, 81, 84, 63, 67, 76, 76, 77, - 69, 65, 57, 57, 60, 55, 52, 51, 48, 59, 49, 49, 44, 42, 42, 24, - 28, 32, 29, 33, 32, 34, 29, 52, 41, 34, 29, 0, 48, 57, 56, 60, - 56, 67, 40, 30, 33, 25, 6, 99, 97, 83, 72, 75, 67, 65, 65, 65, - 65, 61, 57, 48, 30, 37, 22, 30, 25, 24, 24, 22, 22, 18, 17, 6, - 24, 41, 45, 24, 20, 16, 13, 14, 13, 12, 10, 6, 0, 32, 36, 25, - 24, 153, 147, 147, 143, 144, 140, 143, 124, 88, 14, 63, 119, 115, 95, 122, - 124, 112, 106, 120, 100, 84, 26, 89, 153, 155, 155, 150, 124, 115, 110, 130, - 123, 99, 64, 107, 119, 120, 120, 118, 120, 126, 120, 120, 116, 118, 111, 114, - 83, 61, 48, 53, 73, 37, 28, 33, 24, 24, 37, 161, 126, 144, 92, 146, - 147, 146, 108, 147, 139, 128, 73, 131, 132, 123, 120, 115, 115, 103, 111, 111, - 111, 88, 45, 28, 92, 92, 97, 95, 91, 99, 93, 99, 93, 91, 87, 84, - 81, 81, 84, 77, 67, 68, 68, 61, 57, 57, 0, 32, 124, 132, 100, 110, - 138, 128, 119, 124, 120, 76, 36, 72, 119, 134, 130, 116, 118, 114, 110, 107, - 114, 76, 60, 52, 44, 41, 60, 63, 55, 37, 44, 41, 34, 25, 0, 126, - 92, 114, 107, 115, 120, 123, 126, 96, 87, 55, 108, 123, 130, 124, 118, 124, - 123, 119, 115, 122, 123, 114, 111, 108, 108, 77, 83, 108, 106, 97, 100, 102, - 186, 208, 171, 123, 112, 119, 88, 56, 44, 55, 55, 52, 52, 57, 83, 96, - 132, 190, 216, 218, 218, 214, 163, 122, 124, 132, 144, 146, 146, 136, 104, 38, - 29, 26, 25, 29, 32, 34, 41, 53, 89, 92, 87, 79, 93, 92, 83, 83, - 89, 77, 69, 103, 95, 99, 83, 83, 79, 76, 80, 80, 85, 48, 40, 40, - 55, 48, 48, 49, 57, 60, 80, 92, 65, 46, 52, 56, 56, 53, 51, 51, - 51, 41, 40, 40, 30, 33, 4, 18, 83, 97, 83, 85, 91, 104, 93, 97, - 99, 99, 97, 92, 102, 104, 106, 106, 111, 110, 111, 95, 81, 57, 81, 115, - 115, 119, 104, 103, 100, 99, 88, 95, 89, 68, 30, 52, 56, 52, 55, 55, - 59, 60, 65, 64, 65, 61, 37, 52, 28, 32, 32, 25, 21, 20, 25, 24, - 22, 6, 6, 10, 25, 10, 9, 20, 33, 17, 17, 30, 34, 38, 33, 12, - 26, 30, 30, 41, 59, 45, 56, 65, 64, 52, 0, 32, 53, 59, 59, 59, - 63, 65, 57, 59, 61, 57, 60, 56, 64, 64, 65, 61, 64, 49, 65, 57, - 68, 48, 28, 63, 64, 87, 83, 81, 80, 79, 73, 76, 75, 45, 22, 49, - 28, 33, 21, 22, 24, 30, 14, 13, 18, 28, 20, 18, 20, 24, 24, 25, - 28, 30, 34, 38, 51, 57, 57, 59, 60, 53, 53, 52, 52, 51, 48, 46, - 48, 44, 38, 80, 77, 75, 73, 63, 63, 63, 60, 56, 55, 41, 44, 42, - 42, 46, 38, 36, 30, 30, 28, 29, 14, 10, 73, 81, 100, 102, 95, 92, - 92, 97, 88, 67, 51, 18, 61, 48, 44, 41, 41, 37, 38, 38, 38, 37, - 40, 53, 22, 20, 21, 18, 17, 26, 30, 34, 34, 38, 48, 53, 48, 41, - 44, 45, 41, 42, 41, 42, 40, 41, 38, 36, 34, 40, 38, 37, 33, 37, - 34, 34, 26, 34, 34, 28, 0, 29, 41, 55, 29, 32, 38, 51, 37, 29, - 24, 5, 65, 99, 80, 69, 68, 68, 65, 60, 44, 42, 38, 32, 30, 32, - 20, 14, 28, 25, 21, 25, 22, 25, 20, 20, 8, 13, 22, 20, 16, 8, - 9, 8, 6, 6, 6, 5, 4, 0, 0, 0, 0, 0, 104, 96, 91, 84, - 71, 67, 64, 57, 51, 0, 25, 33, 37, 34, 40, 53, 51, 57, 73, 93, - 76, 25, 107, 73, 72, 68, 67, 89, 67, 55, 48, 83, 76, 42, 36, 29, - 36, 30, 29, 28, 34, 29, 28, 26, 29, 29, 29, 49, 59, 84, 84, 95, - 144, 122, 150, 124, 110, 16, 171, 128, 142, 111, 96, 87, 89, 93, 123, 128, - 122, 68, 84, 87, 91, 76, 72, 68, 57, 53, 46, 52, 38, 32, 21, 18, - 17, 16, 13, 13, 10, 9, 8, 9, 8, 5, 4, 9, 12, 4, 0, 2, - 8, 0, 0, 2, 9, 0, 37, 24, 28, 30, 33, 71, 112, 80, 96, 108, - 71, 4, 68, 48, 53, 48, 49, 49, 55, 42, 46, 44, 42, 45, 32, 38, - 72, 57, 85, 93, 106, 77, 108, 104, 95, 0, 142, 123, 122, 112, 104, 102, - 103, 85, 107, 91, 53, 96, 96, 106, 102, 100, 100, 103, 104, 107, 100, 108, - 103, 102, 99, 68, 51, 51, 52, 59, 100, 97, 106, 150, 198, 187, 128, 88, - 154, 112, 92, 95, 97, 102, 102, 100, 99, 120, 163, 201, 218, 218, 217, 216, - 202, 135, 122, 130, 143, 146, 143, 136, 111, 44, 29, 28, 26, 28, 33, 34, - 20, 42, 53, 48, 53, 59, 60, 60, 63, 64, 71, 80, 81, 76, 80, 64, - 65, 68, 61, 67, 73, 93, 89, 95, 56, 65, 115, 120, 108, 97, 77, 79, - 77, 72, 48, 41, 44, 8, 0, 29, 6, 4, 6, 18, 0, 4, 4, 0, - 0, 29, 29, 21, 20, 18, 24, 24, 21, 21, 25, 26, 28, 29, 32, 36, - 41, 48, 51, 56, 59, 65, 68, 77, 57, 63, 80, 77, 55, 56, 60, 57, - 42, 41, 46, 34, 24, 6, 18, 6, 29, 32, 16, 12, 24, 25, 14, 14, - 22, 25, 68, 83, 93, 97, 91, 103, 96, 99, 69, 64, 4, 18, 128, 139, - 95, 91, 116, 127, 81, 96, 95, 46, 21, 49, 118, 115, 71, 71, 73, 51, - 51, 46, 57, 34, 25, 6, 4, 2, 26, 6, 4, 5, 22, 14, 6, 12, - 28, 24, 24, 24, 33, 32, 29, 53, 45, 37, 38, 64, 34, 12, 55, 21, - 28, 21, 25, 22, 21, 18, 18, 13, 10, 22, 14, 34, 48, 55, 56, 61, - 75, 76, 69, 69, 49, 14, 72, 100, 108, 85, 92, 65, 51, 44, 29, 29, - 25, 24, 30, 25, 34, 20, 22, 32, 22, 29, 32, 34, 34, 28, 49, 44, - 59, 51, 49, 42, 51, 48, 45, 42, 44, 41, 36, 21, 12, 12, 9, 9, - 8, 9, 10, 17, 12, 17, 26, 33, 29, 46, 49, 45, 32, 53, 57, 34, - 14, 46, 34, 37, 34, 33, 30, 33, 41, 45, 48, 48, 64, 4, 37, 112, - 114, 72, 73, 65, 64, 55, 41, 21, 16, 12, 10, 9, 9, 9, 8, 6, - 6, 6, 4, 13, 12, 4, 2, 6, 4, 1, 0, 5, 2, 0, 1, 6, - 0, 0, 9, 9, 14, 13, 13, 14, 16, 17, 30, 24, 4, 63, 92, 65, - 56, 53, 49, 49, 49, 45, 44, 52, 41, 45, 17, 21, 29, 18, 17, 10, - 9, 8, 8, 9, 9, 9, 8, 8, 6, 6, 8, 8, 4, 4, 5, 4, - 2, 2, 2, 2, 1, 1, 1, 84, 97, 100, 99, 114, 110, 120, 123, 115, - 1, 71, 146, 143, 99, 111, 123, 104, 71, 60, 55, 45, 32, 48, 91, 96, - 87, 102, 111, 143, 127, 120, 119, 104, 32, 106, 136, 140, 135, 127, 139, 135, - 140, 140, 140, 79, 24, 93, 171, 174, 161, 158, 154, 151, 154, 166, 151, 104, - 21, 167, 131, 139, 174, 167, 150, 128, 126, 91, 71, 44, 63, 65, 76, 83, - 89, 89, 88, 97, 103, 107, 80, 88, 93, 153, 165, 165, 169, 170, 167, 162, - 163, 171, 162, 138, 130, 162, 158, 153, 165, 163, 159, 139, 120, 161, 136, 42, - 4, 99, 158, 157, 130, 112, 87, 77, 72, 36, 26, 20, 2, 28, 67, 75, - 83, 77, 91, 97, 102, 102, 110, 89, 20, 77, 155, 169, 174, 171, 170, 155, - 165, 157, 122, 95, 0, 138, 127, 150, 146, 150, 143, 139, 122, 112, 89, 52, - 20, 18, 18, 18, 21, 21, 20, 24, 22, 22, 22, 29, 32, 34, 88, 99, - 120, 111, 110, 148, 136, 126, 108, 154, 199, 147, 99, 115, 135, 131, 144, 143, - 134, 140, 151, 162, 195, 213, 216, 220, 218, 214, 213, 153, 124, 128, 139, 142, - 138, 130, 97, 42, 29, 28, 24, 34, 25, 25, 34, 55, 57, 68, 99, 115, - 108, 91, 89, 75, 69, 69, 59, 55, 53, 80, 118, 135, 131, 142, 114, 115, - 124, 103, 100, 52, 93, 140, 126, 108, 108, 123, 112, 116, 87, 81, 73, 12, - 20, 151, 150, 110, 102, 115, 116, 112, 104, 124, 103, 52, 16, 40, 97, 116, - 108, 111, 114, 122, 111, 111, 108, 102, 88, 106, 111, 118, 115, 110, 84, 64, - 52, 37, 38, 42, 33, 37, 67, 63, 76, 69, 80, 81, 89, 88, 81, 69, - 9, 26, 80, 89, 95, 89, 87, 88, 84, 88, 91, 84, 92, 81, 110, 123, - 127, 123, 122, 116, 104, 97, 69, 8, 118, 124, 108, 122, 112, 118, 110, 119, - 115, 96, 57, 16, 110, 127, 128, 118, 119, 122, 114, 87, 100, 102, 63, 52, - 6, 20, 130, 124, 81, 73, 122, 119, 88, 73, 91, 87, 45, 12, 52, 116, - 111, 67, 67, 63, 56, 48, 41, 36, 6, 16, 45, 49, 53, 46, 60, 64, - 59, 63, 67, 57, 0, 41, 116, 115, 112, 114, 116, 108, 108, 104, 81, 51, - 13, 80, 111, 93, 92, 107, 106, 106, 104, 84, 57, 46, 9, 42, 139, 131, - 84, 79, 77, 71, 60, 32, 16, 20, 10, 10, 10, 12, 9, 9, 8, 8, - 5, 8, 6, 6, 5, 10, 17, 67, 79, 83, 81, 68, 91, 76, 33, 12, - 52, 96, 91, 84, 42, 40, 21, 16, 16, 10, 13, 6, 25, 45, 92, 91, - 91, 93, 91, 96, 88, 89, 68, 64, 6, 93, 130, 123, 108, 123, 111, 112, - 111, 110, 102, 100, 77, 72, 92, 73, 59, 68, 81, 72, 69, 59, 48, 12, - 0, 18, 77, 106, 69, 69, 73, 91, 69, 72, 64, 10, 0, 59, 75, 71, - 46, 73, 64, 64, 22, 14, 24, 4, 71, 72, 76, 76, 83, 80, 80, 79, - 80, 83, 76, 49, 30, 21, 24, 49, 42, 37, 41, 40, 29, 22, 13, 16, - 6, 4, 16, 38, 41, 52, 40, 45, 46, 61, 61, 68, 57, 72, 77, 83, - 83, 83, 182, 173, 175, 173, 169, 169, 124, 127, 115, 2, 123, 148, 163, 162, - 158, 159, 155, 153, 155, 147, 85, 30, 118, 173, 175, 173, 167, 165, 174, 169, - 159, 123, 114, 36, 148, 158, 157, 142, 140, 159, 153, 147, 147, 142, 89, 17, - 139, 177, 157, 163, 171, 175, 157, 162, 148, 158, 116, 24, 178, 162, 134, 143, - 107, 135, 148, 162, 169, 151, 131, 139, 159, 148, 158, 167, 155, 155, 165, 158, - 159, 142, 153, 143, 107, 159, 148, 144, 148, 151, 134, 127, 118, 128, 142, 114, - 119, 136, 153, 155, 144, 150, 142, 138, 146, 155, 91, 1, 120, 159, 177, 151, - 154, 122, 134, 134, 126, 107, 72, 16, 95, 166, 163, 163, 158, 158, 112, 146, - 148, 118, 100, 14, 140, 170, 161, 153, 143, 159, 153, 146, 148, 120, 91, 0, - 154, 127, 144, 146, 144, 142, 144, 142, 122, 116, 52, 46, 147, 135, 115, 119, - 139, 139, 115, 115, 114, 111, 108, 102, 104, 93, 144, 158, 155, 146, 143, 144, - 131, 107, 107, 193, 167, 116, 85, 159, 170, 179, 193, 201, 206, 208, 212, 214, - 217, 216, 210, 213, 206, 158, 127, 134, 138, 134, 130, 106, 67, 40, 30, 26, - 24, 33, 24, 36, 46, 60, 56, 51, 92, 132, 150, 143, 138, 142, 150, 144, - 148, 127, 114, 116, 128, 140, 142, 131, 126, 132, 124, 122, 114, 106, 60, 88, - 140, 136, 122, 112, 111, 107, 119, 126, 95, 81, 0, 154, 157, 140, 142, 138, - 139, 136, 118, 116, 111, 108, 114, 14, 147, 142, 131, 132, 126, 130, 119, 122, - 122, 123, 120, 95, 75, 115, 120, 116, 111, 96, 97, 108, 115, 71, 38, 64, - 120, 123, 128, 116, 123, 123, 119, 112, 112, 100, 72, 5, 131, 126, 132, 128, - 118, 115, 108, 100, 104, 100, 81, 85, 126, 144, 140, 130, 130, 120, 122, 124, - 97, 73, 4, 134, 120, 120, 114, 107, 107, 104, 106, 111, 106, 60, 18, 122, - 135, 118, 96, 107, 99, 118, 114, 102, 87, 67, 57, 2, 134, 139, 127, 73, - 88, 115, 111, 89, 88, 89, 89, 52, 14, 112, 123, 106, 103, 107, 100, 114, - 75, 57, 60, 5, 52, 114, 123, 127, 118, 112, 106, 103, 107, 103, 71, 20, - 104, 123, 119, 111, 102, 102, 102, 104, 100, 99, 57, 12, 91, 118, 88, 97, - 85, 87, 88, 96, 99, 87, 53, 8, 120, 142, 118, 114, 123, 119, 115, 84, - 100, 96, 93, 95, 106, 116, 104, 102, 106, 99, 111, 102, 104, 103, 85, 83, - 91, 81, 77, 79, 87, 77, 97, 88, 84, 38, 13, 64, 119, 93, 84, 89, - 68, 79, 73, 55, 48, 33, 34, 77, 102, 106, 114, 106, 106, 97, 102, 89, - 84, 72, 51, 16, 110, 120, 128, 115, 115, 107, 87, 83, 91, 77, 75, 88, - 89, 80, 51, 52, 72, 75, 41, 45, 36, 69, 14, 0, 80, 107, 77, 75, - 69, 65, 72, 65, 69, 75, 22, 0, 67, 68, 61, 69, 83, 67, 68, 64, - 26, 25, 4, 96, 76, 76, 76, 75, 71, 49, 63, 72, 63, 57, 41, 28, - 18, 34, 40, 22, 26, 20, 21, 18, 26, 24, 5, 1, 34, 65, 77, 77, - 81, 73, 64, 55, 68, 53, 63, 57, 59, 48, 65, 84, 72, 195, 187, 175, - 179, 183, 177, 181, 128, 122, 2, 130, 151, 162, 162, 151, 155, 136, 144, 143, - 154, 96, 32, 153, 179, 175, 170, 169, 170, 173, 175, 171, 131, 119, 40, 146, - 170, 175, 182, 173, 174, 169, 165, 151, 144, 99, 20, 136, 177, 163, 165, 146, - 148, 157, 153, 130, 124, 110, 22, 178, 154, 161, 128, 142, 142, 147, 151, 130, - 135, 150, 143, 104, 106, 126, 128, 130, 108, 103, 135, 108, 111, 155, 100, 157, - 154, 165, 163, 155, 161, 158, 161, 153, 144, 140, 96, 148, 175, 166, 155, 161, - 158, 157, 161, 148, 150, 99, 2, 134, 162, 179, 151, 126, 154, 124, 148, 127, - 112, 83, 33, 134, 163, 157, 161, 159, 154, 151, 151, 148, 138, 100, 16, 143, - 171, 138, 143, 148, 150, 144, 159, 142, 131, 100, 0, 150, 123, 142, 142, 139, - 139, 138, 138, 128, 112, 53, 142, 147, 138, 118, 108, 131, 135, 119, 112, 127, - 115, 124, 110, 71, 144, 161, 151, 134, 131, 136, 146, 143, 100, 87, 162, 179, - 126, 81, 115, 119, 136, 155, 182, 194, 202, 205, 204, 205, 210, 194, 173, 148, - 122, 135, 131, 118, 99, 67, 41, 30, 30, 28, 26, 28, 25, 33, 46, 56, - 56, 63, 60, 91, 135, 150, 148, 147, 142, 139, 143, 144, 123, 118, 88, 143, - 142, 124, 126, 134, 136, 134, 126, 96, 116, 57, 84, 130, 127, 120, 122, 119, - 111, 115, 119, 97, 80, 18, 158, 155, 154, 134, 128, 127, 124, 114, 114, 112, - 124, 114, 13, 144, 130, 123, 124, 134, 128, 126, 134, 123, 122, 103, 60, 103, - 150, 131, 119, 116, 111, 111, 120, 115, 76, 52, 114, 120, 116, 111, 108, 118, - 124, 110, 108, 99, 91, 81, 21, 131, 114, 116, 119, 132, 126, 112, 107, 100, - 89, 64, 112, 147, 128, 119, 128, 120, 104, 96, 106, 81, 69, 0, 93, 119, - 111, 100, 92, 97, 110, 110, 123, 102, 61, 13, 110, 132, 106, 100, 83, 92, - 95, 103, 85, 68, 69, 59, 4, 122, 112, 119, 103, 106, 96, 92, 100, 95, - 114, 93, 57, 14, 118, 122, 99, 92, 92, 89, 89, 96, 64, 68, 6, 99, - 123, 120, 115, 104, 115, 114, 107, 87, 85, 60, 13, 107, 122, 111, 100, 99, - 89, 89, 89, 88, 80, 55, 10, 89, 112, 99, 99, 96, 83, 84, 81, 89, - 93, 53, 12, 110, 131, 130, 128, 116, 110, 96, 115, 93, 88, 79, 84, 106, - 111, 122, 92, 102, 106, 102, 100, 87, 100, 92, 71, 55, 102, 111, 92, 88, - 71, 68, 87, 75, 45, 13, 59, 116, 97, 88, 84, 76, 85, 73, 75, 52, - 34, 40, 81, 111, 102, 92, 89, 89, 89, 89, 95, 100, 56, 59, 13, 99, - 118, 126, 119, 115, 85, 85, 114, 110, 107, 96, 69, 45, 84, 84, 57, 53, - 44, 41, 26, 46, 51, 13, 8, 97, 97, 73, 76, 67, 83, 83, 76, 69, - 68, 24, 0, 51, 60, 57, 46, 41, 41, 37, 52, 42, 25, 5, 107, 85, - 65, 76, 59, 55, 46, 55, 55, 57, 55, 41, 21, 26, 44, 36, 24, 9, - 4, 4, 6, 13, 22, 1, 5, 55, 96, 97, 64, 69, 63, 64, 69, 55, - 34, 41, 46, 51, 89, 107, 131, 136, 165, 166, 179, 178, 155, 167, 181, 131, - 122, 2, 127, 162, 162, 147, 144, 153, 147, 146, 139, 143, 104, 37, 130, 182, - 173, 175, 166, 165, 163, 166, 174, 132, 122, 51, 102, 171, 173, 163, 167, 175, - 173, 153, 148, 143, 97, 17, 147, 166, 175, 150, 159, 155, 161, 165, 140, 146, - 122, 10, 175, 155, 157, 128, 136, 140, 155, 147, 146, 143, 95, 100, 104, 158, - 122, 122, 150, 146, 144, 142, 144, 112, 107, 65, 158, 158, 165, 159, 150, 154, - 143, 140, 151, 150, 136, 93, 165, 173, 157, 150, 150, 153, 155, 148, 142, 159, - 93, 0, 138, 163, 158, 131, 130, 151, 150, 158, 158, 144, 87, 14, 154, 162, - 166, 157, 163, 158, 151, 154, 148, 119, 102, 13, 139, 165, 138, 147, 146, 154, - 157, 157, 144, 120, 97, 0, 151, 131, 143, 147, 144, 138, 140, 135, 136, 119, - 53, 143, 134, 135, 131, 139, 135, 116, 128, 127, 118, 111, 107, 68, 88, 153, - 155, 150, 131, 135, 138, 128, 140, 103, 88, 144, 183, 131, 80, 88, 103, 114, - 119, 126, 151, 162, 173, 170, 166, 161, 140, 128, 130, 124, 107, 87, 57, 44, - 32, 28, 26, 26, 36, 21, 26, 45, 46, 52, 55, 69, 64, 55, 96, 154, - 154, 153, 138, 139, 128, 128, 118, 114, 77, 126, 150, 124, 128, 143, 130, 126, - 122, 126, 102, 116, 69, 71, 131, 128, 122, 132, 112, 122, 116, 118, 103, 79, - 14, 106, 151, 139, 142, 151, 135, 130, 126, 115, 111, 115, 75, 17, 104, 123, - 128, 135, 127, 126, 118, 119, 120, 104, 93, 61, 111, 146, 119, 118, 128, 135, - 134, 120, 107, 79, 40, 112, 127, 118, 111, 110, 106, 119, 115, 99, 95, 88, - 80, 5, 114, 108, 119, 104, 124, 134, 126, 107, 103, 80, 46, 110, 150, 127, - 124, 127, 118, 102, 104, 93, 87, 75, 2, 111, 126, 126, 89, 102, 106, 102, - 115, 112, 112, 64, 12, 114, 131, 103, 97, 92, 95, 92, 81, 89, 69, 64, - 61, 4, 97, 114, 83, 107, 108, 99, 97, 95, 93, 95, 89, 67, 13, 104, - 116, 93, 85, 99, 102, 97, 95, 83, 69, 1, 107, 127, 107, 106, 106, 93, - 89, 84, 77, 81, 60, 4, 103, 122, 106, 91, 99, 85, 83, 87, 84, 88, - 56, 9, 88, 112, 110, 96, 107, 107, 103, 87, 87, 73, 55, 10, 100, 127, - 130, 124, 127, 119, 126, 127, 123, 115, 76, 106, 123, 106, 87, 80, 85, 87, - 84, 69, 75, 79, 60, 44, 65, 116, 111, 67, 83, 83, 106, 72, 76, 46, - 17, 64, 111, 95, 75, 91, 92, 81, 84, 75, 59, 37, 37, 80, 112, 99, - 88, 88, 97, 99, 85, 84, 95, 56, 60, 2, 97, 112, 112, 118, 122, 84, - 91, 99, 107, 102, 92, 63, 71, 95, 76, 38, 57, 33, 44, 40, 44, 46, - 12, 0, 76, 85, 76, 75, 65, 72, 77, 76, 75, 60, 24, 0, 75, 69, - 44, 53, 52, 45, 36, 49, 57, 26, 5, 102, 69, 69, 75, 55, 75, 48, - 46, 65, 59, 48, 44, 20, 13, 44, 32, 8, 13, 17, 10, 9, 9, 17, - 1, 10, 76, 99, 65, 56, 63, 41, 55, 85, 60, 42, 52, 40, 51, 93, - 131, 77, 30, 177, 177, 183, 162, 170, 173, 177, 130, 122, 2, 127, 159, 162, - 142, 140, 143, 151, 136, 138, 144, 110, 44, 124, 170, 171, 169, 175, 177, 165, - 162, 166, 135, 124, 51, 157, 175, 171, 163, 165, 173, 173, 154, 150, 147, 99, - 16, 144, 167, 158, 162, 163, 161, 165, 148, 146, 139, 115, 12, 173, 146, 153, - 131, 139, 136, 159, 148, 151, 140, 85, 108, 159, 154, 158, 155, 142, 143, 146, - 138, 142, 134, 134, 57, 157, 169, 163, 154, 155, 147, 159, 140, 146, 144, 134, - 92, 166, 171, 147, 151, 154, 148, 142, 153, 144, 143, 99, 2, 138, 162, 175, - 150, 154, 132, 127, 127, 147, 115, 88, 1, 146, 153, 170, 158, 163, 155, 153, - 153, 128, 128, 103, 13, 148, 163, 143, 153, 153, 148, 144, 153, 148, 130, 97, - 0, 144, 147, 143, 143, 142, 139, 140, 136, 128, 116, 61, 96, 124, 144, 134, - 119, 136, 120, 122, 122, 116, 114, 106, 60, 124, 154, 150, 146, 140, 128, 134, - 138, 143, 116, 87, 138, 186, 144, 110, 72, 75, 73, 79, 95, 114, 116, 120, - 123, 122, 120, 118, 95, 76, 57, 45, 37, 34, 32, 28, 24, 28, 34, 22, - 48, 52, 53, 55, 60, 63, 69, 68, 57, 89, 144, 139, 131, 115, 127, 128, - 127, 116, 95, 77, 131, 143, 124, 135, 130, 131, 118, 116, 130, 115, 118, 76, - 60, 120, 127, 118, 116, 119, 115, 108, 111, 93, 81, 12, 110, 150, 148, 157, - 139, 108, 106, 116, 107, 120, 120, 77, 14, 114, 132, 127, 130, 115, 120, 120, - 120, 106, 106, 97, 57, 110, 150, 127, 115, 116, 110, 108, 123, 108, 77, 41, - 96, 126, 119, 123, 118, 106, 114, 102, 96, 97, 84, 79, 2, 103, 118, 119, - 103, 119, 130, 124, 103, 89, 81, 46, 112, 153, 115, 118, 108, 116, 102, 103, - 87, 92, 72, 4, 122, 124, 118, 92, 99, 110, 112, 106, 112, 104, 67, 9, - 127, 132, 100, 92, 92, 81, 92, 92, 76, 75, 68, 57, 1, 104, 135, 112, - 110, 104, 99, 89, 110, 93, 96, 92, 56, 8, 104, 120, 89, 88, 91, 89, - 87, 92, 64, 67, 1, 107, 122, 93, 107, 91, 84, 88, 79, 83, 68, 60, - 14, 111, 122, 100, 95, 81, 87, 83, 80, 72, 87, 56, 8, 87, 108, 106, - 88, 81, 88, 81, 83, 87, 76, 56, 6, 114, 138, 128, 132, 111, 115, 114, - 119, 112, 111, 52, 104, 112, 106, 92, 84, 76, 80, 77, 77, 77, 60, 69, - 41, 106, 123, 120, 64, 93, 89, 95, 71, 71, 60, 21, 65, 115, 97, 89, - 92, 95, 79, 73, 84, 73, 36, 18, 68, 110, 84, 76, 73, 79, 85, 79, - 73, 99, 67, 60, 5, 110, 115, 111, 116, 110, 92, 88, 83, 116, 96, 92, - 57, 76, 103, 65, 37, 46, 25, 30, 40, 37, 42, 14, 0, 67, 95, 69, - 67, 64, 64, 67, 63, 57, 63, 25, 0, 55, 59, 59, 55, 64, 56, 37, - 42, 46, 26, 5, 110, 68, 67, 75, 49, 79, 46, 46, 45, 51, 44, 40, - 18, 22, 37, 25, 4, 10, 2, 4, 1, 5, 22, 1, 33, 89, 89, 49, - 52, 64, 52, 44, 68, 33, 29, 44, 36, 71, 108, 107, 24, 32, 181, 183, - 162, 166, 170, 154, 171, 142, 116, 2, 132, 163, 162, 142, 142, 144, 144, 138, - 138, 139, 114, 49, 118, 173, 175, 174, 167, 173, 173, 162, 163, 148, 123, 56, - 157, 171, 170, 167, 159, 161, 162, 153, 151, 143, 97, 12, 148, 174, 162, 159, - 161, 158, 167, 155, 144, 146, 123, 12, 177, 166, 146, 148, 138, 139, 138, 150, - 154, 142, 81, 151, 162, 154, 153, 146, 142, 154, 159, 139, 154, 144, 146, 73, - 165, 157, 155, 148, 154, 140, 159, 139, 148, 143, 120, 102, 170, 166, 148, 155, - 147, 154, 151, 163, 143, 144, 104, 0, 136, 165, 175, 148, 138, 135, 132, 130, - 159, 112, 93, 10, 148, 166, 161, 154, 159, 148, 147, 153, 130, 134, 104, 10, - 148, 170, 144, 144, 150, 150, 150, 153, 147, 128, 100, 0, 148, 138, 144, 148, - 139, 138, 142, 132, 122, 118, 64, 99, 122, 128, 124, 126, 138, 127, 116, 122, - 112, 120, 111, 52, 124, 155, 155, 136, 140, 127, 136, 144, 131, 124, 85, 126, - 185, 155, 124, 103, 77, 64, 60, 60, 55, 55, 53, 53, 57, 53, 49, 46, - 41, 40, 36, 34, 30, 30, 29, 34, 18, 30, 53, 60, 67, 68, 68, 65, - 67, 72, 72, 59, 91, 151, 130, 134, 134, 131, 122, 140, 126, 112, 59, 127, - 144, 124, 139, 123, 115, 115, 114, 127, 116, 115, 83, 42, 123, 134, 136, 132, - 130, 126, 118, 111, 100, 81, 2, 111, 144, 134, 146, 107, 102, 114, 116, 108, - 111, 116, 107, 9, 146, 138, 116, 138, 120, 110, 108, 110, 106, 122, 100, 55, - 118, 140, 123, 123, 111, 111, 104, 118, 112, 80, 45, 95, 124, 138, 147, 115, - 103, 96, 99, 97, 100, 92, 76, 0, 143, 112, 112, 104, 116, 115, 124, 104, - 91, 87, 45, 111, 151, 127, 122, 104, 114, 99, 99, 85, 96, 80, 0, 130, - 124, 126, 93, 97, 97, 116, 116, 115, 111, 67, 12, 123, 136, 102, 92, 87, - 81, 77, 93, 71, 77, 69, 63, 2, 142, 142, 112, 119, 85, 99, 114, 87, - 87, 100, 89, 60, 5, 111, 116, 91, 85, 89, 128, 93, 100, 64, 67, 0, - 108, 124, 95, 103, 83, 93, 81, 77, 79, 88, 63, 22, 106, 118, 91, 100, - 84, 81, 81, 83, 76, 89, 56, 5, 85, 111, 96, 80, 81, 88, 106, 84, - 83, 87, 57, 5, 110, 142, 126, 123, 110, 111, 110, 110, 114, 104, 49, 106, - 123, 93, 115, 97, 83, 77, 77, 72, 67, 64, 68, 38, 104, 114, 110, 69, - 99, 103, 69, 72, 52, 44, 20, 68, 115, 85, 85, 87, 67, 60, 57, 75, - 79, 37, 25, 81, 108, 97, 76, 73, 71, 72, 69, 83, 93, 71, 56, 6, - 110, 126, 112, 112, 85, 85, 87, 83, 111, 91, 93, 52, 76, 100, 71, 29, - 45, 25, 32, 37, 40, 41, 12, 0, 81, 88, 73, 65, 61, 75, 73, 67, - 52, 64, 25, 0, 71, 61, 49, 46, 38, 67, 44, 44, 40, 26, 8, 96, - 80, 77, 46, 33, 81, 44, 44, 41, 59, 33, 40, 17, 17, 29, 22, 14, - 36, 21, 22, 8, 6, 14, 0, 44, 92, 81, 45, 49, 51, 45, 59, 76, - 33, 30, 34, 34, 63, 108, 46, 38, 33, 181, 177, 161, 169, 170, 153, 174, - 136, 123, 0, 130, 158, 161, 142, 144, 140, 151, 134, 142, 143, 118, 60, 88, - 163, 178, 170, 173, 170, 165, 161, 162, 158, 124, 64, 123, 174, 159, 167, 170, - 163, 166, 157, 148, 153, 106, 16, 148, 174, 159, 157, 169, 161, 161, 144, 131, - 136, 124, 9, 175, 162, 166, 143, 139, 139, 143, 153, 153, 139, 77, 157, 162, - 155, 148, 142, 144, 169, 140, 136, 131, 146, 158, 65, 161, 153, 158, 154, 153, - 147, 163, 138, 144, 142, 92, 106, 171, 174, 150, 169, 151, 150, 158, 166, 139, - 144, 115, 0, 140, 162, 169, 148, 153, 139, 136, 126, 153, 120, 96, 22, 143, - 166, 157, 157, 151, 144, 162, 153, 140, 132, 110, 12, 150, 171, 136, 151, 150, - 146, 147, 157, 140, 128, 99, 0, 147, 136, 144, 143, 134, 134, 139, 134, 135, - 112, 68, 99, 146, 115, 128, 131, 146, 123, 135, 131, 103, 124, 100, 46, 139, - 163, 154, 143, 140, 124, 128, 143, 128, 127, 87, 118, 181, 163, 139, 127, 112, - 96, 71, 61, 56, 52, 49, 48, 46, 44, 44, 41, 38, 37, 36, 34, 34, - 37, 37, 14, 28, 57, 69, 73, 72, 84, 85, 88, 89, 76, 76, 68, 85, - 162, 136, 126, 138, 131, 128, 127, 126, 118, 51, 128, 138, 124, 124, 126, 115, - 130, 119, 119, 118, 119, 85, 37, 107, 131, 136, 122, 118, 112, 112, 111, 102, - 84, 12, 123, 143, 138, 142, 103, 104, 122, 107, 108, 119, 123, 111, 9, 142, - 131, 119, 138, 115, 112, 114, 103, 100, 119, 99, 45, 111, 154, 122, 115, 115, - 112, 108, 120, 111, 80, 49, 87, 132, 135, 116, 104, 114, 96, 112, 110, 106, - 93, 84, 14, 138, 104, 120, 99, 114, 97, 135, 102, 92, 84, 45, 112, 150, - 119, 126, 108, 108, 111, 89, 85, 84, 76, 0, 114, 123, 124, 92, 106, 92, - 102, 103, 118, 96, 68, 8, 122, 136, 107, 100, 88, 85, 84, 96, 75, 71, - 73, 63, 1, 134, 150, 107, 114, 85, 102, 95, 102, 88, 89, 87, 61, 9, - 103, 127, 92, 92, 115, 112, 97, 91, 65, 68, 8, 112, 124, 88, 93, 81, - 81, 79, 88, 79, 87, 64, 9, 104, 122, 100, 102, 96, 102, 99, 102, 77, - 92, 60, 4, 93, 104, 89, 87, 116, 81, 80, 81, 83, 93, 59, 9, 142, - 139, 128, 114, 112, 124, 108, 112, 111, 111, 56, 111, 108, 112, 93, 110, 89, - 75, 77, 64, 65, 63, 69, 34, 110, 124, 106, 64, 93, 87, 69, 68, 71, - 48, 22, 71, 120, 73, 76, 64, 56, 56, 55, 57, 72, 38, 42, 77, 108, - 107, 75, 71, 67, 83, 68, 69, 89, 72, 57, 5, 103, 126, 108, 106, 92, - 84, 83, 87, 97, 91, 88, 48, 87, 107, 60, 32, 28, 20, 28, 36, 29, - 57, 12, 5, 87, 92, 69, 69, 72, 68, 55, 72, 60, 63, 26, 0, 77, - 68, 46, 51, 46, 38, 45, 44, 36, 28, 8, 84, 87, 56, 64, 48, 83, - 41, 41, 42, 51, 34, 36, 12, 17, 22, 24, 25, 17, 22, 22, 5, 8, - 8, 0, 44, 100, 68, 46, 55, 57, 51, 60, 96, 37, 34, 36, 32, 76, - 107, 41, 63, 63, 183, 163, 161, 162, 167, 151, 181, 134, 127, 0, 130, 155, - 162, 142, 154, 139, 143, 131, 136, 135, 127, 84, 93, 162, 178, 178, 174, 163, - 178, 170, 163, 162, 124, 65, 83, 173, 173, 163, 163, 163, 155, 163, 151, 144, - 111, 12, 157, 171, 159, 158, 153, 157, 157, 142, 131, 139, 124, 6, 175, 162, - 154, 139, 144, 135, 161, 154, 147, 139, 69, 163, 151, 147, 146, 146, 165, 144, - 138, 143, 146, 131, 143, 38, 166, 157, 153, 153, 136, 150, 163, 132, 153, 132, - 93, 126, 177, 165, 151, 165, 154, 147, 153, 167, 138, 139, 112, 0, 146, 154, - 174, 147, 138, 130, 138, 131, 166, 138, 115, 12, 151, 167, 153, 153, 143, 143, - 162, 148, 140, 126, 115, 9, 140, 170, 147, 144, 144, 140, 144, 157, 134, 132, - 96, 0, 148, 128, 140, 136, 131, 128, 136, 131, 131, 118, 72, 52, 108, 155, - 140, 131, 104, 124, 108, 114, 107, 127, 104, 41, 151, 161, 158, 134, 147, 126, - 127, 143, 122, 124, 92, 102, 171, 163, 162, 132, 126, 114, 97, 81, 77, 63, - 57, 52, 49, 48, 46, 49, 48, 52, 49, 51, 46, 42, 51, 13, 53, 73, - 75, 77, 96, 99, 106, 110, 110, 79, 77, 60, 84, 167, 136, 144, 114, 138, - 144, 114, 122, 116, 51, 123, 138, 126, 128, 119, 115, 136, 119, 122, 115, 123, - 89, 41, 110, 130, 132, 122, 115, 115, 114, 115, 100, 83, 9, 124, 140, 135, - 154, 102, 106, 114, 104, 110, 108, 114, 79, 9, 106, 128, 111, 146, 118, 118, - 112, 104, 104, 123, 100, 40, 111, 154, 116, 115, 116, 108, 116, 107, 106, 84, - 48, 99, 131, 139, 104, 104, 97, 108, 106, 97, 96, 89, 83, 1, 124, 108, - 115, 99, 119, 96, 123, 100, 92, 80, 28, 107, 150, 123, 128, 108, 106, 97, - 93, 91, 88, 76, 0, 118, 114, 136, 89, 96, 92, 92, 102, 122, 102, 69, - 6, 124, 142, 108, 111, 84, 92, 81, 104, 75, 68, 71, 64, 0, 112, 122, - 88, 124, 87, 100, 88, 103, 87, 91, 84, 60, 8, 112, 131, 92, 84, 112, - 91, 92, 92, 77, 71, 0, 107, 116, 95, 80, 79, 79, 76, 103, 80, 100, - 67, 2, 91, 119, 112, 87, 95, 89, 85, 80, 76, 99, 61, 4, 89, 104, - 87, 108, 120, 99, 79, 80, 81, 85, 60, 6, 126, 131, 128, 110, 112, 127, - 108, 108, 107, 110, 52, 116, 122, 96, 99, 103, 84, 68, 88, 65, 64, 69, - 61, 30, 112, 116, 69, 107, 67, 71, 77, 69, 71, 52, 28, 45, 114, 75, - 68, 59, 53, 56, 52, 56, 73, 41, 25, 72, 103, 114, 72, 63, 65, 89, - 68, 69, 100, 60, 60, 2, 104, 127, 110, 84, 85, 81, 83, 111, 97, 85, - 85, 40, 87, 99, 80, 29, 28, 21, 26, 37, 30, 38, 14, 0, 61, 84, - 56, 52, 49, 63, 55, 75, 52, 84, 26, 0, 64, 67, 45, 38, 41, 46, - 42, 36, 45, 30, 9, 36, 102, 52, 48, 44, 67, 38, 38, 38, 60, 32, - 29, 8, 24, 16, 2, 6, 6, 20, 8, 5, 13, 2, 0, 49, 93, 59, - 37, 55, 42, 49, 48, 83, 44, 38, 34, 26, 71, 111, 45, 61, 5, 183, - 162, 163, 166, 169, 142, 181, 135, 118, 0, 128, 151, 166, 139, 159, 136, 142, - 134, 134, 123, 138, 88, 68, 157, 181, 179, 181, 163, 175, 183, 158, 169, 120, - 72, 55, 179, 177, 150, 150, 159, 166, 166, 148, 144, 114, 10, 159, 177, 159, - 158, 157, 154, 147, 150, 132, 139, 124, 6, 173, 162, 165, 138, 138, 138, 147, - 153, 148, 136, 55, 169, 146, 151, 138, 169, 155, 142, 138, 148, 154, 134, 130, - 33, 158, 161, 150, 138, 140, 151, 170, 128, 148, 131, 84, 136, 178, 169, 150, - 166, 147, 150, 151, 170, 140, 140, 118, 0, 140, 153, 174, 132, 143, 132, 144, - 132, 179, 120, 110, 1, 158, 165, 151, 151, 139, 140, 166, 146, 136, 131, 112, - 8, 136, 169, 143, 144, 142, 134, 144, 163, 136, 138, 99, 0, 144, 139, 136, - 131, 124, 140, 131, 130, 123, 110, 75, 64, 108, 157, 158, 115, 131, 123, 104, - 112, 103, 142, 99, 33, 147, 161, 166, 138, 153, 151, 124, 138, 120, 115, 92, - 96, 161, 169, 158, 154, 134, 122, 111, 104, 92, 80, 64, 68, 65, 64, 63, - 63, 51, 55, 52, 49, 42, 44, 56, 10, 57, 79, 72, 92, 93, 95, 116, - 127, 126, 106, 77, 69, 76, 167, 132, 150, 116, 143, 130, 116, 120, 104, 41, - 127, 135, 123, 127, 119, 116, 144, 115, 123, 114, 135, 99, 46, 112, 126, 114, - 116, 116, 116, 108, 118, 102, 80, 2, 128, 131, 131, 165, 102, 103, 108, 103, - 110, 106, 119, 88, 5, 114, 132, 114, 144, 116, 118, 110, 104, 99, 130, 93, - 33, 112, 163, 114, 116, 114, 106, 103, 104, 102, 84, 52, 88, 134, 111, 104, - 102, 102, 99, 100, 104, 97, 87, 81, 2, 139, 108, 110, 97, 130, 95, 135, - 96, 87, 75, 26, 103, 148, 112, 135, 102, 102, 102, 89, 81, 93, 79, 0, - 134, 114, 128, 88, 97, 119, 122, 102, 130, 103, 72, 4, 138, 150, 114, 112, - 81, 85, 84, 115, 87, 67, 75, 64, 0, 114, 136, 104, 124, 87, 95, 89, - 112, 84, 93, 85, 64, 4, 115, 124, 91, 87, 119, 87, 96, 91, 69, 71, - 0, 114, 131, 92, 79, 80, 73, 76, 111, 80, 72, 65, 2, 88, 122, 123, - 85, 81, 80, 77, 71, 72, 110, 61, 2, 85, 96, 87, 110, 132, 80, 79, - 77, 81, 102, 63, 4, 130, 143, 138, 108, 107, 132, 106, 106, 106, 107, 32, - 122, 119, 114, 85, 114, 83, 69, 75, 61, 64, 61, 63, 24, 118, 116, 69, - 115, 65, 71, 69, 68, 68, 52, 30, 36, 114, 72, 60, 56, 88, 57, 52, - 56, 63, 41, 26, 60, 76, 122, 68, 65, 64, 79, 67, 65, 87, 65, 56, - 2, 97, 130, 103, 85, 83, 83, 81, 112, 95, 89, 87, 30, 92, 100, 83, - 29, 20, 20, 30, 25, 26, 32, 17, 0, 55, 83, 42, 38, 38, 45, 52, - 84, 51, 60, 29, 0, 57, 59, 48, 37, 42, 41, 40, 44, 46, 29, 20, - 16, 103, 57, 45, 44, 59, 38, 37, 37, 40, 33, 26, 9, 8, 16, 1, - 32, 2, 0, 2, 5, 5, 2, 0, 42, 85, 45, 42, 57, 45, 37, 56, - 91, 29, 28, 40, 22, 92, 106, 9, 8, 0, 9, 12, 9, 12, 12, 56, - 59, 12, 14, 0, 34, 80, 80, 75, 80, 34, 30, 73, 80, 22, 10, 68, - 85, 88, 60, 85, 40, 44, 44, 76, 42, 30, 26, 0, 85, 110, 104, 32, - 108, 34, 36, 41, 77, 77, 16, 38, 91, 88, 91, 93, 96, 91, 60, 51, - 81, 77, 84, 16, 76, 53, 42, 44, 85, 89, 60, 48, 42, 38, 42, 24, - 89, 108, 56, 59, 60, 49, 95, 51, 67, 49, 42, 21, 59, 102, 52, 53, - 55, 100, 92, 57, 93, 45, 48, 2, 99, 103, 68, 110, 130, 71, 56, 97, - 61, 89, 32, 34, 112, 120, 114, 52, 42, 51, 80, 52, 83, 46, 48, 12, - 99, 106, 118, 111, 96, 100, 96, 69, 68, 57, 49, 0, 104, 108, 102, 106, - 76, 71, 68, 99, 130, 73, 71, 20, 99, 131, 112, 73, 73, 103, 77, 72, - 65, 65, 44, 72, 139, 119, 80, 116, 104, 76, 80, 77, 107, 139, 68, 1, - 114, 93, 116, 114, 91, 77, 83, 108, 112, 104, 21, 118, 120, 87, 91, 88, - 88, 119, 92, 76, 87, 115, 24, 115, 116, 96, 119, 119, 111, 100, 93, 95, - 77, 77, 71, 2, 76, 136, 106, 110, 84, 108, 75, 114, 84, 80, 72, 26, - 120, 126, 99, 128, 108, 92, 88, 83, 80, 83, 68, 10, 119, 122, 130, 127, - 93, 96, 106, 89, 122, 69, 14, 159, 140, 142, 118, 161, 140, 136, 112, 122, - 116, 118, 104, 60, 87, 139, 128, 111, 104, 108, 130, 107, 127, 92, 53, 69, - 159, 175, 159, 181, 142, 136, 138, 162, 130, 127, 38, 106, 136, 139, 132, 110, - 106, 111, 142, 108, 107, 111, 52, 93, 140, 161, 135, 166, 114, 112, 102, 111, - 100, 115, 110, 30, 131, 116, 119, 114, 136, 119, 112, 115, 135, 96, 114, 30, - 162, 144, 140, 140, 142, 126, 128, 148, 112, 112, 102, 9, 110, 153, 136, 157, - 108, 114, 110, 126, 112, 112, 49, 134, 146, 146, 144, 143, 124, 128, 150, 148, - 122, 115, 96, 5, 144, 134, 150, 151, 122, 134, 112, 119, 119, 139, 116, 5, - 170, 153, 178, 143, 135, 147, 122, 119, 123, 119, 60, 93, 148, 123, 161, 147, - 112, 147, 148, 103, 122, 112, 10, 153, 191, 174, 157, 150, 154, 193, 170, 150, - 150, 134, 131, 5, 124, 131, 135, 103, 104, 99, 111, 106, 118, 119, 107, 34, - 153, 157, 136, 158, 140, 154, 124, 134, 123, 124, 123, 17, 162, 174, 163, 165, - 175, 132, 162, 165, 144, 139, 134, 92, 0, 170, 181, 174, 169, 170, 153, 150, - 147, 140, 144, 12, 163, 151, 167, 144, 128, 157, 140, 159, 139, 128, 37, 159, - 179, 155, 150, 135, 150, 123, 163, 177, 151, 142, 112, 76, 96, 171, 167, 171, - 170, 155, 146, 147, 146, 151, 135, 41, 166, 169, 151, 167, 147, 170, 148, 147, - 147, 131, 6, 187, 185, 182, 153, 146, 175, 171, 170, 185, 157, 138, 136, 14, - 154, 138, 139, 153, 150, 178, 167, 155, 130, 135, 124, 14, 153, 154, 169, 157, - 174, 139, 148, 147, 136, 139, 115, 0, 173, 179, 158, 159, 146, 150, 163, 177, - 162, 144, 116, 73, 115, 185, 173, 161, 155, 183, 155, 155, 144, 151, 163, 76, - 88, 187, 174, 198, 174, 68, 57, 63, 12, 12, 45, 55, 20, 13, 0, 41, - 89, 71, 65, 84, 41, 29, 68, 79, 21, 9, 68, 72, 85, 73, 55, 38, - 45, 44, 71, 52, 34, 26, 0, 83, 97, 92, 37, 91, 37, 34, 55, 67, - 64, 26, 44, 87, 85, 87, 69, 67, 48, 51, 71, 53, 65, 75, 28, 72, - 61, 44, 44, 52, 89, 79, 59, 44, 37, 41, 30, 89, 112, 61, 59, 71, - 57, 93, 61, 72, 49, 37, 20, 59, 102, 55, 53, 55, 95, 88, 60, 89, - 44, 45, 1, 97, 99, 87, 104, 123, 77, 56, 93, 65, 80, 25, 40, 93, - 111, 64, 42, 49, 57, 65, 67, 53, 42, 42, 17, 95, 100, 97, 131, 106, - 92, 96, 95, 65, 59, 51, 0, 102, 106, 112, 100, 76, 72, 77, 92, 112, - 89, 71, 22, 93, 126, 110, 77, 76, 99, 103, 72, 61, 67, 41, 72, 127, - 103, 80, 91, 92, 96, 77, 77, 99, 126, 61, 0, 112, 100, 103, 111, 92, - 81, 87, 100, 110, 102, 26, 124, 116, 93, 96, 80, 111, 111, 84, 87, 77, - 103, 36, 110, 116, 110, 114, 97, 97, 99, 92, 104, 76, 79, 63, 1, 85, - 122, 96, 83, 95, 97, 80, 100, 83, 83, 75, 37, 115, 128, 102, 120, 116, - 100, 106, 104, 92, 81, 79, 9, 115, 118, 116, 99, 95, 112, 95, 97, 112, - 75, 20, 148, 139, 140, 126, 138, 140, 132, 118, 130, 116, 124, 106, 55, 88, - 140, 127, 100, 110, 124, 122, 104, 123, 99, 52, 75, 155, 166, 154, 165, 140, - 132, 136, 157, 130, 124, 46, 111, 135, 138, 124, 107, 110, 111, 134, 110, 104, - 103, 49, 92, 140, 153, 135, 153, 122, 115, 108, 108, 102, 114, 108, 45, 116, - 120, 123, 138, 136, 124, 111, 112, 124, 104, 111, 32, 157, 148, 131, 131, 119, - 119, 130, 144, 106, 112, 103, 8, 116, 142, 128, 154, 103, 114, 114, 118, 110, - 107, 48, 130, 143, 146, 142, 128, 143, 144, 144, 131, 119, 112, 96, 5, 144, - 134, 147, 142, 123, 130, 126, 107, 128, 130, 110, 6, 163, 163, 159, 139, 127, - 148, 123, 124, 119, 116, 57, 100, 144, 144, 153, 127, 112, 144, 147, 106, 122, - 108, 12, 147, 183, 170, 167, 136, 140, 173, 166, 147, 150, 142, 135, 24, 131, - 127, 135, 103, 97, 100, 100, 111, 115, 115, 106, 42, 150, 155, 130, 148, 148, - 154, 126, 130, 131, 123, 103, 18, 158, 162, 161, 163, 157, 136, 158, 161, 148, - 139, 124, 93, 0, 174, 181, 170, 165, 155, 151, 150, 139, 138, 138, 1, 154, - 159, 165, 136, 124, 153, 139, 157, 140, 126, 48, 155, 179, 159, 144, 132, 143, - 124, 134, 136, 138, 140, 110, 71, 99, 175, 161, 165, 169, 151, 144, 148, 154, - 150, 139, 51, 162, 163, 154, 157, 159, 169, 148, 147, 144, 110, 6, 181, 178, - 173, 159, 147, 177, 173, 162, 162, 159, 136, 124, 14, 150, 139, 150, 151, 150, - 151, 171, 165, 142, 139, 119, 8, 151, 154, 147, 162, 170, 158, 136, 143, 138, - 130, 112, 0, 178, 175, 154, 158, 148, 151, 155, 177, 163, 158, 112, 67, 120, - 181, 170, 163, 154, 177, 157, 154, 146, 147, 161, 72, 87, 190, 175, 194, 177, - 22, 46, 24, 12, 12, 38, 56, 20, 14, 2, 49, 81, 65, 73, 73, 45, - 28, 51, 73, 22, 9, 67, 79, 76, 79, 45, 48, 38, 48, 65, 51, 36, - 25, 0, 81, 80, 45, 75, 57, 37, 37, 44, 75, 64, 24, 46, 89, 72, - 49, 49, 72, 69, 69, 61, 64, 60, 81, 24, 64, 60, 46, 42, 44, 64, - 81, 75, 55, 38, 38, 32, 89, 114, 59, 63, 60, 60, 68, 75, 64, 51, - 48, 18, 64, 84, 60, 53, 73, 93, 67, 79, 81, 44, 45, 1, 83, 97, - 72, 71, 68, 63, 57, 92, 69, 75, 24, 40, 100, 106, 60, 36, 57, 36, - 42, 41, 42, 48, 42, 17, 91, 100, 99, 100, 116, 100, 80, 91, 68, 59, - 51, 0, 99, 114, 107, 92, 83, 71, 72, 75, 72, 81, 72, 28, 85, 124, - 106, 77, 73, 84, 104, 68, 68, 68, 40, 75, 124, 114, 110, 97, 93, 95, - 93, 80, 93, 112, 75, 2, 102, 103, 110, 102, 100, 85, 89, 96, 104, 96, - 30, 118, 116, 89, 87, 110, 89, 77, 91, 88, 72, 96, 40, 104, 115, 103, - 99, 106, 102, 96, 96, 91, 76, 76, 80, 13, 73, 116, 92, 91, 96, 93, - 85, 93, 81, 80, 75, 41, 111, 126, 102, 119, 107, 107, 96, 99, 93, 88, - 76, 8, 112, 116, 107, 99, 111, 89, 96, 88, 107, 64, 26, 140, 138, 139, - 132, 123, 114, 116, 127, 116, 122, 119, 104, 52, 92, 135, 124, 104, 110, 138, - 124, 108, 114, 102, 52, 107, 155, 155, 153, 158, 147, 138, 142, 155, 130, 127, - 55, 107, 136, 136, 124, 107, 114, 112, 131, 108, 102, 97, 45, 96, 136, 148, - 136, 148, 131, 112, 108, 103, 100, 112, 108, 49, 124, 124, 119, 146, 122, 120, - 114, 112, 123, 106, 114, 46, 146, 144, 128, 134, 151, 153, 151, 140, 107, 114, - 91, 16, 115, 134, 124, 126, 102, 108, 115, 104, 107, 107, 64, 123, 143, 144, - 142, 132, 128, 123, 130, 120, 116, 116, 93, 17, 148, 139, 157, 116, 107, 114, - 120, 107, 122, 119, 110, 8, 161, 151, 165, 155, 140, 153, 126, 123, 126, 99, - 65, 112, 136, 150, 139, 112, 119, 144, 147, 110, 114, 107, 14, 140, 183, 171, - 163, 157, 143, 151, 143, 148, 150, 139, 127, 10, 130, 136, 119, 100, 100, 103, - 103, 107, 119, 115, 89, 46, 146, 155, 142, 140, 128, 148, 126, 124, 127, 126, - 124, 2, 154, 159, 162, 171, 140, 136, 150, 163, 144, 142, 124, 91, 0, 163, - 186, 169, 165, 154, 155, 154, 159, 131, 142, 1, 148, 147, 132, 124, 151, 147, - 143, 154, 136, 127, 55, 153, 177, 158, 167, 130, 124, 127, 128, 132, 135, 138, - 96, 61, 104, 170, 158, 161, 166, 154, 147, 150, 148, 151, 135, 65, 154, 161, - 159, 161, 158, 163, 150, 142, 147, 134, 8, 179, 170, 167, 155, 148, 174, 174, - 163, 155, 155, 134, 130, 0, 153, 130, 135, 154, 150, 147, 144, 169, 154, 139, - 115, 10, 150, 154, 147, 190, 159, 135, 162, 158, 131, 132, 110, 0, 173, 175, - 169, 162, 157, 148, 165, 169, 161, 148, 112, 63, 124, 139, 169, 163, 148, 144, - 146, 150, 150, 147, 150, 63, 103, 189, 178, 190, 185, 16, 36, 25, 10, 12, - 33, 45, 16, 14, 0, 51, 92, 61, 60, 72, 68, 33, 45, 59, 22, 8, - 65, 75, 67, 42, 41, 61, 51, 52, 56, 64, 33, 25, 2, 79, 73, 40, - 65, 42, 40, 37, 49, 57, 41, 25, 52, 84, 67, 92, 60, 79, 68, 64, - 60, 49, 63, 68, 26, 63, 76, 55, 42, 44, 44, 51, 64, 44, 40, 37, - 33, 92, 123, 48, 53, 57, 75, 65, 59, 49, 48, 48, 17, 61, 91, 56, - 57, 81, 71, 73, 75, 59, 45, 44, 2, 93, 97, 91, 89, 85, 59, 76, - 71, 81, 52, 21, 40, 89, 55, 36, 29, 30, 24, 29, 28, 30, 44, 36, - 16, 87, 99, 89, 93, 110, 112, 83, 72, 73, 65, 42, 0, 97, 106, 104, - 89, 87, 99, 83, 81, 76, 80, 72, 32, 83, 104, 103, 80, 76, 80, 96, - 80, 65, 51, 34, 73, 119, 108, 112, 120, 102, 116, 106, 92, 88, 103, 72, - 0, 99, 107, 95, 97, 97, 87, 83, 96, 89, 91, 34, 114, 114, 91, 91, - 89, 89, 76, 79, 88, 68, 88, 44, 102, 110, 107, 110, 104, 100, 97, 99, - 103, 77, 77, 79, 4, 81, 100, 84, 77, 93, 88, 83, 93, 75, 81, 75, - 48, 107, 126, 106, 118, 123, 89, 100, 99, 93, 84, 68, 16, 99, 115, 124, - 104, 83, 110, 97, 102, 103, 60, 24, 127, 140, 138, 130, 115, 120, 123, 116, - 115, 123, 122, 106, 44, 96, 134, 119, 100, 114, 119, 114, 104, 111, 102, 52, - 84, 153, 162, 146, 136, 136, 142, 151, 150, 131, 126, 61, 106, 132, 143, 111, - 112, 110, 107, 139, 108, 89, 91, 41, 96, 138, 135, 130, 135, 140, 112, 116, - 106, 102, 112, 108, 53, 118, 123, 124, 130, 123, 122, 118, 112, 119, 106, 114, - 51, 144, 144, 128, 135, 131, 135, 124, 122, 122, 120, 85, 22, 112, 126, 135, - 123, 100, 111, 112, 100, 108, 110, 67, 123, 140, 143, 139, 146, 124, 123, 123, - 128, 110, 114, 96, 9, 136, 131, 120, 142, 100, 134, 134, 108, 103, 126, 112, - 9, 150, 154, 163, 143, 136, 162, 131, 127, 123, 114, 68, 115, 122, 143, 135, - 114, 116, 138, 138, 106, 115, 103, 12, 146, 178, 167, 143, 153, 148, 143, 140, - 150, 153, 138, 127, 16, 102, 134, 100, 95, 108, 95, 110, 112, 116, 106, 97, - 52, 139, 130, 126, 132, 126, 142, 132, 130, 131, 123, 126, 0, 153, 158, 158, - 169, 136, 140, 148, 155, 151, 135, 124, 88, 0, 165, 186, 163, 161, 155, 155, - 154, 159, 128, 131, 1, 142, 147, 130, 118, 151, 124, 138, 131, 140, 124, 64, - 147, 165, 148, 139, 132, 124, 128, 128, 132, 131, 143, 102, 55, 112, 167, 159, - 148, 161, 161, 146, 147, 151, 144, 138, 68, 155, 161, 158, 147, 154, 155, 150, - 147, 143, 136, 9, 170, 167, 162, 155, 150, 173, 178, 179, 169, 157, 135, 127, - 2, 147, 134, 146, 122, 130, 146, 144, 140, 148, 139, 122, 14, 150, 157, 143, - 163, 130, 138, 131, 132, 131, 124, 106, 0, 148, 175, 159, 159, 158, 155, 161, - 163, 159, 144, 104, 53, 130, 143, 143, 163, 151, 151, 153, 151, 143, 134, 135, - 59, 104, 183, 177, 178, 185, 9, 10, 10, 10, 12, 38, 38, 12, 12, 0, - 48, 56, 61, 59, 67, 67, 38, 34, 46, 21, 6, 61, 84, 75, 48, 60, - 75, 60, 55, 59, 42, 30, 25, 0, 77, 79, 36, 71, 40, 41, 36, 41, - 61, 40, 28, 52, 80, 83, 64, 61, 75, 81, 67, 67, 67, 59, 68, 26, - 36, 65, 59, 42, 46, 44, 45, 45, 51, 37, 38, 36, 89, 99, 57, 75, - 63, 79, 72, 61, 52, 48, 38, 16, 63, 87, 57, 76, 73, 67, 75, 77, - 49, 44, 44, 9, 88, 83, 80, 69, 57, 73, 60, 68, 85, 49, 18, 37, - 91, 44, 20, 21, 28, 37, 20, 24, 33, 49, 36, 20, 84, 97, 93, 89, - 110, 88, 89, 75, 75, 55, 42, 0, 93, 93, 111, 97, 73, 81, 85, 92, - 88, 77, 75, 36, 49, 100, 108, 92, 72, 73, 91, 84, 61, 51, 34, 73, - 118, 111, 91, 100, 110, 100, 97, 102, 88, 104, 60, 0, 104, 112, 111, 93, - 99, 91, 91, 95, 93, 91, 38, 107, 111, 108, 92, 97, 83, 72, 72, 88, - 89, 89, 44, 100, 103, 102, 100, 106, 103, 107, 106, 103, 76, 77, 64, 5, - 69, 104, 81, 87, 88, 77, 87, 87, 81, 77, 73, 49, 69, 119, 103, 123, - 123, 95, 100, 87, 89, 73, 67, 16, 107, 108, 104, 92, 110, 112, 115, 110, - 107, 59, 24, 79, 143, 135, 124, 118, 122, 119, 116, 118, 124, 102, 103, 40, - 103, 132, 120, 108, 116, 108, 106, 107, 108, 93, 51, 83, 153, 143, 154, 131, - 153, 142, 147, 135, 130, 130, 69, 81, 130, 142, 110, 112, 119, 120, 132, 107, - 84, 84, 42, 96, 132, 124, 127, 120, 123, 118, 116, 120, 100, 114, 107, 57, - 119, 124, 123, 127, 119, 119, 123, 112, 111, 108, 110, 57, 136, 143, 136, 132, - 108, 130, 123, 126, 122, 111, 100, 20, 115, 130, 120, 114, 97, 108, 104, 99, - 103, 99, 65, 81, 135, 140, 139, 142, 122, 114, 132, 119, 110, 110, 91, 10, - 132, 143, 118, 128, 127, 136, 138, 103, 116, 120, 106, 14, 146, 150, 159, 136, - 148, 153, 139, 127, 112, 111, 69, 110, 132, 139, 135, 132, 111, 134, 132, 106, - 114, 103, 21, 135, 182, 163, 148, 150, 142, 150, 147, 151, 150, 146, 119, 30, - 93, 128, 97, 104, 114, 108, 112, 107, 110, 103, 100, 56, 81, 148, 115, 155, - 124, 139, 135, 130, 132, 132, 114, 0, 150, 158, 158, 142, 153, 154, 144, 157, - 153, 142, 131, 84, 0, 167, 179, 162, 161, 155, 157, 154, 138, 126, 136, 21, - 142, 138, 122, 118, 155, 151, 128, 132, 140, 123, 64, 89, 154, 167, 166, 127, - 128, 128, 127, 123, 128, 138, 99, 51, 111, 166, 161, 153, 151, 155, 144, 144, - 148, 147, 132, 72, 154, 161, 158, 147, 148, 166, 151, 146, 143, 127, 13, 166, - 169, 162, 150, 155, 147, 153, 155, 150, 155, 134, 120, 25, 138, 124, 130, 100, - 115, 118, 115, 118, 140, 122, 111, 16, 142, 150, 135, 122, 157, 131, 167, 135, - 148, 139, 93, 0, 124, 171, 161, 167, 162, 155, 159, 161, 155, 144, 102, 49, - 110, 138, 139, 147, 148, 158, 148, 140, 138, 147, 122, 51, 97, 182, 179, 173, - 170, 17, 20, 21, 13, 26, 29, 42, 22, 12, 0, 40, 75, 51, 56, 69, - 61, 36, 52, 53, 17, 6, 59, 77, 80, 53, 55, 68, 67, 64, 56, 53, - 48, 25, 0, 73, 81, 49, 69, 38, 37, 42, 45, 57, 26, 24, 41, 64, - 87, 72, 72, 55, 63, 61, 65, 55, 68, 46, 29, 36, 56, 63, 55, 48, - 48, 42, 55, 42, 37, 36, 36, 76, 118, 65, 75, 65, 65, 79, 63, 49, - 48, 33, 12, 67, 91, 53, 79, 63, 68, 83, 75, 48, 40, 42, 4, 87, - 87, 88, 79, 69, 77, 81, 68, 80, 48, 17, 42, 85, 22, 42, 40, 45, - 41, 16, 18, 30, 42, 33, 24, 51, 99, 93, 84, 107, 102, 110, 97, 72, - 53, 56, 0, 91, 99, 111, 95, 85, 81, 79, 77, 80, 77, 73, 40, 44, - 84, 91, 103, 71, 60, 83, 80, 57, 49, 30, 64, 116, 106, 103, 100, 100, - 93, 99, 84, 87, 104, 52, 0, 102, 103, 103, 91, 100, 92, 84, 81, 100, - 95, 46, 72, 96, 118, 103, 115, 91, 89, 97, 103, 67, 88, 49, 71, 97, - 102, 100, 97, 97, 95, 96, 79, 75, 79, 52, 2, 68, 107, 91, 73, 71, - 80, 73, 73, 73, 76, 72, 52, 60, 111, 119, 119, 88, 99, 95, 84, 88, - 75, 77, 14, 102, 106, 99, 84, 89, 79, 99, 97, 115, 59, 25, 75, 142, - 135, 124, 116, 118, 120, 128, 124, 126, 108, 87, 33, 99, 128, 114, 110, 128, - 107, 104, 106, 106, 89, 49, 79, 143, 142, 131, 136, 130, 138, 144, 132, 128, - 130, 71, 45, 122, 136, 107, 116, 118, 130, 124, 96, 88, 79, 34, 96, 126, - 128, 134, 120, 116, 119, 100, 103, 99, 111, 107, 60, 111, 120, 126, 126, 122, - 120, 119, 123, 114, 107, 112, 59, 80, 143, 138, 123, 127, 134, 122, 131, 107, - 111, 104, 17, 114, 130, 115, 93, 96, 110, 106, 102, 99, 102, 87, 80, 130, - 136, 138, 134, 124, 138, 111, 115, 107, 100, 89, 12, 134, 130, 110, 128, 135, - 106, 126, 106, 106, 115, 112, 17, 139, 159, 147, 134, 130, 131, 142, 132, 110, - 115, 64, 108, 126, 150, 132, 131, 108, 131, 107, 108, 116, 104, 22, 140, 173, - 162, 134, 123, 154, 127, 153, 148, 154, 140, 134, 18, 110, 122, 99, 85, 104, - 112, 104, 108, 102, 92, 95, 57, 83, 144, 158, 126, 118, 111, 116, 139, 126, - 120, 87, 28, 140, 158, 139, 146, 148, 144, 154, 144, 147, 143, 124, 81, 0, - 163, 171, 159, 161, 155, 154, 157, 136, 123, 124, 20, 132, 136, 118, 111, 153, - 150, 146, 126, 132, 122, 97, 85, 153, 167, 166, 126, 122, 122, 123, 122, 127, - 135, 95, 37, 140, 162, 158, 171, 150, 143, 127, 144, 147, 151, 136, 81, 87, - 159, 158, 154, 150, 140, 143, 143, 142, 99, 16, 177, 165, 161, 151, 154, 155, - 154, 150, 148, 154, 128, 119, 24, 131, 123, 112, 128, 112, 114, 132, 115, 135, - 126, 115, 17, 139, 130, 173, 158, 155, 163, 159, 132, 148, 123, 89, 1, 100, - 170, 161, 163, 159, 159, 163, 158, 155, 142, 97, 36, 111, 130, 136, 138, 142, - 142, 151, 142, 142, 144, 124, 44, 114, 179, 165, 161, 158, 53, 41, 34, 28, - 28, 28, 24, 28, 13, 4, 41, 55, 52, 49, 51, 60, 53, 60, 55, 20, - 5, 52, 69, 59, 59, 49, 52, 52, 57, 44, 53, 41, 25, 0, 68, 72, - 60, 45, 51, 67, 61, 63, 42, 28, 25, 63, 67, 80, 80, 68, 40, 38, - 41, 45, 46, 37, 41, 45, 40, 37, 42, 53, 57, 56, 52, 44, 37, 34, - 34, 41, 84, 112, 71, 81, 68, 77, 69, 49, 59, 46, 46, 10, 64, 84, - 52, 80, 81, 81, 71, 75, 60, 40, 44, 4, 87, 87, 89, 76, 72, 85, - 77, 81, 81, 36, 16, 36, 36, 17, 16, 41, 32, 41, 18, 16, 18, 20, - 48, 24, 40, 85, 95, 88, 85, 81, 85, 79, 60, 56, 45, 1, 87, 83, - 106, 88, 88, 83, 79, 75, 76, 72, 71, 69, 68, 45, 49, 55, 61, 61, - 71, 81, 65, 61, 33, 77, 111, 95, 95, 87, 97, 97, 96, 97, 100, 103, - 69, 2, 96, 103, 103, 93, 102, 100, 84, 96, 96, 91, 51, 53, 61, 92, - 89, 108, 100, 81, 76, 99, 79, 55, 51, 56, 63, 96, 69, 71, 75, 72, - 75, 73, 72, 79, 76, 21, 75, 99, 72, 71, 67, 77, 72, 69, 79, 72, - 72, 77, 53, 71, 100, 103, 77, 73, 87, 81, 91, 85, 76, 10, 97, 103, - 87, 103, 95, 95, 89, 95, 87, 55, 65, 61, 138, 134, 127, 126, 120, 120, - 119, 120, 120, 106, 100, 29, 102, 124, 114, 102, 107, 112, 102, 103, 106, 92, - 45, 123, 148, 128, 126, 136, 138, 138, 126, 135, 135, 128, 79, 67, 112, 134, - 106, 123, 120, 114, 111, 107, 88, 76, 32, 97, 123, 116, 102, 103, 103, 104, - 102, 104, 108, 111, 107, 64, 71, 122, 126, 126, 123, 115, 114, 122, 110, 108, - 107, 79, 75, 134, 135, 126, 128, 143, 130, 123, 100, 111, 100, 22, 108, 111, - 96, 93, 96, 97, 87, 99, 75, 92, 104, 75, 93, 120, 122, 128, 107, 110, - 106, 104, 107, 115, 83, 14, 124, 144, 150, 128, 134, 132, 100, 130, 114, 106, - 100, 16, 140, 148, 140, 155, 126, 126, 132, 128, 120, 89, 52, 118, 126, 147, - 131, 122, 111, 124, 114, 112, 114, 96, 25, 131, 178, 165, 154, 144, 146, 153, - 151, 147, 143, 140, 124, 20, 102, 91, 88, 85, 79, 95, 91, 91, 96, 92, - 84, 68, 75, 140, 111, 104, 107, 102, 114, 116, 118, 122, 120, 6, 143, 153, - 142, 140, 153, 148, 143, 144, 144, 142, 118, 76, 0, 166, 178, 158, 157, 159, - 155, 155, 159, 118, 135, 4, 128, 128, 116, 107, 150, 150, 150, 124, 127, 118, - 103, 85, 146, 158, 155, 114, 116, 132, 116, 120, 124, 132, 115, 37, 126, 162, - 166, 128, 143, 142, 124, 132, 144, 151, 140, 111, 80, 115, 157, 159, 157, 155, - 153, 140, 142, 130, 17, 171, 166, 158, 147, 150, 154, 157, 155, 151, 153, 118, - 120, 4, 131, 115, 112, 115, 107, 110, 120, 140, 131, 127, 107, 21, 139, 178, - 142, 158, 154, 162, 131, 150, 150, 123, 84, 1, 64, 162, 166, 166, 161, 157, - 157, 158, 155, 128, 93, 32, 112, 135, 132, 138, 135, 138, 138, 140, 138, 139, - 131, 36, 166, 182, 169, 162, 161, 21, 26, 18, 25, 25, 36, 29, 16, 12, - 0, 34, 34, 36, 36, 37, 36, 41, 34, 28, 20, 4, 51, 52, 48, 44, - 45, 44, 44, 53, 40, 41, 25, 24, 4, 61, 64, 63, 63, 60, 53, 61, - 60, 40, 26, 30, 48, 63, 71, 68, 42, 45, 32, 32, 38, 45, 36, 34, - 33, 37, 38, 38, 49, 42, 44, 42, 41, 32, 37, 33, 42, 80, 79, 72, - 60, 52, 57, 61, 46, 45, 46, 46, 9, 61, 84, 73, 56, 52, 68, 77, - 68, 56, 45, 44, 5, 80, 85, 95, 76, 80, 88, 84, 79, 55, 42, 13, - 45, 36, 8, 13, 9, 17, 12, 14, 16, 16, 14, 18, 21, 51, 36, 44, - 48, 48, 48, 51, 56, 61, 48, 37, 4, 80, 85, 88, 84, 80, 56, 76, - 49, 53, 56, 68, 52, 57, 61, 69, 61, 63, 67, 67, 87, 65, 46, 25, - 72, 77, 88, 79, 77, 77, 80, 81, 84, 76, 71, 69, 2, 93, 92, 97, - 91, 88, 85, 87, 87, 84, 79, 76, 77, 83, 68, 65, 69, 71, 68, 81, - 75, 81, 77, 75, 79, 77, 73, 65, 81, 80, 69, 81, 83, 81, 79, 77, - 6, 61, 89, 83, 71, 59, 60, 65, 67, 68, 69, 76, 72, 75, 80, 81, - 83, 81, 81, 84, 87, 87, 77, 64, 21, 89, 93, 89, 84, 79, 73, 83, - 68, 63, 56, 48, 60, 83, 128, 136, 97, 116, 116, 122, 104, 106, 100, 100, - 22, 99, 95, 97, 89, 93, 92, 100, 102, 104, 92, 45, 92, 136, 126, 124, - 114, 116, 116, 111, 103, 92, 93, 79, 65, 107, 118, 114, 108, 106, 106, 107, - 108, 79, 75, 28, 97, 126, 120, 115, 118, 111, 116, 110, 115, 119, 111, 100, - 103, 71, 77, 84, 111, 83, 87, 114, 116, 115, 118, 103, 97, 69, 91, 139, - 130, 127, 126, 96, 99, 112, 100, 80, 36, 97, 114, 100, 89, 84, 83, 77, - 79, 89, 76, 77, 88, 102, 106, 118, 112, 115, 110, 112, 115, 115, 112, 91, - 16, 115, 135, 143, 131, 96, 135, 132, 134, 114, 114, 110, 24, 135, 148, 134, - 118, 140, 139, 136, 135, 114, 111, 61, 119, 120, 118, 111, 122, 107, 106, 114, - 112, 110, 100, 21, 135, 169, 154, 108, 144, 146, 112, 134, 142, 140, 135, 61, - 26, 57, 89, 96, 73, 69, 91, 79, 80, 83, 92, 96, 72, 75, 96, 100, - 97, 103, 107, 110, 108, 112, 112, 116, 2, 134, 148, 147, 143, 142, 142, 140, - 128, 136, 135, 112, 72, 0, 157, 175, 158, 157, 155, 155, 155, 159, 115, 116, - 30, 120, 124, 114, 106, 102, 115, 110, 111, 79, 79, 104, 92, 95, 103, 106, - 124, 126, 124, 126, 123, 130, 127, 102, 33, 73, 138, 136, 111, 115, 138, 135, - 118, 127, 130, 134, 116, 93, 100, 112, 112, 118, 118, 123, 127, 142, 124, 18, - 132, 165, 161, 155, 155, 151, 154, 148, 151, 153, 126, 118, 9, 127, 118, 107, - 106, 106, 122, 123, 123, 124, 122, 112, 26, 131, 175, 136, 154, 104, 150, 148, - 112, 122, 138, 76, 2, 53, 130, 158, 111, 120, 135, 154, 151, 135, 131, 81, - 26, 111, 136, 136, 135, 134, 134, 134, 139, 138, 134, 128, 32, 154, 181, 165, - 154, 153, 8, 8, 10, 8, 8, 8, 10, 8, 2, 0, 9, 10, 10, 10, - 13, 12, 12, 12, 14, 12, 5, 16, 20, 18, 18, 16, 16, 14, 14, 14, - 14, 14, 12, 0, 14, 16, 16, 20, 20, 17, 17, 24, 21, 16, 36, 21, - 37, 42, 20, 18, 32, 24, 21, 25, 21, 21, 18, 21, 18, 18, 21, 22, - 24, 25, 26, 29, 30, 38, 30, 34, 52, 46, 40, 36, 40, 44, 37, 36, - 42, 36, 24, 8, 28, 44, 53, 42, 46, 45, 51, 45, 46, 41, 40, 6, - 73, 84, 83, 81, 69, 67, 75, 65, 40, 38, 10, 57, 20, 6, 12, 8, - 9, 10, 14, 14, 12, 18, 14, 17, 20, 22, 18, 30, 32, 34, 36, 37, - 40, 42, 40, 1, 26, 38, 45, 29, 29, 29, 30, 24, 24, 21, 30, 29, - 21, 22, 30, 30, 32, 24, 59, 61, 60, 38, 24, 44, 52, 51, 49, 49, - 64, 59, 49, 44, 44, 38, 20, 40, 42, 48, 57, 64, 53, 55, 60, 60, - 60, 61, 64, 61, 67, 69, 73, 69, 69, 69, 71, 69, 77, 67, 64, 63, - 77, 68, 64, 59, 76, 60, 55, 53, 77, 53, 13, 10, 59, 46, 46, 49, - 33, 41, 28, 26, 30, 37, 32, 32, 34, 33, 33, 33, 45, 49, 55, 59, - 75, 63, 60, 21, 30, 33, 37, 36, 40, 32, 37, 36, 42, 33, 30, 48, - 77, 68, 81, 84, 79, 76, 81, 80, 79, 73, 69, 21, 71, 77, 79, 83, - 79, 79, 83, 91, 84, 79, 44, 36, 106, 116, 95, 97, 99, 111, 102, 102, - 108, 111, 102, 77, 71, 76, 85, 92, 95, 97, 107, 112, 75, 69, 24, 91, - 114, 124, 120, 103, 111, 112, 111, 99, 99, 97, 88, 85, 93, 100, 100, 99, - 100, 97, 100, 102, 102, 93, 93, 99, 96, 100, 106, 108, 104, 103, 102, 103, - 102, 92, 99, 24, 96, 65, 61, 57, 53, 52, 57, 49, 45, 44, 46, 45, - 48, 65, 48, 49, 51, 57, 53, 77, 81, 75, 76, 18, 51, 126, 123, 71, - 76, 111, 112, 75, 89, 107, 93, 22, 99, 139, 138, 111, 115, 132, 128, 108, - 111, 106, 61, 116, 116, 104, 93, 85, 85, 87, 87, 88, 92, 92, 33, 119, - 147, 132, 56, 60, 53, 59, 65, 57, 63, 29, 77, 59, 14, 12, 30, 22, - 49, 25, 36, 40, 55, 52, 59, 80, 87, 110, 103, 85, 112, 103, 107, 76, - 118, 111, 88, 4, 53, 65, 68, 65, 64, 61, 64, 64, 64, 63, 61, 61, - 0, 83, 165, 166, 163, 163, 163, 161, 158, 108, 134, 36, 92, 116, 89, 96, - 89, 89, 106, 106, 104, 104, 106, 104, 102, 73, 68, 59, 53, 55, 51, 49, - 45, 42, 40, 29, 48, 41, 49, 61, 51, 57, 71, 75, 92, 92, 80, 96, - 93, 104, 99, 118, 119, 116, 99, 119, 124, 111, 24, 68, 99, 119, 100, 110, - 112, 142, 151, 155, 127, 122, 106, 37, 114, 102, 102, 131, 111, 111, 108, 115, - 106, 107, 91, 32, 63, 85, 108, 48, 46, 46, 51, 48, 37, 36, 53, 4, - 28, 28, 32, 34, 37, 38, 40, 103, 124, 134, 79, 25, 106, 126, 136, 131, - 135, 135, 136, 136, 140, 134, 116, 30, 112, 183, 157, 151, 154, 0, 0, 0, - 2, 4, 0, 0, 5, 5, 1, 6, 5, 4, 4, 2, 8, 2, 2, 1, - 9, 6, 0, 12, 1, 1, 0, 6, 1, 0, 1, 0, 0, 0, 1, 2, - 4, 1, 6, 2, 2, 2, 8, 4, 4, 30, 37, 42, 60, 59, 67, 68, - 68, 76, 76, 71, 64, 67, 65, 64, 84, 64, 67, 37, 41, 37, 37, 30, - 30, 28, 20, 24, 18, 18, 13, 14, 13, 13, 12, 14, 14, 16, 14, 17, - 20, 21, 22, 25, 26, 29, 29, 32, 33, 37, 13, 9, 28, 29, 29, 28, - 30, 30, 32, 32, 28, 12, 26, 6, 20, 10, 16, 10, 16, 34, 53, 68, - 72, 59, 61, 75, 79, 88, 79, 72, 59, 53, 45, 46, 18, 37, 2, 16, - 20, 34, 36, 41, 51, 60, 69, 95, 87, 69, 60, 93, 96, 83, 92, 93, - 68, 53, 48, 38, 25, 12, 22, 18, 9, 13, 13, 12, 5, 8, 8, 5, - 4, 2, 4, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 10, 0, 0, 0, 18, - 0, 0, 0, 29, 0, 0, 6, 20, 26, 32, 32, 79, 107, 111, 118, 111, - 106, 79, 91, 110, 108, 96, 107, 103, 96, 81, 60, 56, 28, 46, 24, 2, - 1, 21, 18, 1, 0, 14, 4, 6, 1, 5, 6, 8, 1, 4, 2, 1, - 6, 17, 20, 1, 6, 4, 2, 33, 36, 2, 2, 20, 21, 24, 25, 32, - 26, 55, 20, 20, 30, 22, 20, 22, 30, 22, 20, 22, 30, 25, 24, 24, - 56, 26, 24, 25, 32, 37, 46, 42, 67, 22, 63, 85, 84, 65, 65, 79, - 79, 64, 67, 71, 65, 61, 46, 52, 57, 44, 48, 49, 53, 59, 53, 80, - 80, 77, 72, 81, 79, 60, 56, 72, 57, 45, 41, 72, 42, 60, 29, 52, - 73, 85, 85, 87, 99, 128, 110, 83, 89, 77, 73, 79, 115, 112, 115, 106, - 88, 73, 61, 57, 48, 40, 41, 44, 64, 49, 63, 44, 51, 65, 72, 48, - 49, 38, 73, 73, 77, 84, 81, 77, 71, 81, 80, 79, 76, 63, 114, 87, - 68, 80, 64, 68, 65, 67, 59, 59, 61, 79, 42, 65, 81, 92, 100, 102, - 106, 104, 103, 110, 100, 81, 36, 51, 158, 107, 104, 84, 57, 51, 46, 41, - 26, 29, 24, 17, 36, 29, 18, 16, 37, 36, 33, 17, 38, 40, 10, 8, - 28, 30, 26, 2, 18, 5, 18, 2, 10, 5, 0, 0, 48, 56, 64, 71, - 77, 83, 89, 96, 103, 102, 32, 97, 61, 65, 55, 56, 59, 55, 49, 44, - 48, 37, 37, 72, 88, 95, 116, 120, 124, 127, 124, 116, 114, 93, 30, 120, - 130, 128, 95, 119, 111, 100, 48, 33, 28, 16, 20, 25, 20, 18, 25, 20, - 14, 10, 14, 21, 8, 25, 65, 52, 63, 46, 45, 65, 96, 103, 114, 114, - 111, 96, 9, 97, 45, 46, 71, 55, 40, 36, 34, 46, 25, 20, 32, 52, - 80, 102, 99, 103, 118, 123, 120, 124, 115, 97, 5, 118, 166, 162, 158, 153, - 153, 95, 77, 41, 32, 21, 22, 38, 45, 49, 57, 89, 104, 110, 93, 104, - 114, 115, 29, 111, 173, 96, 89, 65, 107, 97, 87, 76, 64, 69, 57, 36, - 10, 5, 34, 75, 79, 64, 51, 49, 57, 59, 59, 36, 14, 24, 76, 79, - 81, 76, 87, 83, 84, 72, 79, 68, 80, 77, 87, 87, 93, 104, 99, 85, - 92, 81, 42, 38, 44, 72, 91, 108, 95, 80, 92, 89, 95, 83, 84, 92, - 84, 53, 49, 61, 55, 63, 61, 60, 69, 63, 32, 37, 34, 34, 89, 85, - 76, 67, 76, 76, 64, 64, 67, 55, 56, 63, 71, 83, 71, 73, 49, 42, - 29, 17, 28, 18, 10, 13, 20, 8, 6, 9, 25, 5, 4, 5, 34, 18, - 14, 22, 55, 63, 67, 73, 68, 73, 81, 75, 71, 79, 71, 61, 53, 67, - 84, 69, 73, 72, 75, 71, 77, 60, 49, 4, 37, 104, 107, 107, 111, 102, - 96, 89, 88, 97, 88, 55, 81, 95, 107, 96, 97, 92, 77, 88, 59, 51, - 26, 40, 83, 88, 97, 102, 100, 87, 93, 107, 107, 71, 68, 73, 120, 119, - 122, 122, 120, 116, 122, 119, 114, 76, 80, 110, 115, 119, 114, 100, 107, 119, - 103, 104, 103, 107, 91, 22, 51, 108, 115, 84, 96, 104, 114, 87, 100, 99, - 42, 40, 44, 118, 104, 108, 112, 112, 108, 119, 111, 80, 89, 75, 81, 93, - 112, 104, 108, 102, 89, 91, 95, 64, 36, 5, 38, 97, 111, 92, 87, 97, - 87, 85, 83, 64, 36, 0, 48, 103, 132, 99, 100, 99, 96, 110, 114, 111, - 65, 45, 57, 126, 131, 120, 124, 126, 131, 93, 114, 53, 60, 53, 108, 118, - 118, 102, 103, 96, 92, 112, 106, 91, 49, 56, 63, 100, 108, 100, 104, 71, - 72, 36, 33, 26, 26, 38, 40, 48, 52, 48, 53, 53, 53, 63, 67, 65, - 61, 61, 24, 79, 118, 124, 95, 115, 91, 91, 45, 55, 38, 25, 36, 53, - 80, 87, 84, 92, 97, 97, 93, 85, 72, 79, 107, 140, 153, 143, 139, 139, - 130, 130, 130, 131, 72, 71, 104, 139, 135, 142, 136, 132, 127, 134, 128, 97, - 75, 72, 100, 104, 110, 107, 93, 87, 89, 76, 45, 38, 28, 41, 37, 51, - 51, 46, 25, 28, 25, 51, 22, 24, 59, 53, 81, 97, 99, 116, 120, 126, - 120, 131, 118, 80, 77, 99, 123, 134, 138, 136, 140, 143, 142, 139, 148, 123, - 108, 13, 138, 115, 116, 104, 132, 131, 114, 107, 97, 123, 104, 99, 136, 153, - 139, 143, 148, 147, 139, 138, 132, 130, 57, 0, 29, 115, 159, 122, 119, 124, - 124, 120, 91, 136, 115, 48, 0, 116, 142, 140, 138, 131, 89, 38, 80, 73, - 80, 9, 53, 55, 81, 84, 88, 110, 124, 127, 106, 127, 114, 135, 114, 122, - 130, 128, 127, 138, 138, 148, 134, 119, 99, 33, 124, 139, 111, 127, 135, 108, - 107, 103, 120, 108, 73, 91, 80, 124, 131, 138, 134, 140, 144, 143, 146, 71, - 26, 85, 146, 144, 122, 124, 131, 120, 77, 36, 36, 25, 22, 8, 18, 71, - 75, 77, 87, 99, 107, 106, 115, 122, 102, 44, 115, 163, 167, 167, 167, 165, - 166, 165, 161, 123, 102, 5, 130, 175, 171, 166, 167, 171, 167, 166, 157, 115, - 93, 21, 130, 163, 161, 81, 73, 81, 76, 83, 87, 68, 108, 28, 165, 111, - 182, 190, 197, 88, 76, 67, 69, 63, 64, 51, 48, 12, 10, 77, 68, 57, - 46, 63, 61, 53, 49, 46, 63, 17, 91, 92, 95, 89, 84, 89, 89, 100, - 87, 93, 85, 77, 69, 81, 73, 80, 80, 87, 85, 84, 83, 81, 85, 41, - 110, 91, 77, 71, 80, 69, 88, 68, 76, 72, 46, 48, 40, 59, 72, 65, - 68, 55, 52, 53, 60, 68, 44, 40, 75, 84, 79, 84, 91, 77, 83, 80, - 81, 77, 73, 60, 72, 68, 67, 67, 59, 67, 55, 55, 60, 53, 57, 42, - 9, 28, 75, 81, 59, 69, 71, 83, 73, 68, 34, 16, 57, 83, 83, 89, - 77, 85, 87, 99, 89, 79, 85, 71, 38, 68, 89, 102, 96, 72, 84, 83, - 76, 79, 64, 53, 5, 80, 114, 92, 95, 97, 87, 99, 81, 85, 106, 85, - 57, 81, 111, 107, 96, 103, 99, 103, 77, 92, 57, 26, 84, 96, 104, 95, - 97, 93, 100, 93, 106, 102, 107, 102, 93, 84, 84, 84, 84, 85, 84, 84, - 88, 89, 97, 92, 75, 95, 99, 92, 85, 100, 103, 106, 106, 112, 110, 106, - 24, 119, 132, 119, 116, 119, 112, 103, 103, 100, 102, 52, 33, 89, 103, 107, - 106, 114, 112, 115, 115, 108, 99, 87, 69, 80, 112, 120, 110, 112, 111, 104, - 97, 96, 72, 38, 14, 110, 118, 119, 110, 115, 116, 112, 108, 107, 92, 40, - 2, 142, 146, 142, 140, 143, 142, 136, 130, 144, 139, 102, 46, 130, 146, 144, - 136, 136, 126, 134, 126, 122, 84, 60, 110, 132, 118, 114, 111, 128, 128, 122, - 124, 124, 126, 116, 56, 99, 119, 122, 119, 118, 114, 110, 102, 75, 53, 25, - 85, 106, 87, 100, 102, 97, 108, 99, 99, 93, 84, 69, 55, 20, 110, 127, - 118, 118, 111, 119, 128, 110, 122, 104, 85, 110, 84, 106, 112, 120, 111, 124, - 111, 119, 96, 79, 83, 128, 151, 124, 127, 128, 122, 112, 128, 124, 112, 118, - 93, 130, 128, 132, 128, 126, 126, 132, 128, 126, 116, 126, 116, 124, 126, 127, - 115, 126, 120, 122, 111, 103, 97, 92, 130, 124, 126, 128, 136, 142, 136, 142, - 150, 153, 79, 88, 102, 166, 170, 171, 170, 173, 171, 166, 169, 167, 118, 77, - 115, 146, 143, 143, 143, 136, 138, 131, 127, 124, 136, 95, 30, 108, 123, 115, - 104, 110, 111, 110, 130, 128, 103, 106, 108, 92, 120, 123, 128, 115, 124, 123, - 124, 119, 143, 69, 0, 161, 170, 169, 171, 166, 166, 165, 158, 163, 162, 136, - 85, 0, 119, 146, 155, 158, 157, 154, 147, 135, 126, 77, 20, 103, 142, 153, - 154, 153, 150, 153, 150, 142, 143, 81, 102, 142, 153, 148, 159, 158, 154, 147, - 139, 139, 124, 111, 32, 142, 144, 130, 114, 110, 114, 148, 138, 155, 147, 73, - 60, 127, 159, 165, 169, 165, 159, 162, 166, 155, 96, 26, 116, 157, 161, 166, - 166, 162, 162, 154, 135, 140, 114, 71, 71, 143, 177, 174, 170, 173, 173, 171, - 150, 171, 136, 120, 42, 150, 170, 166, 166, 166, 158, 148, 153, 159, 143, 114, - 8, 131, 178, 173, 170, 163, 163, 165, 161, 167, 155, 106, 17, 150, 151, 175, - 171, 167, 159, 161, 170, 158, 96, 122, 26, 173, 131, 187, 187, 190, 107, 104, - 88, 84, 68, 68, 14, 25, 10, 6, 55, 63, 40, 38, 45, 28, 40, 49, - 45, 18, 17, 95, 112, 123, 136, 163, 174, 189, 197, 205, 205, 213, 214, 221, - 212, 222, 222, 218, 202, 193, 147, 112, 107, 107, 75, 91, 89, 92, 88, 81, - 88, 91, 65, 41, 40, 40, 38, 41, 60, 80, 92, 68, 60, 72, 68, 72, - 67, 59, 29, 81, 89, 76, 77, 67, 71, 71, 69, 63, 72, 71, 63, 61, - 80, 81, 80, 69, 67, 59, 60, 67, 69, 51, 45, 12, 85, 81, 93, 92, - 77, 88, 87, 81, 83, 67, 17, 71, 107, 93, 72, 96, 87, 81, 80, 80, - 91, 85, 68, 45, 68, 92, 100, 83, 81, 88, 84, 91, 75, 64, 60, 4, - 85, 107, 104, 95, 83, 91, 85, 100, 85, 96, 92, 42, 75, 99, 99, 102, - 87, 88, 81, 80, 87, 63, 33, 89, 81, 89, 93, 85, 100, 99, 107, 108, - 96, 89, 73, 103, 87, 104, 97, 99, 99, 97, 91, 80, 79, 68, 65, 88, - 108, 102, 103, 108, 107, 103, 107, 107, 106, 106, 100, 22, 122, 131, 97, 96, - 97, 92, 93, 89, 99, 97, 52, 34, 87, 110, 110, 103, 100, 96, 102, 103, - 112, 100, 92, 52, 73, 108, 100, 104, 114, 112, 97, 88, 95, 77, 65, 22, - 108, 112, 111, 110, 110, 103, 103, 103, 96, 96, 53, 0, 123, 140, 142, 143, - 139, 140, 143, 135, 134, 138, 116, 56, 139, 136, 135, 122, 115, 118, 108, 115, - 115, 123, 107, 128, 116, 110, 114, 103, 112, 89, 93, 92, 97, 79, 77, 64, - 122, 144, 118, 120, 119, 124, 115, 110, 112, 67, 24, 95, 103, 92, 104, 97, - 91, 103, 97, 92, 93, 79, 73, 65, 26, 106, 139, 115, 118, 130, 118, 119, - 116, 106, 114, 68, 75, 138, 134, 132, 140, 136, 130, 126, 118, 106, 87, 80, - 140, 147, 120, 122, 123, 118, 112, 123, 134, 130, 136, 132, 140, 139, 148, 143, - 143, 143, 165, 143, 148, 142, 147, 132, 146, 146, 148, 143, 140, 139, 140, 140, - 126, 107, 76, 134, 138, 138, 140, 138, 135, 122, 135, 135, 127, 95, 69, 135, - 175, 169, 165, 163, 170, 166, 174, 162, 143, 134, 91, 118, 140, 146, 135, 135, - 139, 132, 131, 131, 139, 128, 91, 29, 99, 132, 118, 143, 114, 140, 122, 139, - 142, 134, 114, 97, 115, 144, 146, 157, 154, 151, 143, 157, 146, 138, 76, 18, - 155, 169, 163, 165, 166, 165, 162, 162, 157, 167, 140, 76, 0, 136, 154, 143, - 146, 143, 130, 144, 147, 131, 67, 29, 108, 142, 158, 155, 142, 139, 148, 134, - 134, 108, 88, 119, 163, 155, 159, 148, 135, 142, 146, 143, 136, 108, 99, 25, - 139, 143, 142, 119, 120, 138, 144, 142, 148, 142, 81, 95, 151, 166, 161, 158, - 161, 157, 157, 148, 158, 95, 29, 131, 161, 155, 155, 151, 146, 146, 143, 147, - 157, 139, 76, 60, 157, 169, 170, 177, 169, 147, 146, 165, 144, 150, 124, 46, - 155, 165, 157, 150, 154, 148, 155, 150, 154, 127, 106, 6, 135, 170, 169, 173, - 169, 165, 165, 173, 163, 157, 120, 16, 134, 153, 153, 175, 173, 174, 171, 173, - 166, 114, 118, 21, 174, 190, 187, 185, 187, 73, 52, 68, 60, 40, 22, 28, - 46, 10, 13, 44, 57, 44, 41, 28, 24, 26, 30, 38, 61, 76, 110, 204, - 216, 228, 230, 230, 232, 234, 234, 238, 241, 244, 242, 241, 238, 236, 236, 233, - 229, 222, 224, 189, 139, 122, 110, 140, 159, 191, 165, 135, 92, 67, 38, 40, - 40, 42, 41, 84, 96, 84, 81, 67, 80, 85, 87, 69, 80, 68, 73, 72, - 73, 52, 75, 69, 77, 69, 71, 63, 63, 64, 79, 97, 108, 91, 95, 91, - 93, 89, 75, 59, 51, 46, 12, 93, 85, 91, 88, 89, 77, 77, 71, 69, - 64, 26, 77, 85, 96, 84, 80, 87, 75, 81, 91, 92, 77, 63, 37, 63, - 95, 107, 87, 80, 87, 91, 84, 77, 61, 48, 5, 73, 99, 97, 95, 92, - 89, 87, 69, 104, 104, 83, 49, 80, 100, 97, 89, 87, 85, 75, 85, 89, - 67, 46, 55, 84, 87, 95, 104, 111, 91, 92, 96, 83, 85, 65, 93, 104, - 85, 102, 97, 100, 84, 92, 92, 91, 63, 60, 96, 104, 99, 102, 95, 100, - 102, 79, 102, 103, 65, 68, 32, 79, 134, 99, 92, 99, 81, 89, 92, 97, - 95, 56, 32, 87, 104, 106, 92, 95, 96, 95, 97, 111, 99, 85, 49, 79, - 102, 96, 85, 115, 119, 97, 89, 100, 65, 65, 21, 83, 120, 108, 107, 110, - 99, 112, 111, 95, 88, 45, 6, 79, 139, 132, 123, 119, 120, 126, 128, 119, - 116, 122, 118, 123, 136, 138, 131, 120, 132, 115, 123, 104, 111, 100, 111, 102, - 112, 111, 107, 104, 110, 111, 110, 104, 108, 104, 107, 112, 123, 132, 103, 110, - 111, 136, 112, 107, 61, 21, 84, 96, 92, 99, 104, 106, 100, 100, 96, 88, - 79, 67, 59, 22, 103, 123, 112, 122, 130, 130, 130, 126, 116, 114, 61, 120, - 147, 142, 134, 126, 126, 123, 118, 119, 95, 87, 88, 123, 140, 112, 124, 120, - 116, 122, 150, 212, 214, 208, 218, 228, 230, 220, 226, 236, 238, 236, 233, 236, - 248, 233, 234, 232, 248, 226, 216, 220, 249, 226, 179, 132, 107, 81, 131, 158, - 169, 166, 162, 163, 153, 150, 146, 131, 96, 87, 150, 170, 165, 163, 169, 169, - 177, 173, 142, 158, 128, 100, 103, 143, 139, 135, 131, 136, 134, 134, 134, 139, - 126, 77, 21, 106, 148, 144, 153, 127, 122, 139, 136, 120, 126, 114, 65, 130, - 143, 144, 148, 148, 147, 128, 148, 148, 140, 65, 20, 96, 166, 163, 159, 157, - 155, 153, 154, 155, 163, 139, 75, 0, 131, 128, 135, 122, 148, 136, 132, 134, - 142, 91, 33, 118, 143, 147, 148, 144, 143, 142, 126, 128, 110, 68, 116, 162, - 155, 147, 138, 148, 139, 138, 127, 118, 115, 100, 28, 130, 143, 142, 144, 151, - 154, 140, 144, 143, 138, 67, 69, 159, 163, 163, 151, 151, 158, 161, 159, 159, - 93, 32, 132, 154, 153, 151, 147, 144, 142, 142, 142, 150, 138, 81, 57, 150, - 167, 170, 179, 169, 147, 148, 161, 140, 132, 126, 59, 147, 169, 155, 153, 144, - 148, 154, 153, 155, 126, 103, 6, 138, 171, 170, 161, 163, 169, 167, 170, 157, - 126, 116, 13, 136, 124, 147, 173, 166, 170, 166, 159, 161, 150, 127, 24, 171, - 143, 179, 171, 169, 24, 25, 36, 25, 36, 14, 46, 37, 10, 14, 49, 57, - 48, 26, 21, 22, 24, 71, 89, 150, 195, 218, 234, 242, 240, 241, 238, 238, - 234, 238, 244, 245, 244, 241, 240, 238, 234, 228, 232, 230, 230, 224, 224, 217, - 224, 210, 202, 212, 206, 189, 122, 92, 65, 37, 38, 46, 53, 57, 114, 186, - 195, 189, 191, 199, 205, 206, 204, 199, 198, 195, 195, 130, 103, 93, 89, 91, - 79, 76, 87, 88, 132, 171, 201, 206, 199, 201, 194, 132, 92, 76, 42, 52, - 37, 13, 60, 84, 77, 73, 72, 71, 63, 73, 77, 65, 29, 52, 84, 96, - 77, 81, 80, 76, 77, 81, 89, 73, 64, 36, 71, 84, 100, 89, 77, 84, - 88, 83, 77, 60, 51, 6, 65, 103, 107, 102, 92, 102, 76, 91, 95, 93, - 83, 40, 80, 91, 100, 81, 81, 91, 80, 96, 83, 65, 44, 49, 99, 104, - 83, 88, 89, 100, 88, 92, 88, 80, 59, 100, 103, 93, 92, 89, 87, 91, - 110, 100, 89, 81, 57, 100, 103, 108, 91, 100, 100, 96, 100, 92, 100, 103, - 95, 34, 79, 131, 103, 93, 88, 76, 81, 80, 97, 96, 56, 28, 87, 103, - 97, 87, 87, 87, 88, 92, 104, 92, 79, 52, 69, 97, 93, 85, 104, 91, - 84, 89, 96, 68, 37, 8, 83, 123, 100, 99, 107, 111, 106, 100, 99, 85, - 45, 4, 124, 131, 126, 123, 130, 127, 122, 124, 154, 194, 205, 210, 218, 222, - 229, 232, 236, 237, 250, 250, 249, 242, 244, 229, 238, 242, 240, 237, 233, 233, - 230, 230, 210, 212, 195, 214, 206, 234, 199, 191, 186, 186, 206, 161, 116, 65, - 28, 91, 84, 99, 104, 97, 96, 104, 85, 89, 63, 75, 57, 51, 16, 102, - 131, 118, 123, 132, 132, 131, 118, 104, 116, 48, 127, 146, 138, 123, 123, 128, - 131, 126, 128, 102, 87, 60, 119, 139, 110, 115, 115, 116, 115, 154, 209, 213, - 212, 221, 222, 226, 225, 222, 228, 230, 232, 232, 233, 232, 230, 230, 229, 222, - 224, 220, 220, 220, 213, 165, 122, 97, 33, 124, 150, 155, 157, 157, 157, 166, - 165, 140, 136, 99, 96, 124, 170, 163, 178, 174, 158, 157, 134, 142, 143, 134, - 96, 93, 146, 142, 131, 136, 136, 135, 134, 131, 124, 123, 99, 10, 110, 150, - 126, 146, 122, 132, 131, 153, 116, 115, 112, 75, 111, 146, 148, 153, 155, 154, - 153, 150, 132, 134, 65, 1, 99, 167, 157, 153, 148, 153, 162, 161, 163, 166, - 146, 73, 1, 119, 139, 143, 126, 158, 132, 134, 138, 116, 84, 20, 111, 154, - 153, 144, 135, 134, 143, 130, 130, 95, 72, 110, 163, 150, 151, 150, 144, 142, - 132, 139, 143, 111, 99, 36, 128, 140, 147, 148, 142, 143, 144, 148, 138, 140, - 71, 76, 155, 157, 154, 153, 158, 167, 162, 158, 161, 99, 42, 124, 159, 154, - 150, 147, 143, 143, 131, 136, 139, 126, 77, 8, 154, 167, 174, 178, 148, 150, - 151, 143, 146, 136, 131, 64, 140, 169, 134, 161, 131, 155, 155, 151, 157, 116, - 100, 8, 128, 171, 170, 173, 167, 169, 166, 170, 159, 126, 104, 12, 135, 146, - 146, 136, 144, 144, 143, 139, 157, 122, 131, 32, 174, 140, 174, 181, 169, 17, - 16, 18, 28, 18, 14, 45, 33, 10, 16, 67, 51, 28, 24, 32, 51, 75, - 171, 233, 241, 242, 245, 240, 238, 238, 237, 216, 185, 171, 175, 178, 169, 153, - 139, 132, 127, 116, 111, 118, 123, 136, 187, 208, 221, 220, 214, 210, 197, 199, - 183, 131, 91, 56, 34, 40, 34, 55, 108, 142, 208, 205, 218, 206, 218, 221, - 224, 221, 232, 228, 232, 229, 228, 224, 230, 228, 225, 218, 208, 217, 220, 213, - 221, 217, 202, 198, 189, 191, 132, 91, 69, 38, 51, 40, 16, 60, 84, 65, - 64, 93, 77, 79, 77, 68, 63, 30, 30, 80, 88, 87, 84, 81, 89, 89, - 92, 91, 75, 64, 34, 63, 106, 110, 80, 85, 85, 89, 81, 76, 60, 48, - 9, 81, 104, 96, 92, 85, 100, 83, 87, 96, 83, 87, 40, 84, 88, 95, - 87, 83, 93, 87, 91, 84, 65, 44, 38, 97, 87, 84, 88, 97, 87, 97, - 92, 80, 73, 55, 89, 103, 88, 84, 85, 96, 95, 91, 92, 85, 63, 57, - 100, 107, 116, 104, 102, 85, 106, 100, 88, 102, 100, 96, 37, 81, 127, 106, - 89, 87, 75, 77, 89, 100, 95, 57, 28, 93, 97, 93, 88, 89, 84, 84, - 92, 100, 89, 84, 52, 77, 93, 91, 80, 77, 114, 110, 88, 92, 71, 37, - 17, 92, 123, 107, 107, 107, 100, 99, 85, 99, 104, 42, 4, 139, 139, 126, - 124, 131, 119, 131, 197, 202, 214, 213, 213, 220, 232, 232, 233, 237, 241, 249, - 250, 250, 248, 246, 246, 232, 242, 245, 237, 232, 236, 240, 236, 228, 233, 225, - 221, 214, 224, 216, 209, 195, 220, 206, 173, 110, 64, 28, 88, 81, 97, 100, - 95, 100, 93, 92, 89, 65, 72, 55, 46, 13, 110, 128, 118, 127, 124, 132, - 132, 124, 104, 107, 42, 126, 140, 124, 132, 134, 134, 139, 135, 132, 118, 88, - 88, 118, 144, 115, 120, 124, 116, 112, 131, 154, 201, 210, 216, 217, 213, 220, - 212, 216, 221, 224, 226, 230, 230, 230, 225, 222, 225, 220, 213, 210, 214, 193, - 132, 118, 67, 45, 132, 151, 142, 154, 154, 158, 158, 163, 142, 142, 100, 92, - 127, 165, 157, 153, 134, 135, 138, 128, 135, 139, 147, 114, 91, 143, 142, 138, - 130, 134, 136, 131, 130, 131, 138, 96, 24, 131, 126, 144, 124, 135, 140, 144, - 132, 132, 124, 107, 73, 112, 153, 142, 153, 147, 144, 142, 140, 146, 143, 60, - 2, 162, 161, 155, 158, 161, 159, 159, 166, 163, 162, 144, 104, 2, 120, 153, - 136, 161, 142, 122, 136, 127, 122, 77, 14, 110, 153, 153, 150, 140, 147, 146, - 136, 123, 103, 69, 118, 163, 143, 143, 157, 146, 142, 142, 142, 128, 120, 107, - 42, 136, 153, 151, 155, 158, 150, 143, 146, 140, 151, 77, 88, 150, 157, 147, - 159, 166, 165, 159, 155, 153, 107, 38, 136, 158, 157, 150, 146, 144, 147, 130, - 140, 144, 144, 81, 13, 151, 166, 154, 151, 148, 159, 162, 159, 159, 140, 131, - 71, 126, 170, 159, 170, 131, 142, 154, 157, 157, 134, 110, 12, 138, 173, 170, - 167, 166, 161, 163, 166, 166, 147, 116, 9, 150, 140, 138, 134, 130, 132, 132, - 132, 153, 118, 123, 26, 173, 143, 173, 169, 161, 56, 22, 16, 16, 14, 13, - 49, 21, 13, 9, 68, 55, 28, 37, 64, 110, 221, 245, 242, 240, 242, 242, - 237, 226, 194, 159, 124, 112, 107, 110, 108, 108, 107, 106, 103, 106, 103, 103, - 102, 102, 99, 102, 115, 124, 151, 185, 190, 197, 185, 136, 108, 71, 32, 33, - 36, 41, 57, 122, 150, 230, 237, 202, 221, 214, 228, 229, 234, 232, 228, 226, - 234, 238, 236, 230, 230, 224, 221, 226, 221, 217, 216, 214, 220, 210, 202, 205, - 195, 114, 75, 59, 40, 48, 40, 18, 84, 81, 77, 73, 84, 71, 79, 75, - 81, 81, 61, 22, 76, 87, 99, 99, 99, 92, 92, 85, 85, 71, 63, 36, - 60, 93, 99, 89, 85, 88, 95, 84, 77, 77, 51, 8, 73, 102, 96, 102, - 93, 100, 97, 100, 99, 72, 69, 30, 80, 85, 102, 80, 103, 88, 88, 81, - 85, 76, 65, 38, 91, 88, 87, 84, 84, 88, 89, 89, 79, 63, 52, 84, - 95, 83, 81, 89, 97, 88, 88, 85, 80, 53, 53, 91, 100, 107, 107, 97, - 85, 100, 91, 100, 83, 102, 91, 40, 59, 84, 127, 104, 85, 81, 76, 85, - 102, 89, 57, 33, 80, 92, 91, 79, 81, 79, 77, 100, 103, 99, 79, 48, - 65, 85, 85, 77, 75, 111, 87, 88, 89, 73, 53, 20, 96, 108, 100, 111, - 107, 110, 107, 97, 102, 89, 48, 1, 111, 136, 124, 124, 126, 119, 186, 201, - 206, 212, 216, 221, 220, 226, 230, 236, 234, 238, 246, 249, 248, 249, 250, 248, - 244, 236, 245, 241, 240, 241, 230, 230, 232, 236, 228, 226, 217, 213, 210, 206, - 202, 208, 163, 142, 76, 65, 28, 88, 88, 92, 104, 99, 95, 89, 84, 88, - 67, 68, 63, 55, 17, 81, 136, 119, 128, 122, 124, 130, 124, 119, 99, 51, - 123, 132, 138, 143, 144, 155, 150, 147, 140, 136, 116, 103, 127, 148, 122, 120, - 104, 106, 119, 110, 119, 126, 132, 131, 130, 122, 119, 115, 119, 116, 116, 116, - 120, 126, 126, 123, 123, 126, 120, 119, 118, 116, 118, 104, 103, 65, 68, 131, - 148, 139, 140, 157, 153, 154, 154, 143, 136, 104, 99, 122, 163, 167, 148, 151, - 167, 154, 155, 161, 120, 131, 134, 80, 131, 148, 140, 131, 135, 131, 134, 139, - 131, 134, 87, 22, 103, 136, 130, 127, 128, 130, 126, 131, 138, 124, 104, 72, - 104, 151, 127, 157, 161, 150, 150, 146, 148, 127, 76, 16, 159, 166, 159, 163, - 158, 161, 159, 166, 162, 161, 144, 80, 5, 131, 153, 144, 146, 130, 131, 118, - 140, 99, 71, 32, 114, 136, 158, 139, 144, 143, 136, 139, 126, 115, 73, 122, - 161, 150, 147, 148, 147, 136, 138, 154, 131, 108, 107, 30, 140, 147, 151, 136, - 147, 147, 140, 144, 136, 140, 69, 124, 153, 143, 151, 162, 161, 157, 161, 159, - 154, 110, 53, 104, 134, 155, 153, 150, 144, 150, 147, 134, 136, 144, 79, 48, - 143, 167, 154, 157, 157, 161, 159, 159, 159, 140, 135, 75, 134, 170, 157, 139, - 132, 136, 153, 157, 157, 132, 103, 9, 143, 170, 171, 170, 165, 162, 169, 170, - 166, 146, 122, 9, 126, 131, 130, 127, 118, 116, 119, 130, 139, 126, 116, 18, - 158, 181, 169, 165, 173, 95, 34, 29, 28, 29, 36, 40, 33, 12, 21, 49, - 26, 38, 69, 155, 232, 246, 241, 241, 233, 225, 205, 178, 132, 115, 108, 110, - 110, 110, 110, 108, 110, 115, 107, 91, 73, 64, 71, 81, 96, 130, 112, 100, - 99, 95, 104, 106, 103, 103, 99, 92, 49, 33, 33, 36, 32, 55, 104, 127, - 182, 191, 194, 162, 124, 116, 122, 128, 127, 124, 128, 140, 169, 199, 208, 214, - 220, 224, 222, 213, 205, 204, 210, 208, 202, 187, 139, 114, 88, 72, 37, 34, - 45, 34, 18, 56, 79, 77, 73, 73, 85, 84, 75, 76, 84, 48, 25, 64, - 87, 83, 85, 91, 83, 85, 87, 84, 67, 64, 30, 57, 85, 102, 104, 106, - 99, 99, 84, 79, 65, 46, 6, 67, 96, 95, 96, 88, 100, 92, 93, 88, - 84, 52, 26, 80, 88, 97, 79, 89, 89, 92, 84, 80, 84, 59, 38, 61, - 95, 88, 95, 88, 88, 88, 84, 77, 59, 45, 75, 103, 88, 84, 89, 92, - 92, 89, 89, 83, 53, 48, 95, 95, 99, 95, 96, 96, 102, 99, 100, 80, - 68, 81, 46, 52, 85, 104, 116, 95, 81, 73, 89, 93, 92, 63, 28, 77, - 97, 87, 87, 77, 79, 95, 122, 93, 91, 75, 34, 76, 91, 73, 71, 77, - 76, 83, 83, 81, 65, 55, 22, 68, 122, 112, 114, 106, 95, 97, 108, 97, - 95, 42, 8, 83, 134, 124, 124, 132, 118, 116, 158, 198, 206, 202, 183, 139, - 128, 126, 123, 127, 123, 115, 110, 114, 115, 116, 118, 116, 112, 110, 112, 115, - 114, 112, 107, 108, 116, 120, 118, 115, 108, 104, 108, 88, 83, 81, 79, 69, - 34, 24, 85, 95, 97, 93, 96, 93, 87, 88, 87, 61, 63, 57, 46, 14, - 100, 118, 122, 118, 124, 128, 116, 122, 112, 88, 53, 126, 136, 153, 163, 190, - 197, 206, 191, 186, 169, 147, 136, 123, 146, 114, 124, 111, 99, 104, 108, 122, - 110, 100, 103, 107, 107, 106, 106, 106, 104, 106, 106, 106, 104, 106, 110, 108, - 107, 107, 111, 108, 106, 110, 111, 46, 44, 60, 131, 144, 140, 148, 146, 147, - 150, 159, 140, 135, 116, 83, 95, 146, 159, 144, 131, 151, 166, 161, 136, 135, - 135, 123, 91, 114, 139, 142, 135, 136, 134, 132, 131, 131, 128, 68, 18, 102, - 143, 136, 120, 135, 130, 126, 131, 138, 120, 104, 52, 134, 147, 143, 136, 158, - 161, 148, 158, 146, 124, 63, 14, 96, 159, 153, 162, 163, 155, 161, 162, 162, - 161, 140, 76, 5, 122, 130, 154, 146, 118, 110, 126, 96, 93, 80, 34, 108, - 136, 153, 146, 151, 142, 138, 131, 134, 99, 48, 144, 162, 153, 157, 157, 140, - 142, 146, 142, 126, 110, 102, 40, 136, 148, 134, 151, 144, 140, 142, 144, 132, - 122, 59, 93, 161, 165, 167, 151, 140, 159, 161, 170, 155, 99, 56, 87, 134, - 158, 151, 150, 148, 148, 130, 128, 139, 139, 88, 40, 140, 166, 158, 159, 162, - 150, 150, 159, 158, 143, 138, 80, 104, 166, 161, 128, 130, 140, 154, 157, 157, - 134, 103, 12, 134, 171, 169, 167, 163, 167, 166, 166, 165, 136, 124, 8, 134, - 131, 124, 120, 118, 116, 112, 127, 147, 135, 115, 24, 166, 183, 169, 158, 173, - 71, 73, 53, 61, 45, 56, 28, 26, 12, 24, 25, 36, 85, 198, 240, 244, - 241, 242, 242, 199, 153, 119, 110, 110, 112, 114, 118, 108, 124, 120, 104, 72, - 38, 20, 20, 17, 24, 17, 21, 25, 49, 73, 122, 118, 99, 102, 95, 95, - 91, 102, 87, 29, 28, 29, 33, 33, 56, 76, 100, 97, 115, 102, 107, 91, - 85, 84, 95, 88, 92, 88, 100, 95, 97, 106, 106, 110, 104, 106, 106, 102, - 99, 102, 107, 108, 95, 92, 83, 69, 33, 36, 41, 42, 34, 21, 46, 75, - 83, 75, 88, 77, 83, 83, 80, 76, 51, 28, 53, 83, 81, 81, 76, 80, - 85, 88, 80, 61, 60, 24, 61, 72, 87, 91, 88, 84, 81, 85, 71, 69, - 49, 8, 67, 89, 102, 96, 97, 92, 93, 95, 85, 81, 65, 26, 73, 83, - 97, 97, 84, 89, 79, 87, 65, 63, 53, 44, 53, 52, 69, 67, 63, 65, - 68, 69, 76, 72, 45, 83, 100, 84, 79, 89, 89, 88, 89, 88, 85, 61, - 42, 93, 92, 92, 88, 85, 91, 88, 93, 92, 93, 92, 91, 69, 52, 89, - 104, 96, 77, 71, 73, 92, 88, 89, 64, 25, 87, 103, 92, 85, 76, 75, - 95, 111, 93, 87, 75, 37, 67, 84, 73, 71, 64, 67, 68, 75, 67, 63, - 44, 22, 65, 119, 96, 69, 88, 103, 104, 87, 93, 93, 40, 6, 120, 126, - 123, 120, 123, 120, 124, 124, 124, 123, 120, 114, 114, 111, 111, 110, 110, 106, - 104, 102, 102, 102, 103, 103, 102, 97, 97, 96, 96, 95, 96, 88, 93, 92, - 92, 92, 92, 87, 87, 87, 83, 76, 60, 57, 33, 24, 32, 83, 80, 93, - 89, 77, 63, 67, 56, 45, 60, 57, 61, 48, 8, 103, 138, 124, 122, 120, - 120, 123, 116, 110, 57, 83, 136, 150, 194, 213, 221, 221, 212, 208, 213, 213, - 209, 186, 163, 144, 119, 95, 96, 102, 87, 97, 88, 100, 100, 97, 110, 118, - 112, 112, 112, 111, 110, 110, 114, 115, 115, 115, 114, 112, 115, 115, 114, 118, - 96, 41, 51, 46, 21, 123, 134, 147, 134, 144, 130, 126, 122, 146, 126, 112, - 85, 106, 126, 136, 130, 153, 138, 139, 126, 123, 120, 119, 132, 93, 103, 124, - 146, 144, 142, 134, 143, 144, 131, 127, 103, 13, 111, 146, 146, 140, 134, 140, - 131, 136, 146, 103, 104, 53, 99, 146, 146, 150, 143, 120, 126, 135, 142, 136, - 61, 6, 100, 163, 155, 158, 157, 157, 161, 163, 159, 157, 154, 71, 6, 114, - 143, 135, 112, 110, 99, 93, 114, 97, 79, 33, 111, 147, 151, 155, 138, 136, - 139, 135, 138, 107, 57, 104, 159, 148, 147, 142, 140, 144, 139, 142, 140, 107, - 102, 44, 140, 150, 144, 140, 142, 140, 139, 140, 136, 81, 57, 131, 143, 169, - 154, 148, 144, 150, 161, 153, 159, 93, 75, 80, 140, 147, 146, 157, 148, 144, - 134, 130, 130, 131, 76, 14, 143, 165, 159, 151, 157, 157, 150, 147, 150, 150, - 135, 107, 104, 159, 153, 150, 136, 144, 153, 154, 154, 111, 100, 13, 139, 171, - 166, 165, 161, 162, 162, 166, 163, 155, 118, 8, 127, 123, 115, 124, 112, 118, - 114, 127, 143, 126, 118, 40, 170, 153, 173, 174, 189, 12, 12, 14, 13, 12, - 13, 13, 10, 10, 34, 32, 84, 216, 245, 242, 244, 241, 245, 206, 139, 112, - 114, 115, 120, 122, 118, 122, 127, 119, 81, 37, 16, 13, 12, 13, 14, 18, - 18, 18, 21, 18, 37, 69, 108, 155, 118, 100, 99, 97, 102, 83, 29, 25, - 25, 30, 32, 44, 75, 73, 73, 68, 71, 87, 89, 91, 91, 92, 93, 95, - 92, 93, 93, 95, 96, 95, 95, 95, 92, 92, 91, 87, 87, 91, 88, 84, - 81, 56, 29, 32, 28, 41, 41, 37, 21, 30, 72, 73, 83, 71, 48, 59, - 52, 42, 40, 42, 49, 32, 46, 63, 75, 73, 72, 72, 69, 75, 61, 60, - 22, 61, 67, 88, 92, 89, 85, 81, 69, 67, 64, 45, 12, 69, 73, 75, - 75, 75, 75, 75, 76, 79, 67, 61, 26, 69, 79, 92, 83, 63, 75, 72, - 63, 63, 71, 64, 60, 64, 76, 60, 80, 72, 75, 65, 75, 75, 51, 45, - 68, 81, 91, 76, 81, 84, 85, 79, 84, 80, 60, 41, 95, 92, 92, 83, - 87, 85, 87, 81, 84, 80, 88, 77, 80, 52, 64, 71, 72, 72, 73, 80, - 81, 87, 87, 65, 22, 91, 85, 93, 83, 76, 75, 72, 77, 83, 81, 67, - 51, 64, 77, 63, 56, 60, 60, 61, 61, 63, 61, 32, 24, 49, 93, 100, - 75, 88, 99, 96, 92, 97, 104, 37, 2, 112, 130, 124, 122, 118, 118, 120, - 115, 112, 103, 106, 102, 88, 96, 81, 87, 93, 84, 118, 115, 112, 115, 114, - 114, 114, 112, 111, 110, 106, 110, 107, 103, 100, 106, 102, 102, 106, 103, 81, - 49, 32, 28, 24, 24, 21, 16, 36, 32, 44, 46, 41, 40, 40, 41, 40, - 44, 40, 48, 45, 41, 8, 73, 126, 128, 128, 126, 132, 126, 114, 107, 49, - 95, 142, 183, 222, 222, 214, 225, 213, 212, 221, 217, 205, 199, 175, 118, 103, - 112, 102, 110, 107, 106, 93, 104, 114, 68, 80, 77, 116, 170, 114, 124, 128, - 126, 136, 132, 134, 138, 138, 138, 138, 135, 127, 104, 75, 37, 59, 48, 29, - 95, 127, 134, 136, 135, 139, 135, 140, 136, 132, 130, 126, 134, 134, 106, 106, - 114, 107, 106, 108, 122, 123, 108, 99, 122, 120, 120, 124, 119, 120, 120, 102, - 116, 115, 116, 68, 20, 107, 130, 131, 135, 136, 131, 136, 138, 127, 120, 99, - 49, 146, 157, 144, 143, 119, 142, 140, 130, 132, 132, 59, 8, 148, 159, 154, - 155, 151, 158, 151, 155, 151, 157, 134, 106, 6, 126, 146, 110, 123, 95, 104, - 97, 103, 96, 72, 16, 111, 142, 144, 143, 127, 132, 138, 140, 119, 95, 55, - 102, 139, 146, 139, 139, 144, 144, 147, 146, 139, 110, 116, 53, 151, 148, 134, - 142, 138, 136, 122, 136, 122, 80, 60, 122, 118, 134, 148, 146, 146, 130, 143, - 135, 134, 104, 79, 60, 115, 136, 138, 119, 127, 130, 132, 131, 130, 135, 91, - 18, 144, 147, 151, 144, 147, 142, 146, 139, 144, 136, 140, 135, 132, 103, 107, - 112, 142, 143, 119, 147, 151, 142, 104, 22, 139, 170, 165, 161, 154, 151, 147, - 151, 153, 140, 126, 9, 153, 120, 114, 116, 114, 127, 128, 132, 126, 119, 108, - 26, 166, 175, 161, 159, 163, 10, 4, 13, 13, 9, 5, 12, 24, 63, 32, - 63, 190, 242, 240, 241, 241, 245, 199, 143, 114, 122, 124, 126, 120, 111, 126, - 132, 124, 81, 22, 10, 9, 9, 12, 18, 18, 22, 21, 24, 18, 20, 24, - 46, 79, 144, 158, 122, 120, 120, 104, 85, 26, 24, 21, 29, 33, 26, 59, - 65, 67, 68, 72, 80, 88, 92, 93, 97, 97, 99, 100, 103, 104, 100, 99, - 99, 97, 97, 100, 93, 95, 92, 89, 88, 93, 76, 34, 28, 28, 25, 20, - 22, 37, 36, 33, 25, 26, 33, 41, 46, 32, 26, 26, 22, 24, 20, 20, - 22, 33, 32, 44, 45, 51, 53, 59, 60, 61, 52, 24, 52, 60, 77, 79, - 75, 68, 53, 29, 33, 28, 17, 12, 41, 44, 44, 45, 48, 48, 46, 51, - 52, 51, 37, 32, 49, 52, 59, 36, 33, 33, 36, 25, 14, 25, 21, 16, - 14, 12, 14, 13, 14, 20, 21, 22, 24, 26, 33, 22, 24, 24, 24, 25, - 42, 42, 29, 36, 41, 68, 40, 71, 84, 73, 69, 69, 69, 68, 69, 69, - 69, 71, 69, 67, 68, 72, 77, 77, 79, 81, 81, 83, 83, 84, 65, 28, - 81, 84, 76, 72, 67, 72, 67, 60, 75, 73, 53, 25, 57, 48, 34, 25, - 22, 21, 20, 21, 21, 16, 16, 25, 30, 29, 36, 30, 29, 30, 30, 42, - 42, 56, 40, 0, 18, 68, 76, 73, 75, 79, 85, 83, 85, 83, 83, 49, - 80, 111, 120, 131, 134, 131, 128, 130, 124, 130, 128, 130, 130, 128, 127, 127, - 124, 123, 120, 118, 118, 112, 119, 111, 89, 63, 28, 21, 21, 18, 12, 13, - 12, 10, 38, 40, 36, 42, 41, 38, 30, 36, 36, 36, 32, 41, 34, 41, - 12, 48, 110, 114, 107, 118, 120, 102, 81, 104, 40, 103, 155, 210, 225, 224, - 220, 224, 230, 209, 185, 155, 148, 134, 116, 103, 102, 80, 67, 87, 89, 88, - 87, 91, 83, 67, 84, 75, 119, 179, 155, 115, 114, 139, 139, 140, 142, 144, - 148, 147, 146, 140, 128, 93, 40, 33, 29, 69, 55, 60, 107, 110, 100, 110, - 114, 108, 108, 114, 114, 115, 111, 112, 120, 124, 123, 126, 124, 126, 126, 122, - 128, 127, 122, 111, 119, 122, 118, 102, 128, 119, 106, 88, 116, 114, 63, 18, - 56, 122, 126, 92, 102, 128, 130, 111, 111, 118, 91, 72, 136, 165, 122, 111, - 126, 124, 99, 103, 114, 99, 87, 16, 127, 163, 159, 159, 151, 159, 142, 146, - 157, 151, 107, 75, 9, 124, 144, 102, 107, 92, 89, 93, 89, 87, 44, 33, - 110, 79, 72, 75, 79, 72, 72, 73, 68, 59, 59, 77, 85, 87, 85, 85, - 99, 116, 131, 135, 135, 102, 96, 36, 148, 138, 132, 126, 128, 93, 85, 88, - 83, 81, 64, 84, 59, 76, 69, 83, 102, 107, 115, 107, 108, 110, 93, 55, - 97, 112, 115, 112, 107, 106, 122, 120, 114, 110, 87, 37, 100, 107, 95, 97, - 108, 110, 103, 111, 112, 110, 136, 131, 123, 138, 138, 139, 143, 143, 139, 143, - 139, 135, 97, 14, 138, 154, 153, 151, 151, 148, 151, 151, 151, 118, 127, 6, - 124, 107, 103, 110, 104, 108, 106, 91, 114, 122, 88, 24, 68, 100, 112, 111, - 108, 77, 71, 61, 57, 49, 57, 49, 56, 29, 36, 136, 238, 241, 240, 240, - 241, 195, 140, 116, 120, 130, 122, 114, 108, 131, 136, 131, 93, 28, 9, 9, - 8, 10, 18, 20, 21, 21, 22, 17, 21, 12, 20, 40, 67, 122, 169, 142, - 122, 120, 106, 91, 26, 24, 22, 29, 30, 25, 37, 40, 44, 45, 46, 52, - 63, 107, 175, 119, 97, 100, 106, 104, 107, 100, 99, 103, 104, 111, 111, 111, - 104, 100, 104, 100, 69, 26, 22, 21, 17, 18, 21, 18, 21, 22, 22, 25, - 21, 21, 22, 20, 40, 44, 46, 49, 55, 56, 51, 21, 71, 71, 48, 42, - 42, 44, 38, 36, 41, 52, 20, 45, 30, 25, 22, 21, 22, 16, 14, 16, - 14, 16, 9, 13, 12, 9, 9, 12, 12, 13, 13, 14, 17, 17, 36, 14, - 25, 46, 51, 57, 49, 60, 68, 93, 76, 85, 76, 97, 104, 96, 106, 106, - 99, 92, 87, 72, 38, 33, 79, 115, 118, 89, 85, 73, 60, 55, 49, 18, - 16, 12, 12, 12, 12, 12, 10, 13, 13, 13, 14, 16, 18, 20, 22, 21, - 25, 29, 33, 34, 40, 44, 65, 69, 83, 67, 30, 76, 64, 52, 40, 38, - 36, 33, 34, 36, 32, 30, 24, 20, 37, 63, 61, 68, 95, 104, 102, 111, - 100, 63, 20, 73, 115, 115, 88, 68, 69, 69, 57, 56, 22, 16, 2, 9, - 9, 30, 18, 18, 18, 34, 28, 29, 29, 41, 60, 89, 124, 179, 175, 124, - 131, 144, 139, 136, 139, 139, 139, 136, 135, 135, 134, 132, 131, 130, 123, 126, - 114, 118, 107, 56, 24, 21, 16, 16, 17, 20, 24, 26, 48, 41, 46, 73, - 83, 92, 96, 100, 92, 89, 75, 71, 33, 32, 21, 10, 41, 41, 44, 59, - 63, 102, 104, 97, 97, 32, 112, 167, 214, 238, 224, 228, 220, 170, 143, 119, - 119, 115, 108, 107, 103, 60, 72, 64, 69, 68, 60, 56, 60, 60, 63, 83, - 85, 119, 189, 182, 119, 110, 118, 135, 144, 147, 151, 153, 151, 150, 142, 128, - 85, 36, 36, 37, 46, 34, 17, 14, 18, 10, 8, 6, 9, 5, 2, 2, - 4, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 4, 4, 18, 37, 37, 42, 41, 40, - 51, 52, 67, 71, 81, 104, 48, 97, 130, 128, 106, 106, 120, 116, 97, 102, - 112, 53, 13, 25, 91, 99, 84, 75, 99, 106, 84, 79, 111, 103, 24, 10, - 67, 131, 126, 72, 46, 38, 32, 29, 40, 79, 68, 80, 85, 80, 99, 100, - 106, 112, 115, 118, 111, 51, 123, 116, 130, 119, 84, 46, 40, 68, 45, 87, - 93, 102, 51, 135, 96, 89, 100, 88, 108, 122, 119, 130, 124, 59, 118, 131, - 140, 136, 88, 87, 89, 55, 67, 65, 55, 63, 102, 100, 91, 89, 83, 79, - 72, 67, 69, 64, 40, 41, 29, 18, 16, 17, 9, 8, 9, 12, 1, 1, - 1, 17, 29, 17, 36, 33, 40, 52, 40, 83, 103, 126, 123, 84, 17, 80, - 89, 85, 84, 84, 80, 79, 79, 73, 75, 71, 5, 52, 55, 65, 60, 46, - 60, 59, 55, 56, 48, 56, 42, 52, 59, 59, 60, 65, 73, 56, 59, 48, - 45, 55, 51, 28, 32, 115, 225, 238, 238, 240, 238, 194, 130, 118, 127, 134, - 118, 112, 116, 132, 143, 139, 115, 42, 10, 8, 8, 8, 16, 16, 17, 22, - 28, 25, 40, 42, 59, 52, 40, 56, 110, 171, 157, 126, 120, 115, 91, 28, - 24, 21, 30, 30, 34, 44, 76, 84, 85, 77, 84, 81, 107, 186, 161, 97, - 99, 108, 102, 106, 115, 118, 132, 139, 140, 140, 144, 143, 136, 106, 97, 32, - 24, 21, 18, 17, 17, 18, 17, 17, 17, 24, 22, 41, 56, 69, 79, 92, - 95, 100, 99, 96, 88, 57, 38, 83, 88, 60, 60, 65, 65, 59, 48, 46, - 52, 20, 20, 28, 45, 48, 53, 83, 93, 103, 73, 59, 56, 103, 103, 112, - 92, 100, 85, 106, 91, 85, 91, 84, 36, 21, 68, 112, 102, 112, 104, 88, - 80, 91, 108, 87, 102, 92, 87, 76, 92, 106, 103, 91, 93, 85, 103, 46, - 32, 85, 124, 114, 112, 127, 123, 126, 130, 116, 107, 57, 29, 96, 112, 106, - 110, 108, 112, 119, 112, 111, 111, 106, 102, 100, 108, 107, 112, 103, 103, 95, - 65, 52, 55, 46, 67, 28, 38, 42, 69, 80, 79, 84, 99, 89, 83, 73, - 64, 42, 95, 123, 124, 124, 122, 124, 120, 116, 112, 102, 67, 24, 89, 118, - 119, 114, 114, 114, 114, 110, 84, 65, 57, 6, 71, 89, 91, 84, 89, 97, - 96, 95, 102, 100, 42, 56, 97, 120, 201, 183, 134, 123, 131, 148, 148, 147, - 151, 159, 159, 158, 159, 159, 153, 148, 130, 124, 114, 131, 118, 99, 37, 24, - 18, 17, 24, 25, 29, 40, 48, 52, 44, 64, 106, 108, 123, 130, 134, 126, - 123, 112, 107, 102, 88, 65, 9, 108, 116, 118, 115, 61, 63, 59, 99, 95, - 24, 127, 186, 220, 224, 230, 217, 157, 127, 120, 111, 102, 106, 100, 107, 65, - 45, 88, 80, 88, 93, 100, 91, 93, 89, 95, 99, 131, 120, 197, 191, 157, - 115, 114, 126, 144, 151, 148, 153, 155, 151, 140, 131, 81, 36, 42, 44, 53, - 34, 32, 85, 96, 93, 100, 92, 97, 88, 135, 114, 80, 80, 140, 123, 146, - 155, 155, 159, 157, 151, 165, 165, 161, 154, 128, 132, 154, 155, 150, 150, 155, - 151, 150, 123, 100, 65, 18, 102, 144, 138, 119, 119, 95, 77, 73, 32, 42, - 45, 45, 10, 8, 33, 9, 8, 4, 20, 1, 5, 2, 12, 9, 4, 8, - 5, 1, 0, 2, 2, 0, 0, 0, 5, 1, 14, 42, 34, 42, 61, 85, - 114, 83, 71, 115, 71, 77, 128, 142, 151, 148, 148, 151, 158, 161, 127, 112, - 56, 126, 135, 147, 153, 143, 134, 130, 122, 102, 106, 83, 103, 91, 115, 130, - 112, 128, 123, 139, 138, 124, 146, 130, 57, 131, 144, 131, 159, 158, 153, 146, - 131, 110, 106, 91, 61, 59, 24, 30, 79, 75, 111, 119, 124, 102, 96, 102, - 87, 37, 76, 167, 171, 140, 155, 167, 151, 144, 148, 114, 131, 140, 140, 140, - 146, 150, 143, 87, 46, 36, 33, 53, 32, 30, 33, 33, 28, 24, 28, 28, - 24, 24, 26, 30, 29, 33, 53, 68, 72, 72, 85, 112, 122, 104, 87, 81, - 89, 93, 142, 154, 140, 140, 146, 21, 24, 24, 37, 40, 44, 32, 38, 97, - 216, 232, 241, 237, 236, 185, 127, 119, 128, 136, 115, 112, 126, 136, 151, 146, - 135, 83, 18, 10, 9, 9, 14, 14, 17, 25, 29, 65, 64, 61, 65, 67, - 52, 44, 48, 77, 170, 175, 147, 118, 106, 85, 25, 21, 20, 28, 29, 29, - 77, 92, 99, 97, 96, 79, 69, 92, 197, 182, 122, 97, 103, 112, 122, 139, - 142, 144, 148, 151, 154, 153, 147, 139, 114, 84, 22, 20, 17, 17, 20, 25, - 29, 26, 29, 28, 29, 44, 92, 102, 104, 97, 93, 95, 88, 83, 75, 60, - 53, 20, 81, 81, 67, 60, 59, 65, 68, 75, 44, 55, 20, 71, 102, 99, - 102, 99, 108, 88, 108, 81, 110, 72, 75, 93, 97, 97, 102, 88, 85, 89, - 83, 97, 99, 44, 18, 89, 107, 111, 102, 104, 103, 104, 91, 89, 99, 92, - 64, 87, 100, 110, 108, 96, 104, 107, 99, 103, 49, 45, 102, 124, 120, 99, - 116, 114, 115, 107, 114, 124, 79, 30, 123, 131, 131, 92, 84, 81, 83, 91, - 92, 85, 111, 100, 65, 79, 92, 114, 96, 100, 97, 103, 107, 93, 60, 72, - 24, 60, 106, 115, 116, 112, 118, 111, 111, 110, 84, 65, 37, 93, 122, 112, - 108, 107, 106, 106, 106, 93, 106, 75, 24, 83, 118, 120, 114, 108, 115, 116, - 114, 108, 81, 57, 17, 111, 134, 131, 102, 97, 92, 112, 99, 93, 99, 57, - 55, 100, 116, 195, 205, 163, 120, 124, 146, 148, 162, 167, 174, 177, 174, 177, - 170, 163, 157, 126, 116, 130, 130, 118, 88, 30, 20, 17, 25, 32, 34, 40, - 51, 53, 60, 48, 87, 114, 130, 127, 124, 116, 120, 115, 122, 123, 123, 104, - 73, 8, 102, 115, 130, 123, 120, 114, 115, 103, 95, 24, 128, 194, 221, 228, - 222, 167, 131, 119, 106, 115, 97, 95, 111, 114, 55, 42, 77, 64, 76, 72, - 77, 80, 83, 71, 104, 140, 128, 132, 202, 197, 185, 115, 111, 120, 143, 155, - 157, 161, 159, 151, 140, 128, 65, 40, 29, 40, 55, 42, 57, 116, 140, 128, - 118, 115, 119, 114, 120, 118, 112, 108, 116, 146, 140, 142, 138, 146, 123, 128, - 151, 163, 136, 124, 140, 108, 134, 134, 140, 139, 135, 136, 132, 135, 136, 76, - 18, 102, 150, 148, 148, 128, 138, 122, 134, 102, 102, 83, 42, 33, 148, 150, - 118, 120, 124, 115, 104, 114, 103, 64, 20, 56, 159, 155, 115, 120, 154, 153, - 131, 112, 151, 130, 68, 12, 63, 116, 115, 93, 114, 112, 116, 112, 106, 69, - 106, 169, 165, 163, 155, 157, 148, 154, 144, 130, 123, 57, 135, 148, 162, 157, - 134, 135, 128, 128, 124, 135, 122, 116, 122, 130, 138, 131, 116, 124, 135, 147, - 148, 142, 134, 63, 135, 153, 144, 154, 142, 140, 150, 157, 157, 147, 97, 114, - 51, 97, 135, 128, 143, 144, 140, 128, 138, 138, 103, 95, 30, 136, 163, 161, - 155, 157, 157, 161, 150, 161, 151, 142, 131, 108, 150, 151, 143, 146, 147, 148, - 151, 114, 102, 95, 102, 148, 151, 165, 161, 169, 166, 167, 167, 144, 138, 138, - 144, 155, 155, 154, 170, 171, 150, 159, 153, 155, 134, 91, 130, 169, 167, 162, - 167, 166, 30, 36, 38, 24, 38, 24, 33, 45, 179, 228, 229, 232, 233, 193, - 130, 118, 131, 140, 123, 114, 138, 147, 153, 148, 144, 120, 46, 9, 9, 10, - 13, 21, 14, 14, 24, 63, 73, 71, 60, 56, 59, 57, 41, 53, 64, 147, - 179, 162, 120, 102, 79, 24, 20, 17, 28, 30, 33, 84, 104, 83, 85, 75, - 75, 75, 88, 204, 187, 173, 99, 103, 116, 130, 143, 148, 155, 151, 155, 154, - 157, 151, 135, 114, 53, 24, 17, 17, 24, 28, 29, 32, 28, 32, 34, 34, - 80, 108, 108, 100, 100, 85, 87, 71, 64, 69, 53, 52, 22, 73, 87, 73, - 55, 59, 63, 63, 73, 45, 55, 21, 75, 93, 99, 95, 111, 80, 89, 93, - 72, 81, 63, 89, 106, 103, 91, 92, 83, 87, 85, 89, 92, 92, 38, 18, - 103, 103, 102, 95, 102, 106, 96, 93, 95, 88, 81, 57, 83, 107, 116, 104, - 103, 104, 102, 95, 99, 48, 33, 95, 119, 122, 115, 112, 99, 112, 100, 114, - 107, 106, 36, 108, 103, 139, 127, 130, 128, 124, 126, 122, 116, 100, 93, 64, - 111, 122, 115, 122, 112, 111, 111, 104, 102, 80, 76, 28, 88, 119, 114, 108, - 99, 103, 92, 89, 102, 97, 67, 38, 87, 110, 115, 106, 110, 106, 104, 107, - 108, 99, 75, 29, 87, 99, 120, 107, 104, 111, 102, 118, 116, 81, 64, 0, - 110, 114, 123, 123, 130, 127, 116, 127, 102, 103, 63, 49, 102, 122, 194, 217, - 201, 136, 119, 136, 150, 159, 167, 178, 182, 179, 179, 181, 173, 161, 127, 126, - 140, 131, 120, 88, 28, 20, 20, 34, 45, 55, 53, 52, 57, 57, 44, 99, - 119, 128, 123, 112, 112, 111, 118, 110, 112, 118, 115, 73, 9, 115, 119, 118, - 115, 111, 115, 97, 71, 97, 33, 122, 199, 218, 230, 206, 131, 115, 110, 114, - 99, 97, 116, 118, 102, 56, 45, 46, 81, 83, 73, 72, 89, 87, 67, 108, - 140, 136, 132, 206, 209, 198, 114, 108, 119, 132, 146, 153, 157, 163, 155, 140, - 128, 71, 36, 28, 49, 68, 32, 73, 134, 123, 124, 127, 134, 131, 136, 132, - 111, 103, 99, 135, 163, 157, 147, 142, 135, 148, 142, 153, 154, 153, 146, 104, - 136, 157, 158, 158, 162, 159, 158, 148, 131, 95, 77, 22, 116, 147, 147, 150, - 150, 146, 124, 128, 122, 114, 89, 42, 110, 151, 144, 143, 143, 142, 150, 147, - 127, 128, 72, 13, 132, 159, 144, 139, 147, 148, 144, 146, 148, 140, 126, 77, - 14, 93, 108, 102, 99, 118, 110, 112, 118, 89, 67, 95, 167, 159, 157, 146, - 147, 144, 147, 147, 159, 118, 63, 128, 131, 134, 161, 166, 158, 142, 154, 130, - 147, 115, 75, 111, 143, 147, 134, 136, 155, 150, 163, 130, 144, 135, 68, 134, - 138, 147, 154, 136, 135, 138, 148, 142, 154, 120, 118, 24, 120, 130, 136, 135, - 134, 139, 132, 131, 138, 131, 107, 42, 167, 162, 148, 151, 148, 151, 154, 155, - 154, 151, 146, 122, 132, 143, 151, 144, 146, 151, 153, 150, 154, 159, 83, 150, - 170, 157, 161, 170, 154, 155, 155, 171, 170, 144, 119, 135, 170, 181, 173, 171, - 169, 162, 148, 169, 167, 150, 92, 138, 171, 162, 166, 163, 162, 16, 18, 20, - 59, 21, 41, 34, 104, 222, 226, 230, 233, 212, 146, 119, 126, 139, 138, 114, - 130, 153, 159, 155, 150, 139, 87, 18, 9, 8, 12, 14, 25, 16, 10, 28, - 65, 57, 59, 46, 38, 40, 37, 49, 45, 59, 114, 185, 174, 126, 104, 75, - 24, 21, 17, 28, 30, 26, 71, 99, 83, 84, 79, 75, 85, 95, 206, 199, - 185, 95, 104, 116, 138, 147, 155, 154, 163, 155, 153, 157, 146, 134, 116, 30, - 20, 17, 16, 25, 37, 36, 30, 33, 36, 30, 49, 96, 106, 108, 100, 83, - 79, 76, 73, 64, 63, 60, 49, 22, 71, 76, 80, 73, 68, 64, 56, 57, - 45, 52, 17, 83, 91, 110, 81, 79, 80, 77, 84, 83, 81, 60, 85, 106, - 99, 93, 93, 104, 96, 96, 89, 81, 85, 41, 21, 83, 107, 92, 108, 92, - 75, 99, 92, 89, 89, 81, 55, 85, 100, 116, 102, 116, 106, 96, 103, 95, - 51, 32, 95, 116, 114, 108, 108, 108, 97, 96, 103, 108, 116, 40, 75, 124, - 95, 119, 128, 114, 127, 122, 111, 122, 108, 80, 61, 114, 119, 106, 96, 95, - 89, 104, 108, 100, 95, 76, 33, 104, 114, 111, 115, 97, 87, 88, 95, 100, - 84, 63, 22, 93, 112, 106, 115, 107, 104, 110, 107, 107, 88, 77, 40, 80, - 104, 118, 115, 115, 100, 112, 108, 111, 79, 56, 0, 107, 120, 119, 120, 127, - 114, 135, 134, 134, 120, 67, 57, 102, 123, 194, 210, 199, 135, 118, 132, 146, - 150, 163, 178, 183, 185, 186, 177, 173, 155, 127, 138, 142, 136, 127, 72, 26, - 20, 24, 51, 55, 53, 52, 56, 64, 67, 51, 104, 127, 128, 114, 118, 122, - 120, 115, 114, 112, 115, 97, 75, 8, 112, 103, 122, 119, 118, 114, 97, 75, - 92, 28, 127, 193, 214, 226, 185, 124, 115, 107, 107, 99, 102, 124, 116, 103, - 55, 40, 40, 65, 79, 84, 73, 85, 87, 60, 104, 138, 128, 138, 208, 205, - 202, 114, 107, 115, 124, 139, 146, 159, 166, 158, 143, 123, 69, 38, 25, 36, - 71, 40, 73, 135, 140, 126, 128, 123, 122, 110, 122, 107, 96, 34, 124, 159, - 154, 142, 143, 139, 150, 154, 155, 140, 155, 142, 103, 144, 157, 163, 157, 150, - 144, 139, 138, 134, 142, 81, 21, 114, 130, 151, 143, 140, 116, 136, 139, 140, - 147, 93, 40, 134, 151, 136, 144, 136, 144, 147, 148, 142, 130, 76, 13, 154, - 158, 147, 143, 150, 159, 153, 153, 158, 150, 144, 80, 12, 103, 102, 97, 103, - 118, 108, 108, 111, 104, 59, 93, 153, 159, 143, 155, 155, 147, 147, 148, 130, - 130, 60, 119, 138, 140, 161, 150, 143, 146, 138, 143, 148, 138, 81, 150, 144, - 142, 138, 148, 153, 161, 153, 139, 142, 132, 76, 130, 142, 153, 143, 138, 139, - 139, 142, 148, 150, 142, 120, 56, 100, 143, 127, 128, 138, 146, 124, 140, 134, - 111, 111, 40, 112, 166, 158, 139, 148, 144, 148, 142, 147, 144, 126, 111, 146, - 143, 148, 154, 151, 147, 150, 148, 138, 159, 100, 154, 178, 170, 163, 174, 167, - 150, 169, 154, 136, 128, 130, 139, 170, 166, 165, 150, 157, 151, 162, 161, 157, - 140, 89, 108, 170, 162, 165, 157, 161, 75, 67, 64, 25, 32, 37, 56, 170, - 218, 236, 224, 218, 162, 132, 122, 138, 142, 128, 119, 151, 163, 163, 155, 147, - 126, 52, 10, 6, 9, 10, 16, 24, 16, 12, 55, 75, 64, 46, 37, 44, - 49, 34, 40, 42, 52, 107, 190, 182, 157, 102, 69, 24, 18, 14, 25, 30, - 32, 57, 103, 83, 80, 83, 72, 71, 83, 213, 204, 186, 95, 108, 119, 132, - 147, 155, 158, 157, 155, 155, 157, 144, 122, 118, 28, 17, 16, 25, 32, 37, - 33, 40, 34, 36, 30, 46, 99, 102, 104, 81, 75, 76, 75, 71, 65, 61, - 55, 61, 34, 79, 75, 64, 67, 65, 76, 53, 68, 44, 52, 16, 76, 85, - 92, 68, 85, 71, 89, 63, 81, 75, 53, 85, 106, 93, 97, 95, 96, 103, - 92, 93, 97, 80, 41, 20, 85, 102, 96, 108, 100, 103, 93, 99, 85, 93, - 80, 56, 84, 100, 103, 103, 116, 103, 89, 99, 89, 57, 30, 96, 120, 122, - 118, 107, 106, 104, 100, 100, 102, 116, 53, 45, 124, 131, 132, 126, 123, 122, - 119, 119, 130, 112, 89, 60, 108, 119, 106, 104, 115, 97, 95, 95, 104, 85, - 77, 32, 92, 122, 100, 104, 95, 88, 100, 89, 95, 88, 64, 24, 84, 106, - 106, 122, 103, 102, 100, 96, 92, 99, 79, 41, 83, 115, 118, 120, 106, 108, - 107, 111, 107, 81, 64, 8, 114, 112, 110, 127, 128, 116, 123, 131, 136, 112, - 59, 64, 103, 115, 165, 220, 206, 140, 115, 127, 147, 151, 163, 174, 173, 177, - 181, 181, 173, 139, 123, 139, 146, 135, 127, 53, 22, 20, 38, 49, 57, 56, - 57, 63, 77, 64, 59, 107, 128, 120, 119, 115, 116, 111, 116, 119, 108, 112, - 95, 69, 8, 96, 119, 115, 116, 114, 115, 85, 77, 97, 33, 131, 204, 213, - 220, 159, 126, 107, 115, 100, 93, 112, 118, 119, 102, 52, 40, 40, 52, 80, - 85, 89, 81, 93, 57, 104, 139, 135, 139, 209, 210, 206, 112, 103, 111, 126, - 131, 140, 159, 165, 159, 143, 118, 68, 41, 30, 40, 59, 44, 69, 124, 131, - 126, 126, 134, 118, 118, 120, 111, 92, 79, 148, 162, 157, 147, 155, 151, 155, - 154, 140, 142, 153, 135, 106, 147, 161, 158, 150, 143, 135, 136, 142, 132, 139, - 85, 25, 112, 144, 146, 138, 138, 140, 140, 136, 142, 116, 92, 42, 87, 142, - 136, 142, 144, 146, 142, 151, 144, 123, 83, 18, 99, 158, 140, 150, 146, 151, - 144, 144, 146, 138, 140, 79, 24, 99, 102, 100, 111, 119, 108, 112, 110, 93, - 60, 96, 157, 159, 153, 159, 165, 158, 148, 147, 136, 118, 68, 120, 148, 144, - 148, 148, 140, 140, 157, 146, 150, 146, 88, 144, 154, 151, 150, 162, 158, 151, - 128, 146, 144, 132, 81, 130, 139, 155, 165, 150, 150, 157, 161, 150, 143, 120, - 122, 55, 111, 135, 118, 132, 128, 139, 132, 142, 127, 110, 100, 40, 120, 167, - 162, 146, 138, 132, 140, 138, 135, 120, 130, 103, 138, 131, 138, 150, 151, 150, - 147, 143, 150, 139, 77, 127, 170, 157, 155, 150, 161, 150, 155, 159, 155, 151, - 103, 120, 171, 167, 155, 167, 169, 143, 163, 162, 154, 138, 85, 116, 165, 163, - 163, 161, 157, 71, 28, 44, 21, 40, 37, 100, 206, 220, 221, 222, 182, 120, - 126, 134, 142, 136, 116, 132, 159, 166, 161, 153, 142, 102, 22, 6, 6, 9, - 14, 16, 21, 14, 13, 61, 65, 57, 41, 42, 45, 51, 41, 42, 48, 49, - 87, 187, 183, 163, 102, 69, 20, 17, 17, 26, 30, 29, 48, 97, 85, 81, - 83, 76, 81, 81, 214, 205, 173, 102, 104, 116, 131, 143, 142, 155, 153, 157, - 157, 151, 138, 119, 118, 26, 16, 14, 25, 38, 32, 33, 38, 41, 37, 32, - 46, 100, 106, 100, 76, 71, 76, 63, 67, 72, 60, 56, 57, 24, 75, 71, - 83, 87, 81, 80, 53, 60, 42, 55, 20, 73, 88, 106, 80, 80, 77, 65, - 72, 77, 79, 55, 91, 100, 88, 96, 97, 103, 88, 85, 88, 89, 80, 45, - 18, 79, 97, 89, 108, 111, 107, 96, 95, 87, 88, 79, 51, 85, 93, 95, - 99, 111, 116, 114, 111, 88, 49, 30, 87, 119, 120, 116, 106, 102, 102, 111, - 96, 106, 114, 85, 45, 111, 127, 118, 114, 102, 115, 124, 128, 107, 102, 81, - 64, 110, 120, 95, 100, 102, 96, 96, 115, 104, 79, 79, 36, 88, 104, 110, - 103, 96, 87, 85, 102, 99, 84, 65, 33, 97, 110, 110, 127, 111, 110, 96, - 104, 112, 102, 91, 42, 84, 116, 107, 102, 107, 103, 96, 102, 107, 83, 64, - 9, 104, 114, 108, 116, 118, 118, 104, 119, 115, 93, 73, 63, 91, 122, 155, - 218, 217, 162, 111, 116, 143, 150, 166, 175, 179, 185, 181, 171, 167, 131, 135, - 147, 143, 136, 123, 33, 22, 18, 36, 55, 59, 59, 64, 71, 72, 71, 60, - 107, 126, 126, 120, 124, 112, 123, 116, 119, 108, 114, 106, 71, 8, 104, 102, - 111, 142, 112, 112, 110, 79, 91, 30, 126, 195, 220, 220, 150, 112, 102, 106, - 93, 100, 116, 116, 120, 114, 45, 37, 33, 46, 76, 87, 84, 72, 91, 61, - 108, 146, 131, 144, 213, 213, 206, 111, 106, 111, 118, 130, 142, 157, 166, 162, - 146, 130, 67, 40, 41, 38, 63, 49, 69, 123, 128, 128, 122, 124, 100, 111, - 135, 99, 97, 83, 151, 154, 142, 135, 140, 148, 154, 134, 130, 143, 154, 124, - 96, 146, 163, 153, 135, 143, 131, 135, 131, 138, 148, 87, 28, 111, 142, 148, - 136, 136, 138, 128, 134, 119, 123, 93, 41, 106, 135, 127, 139, 143, 144, 153, - 148, 138, 132, 84, 22, 100, 151, 142, 144, 144, 143, 142, 143, 154, 134, 127, - 87, 20, 114, 107, 97, 111, 119, 110, 108, 107, 96, 60, 110, 162, 157, 162, - 166, 167, 159, 153, 150, 136, 122, 72, 118, 154, 151, 157, 150, 140, 140, 148, - 138, 146, 146, 56, 150, 153, 153, 150, 157, 150, 144, 127, 144, 142, 138, 85, - 131, 140, 150, 139, 154, 150, 146, 147, 154, 136, 123, 120, 33, 106, 131, 138, - 112, 120, 136, 122, 131, 140, 130, 102, 40, 116, 167, 161, 134, 142, 135, 132, - 132, 131, 115, 120, 104, 135, 157, 148, 147, 148, 155, 146, 144, 143, 153, 81, - 130, 169, 165, 159, 153, 151, 155, 153, 146, 138, 122, 115, 143, 169, 170, 150, - 157, 159, 158, 151, 153, 155, 142, 92, 123, 163, 159, 162, 159, 155, 93, 45, - 20, 20, 37, 45, 161, 209, 224, 214, 206, 159, 116, 119, 139, 144, 138, 120, - 148, 165, 165, 161, 153, 138, 77, 12, 4, 5, 10, 16, 18, 20, 16, 16, - 69, 64, 56, 36, 48, 56, 44, 37, 46, 53, 52, 93, 185, 185, 171, 110, - 71, 24, 16, 16, 28, 32, 30, 34, 93, 91, 79, 89, 79, 81, 83, 217, - 201, 186, 106, 107, 118, 131, 139, 143, 150, 155, 157, 155, 143, 135, 116, 115, - 28, 16, 13, 26, 42, 38, 34, 32, 40, 37, 30, 60, 95, 110, 84, 83, - 72, 75, 75, 73, 67, 69, 53, 53, 24, 81, 72, 67, 67, 71, 76, 52, - 59, 44, 51, 18, 73, 87, 95, 71, 76, 72, 77, 65, 64, 75, 55, 85, - 99, 103, 97, 102, 87, 89, 92, 89, 88, 77, 42, 17, 75, 96, 89, 87, - 100, 100, 93, 93, 88, 87, 75, 44, 79, 97, 108, 102, 112, 102, 97, 88, - 97, 45, 33, 77, 119, 115, 111, 102, 104, 108, 100, 96, 104, 108, 81, 36, - 85, 124, 128, 104, 114, 123, 118, 108, 112, 97, 72, 69, 110, 116, 92, 99, - 108, 97, 97, 85, 97, 97, 77, 40, 92, 110, 106, 110, 106, 87, 87, 84, - 96, 92, 67, 36, 96, 115, 100, 104, 112, 99, 108, 110, 111, 102, 85, 45, - 85, 102, 114, 103, 103, 100, 108, 104, 100, 84, 65, 0, 118, 115, 104, 88, - 119, 115, 124, 122, 115, 100, 71, 55, 85, 124, 115, 220, 222, 189, 114, 114, - 139, 150, 162, 173, 177, 178, 175, 178, 158, 132, 139, 151, 143, 136, 123, 29, - 22, 20, 34, 60, 68, 65, 75, 87, 73, 67, 61, 95, 124, 124, 127, 112, - 122, 116, 115, 119, 106, 111, 108, 75, 10, 103, 107, 110, 112, 139, 124, 115, - 79, 91, 22, 114, 186, 213, 237, 159, 112, 97, 106, 93, 111, 119, 116, 123, - 99, 44, 38, 30, 46, 71, 85, 91, 76, 93, 56, 115, 138, 135, 154, 220, - 220, 208, 107, 100, 111, 123, 130, 144, 155, 167, 162, 147, 139, 68, 45, 26, - 42, 67, 53, 67, 124, 127, 128, 131, 120, 114, 122, 110, 119, 81, 69, 134, - 150, 150, 143, 148, 132, 128, 142, 139, 147, 147, 106, 119, 153, 162, 142, 134, - 136, 142, 131, 140, 134, 139, 89, 29, 119, 132, 142, 128, 139, 132, 136, 134, - 124, 111, 95, 38, 114, 148, 130, 134, 143, 147, 146, 146, 124, 134, 87, 17, - 106, 151, 144, 150, 146, 143, 147, 157, 130, 126, 128, 81, 21, 100, 104, 104, - 110, 116, 115, 106, 103, 85, 60, 103, 161, 150, 163, 162, 161, 157, 163, 159, - 140, 120, 71, 123, 142, 132, 158, 147, 140, 142, 150, 144, 147, 143, 53, 144, - 157, 158, 150, 153, 150, 124, 130, 124, 134, 136, 85, 108, 138, 146, 151, 146, - 148, 140, 148, 150, 154, 128, 120, 26, 103, 138, 136, 130, 116, 130, 132, 130, - 110, 126, 100, 45, 120, 166, 153, 144, 144, 136, 131, 128, 124, 115, 132, 100, - 130, 148, 142, 142, 140, 139, 144, 139, 140, 153, 93, 153, 173, 162, 162, 153, - 151, 158, 155, 134, 147, 144, 110, 154, 165, 161, 165, 153, 151, 135, 146, 140, - 136, 124, 87, 136, 161, 162, 154, 159, 159, 20, 65, 20, 33, 38, 83, 190, - 218, 208, 212, 171, 132, 116, 138, 142, 144, 128, 132, 162, 167, 165, 158, 148, - 130, 36, 8, 5, 6, 10, 17, 20, 29, 17, 14, 76, 63, 49, 40, 57, - 45, 41, 40, 48, 44, 45, 116, 185, 182, 178, 103, 67, 22, 17, 16, 26, - 29, 29, 33, 92, 89, 84, 92, 85, 80, 80, 221, 199, 197, 107, 106, 115, - 127, 136, 143, 147, 151, 157, 151, 142, 135, 115, 114, 25, 14, 10, 25, 46, - 36, 38, 36, 48, 38, 29, 61, 102, 108, 83, 75, 80, 83, 73, 75, 77, - 65, 52, 52, 24, 72, 79, 72, 68, 56, 60, 64, 56, 45, 49, 17, 72, - 92, 103, 77, 77, 83, 61, 79, 67, 75, 51, 89, 102, 99, 91, 88, 97, - 95, 96, 92, 87, 51, 48, 20, 71, 88, 93, 91, 91, 93, 89, 88, 92, - 85, 77, 40, 92, 96, 106, 104, 106, 107, 102, 108, 96, 45, 33, 73, 106, - 114, 108, 92, 108, 108, 91, 102, 100, 96, 88, 46, 83, 123, 131, 126, 100, - 112, 93, 108, 104, 95, 53, 81, 104, 115, 103, 103, 88, 84, 89, 83, 87, - 97, 79, 45, 68, 99, 114, 88, 77, 88, 96, 88, 91, 76, 68, 17, 92, - 107, 106, 100, 99, 91, 100, 108, 102, 97, 87, 51, 57, 96, 111, 112, 116, - 114, 112, 112, 99, 77, 59, 0, 108, 110, 104, 107, 102, 124, 122, 119, 92, - 123, 76, 69, 59, 122, 111, 226, 226, 220, 115, 114, 138, 153, 157, 163, 177, - 179, 177, 177, 148, 136, 154, 154, 143, 135, 123, 30, 22, 18, 38, 67, 63, - 71, 76, 85, 80, 76, 68, 88, 122, 123, 122, 120, 122, 122, 119, 116, 112, - 112, 106, 69, 10, 100, 97, 96, 111, 147, 116, 110, 79, 87, 18, 93, 146, - 193, 237, 165, 112, 108, 107, 110, 118, 114, 120, 114, 69, 42, 36, 32, 46, - 71, 88, 91, 84, 91, 46, 110, 135, 132, 148, 220, 214, 210, 110, 102, 112, - 126, 135, 146, 155, 166, 165, 157, 144, 71, 45, 25, 37, 64, 51, 56, 119, - 122, 131, 126, 124, 127, 116, 106, 112, 81, 24, 126, 154, 136, 127, 138, 142, - 144, 144, 146, 148, 148, 104, 126, 157, 150, 124, 150, 131, 131, 131, 132, 136, - 136, 93, 29, 112, 140, 144, 136, 132, 127, 134, 126, 136, 138, 102, 37, 134, - 143, 132, 131, 142, 142, 142, 143, 127, 119, 89, 13, 111, 148, 146, 146, 144, - 157, 154, 128, 130, 128, 138, 77, 17, 108, 102, 100, 97, 100, 116, 103, 104, - 88, 52, 96, 151, 155, 158, 157, 165, 150, 144, 143, 138, 124, 71, 114, 148, - 143, 154, 143, 140, 144, 148, 139, 151, 144, 53, 148, 153, 162, 144, 146, 161, - 138, 139, 139, 134, 136, 93, 100, 140, 135, 147, 161, 157, 146, 150, 153, 146, - 126, 126, 52, 95, 140, 111, 124, 115, 132, 120, 111, 115, 107, 110, 49, 114, - 127, 158, 140, 135, 136, 132, 134, 126, 119, 122, 92, 132, 142, 143, 142, 138, - 142, 147, 143, 135, 134, 96, 158, 177, 167, 163, 144, 157, 146, 142, 158, 134, - 143, 126, 161, 144, 134, 139, 131, 144, 134, 127, 115, 130, 108, 93, 120, 162, - 146, 144, 157, 163, 64, 25, 18, 41, 45, 114, 189, 213, 204, 204, 134, 136, - 134, 139, 144, 144, 122, 150, 169, 169, 165, 157, 147, 120, 26, 6, 5, 6, - 12, 18, 12, 20, 17, 13, 68, 56, 48, 52, 40, 40, 38, 36, 42, 53, - 46, 126, 185, 182, 166, 99, 61, 22, 16, 14, 30, 38, 33, 37, 83, 99, - 76, 84, 83, 73, 76, 225, 199, 205, 108, 106, 115, 127, 135, 146, 151, 153, - 153, 138, 139, 136, 122, 119, 22, 13, 10, 29, 41, 32, 37, 32, 53, 38, - 29, 63, 92, 92, 80, 49, 49, 68, 71, 53, 55, 59, 57, 61, 37, 84, - 76, 71, 56, 61, 55, 63, 53, 42, 46, 14, 72, 80, 93, 65, 77, 80, - 72, 80, 79, 71, 42, 84, 102, 110, 106, 106, 99, 87, 79, 85, 63, 51, - 46, 21, 57, 77, 81, 63, 73, 92, 83, 67, 73, 83, 69, 40, 79, 89, - 106, 108, 89, 81, 79, 77, 63, 55, 29, 68, 114, 116, 112, 110, 99, 97, - 96, 102, 93, 99, 96, 51, 67, 118, 127, 116, 95, 119, 112, 103, 97, 88, - 52, 67, 103, 114, 103, 97, 85, 88, 80, 83, 83, 88, 80, 42, 64, 79, - 77, 77, 79, 77, 81, 81, 89, 89, 65, 18, 91, 108, 108, 100, 100, 99, - 92, 97, 89, 88, 87, 55, 68, 91, 114, 114, 122, 112, 104, 111, 76, 81, - 69, 6, 107, 110, 100, 107, 89, 111, 115, 118, 107, 114, 63, 65, 48, 119, - 116, 226, 232, 222, 116, 111, 139, 151, 155, 159, 171, 177, 174, 165, 136, 147, - 153, 154, 146, 140, 126, 28, 21, 18, 40, 64, 68, 69, 75, 83, 83, 79, - 68, 77, 115, 124, 127, 115, 119, 120, 114, 114, 110, 103, 89, 68, 12, 92, - 100, 112, 110, 111, 106, 92, 88, 92, 20, 73, 122, 163, 157, 120, 106, 96, - 83, 100, 97, 103, 99, 68, 44, 40, 34, 33, 44, 75, 87, 89, 83, 91, - 48, 114, 134, 123, 122, 213, 224, 220, 110, 97, 112, 127, 136, 146, 155, 169, - 163, 144, 138, 67, 46, 26, 34, 64, 56, 51, 93, 123, 120, 126, 122, 123, - 122, 111, 114, 79, 48, 150, 148, 131, 140, 150, 153, 151, 153, 148, 154, 143, - 100, 131, 162, 140, 142, 139, 134, 134, 139, 134, 139, 135, 95, 32, 122, 138, - 143, 134, 128, 127, 126, 134, 134, 124, 102, 44, 95, 136, 131, 122, 128, 131, - 130, 123, 131, 128, 97, 26, 112, 110, 158, 154, 155, 157, 158, 115, 131, 128, - 131, 93, 30, 102, 97, 97, 96, 102, 99, 114, 103, 91, 56, 104, 154, 148, - 151, 161, 144, 146, 144, 136, 142, 123, 81, 119, 151, 142, 144, 144, 155, 139, - 157, 144, 136, 138, 77, 144, 154, 153, 151, 155, 148, 148, 147, 139, 146, 142, - 110, 93, 120, 138, 135, 116, 110, 118, 135, 123, 123, 126, 123, 52, 116, 142, - 127, 102, 102, 88, 114, 115, 104, 110, 112, 73, 97, 123, 134, 134, 128, 128, - 135, 131, 128, 130, 146, 127, 139, 139, 153, 146, 146, 136, 147, 146, 139, 140, - 135, 126, 174, 171, 142, 144, 142, 140, 142, 135, 130, 135, 135, 142, 128, 130, - 136, 124, 115, 139, 147, 154, 143, 146, 142, 148, 155, 158, 155, 150, 146, 25, - 25, 13, 38, 48, 126, 191, 202, 209, 146, 139, 122, 139, 143, 148, 142, 127, - 162, 171, 169, 165, 155, 143, 106, 18, 6, 4, 6, 9, 17, 16, 30, 14, - 14, 69, 52, 41, 46, 38, 36, 34, 36, 44, 41, 51, 136, 179, 177, 162, - 102, 57, 21, 17, 16, 29, 33, 33, 30, 71, 97, 91, 75, 84, 77, 75, - 225, 208, 210, 108, 107, 116, 131, 144, 143, 147, 146, 139, 131, 136, 134, 122, - 122, 20, 13, 10, 29, 37, 37, 32, 32, 32, 48, 49, 55, 64, 67, 60, - 56, 60, 55, 56, 59, 80, 71, 59, 52, 25, 68, 76, 56, 51, 52, 51, - 49, 46, 53, 52, 21, 72, 88, 85, 67, 63, 63, 57, 67, 67, 65, 46, - 65, 84, 100, 67, 72, 63, 63, 56, 48, 40, 34, 51, 45, 49, 51, 51, - 60, 46, 48, 48, 48, 49, 46, 41, 36, 59, 59, 61, 56, 48, 48, 52, - 52, 44, 44, 59, 59, 93, 106, 99, 83, 93, 99, 102, 88, 87, 102, 95, - 85, 63, 72, 116, 107, 83, 96, 96, 97, 96, 81, 56, 61, 93, 96, 81, - 81, 83, 91, 92, 80, 79, 81, 77, 75, 68, 79, 80, 80, 69, 77, 67, - 84, 79, 84, 68, 30, 97, 91, 93, 92, 91, 91, 89, 92, 87, 88, 72, - 85, 51, 59, 63, 68, 65, 69, 68, 69, 69, 77, 64, 4, 45, 114, 107, - 60, 81, 99, 104, 96, 89, 103, 95, 77, 55, 77, 96, 220, 233, 224, 111, - 108, 132, 147, 151, 150, 157, 170, 170, 165, 143, 158, 158, 157, 148, 140, 126, - 25, 20, 20, 34, 61, 68, 75, 76, 75, 80, 85, 84, 68, 79, 100, 110, - 108, 107, 107, 110, 111, 111, 106, 104, 68, 12, 87, 100, 104, 95, 97, 84, - 87, 88, 88, 36, 57, 77, 96, 118, 87, 56, 48, 37, 34, 37, 37, 37, - 34, 40, 36, 30, 30, 40, 77, 80, 81, 68, 89, 49, 107, 120, 136, 120, - 201, 222, 218, 107, 100, 116, 130, 140, 146, 158, 169, 165, 146, 136, 63, 48, - 49, 33, 64, 63, 53, 63, 92, 100, 99, 107, 107, 116, 106, 106, 93, 68, - 148, 138, 144, 144, 135, 135, 128, 131, 139, 134, 115, 96, 119, 138, 148, 140, - 138, 143, 139, 138, 119, 107, 114, 93, 37, 106, 118, 136, 144, 147, 136, 140, - 131, 122, 97, 104, 44, 102, 122, 140, 128, 128, 127, 124, 108, 119, 111, 96, - 26, 97, 83, 89, 107, 118, 119, 100, 107, 120, 89, 100, 91, 30, 104, 102, - 103, 103, 106, 100, 97, 103, 95, 61, 102, 116, 118, 114, 102, 112, 134, 126, - 142, 128, 116, 95, 83, 134, 126, 139, 124, 134, 131, 138, 132, 128, 139, 37, - 134, 146, 143, 132, 139, 139, 143, 135, 134, 142, 134, 124, 130, 135, 135, 132, - 132, 127, 128, 134, 131, 123, 124, 123, 22, 108, 84, 115, 75, 110, 91, 95, - 118, 114, 96, 107, 111, 118, 115, 122, 122, 120, 119, 123, 127, 124, 112, 131, - 104, 124, 126, 131, 134, 136, 119, 123, 134, 130, 132, 128, 140, 147, 127, 155, - 147, 128, 138, 150, 147, 116, 132, 132, 126, 128, 138, 143, 143, 138, 142, 144, - 126, 107, 102, 95, 147, 99, 147, 163, 163, 173, 14, 17, 17, 40, 48, 150, - 209, 148, 143, 150, 112, 147, 131, 144, 146, 138, 138, 169, 173, 169, 162, 154, - 138, 89, 14, 6, 5, 8, 12, 17, 16, 20, 14, 9, 61, 53, 37, 37, - 29, 34, 38, 33, 45, 42, 48, 151, 181, 175, 163, 95, 53, 21, 17, 16, - 32, 34, 37, 36, 48, 71, 89, 84, 83, 76, 72, 225, 217, 220, 110, 107, - 112, 130, 131, 131, 134, 132, 138, 142, 139, 138, 127, 124, 18, 12, 9, 25, - 28, 30, 36, 38, 34, 38, 37, 40, 46, 44, 41, 46, 48, 46, 51, 48, - 49, 51, 51, 49, 48, 53, 51, 51, 48, 48, 51, 51, 46, 46, 42, 24, - 64, 89, 59, 53, 49, 49, 52, 51, 49, 51, 42, 51, 51, 49, 51, 48, - 45, 44, 44, 42, 40, 36, 30, 20, 20, 18, 20, 18, 16, 16, 16, 14, - 16, 13, 13, 14, 13, 18, 21, 21, 17, 18, 25, 37, 33, 37, 34, 48, - 73, 71, 84, 93, 83, 77, 84, 87, 87, 85, 85, 75, 67, 76, 69, 64, - 56, 48, 46, 46, 55, 48, 38, 51, 55, 63, 59, 59, 81, 83, 81, 64, - 63, 51, 46, 56, 64, 73, 75, 75, 60, 51, 53, 68, 75, 73, 67, 29, - 55, 61, 53, 64, 63, 64, 64, 68, 68, 69, 72, 73, 71, 77, 55, 53, - 46, 32, 24, 21, 29, 34, 28, 0, 24, 24, 34, 30, 36, 40, 46, 51, - 60, 71, 96, 81, 73, 69, 107, 217, 234, 225, 110, 106, 115, 124, 140, 150, - 158, 157, 162, 159, 144, 159, 159, 155, 147, 135, 123, 24, 20, 20, 28, 37, - 53, 53, 63, 68, 71, 75, 71, 71, 88, 91, 93, 92, 95, 93, 96, 96, - 100, 102, 93, 69, 17, 95, 99, 80, 71, 72, 64, 53, 77, 73, 40, 38, - 40, 63, 49, 44, 38, 41, 33, 34, 44, 42, 33, 33, 33, 36, 48, 51, - 51, 53, 56, 55, 57, 91, 46, 68, 68, 84, 123, 191, 224, 216, 108, 104, - 115, 126, 139, 148, 158, 171, 163, 144, 132, 63, 51, 22, 45, 48, 55, 51, - 61, 61, 63, 59, 60, 61, 67, 63, 63, 72, 45, 68, 123, 123, 111, 108, - 120, 123, 115, 112, 118, 112, 110, 119, 118, 118, 122, 124, 116, 116, 104, 93, - 79, 87, 85, 87, 97, 91, 60, 103, 97, 87, 112, 84, 73, 99, 93, 91, - 100, 97, 96, 92, 92, 85, 88, 77, 93, 59, 53, 12, 40, 37, 55, 59, - 53, 59, 73, 73, 77, 89, 104, 91, 73, 91, 95, 89, 84, 89, 95, 92, - 99, 100, 99, 77, 84, 93, 88, 81, 80, 112, 123, 122, 114, 114, 115, 115, - 116, 116, 118, 112, 111, 110, 111, 111, 107, 95, 36, 84, 128, 95, 97, 96, - 130, 97, 103, 104, 119, 111, 102, 97, 114, 107, 106, 103, 99, 99, 100, 100, - 97, 93, 91, 13, 108, 97, 89, 80, 76, 75, 68, 67, 69, 65, 68, 67, - 73, 80, 83, 84, 95, 119, 139, 161, 173, 179, 238, 236, 233, 225, 221, 222, - 220, 228, 220, 213, 209, 198, 153, 126, 142, 139, 143, 114, 150, 140, 193, 204, - 202, 194, 197, 167, 146, 150, 134, 128, 122, 130, 150, 165, 170, 197, 174, 150, - 126, 142, 84, 143, 143, 53, 41, 46, 59, 77, 165, 114, 144, 106, 112, 110, - 135, 135, 143, 153, 144, 144, 173, 174, 166, 158, 146, 131, 44, 9, 5, 6, - 12, 12, 6, 13, 12, 14, 12, 21, 25, 22, 25, 24, 24, 25, 26, 44, - 37, 33, 131, 173, 173, 162, 95, 45, 18, 16, 18, 29, 32, 33, 34, 40, - 42, 42, 44, 48, 80, 60, 229, 224, 222, 111, 104, 112, 128, 123, 123, 122, - 124, 127, 139, 138, 140, 128, 122, 16, 9, 9, 17, 16, 18, 20, 20, 17, - 20, 25, 28, 32, 41, 41, 44, 46, 46, 45, 51, 55, 57, 63, 55, 51, - 63, 71, 60, 73, 80, 93, 127, 110, 51, 46, 56, 49, 44, 44, 42, 42, - 53, 45, 44, 33, 30, 30, 32, 28, 38, 36, 36, 36, 41, 33, 38, 34, - 65, 85, 115, 116, 111, 122, 108, 114, 104, 118, 115, 100, 80, 83, 80, 85, - 102, 103, 88, 80, 65, 49, 37, 32, 25, 18, 18, 16, 16, 13, 13, 14, - 16, 13, 16, 18, 18, 17, 16, 21, 28, 84, 89, 95, 102, 106, 103, 73, - 77, 46, 111, 110, 122, 96, 53, 51, 68, 45, 48, 89, 97, 112, 102, 106, - 115, 119, 116, 104, 88, 75, 65, 45, 44, 64, 30, 17, 17, 17, 17, 13, - 13, 14, 16, 10, 12, 13, 13, 13, 16, 44, 52, 79, 95, 89, 93, 84, - 56, 52, 0, 77, 115, 104, 76, 107, 77, 87, 84, 64, 53, 52, 59, 57, - 60, 97, 209, 221, 214, 100, 97, 110, 111, 107, 119, 136, 151, 157, 162, 139, - 154, 161, 157, 144, 138, 122, 20, 17, 17, 14, 14, 16, 17, 17, 16, 18, - 30, 28, 18, 22, 46, 63, 44, 48, 28, 33, 30, 53, 37, 77, 26, 17, - 100, 53, 44, 42, 42, 38, 44, 36, 32, 33, 30, 32, 34, 34, 41, 37, - 29, 30, 33, 32, 34, 36, 34, 36, 34, 36, 38, 41, 45, 57, 64, 69, - 95, 45, 96, 120, 120, 123, 187, 212, 199, 111, 104, 116, 130, 138, 146, 162, - 170, 165, 143, 120, 57, 53, 22, 36, 25, 34, 9, 9, 9, 6, 6, 8, - 6, 5, 5, 5, 5, 5, 6, 8, 9, 9, 14, 14, 16, 17, 22, 24, - 26, 26, 34, 36, 44, 48, 51, 56, 61, 63, 75, 99, 103, 93, 85, 93, - 79, 84, 89, 84, 79, 87, 83, 85, 96, 102, 108, 103, 99, 96, 93, 97, - 100, 97, 93, 89, 93, 96, 52, 61, 126, 139, 103, 92, 96, 67, 55, 46, - 52, 51, 57, 49, 59, 81, 84, 72, 88, 91, 87, 76, 91, 93, 100, 112, - 103, 103, 96, 95, 91, 88, 72, 60, 59, 63, 52, 53, 48, 49, 46, 53, - 51, 53, 46, 59, 59, 102, 55, 42, 41, 37, 33, 30, 29, 28, 24, 20, - 22, 21, 20, 18, 20, 20, 20, 24, 6, 29, 29, 21, 40, 63, 102, 73, - 77, 84, 110, 135, 171, 177, 190, 199, 190, 181, 169, 165, 155, 159, 165, 151, - 143, 146, 150, 165, 177, 179, 190, 197, 201, 199, 201, 193, 195, 198, 195, 177, - 178, 183, 182, 104, 95, 89, 146, 136, 174, 199, 205, 208, 205, 205, 208, 208, - 205, 213, 216, 210, 212, 208, 212, 208, 198, 205, 202, 161, 123, 150, 65, 56, - 76, 80, 92, 88, 144, 166, 162, 163, 126, 153, 108, 110, 115, 118, 118, 136, - 146, 171, 170, 167, 154, 143, 127, 40, 9, 6, 12, 18, 28, 25, 32, 18, - 26, 28, 30, 40, 42, 44, 48, 55, 57, 49, 34, 49, 36, 122, 171, 170, - 120, 89, 41, 20, 16, 29, 34, 33, 30, 33, 40, 45, 52, 57, 72, 72, - 72, 226, 225, 224, 111, 104, 112, 120, 118, 127, 135, 138, 139, 136, 139, 147, - 132, 128, 20, 12, 9, 20, 29, 37, 38, 45, 59, 153, 161, 177, 183, 185, - 182, 190, 199, 204, 198, 199, 197, 195, 199, 201, 199, 195, 197, 194, 191, 187, - 193, 189, 193, 134, 102, 59, 69, 75, 107, 150, 177, 189, 189, 177, 170, 159, - 158, 161, 148, 139, 122, 108, 118, 116, 110, 119, 124, 100, 142, 169, 189, 195, - 201, 197, 190, 189, 183, 151, 122, 93, 107, 107, 97, 111, 107, 116, 104, 116, - 103, 99, 88, 61, 45, 26, 87, 107, 102, 96, 96, 100, 103, 110, 102, 100, - 92, 95, 96, 91, 89, 106, 106, 106, 108, 103, 92, 84, 41, 115, 130, 103, - 100, 130, 127, 122, 114, 100, 127, 154, 165, 171, 165, 169, 170, 165, 157, 143, - 122, 106, 99, 73, 65, 30, 44, 116, 124, 102, 104, 93, 118, 104, 107, 99, - 96, 89, 99, 115, 104, 97, 95, 106, 91, 93, 106, 81, 56, 2, 100, 118, - 127, 131, 96, 127, 123, 106, 110, 88, 75, 73, 95, 99, 102, 225, 234, 226, - 111, 107, 118, 116, 118, 116, 120, 120, 127, 127, 143, 161, 162, 157, 143, 134, - 115, 22, 21, 20, 38, 49, 51, 56, 53, 55, 53, 61, 53, 34, 59, 112, - 111, 95, 99, 100, 65, 42, 38, 42, 48, 51, 37, 67, 87, 95, 95, 102, - 110, 108, 93, 85, 93, 110, 118, 106, 99, 92, 91, 83, 83, 51, 51, 45, - 41, 44, 53, 63, 63, 63, 69, 84, 91, 85, 89, 99, 42, 120, 122, 130, - 128, 201, 218, 190, 110, 107, 116, 131, 138, 148, 161, 173, 166, 165, 138, 67, - 57, 17, 18, 26, 29, 53, 104, 107, 114, 115, 116, 120, 123, 123, 119, 80, - 49, 104, 132, 147, 140, 139, 142, 151, 144, 139, 136, 142, 131, 143, 159, 151, - 147, 143, 128, 122, 126, 134, 187, 198, 208, 194, 173, 139, 108, 100, 95, 103, - 111, 148, 166, 181, 161, 163, 159, 153, 162, 142, 139, 134, 132, 104, 89, 88, - 85, 42, 123, 148, 167, 169, 151, 154, 119, 115, 120, 132, 110, 110, 135, 171, - 177, 185, 186, 186, 186, 185, 175, 183, 189, 201, 206, 201, 189, 179, 144, 134, - 103, 99, 93, 97, 77, 22, 52, 128, 148, 118, 130, 122, 127, 119, 97, 110, - 51, 59, 138, 151, 140, 143, 155, 151, 140, 161, 163, 161, 131, 128, 167, 170, - 193, 194, 189, 186, 182, 177, 174, 118, 63, 87, 85, 148, 183, 193, 201, 210, - 208, 209, 212, 213, 206, 208, 208, 197, 191, 190, 189, 175, 170, 167, 167, 162, - 157, 153, 166, 171, 178, 191, 193, 177, 179, 171, 162, 171, 171, 170, 187, 167, - 181, 169, 142, 187, 229, 225, 234, 212, 233, 206, 228, 221, 232, 220, 220, 214, - 212, 210, 210, 205, 220, 217, 169, 122, 161, 159, 166, 97, 111, 84, 108, 195, - 199, 234, 197, 110, 111, 114, 130, 134, 140, 128, 138, 154, 174, 171, 158, 148, - 143, 127, 37, 10, 6, 24, 25, 40, 42, 44, 45, 49, 64, 67, 76, 68, - 77, 76, 81, 77, 79, 61, 51, 30, 61, 128, 165, 104, 71, 26, 21, 18, - 32, 46, 46, 46, 41, 45, 81, 91, 87, 87, 73, 71, 230, 228, 224, 111, - 103, 114, 120, 136, 142, 142, 143, 142, 140, 136, 144, 131, 128, 21, 9, 9, - 24, 40, 49, 118, 64, 124, 165, 186, 191, 191, 194, 202, 206, 212, 213, 218, - 226, 229, 230, 233, 234, 236, 234, 240, 233, 241, 242, 242, 236, 230, 230, 225, - 225, 224, 216, 216, 218, 216, 217, 212, 208, 201, 195, 193, 194, 186, 175, 166, - 150, 146, 103, 106, 135, 163, 183, 199, 209, 218, 217, 216, 218, 216, 214, 210, - 205, 199, 181, 130, 111, 97, 87, 92, 96, 102, 108, 107, 107, 104, 81, 59, - 28, 107, 100, 114, 107, 110, 108, 96, 95, 96, 104, 104, 81, 73, 115, 120, - 127, 126, 120, 104, 97, 108, 81, 44, 126, 126, 124, 106, 135, 103, 114, 130, - 146, 186, 212, 222, 220, 217, 216, 210, 205, 201, 193, 190, 171, 162, 103, 67, - 37, 115, 120, 103, 102, 111, 115, 119, 102, 99, 112, 118, 107, 85, 111, 110, - 107, 107, 106, 104, 106, 102, 95, 64, 0, 88, 114, 120, 115, 91, 93, 112, - 111, 92, 103, 107, 59, 95, 119, 102, 233, 240, 226, 110, 102, 112, 130, 136, - 140, 144, 143, 142, 143, 147, 162, 159, 151, 144, 135, 122, 20, 20, 20, 48, - 49, 61, 77, 73, 75, 67, 64, 59, 44, 96, 123, 131, 128, 131, 123, 115, - 106, 119, 112, 95, 99, 110, 118, 107, 112, 107, 115, 124, 126, 106, 116, 111, - 132, 150, 146, 139, 153, 151, 150, 111, 97, 93, 85, 83, 73, 81, 76, 65, - 53, 75, 80, 75, 73, 77, 99, 52, 119, 130, 130, 128, 222, 225, 195, 107, - 104, 114, 130, 140, 147, 161, 171, 166, 148, 142, 67, 68, 75, 79, 81, 110, - 107, 119, 123, 126, 124, 131, 116, 122, 123, 120, 123, 57, 140, 140, 143, 153, - 148, 170, 182, 194, 197, 204, 201, 202, 209, 214, 212, 208, 209, 208, 206, 205, - 208, 212, 212, 213, 210, 205, 198, 198, 174, 170, 183, 162, 171, 190, 195, 206, - 204, 199, 205, 198, 186, 186, 197, 187, 169, 107, 84, 99, 52, 138, 163, 154, - 169, 173, 158, 169, 165, 150, 165, 165, 191, 194, 208, 206, 216, 209, 209, 208, - 209, 213, 212, 216, 221, 218, 220, 217, 214, 212, 195, 179, 143, 116, 108, 77, - 18, 140, 161, 153, 159, 161, 154, 159, 154, 132, 87, 45, 153, 193, 198, 212, - 204, 202, 208, 214, 220, 220, 214, 217, 216, 216, 210, 213, 198, 208, 208, 199, - 170, 189, 171, 87, 76, 118, 177, 193, 199, 206, 208, 212, 217, 221, 220, 218, - 209, 217, 217, 187, 139, 167, 194, 190, 189, 183, 169, 171, 161, 150, 136, 138, - 118, 136, 123, 131, 155, 158, 124, 163, 166, 143, 159, 167, 146, 135, 144, 187, - 208, 174, 161, 136, 136, 140, 142, 171, 204, 209, 214, 209, 204, 205, 210, 213, - 154, 124, 119, 143, 157, 167, 79, 80, 84, 114, 185, 206, 241, 216, 116, 110, - 127, 135, 142, 154, 161, 165, 169, 167, 159, 158, 148, 143, 128, 33, 9, 6, - 20, 34, 36, 53, 44, 55, 65, 61, 65, 71, 71, 71, 56, 77, 64, 68, - 63, 48, 36, 49, 64, 144, 89, 51, 29, 24, 16, 41, 37, 37, 37, 32, - 72, 92, 88, 77, 76, 67, 68, 237, 230, 226, 106, 103, 119, 127, 142, 139, - 144, 147, 146, 140, 136, 142, 130, 127, 21, 10, 10, 20, 33, 106, 41, 59, - 71, 114, 174, 182, 189, 198, 201, 204, 209, 214, 220, 225, 226, 229, 232, 233, - 233, 236, 237, 234, 240, 240, 240, 234, 228, 220, 214, 217, 217, 222, 224, 218, - 214, 214, 210, 195, 197, 183, 174, 189, 177, 175, 130, 92, 128, 147, 174, 194, - 209, 210, 208, 202, 214, 220, 218, 221, 218, 218, 214, 213, 209, 205, 198, 179, - 155, 112, 89, 83, 93, 91, 91, 95, 93, 96, 64, 37, 110, 104, 114, 104, - 99, 88, 85, 85, 87, 85, 87, 64, 87, 127, 110, 96, 124, 124, 116, 89, - 85, 79, 44, 130, 127, 136, 127, 138, 140, 132, 157, 212, 225, 233, 230, 222, - 216, 206, 194, 169, 155, 131, 108, 88, 80, 148, 80, 48, 124, 115, 120, 126, - 122, 119, 114, 104, 115, 107, 95, 73, 110, 118, 115, 97, 99, 108, 103, 97, - 107, 76, 59, 0, 93, 87, 93, 107, 112, 112, 119, 127, 123, 110, 108, 65, - 92, 116, 102, 238, 242, 237, 112, 104, 115, 136, 144, 151, 158, 158, 158, 161, - 158, 155, 151, 147, 147, 138, 128, 22, 20, 22, 45, 68, 67, 64, 73, 73, - 76, 67, 67, 46, 104, 130, 135, 134, 130, 135, 122, 123, 127, 136, 127, 107, - 93, 116, 159, 187, 193, 201, 209, 214, 216, 210, 214, 221, 224, 222, 222, 230, - 229, 221, 216, 220, 201, 206, 204, 208, 199, 174, 95, 55, 51, 71, 71, 77, - 72, 100, 55, 107, 120, 132, 139, 228, 233, 222, 103, 99, 114, 128, 139, 150, - 159, 170, 171, 165, 175, 111, 102, 97, 102, 104, 114, 116, 132, 138, 143, 131, - 132, 130, 142, 131, 126, 122, 122, 95, 138, 128, 126, 143, 193, 201, 202, 190, - 198, 210, 206, 216, 204, 202, 217, 204, 217, 217, 209, 205, 204, 198, 201, 202, - 206, 214, 205, 199, 157, 159, 190, 204, 205, 205, 198, 214, 195, 183, 150, 153, - 138, 128, 142, 131, 116, 73, 96, 53, 126, 140, 157, 150, 153, 166, 150, 144, - 157, 179, 187, 204, 206, 201, 202, 191, 201, 205, 209, 202, 201, 195, 189, 191, - 195, 199, 209, 212, 212, 212, 209, 202, 153, 110, 92, 18, 140, 161, 154, 153, - 150, 147, 148, 158, 151, 114, 61, 159, 194, 197, 190, 208, 214, 225, 225, 218, - 218, 222, 218, 206, 201, 206, 197, 193, 186, 174, 178, 170, 165, 148, 99, 87, - 142, 174, 191, 198, 204, 206, 218, 217, 193, 183, 170, 155, 157, 155, 140, 116, - 142, 165, 202, 191, 169, 157, 142, 139, 138, 136, 132, 127, 135, 135, 140, 142, - 150, 151, 155, 159, 134, 128, 155, 171, 146, 134, 130, 134, 127, 120, 119, 112, - 112, 112, 111, 114, 116, 119, 124, 130, 127, 120, 122, 118, 114, 135, 89, 103, - 112, 68, 72, 87, 99, 199, 210, 206, 191, 146, 114, 120, 140, 162, 165, 166, - 170, 170, 166, 159, 153, 147, 143, 130, 32, 9, 6, 24, 40, 34, 49, 51, - 63, 44, 76, 80, 60, 53, 60, 55, 65, 65, 64, 69, 49, 36, 21, 52, - 139, 85, 51, 24, 18, 18, 40, 40, 37, 36, 37, 80, 92, 84, 75, 71, - 67, 67, 241, 234, 230, 112, 103, 119, 130, 139, 142, 150, 147, 142, 134, 134, - 138, 131, 124, 18, 9, 10, 20, 38, 55, 52, 60, 114, 146, 181, 181, 135, - 167, 144, 148, 148, 146, 140, 139, 138, 136, 131, 132, 130, 127, 126, 134, 127, - 122, 122, 123, 116, 114, 115, 116, 171, 187, 220, 191, 185, 179, 165, 140, 115, - 108, 107, 108, 114, 107, 104, 122, 126, 182, 208, 209, 212, 218, 193, 177, 183, - 181, 167, 157, 147, 151, 150, 153, 154, 177, 191, 191, 194, 122, 99, 72, 87, - 85, 61, 76, 84, 93, 69, 34, 84, 104, 118, 97, 84, 92, 97, 85, 80, - 75, 92, 59, 81, 128, 126, 100, 104, 115, 93, 93, 89, 77, 55, 134, 136, - 120, 132, 138, 143, 151, 216, 236, 238, 232, 222, 197, 147, 120, 106, 99, 92, - 89, 77, 57, 60, 80, 72, 29, 81, 112, 110, 112, 103, 96, 91, 97, 95, - 111, 99, 56, 103, 114, 108, 99, 108, 103, 102, 96, 107, 79, 53, 0, 92, - 96, 111, 110, 110, 100, 102, 111, 110, 115, 81, 46, 97, 127, 91, 237, 242, - 238, 116, 106, 115, 142, 147, 155, 155, 165, 165, 170, 165, 165, 161, 150, 144, - 140, 128, 18, 17, 18, 45, 72, 69, 67, 72, 75, 91, 67, 67, 37, 99, - 126, 126, 128, 134, 132, 128, 132, 122, 119, 106, 67, 118, 136, 123, 179, 202, - 209, 216, 214, 220, 221, 225, 225, 229, 230, 234, 234, 230, 230, 229, 226, 228, - 226, 225, 222, 220, 195, 104, 61, 56, 72, 80, 71, 81, 96, 56, 79, 114, - 130, 128, 236, 238, 232, 106, 99, 114, 128, 139, 148, 161, 170, 174, 170, 146, - 177, 143, 148, 191, 204, 209, 210, 210, 212, 212, 209, 209, 212, 209, 204, 197, - 153, 119, 122, 126, 85, 139, 147, 146, 208, 217, 199, 214, 216, 216, 191, 175, - 155, 165, 186, 204, 202, 201, 185, 186, 165, 177, 174, 170, 169, 166, 153, 139, - 177, 204, 213, 212, 201, 198, 175, 154, 130, 123, 123, 120, 119, 122, 128, 80, - 73, 88, 49, 126, 142, 157, 165, 147, 154, 162, 131, 148, 178, 194, 212, 214, - 190, 179, 153, 151, 150, 155, 148, 147, 139, 135, 134, 136, 139, 157, 163, 166, - 177, 187, 198, 183, 123, 95, 24, 96, 163, 153, 150, 153, 147, 153, 153, 155, - 127, 57, 153, 191, 204, 208, 225, 241, 212, 224, 224, 222, 216, 202, 193, 205, - 198, 190, 182, 119, 107, 103, 95, 106, 103, 93, 88, 136, 179, 191, 206, 214, - 195, 183, 162, 138, 143, 134, 135, 136, 134, 140, 108, 118, 158, 171, 201, 181, - 158, 163, 139, 138, 130, 140, 139, 144, 143, 142, 144, 148, 150, 155, 148, 123, - 122, 136, 166, 147, 153, 127, 124, 123, 123, 122, 123, 119, 112, 112, 106, 112, - 107, 114, 111, 112, 114, 115, 127, 120, 81, 80, 122, 110, 45, 63, 73, 81, - 199, 213, 236, 195, 119, 111, 132, 147, 162, 169, 165, 167, 167, 167, 161, 155, - 150, 143, 123, 25, 8, 5, 18, 36, 42, 48, 52, 63, 45, 77, 75, 55, - 61, 51, 52, 64, 81, 79, 59, 44, 36, 24, 53, 124, 88, 72, 49, 25, - 20, 36, 30, 37, 25, 30, 88, 95, 77, 81, 73, 67, 60, 242, 236, 230, - 111, 104, 116, 131, 138, 143, 144, 138, 134, 131, 134, 134, 128, 120, 18, 10, - 8, 18, 33, 37, 55, 34, 71, 104, 136, 111, 147, 123, 111, 111, 115, 114, - 103, 112, 116, 114, 106, 107, 107, 108, 106, 106, 103, 106, 103, 103, 103, 103, - 102, 103, 107, 108, 108, 106, 103, 102, 102, 100, 102, 103, 106, 108, 111, 114, - 118, 123, 126, 198, 208, 206, 209, 190, 157, 131, 116, 111, 112, 111, 108, 112, - 115, 115, 118, 122, 139, 140, 170, 165, 102, 72, 95, 75, 87, 87, 81, 88, - 65, 37, 102, 114, 111, 97, 100, 92, 115, 85, 76, 73, 87, 56, 89, 128, - 120, 100, 88, 91, 84, 89, 88, 75, 49, 124, 136, 127, 150, 144, 153, 214, - 234, 242, 241, 222, 167, 97, 87, 79, 79, 79, 77, 68, 63, 49, 44, 61, - 72, 48, 85, 107, 114, 100, 95, 91, 91, 89, 93, 102, 91, 68, 104, 116, - 100, 100, 111, 111, 97, 103, 108, 93, 53, 4, 89, 107, 112, 103, 118, 127, - 120, 116, 114, 107, 80, 46, 89, 108, 88, 241, 245, 240, 116, 107, 115, 142, - 151, 159, 161, 169, 174, 175, 173, 167, 161, 151, 146, 138, 124, 16, 18, 21, - 44, 68, 64, 72, 71, 83, 80, 71, 61, 49, 92, 126, 127, 116, 126, 134, - 127, 130, 116, 103, 96, 68, 114, 132, 147, 132, 154, 174, 208, 218, 218, 220, - 225, 232, 232, 234, 224, 241, 241, 237, 226, 237, 238, 234, 212, 240, 240, 195, - 103, 55, 46, 80, 84, 71, 84, 95, 69, 63, 119, 130, 127, 237, 242, 236, - 107, 100, 112, 126, 139, 151, 158, 170, 175, 175, 169, 185, 190, 197, 204, 210, - 214, 213, 212, 212, 210, 212, 210, 210, 209, 206, 202, 201, 191, 144, 131, 130, - 128, 97, 123, 135, 151, 138, 131, 132, 122, 115, 112, 108, 114, 111, 118, 116, - 114, 112, 112, 111, 108, 111, 116, 115, 114, 151, 139, 174, 210, 208, 199, 202, - 154, 128, 124, 122, 119, 126, 126, 128, 138, 111, 69, 60, 73, 40, 127, 142, - 153, 155, 154, 151, 161, 157, 163, 193, 193, 182, 189, 174, 139, 118, 115, 114, - 114, 114, 114, 111, 110, 111, 112, 112, 116, 118, 122, 126, 132, 142, 181, 150, - 104, 22, 111, 162, 157, 153, 151, 148, 148, 146, 155, 127, 64, 92, 111, 175, - 194, 185, 174, 161, 138, 130, 119, 103, 97, 102, 97, 100, 96, 89, 85, 85, - 81, 81, 80, 80, 93, 89, 138, 181, 190, 193, 186, 144, 138, 122, 123, 138, - 142, 143, 138, 148, 134, 99, 102, 128, 147, 171, 214, 177, 162, 154, 147, 142, - 139, 143, 142, 140, 140, 144, 144, 139, 130, 154, 123, 88, 122, 142, 158, 159, - 169, 147, 155, 132, 150, 144, 139, 130, 126, 122, 123, 120, 115, 126, 116, 120, - 127, 122, 79, 72, 73, 102, 118, 22, 57, 79, 65, 195, 216, 242, 189, 127, - 115, 132, 155, 165, 169, 170, 171, 177, 169, 162, 155, 148, 140, 126, 29, 8, - 6, 18, 33, 36, 40, 48, 59, 41, 65, 69, 49, 71, 52, 41, 56, 42, - 46, 53, 41, 38, 29, 61, 119, 114, 87, 61, 46, 34, 36, 32, 33, 25, - 56, 87, 88, 81, 76, 72, 61, 59, 245, 237, 236, 107, 104, 116, 128, 138, - 143, 134, 132, 131, 140, 139, 139, 132, 126, 18, 9, 8, 20, 29, 37, 67, - 53, 36, 65, 103, 111, 118, 124, 111, 112, 99, 110, 115, 111, 110, 108, 112, - 114, 114, 114, 114, 111, 114, 115, 116, 118, 120, 122, 120, 116, 104, 103, 100, - 103, 103, 104, 103, 107, 112, 116, 120, 123, 126, 127, 124, 128, 120, 150, 210, - 186, 159, 138, 111, 127, 127, 126, 124, 124, 124, 124, 124, 123, 122, 120, 114, - 116, 120, 143, 108, 75, 87, 76, 79, 81, 84, 88, 67, 38, 100, 114, 114, - 110, 108, 87, 111, 88, 75, 84, 87, 52, 83, 119, 115, 104, 103, 99, 96, - 91, 88, 77, 55, 132, 140, 154, 135, 147, 202, 233, 244, 244, 234, 170, 114, - 80, 67, 57, 52, 49, 53, 51, 51, 38, 45, 51, 75, 49, 56, 118, 115, - 96, 93, 93, 97, 93, 88, 99, 96, 65, 103, 114, 99, 110, 112, 100, 97, - 104, 102, 103, 57, 1, 96, 102, 116, 100, 104, 100, 106, 112, 116, 97, 72, - 57, 80, 118, 91, 240, 246, 241, 114, 103, 115, 140, 154, 161, 167, 173, 182, - 183, 181, 170, 165, 154, 147, 136, 126, 16, 16, 20, 41, 69, 71, 68, 75, - 79, 84, 69, 61, 49, 93, 123, 124, 126, 131, 124, 130, 126, 115, 102, 106, - 63, 107, 139, 126, 146, 143, 144, 146, 157, 162, 157, 146, 144, 146, 146, 147, - 165, 158, 154, 169, 177, 151, 147, 161, 177, 142, 126, 96, 48, 51, 83, 83, - 77, 84, 87, 92, 42, 106, 120, 126, 240, 242, 238, 111, 100, 112, 127, 138, - 151, 161, 171, 178, 178, 174, 170, 142, 186, 197, 202, 210, 212, 212, 212, 210, - 210, 210, 209, 209, 209, 205, 201, 194, 191, 182, 177, 131, 127, 126, 95, 97, - 104, 112, 97, 110, 108, 110, 107, 108, 107, 112, 111, 111, 112, 112, 114, 114, - 114, 116, 119, 119, 148, 143, 167, 199, 191, 195, 140, 126, 126, 123, 132, 131, - 135, 132, 139, 138, 100, 57, 57, 79, 45, 124, 142, 150, 148, 155, 151, 139, - 147, 166, 166, 173, 154, 154, 124, 114, 122, 124, 123, 119, 120, 118, 122, 120, - 120, 120, 120, 118, 118, 119, 119, 118, 119, 131, 163, 111, 26, 102, 155, 153, - 157, 154, 153, 153, 151, 148, 135, 103, 84, 88, 88, 95, 93, 88, 95, 96, - 87, 87, 84, 88, 84, 89, 89, 87, 85, 87, 93, 116, 119, 122, 120, 97, - 91, 142, 206, 198, 163, 126, 126, 132, 139, 146, 140, 143, 142, 142, 153, 123, - 85, 72, 112, 139, 142, 154, 208, 175, 157, 158, 155, 150, 151, 151, 158, 155, - 158, 157, 154, 147, 123, 122, 114, 118, 131, 131, 147, 158, 159, 150, 139, 189, - 195, 157, 154, 139, 139, 139, 134, 140, 140, 140, 142, 138, 77, 67, 65, 84, - 93, 111, 14, 60, 56, 72, 197, 217, 244, 162, 132, 114, 134, 157, 165, 169, - 173, 174, 179, 174, 170, 153, 147, 139, 127, 28, 9, 6, 22, 30, 38, 49, - 42, 53, 46, 73, 72, 45, 65, 59, 42, 42, 84, 44, 52, 37, 38, 21, - 51, 116, 114, 80, 81, 64, 53, 55, 28, 28, 21, 60, 87, 81, 83, 67, - 88, 91, 61, 245, 237, 238, 112, 99, 118, 128, 139, 132, 143, 146, 147, 154, - 153, 146, 135, 130, 18, 9, 8, 20, 33, 38, 51, 41, 61, 32, 49, 103, - 72, 83, 97, 110, 128, 139, 116, 119, 122, 144, 123, 127, 131, 140, 128, 127, - 130, 144, 134, 136, 144, 146, 139, 139, 130, 122, 119, 119, 120, 120, 122, 126, - 131, 138, 140, 144, 146, 146, 134, 130, 107, 124, 139, 131, 108, 132, 132, 150, - 147, 136, 135, 136, 134, 135, 135, 135, 132, 132, 127, 126, 123, 119, 122, 77, - 72, 87, 75, 79, 84, 84, 68, 44, 95, 108, 108, 107, 110, 95, 115, 100, - 73, 80, 75, 48, 79, 119, 116, 89, 99, 77, 106, 104, 104, 93, 89, 135, - 163, 157, 157, 190, 225, 244, 246, 241, 218, 130, 87, 63, 38, 37, 44, 38, - 38, 42, 49, 45, 49, 46, 112, 52, 51, 116, 111, 95, 96, 97, 99, 97, - 93, 91, 93, 60, 99, 115, 102, 111, 104, 97, 97, 97, 106, 83, 55, 1, - 95, 102, 95, 103, 103, 106, 107, 114, 108, 96, 60, 68, 83, 115, 111, 245, - 248, 242, 120, 104, 115, 139, 151, 161, 169, 175, 183, 182, 181, 181, 167, 150, - 146, 138, 127, 16, 18, 18, 41, 67, 68, 71, 76, 85, 80, 69, 65, 48, - 81, 112, 126, 127, 126, 130, 131, 114, 93, 93, 84, 63, 114, 131, 127, 148, - 148, 131, 134, 136, 134, 134, 138, 134, 131, 134, 138, 136, 139, 140, 142, 140, - 143, 132, 135, 131, 131, 106, 72, 42, 40, 83, 80, 76, 81, 84, 88, 30, - 104, 130, 128, 241, 246, 241, 114, 103, 115, 131, 139, 151, 161, 171, 178, 181, - 178, 171, 173, 154, 150, 148, 146, 144, 142, 140, 140, 139, 138, 138, 139, 135, - 134, 132, 131, 134, 136, 138, 132, 136, 127, 128, 123, 126, 126, 123, 122, 120, - 120, 119, 118, 120, 120, 119, 119, 120, 123, 123, 123, 124, 126, 128, 130, 123, - 139, 136, 177, 208, 142, 130, 134, 138, 142, 142, 144, 142, 142, 143, 139, 89, - 55, 55, 75, 25, 119, 138, 147, 151, 144, 143, 140, 142, 138, 134, 127, 128, - 126, 116, 110, 104, 107, 119, 118, 128, 127, 127, 128, 131, 130, 131, 130, 131, - 131, 131, 128, 126, 123, 169, 122, 68, 71, 140, 161, 159, 150, 144, 147, 148, - 143, 143, 124, 61, 107, 103, 92, 95, 99, 99, 100, 97, 107, 104, 108, 111, - 114, 115, 116, 119, 115, 120, 128, 131, 134, 131, 111, 103, 135, 182, 175, 140, - 122, 139, 142, 147, 146, 147, 144, 144, 146, 147, 106, 67, 71, 103, 122, 127, - 143, 162, 193, 174, 147, 136, 163, 162, 162, 162, 166, 166, 169, 165, 162, 151, - 142, 123, 88, 124, 130, 134, 136, 148, 144, 140, 198, 187, 179, 175, 157, 147, - 147, 151, 140, 146, 151, 144, 134, 73, 63, 59, 75, 93, 99, 17, 51, 49, - 60, 206, 222, 230, 170, 122, 115, 135, 154, 165, 170, 171, 173, 178, 174, 169, - 157, 146, 142, 130, 30, 9, 9, 26, 38, 41, 46, 48, 51, 45, 69, 63, - 46, 51, 59, 55, 41, 42, 48, 40, 36, 32, 18, 49, 111, 96, 61, 63, - 64, 38, 92, 55, 26, 20, 71, 88, 75, 76, 67, 83, 72, 60, 245, 241, - 240, 111, 99, 115, 128, 142, 144, 157, 161, 166, 167, 161, 148, 138, 132, 18, - 9, 10, 16, 25, 36, 34, 51, 77, 52, 34, 46, 91, 89, 92, 171, 185, - 166, 118, 138, 165, 130, 134, 143, 155, 138, 139, 143, 154, 140, 144, 151, 146, - 150, 153, 151, 148, 143, 140, 139, 139, 143, 146, 147, 150, 153, 158, 158, 157, - 158, 151, 132, 139, 106, 104, 142, 136, 107, 76, 68, 83, 110, 127, 161, 138, - 140, 159, 142, 142, 140, 138, 136, 132, 123, 139, 95, 59, 80, 84, 81, 75, - 91, 71, 44, 51, 104, 110, 120, 110, 93, 115, 99, 67, 84, 69, 48, 106, - 108, 116, 104, 111, 107, 123, 143, 159, 166, 175, 201, 216, 222, 226, 229, 242, - 246, 248, 241, 178, 102, 53, 63, 53, 65, 55, 65, 61, 57, 56, 56, 56, - 60, 59, 67, 45, 92, 107, 99, 99, 102, 99, 104, 99, 93, 93, 56, 96, - 107, 99, 110, 103, 99, 100, 100, 107, 88, 53, 4, 91, 106, 108, 114, 111, - 111, 111, 111, 112, 85, 41, 53, 77, 112, 96, 244, 249, 245, 118, 104, 114, - 142, 154, 159, 167, 174, 179, 182, 181, 179, 170, 151, 144, 139, 127, 14, 16, - 22, 37, 61, 65, 71, 72, 80, 71, 72, 61, 46, 75, 104, 119, 132, 124, - 123, 116, 114, 91, 96, 89, 51, 116, 130, 135, 126, 127, 119, 120, 157, 158, - 131, 140, 143, 147, 148, 148, 142, 142, 144, 144, 142, 136, 138, 135, 132, 120, - 103, 52, 38, 40, 80, 84, 77, 85, 85, 87, 37, 103, 123, 131, 238, 246, - 244, 114, 104, 116, 131, 140, 151, 162, 173, 177, 179, 178, 165, 155, 126, 102, - 95, 112, 114, 127, 127, 128, 124, 124, 122, 120, 115, 115, 116, 116, 114, 115, - 112, 112, 111, 111, 108, 114, 124, 116, 116, 178, 127, 119, 120, 127, 126, 128, - 130, 128, 130, 131, 134, 134, 134, 134, 136, 138, 136, 144, 138, 139, 136, 134, - 139, 148, 153, 153, 153, 151, 150, 148, 146, 128, 72, 53, 46, 75, 44, 100, - 136, 136, 147, 146, 147, 146, 135, 127, 119, 111, 99, 95, 84, 81, 85, 87, - 96, 108, 114, 119, 130, 128, 135, 135, 136, 134, 136, 138, 140, 139, 136, 134, - 131, 140, 95, 34, 114, 140, 123, 124, 140, 144, 147, 143, 139, 123, 95, 123, - 108, 92, 118, 116, 157, 106, 114, 119, 120, 120, 123, 127, 126, 128, 127, 126, - 126, 136, 138, 140, 140, 134, 108, 126, 171, 142, 135, 146, 151, 155, 151, 158, - 159, 151, 157, 158, 150, 92, 65, 65, 79, 107, 126, 134, 146, 186, 191, 165, - 140, 140, 159, 171, 170, 170, 174, 174, 177, 177, 173, 155, 134, 104, 110, 102, - 128, 136, 136, 146, 151, 197, 198, 195, 165, 169, 155, 154, 154, 158, 155, 153, - 142, 142, 65, 57, 55, 64, 68, 75, 10, 46, 48, 53, 206, 224, 236, 142, - 123, 114, 134, 147, 162, 167, 169, 171, 178, 175, 173, 158, 150, 140, 131, 26, - 8, 6, 21, 38, 44, 44, 59, 63, 36, 68, 56, 48, 48, 49, 59, 42, - 38, 37, 36, 34, 32, 21, 46, 115, 130, 73, 72, 72, 73, 44, 55, 29, - 16, 68, 83, 75, 75, 67, 76, 67, 56, 248, 244, 240, 111, 100, 115, 130, - 146, 154, 166, 171, 170, 171, 163, 151, 138, 132, 14, 9, 8, 16, 33, 36, - 34, 40, 55, 53, 37, 36, 72, 79, 88, 199, 195, 132, 110, 120, 140, 138, - 158, 163, 143, 143, 153, 158, 148, 154, 150, 158, 157, 155, 167, 167, 170, 163, - 155, 153, 153, 159, 162, 161, 165, 165, 167, 169, 169, 167, 163, 146, 147, 148, - 142, 111, 64, 41, 29, 33, 44, 83, 118, 138, 178, 185, 185, 173, 177, 175, - 162, 142, 139, 131, 122, 111, 64, 59, 79, 77, 76, 77, 75, 59, 45, 96, - 97, 85, 108, 99, 100, 76, 76, 72, 57, 71, 103, 100, 142, 155, 183, 206, - 228, 232, 244, 245, 250, 249, 252, 252, 250, 250, 250, 250, 246, 222, 143, 99, - 68, 36, 57, 59, 60, 59, 59, 59, 60, 65, 63, 57, 60, 64, 57, 88, - 114, 108, 108, 110, 104, 111, 103, 91, 88, 59, 96, 111, 100, 103, 108, 103, - 118, 107, 97, 93, 51, 5, 96, 118, 106, 122, 118, 112, 118, 114, 106, 87, - 42, 56, 80, 110, 92, 244, 249, 245, 115, 104, 114, 139, 151, 158, 166, 171, - 175, 182, 181, 181, 173, 153, 146, 139, 128, 13, 18, 18, 37, 64, 67, 73, - 69, 69, 75, 68, 61, 57, 63, 100, 103, 107, 103, 104, 104, 87, 91, 93, - 89, 57, 87, 124, 127, 120, 119, 116, 115, 123, 106, 115, 179, 140, 132, 136, - 151, 154, 157, 157, 159, 159, 162, 153, 158, 127, 119, 104, 44, 34, 38, 71, - 69, 85, 89, 73, 84, 55, 96, 119, 131, 230, 248, 245, 114, 104, 115, 131, - 142, 151, 161, 173, 178, 179, 175, 165, 134, 76, 48, 45, 45, 83, 102, 115, - 114, 118, 116, 115, 115, 116, 115, 118, 119, 118, 114, 72, 83, 107, 104, 106, - 106, 107, 115, 116, 182, 183, 128, 112, 131, 142, 132, 132, 135, 135, 136, 139, - 140, 142, 143, 144, 144, 144, 138, 142, 135, 128, 150, 155, 158, 159, 154, 154, - 153, 148, 150, 143, 99, 52, 45, 45, 69, 46, 76, 130, 132, 132, 123, 107, - 88, 92, 93, 95, 77, 93, 92, 91, 91, 102, 95, 88, 84, 104, 123, 131, - 175, 178, 174, 155, 162, 174, 161, 161, 157, 146, 144, 132, 161, 118, 64, 57, - 122, 142, 127, 127, 128, 142, 144, 143, 110, 91, 92, 114, 119, 103, 118, 158, - 175, 115, 115, 124, 135, 131, 131, 134, 134, 132, 132, 134, 138, 144, 144, 146, - 144, 139, 106, 112, 143, 151, 154, 161, 161, 161, 158, 158, 158, 158, 157, 123, - 76, 68, 63, 63, 107, 111, 127, 135, 142, 194, 179, 148, 132, 143, 161, 169, - 175, 177, 181, 182, 182, 182, 175, 148, 107, 100, 102, 127, 135, 147, 142, 158, - 206, 204, 222, 171, 173, 161, 155, 158, 157, 158, 153, 139, 138, 59, 53, 52, - 45, 88, 87, 14, 20, 40, 46, 213, 222, 238, 144, 107, 116, 136, 151, 159, - 163, 166, 174, 177, 174, 170, 161, 143, 138, 128, 30, 8, 8, 22, 36, 37, - 44, 40, 49, 37, 73, 73, 46, 33, 33, 36, 33, 34, 30, 33, 34, 32, - 28, 51, 69, 91, 77, 17, 25, 21, 21, 20, 22, 14, 36, 61, 60, 51, - 51, 68, 59, 56, 248, 245, 241, 108, 100, 112, 128, 144, 157, 170, 173, 170, - 171, 165, 151, 138, 131, 14, 8, 9, 16, 18, 28, 30, 29, 34, 29, 32, - 41, 75, 88, 84, 202, 201, 175, 116, 119, 126, 143, 144, 151, 163, 161, 150, - 163, 154, 158, 157, 157, 163, 175, 178, 185, 190, 191, 186, 167, 165, 167, 174, - 173, 174, 174, 174, 175, 177, 174, 170, 151, 151, 150, 116, 64, 29, 30, 26, - 22, 30, 61, 91, 126, 182, 185, 199, 189, 183, 158, 178, 170, 157, 139, 126, - 123, 76, 49, 57, 73, 76, 75, 71, 72, 63, 56, 60, 67, 65, 69, 68, - 69, 69, 59, 88, 100, 130, 189, 222, 240, 245, 246, 249, 252, 255, 255, 255, - 253, 255, 255, 255, 253, 253, 250, 241, 182, 134, 103, 64, 33, 56, 53, 53, - 53, 57, 56, 59, 59, 64, 57, 64, 61, 59, 59, 76, 81, 79, 91, 85, - 88, 87, 85, 89, 56, 92, 99, 99, 87, 92, 92, 95, 89, 91, 77, 51, - 5, 89, 102, 106, 111, 106, 104, 104, 104, 92, 84, 37, 61, 75, 108, 87, - 244, 248, 244, 114, 100, 115, 140, 151, 159, 165, 167, 170, 179, 181, 181, 167, - 157, 146, 138, 126, 12, 17, 18, 37, 60, 60, 60, 69, 72, 71, 79, 73, - 69, 69, 76, 83, 76, 80, 84, 88, 81, 87, 93, 80, 52, 92, 119, 115, - 112, 112, 115, 115, 116, 112, 102, 183, 186, 132, 131, 138, 143, 153, 157, 161, - 161, 155, 159, 155, 132, 120, 104, 40, 33, 37, 57, 60, 71, 80, 65, 67, - 61, 67, 96, 127, 234, 246, 242, 119, 104, 115, 131, 143, 148, 159, 173, 179, - 178, 187, 154, 88, 55, 36, 29, 25, 46, 96, 140, 169, 174, 167, 126, 159, - 161, 158, 154, 128, 124, 119, 88, 63, 97, 103, 104, 103, 108, 112, 111, 170, - 193, 179, 120, 123, 139, 140, 142, 142, 144, 144, 146, 148, 148, 148, 148, 153, - 151, 148, 146, 147, 161, 159, 161, 158, 154, 142, 136, 128, 116, 114, 92, 57, - 44, 41, 45, 68, 46, 67, 77, 84, 77, 85, 92, 89, 99, 103, 106, 85, - 114, 108, 110, 104, 102, 100, 100, 100, 108, 126, 185, 194, 195, 187, 179, 179, - 181, 178, 171, 175, 165, 153, 144, 131, 134, 91, 34, 72, 142, 143, 123, 130, - 127, 124, 143, 127, 92, 85, 111, 118, 110, 122, 158, 183, 170, 112, 115, 134, - 136, 140, 140, 138, 142, 139, 138, 150, 155, 158, 155, 154, 148, 151, 159, 159, - 162, 162, 158, 155, 148, 142, 135, 131, 130, 110, 73, 59, 55, 64, 61, 97, - 100, 114, 120, 119, 159, 198, 174, 140, 132, 144, 161, 166, 174, 179, 182, 182, - 186, 183, 170, 132, 96, 114, 124, 138, 143, 142, 181, 221, 221, 197, 183, 178, - 165, 163, 166, 165, 155, 153, 138, 134, 55, 51, 48, 68, 85, 99, 5, 5, - 33, 46, 201, 224, 238, 134, 104, 114, 135, 151, 161, 165, 173, 174, 177, 169, - 162, 162, 144, 136, 130, 33, 6, 9, 22, 22, 38, 42, 36, 45, 40, 65, - 59, 32, 33, 32, 36, 32, 32, 30, 34, 33, 28, 26, 34, 22, 12, 10, - 10, 13, 10, 8, 10, 10, 14, 20, 21, 25, 32, 32, 38, 59, 57, 246, - 245, 240, 108, 99, 114, 134, 144, 157, 170, 177, 175, 167, 162, 148, 136, 126, - 13, 8, 8, 13, 12, 26, 29, 22, 24, 24, 22, 28, 41, 79, 84, 209, - 204, 201, 118, 112, 124, 140, 171, 170, 151, 162, 158, 159, 165, 169, 171, 175, - 178, 182, 186, 177, 161, 181, 190, 197, 189, 170, 186, 185, 183, 178, 190, 185, - 181, 185, 181, 187, 157, 153, 106, 49, 29, 22, 20, 18, 20, 52, 85, 122, - 189, 197, 170, 175, 191, 189, 167, 165, 169, 143, 131, 138, 85, 49, 49, 65, - 71, 69, 65, 67, 65, 71, 69, 65, 69, 69, 67, 72, 55, 99, 108, 154, - 225, 246, 248, 248, 250, 252, 253, 255, 255, 248, 241, 237, 237, 236, 232, 229, - 222, 218, 186, 148, 138, 110, 64, 60, 53, 59, 57, 57, 63, 60, 61, 63, - 63, 64, 65, 63, 61, 69, 69, 71, 72, 71, 73, 72, 72, 71, 71, 67, - 68, 59, 68, 68, 72, 56, 63, 61, 57, 49, 56, 8, 28, 51, 55, 59, - 57, 59, 56, 71, 63, 38, 21, 79, 63, 100, 95, 245, 248, 244, 115, 100, - 110, 136, 148, 159, 166, 171, 178, 179, 182, 173, 163, 154, 144, 136, 128, 13, - 18, 20, 44, 46, 51, 52, 49, 53, 49, 46, 53, 55, 52, 53, 65, 64, - 61, 61, 59, 60, 61, 59, 67, 76, 69, 77, 68, 65, 103, 108, 103, 107, - 111, 93, 162, 191, 179, 128, 131, 143, 143, 153, 157, 155, 155, 158, 157, 135, - 124, 95, 36, 30, 33, 56, 55, 60, 77, 76, 61, 59, 65, 95, 128, 241, - 248, 245, 119, 106, 116, 131, 142, 151, 162, 174, 178, 174, 165, 120, 56, 40, - 28, 36, 28, 44, 83, 157, 185, 135, 169, 161, 159, 163, 174, 148, 153, 127, - 123, 114, 59, 63, 87, 102, 103, 102, 115, 107, 139, 202, 199, 130, 119, 130, - 154, 148, 150, 150, 150, 151, 151, 151, 154, 154, 154, 158, 163, 166, 163, 163, - 161, 148, 118, 83, 63, 44, 40, 38, 41, 40, 36, 36, 40, 41, 63, 41, - 81, 72, 76, 77, 89, 110, 143, 197, 210, 220, 221, 218, 210, 199, 189, 131, - 120, 116, 116, 130, 195, 220, 173, 198, 191, 193, 190, 182, 186, 185, 178, 173, - 165, 151, 139, 155, 114, 40, 44, 95, 114, 120, 124, 124, 127, 132, 134, 110, - 81, 103, 122, 87, 112, 148, 191, 186, 123, 114, 123, 135, 147, 142, 142, 142, - 150, 153, 159, 163, 163, 163, 161, 159, 163, 162, 162, 158, 143, 114, 88, 63, - 52, 48, 45, 49, 51, 51, 56, 56, 48, 56, 57, 96, 104, 114, 122, 120, - 177, 190, 155, 128, 127, 150, 161, 167, 174, 178, 183, 187, 189, 183, 146, 103, - 93, 102, 120, 138, 139, 201, 220, 210, 210, 182, 171, 171, 170, 170, 167, 158, - 154, 144, 130, 49, 46, 46, 60, 84, 83, 20, 29, 20, 41, 193, 225, 221, - 132, 114, 115, 135, 150, 159, 166, 170, 174, 174, 159, 165, 155, 144, 139, 131, - 41, 9, 9, 12, 17, 18, 24, 46, 42, 37, 33, 36, 26, 21, 20, 18, - 16, 13, 13, 9, 13, 13, 24, 10, 32, 36, 37, 40, 44, 41, 46, 37, - 21, 12, 46, 89, 91, 69, 73, 72, 64, 59, 248, 245, 232, 110, 100, 112, - 132, 142, 157, 169, 177, 174, 169, 165, 148, 132, 130, 17, 9, 9, 10, 10, - 9, 17, 21, 22, 20, 21, 26, 36, 81, 87, 212, 213, 210, 120, 131, 120, - 136, 167, 170, 158, 161, 162, 171, 181, 181, 181, 179, 177, 185, 150, 93, 60, - 83, 157, 191, 191, 175, 167, 182, 183, 185, 183, 183, 186, 187, 190, 193, 161, - 158, 99, 45, 26, 22, 18, 18, 21, 53, 79, 115, 202, 204, 173, 195, 197, - 195, 173, 189, 179, 147, 135, 124, 106, 60, 45, 56, 51, 44, 37, 44, 41, - 41, 42, 45, 45, 45, 49, 63, 77, 119, 177, 241, 249, 252, 246, 253, 252, - 244, 226, 199, 175, 132, 119, 123, 116, 118, 123, 120, 116, 123, 139, 127, 134, - 126, 97, 73, 24, 21, 17, 16, 13, 13, 13, 10, 9, 12, 12, 6, 5, - 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 9, 10, 8, 2, - 2, 6, 5, 9, 9, 6, 26, 24, 26, 12, 28, 28, 26, 24, 29, 30, - 30, 72, 45, 44, 107, 93, 246, 249, 246, 119, 102, 111, 136, 150, 161, 167, - 177, 181, 181, 179, 169, 169, 150, 143, 139, 126, 10, 16, 21, 26, 17, 16, - 16, 17, 17, 18, 20, 21, 21, 26, 38, 79, 85, 100, 95, 103, 95, 99, - 93, 87, 84, 115, 122, 116, 81, 69, 71, 71, 97, 116, 107, 110, 202, 195, - 134, 130, 139, 143, 147, 150, 151, 159, 154, 154, 130, 124, 96, 34, 26, 32, - 48, 29, 44, 49, 52, 45, 59, 100, 93, 130, 241, 249, 245, 114, 103, 114, - 128, 140, 148, 162, 174, 178, 174, 153, 83, 45, 32, 32, 36, 25, 49, 96, - 191, 198, 169, 135, 166, 169, 158, 150, 138, 157, 131, 126, 118, 55, 57, 75, - 84, 93, 95, 114, 110, 127, 213, 205, 140, 119, 130, 144, 155, 155, 153, 153, - 151, 153, 153, 157, 158, 167, 171, 170, 166, 166, 158, 112, 68, 36, 30, 26, - 25, 26, 28, 29, 30, 33, 38, 41, 48, 73, 77, 73, 97, 107, 120, 158, - 202, 240, 245, 246, 248, 246, 248, 244, 244, 240, 240, 238, 236, 229, 233, 233, - 228, 214, 198, 191, 187, 187, 187, 186, 187, 185, 181, 178, 159, 148, 132, 132, - 85, 33, 59, 80, 95, 84, 96, 104, 103, 114, 116, 118, 119, 111, 85, 118, - 148, 202, 197, 134, 118, 120, 134, 142, 144, 144, 158, 163, 169, 169, 167, 165, - 169, 171, 167, 166, 162, 146, 103, 64, 37, 30, 28, 26, 29, 32, 34, 36, - 36, 38, 44, 60, 61, 60, 63, 63, 97, 102, 112, 138, 189, 177, 136, 124, - 138, 154, 162, 167, 175, 181, 186, 190, 190, 170, 120, 99, 107, 138, 142, 155, - 209, 212, 213, 214, 186, 175, 179, 171, 169, 169, 155, 155, 140, 135, 42, 38, - 38, 12, 10, 8, 115, 104, 97, 48, 185, 222, 224, 142, 114, 114, 132, 151, - 159, 165, 170, 171, 167, 167, 166, 146, 142, 139, 132, 48, 10, 9, 8, 24, - 22, 18, 20, 24, 30, 20, 29, 45, 56, 53, 65, 71, 76, 81, 80, 71, - 49, 14, 56, 64, 91, 96, 89, 79, 80, 76, 55, 26, 9, 76, 88, 84, - 81, 88, 87, 67, 65, 250, 240, 242, 110, 97, 110, 132, 142, 157, 169, 173, - 171, 166, 165, 148, 138, 132, 18, 9, 9, 14, 10, 16, 26, 26, 34, 4, - 29, 25, 79, 80, 95, 220, 217, 217, 135, 131, 136, 127, 161, 169, 163, 161, - 175, 185, 185, 185, 182, 175, 177, 162, 93, 34, 34, 60, 112, 181, 204, 185, - 163, 179, 186, 183, 186, 189, 190, 193, 194, 193, 166, 163, 108, 51, 34, 25, - 24, 22, 24, 56, 91, 110, 206, 209, 178, 177, 181, 198, 197, 194, 179, 159, - 140, 128, 132, 81, 42, 49, 59, 64, 60, 65, 91, 99, 107, 102, 110, 104, - 93, 108, 148, 193, 245, 248, 249, 250, 248, 228, 193, 150, 124, 119, 111, 104, - 112, 116, 116, 104, 122, 120, 118, 112, 131, 132, 134, 130, 126, 84, 92, 72, - 69, 72, 79, 73, 72, 71, 65, 65, 56, 60, 87, 111, 112, 128, 119, 112, - 130, 132, 116, 89, 83, 93, 142, 114, 116, 150, 146, 115, 107, 107, 131, 97, - 14, 0, 42, 81, 99, 65, 68, 64, 63, 63, 40, 52, 40, 71, 108, 107, - 103, 246, 249, 245, 118, 100, 115, 138, 151, 159, 167, 178, 178, 181, 175, 170, - 167, 148, 140, 138, 130, 12, 21, 21, 33, 63, 81, 87, 95, 103, 102, 100, - 89, 96, 97, 95, 111, 136, 127, 130, 114, 120, 123, 124, 127, 115, 128, 131, - 130, 108, 100, 87, 85, 77, 103, 104, 104, 209, 204, 151, 130, 135, 146, 142, - 146, 155, 157, 154, 153, 131, 120, 92, 32, 26, 33, 49, 61, 69, 85, 88, - 99, 99, 83, 120, 135, 241, 249, 246, 111, 102, 115, 131, 142, 151, 163, 175, - 175, 186, 142, 55, 38, 34, 37, 37, 22, 67, 97, 202, 204, 191, 135, 159, - 162, 162, 146, 135, 136, 131, 128, 118, 55, 51, 65, 92, 89, 93, 104, 102, - 118, 216, 213, 197, 123, 122, 136, 146, 158, 163, 154, 155, 155, 162, 162, 170, - 175, 171, 169, 167, 154, 95, 44, 30, 25, 26, 29, 33, 36, 36, 38, 38, - 44, 46, 49, 69, 60, 81, 99, 108, 147, 217, 241, 244, 246, 246, 248, 246, - 246, 246, 246, 245, 245, 242, 242, 240, 238, 238, 237, 234, 228, 175, 174, 191, - 193, 199, 182, 194, 187, 183, 181, 169, 154, 138, 146, 108, 38, 51, 72, 76, - 77, 95, 83, 75, 68, 61, 63, 73, 76, 87, 126, 143, 206, 210, 181, 116, - 116, 126, 139, 144, 154, 167, 169, 167, 170, 171, 169, 170, 173, 167, 162, 147, - 91, 40, 33, 26, 26, 28, 30, 29, 30, 32, 63, 59, 42, 46, 48, 57, - 80, 65, 68, 53, 76, 106, 114, 183, 179, 147, 124, 123, 139, 158, 165, 171, - 177, 183, 189, 190, 190, 147, 108, 102, 134, 134, 177, 216, 214, 228, 218, 186, - 178, 178, 170, 170, 169, 158, 157, 142, 132, 48, 42, 41, 32, 81, 91, 68, - 44, 55, 42, 140, 216, 226, 147, 115, 114, 132, 147, 159, 165, 170, 171, 165, - 166, 163, 146, 140, 139, 131, 56, 12, 10, 10, 24, 29, 38, 37, 38, 25, - 52, 81, 100, 92, 95, 100, 100, 95, 85, 95, 84, 53, 13, 55, 124, 107, - 108, 87, 89, 93, 64, 55, 25, 12, 85, 83, 67, 57, 61, 77, 67, 68, - 250, 242, 241, 110, 96, 111, 135, 140, 157, 170, 175, 173, 167, 163, 150, 139, - 132, 18, 10, 9, 12, 12, 22, 30, 20, 33, 10, 24, 29, 76, 91, 102, - 218, 221, 218, 136, 111, 118, 127, 139, 167, 166, 170, 182, 187, 187, 187, 186, - 179, 175, 126, 46, 29, 32, 37, 64, 158, 206, 193, 165, 166, 181, 195, 197, - 199, 201, 204, 204, 198, 193, 171, 139, 71, 36, 28, 26, 22, 42, 69, 95, - 104, 208, 214, 193, 175, 194, 198, 183, 195, 178, 173, 143, 134, 126, 104, 51, - 41, 57, 57, 91, 79, 84, 103, 107, 122, 97, 112, 119, 153, 229, 246, 248, - 248, 252, 236, 189, 142, 119, 115, 114, 115, 127, 77, 49, 44, 46, 57, 110, - 116, 124, 161, 183, 189, 181, 135, 132, 120, 99, 76, 100, 99, 80, 84, 77, - 79, 73, 92, 107, 72, 110, 134, 131, 131, 89, 118, 138, 142, 120, 115, 99, - 88, 131, 134, 143, 140, 143, 132, 134, 131, 119, 116, 81, 0, 96, 93, 97, - 106, 95, 92, 95, 79, 61, 60, 36, 108, 108, 103, 110, 249, 248, 245, 110, - 104, 116, 140, 150, 161, 169, 175, 177, 183, 173, 166, 165, 147, 140, 138, 126, - 12, 18, 40, 55, 85, 84, 92, 95, 97, 103, 100, 107, 96, 104, 139, 127, - 122, 120, 124, 130, 120, 120, 130, 162, 170, 210, 199, 153, 123, 107, 100, 103, - 100, 102, 103, 93, 213, 213, 185, 130, 134, 140, 144, 142, 146, 161, 151, 159, - 131, 122, 91, 32, 28, 44, 57, 87, 95, 104, 106, 111, 73, 100, 142, 174, - 242, 248, 242, 116, 104, 115, 132, 144, 151, 167, 175, 174, 167, 123, 49, 38, - 29, 37, 44, 26, 73, 108, 209, 209, 199, 163, 157, 158, 165, 147, 150, 139, - 132, 136, 122, 53, 49, 52, 80, 93, 97, 103, 108, 120, 217, 218, 205, 122, - 120, 128, 142, 153, 161, 162, 162, 174, 178, 177, 177, 178, 170, 169, 154, 99, - 37, 25, 25, 26, 32, 48, 41, 49, 48, 51, 52, 51, 68, 71, 84, 59, - 81, 99, 138, 230, 244, 244, 249, 248, 245, 236, 224, 204, 201, 190, 193, 197, - 208, 212, 214, 224, 226, 229, 226, 230, 217, 181, 206, 205, 216, 216, 205, 187, - 191, 185, 177, 158, 146, 139, 126, 72, 45, 57, 103, 104, 112, 124, 127, 118, - 111, 122, 128, 127, 130, 118, 158, 206, 213, 197, 118, 116, 124, 138, 148, 157, - 169, 173, 174, 173, 173, 171, 174, 173, 167, 144, 91, 36, 29, 25, 28, 30, - 37, 36, 40, 59, 28, 55, 88, 99, 85, 111, 103, 110, 124, 127, 111, 112, - 111, 115, 181, 186, 166, 126, 119, 132, 150, 162, 166, 174, 179, 186, 193, 197, - 186, 142, 99, 135, 144, 194, 216, 216, 216, 201, 193, 185, 177, 174, 175, 169, - 158, 157, 142, 135, 44, 41, 40, 63, 91, 91, 65, 56, 55, 64, 77, 210, - 216, 178, 115, 112, 127, 148, 158, 163, 169, 167, 166, 163, 153, 134, 140, 138, - 132, 83, 17, 10, 17, 30, 34, 37, 30, 37, 16, 81, 93, 100, 95, 88, - 114, 106, 110, 99, 102, 77, 51, 12, 71, 134, 128, 134, 127, 115, 88, 75, - 46, 24, 13, 79, 84, 65, 65, 61, 73, 63, 63, 248, 236, 242, 107, 95, - 111, 135, 143, 155, 170, 174, 177, 165, 163, 151, 140, 134, 20, 12, 10, 10, - 5, 25, 25, 13, 24, 10, 37, 18, 95, 91, 142, 225, 224, 221, 119, 111, - 118, 142, 142, 153, 166, 177, 186, 187, 187, 185, 182, 178, 169, 95, 33, 29, - 30, 36, 65, 130, 208, 204, 170, 159, 177, 183, 197, 202, 206, 206, 205, 205, - 198, 175, 163, 92, 44, 26, 28, 24, 57, 80, 96, 107, 201, 220, 206, 181, - 195, 197, 193, 195, 179, 178, 148, 139, 130, 123, 73, 42, 56, 53, 55, 71, - 104, 89, 96, 92, 102, 100, 119, 209, 248, 248, 249, 250, 225, 166, 122, 116, - 116, 120, 140, 127, 69, 41, 36, 42, 37, 56, 108, 187, 199, 191, 169, 175, - 175, 181, 136, 134, 126, 100, 59, 84, 83, 93, 79, 79, 79, 81, 73, 77, - 147, 143, 138, 131, 131, 126, 118, 124, 111, 97, 84, 108, 147, 144, 135, 134, - 128, 132, 132, 140, 130, 127, 95, 25, 104, 89, 79, 72, 71, 75, 79, 93, - 72, 55, 37, 107, 119, 110, 138, 249, 248, 244, 111, 104, 116, 139, 148, 158, - 167, 175, 178, 182, 170, 165, 148, 136, 139, 136, 126, 13, 24, 40, 72, 80, - 97, 97, 106, 89, 95, 100, 91, 60, 108, 138, 128, 120, 115, 124, 120, 124, - 126, 186, 229, 220, 220, 209, 178, 126, 110, 92, 111, 99, 97, 104, 91, 212, - 214, 201, 130, 131, 143, 150, 144, 144, 154, 146, 144, 131, 124, 81, 32, 28, - 53, 71, 92, 96, 104, 115, 93, 72, 99, 143, 179, 242, 246, 244, 123, 107, - 118, 132, 147, 157, 169, 175, 171, 162, 95, 48, 34, 33, 40, 45, 28, 80, - 119, 208, 212, 208, 130, 151, 155, 162, 134, 139, 144, 131, 135, 119, 52, 45, - 52, 72, 80, 89, 108, 110, 122, 222, 221, 209, 120, 119, 126, 139, 151, 159, - 165, 177, 178, 182, 182, 179, 175, 173, 158, 96, 40, 25, 28, 29, 36, 45, - 41, 55, 67, 76, 79, 75, 80, 76, 83, 89, 72, 91, 114, 193, 244, 246, - 246, 245, 237, 205, 181, 157, 155, 154, 158, 161, 165, 169, 174, 178, 181, 185, - 189, 199, 202, 210, 206, 206, 204, 202, 206, 208, 205, 197, 187, 178, 162, 153, - 135, 131, 95, 42, 63, 92, 100, 106, 120, 93, 124, 130, 122, 120, 114, 115, - 119, 153, 210, 217, 206, 118, 115, 124, 138, 147, 161, 169, 173, 173, 174, 173, - 175, 174, 171, 157, 106, 44, 30, 26, 30, 34, 40, 46, 51, 73, 64, 28, - 89, 112, 120, 118, 115, 111, 110, 107, 128, 132, 135, 72, 116, 166, 181, 182, - 140, 118, 126, 143, 155, 162, 170, 177, 183, 189, 204, 201, 193, 155, 142, 175, - 213, 217, 218, 222, 205, 201, 189, 189, 178, 175, 173, 161, 157, 146, 132, 44, - 38, 37, 85, 85, 108, 10, 45, 55, 40, 51, 190, 216, 199, 116, 110, 123, - 147, 157, 162, 166, 169, 163, 161, 143, 140, 140, 136, 131, 102, 20, 12, 17, - 28, 30, 33, 26, 44, 21, 84, 110, 103, 108, 106, 99, 103, 102, 106, 89, - 73, 55, 13, 77, 127, 163, 193, 163, 136, 104, 89, 49, 25, 13, 72, 79, - 69, 83, 63, 72, 60, 73, 245, 242, 241, 99, 96, 111, 132, 140, 154, 169, - 175, 174, 167, 165, 154, 143, 132, 16, 12, 9, 8, 13, 25, 25, 14, 16, - 13, 29, 17, 81, 96, 142, 229, 229, 224, 123, 123, 118, 127, 143, 162, 167, - 179, 185, 190, 190, 186, 182, 175, 150, 53, 29, 25, 30, 48, 53, 110, 199, - 210, 179, 157, 159, 179, 190, 199, 205, 206, 208, 208, 204, 198, 177, 130, 55, - 32, 26, 30, 59, 81, 96, 97, 197, 224, 218, 185, 179, 195, 183, 194, 179, - 174, 155, 143, 135, 138, 91, 40, 44, 53, 51, 69, 93, 103, 108, 102, 92, - 110, 144, 234, 244, 246, 248, 230, 151, 119, 119, 119, 126, 146, 147, 89, 56, - 34, 34, 41, 38, 60, 124, 205, 198, 170, 174, 179, 177, 183, 143, 138, 120, - 114, 91, 55, 72, 68, 75, 68, 79, 79, 68, 30, 138, 147, 124, 139, 132, - 139, 147, 143, 123, 96, 83, 103, 151, 139, 136, 130, 128, 132, 131, 127, 130, - 136, 57, 26, 71, 92, 85, 73, 73, 72, 76, 85, 57, 55, 34, 110, 119, - 106, 124, 249, 249, 246, 115, 106, 116, 139, 151, 157, 167, 175, 179, 183, 170, - 166, 142, 135, 136, 136, 124, 13, 24, 26, 44, 80, 95, 110, 106, 95, 110, - 93, 99, 64, 96, 142, 120, 132, 120, 112, 126, 122, 132, 212, 229, 216, 218, - 199, 157, 122, 95, 83, 93, 102, 99, 106, 95, 218, 216, 208, 132, 132, 142, - 146, 148, 151, 140, 151, 143, 128, 123, 71, 32, 28, 52, 77, 91, 96, 103, - 122, 97, 65, 97, 144, 175, 240, 245, 242, 126, 108, 120, 132, 144, 153, 169, - 174, 171, 151, 73, 41, 34, 37, 44, 51, 33, 81, 116, 209, 213, 236, 132, - 153, 153, 154, 146, 138, 135, 131, 130, 118, 46, 45, 46, 75, 76, 89, 99, - 112, 124, 226, 224, 216, 119, 116, 124, 136, 148, 158, 163, 175, 181, 181, 181, - 177, 173, 165, 122, 49, 26, 28, 28, 34, 38, 38, 51, 71, 87, 88, 81, - 84, 83, 85, 93, 77, 91, 92, 128, 228, 244, 244, 238, 224, 187, 151, 139, - 140, 146, 154, 163, 173, 181, 191, 201, 205, 208, 209, 208, 191, 195, 199, 202, - 204, 206, 209, 209, 213, 210, 191, 187, 173, 162, 154, 139, 138, 112, 48, 56, - 80, 93, 111, 115, 115, 116, 85, 110, 131, 126, 122, 140, 150, 213, 222, 212, - 119, 115, 124, 139, 147, 159, 169, 173, 174, 174, 178, 177, 173, 163, 123, 55, - 33, 25, 30, 38, 48, 48, 51, 56, 69, 60, 24, 99, 122, 122, 124, 119, - 131, 122, 123, 132, 134, 134, 80, 122, 162, 174, 185, 154, 122, 118, 134, 143, - 161, 167, 175, 179, 189, 195, 208, 206, 204, 194, 213, 216, 216, 225, 225, 206, - 195, 193, 187, 181, 179, 171, 161, 158, 146, 135, 40, 38, 37, 63, 85, 106, - 92, 38, 41, 40, 34, 108, 212, 206, 120, 108, 118, 136, 151, 159, 165, 167, - 166, 163, 154, 136, 142, 134, 135, 115, 26, 14, 18, 28, 29, 37, 29, 46, - 17, 60, 95, 102, 102, 96, 100, 99, 112, 96, 95, 75, 55, 16, 106, 153, - 214, 220, 230, 189, 138, 104, 64, 25, 13, 72, 79, 77, 65, 65, 67, 63, - 64, 245, 245, 234, 103, 95, 107, 127, 139, 153, 169, 175, 174, 167, 165, 154, - 143, 134, 17, 9, 14, 9, 12, 22, 28, 28, 26, 6, 25, 25, 80, 91, - 110, 230, 229, 228, 134, 124, 131, 127, 148, 146, 170, 175, 187, 182, 190, 187, - 177, 173, 128, 41, 28, 22, 32, 41, 56, 91, 190, 214, 195, 158, 154, 173, - 186, 195, 199, 205, 208, 209, 206, 202, 183, 163, 73, 34, 25, 29, 59, 79, - 95, 97, 179, 228, 224, 193, 194, 191, 195, 194, 185, 170, 157, 146, 135, 128, - 107, 48, 41, 53, 49, 64, 97, 110, 93, 93, 106, 104, 191, 240, 246, 248, - 238, 163, 122, 122, 126, 132, 150, 147, 153, 77, 52, 34, 24, 45, 45, 76, - 103, 210, 205, 173, 175, 179, 173, 173, 175, 140, 132, 127, 100, 55, 56, 67, - 71, 67, 68, 77, 75, 55, 142, 155, 130, 139, 134, 139, 147, 131, 118, 114, - 72, 119, 151, 143, 127, 131, 127, 136, 134, 132, 134, 128, 81, 0, 89, 87, - 76, 69, 76, 91, 96, 81, 55, 55, 30, 100, 116, 100, 123, 250, 248, 240, - 114, 104, 118, 138, 146, 162, 169, 173, 179, 181, 169, 162, 151, 142, 136, 135, - 120, 14, 25, 29, 51, 81, 102, 108, 104, 96, 106, 93, 92, 60, 106, 130, - 115, 123, 127, 122, 119, 119, 136, 225, 229, 233, 229, 191, 131, 107, 77, 75, - 95, 89, 96, 102, 97, 222, 221, 213, 136, 134, 146, 147, 151, 147, 142, 157, - 139, 124, 120, 60, 32, 28, 48, 77, 92, 92, 102, 112, 106, 59, 120, 140, - 146, 237, 244, 240, 124, 108, 119, 132, 143, 151, 170, 173, 169, 150, 56, 36, - 34, 38, 44, 46, 30, 80, 118, 210, 214, 212, 151, 143, 148, 148, 144, 138, - 136, 127, 126, 112, 42, 40, 42, 72, 80, 87, 103, 108, 118, 230, 226, 221, - 122, 115, 126, 138, 146, 157, 163, 175, 181, 181, 178, 167, 169, 144, 64, 29, - 28, 30, 34, 49, 48, 40, 87, 96, 95, 93, 92, 95, 92, 97, 92, 88, - 83, 108, 198, 225, 240, 229, 206, 167, 140, 130, 138, 148, 162, 174, 182, 190, - 198, 209, 218, 220, 222, 224, 222, 218, 205, 201, 204, 198, 197, 194, 214, 214, - 216, 194, 187, 170, 166, 157, 142, 138, 120, 61, 49, 71, 106, 106, 127, 114, - 110, 84, 107, 106, 120, 118, 108, 143, 210, 226, 218, 119, 116, 124, 139, 146, - 161, 167, 171, 174, 175, 177, 173, 169, 143, 63, 33, 29, 32, 41, 49, 52, - 53, 57, 60, 72, 64, 24, 102, 127, 134, 119, 120, 126, 111, 134, 139, 128, - 136, 72, 120, 151, 165, 166, 174, 130, 118, 120, 138, 155, 165, 171, 177, 183, - 194, 202, 209, 212, 210, 214, 217, 216, 229, 218, 202, 195, 194, 187, 181, 174, - 171, 161, 158, 144, 132, 36, 36, 33, 55, 118, 124, 84, 20, 36, 45, 41, - 60, 193, 206, 132, 108, 116, 131, 148, 157, 161, 165, 171, 173, 165, 154, 131, - 131, 134, 122, 41, 12, 16, 21, 25, 38, 30, 40, 37, 36, 91, 103, 103, - 107, 100, 100, 103, 102, 87, 77, 59, 26, 144, 191, 232, 214, 210, 206, 217, - 138, 89, 29, 13, 65, 69, 73, 59, 55, 61, 53, 61, 246, 245, 238, 107, - 97, 104, 122, 138, 155, 167, 177, 175, 167, 165, 154, 143, 131, 14, 10, 12, - 12, 10, 21, 25, 33, 30, 28, 22, 29, 72, 83, 99, 230, 230, 228, 134, - 110, 119, 130, 139, 143, 161, 173, 183, 189, 191, 186, 174, 165, 104, 33, 25, - 22, 32, 48, 61, 84, 178, 221, 205, 162, 150, 163, 181, 189, 198, 201, 205, - 208, 209, 206, 199, 182, 106, 38, 28, 29, 59, 80, 85, 89, 151, 226, 226, - 197, 179, 191, 197, 185, 174, 155, 150, 147, 140, 130, 120, 67, 41, 48, 46, - 64, 96, 111, 99, 97, 102, 93, 206, 244, 246, 245, 195, 130, 123, 130, 135, - 136, 151, 155, 155, 71, 34, 30, 28, 38, 44, 64, 104, 214, 212, 190, 173, - 178, 175, 173, 178, 144, 140, 127, 97, 46, 49, 69, 57, 65, 72, 81, 57, - 85, 134, 140, 131, 124, 123, 131, 128, 131, 115, 95, 55, 127, 151, 143, 127, - 135, 127, 135, 134, 132, 126, 126, 75, 0, 92, 84, 81, 69, 75, 64, 57, - 53, 64, 56, 32, 103, 114, 107, 119, 248, 246, 233, 110, 104, 119, 140, 150, - 161, 169, 175, 174, 182, 181, 170, 159, 144, 131, 131, 118, 14, 25, 34, 64, - 80, 96, 108, 108, 112, 111, 91, 97, 60, 100, 131, 115, 111, 123, 110, 123, - 119, 144, 226, 234, 233, 183, 132, 123, 84, 71, 75, 88, 87, 87, 96, 97, - 224, 225, 220, 139, 135, 144, 151, 165, 154, 153, 155, 128, 124, 116, 46, 29, - 29, 48, 77, 89, 93, 102, 112, 106, 52, 128, 142, 126, 233, 242, 238, 126, - 110, 119, 132, 146, 153, 170, 170, 165, 140, 49, 36, 36, 41, 41, 41, 34, - 76, 124, 214, 220, 210, 146, 140, 144, 150, 143, 139, 138, 136, 122, 108, 38, - 37, 40, 68, 71, 76, 100, 116, 116, 232, 232, 225, 122, 116, 126, 136, 146, - 157, 165, 170, 181, 178, 173, 169, 159, 107, 40, 28, 30, 33, 40, 41, 38, - 42, 72, 104, 130, 130, 127, 127, 119, 102, 79, 96, 108, 153, 228, 237, 222, - 187, 150, 130, 130, 142, 153, 163, 177, 183, 191, 199, 206, 216, 208, 165, 139, - 162, 204, 224, 222, 209, 201, 197, 205, 205, 216, 212, 212, 193, 185, 173, 167, - 155, 140, 136, 123, 85, 49, 59, 91, 100, 126, 124, 110, 80, 107, 108, 122, - 119, 96, 147, 217, 229, 222, 122, 115, 126, 139, 146, 161, 167, 173, 175, 177, - 177, 170, 158, 106, 41, 33, 32, 38, 51, 56, 59, 57, 61, 68, 77, 69, - 26, 108, 135, 131, 123, 115, 134, 131, 139, 143, 120, 134, 63, 123, 139, 155, - 165, 182, 165, 119, 111, 131, 148, 162, 169, 175, 182, 194, 194, 201, 208, 205, - 206, 220, 224, 220, 209, 201, 198, 193, 189, 179, 173, 171, 159, 157, 143, 131, - 32, 34, 34, 61, 85, 104, 63, 77, 49, 32, 29, 28, 114, 202, 161, 111, - 112, 124, 142, 151, 158, 165, 174, 169, 170, 159, 130, 127, 135, 130, 61, 16, - 12, 26, 22, 33, 32, 42, 34, 30, 84, 100, 107, 103, 107, 107, 106, 103, - 91, 80, 56, 26, 159, 209, 229, 222, 226, 209, 181, 140, 91, 26, 14, 65, - 81, 72, 73, 59, 63, 55, 80, 245, 246, 241, 112, 97, 103, 118, 143, 154, - 167, 174, 174, 170, 165, 154, 144, 134, 20, 13, 6, 12, 13, 18, 18, 30, - 30, 38, 13, 10, 72, 80, 97, 229, 232, 226, 120, 108, 119, 134, 128, 132, - 148, 166, 178, 186, 185, 182, 169, 154, 76, 29, 26, 20, 34, 63, 53, 80, - 158, 222, 213, 166, 146, 154, 174, 183, 191, 197, 199, 204, 209, 209, 202, 189, - 148, 52, 32, 25, 53, 76, 84, 91, 127, 224, 229, 202, 181, 191, 191, 182, - 163, 153, 146, 151, 147, 132, 131, 83, 40, 41, 48, 61, 95, 115, 95, 85, - 88, 102, 216, 238, 244, 242, 163, 124, 130, 136, 140, 144, 157, 158, 161, 65, - 36, 30, 21, 40, 44, 64, 96, 213, 218, 210, 177, 178, 178, 174, 181, 150, - 144, 124, 96, 40, 41, 55, 64, 57, 67, 69, 67, 72, 142, 138, 134, 128, - 128, 130, 127, 136, 114, 84, 72, 99, 136, 142, 131, 134, 134, 132, 135, 132, - 134, 123, 75, 21, 91, 83, 81, 65, 73, 83, 59, 59, 71, 49, 32, 112, - 115, 107, 123, 246, 244, 189, 106, 106, 118, 139, 146, 157, 163, 173, 174, 182, - 182, 177, 166, 150, 132, 131, 123, 16, 28, 37, 73, 72, 97, 102, 106, 111, - 99, 95, 87, 57, 114, 123, 114, 116, 120, 115, 123, 123, 151, 236, 237, 232, - 153, 123, 107, 75, 65, 73, 88, 84, 87, 100, 107, 222, 226, 220, 140, 134, - 148, 170, 170, 167, 162, 154, 124, 124, 116, 42, 30, 30, 49, 75, 89, 95, - 104, 102, 87, 52, 92, 139, 151, 233, 241, 240, 128, 108, 120, 131, 144, 154, - 171, 171, 166, 134, 48, 34, 36, 45, 45, 46, 37, 75, 123, 214, 220, 233, - 126, 138, 139, 147, 138, 143, 146, 138, 118, 97, 38, 37, 40, 72, 68, 73, - 99, 102, 119, 236, 233, 224, 120, 116, 127, 138, 147, 158, 166, 170, 179, 175, - 169, 166, 146, 65, 32, 30, 33, 38, 49, 53, 38, 88, 99, 127, 123, 123, - 126, 132, 120, 91, 79, 99, 124, 216, 233, 230, 205, 140, 118, 130, 140, 153, - 165, 175, 182, 189, 194, 204, 210, 210, 127, 95, 89, 99, 128, 170, 225, 217, - 210, 198, 206, 214, 217, 217, 205, 189, 185, 177, 169, 154, 140, 131, 127, 96, - 53, 67, 91, 102, 115, 115, 110, 79, 110, 114, 120, 119, 103, 143, 226, 230, - 225, 122, 116, 127, 139, 146, 159, 167, 171, 175, 178, 173, 165, 143, 71, 33, - 29, 37, 52, 57, 57, 61, 61, 65, 73, 83, 76, 29, 115, 142, 135, 140, - 138, 136, 139, 142, 118, 127, 132, 65, 123, 136, 155, 161, 175, 181, 128, 110, - 126, 142, 158, 166, 174, 181, 189, 195, 197, 198, 197, 197, 198, 205, 208, 208, - 205, 201, 194, 186, 181, 173, 170, 162, 158, 144, 126, 30, 32, 30, 73, 60, - 103, 64, 59, 60, 22, 32, 30, 63, 181, 186, 114, 111, 120, 131, 148, 159, - 166, 175, 171, 173, 159, 127, 128, 135, 131, 93, 20, 14, 16, 18, 24, 37, - 41, 41, 29, 67, 103, 103, 99, 106, 102, 106, 102, 89, 76, 63, 21, 177, - 217, 228, 225, 186, 165, 130, 100, 87, 24, 14, 42, 75, 79, 80, 53, 61, - 55, 67, 245, 246, 242, 112, 100, 100, 119, 136, 151, 166, 173, 174, 171, 161, - 151, 146, 131, 18, 14, 17, 12, 14, 29, 21, 21, 26, 33, 21, 22, 63, - 75, 89, 226, 237, 230, 132, 120, 119, 126, 127, 131, 138, 154, 167, 185, 185, - 170, 166, 147, 57, 29, 22, 20, 34, 53, 49, 69, 143, 218, 217, 182, 143, - 146, 166, 177, 183, 190, 193, 197, 202, 206, 204, 190, 177, 83, 32, 26, 52, - 67, 83, 88, 112, 220, 229, 205, 179, 190, 194, 174, 161, 139, 135, 138, 144, - 136, 132, 104, 49, 37, 48, 57, 92, 102, 93, 87, 100, 104, 217, 237, 245, - 225, 148, 128, 132, 140, 139, 155, 161, 165, 167, 61, 37, 33, 26, 40, 49, - 56, 91, 214, 221, 217, 179, 178, 182, 175, 178, 153, 142, 124, 95, 37, 37, - 52, 52, 49, 57, 63, 25, 75, 135, 131, 132, 134, 132, 127, 126, 143, 115, - 80, 64, 127, 148, 130, 135, 138, 143, 148, 142, 132, 130, 130, 55, 26, 68, - 79, 80, 64, 71, 60, 59, 61, 56, 55, 33, 107, 115, 107, 118, 245, 242, - 171, 103, 102, 116, 128, 139, 150, 159, 171, 174, 183, 181, 177, 166, 151, 131, - 132, 123, 17, 29, 29, 53, 71, 81, 102, 107, 107, 100, 95, 93, 55, 92, - 120, 111, 111, 111, 110, 114, 123, 181, 246, 237, 222, 135, 119, 100, 61, 64, - 69, 84, 80, 85, 97, 106, 225, 226, 220, 140, 135, 147, 171, 163, 169, 157, - 158, 123, 124, 115, 44, 30, 30, 52, 76, 88, 96, 95, 96, 88, 44, 92, - 142, 147, 232, 240, 238, 124, 110, 116, 131, 146, 155, 173, 167, 170, 132, 44, - 34, 36, 48, 40, 57, 37, 72, 114, 212, 220, 214, 139, 132, 136, 146, 140, - 140, 143, 136, 118, 91, 36, 34, 38, 67, 69, 76, 92, 107, 132, 237, 237, - 226, 120, 115, 126, 136, 147, 158, 166, 171, 177, 173, 169, 163, 118, 48, 32, - 32, 37, 42, 48, 41, 28, 96, 104, 130, 140, 134, 119, 136, 119, 107, 95, - 108, 167, 228, 230, 224, 175, 115, 123, 138, 148, 163, 174, 177, 186, 187, 197, - 202, 213, 178, 99, 71, 59, 63, 79, 127, 208, 224, 216, 205, 195, 216, 216, - 214, 213, 199, 186, 179, 167, 154, 138, 124, 127, 104, 56, 61, 85, 119, 106, - 114, 115, 75, 107, 112, 119, 112, 93, 148, 229, 236, 226, 123, 118, 126, 138, - 144, 159, 166, 169, 173, 173, 167, 162, 120, 53, 34, 33, 45, 56, 63, 63, - 63, 64, 71, 76, 77, 77, 28, 110, 138, 140, 140, 142, 136, 139, 140, 136, - 130, 128, 80, 128, 131, 142, 148, 159, 181, 146, 108, 116, 136, 153, 163, 171, - 178, 186, 193, 199, 199, 202, 201, 198, 197, 201, 210, 202, 202, 194, 187, 178, - 174, 173, 162, 157, 142, 128, 28, 30, 30, 53, 63, 102, 20, 22, 33, 45, - 25, 22, 32, 107, 181, 119, 107, 111, 122, 144, 157, 165, 170, 175, 169, 154, - 134, 130, 136, 131, 112, 28, 17, 21, 21, 21, 37, 28, 44, 29, 61, 91, - 99, 108, 106, 111, 103, 97, 83, 80, 65, 24, 175, 226, 234, 226, 173, 123, - 92, 87, 65, 20, 14, 30, 68, 76, 76, 59, 56, 52, 69, 244, 245, 238, - 110, 97, 103, 123, 138, 147, 166, 170, 174, 169, 162, 153, 147, 128, 20, 17, - 16, 12, 16, 24, 21, 12, 22, 24, 26, 32, 51, 83, 107, 229, 234, 232, - 132, 124, 128, 123, 124, 128, 142, 157, 153, 162, 165, 158, 161, 139, 40, 25, - 20, 20, 32, 37, 52, 68, 102, 210, 217, 191, 143, 140, 157, 169, 177, 179, - 183, 189, 197, 202, 202, 198, 189, 110, 37, 25, 52, 61, 80, 85, 97, 213, - 228, 212, 183, 189, 194, 174, 167, 155, 154, 150, 136, 138, 128, 114, 59, 40, - 44, 42, 79, 96, 87, 84, 99, 97, 217, 244, 245, 194, 139, 132, 136, 143, - 142, 154, 162, 167, 169, 61, 34, 32, 22, 37, 49, 71, 85, 210, 222, 222, - 179, 183, 181, 173, 181, 155, 142, 127, 89, 37, 32, 40, 46, 48, 55, 67, - 41, 104, 136, 142, 138, 131, 139, 127, 131, 116, 114, 110, 59, 120, 142, 148, - 146, 153, 146, 143, 136, 142, 135, 122, 83, 0, 80, 79, 65, 65, 63, 59, - 56, 59, 57, 59, 32, 89, 114, 99, 119, 241, 237, 187, 107, 107, 115, 119, - 132, 142, 157, 169, 177, 181, 183, 170, 165, 148, 132, 138, 119, 18, 29, 32, - 52, 68, 83, 99, 104, 96, 108, 95, 89, 52, 95, 110, 114, 102, 115, 114, - 111, 131, 213, 241, 240, 220, 132, 119, 81, 60, 57, 67, 69, 79, 73, 95, - 103, 221, 228, 216, 138, 136, 150, 174, 169, 162, 157, 153, 124, 123, 111, 38, - 29, 33, 51, 72, 88, 92, 102, 99, 99, 40, 110, 138, 127, 229, 238, 234, - 123, 110, 120, 132, 146, 159, 173, 170, 167, 127, 49, 37, 36, 33, 48, 53, - 33, 61, 103, 213, 218, 206, 135, 131, 135, 144, 143, 136, 140, 136, 118, 92, - 33, 30, 34, 56, 68, 81, 88, 103, 122, 237, 234, 230, 122, 115, 126, 138, - 147, 158, 167, 171, 177, 169, 165, 151, 85, 36, 34, 37, 38, 44, 53, 53, - 26, 75, 110, 131, 136, 130, 120, 130, 120, 99, 96, 97, 189, 222, 230, 214, - 139, 112, 127, 140, 154, 167, 171, 183, 189, 193, 198, 205, 214, 147, 76, 53, - 51, 57, 75, 110, 177, 226, 217, 213, 190, 216, 220, 221, 213, 204, 187, 179, - 169, 154, 140, 130, 130, 116, 63, 60, 80, 88, 104, 116, 107, 64, 104, 107, - 135, 106, 102, 144, 224, 237, 232, 120, 115, 124, 138, 144, 158, 167, 165, 173, - 171, 166, 151, 95, 44, 33, 40, 48, 64, 69, 79, 80, 79, 81, 81, 85, - 75, 28, 116, 138, 131, 136, 143, 138, 138, 135, 138, 123, 123, 46, 124, 128, - 135, 143, 157, 167, 165, 126, 107, 126, 146, 161, 169, 178, 183, 190, 195, 191, - 190, 194, 204, 201, 194, 198, 212, 204, 195, 189, 181, 174, 173, 162, 157, 146, - 128, 24, 29, 29, 53, 73, 83, 8, 8, 9, 8, 6, 17, 18, 48, 167, - 162, 107, 110, 122, 144, 155, 162, 165, 165, 159, 155, 127, 130, 130, 134, 126, - 63, 20, 13, 18, 20, 34, 34, 48, 30, 42, 79, 88, 91, 92, 87, 91, - 91, 87, 77, 67, 36, 181, 229, 238, 208, 154, 99, 91, 88, 61, 21, 14, - 21, 38, 42, 57, 49, 57, 49, 63, 242, 244, 234, 110, 97, 106, 122, 131, - 143, 165, 174, 171, 169, 161, 150, 147, 127, 20, 18, 20, 12, 14, 6, 20, - 22, 10, 25, 32, 25, 44, 75, 100, 228, 232, 229, 134, 110, 118, 132, 135, - 132, 144, 147, 144, 157, 157, 157, 157, 135, 41, 29, 25, 21, 32, 42, 56, - 71, 81, 199, 220, 201, 147, 138, 146, 162, 169, 171, 175, 182, 189, 195, 198, - 197, 190, 147, 52, 30, 45, 59, 73, 75, 85, 201, 229, 220, 185, 185, 194, - 181, 170, 166, 159, 155, 151, 136, 128, 127, 83, 42, 42, 41, 72, 100, 114, - 89, 93, 87, 198, 242, 245, 187, 135, 138, 144, 147, 143, 154, 165, 170, 170, - 60, 36, 29, 21, 32, 42, 61, 92, 221, 224, 224, 181, 182, 183, 177, 179, - 157, 143, 130, 91, 34, 32, 36, 42, 64, 46, 69, 41, 99, 111, 100, 108, - 108, 110, 108, 111, 107, 108, 80, 45, 118, 132, 135, 128, 140, 132, 124, 122, - 134, 130, 111, 55, 0, 80, 63, 63, 57, 68, 59, 75, 57, 65, 53, 30, - 91, 110, 106, 116, 244, 245, 225, 110, 106, 112, 120, 120, 142, 161, 171, 181, - 185, 175, 166, 154, 139, 134, 130, 116, 22, 30, 33, 49, 69, 80, 95, 99, - 104, 104, 91, 88, 52, 92, 114, 112, 104, 107, 111, 115, 143, 232, 241, 242, - 220, 135, 115, 71, 55, 51, 77, 61, 75, 77, 83, 92, 222, 222, 214, 134, - 135, 148, 166, 162, 161, 153, 144, 126, 122, 107, 38, 28, 32, 51, 64, 87, - 92, 96, 112, 97, 34, 122, 138, 132, 226, 237, 229, 127, 112, 120, 132, 147, - 161, 166, 167, 169, 139, 56, 37, 37, 46, 46, 55, 37, 57, 99, 213, 212, - 205, 127, 134, 135, 146, 138, 140, 136, 138, 119, 88, 30, 30, 30, 67, 63, - 67, 72, 97, 116, 236, 236, 229, 122, 114, 124, 135, 147, 158, 167, 174, 174, - 166, 163, 148, 68, 33, 33, 36, 42, 44, 44, 59, 25, 107, 116, 126, 115, - 108, 119, 122, 119, 106, 92, 97, 193, 222, 216, 201, 123, 114, 127, 140, 154, - 173, 173, 185, 190, 191, 199, 205, 209, 135, 71, 57, 52, 52, 64, 89, 153, - 228, 221, 214, 199, 213, 217, 218, 216, 210, 189, 183, 170, 159, 142, 132, 127, - 122, 83, 61, 69, 88, 96, 118, 104, 67, 96, 96, 93, 87, 85, 134, 213, - 234, 232, 123, 115, 124, 138, 143, 158, 165, 165, 173, 170, 161, 144, 76, 41, - 34, 44, 60, 76, 79, 77, 77, 81, 80, 80, 84, 83, 33, 110, 135, 136, - 144, 139, 138, 138, 144, 142, 112, 132, 37, 123, 122, 134, 135, 148, 151, 178, - 147, 108, 118, 142, 155, 166, 175, 183, 187, 189, 189, 186, 190, 195, 205, 206, - 193, 199, 204, 197, 191, 182, 175, 175, 163, 158, 146, 128, 22, 26, 28, 56, - 68, 87, 2, 1, 2, 8, 2, 4, 5, 17, 75, 177, 108, 107, 118, 134, - 148, 155, 163, 166, 157, 139, 126, 128, 128, 130, 131, 100, 33, 22, 22, 26, - 26, 29, 30, 33, 42, 56, 49, 52, 56, 55, 57, 56, 87, 79, 63, 28, - 166, 225, 240, 189, 119, 99, 91, 87, 59, 18, 14, 21, 26, 26, 29, 32, - 33, 57, 67, 245, 242, 240, 114, 92, 102, 120, 122, 140, 157, 165, 170, 167, - 162, 148, 144, 130, 21, 17, 8, 8, 10, 12, 14, 5, 5, 18, 26, 26, - 38, 73, 87, 225, 230, 232, 128, 104, 116, 127, 135, 146, 151, 147, 142, 146, - 142, 154, 151, 127, 46, 26, 26, 14, 36, 34, 56, 53, 75, 190, 221, 204, - 146, 134, 142, 154, 162, 166, 170, 177, 183, 191, 195, 194, 189, 167, 76, 37, - 36, 55, 65, 73, 85, 183, 230, 224, 189, 178, 194, 195, 169, 177, 170, 163, - 157, 151, 139, 128, 118, 57, 41, 40, 65, 97, 103, 81, 80, 92, 187, 229, - 245, 175, 132, 140, 147, 148, 143, 155, 173, 177, 177, 68, 42, 28, 25, 30, - 41, 76, 103, 226, 228, 226, 185, 183, 183, 178, 178, 159, 146, 132, 87, 33, - 34, 33, 36, 38, 38, 48, 57, 57, 87, 87, 89, 91, 97, 92, 85, 104, - 106, 53, 53, 45, 108, 97, 85, 79, 103, 83, 72, 68, 97, 67, 13, 42, - 61, 52, 37, 38, 46, 40, 37, 36, 52, 41, 33, 81, 96, 108, 128, 245, - 238, 234, 111, 110, 115, 120, 128, 143, 167, 170, 177, 182, 178, 167, 153, 128, - 135, 138, 114, 25, 34, 34, 42, 52, 63, 81, 92, 95, 92, 88, 87, 48, - 95, 103, 110, 100, 102, 104, 116, 161, 245, 248, 242, 201, 131, 115, 64, 52, - 49, 67, 75, 63, 69, 84, 89, 222, 228, 218, 138, 136, 147, 161, 163, 161, - 159, 126, 126, 122, 104, 33, 29, 29, 53, 56, 77, 88, 93, 96, 81, 51, - 71, 123, 127, 220, 233, 232, 127, 114, 122, 134, 150, 161, 171, 170, 169, 148, - 63, 40, 40, 44, 37, 46, 34, 75, 111, 208, 220, 217, 134, 131, 131, 140, - 139, 139, 135, 131, 118, 80, 30, 28, 30, 60, 48, 55, 69, 96, 111, 237, - 238, 232, 124, 116, 123, 131, 147, 161, 169, 174, 175, 166, 163, 146, 60, 36, - 37, 40, 63, 52, 46, 60, 36, 106, 114, 102, 115, 110, 107, 97, 111, 100, - 96, 96, 193, 220, 216, 175, 110, 115, 124, 136, 157, 171, 173, 178, 182, 191, - 195, 202, 214, 127, 71, 60, 56, 59, 55, 77, 148, 230, 225, 217, 198, 202, - 216, 216, 221, 216, 202, 183, 173, 162, 148, 140, 126, 127, 97, 65, 71, 73, - 80, 88, 72, 67, 67, 69, 71, 60, 79, 132, 201, 230, 233, 123, 115, 127, - 138, 142, 158, 166, 166, 170, 167, 159, 140, 72, 45, 36, 51, 73, 73, 77, - 71, 76, 80, 83, 84, 85, 77, 34, 77, 119, 139, 102, 111, 127, 134, 128, - 136, 123, 124, 37, 123, 120, 122, 120, 131, 139, 146, 165, 112, 107, 134, 150, - 163, 173, 179, 181, 183, 182, 186, 187, 190, 194, 204, 204, 194, 198, 195, 193, - 185, 177, 175, 165, 159, 147, 128, 24, 28, 28, 55, 63, 64, 36, 41, 46, - 40, 29, 45, 36, 13, 17, 138, 162, 115, 111, 118, 138, 148, 154, 158, 155, - 142, 131, 127, 122, 132, 134, 122, 59, 28, 13, 18, 21, 22, 20, 18, 24, - 25, 25, 32, 37, 42, 46, 48, 59, 75, 68, 30, 165, 220, 234, 177, 110, - 91, 89, 85, 57, 18, 10, 17, 24, 22, 24, 30, 30, 52, 55, 244, 241, - 236, 112, 103, 102, 120, 132, 134, 151, 162, 174, 169, 158, 147, 146, 123, 20, - 21, 21, 16, 16, 21, 20, 20, 21, 36, 20, 22, 38, 65, 97, 225, 232, - 228, 130, 115, 119, 128, 132, 146, 143, 143, 140, 143, 140, 153, 147, 123, 41, - 38, 25, 26, 49, 68, 63, 67, 69, 178, 216, 210, 150, 130, 139, 151, 158, - 161, 167, 171, 178, 186, 191, 193, 190, 179, 99, 41, 28, 42, 59, 69, 80, - 161, 230, 228, 193, 178, 186, 195, 191, 162, 178, 169, 165, 151, 151, 136, 130, - 92, 44, 44, 61, 71, 77, 71, 87, 87, 147, 234, 244, 174, 136, 142, 151, - 148, 148, 163, 175, 179, 182, 75, 49, 34, 28, 56, 73, 79, 114, 230, 230, - 229, 191, 183, 187, 181, 179, 163, 148, 130, 95, 29, 28, 29, 10, 9, 6, - 9, 10, 28, 28, 13, 12, 25, 28, 22, 21, 30, 36, 32, 53, 25, 25, - 14, 20, 24, 26, 8, 18, 25, 29, 5, 20, 67, 18, 45, 59, 65, 68, - 77, 77, 79, 77, 77, 36, 110, 104, 112, 138, 245, 245, 234, 111, 111, 118, - 122, 135, 148, 163, 167, 173, 175, 179, 166, 153, 131, 136, 134, 108, 29, 36, - 34, 44, 55, 56, 56, 59, 63, 75, 71, 59, 48, 89, 95, 88, 85, 97, - 112, 112, 208, 245, 248, 240, 177, 126, 112, 57, 49, 42, 41, 44, 49, 57, - 80, 87, 228, 230, 216, 135, 131, 131, 151, 159, 159, 151, 124, 118, 124, 96, - 30, 28, 32, 45, 57, 69, 75, 75, 81, 75, 41, 53, 120, 132, 214, 229, - 229, 127, 114, 123, 134, 150, 159, 171, 174, 173, 154, 81, 45, 40, 48, 34, - 40, 59, 89, 138, 214, 221, 204, 131, 127, 128, 135, 136, 140, 135, 128, 116, - 75, 28, 25, 28, 40, 42, 49, 75, 96, 96, 238, 241, 234, 122, 114, 122, - 132, 147, 161, 169, 177, 174, 163, 161, 146, 57, 34, 34, 44, 48, 63, 56, - 52, 26, 77, 87, 80, 80, 96, 95, 84, 83, 95, 93, 102, 183, 218, 204, - 151, 106, 115, 122, 136, 154, 171, 178, 185, 179, 191, 193, 195, 210, 147, 75, - 61, 45, 49, 61, 83, 151, 228, 225, 222, 199, 186, 212, 216, 217, 214, 205, - 183, 175, 165, 157, 143, 124, 126, 108, 69, 79, 71, 60, 60, 55, 46, 51, - 49, 59, 56, 67, 140, 195, 236, 230, 124, 118, 127, 139, 143, 157, 166, 166, - 173, 166, 159, 142, 71, 42, 41, 67, 44, 32, 28, 25, 33, 20, 17, 17, - 30, 10, 33, 59, 57, 69, 65, 57, 59, 59, 84, 114, 118, 99, 40, 122, - 93, 106, 100, 112, 116, 128, 155, 132, 104, 127, 146, 159, 169, 173, 175, 175, - 174, 177, 178, 182, 190, 197, 208, 195, 194, 201, 193, 186, 177, 175, 165, 161, - 148, 130, 22, 25, 26, 51, 53, 59, 115, 100, 80, 84, 84, 69, 80, 42, - 24, 64, 147, 106, 110, 112, 120, 138, 153, 150, 148, 139, 146, 146, 132, 123, - 131, 132, 108, 40, 32, 42, 51, 49, 42, 46, 57, 57, 73, 64, 69, 64, - 49, 52, 44, 52, 67, 34, 155, 222, 237, 198, 115, 92, 91, 81, 42, 16, - 14, 16, 40, 51, 60, 59, 56, 56, 65, 237, 237, 232, 106, 95, 110, 123, - 123, 127, 138, 158, 171, 162, 155, 144, 143, 126, 22, 21, 25, 8, 20, 21, - 21, 16, 28, 42, 24, 21, 68, 67, 119, 222, 229, 226, 128, 118, 127, 135, - 134, 143, 132, 153, 147, 147, 139, 151, 144, 116, 41, 37, 22, 36, 60, 69, - 67, 69, 71, 158, 221, 210, 155, 127, 136, 144, 154, 158, 165, 167, 173, 182, - 186, 190, 186, 183, 128, 46, 42, 44, 67, 72, 91, 148, 226, 229, 194, 177, - 182, 191, 194, 187, 162, 175, 170, 165, 155, 151, 134, 123, 64, 45, 46, 49, - 57, 76, 93, 85, 132, 225, 236, 178, 139, 148, 158, 146, 147, 162, 182, 185, - 186, 87, 40, 32, 20, 48, 75, 87, 157, 233, 232, 229, 189, 189, 185, 178, - 177, 165, 148, 132, 93, 34, 30, 32, 24, 42, 26, 44, 30, 97, 107, 100, - 88, 99, 102, 102, 91, 102, 100, 49, 30, 44, 123, 116, 100, 100, 118, 112, - 99, 95, 95, 89, 63, 26, 46, 108, 122, 126, 119, 124, 119, 120, 84, 73, - 32, 111, 115, 115, 183, 242, 245, 225, 110, 110, 115, 124, 138, 151, 159, 158, - 157, 166, 177, 167, 154, 136, 142, 143, 111, 34, 40, 42, 59, 69, 72, 52, - 71, 72, 69, 63, 75, 68, 80, 84, 95, 99, 103, 119, 174, 241, 246, 248, - 244, 154, 122, 107, 55, 46, 42, 46, 51, 63, 69, 85, 100, 226, 232, 218, - 132, 131, 134, 142, 147, 159, 148, 126, 122, 126, 106, 33, 29, 33, 49, 57, - 53, 55, 60, 49, 75, 33, 57, 104, 123, 209, 226, 222, 131, 115, 123, 134, - 146, 159, 166, 170, 173, 161, 103, 49, 42, 38, 44, 46, 73, 102, 194, 229, - 230, 213, 130, 127, 131, 134, 132, 143, 140, 124, 116, 64, 28, 25, 37, 59, - 61, 73, 81, 103, 116, 237, 237, 234, 123, 114, 126, 138, 148, 159, 170, 175, - 171, 163, 158, 147, 61, 38, 42, 63, 64, 77, 72, 45, 34, 37, 33, 46, - 36, 42, 37, 45, 33, 46, 37, 61, 173, 213, 206, 135, 104, 118, 123, 134, - 138, 169, 178, 175, 179, 185, 195, 201, 209, 162, 87, 67, 56, 71, 61, 104, - 159, 229, 226, 225, 198, 182, 202, 214, 214, 212, 206, 187, 182, 166, 165, 148, - 134, 127, 118, 77, 76, 88, 85, 85, 68, 30, 52, 128, 165, 128, 126, 174, - 210, 226, 230, 120, 118, 126, 139, 138, 154, 162, 169, 166, 166, 158, 144, 77, - 49, 46, 73, 77, 112, 132, 146, 142, 136, 144, 153, 140, 65, 32, 112, 153, - 151, 132, 142, 143, 126, 93, 59, 57, 81, 64, 24, 32, 40, 40, 38, 30, - 69, 142, 147, 110, 110, 140, 147, 157, 163, 159, 162, 158, 159, 153, 158, 159, - 191, 205, 213, 186, 198, 193, 185, 177, 174, 163, 159, 148, 126, 20, 22, 26, - 49, 48, 51, 115, 84, 103, 88, 91, 106, 52, 57, 25, 21, 144, 127, 114, - 111, 114, 115, 126, 138, 139, 150, 142, 142, 148, 136, 130, 139, 123, 92, 36, - 30, 17, 38, 46, 46, 68, 79, 100, 84, 83, 85, 73, 68, 72, 76, 69, - 49, 177, 236, 241, 195, 116, 89, 85, 65, 28, 14, 14, 17, 46, 57, 55, - 56, 52, 52, 69, 216, 230, 230, 100, 92, 111, 124, 123, 123, 134, 146, 167, - 162, 155, 143, 142, 127, 30, 26, 21, 18, 33, 45, 61, 67, 68, 75, 69, - 68, 53, 81, 190, 217, 225, 225, 126, 110, 119, 120, 135, 144, 126, 138, 146, - 148, 142, 147, 146, 122, 34, 30, 25, 32, 65, 60, 63, 59, 69, 136, 216, - 210, 165, 126, 134, 136, 147, 157, 162, 169, 170, 178, 183, 185, 182, 182, 155, - 72, 42, 38, 76, 80, 84, 128, 218, 228, 198, 174, 178, 187, 195, 195, 171, - 162, 175, 175, 166, 161, 147, 132, 107, 69, 67, 71, 96, 102, 100, 93, 112, - 210, 232, 182, 146, 153, 159, 146, 148, 165, 186, 191, 191, 136, 64, 34, 17, - 56, 81, 99, 185, 237, 234, 232, 187, 187, 186, 179, 175, 165, 147, 131, 87, - 32, 28, 30, 49, 44, 48, 51, 29, 114, 119, 106, 89, 87, 96, 85, 91, - 96, 103, 61, 24, 93, 124, 111, 114, 115, 111, 116, 108, 114, 107, 110, 65, - 22, 106, 124, 120, 120, 115, 116, 104, 112, 96, 88, 32, 116, 118, 116, 201, - 245, 245, 226, 110, 108, 114, 123, 140, 154, 165, 162, 147, 157, 158, 154, 131, - 131, 146, 146, 111, 37, 41, 41, 65, 51, 61, 71, 77, 83, 88, 88, 83, - 92, 104, 106, 114, 120, 130, 162, 218, 248, 248, 246, 221, 131, 123, 84, 48, - 41, 41, 55, 61, 64, 76, 81, 104, 226, 232, 225, 127, 126, 135, 122, 136, - 138, 138, 119, 127, 124, 111, 34, 29, 32, 56, 64, 81, 88, 85, 77, 77, - 25, 128, 124, 130, 194, 222, 217, 135, 116, 123, 134, 144, 154, 169, 171, 175, - 174, 142, 61, 49, 45, 49, 69, 87, 116, 204, 230, 228, 213, 130, 127, 130, - 127, 136, 135, 131, 122, 107, 42, 26, 22, 42, 67, 75, 79, 97, 97, 120, - 237, 238, 236, 124, 116, 126, 135, 147, 158, 169, 175, 169, 158, 154, 143, 72, - 45, 40, 60, 87, 96, 93, 79, 26, 42, 139, 148, 126, 131, 142, 139, 120, - 131, 139, 97, 159, 206, 201, 124, 106, 118, 124, 130, 131, 157, 162, 181, 175, - 174, 187, 197, 199, 201, 128, 79, 71, 77, 87, 150, 209, 230, 228, 226, 193, - 181, 197, 206, 208, 206, 205, 183, 181, 171, 162, 161, 142, 127, 127, 83, 96, - 112, 143, 134, 77, 44, 124, 178, 173, 178, 190, 193, 222, 229, 218, 122, 118, - 127, 138, 134, 150, 159, 167, 169, 163, 157, 143, 84, 55, 46, 73, 130, 153, - 155, 154, 159, 161, 159, 162, 163, 115, 41, 138, 162, 170, 170, 166, 166, 163, - 157, 140, 107, 97, 53, 67, 154, 161, 106, 120, 143, 114, 85, 161, 132, 102, - 122, 134, 140, 146, 148, 134, 135, 147, 107, 97, 112, 175, 204, 217, 194, 189, - 191, 182, 175, 173, 162, 155, 147, 122, 17, 24, 29, 53, 89, 102, 88, 84, - 60, 87, 84, 76, 37, 55, 25, 10, 127, 123, 100, 114, 111, 111, 110, 112, - 119, 140, 153, 146, 140, 147, 132, 127, 131, 116, 79, 29, 38, 44, 14, 38, - 63, 96, 84, 76, 76, 65, 63, 63, 69, 56, 44, 118, 212, 238, 237, 209, - 112, 85, 77, 51, 21, 13, 14, 14, 44, 57, 49, 48, 37, 55, 103, 236, - 228, 210, 106, 103, 114, 126, 130, 124, 130, 140, 157, 159, 150, 135, 142, 130, - 28, 28, 9, 59, 44, 53, 55, 68, 77, 69, 68, 52, 75, 96, 224, 221, - 224, 216, 127, 103, 112, 123, 146, 148, 132, 123, 132, 139, 136, 146, 144, 120, - 49, 26, 26, 33, 67, 67, 75, 52, 61, 112, 206, 206, 173, 126, 132, 134, - 146, 151, 161, 166, 163, 171, 177, 182, 178, 177, 167, 96, 46, 32, 67, 79, - 83, 108, 201, 225, 208, 173, 175, 186, 194, 197, 189, 161, 163, 177, 179, 167, - 159, 144, 136, 103, 96, 95, 97, 95, 89, 89, 96, 190, 237, 185, 147, 157, - 165, 144, 147, 178, 189, 194, 197, 166, 51, 37, 30, 69, 91, 108, 195, 237, - 236, 232, 189, 187, 181, 178, 175, 166, 147, 128, 81, 30, 29, 28, 42, 60, - 65, 48, 32, 106, 123, 112, 122, 112, 112, 123, 111, 102, 102, 61, 49, 118, - 128, 111, 110, 106, 96, 92, 107, 97, 87, 106, 48, 21, 107, 126, 115, 104, - 99, 106, 111, 115, 88, 80, 36, 116, 119, 122, 221, 244, 241, 222, 112, 110, - 115, 120, 132, 157, 166, 167, 166, 161, 144, 138, 127, 139, 144, 150, 116, 69, - 42, 42, 69, 53, 65, 80, 84, 79, 79, 83, 81, 99, 119, 127, 135, 128, - 157, 213, 245, 249, 248, 242, 163, 126, 119, 71, 46, 44, 38, 57, 63, 65, - 76, 81, 106, 230, 232, 224, 134, 134, 128, 138, 124, 118, 114, 119, 130, 119, - 110, 34, 33, 30, 60, 80, 95, 97, 89, 93, 69, 28, 122, 134, 127, 170, - 216, 218, 153, 118, 124, 135, 146, 153, 162, 170, 167, 175, 159, 118, 71, 73, - 79, 102, 126, 181, 206, 230, 222, 221, 128, 126, 130, 130, 130, 135, 123, 118, - 77, 30, 25, 24, 46, 65, 73, 91, 103, 107, 131, 236, 238, 234, 123, 119, - 127, 139, 148, 159, 169, 175, 166, 162, 157, 144, 83, 48, 42, 63, 92, 91, - 95, 93, 29, 157, 163, 159, 148, 148, 155, 148, 136, 146, 139, 107, 119, 195, - 190, 122, 108, 119, 123, 128, 132, 138, 170, 178, 185, 166, 181, 187, 197, 209, - 169, 104, 85, 97, 139, 159, 224, 228, 229, 226, 194, 175, 183, 194, 190, 193, - 194, 186, 181, 174, 170, 167, 157, 134, 127, 91, 108, 138, 147, 146, 69, 36, - 135, 179, 175, 189, 190, 193, 226, 233, 226, 118, 118, 127, 138, 131, 144, 161, - 171, 169, 162, 155, 146, 108, 63, 55, 80, 135, 154, 161, 158, 169, 162, 154, - 157, 161, 161, 41, 140, 167, 167, 158, 153, 153, 153, 153, 163, 131, 107, 28, - 148, 155, 153, 151, 150, 142, 132, 130, 77, 76, 75, 107, 134, 111, 119, 118, - 95, 77, 88, 79, 87, 103, 161, 205, 217, 201, 182, 191, 181, 177, 174, 162, - 155, 146, 115, 17, 24, 41, 59, 89, 111, 100, 55, 49, 56, 26, 55, 37, - 32, 18, 17, 119, 114, 77, 119, 112, 108, 110, 110, 107, 116, 139, 155, 144, - 138, 144, 128, 136, 127, 114, 71, 46, 42, 41, 36, 61, 93, 71, 69, 65, - 60, 63, 59, 59, 76, 120, 182, 232, 238, 234, 193, 110, 85, 59, 26, 16, - 12, 13, 14, 30, 53, 48, 34, 37, 72, 191, 234, 229, 216, 111, 103, 114, - 128, 130, 143, 131, 127, 143, 154, 153, 138, 143, 118, 30, 26, 13, 45, 48, - 44, 72, 51, 52, 55, 51, 51, 76, 150, 214, 218, 224, 214, 127, 122, 111, - 122, 136, 136, 146, 135, 122, 123, 131, 135, 144, 122, 56, 24, 21, 34, 69, - 83, 57, 56, 64, 93, 193, 206, 171, 130, 123, 130, 143, 148, 157, 163, 162, - 163, 167, 171, 177, 171, 170, 124, 56, 53, 72, 72, 87, 96, 159, 224, 209, - 171, 171, 182, 194, 195, 195, 179, 155, 162, 177, 174, 167, 157, 140, 134, 126, - 119, 99, 89, 93, 91, 83, 128, 224, 197, 153, 157, 171, 148, 147, 183, 194, - 201, 202, 186, 81, 42, 32, 38, 95, 116, 212, 238, 237, 234, 186, 186, 181, - 175, 178, 169, 146, 120, 53, 29, 28, 18, 46, 46, 56, 55, 38, 67, 88, - 120, 80, 114, 108, 106, 104, 110, 99, 64, 48, 80, 127, 114, 120, 92, 95, - 108, 89, 96, 97, 96, 53, 18, 106, 119, 104, 110, 116, 110, 112, 93, 84, - 84, 46, 103, 108, 130, 229, 241, 241, 220, 115, 112, 118, 119, 130, 151, 165, - 171, 165, 159, 159, 154, 138, 142, 150, 150, 123, 99, 44, 46, 68, 48, 60, - 63, 69, 72, 73, 72, 97, 99, 128, 135, 130, 159, 202, 240, 246, 250, 248, - 229, 136, 123, 112, 60, 44, 38, 42, 56, 60, 68, 79, 92, 135, 217, 225, - 224, 135, 120, 126, 130, 120, 124, 116, 116, 126, 127, 110, 34, 29, 42, 48, - 52, 96, 102, 89, 85, 81, 22, 127, 132, 124, 138, 202, 216, 185, 122, 120, - 135, 142, 151, 158, 169, 169, 178, 178, 161, 124, 127, 144, 171, 195, 209, 205, - 233, 217, 216, 130, 128, 130, 130, 136, 131, 120, 97, 37, 25, 24, 32, 60, - 61, 69, 93, 100, 108, 132, 233, 240, 232, 123, 115, 124, 134, 148, 159, 169, - 173, 167, 158, 154, 146, 119, 55, 44, 71, 84, 89, 89, 83, 29, 166, 166, - 177, 165, 161, 157, 139, 138, 153, 157, 130, 93, 155, 193, 131, 103, 119, 124, - 128, 135, 131, 158, 162, 174, 162, 173, 179, 193, 199, 209, 178, 151, 171, 194, - 221, 226, 228, 225, 226, 189, 173, 173, 182, 185, 182, 187, 185, 186, 179, 170, - 163, 166, 150, 131, 95, 115, 132, 153, 138, 63, 38, 115, 169, 183, 179, 190, - 202, 232, 229, 228, 120, 116, 127, 140, 135, 148, 161, 170, 169, 163, 154, 146, - 128, 73, 61, 83, 139, 154, 163, 167, 167, 169, 162, 153, 162, 120, 55, 131, - 162, 167, 158, 158, 153, 151, 151, 158, 139, 118, 42, 161, 159, 150, 146, 142, - 140, 130, 124, 123, 110, 108, 99, 96, 96, 95, 84, 81, 79, 76, 72, 92, - 106, 170, 213, 224, 202, 178, 189, 183, 177, 174, 163, 153, 144, 107, 16, 25, - 40, 85, 96, 100, 99, 48, 57, 63, 45, 40, 79, 40, 18, 12, 122, 107, - 80, 69, 103, 118, 111, 111, 110, 108, 119, 139, 147, 146, 144, 139, 122, 131, - 130, 111, 89, 75, 73, 64, 83, 83, 102, 73, 63, 61, 64, 79, 120, 177, - 216, 234, 241, 237, 216, 169, 95, 69, 37, 18, 13, 13, 14, 20, 38, 46, - 46, 40, 52, 115, 218, 224, 230, 214, 99, 97, 116, 126, 127, 143, 122, 124, - 130, 148, 143, 135, 140, 119, 34, 30, 40, 77, 75, 45, 56, 45, 61, 45, - 49, 45, 75, 162, 210, 214, 214, 197, 127, 108, 116, 132, 146, 140, 150, 151, - 139, 120, 119, 134, 139, 123, 49, 37, 37, 41, 69, 75, 67, 52, 57, 64, - 187, 208, 170, 120, 128, 128, 142, 146, 154, 162, 166, 155, 155, 159, 161, 169, - 169, 143, 88, 57, 42, 57, 81, 84, 135, 214, 217, 171, 169, 179, 189, 193, - 195, 194, 183, 153, 162, 181, 174, 162, 155, 144, 136, 139, 139, 112, 92, 84, - 87, 97, 193, 221, 169, 159, 171, 147, 150, 187, 198, 206, 208, 201, 148, 77, - 37, 40, 103, 159, 222, 237, 238, 234, 191, 187, 177, 175, 177, 166, 139, 108, - 34, 28, 26, 22, 55, 48, 53, 56, 41, 46, 119, 124, 114, 118, 112, 107, - 107, 104, 95, 64, 53, 83, 130, 97, 104, 93, 112, 99, 89, 99, 96, 95, - 60, 24, 107, 120, 100, 97, 99, 87, 100, 89, 80, 65, 69, 104, 118, 178, - 230, 246, 240, 217, 116, 115, 120, 112, 124, 146, 159, 166, 171, 167, 162, 157, - 147, 132, 138, 154, 140, 108, 48, 48, 53, 60, 61, 79, 83, 77, 73, 79, - 92, 111, 134, 132, 147, 194, 238, 245, 249, 249, 248, 173, 124, 123, 99, 48, - 40, 26, 44, 52, 61, 75, 79, 91, 187, 214, 221, 212, 131, 123, 128, 134, - 123, 124, 126, 111, 118, 126, 115, 40, 32, 32, 46, 80, 93, 102, 80, 83, - 81, 18, 123, 132, 124, 126, 148, 204, 199, 128, 122, 130, 138, 147, 148, 157, - 154, 181, 183, 182, 174, 189, 201, 205, 212, 210, 218, 209, 217, 169, 130, 130, - 136, 140, 135, 126, 120, 46, 28, 24, 22, 42, 56, 64, 72, 92, 99, 108, - 190, 234, 237, 233, 124, 111, 124, 132, 147, 155, 167, 169, 170, 165, 157, 151, - 144, 72, 52, 53, 85, 91, 89, 87, 37, 119, 170, 177, 171, 167, 177, 162, - 157, 155, 148, 155, 87, 107, 190, 147, 107, 110, 123, 127, 131, 132, 138, 163, - 165, 161, 169, 174, 186, 191, 208, 216, 212, 220, 221, 226, 224, 224, 229, 212, - 189, 167, 170, 150, 171, 177, 185, 185, 183, 185, 175, 173, 166, 166, 146, 123, - 116, 139, 151, 87, 57, 32, 104, 169, 170, 173, 175, 187, 229, 238, 228, 122, - 116, 126, 138, 132, 154, 163, 169, 166, 165, 158, 148, 139, 92, 67, 97, 132, - 153, 166, 166, 169, 170, 170, 169, 151, 132, 52, 124, 163, 165, 154, 155, 151, - 153, 153, 153, 128, 118, 48, 120, 161, 139, 140, 143, 140, 128, 119, 127, 126, - 115, 107, 91, 91, 83, 80, 79, 75, 77, 88, 106, 112, 187, 218, 226, 191, - 175, 186, 182, 177, 174, 165, 150, 139, 67, 16, 25, 41, 102, 96, 100, 106, - 69, 42, 56, 59, 33, 33, 38, 20, 10, 104, 92, 72, 61, 52, 81, 119, - 115, 111, 108, 106, 114, 140, 151, 148, 151, 142, 124, 123, 118, 151, 123, 111, - 107, 112, 116, 123, 123, 124, 123, 146, 183, 213, 229, 240, 238, 236, 224, 193, - 112, 80, 42, 20, 13, 10, 12, 16, 30, 41, 33, 44, 44, 123, 186, 233, - 226, 229, 221, 114, 97, 108, 120, 135, 140, 127, 132, 124, 135, 136, 136, 138, - 127, 92, 65, 33, 68, 79, 77, 56, 55, 60, 71, 48, 60, 95, 183, 208, - 212, 217, 159, 112, 116, 122, 130, 135, 148, 148, 150, 148, 138, 115, 122, 136, - 128, 99, 51, 45, 45, 75, 56, 60, 52, 56, 55, 165, 206, 170, 118, 126, - 128, 140, 148, 154, 159, 163, 151, 151, 146, 146, 154, 162, 153, 104, 59, 30, - 53, 73, 85, 114, 198, 216, 179, 166, 177, 186, 189, 193, 194, 195, 183, 157, - 162, 175, 171, 162, 155, 150, 139, 139, 136, 108, 84, 91, 92, 142, 229, 182, - 162, 169, 151, 187, 193, 206, 212, 210, 212, 194, 118, 49, 55, 114, 190, 234, - 237, 238, 229, 187, 186, 183, 177, 174, 154, 139, 88, 29, 26, 26, 36, 52, - 56, 45, 60, 51, 44, 108, 123, 112, 118, 107, 107, 115, 104, 103, 71, 55, - 85, 122, 110, 104, 93, 102, 84, 97, 92, 95, 97, 59, 14, 112, 119, 92, - 100, 92, 96, 81, 65, 69, 99, 89, 103, 124, 220, 238, 234, 242, 206, 118, - 120, 122, 123, 116, 135, 157, 165, 167, 169, 166, 162, 158, 142, 146, 140, 159, - 123, 106, 89, 85, 95, 97, 99, 100, 108, 108, 104, 103, 122, 138, 131, 191, - 234, 238, 242, 248, 245, 224, 130, 126, 119, 69, 45, 38, 34, 48, 56, 69, - 75, 85, 186, 214, 214, 222, 204, 118, 132, 139, 130, 136, 136, 140, 131, 112, - 127, 122, 52, 28, 32, 67, 77, 80, 97, 102, 76, 73, 18, 120, 124, 124, - 128, 127, 150, 201, 136, 122, 127, 131, 138, 140, 140, 142, 144, 159, 187, 186, - 197, 199, 209, 214, 216, 206, 212, 193, 130, 128, 138, 139, 138, 128, 127, 65, - 28, 24, 21, 21, 56, 63, 68, 91, 96, 103, 128, 217, 230, 236, 230, 126, - 115, 122, 131, 140, 151, 163, 167, 169, 167, 159, 150, 136, 116, 67, 52, 56, - 92, 88, 87, 45, 115, 170, 178, 157, 169, 174, 148, 171, 151, 150, 147, 100, - 79, 181, 185, 115, 100, 118, 127, 131, 130, 130, 147, 148, 158, 169, 175, 177, - 183, 189, 204, 201, 212, 218, 218, 222, 220, 213, 198, 179, 169, 147, 147, 146, - 151, 171, 174, 183, 182, 178, 169, 169, 170, 166, 138, 120, 147, 112, 61, 34, - 37, 96, 165, 173, 179, 179, 195, 230, 234, 230, 128, 120, 126, 135, 135, 163, - 165, 167, 167, 165, 158, 147, 142, 131, 79, 112, 140, 161, 158, 166, 167, 163, - 167, 171, 163, 147, 71, 127, 163, 167, 155, 148, 157, 155, 147, 151, 134, 116, - 45, 135, 155, 144, 148, 135, 136, 128, 134, 123, 136, 122, 118, 107, 97, 88, - 84, 79, 75, 80, 75, 107, 126, 209, 222, 225, 170, 169, 186, 185, 177, 171, - 163, 148, 136, 57, 17, 24, 42, 99, 100, 106, 92, 77, 42, 44, 56, 64, - 16, 42, 20, 10, 97, 93, 75, 71, 65, 45, 56, 85, 115, 116, 111, 107, - 111, 134, 153, 146, 136, 130, 122, 154, 170, 181, 179, 187, 193, 189, 194, 190, - 197, 209, 216, 229, 233, 236, 234, 224, 222, 182, 130, 79, 44, 22, 14, 12, - 13, 22, 32, 38, 34, 60, 116, 162, 189, 216, 214, 222, 230, 214, 119, 91, - 116, 112, 123, 138, 151, 154, 135, 128, 127, 140, 138, 144, 122, 107, 108, 110, - 118, 104, 83, 64, 51, 69, 46, 68, 138, 201, 209, 210, 206, 155, 119, 110, - 114, 130, 143, 148, 138, 154, 153, 144, 135, 115, 128, 128, 114, 96, 59, 55, - 76, 72, 59, 53, 44, 55, 130, 210, 185, 115, 123, 130, 143, 148, 154, 161, - 143, 139, 135, 132, 131, 135, 148, 153, 131, 96, 64, 36, 60, 77, 100, 157, - 210, 182, 163, 169, 178, 185, 187, 186, 190, 189, 177, 158, 169, 175, 167, 162, - 150, 139, 138, 134, 100, 87, 81, 87, 93, 190, 220, 163, 163, 147, 194, 205, - 212, 214, 214, 214, 214, 186, 134, 142, 191, 229, 238, 238, 238, 221, 195, 189, - 182, 178, 167, 143, 126, 52, 26, 24, 26, 38, 59, 55, 68, 68, 57, 45, - 112, 126, 88, 114, 100, 96, 112, 118, 104, 91, 55, 68, 124, 92, 104, 92, - 88, 87, 100, 93, 84, 100, 45, 20, 106, 115, 89, 95, 81, 85, 95, 91, - 95, 100, 107, 150, 213, 230, 238, 240, 236, 193, 119, 124, 114, 124, 128, 119, - 144, 157, 162, 165, 162, 162, 161, 159, 150, 134, 150, 163, 124, 120, 122, 120, - 120, 126, 123, 123, 122, 120, 115, 126, 154, 197, 232, 236, 240, 245, 244, 237, - 148, 123, 128, 114, 57, 40, 34, 40, 63, 67, 68, 81, 189, 212, 217, 220, - 213, 205, 127, 119, 131, 126, 144, 130, 136, 132, 136, 119, 123, 104, 32, 51, - 37, 40, 80, 99, 99, 80, 61, 30, 112, 123, 127, 114, 118, 124, 136, 182, - 174, 128, 128, 127, 131, 132, 132, 132, 135, 135, 136, 147, 165, 170, 173, 182, - 187, 165, 130, 132, 132, 132, 130, 126, 120, 56, 28, 22, 21, 18, 29, 44, - 56, 72, 93, 97, 108, 191, 229, 230, 234, 225, 128, 119, 127, 134, 140, 148, - 161, 167, 167, 169, 163, 158, 144, 142, 112, 80, 65, 61, 67, 88, 44, 122, - 171, 178, 177, 163, 157, 153, 153, 169, 142, 148, 95, 65, 158, 182, 140, 99, - 108, 124, 128, 132, 128, 128, 132, 157, 167, 163, 174, 169, 169, 165, 159, 181, - 191, 197, 205, 202, 190, 166, 143, 147, 144, 143, 144, 147, 146, 150, 163, 165, - 162, 159, 165, 157, 147, 131, 138, 110, 59, 30, 37, 37, 92, 155, 175, 190, - 177, 208, 222, 230, 230, 134, 120, 120, 136, 154, 165, 173, 167, 165, 165, 158, - 153, 140, 146, 124, 97, 89, 108, 135, 159, 167, 165, 165, 174, 144, 169, 67, - 104, 161, 161, 155, 159, 159, 153, 151, 150, 131, 119, 28, 135, 154, 162, 153, - 144, 139, 134, 127, 122, 140, 135, 103, 115, 108, 107, 100, 88, 89, 87, 89, - 93, 148, 220, 229, 225, 161, 163, 181, 183, 177, 171, 162, 150, 135, 46, 20, - 25, 41, 99, 97, 102, 79, 34, 32, 22, 24, 17, 18, 25, 14, 13, 87, - 83, 72, 59, 56, 59, 45, 37, 53, 84, 107, 112, 108, 111, 118, 128, 135, - 142, 142, 146, 146, 158, 177, 189, 199, 205, 213, 210, 214, 221, 226, 228, 224, - 222, 220, 202, 163, 119, 76, 40, 21, 14, 12, 12, 20, 26, 41, 32, 127, - 169, 206, 217, 201, 209, 209, 218, 214, 159, 115, 92, 140, 120, 130, 136, 138, - 131, 138, 144, 136, 131, 151, 138, 140, 134, 142, 148, 165, 143, 128, 100, 77, - 40, 40, 72, 162, 198, 202, 204, 210, 146, 122, 119, 119, 148, 150, 142, 142, - 138, 135, 138, 143, 132, 112, 130, 126, 111, 85, 110, 93, 87, 51, 59, 48, - 51, 92, 193, 195, 132, 114, 130, 140, 143, 143, 142, 138, 132, 130, 123, 122, - 120, 123, 139, 139, 114, 79, 29, 46, 71, 87, 111, 186, 201, 158, 163, 171, - 179, 181, 183, 185, 189, 187, 165, 158, 171, 173, 161, 144, 143, 135, 110, 71, - 49, 72, 81, 87, 114, 214, 177, 170, 154, 197, 206, 217, 217, 220, 214, 222, - 216, 212, 217, 233, 234, 234, 237, 237, 209, 190, 191, 186, 174, 147, 136, 91, - 30, 25, 24, 29, 46, 59, 57, 67, 63, 64, 41, 96, 95, 119, 106, 115, - 122, 118, 115, 104, 102, 52, 60, 89, 118, 115, 80, 91, 84, 92, 99, 96, - 95, 52, 17, 102, 107, 106, 89, 88, 88, 93, 100, 130, 183, 201, 226, 222, - 234, 229, 234, 232, 161, 122, 123, 130, 136, 148, 128, 123, 143, 150, 150, 150, - 153, 157, 157, 159, 150, 143, 157, 166, 157, 177, 185, 195, 204, 209, 212, 216, - 221, 224, 222, 226, 228, 230, 236, 241, 242, 230, 162, 123, 128, 126, 92, 41, - 34, 33, 45, 65, 69, 100, 165, 228, 214, 212, 225, 221, 167, 132, 135, 142, - 138, 140, 134, 146, 130, 134, 122, 120, 104, 76, 61, 40, 38, 38, 93, 97, - 76, 77, 26, 112, 116, 114, 112, 112, 107, 120, 124, 128, 131, 132, 158, 159, - 154, 151, 151, 147, 144, 142, 136, 136, 134, 134, 134, 135, 132, 130, 130, 126, - 126, 122, 89, 41, 26, 22, 20, 18, 24, 59, 52, 68, 89, 97, 104, 171, - 217, 225, 228, 232, 218, 127, 120, 122, 134, 140, 144, 148, 157, 162, 162, 159, - 154, 153, 147, 148, 122, 111, 100, 83, 63, 42, 95, 171, 167, 175, 144, 169, - 165, 165, 167, 146, 148, 106, 72, 126, 175, 186, 118, 107, 116, 124, 124, 127, - 128, 131, 134, 135, 139, 138, 138, 147, 135, 134, 131, 132, 136, 134, 132, 134, - 136, 136, 142, 143, 144, 147, 146, 144, 148, 146, 142, 140, 140, 140, 135, 144, - 144, 114, 55, 32, 28, 52, 33, 91, 154, 161, 170, 212, 217, 217, 229, 222, - 131, 127, 128, 135, 157, 162, 166, 161, 166, 166, 161, 158, 148, 139, 144, 153, - 140, 116, 118, 107, 159, 162, 161, 158, 143, 150, 72, 88, 167, 155, 155, 157, - 155, 151, 148, 140, 124, 115, 41, 131, 153, 154, 153, 128, 132, 127, 120, 111, - 108, 110, 96, 115, 115, 112, 106, 97, 100, 97, 104, 108, 170, 228, 229, 218, - 153, 158, 167, 179, 179, 170, 163, 150, 132, 41, 21, 24, 46, 97, 99, 102, - 16, 16, 13, 22, 12, 13, 30, 21, 17, 9, 75, 73, 72, 61, 79, 63, - 57, 45, 33, 33, 46, 69, 97, 107, 110, 108, 108, 115, 114, 123, 123, 128, - 134, 148, 171, 182, 190, 205, 209, 206, 208, 208, 204, 186, 163, 120, 83, 61, - 36, 21, 14, 9, 12, 10, 18, 28, 28, 102, 230, 191, 202, 194, 206, 205, - 213, 181, 146, 123, 110, 119, 120, 120, 116, 122, 115, 120, 119, 123, 122, 126, - 130, 124, 134, 147, 136, 140, 140, 135, 136, 153, 76, 38, 57, 95, 218, 190, - 194, 199, 202, 139, 123, 128, 139, 123, 143, 142, 139, 127, 130, 127, 127, 127, - 124, 126, 127, 112, 118, 115, 107, 79, 49, 51, 52, 46, 59, 151, 198, 157, - 110, 128, 132, 136, 139, 138, 131, 130, 123, 120, 118, 112, 111, 107, 114, 127, - 88, 77, 69, 55, 68, 85, 136, 204, 169, 159, 166, 169, 167, 174, 177, 182, - 186, 181, 161, 161, 166, 154, 143, 143, 123, 76, 42, 40, 40, 81, 79, 79, - 169, 190, 182, 140, 190, 205, 208, 213, 218, 224, 222, 225, 224, 226, 233, 232, - 236, 233, 225, 199, 195, 189, 183, 169, 138, 104, 45, 28, 25, 24, 24, 51, - 59, 57, 61, 68, 67, 44, 75, 104, 118, 115, 97, 103, 96, 111, 91, 68, - 56, 53, 91, 120, 99, 76, 93, 91, 92, 97, 104, 69, 52, 13, 91, 103, - 95, 97, 63, 85, 106, 198, 218, 214, 218, 238, 221, 232, 246, 229, 204, 130, - 123, 124, 144, 146, 138, 146, 136, 134, 134, 131, 135, 138, 131, 135, 139, 144, - 153, 150, 139, 174, 175, 187, 195, 204, 208, 213, 217, 220, 222, 225, 228, 232, - 233, 234, 232, 206, 144, 122, 124, 131, 122, 61, 36, 33, 36, 55, 65, 104, - 191, 198, 204, 213, 218, 236, 214, 150, 130, 119, 127, 127, 140, 136, 126, 139, - 126, 126, 134, 107, 91, 84, 75, 61, 36, 55, 95, 71, 75, 24, 108, 118, - 110, 88, 80, 85, 95, 93, 89, 88, 88, 102, 116, 120, 123, 119, 115, 119, - 123, 122, 122, 120, 118, 119, 123, 122, 120, 112, 108, 83, 44, 32, 24, 21, - 18, 16, 21, 28, 48, 56, 88, 95, 106, 175, 214, 218, 220, 225, 228, 163, - 127, 118, 127, 142, 138, 139, 146, 144, 151, 154, 159, 158, 153, 150, 143, 144, - 155, 153, 118, 88, 72, 46, 128, 173, 146, 170, 144, 165, 153, 159, 139, 148, - 140, 59, 116, 166, 165, 165, 157, 150, 147, 148, 143, 120, 119, 123, 124, 130, - 131, 131, 128, 127, 134, 127, 112, 108, 102, 96, 96, 108, 122, 128, 136, 140, - 142, 139, 132, 138, 139, 142, 143, 143, 142, 142, 134, 112, 55, 41, 30, 25, - 53, 32, 91, 158, 170, 213, 222, 220, 218, 230, 202, 131, 123, 136, 143, 146, - 153, 159, 163, 163, 163, 161, 157, 158, 154, 146, 144, 144, 161, 155, 134, 115, - 116, 120, 139, 131, 146, 68, 89, 165, 163, 157, 157, 157, 139, 142, 150, 110, - 114, 48, 136, 162, 151, 140, 132, 126, 119, 106, 104, 104, 96, 123, 112, 110, - 111, 103, 99, 102, 80, 107, 114, 185, 226, 232, 216, 147, 151, 157, 171, 178, - 169, 161, 150, 126, 30, 22, 22, 42, 97, 96, 100, 12, 17, 17, 24, 13, - 24, 36, 36, 16, 8, 68, 67, 61, 71, 52, 49, 41, 37, 34, 32, 26, - 22, 33, 41, 64, 83, 97, 100, 106, 106, 106, 107, 108, 115, 123, 130, 134, - 142, 159, 158, 151, 148, 119, 91, 75, 52, 25, 20, 18, 14, 9, 10, 14, - 12, 30, 37, 30, 144, 190, 213, 193, 195, 179, 158, 136, 124, 112, 92, 87, - 83, 85, 89, 92, 95, 96, 99, 103, 104, 103, 106, 107, 112, 118, 120, 120, - 119, 123, 126, 127, 114, 77, 37, 68, 153, 175, 181, 155, 158, 136, 130, 108, - 114, 119, 112, 119, 119, 122, 115, 126, 127, 119, 131, 127, 122, 112, 110, 110, - 106, 96, 45, 25, 33, 48, 41, 45, 104, 178, 186, 108, 120, 118, 120, 122, - 122, 119, 123, 118, 118, 114, 112, 108, 110, 106, 103, 95, 85, 49, 46, 53, - 67, 100, 163, 181, 155, 159, 165, 163, 158, 167, 171, 173, 178, 175, 165, 146, - 144, 147, 130, 91, 53, 38, 32, 32, 59, 76, 80, 138, 204, 182, 158, 170, - 191, 205, 206, 210, 210, 209, 209, 210, 208, 210, 210, 212, 209, 202, 191, 186, - 182, 173, 143, 116, 42, 24, 24, 24, 25, 28, 52, 51, 55, 64, 61, 65, - 57, 53, 56, 61, 73, 55, 57, 65, 57, 57, 75, 72, 64, 65, 73, 79, - 91, 79, 80, 80, 80, 76, 79, 45, 10, 48, 85, 89, 68, 73, 89, 169, - 210, 210, 214, 228, 248, 221, 217, 210, 159, 131, 123, 128, 138, 140, 140, 143, - 143, 140, 138, 132, 136, 139, 135, 134, 130, 127, 128, 130, 131, 128, 128, 130, - 130, 139, 147, 165, 189, 194, 206, 206, 204, 201, 205, 205, 193, 166, 126, 120, - 123, 130, 131, 107, 37, 30, 21, 60, 60, 85, 177, 193, 198, 213, 206, 208, - 181, 150, 136, 120, 138, 127, 126, 130, 134, 116, 122, 112, 119, 110, 130, 115, - 116, 104, 89, 37, 46, 95, 67, 68, 28, 112, 111, 76, 76, 69, 75, 71, - 72, 63, 61, 53, 49, 46, 46, 48, 44, 42, 41, 42, 38, 37, 34, 30, - 33, 37, 34, 33, 30, 28, 28, 22, 20, 18, 17, 17, 22, 37, 51, 42, - 88, 87, 107, 174, 208, 206, 205, 217, 221, 191, 142, 126, 131, 140, 136, 138, - 142, 139, 142, 143, 142, 148, 143, 139, 146, 144, 131, 132, 136, 161, 144, 72, - 45, 110, 114, 118, 120, 126, 128, 135, 135, 140, 139, 104, 37, 91, 124, 142, - 127, 116, 110, 116, 116, 120, 123, 120, 118, 116, 123, 123, 116, 114, 111, 88, - 55, 37, 33, 29, 30, 30, 36, 68, 102, 110, 114, 116, 112, 107, 108, 112, - 111, 110, 110, 107, 97, 61, 44, 34, 28, 25, 42, 60, 42, 148, 189, 204, - 216, 209, 199, 221, 218, 150, 128, 131, 143, 138, 138, 138, 146, 148, 150, 150, - 148, 147, 148, 146, 151, 150, 144, 146, 163, 158, 147, 131, 126, 120, 122, 102, - 85, 97, 134, 148, 159, 150, 151, 136, 140, 147, 126, 112, 42, 131, 135, 130, - 124, 108, 104, 91, 107, 112, 104, 93, 89, 95, 114, 111, 116, 107, 106, 99, - 112, 123, 199, 230, 232, 213, 144, 150, 154, 165, 173, 167, 161, 146, 107, 25, - 24, 21, 44, 81, 88, 87, 30, 25, 24, 26, 26, 33, 28, 25, 13, 6, - 56, 61, 45, 48, 44, 41, 32, 33, 26, 26, 22, 21, 20, 21, 17, 17, - 22, 34, 41, 55, 67, 89, 89, 91, 89, 85, 87, 81, 77, 75, 71, 59, - 36, 24, 20, 16, 14, 12, 8, 8, 16, 22, 21, 17, 25, 18, 20, 76, - 124, 144, 138, 135, 138, 88, 76, 65, 60, 44, 24, 25, 24, 21, 21, 22, - 24, 26, 28, 33, 33, 32, 37, 69, 80, 87, 85, 83, 81, 96, 88, 63, - 33, 46, 64, 128, 130, 140, 139, 143, 116, 93, 84, 85, 100, 102, 99, 97, - 103, 103, 110, 107, 106, 106, 108, 103, 96, 92, 93, 85, 49, 22, 22, 20, - 24, 44, 34, 42, 107, 128, 110, 115, 92, 110, 111, 116, 114, 114, 112, 108, - 103, 102, 96, 104, 96, 97, 96, 81, 26, 30, 65, 45, 75, 100, 166, 171, - 154, 159, 158, 158, 158, 161, 162, 161, 155, 150, 146, 144, 130, 103, 55, 38, - 34, 36, 38, 45, 80, 76, 171, 191, 189, 173, 126, 157, 189, 193, 195, 198, - 198, 197, 195, 191, 185, 183, 186, 187, 185, 182, 167, 148, 136, 108, 45, 26, - 24, 24, 33, 42, 37, 45, 33, 36, 53, 56, 61, 60, 65, 68, 84, 73, - 76, 73, 79, 79, 77, 75, 76, 73, 63, 79, 77, 52, 44, 24, 22, 34, - 33, 32, 30, 12, 29, 34, 46, 71, 65, 87, 162, 206, 220, 210, 212, 185, - 158, 142, 131, 123, 131, 124, 135, 134, 135, 135, 136, 136, 135, 131, 131, 130, - 128, 127, 127, 119, 124, 126, 126, 126, 127, 123, 124, 123, 120, 119, 118, 118, - 118, 120, 122, 122, 119, 118, 116, 116, 118, 118, 123, 127, 132, 127, 60, 25, - 28, 32, 60, 57, 144, 193, 189, 197, 209, 181, 147, 139, 124, 120, 108, 114, - 112, 108, 114, 110, 108, 100, 104, 106, 106, 104, 111, 103, 96, 92, 40, 55, - 72, 64, 56, 34, 107, 111, 77, 71, 69, 68, 67, 67, 61, 52, 46, 36, - 42, 37, 36, 36, 36, 32, 32, 32, 28, 25, 22, 26, 25, 24, 22, 21, - 18, 17, 17, 14, 21, 20, 26, 44, 34, 42, 56, 85, 95, 135, 195, 202, - 212, 204, 179, 163, 136, 128, 138, 132, 138, 132, 135, 130, 128, 131, 138, 138, - 139, 138, 134, 138, 138, 132, 130, 131, 138, 128, 46, 89, 103, 106, 104, 96, - 112, 108, 114, 106, 124, 119, 63, 37, 67, 75, 77, 68, 60, 49, 51, 42, - 42, 41, 45, 37, 36, 34, 34, 32, 32, 32, 30, 28, 25, 25, 22, 25, - 25, 29, 28, 30, 28, 26, 28, 29, 28, 26, 22, 28, 28, 29, 32, 32, - 29, 29, 25, 17, 25, 65, 65, 48, 154, 194, 220, 212, 216, 206, 174, 150, - 136, 132, 134, 136, 132, 126, 134, 136, 136, 140, 143, 143, 139, 135, 138, 134, - 127, 130, 147, 146, 148, 118, 128, 127, 135, 127, 112, 114, 106, 120, 126, 131, - 126, 135, 130, 143, 134, 115, 108, 25, 135, 148, 108, 95, 123, 139, 163, 186, - 177, 136, 111, 79, 85, 65, 87, 88, 93, 81, 102, 110, 146, 217, 229, 237, - 209, 140, 144, 148, 161, 170, 166, 154, 142, 75, 22, 22, 21, 48, 42, 33, - 40, 1, 5, 5, 10, 12, 13, 14, 13, 13, 6, 13, 16, 9, 10, 13, - 12, 9, 8, 8, 9, 8, 6, 5, 6, 5, 5, 5, 6, 6, 10, 9, - 8, 10, 10, 14, 13, 14, 13, 13, 13, 13, 13, 12, 10, 8, 5, 6, - 14, 25, 18, 26, 30, 28, 17, 17, 28, 20, 10, 24, 33, 32, 29, 26, - 16, 22, 24, 16, 12, 13, 13, 13, 12, 10, 12, 12, 12, 12, 14, 13, - 10, 8, 10, 13, 13, 13, 18, 21, 5, 9, 20, 20, 25, 14, 32, 44, - 46, 65, 30, 4, 5, 14, 16, 13, 13, 14, 16, 13, 13, 16, 13, 13, - 14, 16, 20, 20, 18, 18, 17, 22, 26, 34, 44, 41, 34, 26, 33, 30, - 25, 20, 9, 10, 16, 13, 12, 10, 10, 8, 8, 12, 6, 5, 10, 16, - 8, 8, 14, 12, 14, 17, 16, 29, 65, 99, 159, 161, 148, 147, 151, 150, - 154, 157, 153, 150, 144, 140, 128, 91, 49, 37, 33, 34, 33, 24, 48, 76, - 75, 159, 189, 202, 183, 139, 114, 114, 131, 126, 124, 119, 134, 127, 123, 120, - 120, 120, 123, 119, 118, 114, 69, 55, 33, 24, 24, 26, 28, 25, 24, 12, - 10, 26, 10, 10, 10, 12, 30, 10, 9, 20, 21, 10, 10, 20, 12, 12, - 10, 12, 20, 37, 34, 51, 49, 85, 99, 106, 104, 91, 83, 52, 12, 81, - 89, 89, 51, 67, 81, 112, 139, 157, 142, 139, 127, 111, 107, 108, 112, 114, - 112, 130, 130, 124, 128, 128, 131, 130, 128, 128, 128, 124, 127, 127, 124, 126, - 126, 126, 127, 124, 123, 123, 122, 122, 120, 120, 120, 119, 118, 120, 119, 119, - 119, 119, 120, 122, 124, 128, 131, 128, 96, 32, 24, 26, 28, 44, 53, 108, - 166, 183, 153, 144, 116, 102, 95, 97, 97, 100, 100, 100, 102, 102, 106, 106, - 106, 104, 108, 100, 100, 99, 102, 99, 73, 51, 51, 61, 64, 56, 32, 100, - 64, 57, 46, 44, 42, 42, 32, 33, 28, 26, 18, 17, 16, 16, 14, 16, - 14, 14, 14, 13, 13, 13, 14, 16, 17, 18, 20, 20, 21, 22, 26, 33, - 37, 53, 33, 42, 55, 97, 91, 107, 178, 175, 165, 153, 147, 138, 138, 130, - 123, 126, 126, 127, 126, 122, 122, 123, 122, 120, 128, 123, 126, 127, 120, 114, - 108, 110, 115, 114, 46, 72, 14, 10, 17, 12, 9, 12, 8, 16, 17, 6, - 21, 17, 8, 46, 42, 25, 8, 36, 18, 4, 4, 5, 8, 10, 12, 13, - 16, 16, 16, 16, 14, 13, 16, 17, 21, 22, 24, 22, 29, 29, 30, 25, - 24, 21, 21, 22, 22, 17, 22, 22, 22, 21, 20, 20, 13, 17, 21, 37, - 68, 72, 51, 166, 175, 191, 178, 177, 157, 135, 134, 128, 123, 124, 116, 120, - 120, 116, 118, 126, 127, 130, 128, 128, 124, 123, 120, 122, 120, 120, 116, 103, - 67, 36, 28, 34, 38, 37, 34, 48, 41, 36, 51, 69, 72, 69, 67, 87, - 91, 85, 33, 135, 99, 118, 146, 181, 191, 195, 197, 195, 193, 146, 107, 51, - 97, 120, 118, 112, 108, 110, 118, 161, 225, 236, 237, 198, 138, 143, 148, 161, - 167, 163, 151, 136, 46, 24, 22, 33, 46, 71, 79, 95, 56, 53, 53, 49, - 24, 12, 10, 8, 8, 9, 0, 1, 1, 5, 1, 1, 2, 4, 1, 2, - 4, 6, 5, 5, 6, 8, 8, 4, 1, 4, 2, 4, 2, 2, 2, 2, - 2, 2, 4, 4, 5, 6, 6, 9, 14, 16, 24, 20, 28, 30, 28, 34, - 38, 40, 49, 45, 20, 24, 34, 44, 30, 26, 22, 21, 24, 24, 22, 21, - 22, 24, 24, 21, 20, 18, 18, 21, 25, 22, 20, 18, 17, 14, 13, 18, - 26, 32, 13, 22, 33, 16, 17, 14, 36, 33, 42, 48, 45, 38, 33, 30, - 33, 32, 30, 28, 32, 29, 30, 28, 29, 32, 32, 29, 30, 30, 24, 26, - 26, 30, 24, 29, 55, 46, 49, 49, 52, 46, 33, 38, 34, 34, 37, 40, - 37, 32, 32, 33, 32, 28, 30, 32, 29, 26, 33, 34, 30, 30, 37, 44, - 45, 57, 63, 52, 52, 100, 148, 155, 163, 148, 154, 148, 153, 143, 146, 131, - 119, 72, 41, 37, 34, 24, 24, 24, 38, 67, 76, 140, 175, 198, 208, 181, - 127, 88, 67, 64, 61, 56, 57, 48, 46, 44, 48, 41, 44, 44, 42, 38, - 41, 36, 40, 38, 41, 30, 48, 38, 48, 41, 41, 41, 41, 41, 38, 38, - 38, 30, 9, 33, 100, 131, 89, 96, 99, 100, 95, 83, 89, 96, 107, 130, - 119, 128, 130, 100, 107, 104, 115, 102, 80, 18, 92, 88, 102, 99, 56, 71, - 81, 99, 85, 83, 81, 73, 73, 64, 60, 57, 49, 52, 41, 40, 36, 34, - 32, 30, 29, 33, 30, 33, 30, 30, 29, 30, 29, 30, 29, 29, 28, 33, - 30, 33, 32, 30, 33, 38, 42, 63, 96, 110, 119, 123, 124, 127, 126, 128, - 131, 127, 114, 45, 26, 21, 18, 30, 61, 49, 65, 73, 71, 72, 73, 75, - 29, 22, 21, 21, 20, 20, 20, 20, 17, 17, 18, 18, 24, 25, 24, 28, - 29, 29, 32, 30, 14, 8, 14, 12, 14, 34, 41, 64, 79, 71, 91, 95, - 84, 73, 88, 84, 72, 12, 49, 71, 68, 68, 49, 61, 46, 63, 38, 25, - 34, 48, 79, 85, 81, 81, 80, 84, 79, 81, 83, 75, 72, 32, 61, 89, - 100, 97, 118, 131, 135, 136, 124, 119, 110, 107, 100, 85, 69, 73, 60, 63, - 57, 55, 49, 52, 49, 51, 49, 51, 49, 53, 53, 55, 53, 60, 60, 53, - 17, 30, 103, 107, 114, 124, 124, 122, 130, 126, 128, 130, 76, 25, 104, 111, - 118, 111, 111, 102, 106, 67, 38, 25, 20, 13, 25, 21, 24, 18, 18, 17, - 20, 18, 13, 17, 14, 17, 8, 18, 22, 22, 14, 25, 21, 14, 9, 9, - 13, 13, 16, 18, 21, 21, 21, 26, 25, 44, 55, 69, 76, 46, 161, 142, - 146, 136, 138, 127, 111, 88, 75, 72, 56, 53, 48, 52, 41, 40, 40, 41, - 37, 38, 36, 33, 32, 30, 33, 32, 34, 34, 30, 34, 65, 68, 84, 91, - 84, 91, 103, 118, 130, 120, 107, 81, 80, 59, 56, 87, 89, 95, 88, 124, - 146, 186, 202, 201, 195, 218, 197, 187, 139, 114, 71, 107, 123, 127, 122, 122, - 115, 138, 191, 226, 236, 237, 185, 135, 139, 146, 158, 163, 158, 147, 114, 32, - 24, 26, 30, 67, 97, 122, 135, 108, 93, 83, 79, 48, 45, 37, 32, 12, - 1, 17, 68, 73, 67, 60, 71, 77, 67, 61, 57, 60, 63, 65, 71, 65, - 65, 55, 46, 25, 20, 14, 14, 13, 12, 13, 14, 20, 21, 18, 20, 21, - 26, 25, 28, 30, 30, 26, 37, 45, 53, 60, 55, 65, 59, 67, 55, 36, - 14, 65, 52, 33, 30, 30, 26, 28, 26, 26, 28, 26, 20, 26, 33, 34, - 30, 29, 29, 33, 26, 21, 16, 13, 13, 9, 12, 24, 24, 20, 17, 22, - 22, 21, 25, 20, 5, 52, 41, 34, 33, 33, 29, 38, 32, 28, 28, 30, - 28, 26, 17, 20, 33, 26, 28, 29, 32, 24, 32, 26, 25, 26, 51, 55, - 48, 49, 49, 52, 51, 53, 45, 12, 69, 57, 41, 42, 32, 36, 37, 34, - 33, 34, 36, 33, 37, 37, 40, 40, 38, 40, 42, 42, 52, 56, 60, 48, - 55, 135, 144, 142, 146, 136, 134, 131, 130, 112, 69, 55, 44, 40, 34, 38, - 28, 22, 36, 64, 96, 89, 143, 195, 202, 208, 166, 104, 59, 42, 37, 64, - 42, 42, 40, 46, 46, 44, 41, 45, 46, 46, 45, 41, 42, 38, 40, 38, - 41, 40, 37, 42, 48, 49, 49, 55, 56, 55, 60, 49, 32, 6, 108, 130, - 122, 116, 102, 103, 99, 122, 108, 118, 71, 99, 108, 106, 100, 112, 115, 104, - 104, 110, 114, 73, 13, 80, 97, 99, 104, 85, 60, 71, 77, 53, 45, 44, - 59, 41, 44, 41, 41, 38, 40, 29, 25, 25, 22, 25, 20, 20, 22, 22, - 22, 22, 21, 21, 21, 21, 21, 20, 20, 18, 21, 20, 20, 20, 20, 21, - 21, 20, 22, 26, 32, 40, 51, 64, 77, 87, 95, 95, 79, 44, 26, 25, - 24, 26, 36, 64, 65, 61, 48, 52, 53, 46, 56, 46, 46, 42, 40, 41, - 37, 32, 30, 30, 28, 26, 26, 21, 24, 22, 21, 21, 17, 17, 18, 18, - 22, 41, 26, 52, 37, 89, 134, 139, 142, 138, 140, 136, 135, 134, 103, 81, - 4, 103, 81, 85, 77, 72, 89, 104, 75, 77, 68, 36, 93, 112, 111, 107, - 104, 108, 104, 106, 102, 93, 88, 72, 30, 102, 103, 96, 114, 120, 123, 124, - 112, 111, 96, 99, 77, 61, 63, 60, 55, 48, 44, 40, 36, 34, 34, 29, - 30, 30, 29, 24, 24, 21, 21, 21, 20, 17, 16, 26, 24, 116, 128, 126, - 128, 135, 135, 135, 135, 138, 142, 87, 29, 143, 136, 134, 136, 132, 132, 132, - 112, 97, 77, 52, 14, 36, 84, 79, 41, 48, 71, 67, 41, 49, 61, 56, - 37, 51, 73, 68, 75, 72, 89, 71, 73, 63, 33, 8, 21, 41, 61, 44, - 44, 49, 52, 52, 59, 73, 81, 80, 40, 131, 120, 119, 87, 96, 88, 83, - 63, 64, 65, 63, 49, 48, 51, 51, 45, 45, 45, 44, 42, 44, 44, 42, - 44, 49, 49, 49, 51, 56, 71, 71, 87, 99, 110, 131, 91, 91, 131, 116, - 107, 120, 135, 139, 132, 120, 118, 108, 68, 131, 154, 182, 204, 197, 202, 206, - 178, 154, 132, 142, 106, 71, 104, 126, 135, 140, 134, 124, 148, 210, 228, 234, - 234, 169, 134, 139, 146, 157, 158, 150, 140, 77, 25, 25, 25, 32, 64, 116, - 138, 154, 65, 65, 68, 71, 45, 65, 48, 40, 12, 1, 77, 68, 57, 55, - 55, 52, 46, 59, 56, 55, 49, 51, 53, 49, 42, 44, 48, 45, 63, 57, - 37, 21, 20, 13, 28, 41, 42, 42, 42, 40, 38, 36, 38, 34, 28, 17, - 26, 55, 63, 69, 63, 67, 63, 69, 71, 60, 46, 17, 65, 53, 51, 42, - 46, 45, 41, 40, 36, 34, 32, 17, 32, 45, 55, 49, 48, 42, 45, 40, - 30, 29, 28, 24, 9, 42, 42, 42, 51, 28, 33, 48, 29, 25, 28, 10, - 53, 65, 56, 59, 56, 44, 42, 32, 28, 34, 28, 10, 20, 64, 34, 57, - 42, 51, 37, 49, 37, 25, 16, 14, 28, 46, 56, 56, 52, 52, 63, 53, - 48, 41, 9, 68, 72, 42, 51, 42, 42, 41, 42, 46, 40, 38, 28, 21, - 34, 40, 51, 37, 44, 46, 53, 51, 52, 56, 59, 48, 111, 140, 123, 89, - 75, 69, 67, 56, 53, 46, 46, 37, 34, 38, 30, 26, 42, 59, 67, 89, - 93, 182, 195, 206, 204, 158, 103, 48, 42, 41, 41, 41, 41, 44, 51, 51, - 51, 69, 93, 134, 146, 163, 173, 165, 153, 110, 64, 49, 44, 40, 42, 44, - 41, 40, 42, 42, 46, 55, 52, 51, 28, 118, 128, 100, 88, 88, 89, 87, - 84, 102, 68, 84, 118, 120, 103, 118, 99, 104, 96, 104, 104, 118, 73, 12, - 85, 91, 108, 95, 87, 81, 53, 51, 48, 64, 64, 40, 33, 32, 33, 38, - 25, 29, 21, 21, 20, 17, 20, 18, 18, 20, 20, 20, 20, 18, 20, 21, - 20, 20, 20, 20, 20, 22, 26, 32, 28, 32, 32, 32, 28, 24, 21, 22, - 21, 24, 25, 25, 25, 26, 28, 25, 26, 24, 25, 14, 28, 67, 73, 72, - 65, 65, 63, 59, 55, 51, 48, 46, 49, 44, 42, 41, 37, 37, 34, 33, - 30, 29, 29, 29, 30, 26, 26, 28, 25, 28, 36, 46, 59, 61, 61, 72, - 112, 140, 139, 132, 132, 123, 120, 122, 128, 112, 88, 9, 97, 89, 96, 81, - 88, 91, 91, 81, 83, 79, 36, 99, 127, 135, 128, 120, 127, 132, 131, 111, - 110, 95, 76, 30, 91, 93, 112, 139, 142, 110, 104, 123, 96, 72, 71, 65, - 69, 71, 55, 49, 46, 38, 41, 38, 37, 34, 30, 30, 29, 29, 28, 25, - 24, 22, 24, 22, 20, 18, 40, 45, 127, 115, 122, 126, 135, 135, 132, 134, - 128, 153, 89, 34, 139, 147, 147, 148, 146, 146, 140, 127, 114, 87, 61, 13, - 76, 100, 106, 80, 77, 48, 56, 69, 64, 45, 49, 46, 49, 100, 123, 120, - 120, 115, 118, 108, 83, 63, 10, 96, 106, 96, 95, 88, 85, 84, 81, 77, - 80, 85, 91, 46, 114, 158, 114, 104, 81, 73, 81, 67, 64, 67, 61, 51, - 49, 53, 52, 46, 48, 49, 48, 49, 45, 46, 49, 51, 49, 56, 60, 60, - 61, 77, 83, 97, 91, 102, 80, 77, 112, 122, 147, 134, 120, 123, 126, 119, - 119, 107, 92, 120, 154, 154, 195, 199, 201, 197, 170, 132, 123, 126, 130, 110, - 72, 97, 124, 130, 132, 118, 131, 169, 218, 228, 236, 229, 148, 134, 138, 144, - 155, 153, 146, 120, 42, 26, 25, 25, 20, 64, 116, 140, 153, 22, 29, 26, - 17, 21, 20, 52, 36, 10, 4, 55, 75, 53, 68, 52, 46, 49, 44, 41, - 38, 28, 24, 37, 52, 68, 68, 60, 61, 42, 48, 55, 38, 24, 17, 33, - 44, 40, 45, 40, 44, 42, 37, 38, 42, 17, 17, 44, 68, 73, 68, 71, - 59, 65, 63, 51, 46, 34, 18, 60, 57, 49, 48, 51, 44, 48, 38, 41, - 44, 34, 21, 37, 41, 48, 48, 49, 60, 55, 52, 41, 40, 29, 24, 12, - 45, 52, 42, 52, 51, 46, 42, 48, 28, 25, 8, 45, 65, 77, 81, 81, - 59, 61, 48, 42, 32, 29, 9, 49, 73, 69, 64, 60, 57, 56, 59, 48, - 42, 26, 13, 34, 53, 59, 44, 42, 51, 55, 55, 57, 29, 2, 77, 79, - 73, 56, 36, 40, 30, 42, 37, 34, 37, 25, 17, 33, 72, 61, 61, 59, - 59, 55, 53, 53, 56, 67, 46, 127, 135, 118, 91, 79, 65, 64, 57, 53, - 44, 44, 36, 26, 25, 33, 38, 59, 61, 97, 95, 126, 179, 206, 205, 208, - 143, 102, 72, 67, 69, 59, 55, 59, 73, 89, 120, 154, 187, 210, 221, 226, - 229, 229, 222, 224, 216, 193, 163, 134, 79, 55, 42, 44, 42, 44, 41, 40, - 52, 49, 46, 9, 84, 127, 81, 76, 91, 92, 87, 85, 96, 69, 89, 108, - 118, 115, 111, 116, 111, 104, 110, 107, 111, 68, 12, 85, 89, 99, 93, 85, - 56, 56, 55, 53, 57, 44, 25, 76, 61, 51, 45, 51, 63, 44, 49, 46, - 42, 38, 36, 41, 38, 49, 49, 49, 42, 41, 41, 40, 36, 34, 36, 34, - 56, 49, 53, 51, 59, 57, 59, 52, 51, 40, 30, 25, 28, 25, 22, 22, - 22, 22, 24, 21, 26, 25, 9, 36, 69, 87, 92, 95, 93, 96, 91, 91, - 76, 64, 56, 87, 92, 69, 67, 68, 57, 56, 68, 67, 28, 10, 45, 63, - 73, 48, 38, 48, 57, 38, 67, 59, 65, 60, 67, 115, 138, 134, 131, 132, - 123, 123, 106, 118, 127, 67, 12, 75, 103, 96, 112, 112, 120, 122, 95, 112, - 69, 37, 91, 130, 140, 138, 134, 131, 142, 127, 132, 112, 99, 85, 32, 92, - 91, 102, 114, 132, 161, 138, 128, 83, 87, 68, 84, 118, 112, 106, 77, 87, - 87, 89, 81, 79, 69, 63, 51, 53, 51, 48, 48, 44, 44, 42, 41, 42, - 36, 45, 25, 102, 135, 143, 135, 128, 132, 146, 139, 131, 147, 89, 38, 123, - 147, 147, 143, 143, 138, 157, 127, 114, 112, 60, 14, 80, 104, 87, 115, 88, - 102, 76, 80, 81, 102, 63, 48, 75, 120, 135, 134, 130, 128, 123, 118, 84, - 72, 24, 100, 108, 102, 102, 99, 96, 97, 92, 88, 68, 91, 95, 51, 115, - 138, 126, 143, 127, 135, 138, 111, 93, 89, 80, 72, 75, 76, 64, 69, 69, - 69, 68, 68, 68, 68, 68, 69, 71, 75, 76, 73, 77, 81, 91, 79, 106, - 127, 99, 51, 108, 115, 111, 111, 123, 114, 120, 112, 111, 107, 91, 128, 161, - 163, 201, 191, 198, 167, 132, 126, 122, 147, 116, 103, 65, 96, 110, 120, 118, - 120, 136, 182, 221, 225, 232, 213, 138, 134, 139, 146, 154, 150, 140, 85, 30, - 26, 25, 26, 16, 64, 114, 132, 154, 16, 14, 33, 36, 30, 29, 32, 20, - 9, 10, 53, 64, 63, 53, 68, 49, 56, 48, 53, 40, 26, 20, 52, 60, - 59, 46, 38, 40, 41, 48, 45, 51, 26, 16, 45, 46, 42, 45, 38, 38, - 36, 33, 34, 48, 17, 16, 44, 69, 69, 76, 75, 51, 52, 52, 53, 49, - 29, 18, 60, 51, 45, 53, 46, 55, 48, 42, 41, 48, 36, 25, 41, 48, - 61, 49, 38, 60, 49, 67, 48, 42, 36, 28, 13, 40, 56, 55, 45, 41, - 41, 42, 46, 32, 28, 8, 55, 72, 76, 72, 76, 80, 60, 67, 52, 42, - 32, 6, 59, 71, 81, 69, 67, 65, 69, 63, 61, 57, 25, 13, 57, 60, - 67, 61, 45, 53, 72, 60, 52, 41, 8, 81, 77, 68, 61, 46, 38, 41, - 52, 55, 53, 48, 30, 13, 67, 75, 76, 73, 72, 61, 63, 59, 59, 65, - 65, 57, 116, 134, 120, 107, 91, 75, 68, 60, 51, 44, 45, 29, 25, 36, - 37, 57, 56, 72, 93, 84, 97, 191, 199, 217, 186, 138, 104, 122, 127, 118, - 126, 135, 158, 177, 201, 213, 224, 228, 229, 229, 228, 224, 224, 225, 222, 217, - 218, 213, 213, 185, 122, 59, 44, 42, 42, 46, 44, 51, 57, 33, 8, 84, - 128, 99, 84, 112, 92, 112, 97, 83, 60, 88, 123, 122, 108, 116, 108, 123, - 118, 100, 99, 107, 81, 16, 91, 89, 100, 96, 96, 76, 72, 53, 65, 56, - 60, 45, 67, 84, 81, 63, 61, 53, 61, 57, 56, 55, 56, 37, 33, 49, - 51, 53, 59, 52, 56, 56, 56, 57, 56, 49, 45, 55, 64, 61, 63, 59, - 61, 60, 60, 59, 40, 63, 67, 68, 67, 60, 60, 37, 34, 33, 30, 32, - 25, 10, 44, 77, 95, 96, 93, 96, 96, 100, 95, 87, 73, 63, 79, 102, - 80, 91, 89, 89, 71, 61, 72, 63, 16, 75, 80, 81, 79, 77, 71, 67, - 64, 63, 57, 63, 67, 57, 102, 130, 134, 128, 131, 116, 116, 110, 120, 102, - 88, 16, 92, 99, 116, 100, 102, 108, 110, 112, 111, 80, 51, 114, 131, 132, - 135, 136, 143, 146, 143, 140, 127, 107, 81, 32, 92, 93, 116, 104, 123, 134, - 151, 139, 87, 88, 69, 91, 126, 112, 110, 107, 107, 104, 106, 110, 103, 83, - 79, 65, 93, 99, 97, 93, 92, 73, 69, 80, 83, 59, 38, 80, 127, 135, - 124, 135, 128, 140, 138, 139, 134, 151, 96, 45, 132, 147, 147, 154, 140, 140, - 132, 136, 112, 115, 61, 14, 89, 112, 103, 136, 106, 110, 119, 106, 92, 103, - 64, 49, 108, 135, 128, 126, 123, 124, 123, 132, 85, 61, 10, 80, 114, 107, - 130, 108, 106, 84, 99, 96, 91, 96, 99, 61, 127, 135, 147, 128, 138, 136, - 140, 128, 128, 95, 88, 57, 41, 73, 75, 77, 77, 76, 68, 71, 79, 67, - 48, 63, 95, 110, 114, 110, 76, 75, 75, 81, 96, 130, 112, 53, 110, 107, - 111, 110, 122, 115, 116, 118, 116, 104, 95, 134, 163, 175, 198, 199, 173, 139, - 124, 118, 138, 144, 130, 97, 71, 87, 112, 115, 114, 127, 158, 205, 224, 229, - 233, 193, 131, 132, 139, 151, 150, 144, 123, 41, 29, 28, 28, 26, 36, 59, - 122, 131, 143, 61, 12, 12, 21, 13, 28, 29, 46, 9, 1, 44, 73, 59, - 56, 65, 59, 52, 48, 49, 34, 29, 18, 49, 52, 38, 46, 52, 51, 71, - 57, 45, 52, 32, 24, 48, 48, 52, 52, 53, 46, 48, 37, 33, 45, 18, - 14, 56, 72, 68, 68, 68, 48, 63, 56, 61, 46, 37, 22, 53, 59, 42, - 59, 60, 44, 46, 51, 48, 49, 38, 25, 46, 56, 55, 51, 38, 52, 45, - 60, 56, 49, 37, 28, 5, 42, 42, 55, 48, 42, 41, 45, 46, 32, 28, - 9, 49, 69, 71, 63, 59, 59, 60, 57, 56, 42, 29, 6, 65, 83, 80, - 71, 71, 63, 73, 71, 64, 56, 36, 14, 57, 63, 69, 53, 64, 53, 65, - 59, 51, 42, 8, 77, 68, 61, 56, 56, 44, 46, 60, 63, 57, 48, 29, - 14, 68, 71, 80, 76, 77, 64, 68, 68, 61, 55, 55, 51, 103, 128, 126, - 102, 107, 97, 79, 73, 57, 53, 30, 20, 29, 52, 60, 60, 75, 65, 89, - 83, 95, 167, 209, 212, 181, 126, 96, 119, 189, 194, 198, 206, 210, 216, 222, - 224, 225, 224, 218, 213, 201, 197, 198, 186, 179, 167, 170, 173, 189, 205, 205, - 162, 76, 51, 41, 41, 44, 46, 48, 28, 8, 104, 138, 108, 91, 88, 99, - 87, 95, 93, 53, 88, 118, 118, 103, 103, 104, 104, 107, 104, 103, 102, 80, - 16, 91, 81, 99, 92, 97, 95, 84, 72, 61, 55, 49, 46, 75, 83, 71, - 76, 76, 59, 75, 79, 81, 69, 52, 36, 44, 76, 93, 89, 57, 57, 59, - 63, 65, 65, 67, 37, 52, 88, 84, 85, 84, 67, 65, 68, 64, 65, 45, - 63, 76, 75, 77, 69, 69, 60, 55, 55, 52, 48, 28, 9, 71, 80, 96, - 104, 107, 104, 95, 83, 102, 91, 80, 51, 80, 84, 103, 87, 85, 93, 89, - 80, 79, 69, 6, 84, 84, 68, 91, 91, 53, 59, 91, 81, 87, 69, 67, - 51, 100, 132, 136, 122, 119, 114, 111, 123, 100, 107, 88, 4, 93, 100, 128, - 107, 99, 96, 100, 111, 123, 83, 53, 120, 136, 143, 144, 136, 130, 131, 144, - 148, 134, 115, 84, 33, 89, 89, 99, 92, 116, 139, 135, 122, 89, 91, 76, - 95, 126, 122, 115, 114, 111, 112, 110, 107, 108, 107, 85, 69, 99, 104, 110, - 107, 104, 102, 100, 97, 97, 63, 28, 112, 97, 126, 126, 131, 136, 138, 142, - 134, 132, 144, 104, 46, 139, 148, 150, 154, 155, 155, 131, 142, 116, 116, 67, - 16, 88, 118, 123, 120, 104, 104, 104, 107, 115, 104, 69, 48, 123, 138, 138, - 107, 118, 130, 126, 132, 84, 68, 9, 124, 115, 111, 108, 111, 114, 118, 120, - 123, 124, 103, 107, 63, 120, 154, 139, 140, 138, 142, 132, 131, 130, 119, 111, - 37, 57, 80, 106, 103, 85, 89, 91, 99, 93, 79, 51, 97, 100, 126, 111, - 97, 119, 122, 112, 96, 126, 118, 110, 55, 104, 103, 120, 118, 119, 116, 111, - 112, 118, 103, 91, 119, 166, 166, 213, 187, 154, 126, 123, 127, 144, 150, 128, - 95, 68, 81, 106, 112, 116, 138, 190, 213, 214, 229, 225, 153, 127, 132, 146, - 147, 143, 131, 67, 30, 28, 26, 30, 29, 38, 61, 123, 127, 134, 64, 12, - 12, 25, 28, 38, 29, 33, 9, 1, 53, 63, 52, 64, 64, 61, 59, 57, - 45, 33, 24, 18, 49, 38, 46, 44, 63, 63, 67, 51, 53, 49, 41, 22, - 55, 68, 65, 64, 56, 57, 45, 40, 33, 37, 14, 34, 60, 67, 65, 53, - 60, 38, 42, 40, 44, 46, 45, 22, 45, 56, 42, 37, 44, 49, 55, 60, - 46, 44, 48, 24, 46, 53, 48, 45, 46, 57, 49, 67, 56, 55, 38, 26, - 6, 36, 51, 56, 44, 60, 46, 42, 42, 32, 29, 12, 52, 75, 65, 63, - 63, 65, 64, 57, 60, 44, 29, 6, 60, 63, 73, 73, 73, 73, 79, 73, - 72, 57, 30, 25, 61, 60, 69, 59, 65, 65, 79, 57, 48, 37, 6, 79, - 79, 67, 60, 57, 73, 73, 73, 72, 67, 49, 29, 12, 71, 79, 80, 73, - 76, 72, 75, 79, 64, 65, 69, 48, 91, 120, 122, 112, 95, 102, 87, 81, - 64, 73, 34, 18, 44, 56, 75, 77, 75, 65, 112, 85, 107, 123, 189, 206, - 183, 122, 110, 118, 157, 190, 198, 202, 208, 210, 210, 213, 206, 201, 193, 174, - 155, 150, 150, 151, 143, 147, 142, 148, 153, 151, 162, 187, 177, 87, 41, 41, - 46, 45, 46, 44, 22, 111, 116, 111, 91, 89, 97, 87, 92, 85, 53, 84, - 120, 114, 106, 110, 102, 104, 96, 111, 110, 100, 77, 16, 85, 79, 106, 108, - 100, 87, 76, 63, 64, 57, 51, 24, 69, 92, 76, 83, 69, 73, 84, 87, - 88, 77, 52, 36, 63, 93, 92, 100, 97, 73, 73, 72, 65, 76, 61, 36, - 83, 87, 92, 91, 92, 85, 72, 69, 71, 69, 46, 75, 79, 87, 83, 83, - 79, 71, 61, 61, 56, 51, 28, 8, 76, 93, 99, 81, 95, 104, 106, 83, - 95, 95, 79, 44, 81, 88, 100, 95, 103, 107, 88, 95, 79, 72, 8, 93, - 88, 83, 85, 83, 89, 88, 95, 92, 95, 88, 68, 71, 103, 140, 122, 123, - 118, 124, 115, 114, 120, 103, 92, 5, 100, 106, 103, 102, 128, 120, 128, 112, - 107, 87, 49, 115, 132, 139, 147, 144, 139, 140, 142, 135, 139, 115, 84, 33, - 88, 92, 100, 100, 126, 89, 97, 100, 88, 95, 77, 96, 124, 123, 126, 104, - 122, 119, 116, 114, 116, 112, 96, 71, 91, 110, 122, 120, 119, 116, 115, 114, - 100, 64, 29, 106, 138, 131, 127, 140, 139, 142, 139, 132, 127, 142, 96, 55, - 138, 150, 143, 143, 143, 140, 144, 138, 114, 118, 73, 20, 102, 124, 99, 111, - 85, 124, 111, 127, 119, 100, 64, 59, 118, 143, 127, 122, 115, 134, 131, 130, - 81, 65, 9, 120, 128, 115, 118, 119, 122, 123, 127, 128, 127, 106, 110, 68, - 119, 146, 142, 124, 126, 123, 119, 123, 120, 120, 108, 30, 75, 112, 131, 115, - 111, 102, 122, 119, 96, 83, 46, 97, 118, 119, 128, 119, 120, 112, 120, 127, - 134, 118, 103, 56, 103, 131, 100, 114, 112, 114, 112, 115, 111, 100, 84, 124, - 139, 150, 171, 183, 163, 128, 122, 132, 151, 150, 111, 104, 73, 85, 110, 107, - 132, 173, 210, 214, 218, 226, 201, 131, 128, 135, 148, 143, 135, 95, 34, 28, - 29, 28, 34, 30, 9, 76, 126, 134, 139, 9, 16, 29, 49, 45, 34, 26, - 32, 8, 1, 59, 67, 56, 61, 63, 59, 46, 63, 40, 32, 24, 16, 48, - 75, 79, 68, 68, 67, 53, 46, 46, 49, 42, 25, 25, 46, 51, 44, 48, - 45, 48, 38, 36, 38, 17, 36, 64, 69, 51, 46, 44, 45, 44, 46, 46, - 45, 42, 24, 40, 63, 49, 45, 38, 45, 34, 41, 36, 37, 48, 26, 49, - 56, 49, 53, 57, 56, 53, 45, 48, 59, 37, 25, 5, 40, 44, 57, 46, - 48, 53, 44, 41, 36, 29, 8, 40, 73, 65, 65, 67, 65, 61, 61, 56, - 42, 30, 4, 41, 80, 67, 80, 73, 76, 79, 77, 69, 69, 29, 10, 55, - 67, 72, 65, 60, 61, 59, 60, 56, 29, 1, 75, 72, 56, 65, 59, 56, - 55, 59, 57, 64, 48, 28, 10, 72, 67, 73, 72, 71, 73, 81, 91, 68, - 67, 67, 53, 71, 116, 119, 110, 93, 99, 88, 85, 79, 69, 41, 21, 52, - 72, 76, 72, 69, 68, 111, 91, 114, 92, 159, 214, 186, 114, 106, 107, 127, - 138, 163, 174, 183, 186, 189, 181, 166, 148, 140, 147, 148, 150, 153, 162, 163, - 167, 154, 147, 140, 135, 140, 143, 178, 155, 84, 37, 46, 42, 41, 40, 10, - 89, 112, 107, 75, 88, 102, 92, 95, 80, 55, 85, 116, 119, 112, 104, 110, - 104, 104, 115, 108, 102, 76, 20, 80, 84, 85, 91, 93, 93, 77, 63, 65, - 61, 56, 24, 51, 84, 87, 85, 97, 97, 112, 111, 108, 84, 57, 16, 65, - 95, 93, 100, 88, 83, 87, 106, 97, 79, 65, 34, 83, 87, 95, 87, 85, - 91, 87, 85, 72, 68, 52, 73, 85, 87, 85, 83, 83, 79, 72, 67, 61, - 51, 30, 6, 77, 97, 75, 81, 89, 111, 99, 95, 99, 89, 79, 48, 93, - 93, 102, 92, 100, 95, 97, 99, 83, 56, 9, 92, 96, 115, 95, 93, 97, - 110, 97, 95, 93, 103, 79, 57, 87, 126, 136, 138, 130, 124, 131, 138, 116, - 108, 64, 1, 84, 111, 110, 120, 131, 120, 122, 119, 106, 88, 48, 93, 132, - 135, 140, 139, 140, 142, 139, 146, 144, 134, 85, 34, 87, 87, 100, 116, 97, - 115, 100, 99, 84, 97, 83, 99, 108, 131, 130, 111, 114, 128, 130, 120, 126, - 122, 110, 75, 93, 123, 95, 114, 127, 126, 122, 119, 103, 72, 34, 128, 138, - 138, 144, 142, 136, 135, 130, 131, 132, 146, 97, 71, 93, 147, 143, 140, 142, - 138, 138, 134, 115, 111, 71, 21, 97, 123, 116, 115, 122, 115, 123, 110, 110, - 92, 69, 56, 118, 132, 131, 110, 131, 120, 126, 131, 83, 72, 8, 112, 124, - 118, 116, 142, 143, 150, 148, 146, 132, 108, 112, 71, 115, 154, 148, 147, 139, - 138, 118, 120, 123, 115, 87, 55, 100, 116, 115, 119, 122, 122, 119, 108, 102, - 89, 42, 103, 128, 122, 95, 120, 115, 123, 120, 131, 138, 120, 115, 40, 102, - 122, 103, 103, 107, 112, 112, 115, 108, 112, 79, 116, 140, 155, 171, 170, 183, - 130, 122, 148, 161, 139, 106, 95, 99, 100, 110, 130, 167, 199, 214, 216, 226, - 217, 157, 126, 132, 144, 142, 132, 107, 44, 29, 29, 29, 32, 34, 32, 12, - 61, 128, 150, 143, 17, 20, 21, 21, 22, 30, 33, 20, 8, 1, 37, 65, - 55, 56, 55, 56, 60, 49, 34, 30, 25, 13, 51, 49, 56, 46, 63, 51, - 48, 42, 38, 38, 36, 36, 26, 30, 38, 36, 44, 42, 44, 34, 33, 36, - 13, 41, 59, 56, 49, 52, 55, 52, 46, 52, 44, 60, 41, 26, 40, 61, - 59, 60, 51, 53, 44, 42, 41, 49, 36, 29, 55, 60, 56, 63, 51, 52, - 57, 53, 55, 41, 37, 29, 9, 33, 52, 55, 53, 49, 56, 46, 45, 36, - 32, 12, 65, 73, 79, 80, 71, 67, 67, 65, 61, 41, 30, 2, 57, 81, - 69, 76, 77, 77, 85, 76, 72, 63, 41, 12, 59, 73, 77, 63, 64, 63, - 63, 65, 51, 45, 5, 71, 84, 71, 84, 73, 84, 76, 73, 71, 67, 49, - 28, 10, 77, 75, 76, 84, 72, 69, 67, 79, 79, 64, 71, 52, 63, 110, - 112, 107, 107, 95, 91, 91, 84, 76, 44, 21, 60, 75, 77, 77, 84, 104, - 88, 111, 80, 120, 97, 201, 198, 128, 115, 107, 115, 122, 134, 138, 140, 144, - 140, 139, 132, 123, 120, 120, 123, 139, 150, 159, 162, 163, 165, 153, 148, 148, - 146, 136, 144, 174, 95, 37, 41, 44, 44, 33, 10, 85, 122, 107, 92, 92, - 95, 93, 97, 77, 44, 83, 114, 124, 123, 116, 115, 115, 116, 119, 106, 99, - 79, 29, 80, 85, 93, 87, 80, 72, 71, 56, 65, 68, 48, 57, 69, 100, - 108, 96, 100, 96, 108, 92, 85, 84, 52, 16, 73, 97, 103, 93, 96, 95, - 93, 96, 95, 75, 68, 30, 99, 88, 96, 83, 92, 87, 89, 91, 91, 72, - 52, 71, 80, 79, 79, 79, 81, 75, 73, 71, 71, 52, 33, 10, 83, 100, - 97, 73, 100, 80, 80, 92, 91, 87, 77, 51, 88, 103, 103, 95, 92, 95, - 99, 100, 80, 77, 28, 95, 96, 99, 114, 102, 100, 102, 108, 108, 110, 108, - 99, 67, 87, 111, 119, 122, 120, 104, 114, 110, 110, 104, 96, 12, 88, 116, - 115, 116, 119, 115, 111, 106, 108, 102, 75, 69, 120, 131, 131, 131, 128, 132, - 134, 132, 132, 124, 92, 34, 87, 89, 83, 93, 87, 111, 103, 102, 102, 116, - 100, 83, 110, 104, 108, 103, 112, 110, 115, 115, 119, 119, 119, 111, 88, 106, - 110, 97, 111, 115, 108, 120, 114, 79, 28, 103, 138, 131, 134, 135, 134, 130, - 131, 140, 143, 147, 107, 59, 76, 142, 148, 146, 148, 140, 139, 112, 112, 100, - 69, 22, 97, 124, 123, 128, 122, 130, 126, 124, 122, 89, 75, 56, 123, 150, - 134, 107, 110, 130, 128, 142, 91, 61, 8, 83, 130, 118, 136, 135, 123, 120, - 123, 136, 140, 108, 112, 73, 115, 146, 154, 144, 136, 135, 111, 124, 122, 123, - 77, 44, 111, 124, 131, 119, 115, 115, 114, 110, 100, 76, 44, 115, 132, 116, - 132, 134, 132, 135, 131, 130, 135, 138, 115, 33, 104, 102, 99, 103, 114, 107, - 106, 102, 106, 93, 63, 130, 136, 114, 144, 140, 175, 159, 120, 134, 158, 155, - 110, 103, 106, 118, 147, 173, 197, 206, 209, 224, 221, 171, 124, 128, 140, 138, - 127, 99, 42, 30, 30, 28, 29, 33, 37, 30, 45, 95, 128, 147, 155, 10, - 10, 10, 12, 12, 12, 12, 12, 8, 4, 13, 37, 64, 71, 51, 52, 33, - 33, 32, 18, 22, 13, 46, 42, 38, 42, 40, 42, 40, 32, 28, 26, 28, - 26, 30, 38, 40, 33, 32, 33, 33, 30, 36, 25, 13, 52, 57, 63, 46, - 48, 40, 41, 38, 38, 37, 41, 42, 33, 29, 45, 42, 37, 41, 41, 57, - 46, 44, 49, 45, 40, 38, 41, 45, 51, 44, 38, 37, 38, 38, 36, 36, - 28, 4, 32, 52, 48, 46, 45, 44, 45, 45, 49, 30, 13, 46, 60, 57, - 59, 59, 60, 57, 69, 60, 41, 28, 4, 61, 80, 76, 71, 69, 73, 65, - 72, 69, 59, 33, 6, 56, 61, 72, 72, 64, 72, 71, 65, 48, 44, 5, - 64, 72, 69, 69, 68, 68, 67, 65, 64, 64, 46, 26, 9, 72, 73, 79, - 75, 80, 75, 81, 69, 75, 76, 68, 56, 53, 85, 111, 99, 92, 83, 69, - 73, 77, 72, 48, 20, 55, 73, 95, 88, 107, 119, 91, 124, 124, 112, 84, - 124, 183, 139, 107, 106, 114, 119, 120, 115, 127, 124, 127, 120, 116, 112, 114, - 118, 155, 161, 138, 158, 167, 163, 161, 170, 157, 154, 151, 150, 146, 170, 91, - 32, 36, 40, 42, 28, 6, 79, 108, 106, 93, 88, 95, 93, 89, 79, 42, - 83, 99, 115, 114, 107, 106, 103, 103, 100, 92, 89, 79, 24, 40, 71, 73, - 51, 45, 63, 63, 40, 42, 51, 52, 60, 72, 92, 102, 92, 89, 87, 89, - 87, 85, 85, 45, 29, 65, 93, 107, 102, 102, 107, 96, 99, 95, 77, 67, - 33, 87, 84, 89, 84, 80, 79, 68, 65, 83, 80, 75, 75, 60, 63, 63, - 63, 59, 57, 59, 61, 57, 55, 32, 8, 87, 104, 67, 69, 75, 71, 72, - 72, 76, 81, 75, 73, 71, 73, 87, 87, 76, 76, 75, 76, 71, 80, 6, - 96, 96, 99, 93, 95, 97, 102, 99, 100, 95, 102, 100, 93, 71, 71, 83, - 87, 84, 84, 89, 89, 89, 93, 100, 8, 53, 112, 112, 110, 110, 106, 73, - 71, 76, 81, 99, 97, 77, 97, 108, 103, 108, 106, 111, 116, 116, 108, 85, - 36, 77, 73, 84, 92, 87, 89, 95, 100, 65, 63, 67, 110, 112, 116, 119, - 120, 119, 123, 124, 124, 122, 126, 119, 119, 118, 123, 123, 126, 124, 104, 104, - 122, 107, 83, 34, 132, 139, 130, 139, 143, 138, 144, 146, 134, 122, 118, 111, - 67, 64, 136, 128, 143, 104, 104, 104, 91, 97, 91, 69, 25, 96, 119, 115, - 93, 119, 119, 124, 104, 107, 95, 71, 46, 126, 142, 120, 123, 108, 127, 122, - 142, 77, 65, 8, 127, 130, 119, 128, 124, 126, 124, 124, 120, 120, 118, 116, - 83, 85, 116, 136, 131, 118, 107, 115, 114, 110, 122, 120, 44, 110, 126, 124, - 122, 120, 116, 114, 108, 102, 85, 44, 103, 131, 131, 128, 128, 132, 132, 123, - 127, 124, 118, 81, 37, 87, 110, 97, 89, 93, 100, 110, 106, 104, 91, 84, - 110, 120, 118, 128, 148, 132, 178, 128, 127, 157, 158, 157, 154, 155, 171, 190, - 191, 198, 202, 216, 214, 171, 122, 128, 136, 127, 119, 97, 46, 30, 30, 26, - 32, 32, 34, 30, 28, 40, 49, 120, 124, 127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 9, 8, 10, 12, 13, 13, 20, 14, 17, 20, 20, 13, - 16, 13, 14, 14, 12, 12, 13, 10, 12, 9, 12, 10, 16, 12, 16, 14, - 26, 34, 40, 38, 29, 18, 13, 41, 45, 48, 40, 37, 32, 40, 37, 32, - 41, 38, 36, 33, 37, 41, 51, 40, 41, 40, 40, 40, 41, 38, 38, 38, - 38, 37, 22, 24, 17, 12, 12, 12, 10, 10, 9, 12, 5, 12, 12, 14, - 16, 17, 20, 37, 42, 37, 29, 17, 4, 37, 52, 26, 33, 40, 53, 28, - 38, 38, 22, 4, 29, 41, 33, 33, 41, 41, 34, 34, 42, 42, 17, 6, - 32, 41, 30, 41, 37, 37, 28, 44, 36, 20, 6, 17, 41, 41, 40, 40, - 44, 45, 42, 44, 45, 44, 24, 8, 53, 77, 73, 57, 56, 68, 69, 51, - 56, 63, 71, 61, 65, 68, 64, 59, 67, 63, 64, 57, 56, 55, 44, 21, - 56, 85, 87, 76, 73, 88, 89, 85, 93, 116, 119, 153, 185, 177, 119, 111, - 103, 115, 106, 61, 52, 52, 53, 52, 49, 52, 51, 91, 112, 170, 131, 135, - 163, 165, 167, 163, 161, 167, 154, 155, 147, 169, 100, 36, 33, 38, 28, 36, - 14, 37, 61, 85, 110, 107, 102, 112, 80, 72, 45, 76, 85, 104, 104, 97, - 80, 73, 69, 65, 65, 51, 40, 52, 59, 49, 53, 51, 51, 44, 45, 44, - 44, 36, 38, 37, 46, 80, 79, 87, 91, 87, 99, 81, 91, 77, 29, 26, - 60, 89, 84, 76, 85, 88, 83, 80, 83, 79, 67, 36, 88, 85, 72, 80, - 80, 79, 79, 81, 76, 73, 72, 69, 75, 73, 71, 72, 71, 68, 65, 65, - 64, 60, 57, 8, 57, 67, 61, 63, 67, 68, 67, 69, 73, 73, 72, 68, - 75, 72, 73, 72, 69, 68, 68, 71, 63, 56, 6, 65, 76, 69, 75, 75, - 80, 83, 81, 84, 87, 89, 89, 76, 88, 96, 89, 79, 99, 96, 84, 68, - 100, 85, 65, 26, 64, 55, 45, 46, 49, 38, 44, 46, 41, 42, 46, 42, - 63, 75, 64, 60, 87, 96, 87, 69, 95, 96, 59, 41, 68, 34, 37, 36, - 34, 29, 30, 32, 32, 25, 24, 33, 24, 22, 22, 28, 26, 26, 29, 33, - 34, 34, 37, 41, 46, 52, 57, 60, 69, 120, 118, 124, 107, 76, 32, 116, - 139, 127, 134, 139, 134, 131, 123, 122, 112, 112, 95, 92, 60, 88, 85, 95, - 102, 95, 72, 68, 60, 55, 72, 28, 57, 49, 48, 67, 68, 79, 100, 79, - 73, 75, 63, 63, 92, 111, 115, 111, 110, 114, 104, 104, 79, 60, 8, 127, - 127, 131, 131, 130, 131, 131, 131, 132, 131, 130, 127, 124, 126, 124, 123, 128, - 126, 127, 124, 124, 122, 122, 110, 40, 102, 104, 119, 114, 115, 107, 87, 103, - 112, 80, 44, 44, 42, 51, 55, 46, 48, 46, 61, 79, 76, 73, 71, 33, - 79, 59, 57, 63, 64, 59, 55, 63, 53, 44, 93, 80, 26, 97, 97, 104, - 116, 169, 146, 124, 138, 162, 162, 170, 177, 183, 189, 198, 202, 210, 206, 174, - 126, 128, 127, 118, 110, 81, 45, 34, 29, 29, 34, 32, 26, 32, 18, 20, - 26, 26, 42, 46, 46, 48, 46, 51, 51, 53, 48, 55, 48, 4, 1, 24, - 49, 48, 36, 41, 37, 18, 16, 17, 14, 16, 13, 8, 14, 30, 38, 52, - 53, 65, 64, 77, 81, 65, 49, 68, 73, 68, 57, 29, 18, 17, 13, 25, - 22, 13, 24, 26, 21, 22, 17, 18, 12, 14, 13, 13, 13, 13, 9, 9, - 8, 9, 6, 8, 8, 8, 6, 8, 8, 8, 6, 9, 17, 45, 59, 67, - 65, 69, 68, 69, 61, 61, 30, 5, 72, 99, 97, 80, 46, 44, 38, 22, - 22, 30, 24, 5, 1, 10, 8, 10, 1, 8, 5, 1, 1, 6, 5, 0, - 0, 8, 1, 1, 1, 2, 1, 1, 4, 6, 8, 1, 1, 4, 13, 1, - 0, 4, 1, 2, 0, 0, 4, 0, 0, 0, 1, 1, 1, 1, 1, 1, - 2, 14, 5, 20, 16, 21, 20, 22, 28, 34, 51, 51, 55, 64, 45, 45, - 37, 41, 37, 34, 34, 29, 26, 40, 33, 36, 22, 55, 59, 57, 67, 79, - 80, 75, 104, 88, 122, 144, 157, 205, 201, 158, 116, 107, 108, 107, 37, 36, - 36, 45, 41, 38, 44, 44, 64, 104, 161, 169, 134, 131, 159, 162, 166, 166, - 171, 153, 153, 166, 159, 96, 32, 30, 32, 21, 6, 25, 34, 36, 42, 32, - 32, 45, 48, 57, 79, 45, 69, 80, 75, 56, 53, 56, 55, 36, 37, 38, - 28, 20, 12, 13, 13, 9, 8, 8, 6, 6, 5, 5, 4, 4, 2, 1, - 1, 1, 0, 0, 0, 6, 8, 12, 10, 14, 16, 22, 26, 34, 33, 37, - 48, 45, 60, 76, 81, 64, 37, 77, 65, 65, 53, 44, 44, 38, 33, 29, - 30, 22, 16, 14, 21, 10, 9, 8, 24, 6, 5, 5, 26, 4, 2, 1, - 4, 2, 1, 1, 4, 4, 4, 6, 9, 6, 9, 13, 14, 4, 8, 22, - 25, 5, 10, 34, 36, 29, 8, 26, 25, 5, 4, 20, 4, 4, 14, 16, - 1, 1, 0, 10, 2, 0, 8, 10, 0, 0, 0, 9, 0, 0, 24, 30, - 37, 68, 102, 80, 91, 112, 124, 116, 99, 72, 48, 84, 123, 120, 103, 110, - 48, 38, 37, 33, 34, 30, 25, 20, 57, 64, 57, 64, 77, 79, 73, 80, - 95, 76, 8, 29, 126, 147, 103, 112, 130, 144, 114, 119, 122, 116, 115, 119, - 135, 135, 120, 79, 60, 72, 75, 106, 77, 33, 83, 88, 88, 85, 92, 91, - 91, 93, 95, 93, 104, 92, 89, 72, 45, 37, 46, 65, 36, 41, 88, 120, - 130, 108, 30, 96, 124, 128, 83, 67, 56, 72, 45, 51, 42, 96, 75, 65, - 59, 56, 60, 59, 63, 68, 76, 68, 60, 38, 48, 88, 93, 97, 93, 100, - 100, 103, 99, 115, 115, 103, 102, 108, 115, 107, 106, 122, 114, 102, 102, 119, - 107, 46, 55, 100, 96, 97, 81, 85, 93, 96, 111, 111, 114, 46, 114, 154, - 151, 130, 144, 140, 139, 99, 87, 84, 51, 37, 20, 45, 69, 92, 87, 92, - 95, 104, 96, 107, 108, 41, 75, 138, 178, 128, 130, 136, 116, 189, 162, 148, - 155, 130, 132, 136, 153, 157, 165, 162, 163, 148, 135, 136, 116, 88, 77, 56, - 36, 32, 30, 29, 33, 38, 45, 52, 59, 65, 72, 6, 64, 159, 157, 151, - 80, 77, 72, 71, 52, 60, 51, 56, 14, 4, 22, 26, 25, 29, 40, 37, - 38, 40, 33, 33, 13, 5, 40, 93, 103, 87, 89, 88, 87, 76, 72, 57, - 73, 79, 79, 81, 71, 85, 83, 75, 64, 53, 25, 26, 12, 16, 21, 30, - 36, 48, 53, 75, 61, 69, 52, 37, 33, 44, 85, 89, 84, 76, 96, 85, - 63, 93, 79, 81, 73, 80, 76, 85, 99, 80, 77, 63, 73, 77, 64, 73, - 63, 33, 8, 72, 96, 93, 87, 96, 96, 75, 84, 48, 32, 24, 37, 53, - 52, 53, 44, 40, 26, 40, 29, 9, 10, 2, 22, 106, 100, 71, 75, 96, - 95, 75, 75, 72, 26, 2, 18, 67, 81, 53, 56, 55, 52, 61, 53, 28, - 12, 45, 60, 61, 48, 45, 48, 48, 45, 44, 36, 32, 4, 6, 87, 104, - 102, 85, 102, 75, 34, 25, 22, 21, 18, 20, 24, 40, 59, 63, 68, 71, - 75, 83, 81, 79, 61, 22, 93, 99, 100, 85, 118, 93, 99, 88, 97, 139, - 154, 210, 213, 201, 185, 126, 111, 106, 116, 36, 34, 37, 36, 38, 32, 33, - 49, 61, 102, 181, 185, 126, 134, 120, 136, 142, 139, 135, 163, 159, 147, 107, - 79, 30, 29, 25, 30, 33, 34, 87, 99, 83, 83, 60, 49, 49, 46, 63, - 33, 30, 38, 55, 57, 60, 52, 55, 53, 76, 72, 73, 77, 120, 120, 130, - 119, 128, 122, 118, 130, 127, 122, 122, 112, 114, 115, 119, 128, 116, 119, 110, - 87, 91, 84, 73, 30, 14, 91, 132, 140, 103, 99, 84, 77, 65, 71, 49, - 56, 40, 46, 61, 63, 65, 52, 61, 68, 91, 61, 55, 61, 102, 135, 139, - 116, 103, 127, 128, 111, 106, 127, 119, 28, 6, 65, 143, 103, 108, 107, 114, - 112, 120, 128, 130, 126, 120, 127, 131, 147, 131, 131, 131, 134, 130, 127, 42, - 14, 37, 120, 150, 115, 120, 124, 126, 126, 132, 136, 138, 136, 131, 142, 155, - 148, 147, 147, 144, 140, 120, 139, 135, 55, 4, 81, 116, 143, 148, 146, 143, - 144, 142, 144, 130, 95, 45, 92, 136, 132, 132, 130, 130, 131, 122, 118, 110, - 60, 48, 118, 139, 140, 140, 140, 135, 102, 112, 128, 96, 88, 8, 135, 136, - 130, 136, 135, 136, 135, 142, 135, 138, 130, 130, 84, 128, 146, 135, 112, 135, - 131, 122, 115, 93, 37, 32, 28, 25, 25, 25, 22, 24, 22, 20, 22, 21, - 25, 24, 34, 114, 134, 126, 122, 136, 123, 114, 138, 147, 114, 32, 112, 143, - 128, 123, 114, 118, 104, 118, 128, 104, 68, 48, 118, 131, 130, 126, 118, 102, - 69, 55, 52, 49, 25, 0, 0, 25, 16, 0, 0, 18, 10, 0, 0, 12, - 8, 1, 6, 8, 8, 5, 21, 8, 9, 12, 33, 13, 16, 53, 104, 116, - 153, 161, 165, 165, 166, 163, 114, 132, 46, 127, 162, 154, 155, 159, 155, 143, - 151, 155, 136, 118, 83, 22, 114, 157, 170, 173, 167, 171, 166, 159, 116, 123, - 37, 181, 185, 179, 177, 171, 183, 179, 175, 107, 118, 100, 115, 112, 122, 142, - 142, 140, 136, 139, 138, 126, 103, 84, 55, 41, 38, 40, 34, 46, 38, 48, - 57, 60, 81, 92, 83, 80, 40, 142, 165, 186, 186, 24, 36, 36, 60, 53, - 60, 46, 57, 18, 4, 32, 30, 44, 22, 36, 38, 22, 42, 44, 32, 14, - 4, 84, 84, 73, 46, 49, 44, 44, 37, 48, 40, 57, 44, 59, 56, 84, - 84, 76, 80, 71, 72, 38, 30, 12, 53, 77, 75, 79, 73, 80, 76, 87, - 102, 64, 56, 57, 42, 63, 99, 88, 68, 73, 89, 99, 103, 99, 83, 81, - 84, 67, 68, 77, 77, 71, 72, 63, 60, 59, 61, 65, 38, 5, 83, 97, - 91, 93, 87, 87, 85, 91, 71, 48, 24, 44, 56, 52, 60, 51, 52, 56, - 67, 57, 25, 4, 12, 81, 103, 91, 85, 85, 87, 92, 92, 89, 85, 32, - 0, 89, 96, 100, 95, 88, 84, 88, 81, 76, 52, 13, 69, 61, 57, 46, - 51, 40, 41, 30, 29, 30, 36, 2, 5, 87, 103, 106, 103, 100, 95, 92, - 99, 91, 87, 73, 81, 65, 79, 97, 91, 96, 93, 107, 110, 103, 93, 61, - 24, 102, 116, 108, 123, 97, 111, 95, 97, 124, 155, 208, 209, 205, 208, 178, - 118, 110, 114, 116, 41, 34, 30, 40, 38, 34, 53, 46, 69, 97, 193, 194, - 131, 128, 135, 130, 104, 112, 110, 95, 89, 97, 87, 63, 26, 28, 25, 37, - 30, 61, 110, 104, 106, 95, 97, 99, 89, 92, 60, 38, 56, 124, 131, 122, - 119, 120, 128, 111, 126, 81, 114, 99, 89, 111, 108, 120, 115, 103, 112, 116, - 103, 106, 111, 103, 107, 102, 76, 75, 92, 81, 75, 81, 79, 81, 73, 32, - 13, 107, 150, 136, 130, 142, 140, 115, 130, 138, 102, 83, 41, 80, 130, 135, - 135, 132, 127, 134, 135, 131, 144, 128, 95, 93, 99, 103, 102, 107, 112, 106, - 118, 112, 124, 73, 9, 143, 138, 91, 107, 130, 127, 135, 110, 130, 139, 135, - 123, 92, 100, 107, 102, 97, 107, 107, 103, 97, 49, 0, 131, 162, 153, 161, - 154, 162, 158, 159, 154, 155, 158, 153, 127, 95, 123, 128, 130, 131, 132, 131, - 123, 123, 122, 56, 32, 106, 134, 143, 131, 128, 135, 132, 132, 132, 139, 99, - 57, 108, 138, 128, 132, 128, 138, 127, 114, 122, 114, 67, 41, 123, 131, 124, - 142, 122, 138, 142, 136, 123, 95, 89, 13, 130, 134, 118, 118, 118, 135, 136, - 138, 134, 138, 108, 73, 115, 147, 142, 135, 135, 136, 136, 132, 92, 103, 42, - 48, 143, 153, 124, 118, 138, 147, 134, 134, 144, 131, 128, 120, 130, 132, 159, - 161, 157, 155, 146, 128, 142, 144, 128, 36, 118, 143, 135, 130, 126, 123, 120, - 106, 110, 83, 55, 88, 167, 171, 179, 165, 171, 163, 157, 148, 122, 71, 32, - 95, 140, 143, 123, 138, 132, 138, 111, 130, 134, 120, 106, 102, 153, 158, 157, - 151, 169, 169, 144, 151, 177, 157, 67, 59, 131, 165, 167, 166, 161, 161, 153, - 161, 124, 122, 49, 128, 163, 147, 154, 155, 159, 159, 157, 157, 155, 146, 107, - 24, 136, 170, 173, 169, 169, 169, 166, 157, 118, 104, 32, 190, 179, 167, 177, - 185, 147, 194, 191, 159, 110, 92, 85, 84, 87, 89, 92, 92, 87, 85, 84, - 69, 56, 48, 42, 40, 36, 42, 45, 46, 55, 63, 76, 80, 91, 89, 92, - 89, 17, 146, 171, 177, 178, 16, 20, 30, 45, 53, 46, 45, 51, 9, 1, - 25, 28, 36, 33, 28, 28, 38, 33, 40, 26, 12, 4, 84, 77, 44, 33, - 45, 44, 67, 52, 33, 36, 48, 37, 56, 72, 48, 68, 71, 69, 71, 68, - 69, 29, 13, 68, 80, 81, 61, 57, 52, 48, 44, 40, 34, 52, 51, 40, - 96, 99, 88, 77, 85, 83, 80, 69, 85, 67, 63, 49, 84, 84, 64, 59, - 56, 61, 61, 63, 52, 60, 53, 36, 5, 76, 87, 81, 93, 87, 85, 77, - 80, 65, 48, 25, 51, 42, 64, 72, 71, 77, 83, 73, 53, 25, 5, 1, - 108, 100, 76, 79, 80, 76, 76, 71, 77, 75, 32, 10, 95, 72, 77, 79, - 83, 89, 88, 89, 71, 63, 17, 63, 52, 44, 37, 24, 16, 36, 25, 17, - 29, 37, 2, 4, 83, 102, 91, 87, 79, 85, 96, 97, 89, 87, 60, 48, - 95, 112, 108, 102, 96, 102, 99, 104, 103, 91, 67, 25, 99, 107, 119, 111, - 135, 116, 96, 106, 130, 183, 210, 209, 206, 202, 146, 115, 112, 111, 106, 32, - 30, 32, 36, 26, 42, 53, 44, 67, 99, 205, 201, 183, 128, 132, 154, 142, - 140, 140, 135, 136, 118, 107, 61, 28, 26, 28, 37, 28, 65, 111, 97, 110, - 103, 100, 96, 100, 88, 67, 36, 97, 115, 111, 116, 116, 112, 106, 103, 93, - 120, 104, 80, 107, 127, 127, 120, 110, 112, 96, 102, 99, 112, 100, 93, 63, - 91, 91, 77, 79, 79, 79, 87, 87, 89, 68, 38, 12, 99, 154, 139, 140, - 132, 132, 142, 140, 144, 144, 93, 44, 108, 140, 143, 138, 144, 134, 139, 135, - 127, 127, 93, 103, 132, 130, 127, 122, 115, 119, 126, 127, 120, 120, 89, 14, - 140, 89, 143, 138, 103, 106, 136, 124, 114, 115, 124, 75, 100, 131, 136, 139, - 132, 128, 131, 116, 115, 52, 24, 136, 162, 154, 143, 144, 150, 154, 153, 155, - 151, 153, 131, 102, 143, 144, 143, 139, 139, 139, 130, 130, 130, 115, 73, 6, - 99, 139, 138, 128, 131, 132, 142, 142, 138, 140, 97, 56, 111, 130, 122, 131, - 118, 124, 116, 119, 131, 114, 63, 38, 116, 127, 126, 136, 132, 144, 142, 138, - 124, 104, 84, 10, 85, 130, 120, 119, 119, 116, 131, 120, 134, 118, 99, 72, - 116, 147, 143, 139, 136, 140, 138, 134, 106, 110, 42, 91, 154, 150, 148, 150, - 153, 148, 150, 148, 139, 135, 134, 87, 132, 162, 154, 148, 153, 150, 148, 151, - 143, 153, 123, 40, 114, 122, 147, 123, 115, 122, 110, 110, 100, 76, 52, 110, - 171, 177, 169, 171, 167, 177, 171, 165, 138, 103, 42, 93, 103, 89, 124, 151, - 162, 95, 91, 134, 108, 89, 112, 140, 123, 158, 167, 177, 167, 162, 162, 165, - 170, 159, 102, 83, 135, 163, 157, 159, 159, 154, 150, 158, 120, 120, 49, 130, - 159, 161, 151, 155, 159, 150, 154, 155, 155, 147, 107, 18, 143, 173, 167, 161, - 148, 163, 162, 153, 120, 102, 25, 154, 182, 165, 183, 187, 178, 178, 126, 165, - 155, 139, 93, 106, 71, 68, 69, 64, 64, 60, 57, 55, 51, 46, 41, 42, - 49, 52, 63, 64, 73, 73, 79, 92, 96, 93, 91, 89, 10, 150, 170, 175, - 166, 72, 61, 55, 18, 22, 49, 40, 52, 9, 1, 28, 33, 38, 55, 33, - 29, 25, 30, 34, 17, 6, 4, 59, 84, 37, 41, 28, 49, 33, 51, 33, - 40, 56, 45, 56, 64, 49, 44, 63, 80, 73, 56, 68, 33, 12, 61, 80, - 53, 55, 48, 44, 44, 37, 34, 44, 37, 21, 14, 97, 96, 84, 88, 75, - 81, 76, 75, 89, 60, 64, 45, 77, 77, 61, 63, 63, 56, 73, 75, 63, - 56, 68, 33, 5, 71, 88, 83, 87, 80, 72, 67, 95, 85, 49, 34, 30, - 51, 52, 71, 63, 45, 55, 63, 49, 0, 4, 1, 69, 99, 73, 80, 76, - 83, 75, 83, 81, 81, 34, 1, 61, 87, 89, 69, 67, 72, 73, 103, 84, - 41, 20, 28, 49, 49, 36, 21, 26, 14, 21, 18, 18, 26, 1, 4, 76, - 97, 102, 80, 73, 77, 80, 79, 75, 60, 63, 52, 110, 111, 102, 122, 95, - 102, 99, 102, 103, 95, 72, 29, 102, 108, 106, 84, 81, 99, 91, 116, 157, - 212, 212, 209, 199, 150, 119, 108, 110, 122, 64, 30, 29, 30, 33, 44, 46, - 56, 55, 81, 104, 208, 210, 195, 128, 132, 135, 153, 157, 158, 157, 151, 142, - 124, 69, 26, 28, 24, 34, 24, 53, 106, 99, 104, 103, 115, 111, 100, 92, - 73, 37, 100, 111, 111, 107, 112, 118, 104, 103, 97, 104, 100, 71, 104, 126, - 104, 103, 118, 106, 106, 100, 99, 103, 107, 92, 59, 89, 106, 102, 95, 83, - 73, 92, 72, 76, 65, 37, 12, 120, 143, 131, 134, 139, 140, 139, 139, 136, - 126, 102, 51, 118, 140, 131, 130, 128, 128, 127, 128, 123, 100, 83, 112, 132, - 119, 122, 124, 126, 123, 124, 123, 123, 127, 64, 13, 73, 134, 99, 130, 132, - 127, 131, 135, 134, 127, 107, 71, 102, 131, 127, 120, 114, 120, 122, 128, 120, - 49, 18, 106, 161, 151, 161, 153, 148, 153, 157, 155, 158, 143, 127, 104, 144, - 150, 135, 139, 140, 136, 140, 142, 134, 106, 71, 4, 93, 136, 135, 124, 128, - 131, 136, 131, 134, 130, 99, 68, 96, 140, 123, 116, 127, 119, 130, 124, 119, - 103, 63, 37, 89, 120, 122, 123, 126, 134, 135, 140, 123, 102, 87, 0, 83, - 135, 115, 123, 120, 119, 127, 119, 134, 111, 89, 55, 120, 146, 143, 143, 127, - 132, 134, 140, 131, 122, 45, 127, 161, 150, 135, 143, 143, 144, 142, 148, 147, - 134, 107, 84, 134, 162, 151, 153, 151, 150, 144, 143, 143, 148, 119, 51, 111, - 128, 123, 124, 116, 111, 112, 108, 99, 75, 48, 91, 166, 174, 167, 171, 171, - 170, 169, 178, 143, 110, 38, 93, 95, 146, 116, 126, 167, 108, 138, 143, 104, - 130, 140, 96, 143, 175, 173, 171, 166, 173, 171, 171, 170, 159, 122, 63, 147, - 162, 162, 153, 150, 148, 136, 161, 124, 124, 64, 130, 163, 167, 155, 143, 144, - 151, 148, 146, 157, 122, 87, 16, 146, 169, 157, 157, 143, 154, 134, 127, 123, - 112, 30, 166, 181, 179, 170, 174, 146, 182, 140, 140, 158, 151, 131, 99, 71, - 67, 64, 63, 57, 53, 49, 49, 46, 45, 41, 55, 63, 69, 72, 84, 123, - 79, 92, 96, 106, 99, 104, 91, 5, 151, 170, 171, 178, 13, 18, 18, 46, - 24, 20, 37, 38, 13, 2, 25, 20, 34, 33, 29, 33, 30, 42, 29, 18, - 17, 4, 64, 73, 52, 29, 48, 34, 34, 30, 36, 46, 44, 37, 60, 69, - 67, 49, 65, 83, 67, 55, 79, 33, 14, 51, 75, 46, 48, 42, 36, 57, - 52, 49, 46, 36, 28, 13, 99, 95, 88, 79, 73, 83, 64, 65, 69, 53, - 56, 42, 80, 79, 63, 67, 64, 69, 52, 61, 72, 56, 59, 34, 6, 73, - 85, 72, 104, 88, 71, 76, 87, 77, 55, 34, 46, 41, 48, 36, 20, 33, - 34, 26, 38, 6, 4, 1, 68, 95, 71, 79, 81, 80, 81, 85, 83, 77, - 33, 1, 68, 81, 80, 76, 69, 67, 68, 83, 77, 44, 20, 57, 67, 26, - 30, 14, 34, 16, 17, 30, 26, 25, 2, 2, 84, 100, 95, 77, 81, 85, - 88, 84, 72, 64, 42, 48, 107, 115, 100, 108, 89, 103, 112, 111, 102, 88, - 68, 36, 88, 99, 107, 89, 81, 93, 81, 114, 193, 208, 209, 204, 157, 124, - 107, 112, 119, 72, 45, 28, 30, 32, 33, 44, 48, 56, 56, 76, 102, 214, - 213, 202, 128, 128, 136, 139, 147, 153, 155, 157, 148, 128, 69, 25, 25, 21, - 37, 21, 59, 107, 96, 102, 100, 112, 112, 99, 104, 64, 38, 89, 111, 118, - 127, 127, 130, 104, 97, 92, 104, 88, 67, 99, 124, 111, 110, 102, 112, 112, - 111, 97, 115, 106, 87, 57, 97, 97, 92, 79, 75, 67, 71, 69, 75, 61, - 32, 9, 119, 146, 146, 130, 148, 136, 132, 135, 130, 132, 100, 61, 104, 139, - 126, 124, 120, 136, 122, 108, 119, 104, 73, 112, 136, 122, 122, 122, 120, 126, - 120, 120, 124, 128, 65, 12, 93, 132, 136, 102, 103, 130, 123, 120, 122, 124, - 108, 65, 96, 143, 134, 111, 128, 139, 128, 116, 115, 46, 0, 128, 155, 158, - 157, 150, 153, 142, 147, 147, 147, 144, 118, 97, 143, 143, 131, 135, 139, 142, - 139, 139, 124, 123, 71, 6, 110, 134, 131, 132, 127, 130, 123, 135, 135, 131, - 107, 65, 103, 134, 119, 119, 128, 128, 127, 130, 126, 104, 71, 32, 107, 124, - 119, 146, 132, 142, 140, 126, 123, 110, 79, 5, 124, 120, 115, 120, 115, 112, - 122, 115, 138, 115, 87, 59, 116, 144, 148, 142, 144, 136, 131, 131, 130, 112, - 55, 97, 157, 159, 148, 147, 140, 130, 134, 134, 135, 97, 87, 59, 130, 157, - 146, 144, 139, 132, 140, 143, 150, 146, 116, 57, 103, 140, 123, 116, 122, 131, - 122, 126, 95, 85, 42, 96, 175, 175, 165, 174, 171, 167, 166, 174, 132, 110, - 38, 87, 96, 103, 136, 135, 123, 135, 143, 124, 130, 144, 140, 36, 136, 173, - 167, 173, 177, 167, 177, 178, 177, 166, 111, 68, 139, 161, 140, 139, 147, 146, - 155, 143, 161, 136, 65, 131, 159, 163, 153, 154, 158, 154, 146, 153, 148, 144, - 114, 13, 132, 173, 158, 161, 143, 148, 138, 122, 124, 123, 26, 182, 186, 177, - 175, 148, 143, 157, 167, 144, 134, 155, 148, 130, 69, 104, 97, 96, 99, 99, - 95, 91, 99, 100, 84, 52, 61, 77, 89, 127, 127, 127, 107, 110, 111, 108, - 103, 95, 57, 158, 169, 173, 163, 75, 75, 40, 41, 48, 40, 37, 59, 17, - 2, 13, 30, 36, 25, 45, 26, 29, 24, 30, 17, 8, 2, 64, 79, 46, - 51, 49, 37, 46, 45, 38, 45, 38, 33, 53, 60, 60, 38, 65, 72, 64, - 52, 76, 33, 16, 53, 75, 53, 56, 32, 37, 55, 42, 40, 40, 37, 41, - 30, 103, 104, 73, 87, 57, 73, 67, 69, 65, 61, 60, 44, 79, 72, 64, - 67, 73, 56, 65, 69, 69, 53, 59, 36, 5, 69, 80, 87, 80, 91, 68, - 73, 97, 71, 55, 29, 51, 60, 38, 46, 52, 46, 45, 32, 21, 14, 4, - 9, 75, 96, 85, 83, 85, 91, 93, 85, 88, 75, 33, 0, 79, 83, 64, - 77, 76, 67, 69, 72, 67, 55, 25, 52, 60, 44, 26, 18, 32, 10, 18, - 20, 18, 24, 1, 2, 89, 99, 96, 87, 85, 80, 89, 95, 77, 63, 46, - 61, 115, 108, 106, 96, 85, 103, 104, 95, 91, 89, 67, 37, 91, 103, 110, - 93, 104, 79, 75, 111, 199, 210, 205, 165, 124, 104, 126, 64, 61, 44, 29, - 29, 28, 34, 32, 37, 46, 51, 60, 87, 127, 213, 213, 205, 126, 126, 134, - 136, 139, 143, 153, 157, 148, 126, 60, 24, 22, 21, 29, 26, 64, 106, 96, - 100, 100, 115, 103, 106, 84, 73, 49, 89, 120, 111, 123, 115, 114, 119, 111, - 91, 102, 88, 64, 103, 124, 120, 96, 122, 103, 106, 97, 114, 108, 102, 77, - 61, 81, 96, 85, 76, 68, 65, 71, 69, 79, 56, 33, 8, 120, 146, 130, - 130, 139, 148, 139, 130, 142, 135, 104, 63, 96, 140, 130, 122, 138, 128, 115, - 120, 107, 92, 65, 112, 139, 122, 128, 132, 130, 134, 136, 127, 122, 124, 75, - 21, 96, 128, 134, 106, 126, 131, 128, 123, 127, 120, 107, 61, 95, 132, 130, - 123, 120, 119, 120, 116, 118, 51, 0, 120, 155, 157, 158, 154, 155, 151, 150, - 148, 147, 142, 81, 110, 146, 138, 131, 140, 146, 139, 130, 120, 119, 118, 67, - 40, 122, 135, 132, 130, 127, 135, 128, 138, 136, 135, 110, 77, 108, 140, 118, - 112, 126, 130, 130, 119, 116, 104, 71, 29, 103, 118, 134, 139, 131, 139, 128, - 126, 124, 110, 84, 22, 116, 118, 107, 112, 107, 112, 136, 111, 127, 114, 84, - 56, 108, 146, 144, 143, 146, 142, 123, 130, 123, 114, 60, 91, 155, 147, 148, - 130, 135, 142, 154, 134, 135, 102, 92, 95, 132, 155, 147, 142, 140, 150, 144, - 148, 150, 146, 128, 60, 111, 130, 124, 114, 107, 122, 112, 128, 104, 79, 46, - 112, 174, 174, 167, 175, 169, 169, 173, 174, 146, 110, 40, 97, 92, 102, 131, - 118, 130, 157, 115, 126, 110, 139, 99, 29, 144, 173, 174, 178, 177, 171, 169, - 171, 169, 163, 115, 75, 134, 163, 139, 130, 147, 134, 155, 158, 143, 139, 67, - 124, 165, 159, 154, 157, 143, 150, 146, 135, 146, 144, 111, 13, 140, 170, 166, - 161, 142, 134, 124, 123, 124, 110, 32, 186, 181, 178, 151, 173, 174, 132, 167, - 138, 158, 155, 154, 130, 71, 110, 114, 123, 120, 114, 114, 111, 119, 106, 83, - 55, 67, 76, 123, 114, 127, 124, 116, 116, 110, 112, 111, 103, 14, 155, 170, - 169, 155, 30, 53, 57, 51, 45, 36, 38, 37, 12, 0, 25, 25, 30, 32, - 22, 21, 25, 25, 26, 17, 8, 2, 56, 67, 37, 34, 37, 37, 44, 42, - 40, 28, 38, 26, 57, 59, 57, 33, 60, 51, 49, 51, 59, 32, 17, 33, - 67, 52, 61, 41, 44, 53, 56, 57, 52, 34, 42, 29, 103, 88, 80, 91, - 65, 83, 64, 69, 63, 65, 59, 46, 76, 72, 65, 55, 60, 53, 71, 59, - 65, 53, 49, 34, 5, 75, 69, 68, 81, 80, 71, 72, 80, 71, 56, 29, - 41, 34, 42, 30, 25, 26, 40, 40, 9, 4, 4, 2, 73, 96, 73, 79, - 95, 93, 79, 84, 89, 75, 34, 12, 83, 80, 65, 79, 73, 64, 71, 69, - 72, 64, 29, 57, 53, 64, 28, 21, 44, 16, 16, 17, 30, 22, 1, 1, - 88, 88, 99, 87, 83, 69, 87, 95, 79, 67, 45, 71, 119, 106, 95, 92, - 91, 107, 96, 88, 80, 81, 73, 38, 85, 103, 102, 102, 77, 77, 87, 106, - 194, 204, 175, 126, 107, 111, 63, 42, 30, 28, 26, 28, 28, 32, 28, 38, - 49, 53, 75, 93, 175, 216, 214, 208, 126, 126, 134, 138, 138, 143, 153, 154, - 146, 120, 38, 24, 22, 13, 29, 25, 64, 104, 93, 102, 102, 110, 103, 104, - 85, 67, 42, 95, 110, 115, 114, 107, 100, 100, 100, 97, 95, 75, 59, 100, - 122, 123, 104, 108, 97, 111, 111, 114, 106, 96, 79, 56, 87, 95, 85, 84, - 87, 88, 85, 80, 80, 48, 33, 8, 95, 146, 131, 130, 118, 142, 148, 136, - 134, 134, 104, 69, 97, 136, 124, 132, 127, 136, 114, 116, 108, 88, 68, 123, - 140, 127, 126, 136, 131, 134, 127, 126, 122, 116, 91, 25, 112, 127, 131, 110, - 124, 130, 126, 126, 122, 120, 102, 55, 89, 135, 130, 135, 120, 124, 131, 122, - 115, 52, 14, 123, 157, 163, 138, 135, 153, 150, 148, 140, 143, 138, 71, 106, - 148, 139, 136, 139, 150, 146, 134, 127, 111, 110, 76, 9, 107, 136, 128, 126, - 124, 134, 134, 136, 135, 138, 114, 68, 100, 135, 123, 136, 107, 104, 122, 124, - 119, 103, 65, 25, 104, 112, 112, 143, 131, 127, 127, 124, 126, 111, 83, 22, - 77, 110, 108, 104, 110, 110, 140, 108, 123, 111, 83, 46, 114, 142, 154, 144, - 151, 146, 136, 126, 122, 107, 61, 97, 153, 146, 146, 118, 138, 136, 143, 136, - 115, 106, 91, 84, 136, 153, 136, 144, 144, 130, 127, 136, 131, 134, 126, 60, - 108, 127, 127, 114, 118, 111, 116, 111, 110, 73, 45, 119, 166, 174, 163, 167, - 171, 167, 170, 174, 127, 106, 46, 96, 92, 106, 128, 120, 115, 130, 118, 122, - 119, 95, 123, 59, 144, 173, 177, 182, 167, 171, 175, 175, 173, 161, 118, 79, - 132, 159, 155, 147, 147, 144, 143, 144, 123, 131, 71, 106, 108, 159, 143, 153, - 155, 154, 148, 150, 146, 143, 108, 9, 140, 169, 165, 158, 147, 139, 161, 118, - 134, 111, 28, 134, 182, 169, 162, 161, 155, 150, 150, 169, 147, 159, 158, 124, - 67, 108, 122, 128, 128, 128, 122, 111, 115, 110, 107, 71, 83, 93, 134, 136, - 130, 123, 108, 116, 118, 110, 111, 99, 6, 161, 166, 170, 159, 14, 63, 68, - 40, 41, 48, 32, 34, 9, 0, 14, 30, 36, 29, 26, 30, 38, 40, 20, - 13, 4, 2, 49, 61, 38, 65, 36, 51, 42, 36, 44, 38, 41, 28, 45, - 77, 46, 33, 63, 57, 53, 53, 63, 36, 18, 29, 65, 45, 63, 34, 46, - 38, 44, 60, 45, 33, 22, 6, 100, 91, 76, 71, 80, 69, 79, 73, 71, - 61, 60, 42, 76, 71, 59, 63, 52, 53, 60, 63, 59, 55, 52, 34, 5, - 71, 83, 77, 83, 77, 61, 71, 76, 79, 57, 44, 33, 44, 61, 52, 46, - 52, 28, 22, 9, 0, 2, 1, 64, 92, 88, 80, 83, 92, 81, 87, 77, - 65, 36, 1, 60, 79, 61, 80, 73, 77, 59, 68, 81, 52, 33, 17, 51, - 52, 22, 22, 32, 17, 12, 21, 18, 20, 0, 0, 84, 95, 96, 88, 87, - 89, 89, 87, 76, 61, 48, 75, 118, 93, 103, 103, 97, 97, 96, 108, 102, - 77, 72, 40, 85, 99, 104, 102, 97, 89, 75, 99, 181, 208, 171, 114, 95, - 104, 52, 40, 29, 26, 32, 28, 26, 33, 29, 55, 51, 49, 77, 107, 191, - 222, 217, 210, 127, 126, 132, 138, 142, 147, 153, 151, 138, 93, 26, 22, 22, - 20, 32, 25, 65, 99, 93, 102, 104, 97, 107, 99, 68, 75, 42, 87, 107, - 107, 106, 104, 104, 114, 102, 97, 102, 87, 53, 104, 115, 132, 110, 104, 106, - 108, 110, 111, 95, 93, 57, 73, 79, 87, 83, 80, 77, 81, 71, 75, 77, - 56, 38, 6, 128, 146, 131, 124, 120, 126, 127, 131, 127, 123, 115, 80, 102, - 140, 124, 136, 128, 128, 102, 118, 91, 91, 63, 116, 136, 123, 126, 130, 140, - 126, 128, 124, 120, 112, 72, 22, 69, 99, 128, 123, 132, 123, 124, 132, 123, - 114, 91, 52, 79, 122, 127, 138, 134, 132, 118, 119, 122, 51, 10, 112, 158, - 158, 153, 151, 144, 150, 144, 144, 148, 118, 63, 118, 144, 140, 128, 139, 151, - 136, 130, 120, 116, 100, 83, 6, 93, 136, 127, 116, 127, 126, 126, 136, 130, - 128, 107, 84, 96, 132, 122, 122, 131, 102, 103, 104, 108, 104, 60, 24, 92, - 103, 108, 139, 139, 136, 130, 123, 128, 111, 87, 21, 81, 115, 103, 100, 103, - 107, 115, 119, 107, 108, 73, 36, 112, 138, 150, 140, 144, 144, 140, 122, 123, - 112, 64, 84, 140, 140, 167, 132, 142, 118, 112, 122, 95, 91, 91, 64, 138, - 151, 142, 139, 143, 136, 140, 132, 134, 127, 123, 64, 99, 127, 127, 120, 118, - 104, 122, 119, 108, 75, 38, 118, 165, 170, 171, 173, 171, 161, 171, 175, 136, - 106, 37, 97, 93, 135, 118, 111, 116, 153, 124, 127, 104, 100, 135, 60, 154, - 166, 178, 175, 174, 170, 171, 166, 166, 165, 140, 81, 110, 161, 150, 150, 132, - 140, 126, 120, 139, 128, 80, 93, 142, 163, 155, 153, 148, 150, 150, 151, 139, - 124, 81, 8, 130, 159, 163, 158, 162, 151, 136, 119, 135, 115, 24, 166, 181, - 162, 171, 163, 165, 154, 151, 151, 144, 158, 157, 132, 65, 120, 127, 134, 126, - 130, 108, 123, 124, 127, 106, 68, 76, 142, 132, 134, 128, 130, 127, 123, 130, - 112, 112, 102, 1, 150, 169, 158, 161, 24, 48, 73, 64, 36, 30, 33, 32, - 10, 1, 20, 26, 33, 40, 45, 34, 26, 24, 17, 9, 4, 4, 46, 55, - 61, 42, 65, 55, 44, 44, 40, 48, 33, 24, 49, 59, 51, 48, 30, 40, - 44, 40, 38, 37, 18, 33, 51, 42, 51, 53, 51, 48, 45, 45, 45, 45, - 24, 13, 91, 84, 57, 57, 69, 84, 81, 64, 83, 59, 55, 38, 64, 72, - 64, 57, 61, 57, 57, 60, 51, 53, 56, 34, 6, 69, 72, 48, 63, 61, - 45, 46, 63, 57, 60, 45, 28, 34, 21, 33, 16, 20, 18, 22, 21, 0, - 2, 8, 63, 88, 69, 75, 77, 76, 77, 89, 83, 59, 36, 1, 59, 77, - 64, 76, 77, 69, 68, 72, 69, 55, 24, 13, 30, 24, 30, 22, 30, 26, - 32, 25, 29, 18, 0, 0, 88, 99, 87, 89, 92, 106, 96, 83, 67, 64, - 34, 87, 118, 108, 112, 102, 104, 97, 84, 89, 95, 89, 73, 42, 81, 97, - 106, 100, 96, 75, 71, 84, 138, 209, 174, 122, 103, 106, 57, 44, 29, 36, - 37, 30, 32, 30, 32, 37, 51, 72, 95, 150, 212, 222, 221, 205, 128, 127, - 134, 139, 147, 153, 154, 148, 127, 52, 24, 21, 18, 21, 37, 22, 60, 97, - 97, 108, 103, 107, 104, 100, 81, 69, 41, 56, 102, 107, 89, 96, 93, 84, - 102, 100, 97, 80, 51, 92, 111, 114, 114, 108, 108, 108, 107, 107, 100, 87, - 52, 59, 87, 93, 97, 89, 87, 77, 89, 81, 67, 48, 26, 5, 128, 143, - 138, 102, 102, 99, 112, 92, 108, 111, 106, 84, 84, 123, 128, 124, 124, 123, - 100, 116, 87, 84, 52, 104, 131, 126, 126, 130, 127, 126, 123, 123, 123, 122, - 67, 21, 103, 126, 144, 126, 132, 130, 122, 120, 114, 112, 97, 46, 73, 85, - 118, 127, 132, 122, 128, 118, 119, 44, 28, 115, 144, 151, 147, 143, 146, 148, - 147, 144, 139, 115, 55, 112, 119, 143, 144, 148, 142, 132, 124, 120, 107, 114, - 65, 4, 124, 130, 127, 112, 124, 122, 119, 116, 115, 116, 116, 87, 65, 116, - 135, 108, 114, 93, 104, 108, 114, 107, 83, 18, 97, 106, 127, 132, 127, 131, - 128, 128, 127, 119, 84, 29, 85, 99, 99, 95, 93, 87, 96, 99, 102, 104, - 73, 33, 75, 132, 144, 144, 135, 127, 115, 123, 123, 112, 72, 73, 104, 136, - 132, 134, 108, 112, 108, 112, 120, 83, 76, 41, 136, 147, 131, 139, 143, 139, - 139, 132, 142, 128, 124, 79, 79, 132, 123, 122, 119, 106, 106, 119, 110, 76, - 51, 107, 167, 163, 171, 171, 170, 169, 171, 174, 124, 106, 38, 100, 103, 130, - 123, 106, 106, 102, 110, 126, 102, 120, 136, 18, 135, 161, 163, 173, 162, 169, - 154, 170, 163, 169, 131, 85, 111, 143, 135, 136, 142, 131, 134, 140, 122, 132, - 103, 89, 139, 146, 148, 116, 119, 123, 144, 148, 130, 127, 119, 6, 135, 161, - 167, 159, 153, 157, 155, 130, 134, 124, 21, 181, 186, 157, 167, 170, 161, 159, - 167, 167, 155, 157, 155, 126, 64, 103, 120, 119, 123, 124, 122, 115, 122, 123, - 106, 68, 76, 138, 131, 135, 130, 143, 139, 120, 114, 112, 114, 107, 59, 162, - 163, 162, 153, 22, 29, 34, 42, 51, 44, 44, 24, 9, 1, 14, 18, 21, - 18, 17, 18, 17, 18, 17, 12, 4, 1, 40, 59, 61, 64, 52, 46, 48, - 49, 48, 45, 28, 20, 46, 46, 52, 52, 55, 41, 45, 41, 37, 37, 34, - 32, 24, 24, 24, 22, 26, 25, 26, 28, 28, 30, 34, 18, 102, 81, 73, - 79, 69, 69, 71, 71, 71, 64, 60, 41, 76, 73, 59, 60, 56, 48, 52, - 45, 49, 49, 53, 33, 6, 67, 69, 64, 63, 60, 76, 57, 56, 48, 61, - 29, 22, 30, 17, 14, 13, 12, 13, 12, 10, 8, 2, 1, 45, 87, 80, - 80, 77, 87, 83, 85, 69, 69, 37, 1, 56, 73, 64, 56, 77, 76, 71, - 59, 61, 45, 40, 32, 20, 20, 13, 8, 5, 5, 6, 5, 4, 5, 0, - 1, 96, 96, 96, 89, 88, 84, 81, 80, 55, 56, 34, 80, 112, 106, 96, - 91, 92, 92, 84, 83, 84, 80, 75, 45, 55, 87, 93, 89, 79, 56, 76, - 72, 112, 193, 195, 153, 99, 126, 93, 51, 44, 37, 42, 38, 38, 41, 46, - 44, 76, 84, 128, 204, 221, 221, 222, 199, 127, 127, 134, 143, 150, 155, 150, - 136, 75, 24, 21, 20, 20, 20, 28, 30, 56, 87, 91, 92, 91, 89, 84, - 81, 87, 81, 52, 60, 100, 108, 87, 91, 96, 92, 93, 95, 84, 76, 48, - 72, 104, 110, 93, 89, 104, 107, 93, 95, 95, 76, 46, 56, 61, 53, 53, - 52, 61, 55, 46, 45, 36, 40, 24, 6, 114, 132, 139, 132, 124, 124, 128, - 130, 122, 123, 118, 118, 118, 85, 93, 97, 99, 99, 119, 118, 108, 85, 48, - 99, 130, 127, 130, 123, 124, 124, 127, 122, 120, 116, 80, 32, 100, 106, 110, - 112, 111, 111, 118, 110, 111, 96, 95, 41, 72, 80, 115, 112, 110, 108, 107, - 107, 100, 51, 0, 28, 79, 93, 83, 80, 92, 104, 96, 89, 103, 91, 41, - 64, 72, 81, 85, 97, 99, 95, 100, 99, 115, 103, 59, 36, 126, 127, 130, - 131, 123, 119, 123, 122, 116, 116, 110, 112, 81, 85, 93, 100, 99, 95, 118, - 118, 92, 108, 81, 16, 93, 96, 140, 128, 127, 130, 127, 126, 122, 120, 91, - 2, 72, 97, 84, 83, 87, 93, 95, 104, 100, 104, 63, 30, 56, 123, 123, - 111, 111, 119, 120, 107, 110, 115, 106, 67, 81, 100, 104, 89, 89, 100, 91, - 85, 97, 89, 81, 76, 132, 147, 143, 140, 136, 140, 140, 134, 135, 139, 132, - 79, 72, 112, 120, 123, 115, 93, 111, 112, 111, 77, 38, 115, 169, 166, 167, - 173, 167, 175, 169, 171, 143, 104, 37, 99, 99, 119, 99, 115, 100, 96, 103, - 97, 100, 104, 108, 33, 128, 151, 144, 120, 126, 136, 136, 136, 123, 116, 112, - 130, 138, 131, 134, 135, 130, 138, 135, 139, 130, 131, 130, 92, 99, 107, 108, - 118, 110, 116, 111, 135, 126, 126, 111, 4, 130, 153, 154, 157, 157, 161, 150, - 123, 130, 119, 25, 178, 179, 163, 162, 163, 154, 153, 154, 157, 155, 151, 140, - 120, 64, 108, 108, 126, 122, 128, 128, 130, 124, 123, 106, 68, 85, 140, 132, - 118, 116, 119, 116, 119, 118, 115, 112, 111, 10, 159, 158, 161, 153, 10, 10, - 12, 12, 12, 13, 14, 9, 4, 0, 14, 14, 13, 5, 13, 12, 9, 9, - 16, 13, 8, 1, 24, 56, 53, 49, 46, 29, 25, 22, 30, 26, 25, 17, - 28, 30, 29, 28, 26, 29, 29, 26, 26, 25, 25, 22, 25, 16, 10, 8, - 9, 14, 5, 2, 4, 4, 4, 16, 99, 63, 76, 36, 71, 68, 63, 36, - 65, 61, 56, 40, 69, 71, 51, 46, 42, 41, 36, 38, 38, 38, 29, 14, - 9, 34, 29, 30, 28, 26, 29, 28, 28, 25, 24, 21, 17, 13, 12, 13, - 10, 9, 8, 10, 6, 6, 5, 0, 18, 64, 69, 48, 53, 73, 67, 60, - 63, 61, 34, 16, 48, 64, 67, 61, 53, 52, 49, 46, 42, 44, 18, 10, - 6, 5, 10, 18, 24, 16, 8, 10, 10, 9, 1, 0, 85, 56, 69, 65, - 68, 72, 73, 79, 56, 51, 32, 72, 88, 95, 91, 85, 88, 84, 80, 77, - 81, 87, 77, 75, 75, 73, 52, 56, 72, 71, 63, 68, 77, 174, 202, 166, - 119, 116, 116, 81, 49, 37, 49, 48, 45, 42, 48, 72, 84, 123, 193, 218, - 221, 224, 220, 170, 126, 130, 136, 148, 151, 151, 142, 102, 32, 21, 20, 18, - 21, 22, 26, 30, 40, 73, 75, 71, 61, 75, 75, 65, 67, 73, 63, 57, - 89, 80, 81, 68, 68, 64, 63, 65, 67, 75, 41, 34, 33, 48, 41, 41, - 42, 49, 55, 72, 83, 59, 42, 44, 48, 48, 44, 42, 42, 42, 33, 33, - 34, 25, 30, 4, 18, 81, 95, 81, 84, 89, 103, 93, 97, 99, 99, 97, - 92, 103, 106, 107, 107, 112, 111, 112, 97, 84, 59, 85, 120, 122, 124, 111, - 110, 107, 106, 93, 102, 96, 73, 34, 59, 63, 57, 61, 63, 67, 68, 73, - 72, 73, 69, 42, 61, 33, 37, 38, 30, 26, 25, 30, 29, 28, 8, 8, - 14, 32, 13, 13, 26, 42, 22, 24, 40, 45, 52, 45, 17, 36, 41, 44, - 57, 79, 61, 76, 89, 87, 75, 0, 45, 76, 84, 84, 84, 89, 92, 84, - 85, 91, 84, 89, 83, 99, 91, 100, 95, 99, 77, 103, 88, 106, 77, 41, - 81, 89, 130, 124, 124, 123, 122, 112, 118, 118, 76, 37, 68, 48, 56, 37, - 38, 40, 53, 26, 24, 30, 49, 28, 34, 34, 44, 42, 48, 52, 57, 65, - 71, 91, 103, 103, 107, 108, 97, 99, 97, 96, 95, 92, 89, 89, 80, 71, - 134, 132, 131, 128, 111, 118, 124, 123, 112, 112, 99, 102, 100, 104, 115, 102, - 96, 91, 89, 85, 88, 64, 36, 111, 134, 158, 161, 153, 150, 150, 155, 147, - 122, 96, 48, 103, 93, 107, 103, 103, 95, 99, 97, 99, 93, 99, 120, 41, - 44, 48, 37, 34, 59, 73, 80, 85, 93, 115, 123, 116, 99, 122, 126, 122, - 123, 122, 127, 123, 130, 124, 119, 115, 135, 134, 127, 115, 131, 126, 126, 97, - 130, 130, 107, 4, 91, 128, 151, 107, 116, 130, 148, 127, 122, 115, 22, 128, - 174, 161, 153, 153, 153, 147, 140, 102, 93, 83, 72, 64, 72, 65, 76, 114, - 118, 112, 127, 124, 132, 119, 120, 93, 91, 111, 114, 110, 116, 114, 102, 84, - 128, 83, 75, 64, 38, 97, 100, 132, 134, 0, 0, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 4, 9, 2, 0, 42, - 12, 12, 10, 12, 20, 14, 9, 9, 18, 16, 9, 6, 5, 6, 5, 5, - 4, 6, 5, 5, 4, 5, 4, 5, 22, 38, 42, 41, 44, 73, 61, 76, - 59, 32, 4, 108, 68, 83, 63, 52, 48, 48, 46, 55, 56, 56, 37, 34, - 34, 34, 29, 26, 24, 18, 17, 14, 14, 9, 9, 9, 8, 6, 6, 5, - 5, 4, 4, 2, 2, 2, 1, 1, 5, 5, 1, 0, 1, 2, 0, 0, - 1, 2, 0, 16, 12, 12, 16, 14, 33, 59, 36, 42, 52, 32, 1, 44, - 14, 20, 16, 17, 13, 17, 13, 16, 9, 8, 9, 12, 24, 51, 44, 60, - 65, 71, 60, 72, 68, 42, 0, 97, 84, 84, 73, 68, 64, 64, 51, 61, - 52, 30, 59, 59, 64, 60, 60, 61, 64, 64, 64, 61, 68, 64, 63, 63, - 42, 33, 33, 34, 42, 73, 72, 77, 123, 190, 182, 123, 87, 157, 108, 85, - 85, 89, 91, 91, 89, 88, 111, 161, 204, 220, 222, 221, 221, 212, 140, 127, - 134, 147, 150, 147, 140, 111, 37, 22, 21, 18, 18, 24, 25, 14, 30, 41, - 37, 42, 46, 48, 48, 49, 51, 56, 65, 67, 60, 64, 52, 53, 59, 52, - 57, 64, 83, 77, 80, 48, 59, 106, 110, 99, 89, 69, 71, 69, 64, 41, - 34, 37, 6, 0, 26, 5, 4, 5, 17, 0, 4, 4, 0, 0, 25, 28, - 20, 17, 17, 24, 22, 20, 21, 25, 28, 28, 29, 33, 36, 41, 49, 52, - 57, 60, 67, 71, 80, 59, 64, 83, 80, 57, 59, 63, 60, 44, 44, 51, - 37, 25, 6, 21, 8, 33, 36, 18, 13, 28, 29, 17, 17, 26, 28, 76, - 92, 104, 108, 103, 116, 110, 112, 84, 79, 5, 21, 143, 157, 107, 104, 132, - 146, 92, 112, 114, 60, 29, 57, 136, 136, 87, 88, 92, 68, 68, 63, 79, - 46, 33, 9, 6, 5, 40, 10, 6, 10, 34, 22, 12, 20, 44, 37, 36, - 38, 52, 51, 46, 83, 72, 60, 59, 100, 57, 17, 75, 34, 44, 36, 41, - 34, 34, 30, 33, 21, 18, 37, 26, 51, 68, 77, 81, 88, 107, 104, 102, - 103, 85, 22, 107, 142, 150, 122, 135, 102, 84, 77, 52, 52, 44, 44, 57, - 48, 65, 37, 42, 63, 45, 57, 64, 68, 69, 57, 102, 93, 120, 110, 104, - 95, 112, 110, 104, 100, 104, 102, 95, 68, 48, 46, 41, 42, 40, 42, 41, - 53, 37, 40, 56, 67, 60, 89, 95, 87, 64, 100, 108, 71, 41, 87, 83, - 79, 77, 77, 71, 76, 87, 96, 103, 106, 142, 12, 61, 170, 170, 115, 119, - 110, 108, 95, 79, 45, 28, 22, 20, 18, 17, 16, 14, 13, 12, 10, 9, - 40, 38, 6, 4, 49, 40, 2, 1, 40, 26, 0, 4, 36, 1, 2, 46, - 48, 65, 68, 69, 72, 79, 84, 124, 118, 24, 128, 166, 115, 106, 102, 99, - 99, 107, 104, 99, 119, 111, 104, 81, 95, 106, 95, 65, 60, 56, 60, 73, - 89, 83, 81, 72, 72, 69, 73, 76, 71, 60, 57, 57, 51, 36, 34, 32, - 29, 25, 24, 18, 33, 40, 40, 24, 38, 21, 32, 26, 1, 0, 14, 49, - 48, 32, 32, 34, 25, 18, 10, 5, 0, 1, 6, 33, 36, 28, 36, 42, - 63, 52, 42, 36, 24, 5, 48, 65, 67, 57, 42, 60, 46, 59, 55, 51, - 17, 4, 60, 102, 95, 92, 91, 85, 85, 84, 92, 67, 30, 6, 108, 68, - 73, 108, 100, 84, 67, 73, 53, 38, 20, 32, 38, 44, 45, 52, 51, 49, - 59, 63, 59, 38, 59, 55, 104, 106, 106, 107, 114, 108, 102, 107, 115, 102, - 87, 83, 103, 99, 93, 102, 100, 95, 84, 79, 95, 75, 17, 1, 63, 103, - 102, 79, 64, 48, 38, 34, 18, 13, 10, 1, 10, 45, 51, 56, 48, 59, - 61, 65, 63, 67, 42, 1, 53, 114, 126, 130, 126, 124, 108, 118, 107, 80, - 42, 0, 93, 84, 100, 96, 104, 96, 93, 81, 69, 52, 29, 12, 10, 10, - 10, 13, 13, 12, 16, 14, 14, 14, 20, 21, 24, 65, 71, 89, 87, 85, - 115, 108, 91, 81, 132, 190, 139, 95, 120, 134, 130, 143, 139, 127, 134, 147, - 158, 198, 216, 218, 222, 222, 220, 220, 159, 128, 132, 144, 146, 142, 134, 96, - 36, 22, 21, 18, 25, 21, 18, 26, 41, 45, 56, 88, 103, 96, 79, 77, - 64, 60, 60, 51, 46, 44, 71, 104, 122, 116, 128, 100, 102, 112, 91, 84, - 45, 83, 130, 115, 97, 97, 112, 103, 106, 77, 73, 67, 9, 18, 144, 142, - 106, 97, 111, 111, 107, 99, 119, 97, 49, 13, 40, 96, 115, 108, 111, 112, - 120, 110, 111, 108, 102, 88, 107, 111, 119, 115, 111, 85, 67, 53, 37, 38, - 45, 34, 38, 71, 67, 81, 75, 85, 87, 96, 95, 88, 76, 10, 29, 85, - 96, 102, 96, 93, 96, 93, 97, 100, 93, 104, 89, 120, 136, 140, 136, 136, - 132, 119, 114, 85, 10, 131, 143, 130, 140, 132, 138, 131, 139, 135, 115, 72, - 22, 127, 147, 150, 135, 138, 144, 138, 108, 126, 128, 87, 73, 9, 24, 155, - 151, 102, 97, 148, 147, 112, 95, 118, 116, 65, 21, 67, 144, 140, 87, 88, - 84, 79, 71, 65, 57, 9, 24, 61, 68, 72, 69, 84, 89, 87, 92, 99, - 89, 0, 55, 153, 157, 154, 157, 158, 153, 150, 150, 118, 89, 21, 116, 153, - 144, 146, 153, 153, 153, 150, 134, 103, 87, 20, 56, 177, 170, 110, 106, 103, - 96, 84, 51, 26, 37, 22, 22, 21, 25, 21, 22, 20, 21, 18, 22, 21, - 22, 21, 30, 38, 103, 123, 128, 128, 114, 142, 130, 85, 40, 91, 154, 151, - 142, 92, 95, 44, 34, 34, 25, 29, 20, 61, 80, 150, 153, 153, 158, 154, - 162, 158, 158, 128, 139, 17, 139, 187, 182, 178, 187, 178, 178, 177, 177, 171, - 167, 136, 130, 161, 143, 140, 144, 157, 151, 153, 146, 139, 79, 0, 37, 136, - 181, 106, 135, 144, 171, 110, 147, 140, 52, 1, 135, 159, 154, 111, 154, 148, - 151, 88, 79, 114, 24, 134, 122, 143, 150, 159, 169, 167, 162, 165, 173, 169, - 140, 100, 87, 108, 139, 140, 136, 136, 136, 112, 88, 79, 85, 57, 69, 83, - 97, 102, 111, 112, 116, 124, 134, 135, 140, 139, 150, 157, 162, 166, 169, 83, - 59, 68, 60, 53, 55, 21, 28, 4, 0, 40, 34, 57, 51, 42, 46, 42, - 41, 36, 33, 6, 1, 51, 83, 84, 79, 76, 64, 80, 77, 67, 38, 28, - 6, 65, 63, 53, 44, 41, 63, 48, 45, 42, 49, 20, 2, 81, 99, 71, - 76, 85, 100, 77, 80, 59, 68, 33, 10, 116, 88, 65, 60, 45, 65, 77, - 97, 104, 92, 73, 88, 106, 93, 96, 103, 93, 95, 99, 89, 96, 80, 89, - 76, 71, 102, 88, 73, 83, 85, 75, 67, 64, 68, 84, 57, 72, 88, 104, - 108, 93, 93, 83, 76, 85, 84, 41, 0, 81, 97, 123, 85, 91, 67, 76, - 75, 68, 53, 32, 8, 69, 112, 108, 108, 100, 99, 64, 85, 88, 72, 48, - 1, 103, 127, 110, 96, 83, 106, 95, 87, 89, 77, 41, 0, 110, 80, 88, - 93, 89, 88, 89, 91, 79, 67, 29, 34, 110, 92, 84, 88, 103, 103, 85, - 84, 81, 79, 76, 72, 77, 72, 115, 122, 119, 106, 104, 106, 97, 71, 84, - 179, 157, 106, 84, 165, 173, 182, 195, 204, 208, 210, 214, 217, 221, 221, 216, - 220, 213, 163, 132, 138, 143, 138, 135, 107, 63, 33, 24, 21, 18, 25, 18, - 28, 36, 49, 42, 40, 79, 119, 134, 124, 123, 126, 134, 130, 134, 112, 102, - 104, 114, 127, 127, 115, 107, 115, 107, 104, 99, 88, 52, 79, 130, 124, 111, - 100, 99, 95, 107, 115, 84, 72, 0, 146, 150, 131, 134, 130, 131, 128, 111, - 108, 104, 102, 108, 12, 143, 139, 128, 130, 123, 128, 118, 119, 120, 123, 119, - 95, 76, 116, 123, 118, 114, 99, 100, 111, 116, 73, 40, 68, 126, 128, 134, - 120, 130, 128, 126, 116, 118, 107, 79, 6, 139, 135, 143, 138, 128, 126, 119, - 111, 115, 111, 93, 95, 138, 157, 154, 144, 144, 136, 138, 140, 114, 89, 5, - 148, 140, 140, 134, 130, 128, 127, 127, 132, 124, 76, 25, 140, 154, 138, 123, - 131, 126, 142, 139, 128, 116, 89, 83, 2, 158, 159, 153, 95, 110, 143, 140, - 115, 115, 118, 120, 75, 24, 139, 151, 138, 136, 139, 134, 147, 104, 84, 96, - 8, 72, 146, 159, 162, 154, 151, 146, 144, 147, 143, 106, 28, 139, 162, 159, - 154, 146, 140, 147, 150, 147, 138, 99, 18, 132, 159, 132, 147, 140, 142, 143, - 148, 148, 134, 97, 16, 153, 182, 153, 148, 158, 154, 150, 110, 132, 128, 127, - 128, 140, 159, 143, 140, 144, 147, 147, 142, 147, 148, 127, 124, 134, 132, 118, - 126, 134, 131, 155, 150, 143, 96, 41, 108, 169, 155, 148, 153, 131, 143, 140, - 118, 112, 88, 69, 126, 161, 171, 178, 173, 173, 170, 171, 162, 158, 140, 122, - 30, 158, 183, 191, 181, 185, 179, 148, 143, 144, 134, 127, 163, 163, 159, 120, - 124, 158, 158, 123, 127, 128, 153, 91, 0, 135, 181, 167, 165, 163, 158, 163, - 161, 162, 161, 89, 2, 147, 159, 166, 169, 174, 169, 170, 162, 104, 122, 28, - 167, 142, 166, 171, 170, 166, 147, 161, 167, 162, 136, 136, 99, 79, 124, 138, - 132, 138, 134, 135, 134, 130, 119, 92, 64, 81, 126, 166, 173, 179, 171, 167, - 150, 150, 135, 147, 155, 127, 130, 140, 178, 154, 112, 92, 61, 75, 87, 65, - 85, 22, 0, 0, 42, 49, 56, 51, 29, 32, 4, 24, 22, 26, 8, 2, - 69, 89, 73, 65, 63, 65, 71, 81, 75, 41, 25, 6, 67, 71, 83, 96, - 75, 87, 73, 71, 52, 49, 22, 2, 69, 96, 69, 69, 55, 59, 63, 56, - 44, 46, 29, 9, 115, 85, 80, 48, 59, 59, 61, 64, 45, 69, 81, 76, - 55, 53, 64, 64, 65, 46, 42, 67, 49, 52, 81, 57, 103, 87, 93, 88, - 75, 83, 80, 83, 79, 67, 71, 53, 96, 119, 102, 84, 95, 91, 89, 95, - 89, 83, 45, 1, 85, 100, 127, 83, 72, 88, 63, 80, 64, 56, 36, 21, - 88, 107, 95, 102, 102, 91, 87, 91, 88, 84, 48, 0, 100, 128, 75, 84, - 91, 91, 83, 107, 84, 89, 45, 0, 104, 76, 85, 84, 81, 84, 83, 85, - 83, 63, 30, 102, 103, 99, 85, 73, 92, 99, 88, 80, 93, 81, 93, 76, - 52, 112, 126, 112, 92, 85, 91, 106, 107, 68, 65, 138, 166, 114, 79, 118, - 123, 142, 162, 187, 199, 208, 210, 209, 210, 217, 201, 178, 155, 127, 138, 135, - 120, 99, 63, 34, 24, 25, 22, 21, 22, 20, 25, 34, 45, 42, 48, 46, - 79, 120, 132, 132, 131, 126, 122, 126, 128, 107, 104, 80, 128, 126, 106, 108, - 118, 119, 116, 108, 81, 102, 49, 76, 119, 115, 108, 108, 106, 99, 104, 107, - 87, 72, 14, 150, 148, 144, 126, 119, 119, 116, 106, 106, 106, 118, 108, 12, - 142, 127, 122, 123, 132, 127, 124, 132, 122, 120, 103, 60, 104, 151, 132, 122, - 119, 114, 114, 123, 118, 79, 55, 118, 124, 120, 116, 115, 123, 130, 115, 114, - 104, 99, 89, 25, 140, 124, 127, 131, 143, 136, 124, 119, 112, 102, 72, 123, - 159, 143, 135, 144, 135, 123, 115, 122, 97, 84, 0, 106, 139, 132, 122, 115, - 122, 131, 131, 142, 120, 77, 18, 127, 151, 131, 127, 107, 119, 123, 128, 115, - 92, 95, 84, 6, 150, 128, 147, 135, 138, 130, 127, 132, 128, 144, 124, 80, - 22, 146, 153, 135, 131, 128, 127, 127, 132, 92, 106, 10, 130, 158, 157, 151, - 138, 153, 151, 146, 131, 131, 99, 18, 143, 161, 148, 144, 140, 130, 128, 126, - 126, 120, 96, 16, 130, 153, 146, 148, 146, 132, 139, 138, 143, 142, 99, 22, - 143, 170, 171, 170, 162, 154, 132, 161, 127, 119, 108, 114, 147, 158, 167, 142, - 148, 153, 153, 147, 139, 146, 146, 127, 87, 154, 165, 155, 155, 144, 143, 143, - 138, 106, 38, 107, 167, 157, 154, 150, 144, 150, 143, 146, 118, 92, 73, 135, - 174, 169, 166, 165, 165, 166, 165, 169, 170, 124, 135, 24, 153, 178, 190, 187, - 185, 167, 167, 185, 182, 179, 175, 114, 104, 161, 165, 151, 147, 143, 144, 139, - 143, 144, 93, 32, 174, 177, 163, 167, 162, 167, 169, 167, 161, 161, 93, 0, - 143, 159, 163, 159, 157, 158, 154, 162, 120, 124, 30, 178, 153, 142, 167, 161, - 159, 159, 163, 151, 144, 150, 139, 75, 102, 135, 136, 134, 130, 128, 130, 128, - 132, 119, 84, 55, 116, 186, 191, 179, 178, 177, 153, 169, 161, 146, 147, 130, - 122, 183, 195, 206, 209, 30, 37, 79, 65, 24, 48, 81, 21, 0, 0, 36, - 65, 51, 20, 20, 29, 29, 17, 0, 22, 5, 2, 53, 93, 69, 76, 65, - 60, 59, 61, 81, 44, 28, 12, 38, 76, 75, 55, 67, 83, 79, 45, 45, - 49, 21, 2, 89, 91, 89, 67, 75, 77, 61, 75, 51, 67, 33, 2, 108, - 92, 79, 48, 40, 49, 67, 60, 63, 59, 53, 59, 49, 81, 57, 56, 69, - 63, 65, 64, 61, 49, 44, 32, 103, 89, 91, 84, 69, 72, 64, 61, 81, - 72, 63, 53, 114, 115, 85, 77, 73, 83, 88, 80, 79, 97, 41, 0, 89, - 107, 111, 67, 73, 87, 80, 96, 95, 77, 38, 6, 106, 106, 110, 92, 104, - 97, 88, 91, 87, 71, 49, 0, 95, 122, 73, 87, 81, 97, 100, 103, 88, - 72, 45, 0, 104, 85, 88, 93, 91, 81, 83, 81, 87, 68, 29, 102, 97, - 89, 93, 100, 96, 85, 89, 88, 81, 80, 69, 46, 68, 119, 118, 111, 87, - 91, 93, 83, 104, 71, 60, 120, 166, 115, 75, 87, 104, 116, 123, 131, 155, - 167, 177, 174, 170, 166, 146, 132, 132, 126, 107, 84, 52, 36, 24, 21, 20, - 20, 26, 17, 20, 34, 34, 41, 44, 52, 48, 42, 83, 136, 138, 135, 116, - 122, 111, 110, 99, 97, 68, 112, 134, 106, 110, 127, 111, 107, 103, 108, 87, - 100, 60, 63, 119, 116, 108, 120, 102, 111, 106, 106, 93, 71, 12, 100, 143, - 130, 134, 144, 127, 122, 118, 107, 104, 108, 69, 16, 102, 120, 126, 132, 126, - 124, 115, 118, 119, 103, 93, 61, 111, 147, 122, 119, 130, 138, 135, 123, 110, - 81, 41, 116, 132, 124, 118, 116, 112, 126, 120, 106, 102, 96, 88, 5, 119, - 119, 130, 116, 135, 144, 138, 119, 115, 93, 53, 120, 161, 143, 140, 142, 134, - 119, 119, 111, 104, 92, 2, 122, 144, 144, 114, 124, 128, 124, 136, 134, 131, - 81, 17, 131, 151, 128, 124, 120, 122, 116, 106, 115, 96, 89, 88, 5, 114, - 128, 106, 138, 139, 132, 132, 130, 130, 126, 122, 89, 21, 132, 146, 128, 127, - 138, 140, 138, 132, 112, 108, 2, 139, 161, 146, 146, 146, 138, 135, 131, 124, - 127, 99, 8, 138, 161, 148, 136, 143, 128, 126, 128, 126, 127, 99, 13, 128, - 154, 154, 146, 155, 154, 153, 142, 143, 118, 102, 20, 138, 169, 174, 169, 171, - 163, 173, 174, 169, 162, 106, 143, 169, 155, 142, 135, 142, 142, 140, 123, 127, - 134, 118, 77, 96, 170, 167, 142, 153, 153, 157, 136, 138, 114, 51, 107, 163, - 155, 150, 158, 157, 151, 150, 147, 124, 99, 72, 136, 177, 169, 163, 165, 170, - 170, 163, 162, 167, 123, 136, 9, 150, 175, 179, 186, 189, 166, 169, 177, 179, - 175, 171, 106, 140, 170, 159, 140, 151, 139, 144, 138, 140, 143, 95, 0, 127, - 171, 166, 165, 157, 163, 162, 167, 167, 155, 96, 0, 154, 159, 155, 163, 161, - 159, 154, 162, 158, 130, 32, 177, 140, 148, 170, 161, 167, 161, 155, 155, 147, - 148, 144, 71, 81, 136, 138, 131, 132, 134, 131, 126, 132, 124, 91, 55, 161, - 190, 177, 173, 174, 139, 162, 177, 169, 155, 154, 102, 127, 189, 206, 187, 163, - 72, 72, 83, 26, 40, 48, 68, 16, 0, 1, 33, 63, 52, 6, 16, 18, - 36, 1, 0, 29, 1, 1, 44, 83, 72, 65, 77, 85, 59, 56, 67, 46, - 29, 8, 77, 87, 75, 55, 61, 76, 77, 49, 46, 49, 22, 2, 76, 89, - 61, 73, 76, 65, 71, 64, 52, 52, 32, 4, 106, 81, 76, 45, 48, 48, - 71, 64, 63, 55, 45, 64, 73, 72, 77, 72, 48, 52, 63, 49, 53, 61, - 65, 28, 100, 100, 89, 69, 72, 63, 81, 61, 73, 69, 67, 57, 111, 112, - 68, 68, 73, 77, 63, 76, 77, 76, 42, 1, 89, 103, 119, 79, 88, 72, - 63, 64, 89, 55, 38, 0, 93, 97, 116, 96, 104, 92, 91, 88, 71, 80, - 49, 0, 107, 120, 83, 96, 93, 93, 84, 100, 95, 83, 45, 0, 96, 96, - 88, 88, 87, 83, 83, 81, 83, 65, 33, 65, 85, 104, 92, 80, 96, 85, - 84, 89, 84, 77, 68, 41, 96, 120, 115, 106, 97, 84, 89, 95, 108, 80, - 59, 111, 166, 127, 95, 67, 69, 69, 76, 95, 115, 119, 123, 127, 123, 122, - 119, 93, 71, 51, 37, 28, 25, 25, 21, 18, 21, 25, 18, 36, 40, 41, - 42, 48, 51, 52, 52, 44, 76, 130, 120, 110, 95, 108, 111, 110, 97, 79, - 68, 118, 127, 106, 119, 111, 112, 97, 96, 114, 99, 103, 65, 53, 110, 115, - 106, 104, 107, 103, 97, 100, 83, 73, 9, 103, 142, 139, 148, 131, 99, 97, - 108, 99, 114, 115, 73, 13, 110, 130, 124, 128, 114, 118, 118, 119, 106, 106, - 96, 57, 111, 151, 130, 116, 118, 112, 110, 127, 111, 80, 42, 100, 132, 124, - 128, 124, 114, 120, 108, 103, 104, 92, 87, 4, 110, 128, 130, 116, 130, 140, - 136, 115, 103, 93, 53, 122, 163, 131, 132, 123, 132, 119, 122, 106, 110, 88, - 5, 136, 143, 138, 115, 122, 130, 132, 127, 132, 126, 85, 12, 143, 153, 127, - 120, 120, 107, 119, 119, 100, 99, 96, 83, 2, 122, 155, 143, 140, 136, 132, - 127, 136, 130, 132, 122, 81, 13, 132, 148, 127, 130, 128, 128, 124, 131, 95, - 104, 2, 138, 158, 138, 147, 136, 131, 134, 124, 130, 106, 99, 22, 147, 159, - 144, 135, 127, 132, 123, 123, 115, 128, 97, 12, 128, 151, 154, 140, 139, 143, - 138, 138, 142, 124, 104, 13, 147, 177, 171, 179, 163, 169, 163, 167, 162, 158, - 75, 143, 161, 155, 148, 143, 138, 138, 135, 134, 135, 119, 128, 75, 148, 175, - 174, 140, 159, 148, 150, 135, 135, 120, 60, 107, 169, 159, 155, 157, 159, 148, - 148, 150, 144, 95, 51, 123, 173, 161, 155, 155, 158, 161, 158, 150, 170, 138, - 136, 12, 162, 179, 178, 186, 181, 171, 166, 166, 185, 173, 170, 95, 143, 173, - 154, 142, 146, 135, 132, 138, 134, 140, 99, 0, 132, 174, 163, 161, 161, 162, - 161, 153, 161, 146, 106, 0, 144, 157, 162, 162, 167, 163, 155, 158, 130, 131, - 40, 179, 146, 150, 171, 158, 171, 157, 155, 161, 150, 148, 134, 65, 104, 138, - 136, 124, 126, 120, 119, 119, 130, 114, 75, 89, 163, 189, 170, 169, 174, 150, - 147, 159, 144, 143, 144, 95, 161, 195, 197, 163, 163, 80, 83, 22, 30, 45, - 34, 60, 34, 2, 0, 37, 68, 53, 10, 8, 16, 29, 1, 0, 24, 2, - 1, 40, 89, 76, 71, 52, 68, 72, 57, 60, 61, 33, 10, 75, 76, 73, - 65, 44, 49, 60, 44, 46, 45, 21, 1, 76, 92, 65, 67, 67, 64, 77, - 68, 53, 56, 34, 5, 110, 93, 72, 44, 45, 48, 48, 53, 65, 60, 42, - 84, 85, 72, 71, 49, 49, 73, 83, 49, 71, 67, 71, 41, 111, 84, 69, - 64, 71, 60, 81, 59, 80, 67, 56, 60, 115, 103, 68, 76, 60, 73, 80, - 96, 75, 75, 46, 0, 85, 106, 119, 77, 77, 75, 65, 64, 99, 53, 41, - 5, 100, 112, 99, 87, 99, 81, 81, 88, 72, 83, 51, 1, 103, 126, 83, - 81, 91, 89, 93, 100, 93, 77, 46, 0, 99, 89, 89, 96, 83, 83, 85, - 79, 75, 65, 36, 67, 88, 93, 91, 89, 96, 85, 77, 81, 76, 83, 72, - 34, 97, 120, 118, 92, 100, 81, 92, 103, 93, 87, 56, 102, 163, 135, 106, - 87, 69, 59, 53, 53, 48, 48, 46, 48, 51, 45, 41, 37, 30, 30, 28, - 26, 22, 22, 21, 25, 14, 24, 41, 48, 55, 56, 55, 52, 51, 53, 55, - 44, 77, 135, 111, 115, 115, 111, 102, 122, 110, 96, 51, 112, 128, 106, 123, - 104, 95, 95, 93, 110, 102, 102, 69, 37, 111, 122, 124, 120, 119, 114, 107, - 99, 88, 73, 2, 103, 135, 124, 139, 99, 93, 106, 108, 100, 104, 110, 100, - 8, 142, 135, 114, 136, 118, 107, 106, 108, 106, 120, 100, 56, 118, 142, 126, - 124, 112, 112, 107, 120, 115, 83, 46, 99, 130, 142, 151, 120, 110, 104, 106, - 104, 108, 102, 83, 0, 153, 123, 124, 116, 128, 126, 136, 116, 104, 99, 51, - 122, 162, 143, 138, 120, 130, 118, 119, 103, 115, 97, 0, 146, 143, 144, 116, - 120, 120, 136, 136, 135, 131, 85, 16, 142, 155, 128, 120, 116, 107, 104, 122, - 97, 103, 97, 91, 4, 165, 163, 142, 147, 123, 132, 143, 124, 122, 134, 122, - 87, 10, 139, 148, 127, 127, 128, 158, 134, 136, 95, 106, 1, 139, 159, 139, - 144, 131, 136, 126, 124, 127, 132, 103, 30, 143, 158, 134, 143, 127, 126, 128, - 127, 120, 134, 100, 9, 131, 154, 147, 138, 139, 143, 155, 140, 138, 135, 106, - 10, 148, 182, 171, 173, 163, 159, 161, 162, 163, 151, 71, 146, 169, 148, 162, - 153, 143, 139, 135, 127, 130, 122, 128, 65, 150, 170, 166, 143, 162, 159, 134, - 140, 118, 106, 56, 110, 170, 151, 154, 155, 143, 142, 139, 144, 148, 97, 61, - 128, 173, 169, 158, 151, 151, 144, 153, 155, 167, 146, 132, 12, 166, 186, 185, - 183, 166, 165, 166, 166, 182, 166, 170, 87, 147, 171, 155, 136, 144, 136, 132, - 139, 142, 143, 97, 0, 148, 171, 166, 163, 159, 165, 162, 165, 155, 147, 100, - 1, 153, 158, 158, 154, 157, 169, 158, 161, 138, 130, 48, 170, 153, 153, 140, - 134, 175, 155, 151, 154, 158, 138, 135, 61, 104, 122, 134, 132, 140, 135, 135, - 126, 128, 108, 68, 108, 182, 186, 169, 170, 167, 150, 165, 165, 146, 146, 142, - 92, 159, 195, 173, 175, 174, 81, 65, 20, 34, 42, 29, 60, 14, 0, 0, - 24, 60, 44, 12, 20, 8, 37, 1, 17, 34, 4, 0, 20, 71, 83, 65, - 71, 65, 51, 46, 60, 67, 26, 12, 52, 81, 55, 67, 72, 52, 65, 48, - 45, 59, 24, 2, 76, 89, 52, 55, 85, 64, 59, 49, 44, 46, 34, 2, - 107, 92, 87, 46, 49, 45, 49, 48, 63, 59, 42, 89, 80, 73, 52, 48, - 60, 99, 49, 52, 52, 65, 84, 38, 99, 77, 75, 72, 68, 63, 88, 59, - 72, 64, 37, 65, 116, 116, 69, 103, 67, 67, 81, 102, 72, 71, 52, 0, - 84, 99, 107, 76, 85, 72, 67, 61, 95, 57, 42, 13, 96, 112, 92, 92, - 83, 79, 104, 88, 79, 75, 53, 0, 100, 127, 73, 93, 91, 85, 88, 107, - 84, 76, 46, 0, 95, 88, 92, 87, 75, 80, 81, 80, 85, 63, 37, 65, - 103, 75, 88, 91, 100, 87, 96, 93, 65, 88, 63, 30, 108, 127, 115, 102, - 99, 80, 83, 103, 89, 88, 56, 95, 157, 140, 116, 106, 93, 84, 61, 52, - 48, 44, 41, 40, 37, 36, 34, 32, 30, 28, 26, 26, 25, 26, 26, 12, - 22, 42, 57, 61, 57, 64, 65, 65, 68, 57, 59, 52, 72, 144, 116, 104, - 118, 112, 111, 107, 107, 102, 42, 114, 120, 106, 106, 106, 95, 111, 102, 100, - 100, 106, 72, 32, 96, 119, 126, 108, 104, 100, 103, 99, 89, 75, 10, 115, - 134, 127, 134, 95, 96, 115, 99, 100, 112, 116, 106, 8, 138, 128, 116, 135, - 111, 110, 111, 102, 100, 119, 97, 45, 112, 155, 123, 115, 116, 116, 111, 123, - 114, 84, 52, 91, 138, 140, 122, 111, 120, 104, 119, 116, 114, 102, 92, 17, - 147, 115, 131, 112, 126, 110, 146, 114, 106, 96, 51, 123, 161, 135, 140, 124, - 124, 127, 107, 104, 103, 93, 0, 126, 142, 143, 115, 128, 116, 124, 127, 138, - 118, 87, 10, 139, 155, 131, 126, 118, 116, 115, 119, 103, 95, 103, 89, 2, - 158, 170, 139, 142, 124, 135, 131, 135, 120, 124, 119, 88, 14, 134, 155, 130, - 131, 146, 147, 136, 128, 97, 106, 10, 143, 159, 131, 138, 126, 126, 127, 132, - 127, 131, 106, 13, 143, 159, 143, 144, 138, 142, 139, 140, 122, 135, 104, 6, - 136, 148, 143, 143, 162, 139, 135, 138, 142, 143, 111, 18, 179, 179, 173, 167, - 162, 171, 161, 163, 162, 158, 77, 151, 159, 161, 153, 159, 148, 138, 138, 127, - 128, 122, 123, 59, 157, 175, 163, 140, 153, 147, 136, 134, 139, 111, 60, 112, - 173, 150, 147, 143, 139, 136, 138, 143, 143, 100, 89, 126, 173, 173, 157, 150, - 139, 161, 151, 144, 165, 142, 135, 10, 162, 185, 182, 181, 169, 165, 163, 167, - 171, 167, 166, 83, 154, 175, 150, 138, 135, 131, 130, 138, 128, 150, 102, 22, - 170, 175, 163, 162, 165, 162, 157, 163, 155, 148, 108, 0, 161, 163, 158, 159, - 158, 157, 159, 161, 132, 138, 55, 155, 157, 147, 166, 158, 174, 153, 153, 162, - 159, 143, 128, 46, 110, 128, 122, 126, 124, 131, 130, 120, 130, 97, 65, 114, - 191, 178, 167, 169, 163, 165, 167, 185, 158, 155, 142, 83, 169, 194, 171, 179, - 181, 87, 26, 16, 40, 30, 25, 81, 12, 0, 0, 26, 42, 55, 14, 38, - 12, 28, 1, 5, 21, 6, 2, 28, 61, 83, 80, 77, 48, 81, 59, 56, - 73, 28, 12, 29, 81, 79, 55, 55, 56, 41, 56, 51, 46, 25, 1, 87, - 99, 55, 55, 52, 64, 69, 45, 45, 49, 34, 1, 107, 93, 83, 46, 42, - 44, 69, 51, 51, 55, 38, 92, 65, 55, 48, 57, 92, 55, 52, 59, 65, - 53, 65, 21, 102, 83, 65, 68, 59, 61, 91, 56, 71, 61, 44, 80, 118, - 102, 73, 100, 72, 63, 73, 106, 69, 67, 51, 0, 83, 87, 118, 75, 73, - 63, 68, 63, 110, 69, 52, 5, 99, 115, 85, 85, 77, 77, 103, 83, 77, - 69, 56, 0, 88, 126, 85, 81, 83, 84, 81, 106, 77, 76, 45, 0, 103, - 77, 85, 77, 75, 75, 80, 77, 79, 65, 38, 32, 67, 112, 89, 83, 68, - 81, 69, 71, 69, 91, 67, 28, 120, 123, 120, 89, 107, 83, 81, 102, 83, - 85, 60, 83, 144, 138, 140, 108, 103, 92, 80, 67, 63, 52, 48, 42, 38, - 38, 36, 38, 36, 40, 36, 36, 34, 30, 40, 10, 40, 61, 63, 61, 79, - 76, 83, 88, 87, 60, 59, 44, 71, 150, 115, 126, 92, 118, 126, 93, 104, - 99, 44, 107, 120, 107, 110, 99, 95, 119, 102, 103, 99, 110, 76, 36, 100, - 118, 119, 108, 100, 102, 103, 102, 88, 75, 8, 118, 131, 124, 146, 93, 96, - 106, 96, 100, 102, 107, 73, 8, 102, 124, 108, 143, 115, 114, 110, 103, 104, - 122, 99, 40, 111, 155, 118, 115, 118, 111, 119, 110, 108, 87, 49, 103, 136, - 144, 111, 111, 104, 115, 112, 106, 103, 99, 91, 2, 131, 119, 126, 111, 131, - 108, 134, 114, 104, 93, 32, 118, 161, 139, 143, 124, 122, 114, 112, 108, 107, - 92, 0, 131, 135, 154, 112, 119, 118, 118, 126, 140, 123, 88, 8, 142, 159, - 132, 135, 114, 122, 112, 127, 104, 93, 100, 92, 0, 130, 139, 116, 151, 124, - 134, 124, 134, 120, 126, 118, 88, 12, 139, 159, 130, 126, 146, 132, 132, 130, - 114, 110, 0, 142, 154, 139, 124, 123, 126, 122, 144, 128, 139, 110, 5, 130, - 158, 153, 135, 139, 135, 132, 130, 119, 139, 107, 6, 134, 150, 140, 157, 165, - 150, 135, 138, 139, 131, 112, 13, 161, 174, 178, 163, 161, 174, 159, 159, 158, - 159, 71, 158, 169, 147, 155, 153, 147, 131, 151, 128, 127, 131, 122, 53, 159, - 171, 142, 162, 134, 136, 143, 138, 139, 122, 76, 84, 167, 148, 143, 142, 132, - 143, 126, 143, 146, 108, 68, 122, 169, 177, 155, 142, 138, 165, 151, 143, 171, - 135, 139, 6, 166, 186, 178, 165, 163, 161, 169, 181, 171, 161, 170, 67, 157, - 170, 161, 136, 135, 126, 132, 139, 138, 139, 107, 0, 136, 171, 155, 155, 155, - 161, 157, 165, 147, 165, 107, 0, 153, 161, 158, 155, 151, 159, 158, 157, 153, - 148, 60, 102, 182, 147, 153, 154, 169, 153, 150, 161, 166, 143, 123, 36, 111, - 126, 123, 123, 122, 124, 122, 119, 131, 96, 59, 123, 183, 170, 163, 169, 155, - 167, 154, 181, 167, 165, 142, 71, 170, 197, 173, 182, 167, 87, 21, 24, 29, - 33, 24, 83, 12, 0, 0, 16, 33, 63, 8, 48, 8, 22, 0, 12, 5, - 10, 1, 10, 51, 89, 85, 89, 44, 77, 95, 38, 81, 25, 13, 12, 95, - 85, 42, 41, 44, 60, 60, 44, 44, 25, 1, 91, 102, 57, 46, 51, 51, - 46, 46, 45, 49, 36, 1, 107, 95, 93, 46, 45, 46, 51, 52, 49, 48, - 33, 97, 59, 51, 46, 93, 69, 48, 53, 56, 67, 57, 52, 18, 88, 85, - 63, 57, 57, 61, 102, 55, 67, 60, 41, 91, 122, 108, 69, 103, 59, 68, - 73, 108, 68, 68, 55, 0, 75, 83, 118, 63, 77, 63, 72, 63, 131, 57, - 49, 0, 110, 115, 81, 83, 75, 75, 111, 79, 73, 71, 55, 0, 80, 124, - 80, 81, 77, 75, 83, 118, 81, 81, 48, 0, 91, 83, 81, 73, 72, 83, - 76, 77, 72, 60, 41, 38, 67, 115, 115, 69, 83, 75, 64, 69, 65, 107, - 64, 24, 116, 127, 131, 92, 114, 112, 79, 95, 84, 77, 59, 77, 131, 140, - 131, 128, 107, 97, 89, 83, 75, 65, 52, 52, 51, 48, 46, 46, 34, 37, - 36, 33, 30, 30, 45, 8, 42, 65, 55, 77, 71, 71, 89, 107, 104, 81, - 59, 53, 63, 153, 110, 131, 93, 124, 108, 97, 102, 87, 37, 110, 116, 104, - 108, 99, 96, 128, 97, 104, 96, 123, 83, 40, 102, 112, 100, 102, 103, 103, - 97, 104, 89, 72, 1, 120, 120, 120, 158, 93, 95, 100, 95, 102, 100, 112, - 84, 4, 110, 128, 110, 143, 112, 114, 106, 104, 99, 130, 92, 33, 114, 165, - 115, 116, 115, 108, 106, 107, 106, 87, 55, 91, 139, 118, 111, 108, 108, 107, - 110, 114, 107, 96, 89, 2, 144, 119, 122, 110, 140, 107, 146, 108, 100, 87, - 30, 115, 161, 130, 148, 118, 118, 119, 108, 100, 112, 97, 1, 148, 135, 146, - 111, 122, 139, 140, 126, 147, 127, 92, 5, 155, 166, 135, 135, 112, 116, 115, - 138, 116, 91, 104, 92, 0, 134, 158, 138, 151, 124, 130, 127, 142, 116, 130, - 119, 93, 6, 143, 154, 130, 128, 150, 128, 136, 128, 103, 110, 0, 146, 163, - 136, 123, 128, 114, 120, 150, 130, 111, 107, 4, 131, 157, 161, 135, 134, 131, - 127, 114, 118, 150, 108, 5, 132, 146, 142, 157, 173, 136, 135, 138, 140, 146, - 119, 8, 166, 182, 182, 163, 155, 178, 155, 155, 155, 155, 44, 165, 167, 162, - 147, 163, 147, 134, 143, 124, 127, 120, 126, 38, 167, 171, 143, 169, 131, 142, - 139, 138, 138, 122, 84, 71, 169, 148, 143, 132, 154, 143, 128, 143, 139, 107, - 72, 96, 144, 182, 154, 144, 134, 159, 147, 138, 165, 144, 132, 6, 169, 189, - 179, 161, 161, 161, 166, 181, 169, 163, 169, 52, 162, 170, 162, 134, 130, 123, - 131, 131, 131, 135, 114, 0, 131, 171, 146, 147, 146, 155, 157, 171, 147, 150, - 115, 0, 150, 159, 161, 155, 151, 153, 154, 161, 157, 135, 104, 68, 182, 162, - 151, 159, 167, 155, 147, 161, 151, 153, 118, 29, 102, 127, 128, 140, 116, 124, - 116, 119, 131, 89, 48, 127, 186, 165, 163, 170, 153, 170, 162, 175, 154, 157, - 146, 56, 182, 194, 167, 167, 166 }; diff --git a/deps/CImg/examples/img/lena.pgm b/deps/CImg/examples/img/lena.pgm deleted file mode 100644 index f96a379..0000000 --- a/deps/CImg/examples/img/lena.pgm +++ /dev/null @@ -1,6 +0,0 @@ -P5 -# CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) -# CREATOR: XV Version 3.10 Rev: 12/16/94 -256 256 -255 -þþþþþþþþ¢¥›œžžž››œ ¢©©®±®©«¢“›rVVLbbbb`leblgeieiibbiulwiu{ww}u……}‡ƒ}……}}……{}ƒƒ}ƒƒ‡…‰…………‡ƒ…ƒ…ƒƒ‡…}……ƒƒ}ƒ‰…ƒƒy…}}…{ƒ}y{{wyrwunrb`nw‡‹“œ›¤§©ž•œž—™œžœ¢œœ™›œœ››™œœœœ¢œž¤  ž¢ÈÕÛÛàÞáÚÉžg`gbrww{uyy{y{u{yw{y{}y{r}{{y}unpuw‡«®ž¤¤¥¥§¢ž¢¢¥›œžžž››œ ¢©©®±®©«¢“›rVVLbbbb`leblgeieiibbiulwiu{ww}u……}‡ƒ}……}}……{}ƒƒ}ƒƒ‡…‰…………‡ƒ…ƒ…ƒƒ‡…}……ƒƒ}ƒ‰…ƒƒy…}}…{ƒ}y{{wyrwunrb`nw‡‹“œ›¤§©ž•œž—™œžœ¢œœ™›œœ››™œœœœ¢œž¤  ž¢ÈÕÛÛàÞáÚÉžg`gbrww{uyy{y{u{yw{y{}y{r}{{y}unpuw‡«®ž¤¤¥¥§¢ž¢¢¥›œžžž››œ ¢©©®±®©«¢“›rVVLbbbb`leblgeieiibbiulwiu{ww}u……}‡ƒ}……}}……{}ƒƒ}ƒƒ‡…‰…………‡ƒ…ƒ…ƒƒ‡…}……ƒƒ}ƒ‰…ƒƒy…}}…{ƒ}y{{wyrwunrb`nw‡‹“œ›¤§©ž•œž—™œžœ¢œœ™›œœ››™œœœœ¢œž¤  ž¢ÈÕÛÛàÞáÚÉžg`gbrww{uyy{y{u{yw{y{}y{r}{{y}unpuw‡«®ž¢§¢ ¢œœž›œ œž›—œ¢œ §¬¬¬®°«§ •‡rbVLVQVVbn^ege[bg[^e^pbgwlpry{rw}‡w{}ƒy}}ƒ‡……ƒ‰}ƒ}……ƒ‡ƒ‰…ƒƒ{…‡}}ƒ}ƒƒƒƒ}}}y{ƒ}{{}}ƒƒy}}yw{yupnib`pw}…“‘ž¤¢§ œ›™››ž¢œ¢žœœœ™™žž ›™œœž   žž›œµÏØÛÞàãÞÕ»…g`lprwuuyyywu}{{}y}{r}}y}{uw{{}up}}{V1œ ¢ž¥ ¤œœ¥ œ¢™™ ž›¤«°±®®±«§ ‘‡ugVOLQV[b``b^i`ggg^re`iigurur}yy}ryƒƒ{ƒ}ƒ{ƒƒƒ…‡…ƒ{}……‰yw‰ƒ{}ƒƒ}{ƒ………}wy…}w{}}{{}{wyynnil`gnuƒ‹•œž§ žž›™œž›œžœž¢›  ™œ››žžžžž™žž ››¢ÁÒÛÛÞÞáÛΧpeippr}uur}uwu{uuw{}yywyyw}}yyy}ƒ}{}{V4 ž ž› ž¢ œ›¢ ›œœ™žž¤«®«°±«¥¥ ƒlVLOVgV[b^^^Y^l[``^egninwuywwyyuw…{y{ƒ}ƒ…y{}…{……‰ƒ}{ƒ}{}ƒƒ}…‡}ƒ}y{ƒ{}…}{…}ƒ}}{}ƒ}}{}}{y}{}}ƒ}}}{ulpppnll`lw}‰—œ¢¥§žžœ™žœ¤¢ žž œœœœœ ž›™œ›œœž™œ —™®ÉÔÛÝÞàà×À•g`glrryrr{yyryuyuwy{wryu{}y{{wy}ƒƒnT. &ž ž ¤ œœž¥žž™››™ž§¤«®®®©¥¬¬¢‹‡ye^GL[JV[g^`bggb^b[b^bneilrpwyyuywy{‰}}}}}ƒy…{‡}}ƒ}ƒ‡{{}}…}……{y}}}}…ƒ‰}}ƒ}}}}y}}…}ww}w}…}wyuwrlnnee`iuƒ…‘—›§¢¢¢žœœ ¢¢¥¢¢ž œžžœžœž›œ›››žž §•››½ÑØÛÞÞààÑ°ubeinunyuw{wyr}puwƒywrwu}u{}yyww…}{Y.&#& ¢œ¢œ—œœœœ™ž›™œœ¤©«®¬¬¬®«©¢ ƒwi[YOVV[^``b`i`e[ei`^bigllppww{wu{w{yƒ…}}}}{{}}ƒ}………{}‡…ƒƒy‡}ƒƒ…}ƒ{ƒ}{……‰}‡}y‡{y{y{w}ƒ}yyrwywrunlbi`ir{‹“—œ ¤¥¤¤ ¢¢¢©¥§¤ ž ›œ¢ —›œ™™™™œ›œ› ›•§ÉÔÚÝáàáÚÈ›bgeinunryyp{uyun{}ry}wy}ww}{}lT#&)&.#œœžžœ› œ™›ž›œ——§¤§°©©¬©©«©ž ‰}b[QOTQ``Q`liiV[bl[^[belnllupyryw}}{{ƒƒ}{}{}}…ƒ}}ƒ‰}{}{}yƒƒ}ƒ}……{yƒ{…‰ƒƒ}}{}{}r}{}{{{}{nwppn}llg^pu‡•›žœ «¢  ¤¥¥¢¢¢¥ž ¥¢¢ž™™››ž—ž•œ——›—ž—¸Î×ÝÞááàÕ½}g[pgypluwyyrrwuwu}yw{{ƒ}……lG &#ž¢ž› ›¢¥¢¤œœ›œ¤¢©«®§¬««¥¬¥¤™‹ƒyeTYYQVeY[[Yi`^eb^Yb^gepnlpnuyw{r}{}y}}w{}}{ƒ}{ƒ‡{}…ƒ}{‰}}}‡}‹}}{‡‡{}yw}ƒ……ƒƒ}ƒ…{y}}}{yw}{yƒuyy{pplrll^`iw}‹›œ¢¢«¢¢¥¢ §¤¥§§¢ ž¤¤›ž›œ¢›œ›ž™›ž™›—“œÁÒÚààáàṲ̂gblipllyuw}uƒwyy‹{u}ƒ{…ƒ‡}gO)#&  œœœ   ¢žœ™¢›œ ¢¥«©«°§¥©¤¥žœ‘ƒb`LLVY[bbg`g``b[e[`Yeiliynnryyuw{{}}wƒ}ƒƒ}{…{yƒ}y}}}}‡}ƒ}}{}‹ƒ…y}{{ƒ…ƒƒ}}…y{}yƒw}{}}ww{{{}{}{wywrppgegYir‰““›ž §¤¤¢¢¢©¥«¤¤¤œ¢¢¢©™ ž ›œ™›œž›—›› “°ÌÕÝÞáãà×À^pgrlprpwwyywppyy}}}…ƒiG)..1  ž›žœ™ž ¢ž ž•œž¤¬«©¤©¬«¤¢¢ —›‡wYTTVTVYV‰[bY[iYbeb^`lugrn{puny{wyu{}ƒ{ƒƒ}}{}{ƒ}}}…ƒ}y}}…{}}}{}{}}}}{yy}{}ƒƒ…‡}ywwwyw}}{y}wu}{wuuyuwllgue`eg}‡‘™›ž¢ ¥¢¤¥ž¤¤¥¢§§§¢™ œœœ™œ—›™™™››™›™“™¾ÑØÝààáÞÒ¬lbglr{yruny}yyu{r‡…ƒ}ƒ…ƒp7#) ) &ž ™¢¢œž ¢› ¢™ ¤§«§®§©©©œ ¢ ›•‰yl^OQTYO``ieb^^b^^e^`bbibiurryrn{y}w{‹w}}y}}{y}…}}…{}{}…ƒ}w{y{yyu{{u{{{}{w{ƒ}…}…}ƒ}……}w}}ƒ}}y{uyy{}uyy{wu}uwpriliegnw{ƒ•— ž¤§§¤«¤œ¢¤¢  ¤¢žž¤¢›¢ž—•œ™™™œ™™——“‘¬ÌÕÛàáááÚÉžbbipw{r{pwywwwuuy}{}}‡‰l;744:FY`YRT^kupzŒ ¡Ÿš~kpz€Ž¢¯®­«¬®®¯²³³°´¹¾À¶¬±¸¸··¸¹¹ºº»»¼½½¾½¿¿¼¿Á¹Æ·Ç¶Å»¾Á»Â»À¾¿¿¿¿À¾Á½Â¼Á½¾À¹Æ¶Å·Ãº¾½¾¿¾¾½Á»À¾¾À½¿¿¿¿¿¿¾¿¿¾ÁºÄ¹Â¼¿¿½ÀºÀ½¾¿½À½À½¿À¿¿¿¿¿¿¿¿¿¿¿¿¼½¼´ŽTM>720--/15789::999=HRRNKMVisz}—y\R`ry|‡ ¨«¥£¢£¤§ª§Ÿ›¥ª±««³´®¯³¶¸¸¹¹º»¼½½¾¾¿¾Á½¿Á¼Â»Ã½¿À¼ÃºÃ»Á¾À¿À¿Á¾Á½Á½À¾½Â¹Ä¸Ä¹Á½À¼¿½À¾¼Á»À¿½À¾¿¿¿¿¿¿¾¾ÁºÄ¸Ç·Ã»Á¼¾À¾½À»Á»Á¼À½À½Á½À¿¿¿¿¿¿¾½¹ÂÄWNT<2*$!"%),03689:;<<>ABA@>>BUkr€†V7--1569Diƒ™˜“Ž‘˜’ziccagy”£¢£«²µ¶µ¶¸¹»¼½¾¿¿¿¿Á¾À¿¿¿¿¿À¾Á¼Â¼Â¾Á¿ÁÀÁ¿Á¿À¿À¿ÀÀ½Á¼Á¼Á½¿¾¾¼Âº¾À½¿¿½À½¿¾¾¿¾¿¾¿¿»Ã»¿¹Åº¿¼Á¼¾½À»ÂºÂ»Á»Á»Â¼Á¾¿¿¿¿¿½¼ÀÌÇÁS"Z8%$$%&'*,0479:;;<==;:75540)1H^k`%&,.,***,?=<;::9741/.-+()1>>2#($=r˜—„z|xb`^[TONIKaw€ˆ”¢¤¤§­²¶¹¼¾ÀÀÁÁÁÁÁÁÀÀ¿¿¿¿¿¿¿¿ÀÁÁÁÁÁÁÁÁÁÁÁÁÀÀÀ¿¿¿¿¿¿¿½¿»Á»À»ÁºÀ½¿¿¼¿¿¾¾¾¿¼Â¹Ã»¿¼Â¼¼À¼¿½¼À¹Â¹Â¹Â¹ÂºÁ¼¿¿¿¿¿¿½¸´´¶c+&#*057:;=??=:6310/+)&%$#!# #((Abg[SXTJBIPPKFEFFJT[`k‘›¡¤ª°²´¸½¿ÁÁÁÁÁÁÁÁÀÀ¿¿¿¿¿¿ÀÁÁÁÂÂÂÂÂÁÁÁÁÁÁÀÀÀÀÀ¿¿¿¿¾»ÀºÂºÂ¸Ãº¿½½¿¾½¿¼ÁºÂ¹Ã¹Â»Â»¿ÀºÁ»¾¾»À»À»¿»À»À¼¿¾¾¿¿¿¾¼¸·­|,!(/577777641-)&#! $'$$7>;8<97AFO`wŒœ¬­²º½ÂÃÄÃÂÁÁÁÁÀÀ¿¿¿¿¿ÀÁÁÂÂÂÃÃÂÂÂÂÂÁÁÁÁÁÀ¿¿¿¿¾»¿¹Á¸Â¸Áº¿¼¾½¿¼¿»À»¿¼¿½¾½¾½½¾½¾½½½½½¼½¼½½½½½½½½¾¾¾¾½¿¾«(#*-,)&$$$#!!%((%" "&&'(*-.0//./0379:;;:9756>Nk¬±²»ºÀÄÅÄÂÁÀÁÁÀÀÁÂÂÁ¿¿¿¿¾ÀÂÃÂÀÀÁÀ¿¾¿À¿¾½½¿Áü½»¾»¾»¾¼¾½½½½½½½½½½½½½½½½¾¾¾½½½½½½¼¼¼¼¼½¼¼½½½½½¾¾½¹¸»•J '*($ $(++($"!!"#$%&&&'(),.134554226==42x—¯Æ¿¾¿ÁÄÃÂÂÃÄÃÁÀÂÃÀ¿ÄÆÅÄÄÅþ¹¹¼¾¾½¾¿¿½¼ÀÃÅƼ¼¼¼¼¼¼¼¼¼½¼½½½½½½½½½½½½½¾¾¾¾½½½½½¼¼¼¼¼»¼¼¼¼¼¼¼¾¾¾»¹¿¾&"&$ #'+--)$!$&),0368::8669<91>[Œ¾ÄÆÇÉÆ¿¿ÁÁ¿½ºº»µµ½¿À»¹º¾ÀÂÆÊľ»º»»¹·¸¸¹¹¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½½½½½½½½½¾½½½½½¼¼»»¼»»»»¼¼¼¼½½¿¾½½²’W"!!!&*./-(! $'+/25789:;<=;78@gŸ·º¸¹ÃÁ¾¿À¾½¿ÈÇÈ¿¼ÃÀ¾½¿À¾¾Á¾¹···µ¶ÆÉÈÆ»»»»»»»»»»»»»»»»»»»»»»¼½½½½½½¼¼¼¼¼»»»¼»»»»¼¼¼¼¼¼¾½¼­~K,#&%"#)-00-%!$(+.02357:;9441K{¢²º¹§š››—”•Š„†}z}uskedffb^]WPKHHGD@;986»»»»º»»»»»ººººººº»»ºº»»»»¼½¾½¼º¼¼»º»¼¼»ºººº»¼»¸µº»¯„I' $/:?:1)" %+/0.)  #&(*,.146752.6?@2310+)-,''+'!&"#& #"$),*)+1.+*++)(7:::»»»º¹¹¹ºº¹¹¹º¹¸¸¹»¹¸¸º½½»»¾À¾»º»»¸¶¸»»ºº¹¸·¸¸·µ¶Å³ŠQ%#-7>>80)#"(,..* -  !"$'*.1332052* "$%!#)' $$(/-0-)((&!!%*)(+010,'(*+¹ºº¸µµµ····¹¹¸µµ¹»¹¶¶¹½½¶¶º½»µ´·¹µ³¶º¹¹º¸¸·´²±³¸½‰K"$)*)'%#!#(++' - - - - "&+/00.-($*%#'$(38044IDGP[cjs€‘› ¡£¬³··¸ÃÂõ´´»À¸¶´²¶±®ª¶¿¨O.   - -   -   - #'))&@qŒœ§¹¿ÁÁÁÂÂÁÁÁÂÃÃÄÅÅÅÄÄÄÄÆÇÈÈÉÊÊËËËËË˸··¸´°²¶ÃÁ¿¿½º¸¹¹½¾º¸½Âø¶¾¾¿¸º»»¼µ²±°¯ª«¯±®{(   - -  -   -   #''",Nwž¤´¼¿ÀÀÀÀÀÀÀÀÂÂÂÃÃÃÄÄÄÄÅÆÆÇÈÈÉÉÉÊÊÊÊ®¶¸³³¹»¹º´±³¸¸¶·½ÁÁ»¸º¿Á¾¼½¼ºµµ¸ºº¶´³²®©«±¨ŸV  - -  - - - - - - - -   -  #&"&4`œ£±¹½¿¾¾¾¿¿¿¿ÀÀÀÁÁÂÂÂÃÃÄÄÅÆÆÇÇÈÈÈÉÉɲµ³²±°´·¹·¶·º¼¼½¿ÃÁ¾»»¼»ºº»¼º·¶¸¸¸¶µµ´³±®ª—‡; -  -  - - - - - - -   !!(A‰¢­¶¹½½½½½½¾¾¾¿¿ÀÀÀÀÁÂÂÃÃÄÄÅÅÆÆÆÇÇÇǸ¸¸·¶¶¸ºº¹¸¹º¼¼¼¾À¿½»»»»ºº»»º¹¸··¶´´´´´±¬£’\( - - -  - -  -  /d“¤²³¹ºº»»¼¼¼½½¾¾¾¿ÀÀÀÀÂÂÃÃÃÄÄÄÅÅÅÅŸ¸····¸ºººººº»¼¼½½½½¼»»»ºººº¹¸¸¶¶´´³³´µ°±¬’5 - -  -  - -  - "C€›°°·¸¸¹¹ºº»¼¼¼½½¾¾À¾ÀÀÁÀÂÂÃÃÃÃÄÄÄÅ·····¸¸¹ºººº»»¼¼¼½½¼¼¼»ºººº¹¸¸·¶´´³³³´´¯²µ|  -   -  - (Z¡­´µ¶·¸¹¹ºº»»»½¼¿¼À½À¾ÀÀÁÁÁÁÂÂÂÃø¸¸¸¸¸¹¹ºººº»»»¼¼¼¼¼¼»ºººº¸¸¸·¶µ´³³³³µ³ª¥£D  - -   - -  ">h‹¯®±³···¸¸¹ºº»º½º¿º¿»À½À¿ÀÀÁÁÁÁÁÁ¸¸¸¸¹¹¹ºººº»»»»»»»¼»»ººº¹¹¸¸·¶¶´³³²³´µ³¨˜}  - -  !"! !!"!   ?_›Ÿ§­µ·¶··¸¹¹ººº¼º¿¹¿»¿¼¿¾¿¾¿ÀÀÀÀ¹¹¹¹¹º¹ºººº»»»»»»»»»ºººº¸¹¸··¶µ´³²±²µµ²¥K  -  -"$#""#%()$ !(-,("  -  - - +G‡œ¦ª³¶µ¶¶·¸¸¹¹ºº¼¹¾¹¿º¿»¾½½½¾¾¾¿¹¹º¹ººººººº»º¼º¼º»¼¹¼¹º¹¹·¸¸¶¶µ´²¯­±µ°®žp!   &'%#$&*/2*! !!"!!! ! !!""###$'/9>?<6-"  -  -   !5j•¨©³·´µµ·¸¸¹¹¹¹¹»¹½¸¾º½»¼¼¼½½½½¹º¹»º¹»º¼º»»¼º¼º¼ºº¼¸º¹¹¸¹···µµ³±ª©°´©±’;$ - !*($$&).49/$ "###"""""""""##$$%%&&'()*,19AGKMLI@4(       '?lœ«µºµ´µ·¹¹¸¸¸¹¹¹»¸½¹½º»»»»»»¼½ººººº»º»º»º»º¼¹¼º»»¹»¹º¹¹¸¸·¶µ´³¯¤£ž˜™‰L/) -  %+'%%(,16:0' #$%%%$$"#"""#$$%&'()*,,.04:@GMQSUURLC90& -  %%#Fzª¶¾¶¶¹»º¸·¸¸¹¹º¹»¸¼¹»ººº¹¹»¼¼ºº»º»º»ºº¼»»»º¼º»ºº»¸º¹¹¸¹··¶¶´³°¡’|vt[(,'   - -&+'%&).267/' #&'''&%$$####$%%'()*,.147CHMQVZ\^__^\WPJF?5)!   #+*0µ¶²ª¤ª¸½®¬²·¹¹¹¹¹¹¹¹¹º¼½½½¿¼¼¹¼¹¼»»»¹½º»»»»º»ºº»¹º¹¹¸¹··¶µ´´¶¨{ŽH'61$   &)'&)-1562%! $+/+))'&%$##$$')+-.049?DHMRX\`cddedca[UPLH>/& -    - )"tª§ ¢•yu…Ÿ´ºº¹¹¹¹¹¹¹¹¹¼¶®ª¾¼º»º»»»»»»º»»»ºº»ºº»¹º¹º¸¸¸··¶µ´´µ°~ªo NK0!    $(&'*/3995 "(34+))''%$##$&)-/138@HNQTX]bfijjjihge`[VSOE4)!    - - ' ZŽ‡bU3FFo™°»¼º¹¹¹¹¹¹¹¹¹·¥‹}³»»º¹½¹¼º»»»»»º¼ºººººº¹¹¹º¸¸¸·¶µ´´µ³‡+&fH) "&&(,16??=#-?:(()('%$##%(+048EGJ1! -GOL'((&').3:BJOTY]`cfiklqy~€‚ƒƒ‚€‚‚nkoaTI>70( - -  )+),8D8BDwž¦´»¼º¹¹¹¹¹¹º½À¿µWLÀ»¼¹¾µÁ´À¶¿ºº¾¶¾ºº»ºº¹º¹¹¸¹¸¸·¶´³¶³x1(920'#")08?CGG3! (@JNK-,+(&(,4BFC2('?[VQK8540,)+1:BIPV\_cgjnszƒ‰ŒŠˆ‹•lvoROOG=5.%  $&$',4(z·¸¸º»º¹¹¹¹¹¹º¼¿¿º‘i¸Âºº½·ÀµÂ´¿¹¼»º»»º»ºº»¸ºº¹¸¸¸¸¸···ÀF8H<2-*#&.6=@C=4;72017>FNUZ_dgkq{„‹’•—˜–“Š•œnvjMQTL@71) -  !2=¬Ã¶·ººº¹¹¹¸¹º»¼¾¿½³ºÄº¼º»º¼¸¾ººº¼º»º»ººº¹»º¹¹¹¹¸¹¹º¹¹®?MD543.#$-5<>?=E^isnc]WOKGEB>:5227ANX^bcjw„‘•™›ž˜‹‘˜speNTXNB:5-#  -  G<¿¶¶¶¹º¹¹¹·»¹º»¼¾¾½¾§»Â¾´À¸½¹¼¼¹¼¼º»»º»º»»º¹ºº¹¹¹¹º»¼º»˜.QC69;0"$,6<@BK]ptqida^YTPNLJHC=505AKPWbv†’—™œŸ¢£¤¢”Œ‘—šzibQWYO@<92( - -  +]?̼¸´¸¹¹¹¹º·»º»¼½½»¼µ¼Àº¾·¿¶¾¼¸½»º»»ººº»ºººººº¹¹¹º¼¼¼¶µ|>R79?@. ! "%-7@FP_ioomkigda^[ZXXWVWTOMRW^k|“œ ¡¡£¥§§¨¦¢˜Ž–—h`VYYL>=<6.%  -   8WBŹµ³¶¹¹¹¹·¼·»º»¼½»»º¼¾º½¸»¼ºº¼»º»»»ºººº»ºººº¹¹¹º»½»»¥Ÿ‹>K3>D=&&)(&%)0:DM[hmqrppomjhfdb```accejs}„‹”¢¦¦¨©ª«¬¬ª§‘•–‡naZ\WF:@>:3+" -  "3RD¯¹´³¶¸¹¹¹º·¼¸¼»¼¼»»»¼½¼¸½º»¼¹¼»»»¼»º¹ºº»»º»¹º¹¹º»½¹¸”Š„?D5>@1 #031/.07AKVclpstutsrpomljihjmrvy~…Œ‘•›¢§ª«¬®®¯°¯®«£—“––wd^^U>7DB=81)   -IA­¹²³¶¸¹¹¹¸º¸¼¹¼»»»»»¼¼»º½¹»»¼»»»»»½½º¹º»»»º»¹¹¹¹¼½¸´Ž‚|D=696#  -9:888;AKU^gmrvwxxwwutsrqpqtx}‚†Š•™£§«­¯°±±²³²²®§œ—˜˜‘~ia`S68JFB>80%  -  )?>µ¹±³¶¸¹¸¸¹¹»¸½º»»»»»»¼º¾·¾º»»¼»»º¹¹½¾º»¼»»»ºº¹¹º¼¼·¬‘†zE920) - - (7@@@CHMSZaglquy{|||zzyxxxxz}‚†Š‘˜¡¥¨«®°±³³´µµµ´±« ››š”‚nfaR3>PLHGA6+   (:@½º±³·¸¸¸¸¸¹º»¹»½»»»»»»¼¸¿¹»»¼¼»»º¹±¤»»¼¼¼¼ºº¹¹¹¹¼»·’‰w<6+*  - - !'4BHJLS\dinqsvx|~€€€~~~~ƒ†ŠŽ‘”™Ÿ¤§©«®°²³µ¶¶¶··¶³®¤žž—ˆukcQ6JYUMPN@1  -  %9B¿»³µ¸¸¸¸¸¸¹ºº»»¹»½º»»»º¾¸»¼»»¼¼»»»¸x­»½¾¼¼»º¹¹¸¹¼º²„‡„s/3&# - - - $)5CNSWZajrx{}~ƒ„………„„ƒ„„„†ˆŠ“–™ž£§©ª¬¯²´¶¶··¸¸¸¸¶°¨£¡ ›tiR9WebRVXK8# -  6@»»´¶¹¹¸¸·¹¹»»»»»¼¹¼»»»¼¸½»º»»¼¼¼¼ºº|£¸½¾¼¼»º¹¸··»¹¥hu~w'/! -   ).5GRZ^afmt{„†‡‡ˆˆŠ‰‰‰‰‰‰Š‹‹Ž“•˜š¡¥©ª«®±´¶¶·¸¹¹¹¹¹·³«¦¤£ž”ˆt[=`opXZ_UB( - 4=µ¾µ·¹¹¹¸¸¹¹¼»»»»º½ºº½º¹¾¹º¼»»»¼¼¼»¹¢¦´¼½¼»º¹¸·¶µº¸˜Vl~&) - -8>K[`dhkqy…ŠŽŽŽŽŽ‘’“•–˜šœž £§ª«¬¯²µ·¸¸º¸»¹º¹¸´®ª¨¦ –‡€mB_tz]\d[K,  - 2;´Áµ·¹¸¹¹ºº·¾»º»»»º»¼¹¼½¸»¼º»º»»»»¼¼¸³µº¼¼»º¹¸·µ´¹´™Vo{}(& -  1HT\hjhkrx…Š’”””••••••–•––––—˜™šœžŸ¡£¦¨«¬®±´¶¸¸º·½¸ºº¹¸µ±­«©£˜‘Œˆ€QX{…b[icV0  .2º½¶·¸¸»»µ«¯Á»º»»»»»º¼º¹º¼¹»»ºººººº»»¹¸¹»»ºº¹¸·µ³¸²Ÿsqov)% - Ngpopoqv}ƒ‰Ž“–˜™šš›››››œœœœ››››œžŸ¡¢¤¦¨ª¬­¯²µ¶¸º·½·¼¹º¹·µ²¯­¬¦œ•‘‹‡hGvŽuXjj_6 - - !6<¼½´¸¸·¼¸”iªÂ¹¹»»»»»»º»¹¼¹º»¹»ººººººº¹¹ºººº¹¹¸·µ´¸°¥”zqq*# -  &f~~wvx|‚‡Œ‘•™œžŸŸ  ¡¡¡¡¡¡  ŸžžžŸ¡¢£¥§¨ª¬­¯±³µ·¹¸¼·¼¹»¹¹·µ³°¯­©Ÿš–Š€O`ƒaipi>$ - %;D¶¼³¸··¼»RªÂ¹¹»¼»»º»»ºº¸ºº¹»¹ºº¹¹¹¹¹¹¹¹ºº¹¹¹¸¸¶´¸°¨žyqn," - 6s‡‚|~ƒ‡Œ’—›ž ¡¢££¤¥¥¥¥¥¥¥¤£¢   ¡¢£¥§¨ª«­®¯±´¶·¸¹¹»ººº¹¸¶µ³±¯®©£ž›•‹qV`€rlurH-   - - &;L¯½±¶¶·½·ˆV°Ã¸¹»»»º»¹»º¹ºº¹»¸º¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¶´º°¬wpp4$ -  Gz…ƒ†‹‘”˜œ ¢£¤¥¥¦§§¨¨§¦§§§¥£¢¡¡¢£¥§¨ª«¬­®°²´µ·¸¹ººººº¹·¶´²±¯­ª¥¡Ÿ›’‡qYutputQ8    - '?W¨¼³´µ·º¯“‡¼Ä¸¸»»º¹¹º¹º¹¸¹¹¸¹¹¹¹¹¹¸¹¸¹¹¹¹¹¹¹¸¹º¬³º³° |sr?+ - U†ˆ“•˜œ¡¤¥¥¥¥¥¥¦§©¨§¥¤¤¤¤£¡  ¡¤¦¨©ª¬­®¯°²´µ¶¸¹ºººº¹¸·µ´²°®¬©¥¢¢Ÿ™’‘‹zqikooTB'   -  ,C\—±µ³´··¯¯¾ÂÁ¸¹º»º¹¹¹¹º¸º·¹¸¸¹¹¸¸¸¸¸º¸¹¹¹¹¹¹·¹¶Œ±º¸®Ÿ‚xsK5 - - !^„”‡‹“–˜œ ¤¦¤¡ ¡¡¡¡¤§¨¥¡ žœ›œžŸ ¢¥©ª«¬­®¯°²³µ¶·¸¹¹¹¸··µ´²°®­¬©¦£¢¡˜•˜’‰kfifUG0   !,BZ…£µ³µ··³µ»½¼¸¹ºº¹¸··¹º¸·¹·¹¸¸¸¸¹·¹¸¸º¹¹¹º¹¹·¼¤P¤´»§—‰‚tZ=  -)e‹˜ˆ“–˜šž¢¤¢›•–˜ššš¡¨¨¥¡ž›™•‘”—˜šž¤¨ª«¬­®¯°±³´µ¶·¸¸·¶´²±¯®«ª««ª¥££¢Ÿš—™œœˆqpgWM:$  -  )?X}›´····µ·¹»º¹¹ºº¹µ³·¹º·¹·¹·¸¸¸¹¸¹¸¹¹¸¹¹º»ºº·Áo`¥¶¼¦ŽwoE& -  ;d™ˆ”—š ¡ž“‡„††…„††xpmiiimrzƒ‰ŒŽ“¦ª««­­®¯±²³´µ¶¶µ³±®¬«¨¤ ££¢£ž™——™œ–‡€ueWG1 - &=UsŽ©¸º¸¸¶·¸¹¹¹¹ºº¸³°¶¹º¸·¸·¸¸·¸¹·¹¸¸¹¹¹º»»ºµ¶µXŠ°¹½ª‹‹™wX3 -  ->cŽ˜‰‘–™œžž˜Œ~sqqojggcRJE@==AIVjx‚„‘ §©ª¬­®®¯°²²²²°­©¤ŸžŸ›™•’•šššœ›—Ž’•”Ž‰~n_P='  - "3Q`o¡µ»¹¸··¸¹¹¹º»»¶®¬µ¹»···¸·¸·¹µ»¶¹¹¹¹¹º¼¼¸´½‰g®²¸¾±‚–‰{lI% -  ?h–Œ‘–™››”…uib_\VMGDB>962126;CUgtvt„—¢¦©«¬­®®¯¯¯¯¬©¢š„{tnhaZW_mvy…}z~ƒˆ‹‹ŒƒufZJ6 $COEŸµ¼º¹¸¸¸¹¹º»¼»´¨©¶º»··¸·¸·¹´¼´º¸¸¹¹º»½¼·¿¶V™º¯¹¾¹›Œ|s^8  >n“•—•Œ~nc]ZYVPIB>:5/+)()-4>IXcidzŽ›¢¥©«¬¬­¬¬«ª¦¡™uneYOHBB=;>ACM\hov|€„ˆ†{maUB) "1M+¡¶¼¼»¹¹¹¹º»¼¼º°¢§¸»¼¸···¸¸¶»´»·¸¹¹º»¼½¼¹¿~Z»·°º½¾«‹Š~smQ0 9753211247?CPmy|xqmhR1 -  - )5#{µ¹º½½¼¼»»»»»¹·®¤©¸½¾¸¸¸¸¸¸¸¸¸¸¸¸¹¹º¹¹ÀÄŸL¡·¹³·¹»»¸´­Ÿ„‰“h@% -4~Ž…ŒŠŒ…yokjijklnqv}ƒ‚rdUF90-/4:AGR[nxˆ—Ÿ§¬®¬©§£œ‚vh[LB:3.,)%##$'+059<>@AA@DXjvwsqn]@ - -  -%-+´¾¾½¾¾¼¼»¼»º¹·´®§¬¹½¿¸¸¸¸¸¸¸¸¸·¸¸¹¹º¹¹ÁÆtwµµ·µ¸¹ºº¹¶°‹˜œtA/!  -0}‰ƒ‰‰‹~pkiklnmnpnikmoq|zqaJ1)*/6>ISjy‡— ©®°®«©¤Ž{naRE;510.,)),-15:>>>@ADECBM[ltttqcL    -"5#TÉÄÁ¿¿¾½¼¼»¹¸¶´°¬ª°º½¾¸¸¹¸¸¸¸¸¸¸¸¸¹¹º¸¸»¦i£´½¸·¹º»»¹·²ž““Ÿ¢‰N2,(  !r…†ˆ‰qhilopokffaUMBAPWTT[\M<2//3?H[|‡™¡¬±´±­¬¦‹tgYH=40/* &,--/48:;?ADFFELXepturdS& -  - &! ªÖÁ¾¿¾¾½¼»¹·´²¯­¬¬³º½¿¹¹¸¹·º·¸··¸¸¹¹º¹º¹·»¾¹¹º»»»º¹·©ž™¥©œšd21D9 - h†~„†~W]ovtpjbVM<8Sr‹œš‹oWONIB=73:BLt†œ¤®µ¸¶²°§ˆm]M=3*&%$15==832215;@DGIHMXcmsvsfV)   „Çƺ»½¾½¼»¹¶³°®­­®°¶¼½¾¸¹¹¸º¶¹·¸··¸¸¹»½¿²·¸»»¹º»»»»»º¹²¨Ÿ©­ w.-YZ5 Qw‚rG{‘rlbT<7GjŽ’‹ˆyfUQNMKJHE>;?Edƒ ¦±º½»¶µ¨™ƒdO>1')=MUboqneWM?69?DHJKOZakruujV-   - '#j”Á¼¹»½½½»º¸µ±¯®®°²µ¹¼½¾¹¹¹¹·¹·¸¶¶¶¶·¹»½ºŸ²¼·¹º»»»»»»»ºº¶®¦¬­¨˜w+'ZoP4pt{kQ6ƒ‘~mh_C5Pv€hB0(")AJHJKLKC?EW~£¨²½ÁÀ»»§’|X>1+*,;Yuƒxd__ailhcXG@BGJMNSZ`jsuxqV- -  f„Ÿ»Àº»¼¼¼»º¸·¶¶µ¶·¸¹¼½¾¾¹¹¹¸¹·¸¶¶¶µµ¶¹¹¹©‘¸·¶º»¼¼¼¼»»»º¹¶°©­¬©a-'Hi^7#+&NfmV`4†‹zmfU;HkdB.%%0P?" QUFMORTODLNv¦­µÀÅÃÀÀ§ŽpJ3.,1>Zpn^RH?<>IWcniQA=DLOQV\]jtuywX+  - Q¬±¸Å¿»º»¼»»º¹¹¹ºººº»¼½½½¾ºº¹¹¸¹··¶µ´³µ¹·®’•¸µ¸»¼½¼¼»»»»»º·¯§­°¡L4/5O[Q:,!97*8DVT6Œ„zmdWCNTC?N@&() nmGKSY\]RSTl§µ¾ÊÍËÇÀ®e>457K[e^NJL:##"!+?TZWI:GPTcnb_k|wxg- &6Ư¯³À¿½¼¼¼¼¼»»»»¼»¼¼½½½¾½¿¾º»º»¹¹¸·µ³±°¸º¤¥½¹´´·º¼¼»¸····¶µ²ª¬±žzb]gqwngc`Qyƒ…‹;…bg˜Š…ƒ€}xsqrv~‡†pdfmxˆŒ‡€‚…Œ……:945GUUZ[TNRA7Dk{bSU`s€2'!";kN25!y“«¶ÃÉÌÎÉ¿¹«˜~;Usœ••—›š–Œ‹ˆ…ƒ…”–—›¡¢¢ž›š–}ƒ]q…‚o;!7=FNN@)Votd\YVZhpt{‡Š‘“•–—˜˜šš›œžžŸŸžž ©­««°¶¾ÄÇÉÊÉÆ¿¹²ª¢Ÿ £Ÿ€Œ‘••“‘‘’’“”•”‘ŽŒ‹Šˆ}~~|zvspljfo|…‹…‘ŽN”˜°¼¾½¼»»»º¼¹»ºººº¹º¹¹¹¸¸··¹´’}¿½¾½½¼º¸¶µ´µ¶¶·····¸¸·º¸º¹¹ºººº»¼º¸·¸ºº¹±º’mQEay‚€pkmqrw~„ˆ‹Ž“•–—˜™šœžŸ ¡¡¡¢¡ Ÿ£«¬¨©¯µº¿ÂÅÆÆþ¸±¨Ÿš™Ÿ •Ž•˜—”’‘‘‘’’““‘ŽŒŒŠ‡~}|zwtqnkjbv…Œ’ˆ“‹V -0„“¡°»½½¼»»º¼¹¼¹»º»ºº¹¹º¹¹¸··¹»®¤½¿¾¾½»º·µ´µ¶·¸·······¸·¹¹¹º¹¹ºº»¾½¸·º½¼¹´³¢‹]17D[ntzutprz†Š’•–—™š›žŸ ¢¢¤¤££¡Ÿ¡¥¤œœ©°¶º»¼¾À¾º´¬¡—”š•››š–”“’’’’’’ŽŒ‹‰†~|{yuqnljj]{ˆŽ’‰–% n¢š¡°º½½¼»»¼¹½¹¼¸¼¹»¹º¹¹¹¹¸¸¸¹¹±§¿¾¿¾¾½¿¾º¶µ·¸¸¸·¶¶¶¶···¸¹ºººº¹¹¸»Â¹°·À¿»´°§}c)+  9Myyqqv~„ˆ‹’”–˜š›ž ¡¢¤¥¥¦¦¦¢œ›ˆ˜£ª°°°³µ´°¬¢•„y|…‹Œ‘Ÿžœ™—•”““’’‘ŽŒŠˆ„|ywsolkieWr{{Œƒ] `˜°©«³¹¼¼¼»½¹¾¹½¸¾¸¼¸¼¸»¸º¸¹¸¸¸¸´¯¿¿¿¿¾¾À¶±¬¬²¶¶¶µµµ´´µ¶·¸¹¹ººº¹¹¶­«¬ÈËÁ½·±·«|[;4 &itst{‚†Š‘”–˜šœž ¡£¤¥¦§§¨¨¢—Ž…~m^j“¤¥¤§¨¦¢œŽy`V`nwy¡ ›™—–•““’‘ŽŒ‰‡ƒ~{xupljjg^T`pzŒS(<™­³¬­³¹»¼¼¼¹¾¸½º¼¸½¸¼¶½¶½µ»¸¸¸¸·³°À¿À¿¾»µ”‡€ˆ™¦ª®±²²²²´µ·¸¹¹ººººº¹´•s‡©´¼²°·ª„^B;(@vqtry„ˆŒ“–˜›ž ¢¤¥¦§¨¨©© ”‰wkXIM[r’’•”ŽŒ…lN:7CUcssŽŸ Ÿ›™—–•“’‘‹‰†‚~zvrmigjg__q|uml2"g\£©®¨­´¹»¼¼»¾¸¾ºº»»¹¼¸¾´À³¾µº¸¸¸¶±®ÀÁÁÁ½¹¯‚fal‚–¡©­¯°°±²´¶·¹ºº»»»º¹¶²-G+btsqv}‚†‹“–™›Ÿ¡£¤¦§¨ªªª©Ÿ‘‡fO8.+/GeqtxupqhF+#%0DWmqŒ¡ ž›™—•”’‘‹ˆ…‚}ytpkeflncfliQ8!,V™›q ¤ª¨®´¹»¼¼¼¹¾º»¼¹¼º¹¼¶À²Á²½·¸¸¸¶¯ªÁÁÁÁ½»·ŽNQaw‹œ¦¬®®®¯°²´·¹º»¼¼º»¹½»¦FCTW^ž¬¹’`KO6O$Fupty„‰Ž“—™œž ¢£¥¦¨©ª««© ’ŽiI:2-)1ESX\ZYXM0"!%.ATkuŽœ¢¢ žœ™˜•”’‘ŒŠ‡„€|wrmhcgrpOG>&3†ªÀ˜‡§¦¨ª°µ¹»»¼»½»»¼º»»»º¹½´À²¿¶º¸¸·µ­§ÁÁ½¼¿ž@OewŠœ¦¬®®®®¯±´¶¹º»¼¼º»´®½²{FHKBZŠµŸXfq&2(€ursw}‚‡’–šœž ¢¤¦§©ª««¬«¤•–wSA9632;CGGGGE>1.129I[o|’££¡Ÿœ›˜–”’ŽŒ‰†ƒztojfckud'"_¡¦–ž«¨©¬±¶¹»»¼»¼»¼»º½¸¼º»¸½´¿´»¸¸¸·µ¬¥ÁÂÂý»À HZr€‘¢¨«­­­­®±´¶¸º»¼½º¼´¾³–bZJ7&8Žmb…(#zuwvw{…Œ‘–šœŸ ¢¤¥§©ª«­®­¨žŒlWKJHA===;;;;;EKPU\hw†£¦¤¡žš˜•”‘Š†ƒ{uokhhgr|( -r£ª¯­­ª¨ª­±¶º»»¼º¼½·Â³Ä²Á¸ººº¹º¸º¸¸¸·´¬¤ÂÂÃŽ¿Ä‘9;XnŠ¡£¨­®­­®±³¶¸¹º»»º¹¹§µ·¯•z](!*;[k‚(+ Wt|}yy|ˆŽ”˜œž ¡£¥§©ª¬­®¯¯ª¦¡–ˆ{qi^RE>988x}~{y{†’—›Ÿ¡£¤¦¨ª«¬­®®¬©¥ž”‰vk]MC=:Sotx€‘N AŽ€‰~~ƒ†Š“•—˜˜–”””•————•”‘‘‘“”—š›š•Œ‰ˆ†††…„‚ƒƒƒƒ…‡‰Š‰‡„‚{wsoljhkpurk '@3;o©v¦®«³­§¬´¹¹º¹¹ººº¹ººº»¼¼¼ºººººººº¹¸·µ°¦ ÃÃÄĺ½¾oKL^\cimw”£¥¦©®³¶···º¶º¹ººº··©y¢‰tQFD:EV]_YO #€‹~„†‰‹Ž‘‘‰ƒ€€ƒ‡‡‡ˆˆˆˆ‡†††ˆ˜›š•“Œ…|xwx{{|zvuvx~ƒ„‚€~{xtqnkiijpssj 3T/@“¸w°¯´±²¶¹¹¹¹¹¹¸¸¸¹¹¹¸¹¼¼»··¸¸¹¹ººº¹·µ°¦ ÃÃÄĹ¼¾|QObcgjkw¢¤¥¨®³¶·¸¸·»¸¹ººº··®u¥šmUQP9BJKF1i{ˆ}~€„†ˆ‰ŠŠ‡‚ynggkswwvtsqpqstu~ˆŠ„zulfeedeee_]YTTV^jw|}|zxurolkiijnprT .WN€¹°{¢³²µ´µ···¸·¸··¶µ¸½½µ³³µ¸¸º¼¹··¹»»º¸¶°§¡ÂÃÄĹ¹¹Š`Xfkkkk{¢£¤§­´··¸¸¹¸¹¹¹ºº·¶µ¥«‚moG6:H?-  Px„|}~}}~€‚ƒƒ‚yqdULGGNTX[]_`acdbahqqka\TQRQRQOJA?=;>BIVhrvwvtrpmkjiiilnm3 H’º½´uª³´¶µµµ¶····¶²¬ª®²¯¾Â¾½¾º¸¼¾¹¶·º¼º¹¶±¨¢ÃÃÄĺ¹µjcnqmkiz‘££¢¦­µ¸¸¸¸¹¸¸¹¹ºº·¶·ž§‰~t409E0  8wzy||||}}~~}ysj^PC<536;BHMOQRRNHDHMMLIMKJHEC@;4-,.169=IZgnqrqomkjihhgknk  )»´¼¹z©´¶¶µµ¶¶···µ´­¤¤§—tfmy‹Ÿ¦§¯»º·¶¼Á¼º·±©¢ÂÃÄû½µ‡jivqigfrŽ¢£¡£­¶¸¹¹¸¸¸¸¸¹º¹··µ‘”“|]13E:   -!tyyuzzzyzzzywrld\TOOMJOXadaYROOOKBA?;==?EKNOSUTWTYbkpja[\agkmmlkjihhhejkc£³Äµ¥±··µµ¶···¸·´°®¬¦ƒ[>>CIMF@P€•–£Á½¼¹±©¢ÂÃľÁ¹xdl|necdmˆ¡£ ¡­¸º¹¹¹¸¹¸¸¹¹»¹¹°‹†~u€R?GO* guwpvxwwvvutrpmlkkpy~~}|ˆˆƒ}|}zscZPEIP_nyzy}}xrnt~††}tnhefhjjjiihghfbheI  -Fª£—©­µ¸µµ¶··¸¸¸¸¸¸¥‘kM44:?DDGUm‡mwÿ¿º±©¡ÂÃÄ¿¿½_go}kaadm„Ÿ¥žŸ­¹»¹¹¹¹¹¹¹¹»¼¹¸¨ƒ|srxWYh> - Bstkrvutsrrqpppty†Ž‘’‘ŒŠ’—™Ÿ§¯µ¦™• ˜‘“™œœ—‘Œ…~}‚Š‰„xohffhhhhgggge_hj  - -Lw~Šž¥¬±°³·¹¸¶¶·¸·­…t`I2-/13=RkxaJÇÁ¿º°§¡ÂÂÄ¿¼¸Xipxg_afq‡¡¦œœ¬º»º¹¹º¹¹¸¹¼¼¹µ£ˆ~tqrcfg#  ,eniossrqponmnovˆ”——“Ž‹‘–š¡«¸Á»°±´®£Ÿ Ÿ™‘ˆ‚~|}€…‡‡†|sifffgggffffd^cZ 5TWdz‡’˜ž¯»¾»¶¸»º± {oh\T;)'-?j’•”ŠpWÁþ¹®¦ ÁÂļ»°adkmc]bexŽ£¥™š¬º¼¸··¸¸¸·º¼·«Ÿ“†|rlkhgV  -Ndfmqqpommlkknv‰Ž‘“’‹ˆ†…‡Š•˜œ™Ÿ¡žš››–Œƒ|yyz|}‚‚€|tkfeeefeeeefc^[?*C@BS`kmk{–­´¬¬¸Â¾«Š€|sYA6CHIDBIT[[_g~˜±¸½¹·¹¾¿»¶µµ¶º¼¼½¿¾¾º´­§¤ÀÀdz¹¿ pYMUWcs˜š—™¦´¬‘unjimqpnkf_^ab^Z^e^N  - - - - 8L]flkkjjhhhlt}ƒ…„‚xqkiloswyyyvw{~{||{xqib^]_aejnqsuuqkfeeedbaa_YO6  CGGDCGMNJKOXd®¦ ¢¦²ÀÁ»¼ÀÀ¿»¹¹¸¹¸³­§¤ÀÀÅ™¯ÃªoZMZgzƒ†‹‘•—š¡¡Žqaeiggffffedca]XV\f^= - - - ->Q`hhiiihhils|ƒ„‚wlbYSRV]diihkruspic]UMHINU\bhmprssqkheeedb_`[QC# ;G=>BEEDCEJMLNUZXaoyqmq|¤¨£¤®¸¾½¾¿¾¾½¶®§£ÀÀÀ€£Å¶oWQfz…ƒ~‚ˆŽ“–‘i\`fgda_`bba_\YVV]g^- - - - -  -'2BVeefhhiiims{‚ƒƒ{qg]SJC??CCA@E@>;:9659BMW]chmprsssqmigffda^`WF1  9J@?BDEEDDEHJLQVUUY_afhmpnp{‹–Ÿ«±·»¹µ·±¬¥¢ÀÁºŠ«Á³f^`q|~xsppu|‚ƒ}rc\`egc_]\]]\ZXVVW[`O - - - -  %*/A\ddgiiiknt{‚„……zrk`XQKFB=534466=AEKQXafjmptwxwvtrnjhggea^[N1  2HB@BDDEEDEEGILPQNNSY[VNPX[]eqv€•”‹†~„‰£°¼®µ¼¦johpvsnifegjmlid_\_egea][ZYXWVVVWVT? - - -   #("&=Wchiijlpv|‚„‡‰‰‡ƒ}sjaYQLMNQSU\^]_adfimoqtx|~~|zwspljige_ZN1  -/GDABCDDDDEEEFHJLLLLMNMLOSX[_ehjkje`^_`elrz†›­»¸œtykmolgda_]]]]]\ZXY_ee`\YWWVUTUVVNI5 - - - -  "*9Tfkjjmqx}ƒ…‰ŒŽŽŽŒˆƒ|zutx{„ƒ†…„†‡…‚€€€„……ƒ€}zurmkjhcXM5  .FEBBCDDDDDEEEFGHIIHHHILQVZ\]\WSQRUZ]^`dknbgq†˜¡Ž{{mklifca^ZWUTUURPPV_c_[WVUTTTUVUJE3 -     - .# 7Wgkjmry‚„‡ŠŽ‘“•––•“”””“’—š“”——•’ŽŒŒŒŠ‡ƒ{wsnkjf^L6 - ,EFCBCDDDDDDDEEEGGHHIKNQVXZZYXWVUUWWXY\bgkaegjlx~|ynlkigda^ZURPONLJJOX]]XUTSRSTVWVMF3 -  - /& ;\ijlrz€„†‰Œ“—šŸžœ››š˜˜›š•’“••••”””“’‘Š…|xsnjg_Q7  - - 'AFDCDDDCDDCEEEFGGIJLORTVVUTSSRRQQRSTW[_dgmmljiovxvolkigea]YUQNLKHFFKSXYVTRQQRTWXYSK5 -   /) F`hlrz…ˆŠ”˜ ¢¢¡ŸŸžžœš—•”“”””•–——–•”’‹†|vqkg_O8  - -!=FFEDDDDDCECEEFGHILNQRSSRRPPPPPPPQSUXZ]`arqpooqttromkjhe`\YTQMKJHFFKQUWURQOOPTWZ[YP8 -  /+ 'H^ipx…‰ŒŽ“—œŸ¢¢¡Ÿž›™—–””“““””•–———–”’‹…yrle^P8  - 9FHGFEDDCECEDFFGIJLNPQQPPPPOOPPPQRTVXY[]^rqponopppnlljgc_[WTPMKIHFHMRUUTQOMLOTX[]^T=  -// - &F]hpx€‡ŒŽ’•™œœ™—•”“’‘‘‘‘‘‘’’““””•”’‘Žˆ‚{tld\P: - 5FIJHEDDDCECFEGGIJLNOOPPPPOPPPQQRTUVXY[\]pponmmmmmlkjhe`\YVSPNLJHHKPTUUSPNKJLSY]]`UD .3! $G`inv€ˆŽ‘’”–—–”‘ŽŽŽ‘ŽŠ„{tld\O9  3FJLIFEDCDCEDFFHHJLMNNOOOOPPPQRRSTUXYZ\\]nmmlkkjjjihgea\YWUSQOLKJKMRUVUSPLIGIRY]\_SG +7( &B^djr}‡ŒŽŽŒŒŒ‹Š‰ˆˆ‰Š‹Œ‹Š‰ŠŠ‹‹‹‰„|rjb\Q8 4EIMJFEDDCDDEEGGIJKMMNNPOPPPQQRSTUVXY[\]]kkkjiihggfec`]YWVUSRPNMLMPSUWVTPKGEFPY][\PH '80  IYago{…ŠŠŠŠ‹ŠŠŠ‰ˆ‡…„ƒ‚‚ƒ„……„ƒƒ„„…†…‚{qg^VP< -4EHMJGEDCDDEEFFHHJKLNLONPOPQQRRTTVVXZ[]]^iiihggfeecb`][YWVUTSPONNNQTVWVTPKFCCMX]Z[OJ(  !64"  *BT_fox€ƒ‚ƒƒ„„„ƒƒ}||{z{{{{|}~~{vndYPI9 -5FHLJFECDDDEFFGGIIJMLOMPNPPRRRTTUVWYZ\]^^gffffeedcb`_][YWWUTSQPPPPRTUVWUQLGBAKV\ZYOK7 16( ";MX`iptvvvxxy{{zywvtrrrqrswxxxvrld\SI=2 7GGJIFDCCCEEEGGHHJKJNLPNQPRQRSTTUVXYZ\]^^eeeeeddcba`^][YXWUUTRRPQQRSUVVURMHCAJTZYWPLC$  -+5-  1AOZbfhijjklnqrrokfcdfikmmmmmjd[SKB6':FEHGECCCDDDFEGGIJJMKPLQNRQRRSSUUVWYZ\]^^ccccccbcaa_^][ZYWWUTTRSPSRSTUUTRNJECIRWXVQLF/ &30 - -'7FNSX[\\]^_``_]YTQPTY]]ZYYYVQJA7+=DCEECCCCDEFEGGHIILKOLQNROSQSSTTUVWXY[\]^bbbbcac_b_`]^[[YYWVUTTQTPSSSUTTSOKGDHOUVURMF6 - !03!  -6%.4$  !)/24555565445530/023431/-(   7A??@AABCCEDGEHHIJIMJOLQNSOUQTSTTUUVVWXYYY____`^a\b[a[`Z]Y[WXVTVQVQTTRURSRPNKIILOQRRPLD1  )4(  !$%&&%%$%&&%$##$$$" 0?@==?@ABCEDGEHGHIILJOKQNROUOURTTUUUUVVWWWW]^]^]_\a[bZ`Z_Z[YYXWWTWQURSTQTRRQNLKJLNPQQPLF9*  "1+  -  -)9?=;<=?ABCDFEHGHIILIOJPMQNTOUQTSTTTUUUUVVVV\\][^[_[`Z`[_[\[YZXXUWRWRTTRUQSRPPNLLMNPPQPMH?5# *+ - -  -#3;;9:;=?ABCEEGGHIIKIMJQKRNSOUPTRTTTUTTVUUUUU[\Y]Y]Y_Z_[^[]\Z\YYWXTYQUSSTQSRQQOONNNOOPQPNJD=1 -!(" - - - - - -  -$278778:=?ACDEGGIIIKIMJOJRMSNUOTRTTTTUTVSUUUUUZX\W]W]Y^[][][[\Y[XYWYRYRUTRTRQTOROPNPNPPQQPMHD=* #$ )4754568:=?ACEFGHIIKIMJNKQLSMUOURTTSTTUURWRWRVTX[W\U]V]Y[[[][\[[Y[XYUYRWSUTTQTPTORNRNRORRRRPMIG;# " -78412358:=@BDEGHIJLINJNKPLRMSOUQTSSTTTTTWRXPYQVYVZU]S]V\ZZ][[[[[[ZZXYUZRXRURURSQSPSNTNSPRRSRPMLF5  - ".673//0358:>ACEGHIJKKMJOKPLRMROSQTRTTTTTUTTURYOWSVYU[Q^S]W[[Y\[[[Z[ZYYXYUYSWSUSSTRRRPTNUNTRSTTSPMJB3   -'1452/-.0368BEHJLMMNNPNONPNSOSQSRTSTTTSUSSUSTTTRTSWTXR]O\S\U\X[Z[[[Z[[ZYZXWYVWWSYQXRVTSUPXOURTTTUSOKH?,    -"(,,,***+./259=@DFILMNONPNPOPOROSPSRSSUSUTURTTSSTRTRRTTWSYO]Q[S]U]X\Z[[[[[Z[XZYWYWUYSZRXTUUSWPWPTRRSTTQNLH;+   - - $%'))))*+,.147;>BEHKLNOOQNQPPPQPSPSRSSURWRUSTTRSSRSQTRRVSWR[O\Q]Q^T]W[YZZ[Z[W[XXYXXXUYSZSXUUWRYQVRSRRRRRONLE8*  -   "$%%&'(()*,-036:=ACFIKMNOPORPPQPQRPTRTSURWQVRTSSSSQRRRQRQTWSXP\N^O`P_S]W[YZYZXZXYYWYWYYVZUZUYWUYRWRSRQPQQQPNMIA6)    "$$$$%&'')+-/269<@BEGIJMNOOQNQPPQRPTRTSURWQWRURSRRRQRPRQQRUTVRYN]M_N_Q]T[WYXYXYWXWWYWYWYYWZVYWVYSYSUSRPOOPPPONLF?7. -   "####$$%'(*-/1598+   -  !"######%'),/269=?ACDEFGIJLLMNNPOQPSQVRUTUTVSUSSRRRRORQORPOQTUURWQYQZRZTYWXWXWVWUVUUUVVXWZXZX[W\U]SYUUTRPNNNNOPPPPNLID>3"  -  !!"""""##%(+/26:@ABCDDEEGGHHIJKLMNOPQSTUUVUVUTSTRSQRPQOPOPNQO \ No newline at end of file diff --git a/deps/CImg/examples/img/sh1r.pgm b/deps/CImg/examples/img/sh1r.pgm deleted file mode 100644 index 532974c..0000000 --- a/deps/CImg/examples/img/sh1r.pgm +++ /dev/null @@ -1,243 +0,0 @@ -P5 -# CREATOR: CImg : Original size=180x180x1x1 -180 180 -255 -««¬«««¬¬««¬¬¬­¬¬­®­­®¯­°®¯¯¯¯¯±¬´­²°¯±°±°°¯¯°­®­¯­­¬«¬««««««ªª©©©©ª¬­¬ª¦ž–‰ˆ‰ˆ‡‹–¢©¬«©¨§§§§¨¨¨©©¨©¨¨¨§¨§¨§¨§¨¨©©©ªªªªªª««¬¬­­®®®®®¯¯¯¯°°°±±±±±±±±°°°°¯¯¯¯¯¯¯¯®®®®®¯¯°±±²²³³´´´³³³³³«¬«ª«©«¬«¬ª­­«­¬­¬®®­¬²¬°°®±°°­¶ª´¯¯³¯±¯°®°¯®°¬¯­­¬¬¬¬«««««ªªª¨¦¦¥¦¨©ª¨¥¡¢¥£Ÿ››™”“˜¡¨ª¨¦¦¦¦§¨¨¨©©©©¨¨§§§§§§§¨¨¨©©ªªªªªªªª«¬¬­­®®®®¯¯¯¯¯°°±±±±±±±±±°°°°¯¯¯¯¯¯¯¯¯®®®®¯¯±±²²³³³´´³³³³³³¬«ª«®¬©«««­«¬¬¬­­­®¬­±ª²®­±¬±°±­²±®´®²¯±¯±®°¯­±«¯­¬¬¬««««««ªª¨¦¥¤¥§ª­®­¬ª¡š™ž¤©©¥ž—“˜¢¥¦¦¦¦§§¨¨©©©¨¨§§§§§§§§§¨¨©©ªªªªªªªªª¬¬­®®®®¯¯¯¯¯¯°°±±±±²²±±±°°°°¯¯¯¯¯¯¯®®®®®¯¯°±²²²²³³³³´´³³²²«ª«°¤°«ª«««­«¬¬­­­­­¯¬²«¯°­²­¯°²°¯³®³¯±°°¯°¯¯°­¯¬­¬¬«¬«««««©¨¦¤¤£¥§¦ •‹‚}~‚‚‚†•Ÿ£›ˆ™¡¦§§¨¨¨©©©§¦¦¦§§§§§§§§§¨¨©ªªªªª©©©ª«¬­­®¯¯¯¯¯¯°°°±±²²²²²²±±±°¯¯¯¯¯¯¯¯®®®¯¯¯°±²³´´³³²²²²²²±±±±ªª®¤¶£°«««¬¬¬¬¬¬­¬¯¬®¯¬±­®¯®±¯¯°¯²¯²¯±°°°°°¯¯®¯­­­¬¬««ªªª«ª¨¤ ¡¡žžœ’k]WXY^elqqms‹“ƒ„‹“ §ª«««ª¨¥£££¤¦¦§§¦¦¦¦§§¨©ª««ªª©¨©©«¬­®¯¯¯¯¯°°°±±²³³´³³²²²²±±¯¯¯¯®®®¬¬­®®®®¯±²´´µµ´´´¶¶¶´²²³´¬ª©²¡³§¬¬«¬«¬¬¬¬¬®«¯¬®¯­¯®¯¯°°°°°°±±±±±°°°°¯¯¯®­­¬¬¬«ªªªª¬¬¨¤¡ —ypk`QE?@FPY_bimkd`i~……‘Ÿ¨««©¤Ÿ››Ÿ¢¥§¨¨¨§¥¤¤¥¥¥¥¦§¨ª¬­­«ª««®¯°°°°°±±²²²²³²³³³²³³²²±±¯¯¯®®®¬¬®¯®¬­­¯°°°°¯¯¯°±²±¯¯¯¯°¨®ª¨°©«¬«««¬«¬¬¬­¬­­®­®®®®¯¯¯°°°°°±±±±±±°°°°¯¯®®­­¬««ªª©©©¦ž–‹y`80-,+))+19DQ`moe_ZYant||w€Ž–››•“Ÿ¤§¨©©¨¤¡Ÿœœž¤¨ª©¥¤¤§ª­°±±°¯¯¯¯¯°±±°¯¯±³³´´µ´²°°°°±±¯¯²³²´¶¶µ³±°°·¸···´²±·¸µ²­¨­«ªª¬««««¬¬¬¬¬­­­­®®®®®¯¯¯¯¯°°°°±±±±±±±°°°°¯®®­¬««ª©©¨§¢•ƒoU5!#%)+*%##'-17I_e_Z[XWYi{{z„”“•“†…•œ¥¥£ ¢Ÿ˜“‘“—œ˜””—™–“’“˜Ÿ¥ª®¯©§¨ª¬®°±±¯­¬­¯±²³´µ³±¯¯¯®±±¯¯³³®¨§¦£ ›˜•Ž‹‰…‚|vog`XR«ª¬ª«««««««««¬¬¬­­­­­­®®®®®¯¯¯¯¯°°±±±±±±±±°°°¯¯®­­«««©©¨¥pT>.%%)-/1/,++****)-8EHJKIFDHWpzpx~ˆ€ogl}–“‹‰‡{z€ˆ‘’‹„ƒuTBDLUdu‰œ¤¤§¨®´³¯®´¸­«©¦¡š‘‹‰„}ume\VNKE?<;50489537<>;99;?AA@@ABCª­©«««««««««««¬­­­­­­­®®®®®®®¯¯¯°±±±²²²²±±°°°°®­¬«««©¤§¨†aC61-(%##$%&'*,-./.-+-269:999;?F[d\G@JOGRcg^]o„‹‹Š…weTE?GVZWROPS[gkkjaZUQKB729840-)'(010///-,1320031/16875533??<:9840./01ªªª«ª««««ªªª««¬­­­®®®®®®®®®®®­®®¯¯°°°°°®¬«¬®°²±¯®®¬«§¢ ŽN:31.'!"%(+./01111001210/../024.-,(#!%*)$)=S[\Z^[N@552,1>@<<=?;7:>>?B;1-0430*'%$%).1/.-,,++("&'+165/3;AJQSRZ^eo{…Œ‘¢¥¦§ªª«ªª««««ªªªªª«¬­®®­­¬¬­­­­®®®®±³µ³°­«ª­±³´µµ³°­¬¯©¥¨§“_410,& #'*-/11221110/.-+*(&$#"!!! !(./)),,.,+-./113577646:::93+%$%'((*,.15:?IOW`jt}ƒŽ—Ÿ£©¯³º»¹¸½ÅÇÈÓÓÑÍËÇÄÄÊÌÍͪªªªª«««««ª©©ªªª«««ª©¨©ª­®¯±°­¬«ªªª«¬­¯¯ª¨©«¬«©©³´¥š‡^,1*""$'*,/1233211/.-+('%$"!!&+,.,++-0234566569>BCEK[s‹™œ¦­³·¶³±²¸º¹¶³±²²­¯³³´·»½¿¾»¸¼À¾¹¹»¿ÂÅÇÈÇÆÇǪªªªªªª«ª©¨§§¨§¦¦§ª¬¯±±¯©¦¨«¬ª¨ª¬¬«¬¯°¯­­¬¬®¯¯­ª¡™‘Y8$"!$&)+./1233210.-+)&$"  - - "%&''(*+,../0112259=>>?Ke‡ ¨¤ §²··¶´²±²´³²´·º»½½¼»¼½º¶¶º¾ÁÅÅÂÁÁÂÂÂÂÃÄÄÄÅŪª©©ª©©ª¨¦¤¥¦¨§¦¥¦©«¬«ª«³²±²°¬««¡—†xl_JA:3,% &62 #&'(*+,./000/.-*(%#  !"$%')*++,--./02454202>X} ±¥§¯³¶¶¹¼¾¾»¶±®°²¶¸¸··¸¸¹º½¿À¿¾½¾¿ÁÂÂÂÃÄÅÅÅÆƪ©¨©©¨©¬¨¥¥§ª¬®¬§¥¢œ“‰t\PE<2("" #%%)&)$$&'''&''()****(&#  "$%'()**+-./134667754CeŒ«³¶¶´´µ·¶¶µµ´µ¶¸¹¹¹¹¹º¹¹¹º¼½¿ÀÁÂÃÃÃÃÃÃÃÄÄÅÆƪ©§ªª¥—vmbP?3/+!!%*")18AIQQG.!#&'&$"!!!!"""#" !"$%&()*+-.02345652/1;Lv™¯³µ´¶···¶µµµµ¶·¸¸¹¹¹ººº»¼½¾ÀÁÂÂÃÂÂÃÃÃÄÄÅÅÆ«§§¨ž{D*)%#%#!#"!"%,3;DO]hux{ˆ‘”—t:!!%&#  "$%&(*,-/01234320/.0Fw”»¹··¸···¶¶¶¶··¸¸¹¹ººº»¼½¾¾ÀÁÁÁÂÂÂÃÃÃÄÄÅÅÅ«§¦©¢r*!#3@GPZels|„Œ”›¢¦©©§§©ªª¦¥¦ª¬«¨¤["#" "$&(*,-./0222210,&(Gw«½¸·¸¸···¶¶¶···¸¹¹ºº»¼¼½¾¾ÀÀÁÁÁÂÂÃÃÄÄÄÄÄÅ«¦¥¨¡h D\r€†«¯¨¦ª§žœŸ™™Ÿ¡£¥¨«®°¯«¨¨©­¬©¨©ª§¡Š3"  #%(*+-..//00010-$+GŒª´´···········¸¹¹ºº»¼¼½¾¿¿ÀÀÁÁÂÂÃÃÄÄÄÅÅÅ«¦¤¥š[*‰ ¬«£ž £¡›¤¦£¥©¨¨©©¦¥¥¦§ª««©¨©ªªªª©©ª¤˜q'"%()+,--...//11++_•¨²····¶¶¶¶¶···¸¸¹ºº»¼½½¾¿¿ÀÀÁÁÂÂÃÃÄÄÄÅÅ«¦¥¦šX"DŸ¦§©«¬ª«°°±±¯¬©¨££¥¦§¨©ª¬®­¬ª¨¨§§¦§§©¦•{I "%()*+,,,,--.00 ,>…ž±¸¸··¶¶¶¶¶¶¶··¸¸¹º»»½¾¾¿¿ÀÀÁÁÁÂÂÂÃÄÄÄĪ§¥¥–KF¡£¤¥¨©©©©ªªªª©©©©©ª©¨§§§¨©ª«««ª©¨§¥¦§™tG##%'()*++++++-.'*;_—§¸º··¶µµµµµµ¶¶·¸¸¹º»¼½½¾¿¿¿ÀÀÁÁÁÂÂÃÃÃÄ«¨¢¤—HQ£¨©©©©©©©©©ªªªª©©©©©©¨¨¨©©©ªª©¨§§£Ÿ¡ž~D #%&'()))***+,*+/Hy—°¹·¶µ´´´´´´´µµ¶·¸¸º»¼¼¼½½½¾¾¾¿ÀÀÀÁÁ¬© ¤M[TVl¦¥¥¢Ž -#—£¥¨¦§¨¨ªªªª««««ªªª©ª©ª©ª¨¨§œ•\ - - - - """     !"#" $Ap ¥¦¥¥¦¦§§¨¨©©ªª¬ªªO@TXNWg¦¥¤©† •¤§©¥¥§¨©©ªªªª««ªª©©©¨¨¨¨§ª§„r'  - - -  !$'('$  -  ! )@¢Ÿ§§¥¥¥¦¦§¨¨¨©©©­¨©kCGWSJT_§¤¢¦„ •¦©©¤¥¦§¨©©ªª©ª©ª©©¨§¦¥¥¦§ª§ŒV -  - - - - - !%),-,("  - #-h™¡©©¥¤¥¥¦§§¨¨©¨¨²«šICMUOGM\¨¤Ÿ¢‚ $˜§¨§£¤¥§¨¨©©©«©ª©©©¨¦£¡¢£¦¦œ†1  - - -  !$)-021-% - - "F|š¤©¤£¤¥¦¦§¨¨¨¨©²§p8FSRMEG^©¦žŸ+¦¦¥¢£¤¦§¨©©¨ªª©ª©©§¥¡œ››”f  - - - -  #(-15761( - - -\Žš¥¢¢£¤¥¦§¨©©¨ªª¥B7@VQMECd«¨Ÿž€-ž¦¦¥¡¢¤¦§¨¨¨©§ª©©©©¨¦¡—’‹€t^B"  - - - - - "&+059<;6,  ! !!!!!!! $%%!   "G…—¢¡¡£¤¥¦§¨©©©«¦¥24:WTMDEh«ª¢},ž§§¦¡¡£¥¦§¨¨©¨©©©©©©¨¤™Š}u[>' - !$*/49>A@:1# !"####$##$$$$#"! %,11.)$ 2w˜¢¢¡£¤¥¦§¨©ª©¬¥™22AWYLBKf©¨¢œz -Ÿ¦©§¡¡£¥¦§§¨¦«¨©©©©ªª¦Š…J-#   #(-28=BED>5&!$%'((''&&&&&&&%$"!&/7<;61*# ^“œ£ £¤¥¦§¨©ª©¬¡’.6GW]MCQ`¨¦¢šw0¤¥©§¢¡£¥¦¦§§©§©©©©ª««¥ž’˜{;-)    "&,17D]bRFSY¨£¤˜s3¥¥¨§¢¡£¤¥¦§§¨©©©©©ªªª¢ ”yA(/$    !$)/6;@DIMLC<0% !  $(,0110.+*)((((''&(09?BA@<6/(  !#"1yšžž¥¦¦¦§¨¨¨©ª¢}.IEfgXHST¨£¤•l4¤¦¨¥¢¡£¤¥¦§§¨¨©©©©©ª©££“J,&1"  "'-4:?CGLONF@5+!"#"!!%*/2331.+*((((((),19?ABA@;6/)  !%'+a•¤¡¦¦¦¦¦¦¤¥©«¦r2IMniZKST©££•d5¢£¥£¡¢£¤¥¦§¨§©©©©©©©ª¤¥ˆ-$&0"  $)07>BFINPOHD:2"!$%$#! !$(,./.,*(&&'(()+/39>@BCB@;5.(" &+('KŠ¦£§§¥££¡Ÿ¢ªªªu5GVpiYLUVª£¤™_9 ¡£¢¡¢£¤¥¦§¥©¨©©©©©¨«¥¡h$#'.!  %+2:@DGKOQOIF>6' #&'&#! !#$%$#"!"#%'),.26;?ACDDD@;4/)# - #+-$=¡¢©©¡š—•–Ÿ§ª¬6K[qgXNYY©££œX<¡¢¡¡¡£¤¥¦¥©¦©©©©ª©¥¦¬C%)**!%,3;AEHLPRNJGA8*#&(('$! !#$#"!!!#&),036:>ACEGHGFA;5/*$ - (1(6u ¥¨“‹ƒ‚Œœ¥««Ž4Q^tkWQ[]©¢¡šM?›Ÿ¢¢¡¢¤¤¥¦§¥©¨©©ªªª¥¡®k030+(!$+3:AEILPROJGB6+!!%)*)'# "'*-,+)((+.259;>ACFIKLLLHC<61+&! - - - - #003hž§—ujfv‘£§¬ª™9Wczu[T_`ª¢ž—DDžž¢¢¢£¤¥¥¦¦¨§¨©©ªª«¨¥ V0?0*'"")18?DHLQROJFA5*# $(+,*'"$*.00.--/26:=?BDFIMPQRQOKD>83-(" - - - - '-0Q}ƒidRMg¨¬ª¬«¡N`n€cYbd«¤Ÿ”?K¢ ££¢£¤¥¥¦§§¨¨¨©ªª«©©“U8@,)($ &.5***%#*19?EJPSQLHC3)"!'+/0/+& "&)-148BGLQUX[^adgikmmlkhe_WNHC>83,%  -  -  EjŸ¥§£¢¦ª¬­¬¬ªŽy{ƒŠzihi­¥£’,c¢££¤¤¥¥¥¦¦¦§§§§§¨¨©¨±‰2C(.5/#!$)/6=CHLOPNKG:(4569:70'"$,6?EKQX_cfilorstuutrqolg^RLGA;6/'"  -  -  !"Fu¡Ÿ£¡¢§ª¬­¬­­™„…}jfg­¥¢—%g¥¤¤¥¥¥¦¦¦¦§¦§§¦¦¦§§§­›O5-14,!  "%&')+/5*7668:93+$ !&/:EMT\dkorux{}}}|zxwutrnfWPJE?:3(#""!  - ! #?z ¡¥£¥¨ª«­­®®¡ˆˆlee­¥¡™k§¦¥¥¥¦¥¦¦¦¥¨¦¦¦¦¦¦§¥¢˜a3/21' #),./148=DJNPPPONLGB06645675/)$"$(1=JU^irx|ƒ„„„„ƒ€}zyxvsj[TOHC?5(%'))'! -  -  !<ˆ¨¤§¥¦©«¬­­¯¯§™‹€ndc¬£Ÿšm§¦¦¦¥¥¦¦¦¥©¤§¦¦¥¥¦§ ¢X4,.*! !(0457:>CHNSVXWWUSPLE7$&475446630,('+2=JXds}ƒ†ˆ‰‰‰‰‰‰ˆ…‚|{yul`XRKGB6*+1553*  4Š¥§¨¦§©«¬­­®¯ª –‹qeb¬¡Ÿ˜p§¥¦¦¥¥¦¥¦§¤¨¥¦¥¤¥§¦«†E0')#  &.6:=AEKOTWZ]^_^]ZWRKB46BHFB><;:964104=HUex‡Š‹‹‹ŒŒŒ‰†ƒ€~|wnd\UOJE6-5>AB@6'  - 1Ž¤¦§¦¨ª¬­­­®®¬¥œ‘Šuie¬¡¥~¦£¦¦¥¥¥¥¥¦¦¦¦¥¥¥¤§¥š«~A(## - - !%,5% - - - -  $'*27[‚§¨¯ª¬¬¬­­­­®®®®®®«£¢ 'ŒŸ¡¡ ¡¢£¤¥¥¦¦¨§¨¨¨¨§¥©¨¢•{F0^o{uuwz}€‚„|uqprw{{|€€|vsqopruwwxz}€ƒ…††‡‡ˆ‰Š‹‹ŒŒŒ‹‹‹ŠŠ‹‹ŒŒŒŒŒŠŠ‹Š‰ˆ„‚‚ƒ„vmgeZE6) - - - !0E2J$©§°ª««¬¬­­­®®®®®®¬¤£} (Œž   ¡¢£¤¤¦¥§§¨¨¨¨¨¨¨©§¦¡’q; 0`mzuuwz|€}wngc_[UYbii^PHLMMORW`ioqsv{„††‡‡ˆˆ‰‰ŠŠŠŠ‰‡†…„„„ƒ‚|yywpntxzzvsx}}{{|ƒ‚{smdVI8$  2:3:6©§¯««««¬¬­­®®®®­­¬¦¢z )ŒŸ   ¡£¤¥¥§¦¨§¨¨¨©©ªª©ªªšY:" -^nwtuvy||yqh_YUQLIGGE?9531..16;962/,*(''(+06;BKRW^lx€„†ˆ‰ŠŠŠ‰‡ƒ~xqjbXNF@7/)%" !$&)-048;=@BGNYfqtqjeY@" 4~…’–ž¢¤¤¤£¡™”‘“–™®ª›a:›¤Ÿ   ¡¢¤¥¦§¨¨©©ªª«¬¬¬­®œl ³§”~0  Sinpoolf`[WTSQOMKHEB@>;:997642136;@GOV]iu~„‡‰‹‹‹‹Š‡ƒ|une]TKB93-*'%$#$%'*.26:=@BDEGKR]iqqmj_D$ J“¯—š˜šž¡¢£¢¡ž›˜–••••—˜®¨˜_@£¨ž   ¡¢¤¥¦§§©©©ªª«¬¬¬­¦~Œ¯®«•s,!& - -Nikmmmid`[XVTRQOMMKJHEA<:986420038>CKU]fs}„ˆ‹ŒŒŒŒ‹ˆƒ{rjbYQF<51-+((()+-0369;>ADFHHJLQZfnqomdH$ 0S›´ª¥ž››ž ¡¡ Ÿ›™™˜™™™šš®¦•ZA¥¨ ¡  ¡¢¤¥¦§¨¨ªªª«¬¬¬­­™~§²±³Še.%7& Fgiillga]YUTSQONMMOQPLC81,*%! "'/6?AELX`^[X[_Q5#!%,1?Rao~‹‘”––––“‚ym`SC91*&##)/:HQYdg\ND9338?FKNPU[emqqomW'Mg¨¥¨¡œ›››œœœ›š››œœžžž²œ›EH£¤£¡ ¡£¥¦§¨©©ª«««««¨£ˆŠª­¬°©K6*'8C/$!! 5SfbidVQQXZVSNF=88>M_nuxvl\PMQVQC4,*+5GZm~•™›œœ›—‚{kWH71.*)+2;AP_eiqutl`UJ=7;DJNQUZdnqrqoZ)"K[¨«¢ššš››œœœ››ššš›œžŸŸŸ°ž›AJ£¥¤¡¡¡£¤¦§¨©ªª««««ª¥–~˜®ªª¯£O51*:G=.&$$"6RcbfXNRYa^URJ?68EXinaPJI@47>@CIIE<4/1@Me|Ž™ž¡££¡œzgK=20/036;CRg{‰ŽŠ}qmjhaTF?DKOSUYamrsrp\,4MQ ¢š›˜˜™š››››ššššš›žŸ   ®¢š;M£¤¤¡¡¢£¤¦§¨©ª««¬¬«ª¡†ˆ¥®ªª¯ŸW>?1>NL>4,')2H`^[KMS`g_TQE:7CQYWE, )*"$.58>EIFA86?G\zœ¡¥¦§¦ž‘€x]@7468=BISZTKB7//6H^jgd\NDEMRTWW\ktsrp^/!-[S@• ›™––˜™™ššš™™™™šœžŸ  ¡¡¬¦š6Qœ¢£¢¡¡¢£¤¦¨©ªª«¬¬¬¬©‘v™«©¬«¯ ]JL;BV]PB7/..9U^QMNPdiaTOA:>GE<2)""!/@?508HSY[QFENSW[XVeutqo^1$,.Nc7Z¢Ÿ–“‘“–—˜˜˜——–—™›ž  ¡¡¡ª©š0Tœ£ ¡  ¢£¤¦¨©ª«¬¬¬¬¨¤|v§¬¤¬«­¤`WXKIR^YNB741/>WJWHOhjcUMA==:5588/!&F\QA>DNUSHCJRq‹§­®­ª –€hLBJKKJKJGEE:&"%)*$!(4:FQQIEMUZc_RYpvqn]1 !#+22DN4zš˜ŒŠŒ’“”•””““•—›Ÿ¡¡¢¡¢¨«™,Wœ¢Ÿ  ¢¢£¥¨©ª¬¬¬ª© ™hs›¥¢©©«¨bb`]YMPPMG?=5%%*AZGUkmgYNC;648BMOB.!#,AaldWNJNX`WCOWm…™¦®°®¨œ–~bPUZMFECACMUH"$6C?9>FHGMU_im_P]utm^1"#%(.3*0*T›ž‡‡‡ŠŽ‘‘‘”—›ž ¡¢¢£¢§­›'Z¡Ÿ  ¡¡¢¤§©«¬¬«©¦›‹XUq„—¥¨ª«dheilYLB>=?KN.djFYnplaWPKHHMU[]WH;59D`utmidbacjdCEYfssppt|ˆ’’y_W\RFOQPNR\e^8) %3EOKA;?DHNXdnsq_Tevpc4!$&(+/1&,3”¤§›’Œˆ‰ŒŽŽ”™œŸ¡¢¢£¢£§©ž^ŸžŸŸ ¡ Ÿ¢§ª«¬¬«ª¨£šŒ„…‘¢©­©lnjlvfPA948Qnqb1|‰Z^pssnhd_XSQTY`js}„„~yutsrrstuvX3GMO[w‘¡©­¡uSEIKAUcikhhkqs^E635:K^c\RIGHLS_kuxzoZUqrg1!#%%#%-G~¨¯§ š”Ž‹Œ•šž ¢¢£££¤§¨^Ÿ›ž Ÿ ¡ ¥©«¬¬««««ª©ª¨¥¤¥ª®­}vpowkSC928Ywzn:‰—phruwvsqng^XUTUVWX[_bdfhjkmorsusb$79:8~¦¤¨£¤ —š¡¤¦¦¦¥¤¡›Š•¢§¤Ÿœ ¤§¨©ª«««­­­±£„#œ¡¡Ÿ¢¡¢£¤¥¥©¨©©ªªª©«¥ƒdkdhjjmr|‡““Œwl8;(,^o`Z^behkmpsuxz}‚ƒ„††ˆˆˆˆ‡†„‚€ƒ‡—ž¡¢£¤¥¥£¡ž™‘‡{|ƒ„†‡‡ˆˆˆˆˆˆˆˆ‡‡……‚|zxtqlghml)*dš¦¬¨§ —›£¦§§¦¤ ™—£¨§£žž¢¥§¨ªª«««­¬­·¥‚ !šž¡ ¡¡¡£¤¥§¦©¨©ªªª©§¡}gpjkihkq{…Ž’•“„*7+._pa[[`cgjmpsuy{~€‚„…†‡‡ˆ‰‰ˆ†‚}xurqqvŒ•šœœœœœœ›˜‘„ukhlsy„‡ˆˆ‰‰‰‰‰‰ˆˆˆ‡†„‚~|yvsokfgte >s‘§ª¨Ÿ•œ¥¨©¨¥Ÿ–ŽŒ”¡¦¥£ žŸ£¦¨©ªª¬©®©®«¸£~ !˜ ¡¢ ¡£¤¥¥¨§©©ªª©©¤¡rdpplhfipz„‘“˜’’(035Wd_Y^aeilpsvy|~ƒ„†‡ˆˆ‰‰‰ˆ…€xpic][`m}‹“—˜˜—–•”‚nZPPVan{ƒ‡‰ŠŠ‰Š‰‰‰‰ˆˆ‡…„‚€~{xtqmhfh{[ =q™¤¤›—Ÿ§©¨£™ŠŒ’š   ŸžŸ¢¥§©ªª¬¨¯§°ª­´ž{ #™¡¡¡ ¢£¤¥§¦©¨©ª©©©£¢b]pulechpz…’–œŸ<1I- 0abY]`dhlosvz|ƒ…†‡‰ˆŠŠŠ‰†ulcUIBBM`vƒ‹ŽŽŽ‹‡}kR?7:DTfx„ˆ‰‹‹ŠŠŠŠ‰ˆˆ‡†…„€}zvsokhgj~R  7m•Ÿž›œ¤§¤›…†‹”˜›œž £¥¨ªªª«¨°¥²§¯«°›z %œ¢ ¡ ¢£¤¥¦¨¨©©ª©¨¨¢œRVpvh`aiq|‡‘“ ¦Y=bD*" Wd[]_bfkosvz}ƒ…†ˆˆŠŠŠŠ‰†€vl_N;.*/>Xjtxz{zxrgSOe{†‰‹‹‹‹Š‹ˆŠ‰ˆ‡†…ƒ|yurnjgim}I d‘¬«¦¤¦¨¨¥£¤§§¦¤¤¤¤¤¤¥¦¨©ªªª«©°¤´¥²ª­¯  ( œ£   ¢£¤¥¦¦©©©ª©¨¨£–SUnma\`ks€‹‘’”ž£kLe\H855;Pf]]^afjnswz}€„…‡‡‰ˆŠ‹‹ŠˆƒzqdRA3+).:M\chlke_RB757;fb]\_bgmrvz}‚ƒ…†‡‰ˆŠŠ‹‹Šˆ„vi]PF@<99;===?@ACFKQU[ep{„‰‹‹‹‹‹ŠŠ‰ˆ‡‡…„ƒ€~{yurnkijpt_(#!#9Ep¨°²²¯®®­­­¬¬¬«ªªªª««««¬«««©¯¦°¦°©®«®«¬Ÿs +›ž¢žŸ ¡¢¤¥¦¨©©ªª©Ÿ¦­ŸXUXROQ^r€“‘Ž‘•™œœ‡~sqtqZ1$_h^\]afkquy|ƒ…†‡‡ŠˆŠŠ‹‹Šˆƒ}ti]RJD>:8778:=BHNTZ_enw†‰‹‹‹‹ŠŠ‰‰‡‡†…ƒ€}zwtqmkkjpqN'._…§²³±¯¯®®®®®­­¬««««««¬¬¬««¬©­§®¨®ª¬¬¬¬®©Ÿo ,• ¢žŸ¡¢¤¥¦¨©©ª«§–ž° SSSOMQdy†’“Ž‘—šœŒ‰‚l $Xga]]`diotx{ƒ„…‡‡ˆŠ‰ŠŠŠŠˆ†‚|ti^ULD>97669>FNV\bgnu|‚‡‰ŠŠŠŠŠ‰‰ˆ‡†…„‚~|yvromklkql=%-g•¯«ª«¬­®®®®®®­­­««««¬¬¬«««ª«©«©«ª«¬«®­«ªŸj/”¢¡žŸ¡¢¤¥¦¨©ªª«¦‹‘± MRPOMTn‚ˆ‘‘Ž’™Ÿž˜›œr __b^^_cgmrwz~€‚ƒ…†‡ˆˆ‰‰‰‰‰ˆ‡„{sh_VLD=988;BKV^djou{€„‡ˆ‰‰‰‰ˆˆ‡‡†…„ƒ}zxtromlmmse- "=h„™ž ¦ª¬­®®®®®®­¬«ªª«¬¬«¬«ªª©©©©©«««¬¬­®­ž` 4™¦žžŸ¡¢¤¥¦¨©ªª«¥‰Ž®JUPQQ^vƒˆŽŽ”› ¤  Ž›ƒ& X_b`_`bekquy|‚„…††ˆˆˆˆ‰ˆˆ‡…‚~xpg^UKD?<<@GR^flpuy~‚…‡‡ˆˆˆˆˆ‡‡†…„ƒ€~{yvtqommpos\ %[uƒŽ›¢§ª«­®®®®­«¨¤¥¨¬¬¬¬««ª©©©©©©ª««¬¬­®°žX 8¨ŸžŸ¡¢¤¥¦¨©ª««¨’š©–N[RV[j|ƒˆŽŽ—ž¤ªž¢˜”>  Jgeba`adinsw{}€ƒ„…†‡‡ˆˆˆ‡‡…„‚{unf]SKEBCGOZfmruy}€‚„……†††††††…„ƒ‚€~|zwurpnmmpprQ  -"\t‚ˆ–Ÿ¥©«¬­­®®®¬¨¢ž¤«®®­¬««ª©¨¨§§¨¨©«¬­­®­V4›¨ž ŸŸ ¢¤¥¦¨¨ªª«ªž£¨\bSYds~ƒ‡‹ŽŽ’›¢¦®˜¡žs - - 2dhdb`acgkpuy{~€ƒ„…†‡‡‡‡††…„‚€}xsmf]UNLLPXdntxz}‚ƒ„„„„…………„„‚€}zxvsqonmnrqoC -8_w£ª­¯®®¯¯±°¯®¯²²°®­¬«ª©¨§¦¦¥¥¦¨©«­­®«U7ž©¡¡ŸŸ ¢¤¥¦§¨©ª«ª¥§¦•ebVZju|…ˆŒ”¢¤¬z“> -  #Xedbaabeinrwy|~€‚ƒ„……††††…„„‚~|xtohb\ZY]dnv{~€‚‚‚ƒ‚‚‚‚‚‚ƒƒ‚€}{ywtrponmnpnf/'Kdmvƒ™£¨ª¬¯°±³´´³²°®­¬«ª©¨§¦¤£¢¢£¤§ª¬­®ªœR;¡©¤¢ŸŸ ¢¤¥¦§¨©ªªª©©¤˜`]\]lrtvy~†Ž”¢¦¨kŽz - -Nccba`acgkptwz|€‚ƒƒ„„………„„ƒ‚}zwsokhgioxƒƒƒ‚ƒƒƒ‚€~~~€€€}|yxusqpnmnnoi\U¦Ÿª¨¦¦¥¤¢ ¡£¤¥¦§§–zc```^\ZXVSQOMKJILL< - -  *GTWXXXYZ\^abbbbcglrrmikoqqplhhe[TPKDCFIPW_ehjnrqomqx}~~{uoifefgghhiiihgaH &EJKKKKJIHGFEDDDFGHJLNPQOOSX\_``_][YWWWª•7P¡ ¨¨§¦¥£ž™šŸ¤¦§¨œ{\W\][YWUSRPNLJHGHIG4 - -  :LRVVWWXY[^`cegkpuxyusrswzxrpt}„…‚zqpsw{ˆŠ‡|xussuy{|{yvqlhgffggggggfdV5 $DKLKKJJIHFFEDDDEFHKMOQSUX[\]\[YXVTSSSS§•0T¥¥¦§¥¢ž–‹‚‹˜¢§ †eRVZZXVTRQOLKIGEEFF@- - -  -.AMSTTUVWX[]`cgkosvwxwwwxz||~ƒŒ–›œ˜‘‘“‘ŽŽ‰‚{vtrstvwwwuroligffffffffd_G$  $CJMLKJIHGFFDDDDEFGKNQTWYZYYWVTSSRQQQRR¨–.[œ™›š”†zla^fwŠ’…lYSUVVTSQPNKJGEDCCCB;) - -  %7FQTTTTUVX[]adinqtuutsqoqtz†‰’••““”’‰…€yspoopqrsssqnlihffffeeeee`S. 'FLMLKJIHFGDDDDDDEFHLORTUTRQOOOOOOOOOOO¨*']~vsvqic[SPOR\imf\VSSSRRPOMKIFDCAAAA?9' - -  +;KSSSSSUVXZ^bgknppponnnoptx{|~„†‡‰Š‰ˆ…|vplkkkklmnnnmkihgffeedddd`S<  - ,ILNLJIIGGEFDDDCDDEGIKMNNMLKKKLMMNNNNNMªŽ2Agla^[SNLKLNQRUWXYWSPOOOONLJHFDBA@??@?:' -  - !)=NRRQRSUVX\_dhjkjihgghjklnprtvx{|~~|zyvrmhedbbbdfhiiiihggffedcddbXA%  - 1KMNLJIHHFFEDCDCCDDFGHIIIIHHIJJKLMMMMMM¥Š=Yf`XQMLKJJIIIJMOQPOMLLLMLLJIFDB@?>>?@@<) -  %@PRQQRTUWZ^behhgda][[]adghiknqsvwvtsqokgb_[XWX[_bdfggggggfedccd]I+ - 4JMMLJIHGGEDCF@ECCDDEFGGHGGHHIJKKLMMMMM¦ŠO``YSPOOOMKJIGFFGIIIIHJJJJJIGEB@?===>@BA+   *FQQPRSTVY\`dffec^YSOMNQVZ]^`cfiiijkid\VPLLLOSX\`ceghhhhhgecbdbP5  - - 5GKMKJIGGEEDDAG>ECCDDEFGGGGHHJJKKLKMLML˜~`c]WSRQQPNLJHGEEDDEEFGHHIIHGECA?=<<<>@CD/  !! -2KPQRRSUX[_cegfda[TMFCADHLPRUWXYXTNJE@>=?DJPV[_cfghijjjihfbbcV>  - - 8EJLKJHGFFFCCE@F@ECCDEEFFGGHHJILJLKLMLMg`cb\XUTSQPNLJHGFDDDDDEFGGGHGFEB@><;;;=@EG2 "$ :JPSSTUX[_befhfd_ZSLE@<962////0259=>?CFKQW[_bfhjllmmmmljfbb\F   - - !;EJKJIHGFFDFCCDBDADDCEEFFGGGJHLHMJLMLMLX\d`[XVUSQONLJHGEDDCDDEEFFGGFFDB?=;:9:=@FL6 "&  !=KRTTUX\_behhihfb^XQJD?<;999<9889=AHM9  -!' (=LRTUX\_bfhiklljie`ZVSQPQRTY]bgjnnmlihjknpsuvwvutsrqpmg_P4 - - - - - '?DHIIHGFEECCDBDCBDCEAHCFHGHGKGLIKLKLLLM``]ZXWUTRPNLJHGFEECDDDDFCHDFEDC@>;9778I?FCCECFDGHGHIIIKKJMKLLKLXXWVUTRPOMKJHGFGCGBEDDCH?LBFEDC@=:8668GBDDDFEGFGGIGJJJJLKLLKLLVVUTSRQNMLJHGFGCH@GCDDFBJ@HDEDC@=:8667"  % 6MY]bglpsux{ƒƒƒ‚€~~~}}||||}}~~}{yuqmif`L+  -  -BDE5  "& - -$>KU]ekpsvy{{zyxwwwwwwwwvvutttstttuuusoib[TI7 - -  - 3>AAABBBCAFAECCFCEEEFEFFFIDLELGJIKHKKKKKKKOONNMMKJIHGGEFEEDEDEEDECDDCCCA@?<:87668:=@CC7(  -'! %8HS\cjnqsuuutsssssssssrqqqpppqqqqpomg`XNB1 - -  -  .;?@@AABBCCAFAEDDEEDFEFFGGFIGJGJIIKJJJKKKKKNNNMMKJJHIFGGEEFEDDDDDDDDCDBBA@?<:877679<>AA9." &$ "6FQYagjlllmmmlmmmnmmmlkkkllmnmmlkhe^VK>-   -  *9????@AABACDAFBFDFEFFEGFFGGHGIGIJJIKJJJKJJKMMMMKKJIJFHFFFEEECFCDECDCDBCA@@=<:977779;=??:2)  "&"4CNV\`bcdddefgghhgeedddefgijifeda\TH:) - -  -%8@@>>??AA@CBCEBGCFEFFFGEHFGHGJFKHHKJJJKJJJKJLMLLKJIJGIFGFFEEDGBEEBECDBDAA@?=<:987889:<>>;5/# $ .=HPTWZZ[[\]]^__^]\\]^^_`aa_]\ZVNC5$  - -  "4??==>>??@BBCCCFCGEFGFFGHEHGGIEKGHKHJJJJKJJKJLKLJKIJGJFGFFFFEFAFDBECCDCABA??=<::88799:<=><83+   )8AFIKMMMMNPRTTSQPQRTUUSRQPNMJC8+ -  1<><;<=>>@@BBCDEDGEGGFGHGGGGGHFKFHKGKIJIJKIKJJKKJJJIHIGHGFFDFECFDCEBDDACBA@@>><;:98899:;===:82(    "-48;=>>>?@BDEDB@@?ACCCA@>;83*   -  0:;:::;<=??AACCDEFFGGGGGGGGGGGGHFJJGJIJJJJIMGKKKJJKHJHHHFFFFFEEEDCDCDACDAAA@??==;::999::;<==<:71% -   #)-/011001210/.-./010.*&!  - -  -.:;989:;<=>@@BCDEFGGGGHHHGHGHGHGHHHGJIIJIJJKGNHJIJJGKFJGHGGFEFEDEDDEAECABC@A@?>>=;<9;99;;;<<=<;97.  - !!!!""!!    - -  -$19;97789:<=>?ABDEFGGHHHHHHHHHFHGHHHHIHHIIJJJJKIKJJGJJEKEIFFFFGDFFCECCG@CDAAB@@?>><=:<9:;:;<;<<=<:94(   -    $29;866789:<=>@ACDFFGHHIHIHHJHGIGGHGHHHHIIIJJJHKJJJGLFHJEJEHGEHBIBFDDFABEC?EA@A@??=>;>9<;;;;;<<=<<;:7."    #/687556789:<=?@BCEFGHHIIIIIJFJGIGJEIGHHIHIIJJHJJJKIJDLFGIFIFGGCK?JBEDCGBBBF>CB?@?>><>:>:<;;<<<=<=<<;93'  - (.2343345789:;>=<>;<;;=:=<<====<:4+   -  $-//0001235689:;=?@BDFGHIJHKHJIKFLDLCNBLFHHHHHIJIJHHNFKFJICLBKBKDFCJ@JAEECECADC?CA?@??=>==<=<9?:><;====<;6-$    &020.-./0234679:;=?@CDFGHIIKHKIJIJFLEKDLDJHHHJHIIIIJLFNHIEHIEIEIDHEGDGCFDCEACCBBC@AA???>>=<=;;>9?:<>=====;6.&   --420--./0134679:;=?@CDFGHIJJJJJJIIIGIGIFIGHHHGJIHJIJHKHJ \ No newline at end of file diff --git a/deps/CImg/examples/img/tetris.h b/deps/CImg/examples/img/tetris.h deleted file mode 100644 index e18b158..0000000 --- a/deps/CImg/examples/img/tetris.h +++ /dev/null @@ -1,2313 +0,0 @@ -/*------------------------------------------------------------ - - Define hard-coded color image used in the 'tetris.cpp' - example file, so that the corresponding executable does not - depend on additional data files. - ---------------------------------------------------------------*/ - -const unsigned char data_logo[] = { - 45, 45, 46, 47, 48, 49, 50, 49, 48, 48, 49, 50, 52, 53, 55, 56, - 59, 62, 64, 65, 64, 64, 66, 66, 65, 66, 72, 76, 78, 80, 77, 74, - 83, 84, 79, 78, 82, 85, 91, 97, 85, 92, 90, 95, 97, 97, 93, 88, - 95, 87, 85, 88, 88, 85, 82, 81, 83, 77, 74, 81, 81, 78, 73, 69, - 67, 65, 63, 65, 66, 65, 65, 65, 64, 61, 59, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 30, 29, 30, 29, 29, 30, - 45, 45, 46, 47, 48, 49, 50, 49, 48, 49, 49, 50, 52, 54, 56, 57, - 59, 61, 63, 64, 65, 65, 67, 67, 67, 67, 71, 75, 78, 81, 79, 76, - 83, 87, 83, 82, 84, 88, 94, 100, 91, 95, 94, 98, 100, 100, 96, 92, - 99, 91, 90, 91, 89, 85, 84, 83, 83, 78, 77, 82, 82, 78, 73, 69, - 68, 66, 66, 67, 66, 65, 65, 65, 64, 61, 59, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 30, 30, 30, 30, 29, 30, - 45, 45, 46, 47, 48, 49, 50, 49, 49, 49, 50, 51, 53, 55, 56, 58, - 59, 61, 63, 64, 66, 67, 69, 70, 70, 70, 71, 74, 79, 82, 83, 79, - 83, 90, 88, 86, 86, 89, 96, 103, 97, 98, 100, 102, 103, 103, 100, 97, - 103, 95, 95, 95, 91, 86, 88, 86, 82, 80, 82, 84, 82, 77, 73, 70, - 69, 69, 69, 68, 67, 66, 65, 65, 63, 60, 58, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 30, 30, 31, 30, 29, 30, - 45, 45, 46, 47, 48, 49, 50, 49, 49, 49, 50, 52, 54, 56, 57, 59, - 60, 62, 64, 65, 67, 69, 71, 72, 72, 72, 72, 74, 79, 83, 85, 83, - 83, 90, 92, 89, 87, 90, 97, 105, 102, 99, 103, 104, 105, 105, 101, 101, - 105, 97, 98, 98, 93, 88, 91, 89, 84, 83, 86, 86, 81, 76, 73, 71, - 71, 72, 72, 71, 69, 67, 66, 64, 63, 60, 58, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 31, 31, 31, 31, 30, 30, - 45, 45, 46, 47, 48, 49, 50, 49, 50, 50, 51, 52, 55, 56, 58, 60, - 62, 64, 66, 67, 68, 70, 73, 74, 75, 77, 76, 76, 80, 84, 88, 89, - 86, 91, 96, 94, 90, 93, 101, 106, 107, 100, 108, 107, 109, 109, 105, 106, - 108, 100, 103, 100, 96, 92, 95, 91, 87, 88, 89, 86, 80, 76, 75, 75, - 74, 74, 74, 72, 70, 68, 66, 64, 62, 59, 57, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 31, 31, 32, 31, 30, 30, - 45, 45, 46, 47, 48, 49, 50, 50, 50, 51, 52, 52, 56, 57, 59, 61, - 65, 66, 68, 68, 69, 72, 74, 75, 77, 80, 80, 79, 79, 84, 90, 96, - 92, 92, 101, 101, 95, 98, 106, 111, 114, 105, 114, 113, 116, 116, 112, 112, - 111, 103, 107, 100, 98, 95, 96, 92, 89, 93, 88, 83, 79, 75, 77, 79, - 78, 76, 75, 74, 72, 69, 66, 64, 62, 59, 57, 56, 54, 53, 52, 52, - 52, 51, 51, 49, 48, 47, 46, 45, 44, 43, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 33, 33, 33, - 33, 33, 33, 31, 29, 29, 30, 32, 32, 32, 31, 32, 32, 32, 30, 30, - 45, 45, 46, 47, 48, 49, 50, 50, 50, 51, 52, 53, 57, 58, 60, 62, - 65, 67, 69, 70, 70, 73, 75, 77, 79, 82, 84, 83, 83, 85, 91, 98, - 97, 94, 101, 107, 99, 100, 109, 113, 119, 110, 117, 118, 120, 121, 115, 118, - 113, 108, 110, 103, 99, 100, 99, 93, 94, 96, 88, 81, 79, 77, 79, 81, - 80, 78, 76, 74, 71, 68, 65, 63, 61, 59, 57, 56, 55, 54, 52, 53, - 52, 52, 51, 49, 49, 48, 47, 46, 45, 44, 43, 43, 42, 41, 41, 41, - 40, 39, 39, 39, 38, 37, 36, 36, 36, 36, 35, 35, 34, 34, 33, 33, - 33, 33, 32, 31, 30, 29, 31, 32, 32, 32, 32, 33, 33, 33, 31, 30, - 45, 45, 46, 47, 48, 49, 50, 50, 51, 52, 53, 55, 57, 59, 63, 65, - 67, 70, 71, 73, 74, 75, 78, 79, 82, 85, 89, 91, 89, 87, 92, 96, - 101, 98, 98, 110, 106, 102, 110, 114, 124, 117, 121, 124, 124, 126, 118, 124, - 115, 116, 112, 107, 103, 107, 102, 96, 102, 97, 86, 80, 81, 82, 81, 83, - 82, 80, 78, 73, 70, 66, 63, 62, 61, 59, 58, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 44, 43, 42, 41, 41, 41, - 40, 40, 39, 39, 38, 37, 37, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 32, 31, 31, 31, 32, 34, 33, 32, 32, 34, 34, 34, 32, 31, - 45, 45, 46, 47, 49, 49, 50, 50, 51, 52, 54, 56, 58, 61, 64, 67, - 70, 73, 75, 77, 78, 79, 82, 83, 84, 89, 93, 95, 93, 93, 94, 96, - 102, 105, 102, 108, 117, 109, 109, 118, 127, 123, 125, 128, 129, 130, 122, 129, - 119, 122, 116, 109, 113, 112, 104, 105, 106, 95, 85, 82, 83, 85, 85, 86, - 84, 80, 77, 73, 70, 66, 63, 63, 61, 59, 58, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 44, 43, 42, 41, 41, 41, - 41, 40, 39, 39, 38, 37, 37, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 32, 31, 31, 31, 32, 34, 33, 32, 32, 34, 34, 34, 32, 31, - 45, 46, 47, 48, 49, 50, 51, 50, 52, 53, 56, 58, 60, 63, 68, 70, - 73, 75, 79, 81, 81, 83, 86, 87, 88, 92, 97, 100, 100, 102, 99, 97, - 102, 112, 111, 107, 122, 118, 111, 121, 131, 132, 131, 134, 135, 135, 128, 135, - 124, 129, 121, 113, 120, 114, 109, 113, 106, 93, 86, 87, 89, 90, 89, 89, - 86, 80, 76, 72, 69, 67, 64, 63, 62, 60, 59, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 44, 44, 43, 42, 42, 42, - 41, 40, 40, 40, 39, 38, 37, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 32, 31, 31, 31, 33, 34, 33, 32, 32, 34, 34, 34, 32, 31, - 46, 47, 47, 48, 50, 50, 51, 51, 52, 54, 58, 60, 62, 66, 71, 74, - 75, 78, 82, 84, 85, 86, 88, 90, 89, 93, 97, 101, 105, 107, 106, 102, - 103, 115, 121, 112, 121, 128, 119, 123, 134, 141, 137, 141, 143, 142, 136, 141, - 131, 134, 122, 119, 122, 115, 119, 116, 101, 94, 92, 94, 95, 93, 91, 89, - 85, 79, 74, 71, 69, 67, 65, 64, 63, 61, 59, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 45, 44, 44, 43, 42, 43, - 42, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 32, 32, 32, 32, 33, 34, 33, 32, 32, 34, 34, 34, 32, 31, - 46, 47, 48, 49, 50, 51, 52, 51, 53, 55, 59, 61, 64, 68, 74, 77, - 78, 81, 86, 88, 89, 91, 92, 94, 95, 97, 100, 103, 108, 112, 113, 111, - 107, 114, 125, 123, 123, 135, 132, 127, 138, 150, 142, 149, 152, 150, 144, 148, - 140, 137, 125, 129, 124, 124, 127, 114, 100, 98, 101, 101, 99, 95, 90, 86, - 83, 78, 73, 70, 69, 67, 65, 64, 63, 61, 60, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 45, 45, 44, 43, 43, 43, - 42, 42, 41, 41, 40, 39, 38, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 32, 32, 32, 32, 33, 34, 33, 32, 32, 34, 34, 34, 32, 31, - 47, 47, 48, 49, 50, 50, 51, 51, 52, 55, 60, 62, 65, 70, 75, 79, - 80, 83, 89, 91, 91, 94, 96, 98, 100, 101, 103, 105, 109, 113, 117, 117, - 110, 111, 124, 134, 128, 137, 142, 130, 141, 156, 147, 155, 159, 155, 150, 153, - 148, 140, 128, 137, 128, 134, 131, 112, 102, 102, 107, 105, 102, 96, 89, 84, - 81, 77, 73, 70, 68, 67, 66, 65, 63, 61, 60, 57, 56, 54, 53, 53, - 53, 53, 52, 51, 50, 48, 47, 46, 46, 45, 45, 45, 44, 43, 43, 43, - 43, 42, 41, 41, 40, 39, 38, 37, 37, 36, 36, 36, 35, 34, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 34, 33, 31, 32, 34, 34, 34, 32, 31, - 47, 48, 48, 49, 48, 49, 51, 51, 52, 56, 61, 65, 69, 73, 77, 80, - 78, 83, 90, 88, 89, 95, 102, 99, 102, 104, 109, 111, 108, 114, 115, 112, - 114, 117, 125, 134, 135, 128, 150, 129, 142, 160, 157, 160, 164, 156, 156, 153, - 151, 142, 137, 139, 137, 139, 125, 112, 114, 115, 113, 111, 103, 95, 88, 83, - 81, 77, 74, 71, 69, 66, 65, 65, 64, 62, 61, 58, 57, 55, 54, 51, - 51, 50, 49, 48, 47, 46, 45, 45, 46, 45, 45, 44, 44, 43, 42, 43, - 42, 42, 41, 42, 42, 42, 41, 40, 39, 38, 38, 37, 36, 35, 35, 35, - 35, 34, 34, 35, 34, 34, 32, 31, 31, 30, 32, 33, 33, 34, 32, 31, - 47, 48, 48, 49, 47, 48, 51, 51, 53, 57, 63, 66, 73, 77, 80, 82, - 79, 84, 87, 92, 97, 95, 97, 103, 104, 107, 109, 114, 116, 105, 114, 122, - 120, 127, 124, 128, 143, 129, 148, 145, 137, 167, 167, 173, 175, 166, 165, 156, - 153, 137, 148, 149, 149, 134, 115, 116, 125, 125, 116, 110, 102, 95, 88, 84, - 81, 78, 75, 72, 70, 67, 65, 64, 63, 61, 60, 58, 57, 55, 54, 52, - 51, 50, 50, 48, 47, 46, 46, 46, 46, 46, 46, 44, 44, 43, 42, 43, - 43, 42, 41, 42, 42, 42, 42, 41, 40, 39, 38, 37, 37, 36, 35, 35, - 35, 34, 34, 35, 34, 33, 31, 29, 29, 29, 31, 33, 33, 34, 32, 31, - 47, 48, 48, 49, 47, 49, 52, 52, 56, 59, 65, 69, 76, 81, 83, 88, - 90, 93, 92, 100, 101, 107, 110, 116, 113, 119, 124, 122, 121, 125, 122, 119, - 127, 145, 143, 134, 143, 144, 151, 167, 152, 177, 177, 183, 185, 179, 176, 163, - 165, 153, 163, 152, 159, 134, 121, 133, 130, 129, 119, 108, 100, 94, 89, 84, - 82, 79, 76, 73, 70, 68, 66, 64, 62, 61, 59, 57, 56, 54, 53, 53, - 53, 52, 51, 50, 49, 48, 47, 48, 47, 47, 47, 45, 45, 44, 43, 43, - 42, 41, 40, 42, 42, 42, 42, 41, 40, 39, 38, 38, 37, 36, 35, 34, - 33, 32, 32, 33, 32, 31, 30, 30, 30, 29, 31, 33, 33, 34, 32, 31, - 47, 48, 48, 49, 48, 49, 53, 54, 59, 63, 69, 72, 78, 83, 86, 91, - 94, 99, 105, 111, 111, 115, 108, 97, 90, 97, 113, 123, 131, 130, 129, 127, - 132, 148, 153, 144, 139, 156, 161, 166, 163, 177, 195, 195, 196, 192, 190, 178, - 163, 159, 168, 170, 150, 142, 138, 141, 134, 128, 119, 107, 98, 94, 90, 85, - 82, 79, 76, 72, 69, 67, 65, 64, 63, 62, 60, 58, 57, 55, 54, 55, - 55, 53, 53, 51, 51, 50, 49, 49, 48, 48, 47, 45, 45, 44, 44, 44, - 43, 42, 41, 43, 43, 43, 42, 42, 41, 40, 40, 39, 39, 38, 37, 36, - 35, 34, 33, 33, 32, 32, 31, 30, 30, 30, 31, 33, 33, 34, 32, 31, - 47, 48, 48, 49, 48, 50, 54, 56, 62, 66, 72, 75, 79, 85, 88, 95, - 99, 107, 116, 111, 97, 81, 68, 52, 44, 49, 67, 77, 98, 128, 139, 135, - 138, 128, 139, 144, 140, 156, 171, 178, 179, 176, 202, 201, 202, 200, 198, 185, - 164, 176, 174, 176, 151, 154, 156, 151, 138, 126, 114, 107, 99, 94, 91, 86, - 83, 80, 77, 72, 69, 66, 64, 66, 66, 64, 62, 61, 59, 57, 56, 57, - 56, 55, 55, 53, 52, 51, 51, 50, 49, 48, 47, 45, 45, 44, 44, 44, - 44, 43, 42, 43, 43, 43, 43, 44, 43, 42, 42, 42, 41, 40, 39, 38, - 38, 37, 36, 35, 34, 33, 32, 30, 31, 30, 31, 33, 33, 34, 32, 31, - 47, 48, 48, 49, 48, 51, 55, 57, 64, 69, 75, 77, 82, 88, 92, 101, - 112, 114, 102, 79, 53, 37, 31, 29, 25, 32, 47, 48, 53, 73, 112, 141, - 143, 66, 57, 78, 134, 156, 175, 177, 107, 84, 93, 97, 103, 99, 101, 90, - 89, 103, 82, 67, 76, 82, 89, 123, 130, 124, 111, 107, 101, 95, 90, 86, - 84, 80, 77, 74, 72, 69, 67, 67, 66, 65, 64, 62, 60, 58, 57, 57, - 57, 56, 56, 54, 53, 52, 52, 52, 51, 49, 47, 46, 46, 45, 44, 45, - 44, 43, 43, 44, 44, 44, 44, 45, 44, 43, 43, 43, 42, 41, 41, 40, - 40, 39, 38, 36, 35, 34, 33, 31, 31, 31, 32, 33, 33, 34, 32, 31, - 46, 48, 48, 50, 49, 52, 56, 59, 66, 71, 75, 78, 84, 91, 98, 108, - 114, 99, 60, 34, 35, 35, 32, 36, 37, 48, 59, 54, 51, 48, 64, 93, - 117, 34, 44, 50, 117, 163, 177, 199, 90, 66, 58, 73, 77, 76, 80, 78, - 75, 53, 49, 61, 66, 88, 92, 89, 113, 122, 112, 109, 102, 96, 91, 87, - 84, 81, 78, 77, 75, 72, 70, 69, 68, 66, 65, 63, 62, 60, 59, 59, - 58, 57, 57, 55, 54, 53, 53, 53, 52, 50, 48, 47, 46, 45, 44, 45, - 44, 43, 43, 44, 44, 44, 44, 45, 45, 44, 43, 44, 43, 42, 42, 43, - 42, 40, 39, 38, 37, 36, 34, 32, 32, 31, 32, 32, 33, 33, 32, 31, - 46, 48, 49, 50, 50, 53, 56, 61, 68, 73, 75, 80, 84, 98, 106, 114, - 94, 45, 36, 39, 41, 48, 58, 59, 58, 54, 49, 46, 51, 54, 54, 55, - 74, 47, 48, 38, 95, 178, 187, 198, 97, 75, 74, 88, 91, 95, 101, 84, - 64, 51, 60, 92, 101, 111, 106, 59, 110, 123, 115, 107, 101, 95, 91, 86, - 84, 81, 78, 77, 75, 73, 72, 72, 70, 69, 68, 65, 64, 62, 61, 62, - 62, 61, 60, 59, 58, 56, 55, 55, 54, 52, 51, 47, 46, 44, 43, 44, - 44, 44, 44, 45, 45, 46, 47, 47, 47, 47, 47, 47, 46, 45, 45, 44, - 43, 41, 40, 39, 39, 37, 35, 34, 33, 30, 31, 31, 30, 31, 32, 32, - 46, 48, 49, 51, 51, 55, 58, 63, 70, 75, 77, 82, 90, 104, 112, 99, - 56, 38, 41, 49, 58, 60, 53, 45, 55, 62, 61, 53, 49, 50, 47, 55, - 60, 69, 71, 49, 95, 178, 193, 201, 108, 73, 82, 91, 104, 94, 114, 73, - 68, 67, 83, 117, 130, 136, 121, 60, 108, 123, 114, 107, 101, 96, 93, 90, - 88, 85, 83, 81, 79, 77, 76, 76, 75, 73, 72, 68, 67, 65, 63, 63, - 63, 62, 61, 61, 60, 57, 56, 57, 55, 53, 52, 48, 47, 45, 44, 45, - 45, 45, 46, 49, 49, 51, 51, 50, 50, 50, 51, 51, 50, 49, 49, 49, - 47, 45, 44, 43, 42, 40, 37, 36, 35, 33, 33, 32, 31, 31, 32, 32, - 46, 48, 49, 51, 52, 56, 60, 66, 73, 78, 81, 88, 96, 108, 109, 69, - 49, 48, 48, 51, 52, 44, 39, 65, 88, 101, 103, 99, 76, 58, 46, 52, - 61, 73, 68, 51, 98, 180, 195, 210, 154, 108, 92, 84, 87, 75, 57, 23, - 48, 83, 111, 137, 127, 104, 92, 69, 109, 122, 114, 108, 103, 100, 98, 95, - 93, 90, 88, 85, 84, 82, 80, 80, 79, 77, 76, 73, 71, 69, 68, 67, - 66, 65, 65, 64, 63, 61, 60, 60, 58, 56, 54, 50, 49, 47, 46, 48, - 48, 49, 50, 52, 53, 55, 55, 54, 54, 54, 55, 55, 54, 53, 53, 54, - 52, 50, 48, 46, 45, 42, 40, 39, 37, 35, 34, 33, 31, 32, 31, 31, - 47, 49, 50, 52, 54, 58, 62, 69, 76, 82, 86, 94, 104, 113, 74, 33, - 36, 38, 36, 41, 41, 31, 59, 102, 117, 125, 129, 130, 126, 103, 55, 55, - 67, 87, 68, 46, 97, 176, 192, 222, 219, 181, 144, 95, 85, 69, 18, 22, - 81, 118, 136, 125, 74, 88, 99, 96, 118, 121, 116, 112, 109, 105, 103, 100, - 97, 95, 92, 89, 88, 86, 84, 82, 81, 79, 78, 75, 74, 72, 71, 71, - 70, 69, 69, 68, 67, 65, 64, 65, 62, 59, 57, 53, 51, 50, 49, 49, - 50, 52, 52, 53, 55, 57, 58, 57, 57, 57, 57, 58, 57, 56, 56, 57, - 55, 53, 51, 48, 47, 43, 41, 41, 38, 35, 35, 34, 32, 32, 31, 31, - 48, 50, 51, 53, 55, 60, 65, 72, 81, 87, 92, 99, 114, 104, 24, 25, - 36, 43, 50, 52, 38, 55, 105, 115, 120, 119, 121, 124, 134, 137, 101, 68, - 72, 78, 68, 48, 92, 173, 190, 214, 235, 237, 238, 177, 115, 56, 76, 115, - 133, 136, 140, 78, 68, 129, 137, 135, 134, 128, 123, 121, 117, 112, 110, 106, - 103, 100, 97, 94, 92, 91, 89, 87, 85, 83, 82, 80, 79, 77, 76, 76, - 76, 75, 74, 74, 73, 71, 69, 68, 67, 63, 60, 55, 54, 52, 52, 52, - 54, 56, 56, 56, 59, 61, 63, 63, 63, 63, 63, 65, 64, 63, 62, 61, - 60, 58, 56, 53, 52, 48, 44, 43, 40, 36, 36, 35, 33, 32, 31, 30, - 48, 50, 51, 53, 56, 61, 66, 73, 82, 89, 94, 105, 113, 70, 23, 52, - 60, 61, 60, 47, 43, 90, 116, 116, 120, 118, 117, 118, 126, 135, 137, 88, - 71, 74, 80, 63, 102, 180, 194, 215, 242, 249, 253, 226, 95, 58, 104, 134, - 134, 128, 125, 57, 112, 159, 156, 150, 146, 140, 132, 127, 123, 117, 114, 110, - 108, 104, 102, 99, 97, 95, 94, 91, 89, 88, 86, 83, 82, 80, 79, 79, - 79, 78, 77, 77, 75, 73, 72, 70, 67, 63, 60, 56, 54, 52, 53, 54, - 56, 57, 58, 60, 62, 65, 67, 69, 69, 69, 70, 71, 71, 69, 68, 66, - 64, 63, 62, 60, 57, 53, 49, 46, 43, 39, 37, 36, 33, 32, 31, 30, - 47, 49, 51, 54, 57, 63, 67, 75, 82, 89, 102, 111, 105, 49, 39, 65, - 64, 59, 47, 27, 61, 113, 117, 118, 122, 122, 122, 123, 133, 137, 144, 119, - 68, 86, 96, 78, 103, 188, 205, 224, 244, 249, 251, 237, 55, 99, 133, 137, - 134, 128, 113, 63, 139, 173, 169, 161, 156, 147, 136, 130, 127, 122, 117, 115, - 110, 105, 103, 102, 99, 99, 97, 89, 87, 87, 87, 86, 85, 82, 80, 81, - 81, 83, 80, 80, 76, 74, 73, 73, 68, 66, 63, 59, 57, 55, 56, 58, - 57, 58, 58, 61, 65, 71, 71, 71, 73, 75, 76, 76, 74, 73, 74, 71, - 67, 65, 67, 64, 63, 54, 53, 48, 45, 40, 37, 36, 32, 32, 31, 30, - 47, 48, 51, 54, 57, 63, 68, 77, 82, 92, 107, 119, 95, 37, 40, 63, - 55, 52, 42, 28, 83, 120, 120, 116, 121, 122, 124, 128, 134, 140, 144, 147, - 85, 82, 91, 78, 97, 191, 215, 234, 247, 250, 251, 246, 92, 126, 146, 135, - 121, 122, 116, 71, 153, 175, 168, 160, 151, 141, 132, 126, 123, 118, 113, 113, - 109, 102, 99, 99, 96, 98, 97, 83, 81, 84, 86, 87, 87, 84, 83, 87, - 85, 87, 84, 79, 82, 81, 75, 70, 71, 70, 64, 63, 61, 58, 60, 63, - 61, 59, 61, 65, 68, 75, 75, 74, 78, 82, 84, 83, 79, 75, 73, 73, - 73, 73, 70, 67, 61, 61, 59, 50, 46, 41, 37, 35, 32, 32, 32, 31, - 47, 48, 51, 54, 58, 63, 70, 79, 85, 98, 107, 115, 55, 10, 29, 56, - 52, 53, 42, 42, 103, 124, 117, 113, 116, 118, 121, 123, 129, 135, 141, 150, - 100, 83, 106, 81, 98, 194, 215, 239, 253, 252, 251, 245, 121, 124, 141, 132, - 126, 134, 124, 68, 146, 157, 144, 139, 134, 126, 121, 116, 113, 109, 106, 109, - 106, 101, 98, 95, 94, 98, 97, 89, 89, 92, 94, 91, 91, 89, 88, 88, - 84, 84, 85, 85, 81, 80, 84, 74, 76, 72, 67, 66, 63, 62, 63, 67, - 66, 64, 66, 69, 70, 76, 79, 78, 81, 84, 86, 84, 81, 77, 76, 75, - 76, 76, 70, 72, 66, 63, 58, 52, 48, 43, 38, 36, 33, 32, 32, 31, - 47, 48, 51, 54, 59, 65, 72, 80, 88, 99, 111, 88, 8, 9, 32, 52, - 59, 61, 38, 60, 116, 121, 111, 107, 110, 112, 115, 116, 121, 127, 134, 144, - 123, 94, 90, 55, 96, 189, 209, 234, 249, 250, 248, 247, 112, 87, 70, 96, - 120, 122, 121, 74, 151, 164, 156, 145, 134, 127, 121, 118, 117, 114, 111, 113, - 111, 107, 104, 101, 102, 103, 102, 96, 96, 98, 99, 100, 99, 96, 92, 87, - 87, 89, 90, 93, 90, 88, 89, 90, 83, 74, 76, 69, 67, 64, 65, 71, - 70, 69, 70, 72, 79, 84, 88, 86, 89, 92, 93, 93, 85, 82, 83, 79, - 74, 78, 76, 70, 78, 63, 60, 57, 51, 46, 40, 38, 34, 33, 32, 31, - 47, 48, 51, 54, 60, 66, 74, 82, 88, 98, 114, 67, 28, 44, 51, 64, - 60, 62, 34, 79, 119, 117, 107, 106, 107, 108, 110, 112, 119, 125, 131, 139, - 139, 95, 83, 53, 87, 178, 200, 224, 243, 251, 254, 250, 115, 86, 91, 85, - 97, 130, 130, 70, 146, 161, 157, 146, 136, 132, 130, 125, 123, 121, 120, 121, - 120, 116, 111, 109, 110, 109, 108, 112, 114, 113, 112, 112, 107, 102, 97, 94, - 96, 95, 94, 95, 97, 97, 94, 91, 89, 85, 79, 73, 70, 67, 68, 74, - 72, 74, 76, 80, 89, 91, 94, 93, 96, 99, 99, 98, 98, 92, 86, 81, - 83, 84, 81, 79, 72, 76, 67, 60, 54, 49, 42, 40, 35, 33, 32, 31, - 47, 48, 51, 54, 61, 68, 75, 84, 89, 100, 114, 59, 55, 60, 60, 73, - 65, 56, 33, 95, 119, 114, 106, 105, 105, 105, 108, 111, 117, 122, 128, 134, - 135, 62, 63, 57, 81, 172, 200, 228, 251, 254, 254, 247, 132, 117, 140, 119, - 89, 97, 105, 74, 149, 158, 145, 134, 126, 126, 127, 126, 126, 126, 124, 127, - 128, 124, 117, 116, 118, 117, 123, 126, 126, 123, 119, 118, 114, 109, 105, 100, - 101, 100, 105, 106, 92, 88, 98, 99, 93, 94, 83, 79, 75, 71, 72, 77, - 77, 79, 82, 86, 93, 96, 106, 109, 114, 117, 115, 103, 99, 98, 95, 91, - 91, 90, 99, 104, 81, 81, 69, 64, 57, 51, 44, 41, 36, 34, 32, 31, - 47, 48, 51, 54, 61, 68, 76, 86, 90, 106, 112, 62, 52, 55, 65, 78, - 79, 52, 34, 100, 117, 109, 102, 102, 104, 104, 107, 109, 112, 117, 120, 129, - 129, 48, 74, 80, 81, 174, 212, 234, 252, 254, 254, 250, 143, 150, 135, 138, - 125, 101, 76, 72, 153, 170, 163, 143, 130, 128, 128, 129, 131, 131, 129, 133, - 135, 129, 121, 125, 128, 130, 142, 161, 161, 156, 149, 124, 118, 115, 114, 112, - 112, 117, 138, 164, 166, 153, 134, 127, 96, 95, 92, 86, 80, 77, 77, 80, - 81, 84, 89, 95, 102, 114, 140, 156, 163, 167, 167, 145, 102, 92, 103, 102, - 99, 116, 144, 110, 118, 81, 76, 66, 59, 52, 45, 42, 37, 34, 32, 31, - 47, 49, 53, 56, 62, 68, 76, 86, 96, 104, 97, 47, 53, 71, 79, 85, - 82, 47, 45, 107, 117, 107, 101, 100, 100, 98, 99, 101, 106, 110, 116, 124, - 127, 114, 117, 93, 94, 184, 210, 231, 252, 248, 253, 247, 138, 139, 133, 146, - 142, 147, 140, 70, 151, 170, 160, 158, 153, 147, 140, 139, 135, 138, 150, 159, - 156, 148, 101, 132, 142, 159, 162, 138, 122, 136, 105, 108, 99, 115, 122, 124, - 129, 162, 166, 177, 194, 211, 218, 186, 130, 92, 95, 90, 84, 82, 83, 79, - 85, 94, 97, 103, 120, 126, 138, 148, 141, 142, 124, 70, 35, 100, 127, 113, - 124, 162, 139, 162, 163, 98, 72, 70, 60, 55, 46, 42, 36, 33, 32, 31, - 47, 49, 53, 57, 63, 69, 77, 86, 92, 109, 96, 59, 58, 83, 71, 63, - 42, 29, 47, 107, 110, 102, 97, 97, 95, 94, 95, 98, 103, 108, 112, 120, - 132, 133, 106, 90, 121, 184, 207, 232, 237, 240, 249, 248, 148, 133, 132, 118, - 142, 148, 141, 72, 138, 162, 159, 153, 151, 148, 148, 139, 171, 155, 153, 164, - 155, 152, 91, 130, 158, 189, 182, 136, 130, 116, 106, 109, 101, 90, 122, 135, - 166, 198, 181, 177, 206, 216, 214, 211, 177, 106, 90, 94, 89, 85, 84, 87, - 92, 96, 108, 134, 148, 156, 132, 123, 121, 131, 74, 77, 126, 180, 193, 134, - 154, 170, 143, 177, 164, 126, 60, 67, 63, 55, 48, 43, 38, 34, 32, 31, - 47, 49, 53, 57, 65, 71, 79, 88, 97, 109, 73, 52, 77, 90, 77, 74, - 59, 51, 57, 106, 104, 97, 93, 93, 93, 91, 92, 95, 100, 107, 113, 117, - 132, 155, 152, 143, 151, 185, 204, 228, 218, 234, 241, 246, 132, 117, 148, 131, - 133, 121, 126, 70, 131, 153, 154, 151, 154, 147, 152, 145, 174, 159, 160, 158, - 162, 149, 82, 150, 186, 195, 178, 187, 180, 192, 202, 198, 175, 121, 109, 155, - 168, 152, 178, 186, 208, 212, 212, 168, 156, 179, 86, 96, 96, 88, 87, 91, - 96, 103, 132, 180, 179, 180, 152, 128, 127, 128, 132, 178, 197, 200, 198, 179, - 162, 157, 151, 165, 140, 145, 53, 63, 65, 56, 50, 44, 39, 35, 34, 32, - 47, 49, 53, 57, 66, 73, 80, 90, 98, 108, 67, 70, 100, 83, 84, 75, - 67, 64, 58, 105, 101, 95, 92, 92, 92, 91, 93, 95, 99, 108, 116, 125, - 136, 146, 151, 157, 164, 183, 202, 217, 207, 232, 230, 241, 123, 118, 126, 114, - 144, 161, 147, 70, 135, 147, 145, 148, 149, 135, 147, 163, 166, 158, 167, 181, - 160, 167, 116, 181, 191, 196, 175, 186, 149, 203, 203, 205, 210, 182, 110, 189, - 182, 172, 189, 196, 212, 214, 195, 145, 175, 231, 104, 91, 102, 94, 92, 93, - 99, 120, 160, 187, 187, 184, 185, 171, 107, 81, 150, 198, 185, 164, 179, 157, - 150, 143, 134, 158, 138, 142, 42, 61, 66, 56, 50, 45, 39, 36, 34, 32, - 47, 49, 53, 57, 66, 72, 80, 89, 94, 109, 82, 93, 91, 76, 92, 70, - 84, 71, 58, 101, 100, 95, 93, 92, 92, 91, 94, 96, 100, 110, 119, 124, - 129, 141, 153, 161, 163, 178, 196, 200, 202, 227, 220, 233, 129, 142, 138, 115, - 133, 141, 143, 77, 140, 148, 139, 141, 139, 128, 144, 165, 161, 165, 176, 193, - 147, 160, 152, 199, 201, 185, 171, 187, 146, 198, 187, 203, 185, 190, 161, 212, - 194, 200, 219, 207, 201, 197, 176, 166, 234, 212, 111, 79, 105, 101, 98, 98, - 108, 143, 175, 187, 204, 188, 196, 137, 56, 74, 124, 179, 164, 131, 161, 151, - 166, 90, 89, 151, 161, 127, 40, 63, 65, 56, 49, 44, 39, 35, 34, 33, - 47, 49, 53, 57, 65, 71, 79, 88, 92, 107, 85, 79, 65, 75, 88, 58, - 77, 57, 67, 107, 100, 95, 93, 93, 90, 90, 93, 98, 106, 110, 116, 118, - 122, 136, 147, 152, 156, 171, 185, 184, 196, 213, 213, 230, 150, 139, 139, 131, - 148, 147, 145, 73, 135, 151, 141, 135, 136, 129, 137, 160, 157, 177, 183, 192, - 173, 153, 173, 193, 162, 119, 131, 190, 181, 205, 188, 169, 175, 202, 195, 199, - 192, 153, 157, 197, 201, 207, 198, 210, 197, 129, 131, 63, 106, 106, 102, 103, - 117, 156, 155, 140, 179, 175, 173, 61, 65, 110, 126, 141, 129, 130, 141, 134, - 165, 111, 80, 139, 127, 64, 37, 67, 62, 55, 47, 43, 37, 34, 33, 33, - 48, 49, 54, 58, 63, 70, 79, 88, 92, 105, 80, 69, 68, 77, 67, 54, - 107, 66, 74, 103, 100, 95, 93, 92, 89, 90, 94, 99, 107, 110, 113, 119, - 128, 137, 147, 153, 157, 164, 174, 177, 195, 197, 206, 215, 166, 155, 157, 148, - 147, 154, 153, 68, 128, 152, 146, 134, 132, 124, 120, 163, 165, 186, 181, 185, - 182, 157, 172, 148, 70, 74, 99, 169, 184, 191, 175, 182, 186, 189, 190, 189, - 102, 62, 83, 128, 181, 193, 159, 189, 154, 132, 124, 52, 105, 106, 102, 105, - 120, 153, 149, 157, 168, 147, 124, 43, 96, 129, 135, 137, 131, 152, 120, 127, - 143, 119, 75, 92, 69, 42, 63, 69, 60, 53, 45, 41, 35, 32, 32, 32, - 49, 50, 54, 58, 62, 70, 78, 87, 96, 103, 71, 75, 96, 92, 76, 90, - 116, 67, 79, 109, 103, 97, 94, 92, 91, 93, 97, 100, 101, 106, 113, 121, - 130, 138, 145, 151, 156, 156, 162, 177, 197, 178, 198, 206, 155, 163, 169, 161, - 160, 170, 161, 70, 127, 146, 145, 140, 132, 125, 125, 142, 165, 182, 180, 198, - 188, 169, 175, 79, 61, 111, 133, 151, 189, 203, 203, 199, 170, 164, 171, 126, - 47, 94, 118, 118, 131, 122, 94, 137, 151, 169, 159, 43, 104, 103, 102, 106, - 126, 155, 181, 184, 173, 141, 110, 50, 112, 128, 129, 136, 149, 162, 112, 133, - 106, 111, 61, 93, 82, 69, 72, 69, 59, 51, 43, 39, 33, 30, 30, 31, - 49, 50, 54, 58, 62, 69, 77, 87, 94, 107, 91, 96, 111, 109, 101, 120, - 113, 65, 78, 110, 106, 100, 97, 96, 95, 94, 95, 97, 99, 105, 112, 121, - 130, 134, 142, 149, 148, 147, 155, 174, 187, 171, 191, 198, 157, 160, 146, 165, - 172, 171, 170, 73, 126, 143, 142, 144, 136, 126, 131, 153, 178, 182, 175, 194, - 195, 184, 132, 51, 103, 128, 144, 151, 205, 220, 217, 218, 180, 197, 183, 63, - 75, 125, 130, 133, 160, 174, 177, 195, 182, 199, 175, 39, 102, 103, 103, 108, - 144, 174, 178, 172, 175, 155, 120, 48, 122, 124, 131, 140, 148, 147, 104, 128, - 131, 127, 48, 86, 90, 80, 74, 67, 58, 50, 42, 38, 33, 30, 30, 31, - 48, 50, 53, 57, 61, 69, 76, 86, 91, 110, 110, 114, 111, 110, 108, 123, - 97, 57, 76, 112, 108, 103, 100, 98, 95, 93, 92, 94, 98, 104, 111, 118, - 126, 132, 138, 143, 139, 140, 152, 172, 174, 165, 186, 190, 161, 160, 174, 174, - 176, 169, 181, 71, 124, 141, 139, 141, 135, 128, 133, 156, 180, 176, 183, 212, - 210, 161, 71, 70, 126, 130, 139, 154, 202, 213, 223, 221, 183, 196, 183, 48, - 106, 135, 132, 129, 177, 212, 210, 217, 211, 194, 166, 36, 102, 105, 106, 116, - 152, 167, 158, 143, 170, 164, 128, 56, 121, 129, 134, 141, 130, 128, 124, 137, - 147, 133, 43, 82, 93, 79, 71, 65, 56, 49, 42, 37, 32, 30, 30, 31, - 47, 49, 53, 57, 61, 68, 76, 86, 96, 108, 105, 100, 97, 99, 100, 104, - 95, 64, 78, 115, 111, 105, 101, 98, 90, 90, 91, 93, 98, 104, 111, 116, - 123, 131, 133, 133, 133, 138, 151, 168, 162, 163, 181, 192, 156, 167, 189, 163, - 189, 186, 179, 67, 123, 139, 136, 135, 133, 130, 133, 149, 169, 174, 199, 210, - 178, 80, 39, 91, 130, 143, 132, 151, 197, 216, 223, 199, 168, 181, 146, 57, - 123, 135, 139, 145, 158, 182, 166, 189, 189, 166, 146, 35, 103, 108, 107, 115, - 143, 153, 167, 161, 172, 153, 117, 59, 122, 127, 133, 136, 134, 146, 154, 150, - 137, 110, 42, 80, 88, 75, 68, 63, 54, 47, 40, 37, 33, 31, 30, 30, - 47, 49, 52, 56, 60, 67, 75, 85, 94, 108, 106, 101, 100, 100, 111, 108, - 113, 81, 81, 117, 114, 106, 100, 96, 89, 90, 91, 95, 99, 105, 112, 116, - 121, 129, 127, 127, 131, 139, 151, 162, 153, 162, 174, 187, 136, 157, 145, 150, - 186, 165, 160, 73, 124, 138, 134, 133, 132, 131, 136, 155, 176, 189, 201, 171, - 84, 99, 63, 100, 136, 137, 136, 142, 161, 186, 197, 160, 148, 190, 130, 68, - 133, 134, 136, 137, 153, 182, 159, 203, 175, 164, 134, 37, 106, 110, 109, 115, - 129, 141, 166, 155, 158, 146, 120, 54, 127, 123, 134, 141, 149, 150, 142, 138, - 122, 121, 43, 80, 86, 75, 69, 60, 52, 46, 40, 36, 33, 31, 30, 30, - 47, 49, 52, 56, 60, 67, 75, 85, 91, 108, 106, 101, 98, 94, 119, 118, - 121, 88, 77, 118, 114, 105, 98, 96, 94, 93, 93, 96, 100, 106, 113, 117, - 120, 124, 123, 126, 130, 140, 150, 156, 147, 161, 167, 179, 138, 163, 163, 154, - 153, 130, 137, 66, 125, 138, 134, 132, 128, 127, 136, 155, 181, 198, 180, 129, - 119, 203, 75, 107, 134, 131, 137, 141, 156, 180, 169, 146, 152, 194, 133, 74, - 136, 129, 133, 139, 142, 170, 170, 193, 164, 155, 119, 39, 109, 112, 109, 118, - 126, 147, 167, 153, 165, 153, 130, 63, 122, 129, 135, 144, 149, 135, 129, 133, - 125, 103, 38, 79, 85, 73, 65, 59, 51, 45, 40, 36, 32, 31, 30, 30, - 48, 49, 51, 54, 60, 66, 74, 84, 93, 108, 103, 89, 88, 96, 122, 124, - 124, 104, 69, 118, 114, 104, 98, 96, 95, 94, 96, 98, 102, 106, 115, 118, - 119, 118, 119, 128, 130, 142, 152, 148, 144, 159, 162, 175, 176, 181, 188, 176, - 160, 155, 156, 61, 124, 136, 133, 133, 126, 122, 133, 156, 187, 170, 124, 143, - 216, 235, 74, 102, 127, 128, 133, 144, 181, 180, 149, 154, 170, 191, 135, 74, - 131, 127, 129, 132, 135, 159, 152, 175, 152, 137, 113, 39, 110, 114, 111, 117, - 130, 159, 170, 160, 176, 166, 146, 75, 115, 132, 135, 142, 144, 119, 135, 142, - 140, 75, 45, 81, 83, 71, 62, 58, 49, 44, 39, 35, 33, 32, 30, 30, - 49, 49, 51, 53, 59, 66, 73, 83, 92, 108, 104, 89, 94, 109, 118, 130, - 126, 107, 69, 114, 113, 104, 100, 99, 97, 96, 98, 100, 103, 108, 115, 117, - 115, 115, 123, 132, 136, 146, 145, 141, 144, 158, 159, 177, 190, 170, 180, 186, - 187, 195, 160, 64, 123, 136, 133, 133, 126, 122, 130, 146, 161, 124, 174, 220, - 237, 194, 56, 101, 124, 124, 131, 142, 171, 162, 160, 183, 185, 184, 100, 73, - 128, 127, 125, 134, 145, 164, 171, 169, 140, 135, 134, 40, 111, 116, 112, 117, - 127, 147, 151, 149, 153, 146, 132, 76, 102, 137, 149, 146, 145, 125, 142, 143, - 127, 50, 48, 82, 80, 69, 62, 57, 49, 43, 37, 35, 34, 32, 30, 30, - 48, 48, 50, 53, 59, 65, 72, 82, 90, 105, 107, 95, 104, 120, 110, 139, - 141, 122, 68, 107, 114, 106, 103, 104, 100, 100, 101, 103, 105, 111, 116, 114, - 109, 116, 128, 131, 145, 151, 142, 139, 147, 156, 153, 173, 143, 166, 130, 171, - 191, 156, 124, 69, 123, 138, 133, 131, 127, 124, 130, 132, 116, 184, 239, 232, - 201, 166, 58, 99, 124, 124, 131, 142, 163, 188, 173, 194, 188, 182, 98, 73, - 128, 126, 125, 133, 157, 159, 182, 171, 144, 144, 149, 41, 113, 118, 115, 118, - 121, 126, 124, 140, 135, 134, 132, 116, 105, 128, 141, 136, 140, 131, 125, 120, - 74, 29, 65, 83, 76, 68, 62, 56, 48, 43, 37, 36, 34, 32, 30, 30, - 47, 48, 49, 52, 57, 64, 71, 81, 90, 105, 112, 106, 107, 125, 116, 152, - 158, 138, 69, 103, 118, 110, 104, 105, 102, 101, 103, 105, 108, 114, 116, 110, - 109, 120, 127, 139, 143, 144, 144, 138, 149, 153, 150, 167, 70, 83, 126, 190, - 158, 100, 142, 72, 122, 139, 133, 130, 127, 125, 129, 126, 181, 244, 236, 208, - 205, 194, 71, 98, 125, 125, 131, 135, 148, 205, 166, 187, 176, 176, 108, 72, - 127, 126, 126, 128, 160, 155, 168, 169, 156, 152, 143, 42, 114, 120, 115, 119, - 121, 122, 118, 131, 131, 142, 144, 146, 125, 125, 128, 111, 118, 125, 113, 90, - 38, 44, 82, 83, 72, 67, 61, 54, 47, 42, 36, 35, 34, 31, 30, 30, - 47, 47, 49, 52, 56, 62, 69, 80, 91, 104, 116, 115, 116, 132, 127, 158, - 148, 118, 76, 90, 118, 114, 106, 106, 104, 104, 106, 108, 112, 116, 117, 111, - 114, 119, 135, 168, 152, 133, 139, 134, 150, 149, 147, 166, 133, 115, 130, 131, - 78, 127, 186, 72, 121, 139, 134, 131, 127, 124, 130, 156, 225, 213, 202, 208, - 200, 215, 68, 100, 125, 126, 132, 131, 156, 196, 152, 185, 180, 182, 112, 71, - 127, 127, 126, 131, 158, 164, 167, 171, 160, 156, 147, 41, 114, 121, 116, 118, - 124, 128, 127, 123, 124, 133, 136, 153, 136, 123, 120, 109, 127, 121, 91, 57, - 39, 72, 85, 81, 70, 66, 59, 52, 46, 41, 37, 36, 33, 31, 30, 30, - 47, 47, 49, 51, 55, 62, 69, 79, 89, 100, 117, 120, 123, 138, 133, 158, - 136, 109, 97, 76, 114, 117, 108, 109, 109, 109, 111, 113, 115, 116, 116, 114, - 117, 122, 150, 192, 173, 129, 124, 135, 150, 144, 146, 168, 167, 193, 160, 124, - 121, 209, 192, 65, 121, 137, 135, 133, 127, 123, 130, 167, 217, 171, 163, 191, - 173, 218, 67, 101, 126, 126, 132, 141, 187, 190, 143, 168, 176, 179, 120, 72, - 127, 127, 127, 136, 146, 164, 173, 171, 158, 154, 151, 40, 113, 120, 115, 115, - 123, 130, 136, 128, 125, 129, 138, 158, 126, 108, 113, 126, 140, 96, 53, 46, - 68, 91, 85, 79, 69, 66, 58, 51, 45, 40, 36, 35, 33, 31, 30, 30, - 46, 47, 49, 51, 55, 62, 69, 79, 87, 97, 113, 118, 117, 137, 134, 159, - 153, 152, 137, 82, 112, 119, 111, 111, 113, 113, 114, 116, 115, 113, 114, 116, - 120, 134, 160, 186, 181, 121, 102, 133, 147, 140, 148, 160, 190, 195, 195, 200, - 211, 228, 210, 73, 122, 136, 135, 134, 127, 124, 133, 164, 190, 193, 208, 165, - 215, 220, 66, 103, 129, 128, 132, 142, 167, 165, 151, 158, 146, 133, 77, 71, - 127, 127, 126, 135, 124, 143, 167, 167, 160, 152, 144, 40, 112, 120, 115, 113, - 122, 130, 140, 134, 133, 140, 149, 135, 99, 105, 125, 122, 89, 49, 56, 81, - 103, 91, 85, 77, 69, 68, 57, 49, 44, 40, 35, 35, 33, 30, 30, 30, - 45, 49, 50, 53, 56, 62, 69, 79, 85, 93, 101, 111, 122, 135, 132, 150, - 165, 152, 150, 97, 107, 121, 114, 109, 114, 112, 117, 113, 117, 112, 115, 117, - 129, 149, 159, 150, 180, 88, 78, 132, 141, 138, 146, 159, 194, 191, 205, 214, - 219, 231, 218, 74, 120, 135, 132, 130, 128, 132, 139, 162, 179, 193, 226, 215, - 200, 186, 69, 107, 135, 129, 129, 133, 123, 143, 174, 189, 195, 172, 103, 69, - 122, 127, 123, 134, 106, 97, 113, 143, 156, 155, 139, 44, 119, 122, 117, 115, - 126, 136, 137, 118, 143, 143, 112, 67, 69, 72, 61, 60, 65, 78, 96, 104, - 101, 91, 83, 77, 73, 69, 60, 48, 41, 38, 34, 33, 30, 29, 30, 30, - 45, 48, 50, 53, 56, 62, 69, 77, 83, 89, 95, 107, 114, 121, 135, 144, - 151, 137, 141, 134, 93, 120, 115, 115, 117, 117, 119, 114, 113, 111, 114, 125, - 143, 182, 165, 175, 148, 51, 91, 132, 142, 141, 150, 161, 194, 178, 192, 213, - 195, 220, 189, 75, 118, 136, 135, 134, 129, 129, 139, 165, 198, 204, 191, 183, - 159, 157, 56, 108, 135, 130, 125, 134, 153, 189, 189, 190, 195, 175, 104, 64, - 121, 127, 126, 134, 142, 144, 120, 114, 127, 130, 120, 42, 113, 123, 115, 121, - 129, 130, 121, 127, 146, 138, 65, 57, 108, 115, 110, 113, 113, 112, 116, 114, - 103, 90, 84, 77, 73, 68, 59, 48, 42, 37, 33, 32, 29, 28, 30, 30, - 46, 48, 49, 52, 55, 60, 66, 73, 79, 86, 91, 101, 108, 116, 137, 130, - 126, 126, 158, 151, 112, 107, 126, 115, 119, 116, 117, 119, 115, 113, 114, 132, - 173, 191, 173, 173, 99, 55, 111, 138, 144, 141, 152, 169, 187, 180, 200, 199, - 185, 201, 153, 90, 109, 142, 133, 129, 130, 132, 136, 166, 202, 202, 164, 120, - 150, 152, 56, 111, 134, 128, 126, 141, 178, 200, 171, 181, 181, 166, 98, 69, - 120, 119, 125, 128, 147, 155, 160, 154, 126, 115, 120, 39, 115, 119, 115, 117, - 126, 122, 114, 118, 130, 133, 91, 91, 145, 142, 143, 141, 138, 129, 124, 120, - 108, 94, 87, 79, 73, 67, 59, 50, 43, 38, 33, 32, 29, 28, 30, 30, - 46, 48, 48, 50, 54, 58, 63, 69, 77, 83, 89, 98, 109, 126, 153, 155, - 156, 149, 164, 162, 136, 117, 115, 123, 123, 123, 121, 121, 116, 123, 131, 164, - 187, 186, 179, 153, 57, 84, 119, 141, 148, 142, 156, 174, 183, 189, 205, 196, - 189, 211, 187, 134, 100, 135, 135, 132, 131, 133, 134, 155, 189, 180, 197, 172, - 120, 131, 68, 99, 135, 130, 126, 144, 181, 178, 161, 180, 173, 163, 110, 67, - 118, 119, 123, 131, 152, 125, 155, 155, 160, 154, 139, 56, 107, 119, 119, 122, - 128, 116, 122, 123, 114, 111, 112, 92, 116, 120, 138, 143, 140, 137, 132, 124, - 115, 102, 91, 83, 75, 67, 59, 51, 44, 38, 34, 32, 29, 28, 30, 30, - 46, 47, 47, 49, 52, 56, 59, 65, 74, 81, 87, 93, 101, 111, 134, 156, - 166, 167, 168, 160, 148, 150, 114, 126, 120, 126, 120, 117, 123, 138, 155, 185, - 193, 185, 164, 87, 62, 103, 122, 138, 149, 149, 165, 174, 190, 193, 194, 192, - 192, 204, 200, 192, 136, 132, 138, 130, 131, 133, 140, 162, 176, 178, 200, 195, - 119, 123, 98, 97, 129, 131, 129, 163, 180, 161, 166, 179, 170, 166, 124, 61, - 115, 125, 121, 127, 147, 102, 160, 150, 152, 150, 146, 93, 92, 119, 115, 116, - 126, 104, 119, 101, 111, 111, 115, 88, 58, 85, 122, 110, 110, 118, 121, 122, - 120, 110, 97, 88, 77, 68, 60, 53, 45, 39, 34, 32, 29, 28, 30, 30, - 46, 47, 47, 48, 51, 54, 57, 62, 71, 77, 82, 89, 101, 108, 115, 134, - 132, 158, 176, 136, 128, 140, 133, 146, 127, 116, 121, 141, 174, 169, 136, 138, - 174, 170, 109, 50, 94, 112, 121, 138, 167, 181, 199, 194, 195, 195, 201, 207, - 201, 201, 192, 179, 187, 200, 185, 111, 128, 151, 158, 175, 178, 171, 169, 184, - 194, 190, 174, 138, 116, 123, 153, 183, 163, 152, 158, 171, 166, 156, 108, 88, - 114, 111, 110, 105, 113, 91, 163, 124, 142, 144, 135, 118, 112, 106, 106, 119, - 129, 81, 100, 98, 125, 118, 91, 70, 87, 116, 102, 73, 75, 83, 87, 96, - 103, 106, 103, 92, 81, 69, 61, 54, 46, 39, 34, 32, 29, 28, 30, 30, - 46, 47, 46, 47, 50, 52, 56, 60, 68, 74, 79, 84, 88, 101, 108, 119, - 125, 155, 157, 131, 104, 108, 127, 152, 149, 138, 147, 186, 195, 156, 145, 175, - 168, 132, 63, 84, 107, 113, 116, 131, 171, 192, 203, 195, 189, 195, 209, 210, - 198, 204, 188, 177, 200, 193, 178, 85, 125, 179, 177, 175, 182, 159, 179, 196, - 179, 179, 174, 160, 106, 114, 170, 170, 139, 150, 159, 168, 163, 144, 118, 124, - 107, 88, 91, 96, 101, 106, 155, 138, 139, 134, 127, 128, 129, 92, 94, 115, - 119, 64, 70, 79, 103, 109, 97, 97, 113, 117, 91, 78, 83, 88, 83, 82, - 86, 94, 102, 95, 81, 72, 61, 56, 47, 40, 35, 33, 30, 29, 30, 30, - 46, 46, 45, 46, 49, 50, 55, 58, 65, 72, 77, 83, 89, 94, 103, 110, - 113, 150, 140, 151, 157, 158, 175, 176, 186, 170, 177, 220, 203, 194, 190, 212, - 169, 73, 71, 111, 113, 110, 114, 131, 177, 191, 197, 182, 181, 192, 202, 197, - 201, 196, 176, 187, 206, 186, 162, 72, 129, 189, 177, 169, 174, 174, 192, 187, - 158, 155, 161, 160, 94, 101, 164, 144, 135, 155, 160, 162, 161, 137, 155, 103, - 86, 70, 71, 55, 70, 120, 156, 141, 137, 132, 129, 132, 119, 77, 73, 116, - 124, 100, 97, 116, 115, 118, 105, 105, 127, 116, 104, 98, 105, 104, 95, 90, - 81, 75, 80, 91, 84, 75, 62, 58, 49, 42, 37, 34, 31, 29, 30, 30, - 45, 46, 45, 45, 49, 50, 54, 57, 62, 68, 73, 80, 86, 90, 97, 105, - 110, 113, 124, 157, 171, 181, 193, 196, 214, 138, 198, 216, 175, 191, 187, 155, - 79, 72, 108, 113, 111, 109, 113, 126, 159, 161, 162, 160, 166, 178, 190, 191, - 193, 187, 183, 195, 204, 181, 173, 70, 121, 143, 123, 141, 161, 171, 184, 177, - 161, 159, 153, 135, 78, 102, 161, 153, 155, 162, 140, 117, 102, 54, 60, 66, - 93, 62, 111, 123, 125, 158, 154, 138, 135, 130, 127, 131, 118, 81, 77, 115, - 127, 116, 108, 118, 125, 130, 91, 102, 126, 100, 96, 91, 94, 86, 80, 81, - 76, 71, 60, 77, 88, 75, 64, 60, 51, 44, 38, 35, 31, 29, 30, 30, - 44, 45, 44, 45, 47, 48, 52, 54, 60, 65, 70, 77, 82, 86, 92, 98, - 103, 107, 111, 123, 160, 161, 179, 196, 180, 164, 213, 191, 140, 132, 77, 51, - 81, 105, 114, 114, 106, 109, 113, 120, 135, 115, 104, 104, 107, 111, 117, 119, - 112, 102, 102, 111, 116, 105, 108, 71, 118, 112, 86, 83, 90, 97, 99, 102, - 97, 94, 83, 78, 64, 99, 132, 105, 90, 80, 61, 48, 53, 48, 66, 83, - 70, 81, 127, 108, 85, 94, 81, 78, 76, 75, 74, 82, 69, 58, 76, 110, - 127, 123, 101, 106, 120, 101, 88, 117, 102, 72, 78, 83, 87, 80, 76, 69, - 71, 71, 56, 57, 82, 78, 68, 62, 53, 47, 39, 35, 32, 30, 30, 30, - 44, 44, 43, 44, 46, 47, 50, 52, 57, 64, 68, 74, 79, 83, 89, 93, - 99, 103, 107, 101, 92, 94, 120, 128, 105, 148, 143, 91, 79, 54, 66, 105, - 112, 115, 111, 103, 102, 107, 112, 115, 117, 98, 90, 94, 94, 92, 95, 106, - 103, 94, 92, 97, 98, 100, 96, 97, 115, 111, 96, 91, 92, 92, 91, 90, - 89, 92, 91, 86, 86, 98, 103, 94, 86, 83, 84, 84, 83, 77, 83, 79, - 76, 91, 98, 85, 74, 80, 80, 77, 80, 83, 85, 85, 83, 84, 101, 108, - 121, 131, 114, 98, 93, 72, 101, 98, 77, 78, 80, 83, 86, 82, 80, 72, - 68, 61, 55, 41, 66, 82, 71, 63, 54, 47, 40, 36, 32, 31, 31, 31, - 44, 44, 43, 44, 46, 46, 48, 50, 55, 61, 65, 71, 75, 79, 85, 88, - 91, 95, 105, 113, 111, 102, 93, 81, 75, 70, 70, 69, 81, 85, 94, 107, - 107, 107, 102, 97, 98, 105, 109, 110, 108, 104, 107, 112, 114, 112, 117, 123, - 115, 109, 107, 108, 108, 112, 102, 106, 104, 109, 106, 104, 104, 103, 104, 105, - 102, 99, 100, 99, 97, 96, 97, 100, 102, 102, 101, 98, 100, 94, 97, 87, - 93, 91, 97, 92, 92, 91, 88, 84, 88, 92, 95, 93, 100, 98, 101, 109, - 116, 133, 131, 113, 80, 95, 98, 78, 75, 87, 77, 81, 80, 78, 73, 66, - 62, 60, 59, 34, 54, 81, 72, 63, 54, 47, 40, 36, 33, 31, 32, 32, - 43, 43, 43, 44, 46, 45, 48, 50, 53, 59, 62, 67, 71, 76, 81, 83, - 85, 94, 97, 103, 104, 106, 102, 99, 103, 100, 97, 98, 92, 95, 106, 104, - 104, 98, 99, 94, 95, 104, 107, 107, 101, 105, 110, 111, 114, 109, 113, 123, - 115, 105, 103, 104, 107, 108, 103, 102, 101, 101, 102, 104, 103, 102, 102, 102, - 101, 97, 97, 96, 91, 91, 89, 97, 102, 99, 97, 98, 98, 94, 92, 87, - 85, 86, 86, 87, 84, 86, 84, 84, 86, 89, 92, 91, 97, 96, 100, 105, - 115, 121, 110, 99, 93, 92, 76, 71, 78, 80, 67, 72, 71, 73, 68, 62, - 62, 67, 61, 34, 48, 76, 73, 63, 54, 47, 40, 37, 33, 31, 32, 32, - 43, 44, 44, 45, 44, 46, 49, 51, 51, 56, 60, 63, 68, 72, 78, 80, - 85, 90, 93, 97, 99, 99, 98, 99, 102, 98, 99, 98, 98, 103, 104, 100, - 99, 96, 93, 91, 93, 99, 101, 100, 98, 100, 105, 106, 107, 106, 109, 118, - 111, 101, 97, 99, 102, 103, 100, 100, 100, 99, 99, 99, 99, 98, 97, 96, - 94, 93, 92, 92, 90, 90, 88, 92, 93, 92, 91, 91, 91, 90, 89, 85, - 85, 82, 82, 83, 82, 82, 82, 83, 83, 86, 87, 89, 93, 95, 101, 107, - 110, 80, 80, 93, 98, 82, 102, 94, 84, 69, 59, 56, 61, 61, 56, 60, - 58, 62, 49, 37, 40, 74, 70, 64, 54, 47, 40, 37, 33, 31, 32, 31, - 43, 44, 45, 45, 45, 48, 50, 52, 52, 54, 59, 61, 64, 68, 73, 77, - 81, 85, 89, 90, 92, 93, 93, 94, 94, 94, 93, 93, 96, 101, 101, 98, - 96, 92, 89, 88, 91, 94, 96, 95, 94, 96, 101, 103, 104, 103, 105, 113, - 108, 98, 94, 95, 98, 100, 97, 98, 99, 98, 97, 97, 96, 95, 94, 92, - 90, 90, 89, 88, 88, 86, 86, 86, 85, 84, 84, 85, 85, 84, 83, 83, - 82, 81, 81, 81, 81, 81, 81, 83, 82, 84, 85, 87, 91, 94, 101, 103, - 99, 84, 98, 96, 71, 60, 115, 125, 116, 106, 100, 92, 83, 67, 52, 52, - 62, 58, 46, 29, 30, 72, 72, 64, 55, 47, 40, 37, 33, 31, 32, 31, - 43, 44, 45, 46, 46, 47, 50, 51, 51, 53, 57, 59, 60, 64, 68, 72, - 74, 78, 81, 82, 85, 86, 87, 88, 87, 87, 88, 88, 91, 95, 94, 92, - 90, 87, 84, 83, 86, 89, 91, 90, 89, 91, 96, 98, 99, 97, 100, 106, - 102, 94, 90, 90, 92, 94, 93, 93, 93, 92, 91, 91, 90, 90, 88, 86, - 85, 84, 83, 82, 81, 80, 80, 79, 78, 77, 76, 79, 78, 77, 77, 77, - 77, 76, 75, 75, 75, 75, 75, 77, 77, 78, 81, 83, 87, 91, 99, 96, - 78, 76, 87, 77, 46, 47, 117, 130, 128, 126, 126, 121, 115, 105, 90, 52, - 54, 47, 33, 22, 32, 71, 71, 64, 53, 46, 39, 36, 32, 31, 32, 31, - 43, 44, 45, 46, 46, 47, 49, 50, 49, 51, 55, 56, 59, 61, 66, 68, - 70, 73, 76, 77, 80, 82, 84, 84, 83, 83, 84, 85, 88, 90, 89, 87, - 86, 84, 81, 81, 84, 87, 88, 86, 85, 87, 91, 93, 94, 92, 94, 101, - 98, 91, 86, 85, 88, 90, 89, 89, 89, 88, 88, 87, 87, 86, 85, 82, - 81, 80, 79, 77, 77, 76, 75, 73, 73, 72, 71, 73, 73, 72, 71, 73, - 73, 72, 72, 72, 72, 72, 72, 72, 73, 75, 77, 80, 85, 89, 99, 94, - 68, 61, 55, 64, 46, 52, 115, 117, 118, 121, 123, 124, 125, 124, 122, 62, - 34, 26, 24, 27, 41, 71, 68, 63, 52, 45, 38, 36, 32, 30, 31, 30, - 43, 44, 45, 46, 46, 47, 48, 49, 48, 50, 52, 54, 57, 59, 63, 64, - 67, 70, 72, 73, 75, 77, 80, 80, 78, 79, 81, 83, 86, 86, 84, 83, - 82, 81, 79, 79, 82, 85, 85, 83, 81, 82, 85, 88, 90, 87, 88, 95, - 93, 87, 83, 81, 84, 86, 86, 84, 86, 85, 84, 84, 83, 82, 81, 78, - 77, 76, 75, 73, 72, 72, 71, 69, 69, 68, 67, 68, 68, 67, 67, 69, - 69, 68, 67, 67, 67, 67, 67, 68, 69, 72, 75, 77, 82, 88, 98, 91, - 71, 62, 50, 75, 55, 61, 118, 113, 113, 115, 118, 120, 120, 120, 125, 78, - 32, 22, 47, 36, 43, 70, 69, 61, 51, 43, 37, 35, 31, 30, 30, 29, - 43, 44, 45, 46, 46, 47, 47, 48, 48, 49, 51, 52, 54, 56, 58, 60, - 63, 65, 66, 67, 69, 71, 74, 75, 73, 75, 77, 80, 83, 81, 79, 78, - 77, 75, 74, 75, 78, 80, 80, 78, 77, 78, 80, 83, 85, 82, 83, 89, - 88, 84, 78, 75, 78, 81, 81, 80, 80, 79, 78, 78, 78, 77, 76, 74, - 72, 72, 71, 69, 68, 67, 66, 66, 66, 65, 64, 63, 63, 62, 62, 64, - 63, 62, 62, 61, 61, 61, 61, 62, 64, 67, 70, 73, 79, 85, 95, 90, - 75, 68, 65, 85, 59, 62, 118, 112, 111, 112, 113, 115, 118, 121, 123, 72, - 40, 45, 65, 33, 46, 70, 69, 61, 51, 43, 37, 34, 31, 29, 30, 29, - 42, 43, 44, 45, 45, 46, 46, 47, 48, 49, 50, 51, 51, 53, 55, 56, - 59, 61, 62, 63, 64, 67, 69, 70, 69, 71, 74, 77, 80, 77, 75, 73, - 72, 70, 69, 71, 74, 75, 75, 75, 73, 74, 76, 79, 80, 77, 78, 83, - 84, 80, 74, 71, 74, 77, 77, 76, 75, 74, 73, 73, 73, 72, 71, 70, - 69, 68, 67, 65, 64, 63, 62, 63, 62, 61, 61, 59, 59, 58, 57, 59, - 60, 59, 58, 58, 58, 58, 59, 60, 60, 63, 67, 70, 75, 82, 93, 94, - 73, 62, 69, 75, 57, 60, 113, 115, 113, 113, 115, 114, 116, 119, 106, 38, - 33, 60, 49, 24, 59, 73, 62, 59, 50, 42, 36, 34, 31, 29, 30, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 49, 49, 50, 51, 52, 53, 55, 55, - 55, 57, 59, 61, 64, 65, 67, 68, 67, 69, 73, 77, 77, 75, 73, 71, - 68, 66, 67, 69, 72, 73, 72, 72, 74, 76, 78, 78, 76, 75, 76, 81, - 82, 79, 73, 71, 72, 74, 75, 75, 74, 72, 70, 70, 70, 69, 68, 66, - 66, 65, 64, 64, 63, 62, 61, 59, 58, 57, 57, 56, 56, 55, 54, 57, - 57, 57, 57, 57, 56, 56, 57, 58, 59, 61, 63, 67, 74, 80, 91, 98, - 73, 52, 66, 62, 52, 50, 95, 113, 117, 119, 121, 122, 122, 112, 68, 27, - 46, 57, 35, 36, 71, 73, 61, 56, 48, 43, 37, 34, 32, 30, 28, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 49, 50, 51, 51, 51, 51, 53, 54, - 54, 55, 57, 58, 60, 61, 63, 64, 65, 67, 71, 74, 73, 72, 70, 68, - 67, 66, 67, 68, 69, 71, 70, 68, 69, 71, 73, 73, 71, 70, 71, 76, - 78, 75, 70, 67, 68, 69, 71, 72, 72, 70, 68, 67, 66, 65, 65, 64, - 65, 64, 63, 61, 60, 59, 58, 58, 57, 56, 56, 55, 55, 54, 53, 55, - 55, 55, 55, 54, 54, 54, 54, 54, 55, 57, 60, 65, 71, 77, 88, 96, - 72, 43, 57, 47, 43, 37, 63, 99, 120, 123, 118, 116, 92, 63, 45, 37, - 57, 45, 21, 51, 75, 66, 62, 55, 47, 42, 36, 33, 31, 30, 28, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 49, 50, 51, 50, 49, 49, 51, 51, - 51, 52, 54, 56, 57, 58, 60, 62, 64, 66, 69, 71, 69, 68, 66, 66, - 65, 65, 66, 67, 68, 69, 68, 66, 65, 67, 69, 69, 67, 66, 67, 72, - 74, 71, 66, 64, 64, 66, 67, 69, 69, 67, 65, 64, 63, 62, 61, 62, - 62, 61, 60, 58, 57, 56, 56, 55, 55, 54, 53, 53, 52, 51, 50, 51, - 52, 52, 52, 51, 51, 51, 51, 52, 52, 54, 56, 62, 68, 74, 82, 89, - 81, 48, 40, 39, 41, 39, 42, 54, 68, 70, 69, 68, 48, 32, 41, 54, - 54, 28, 37, 67, 76, 61, 61, 52, 45, 40, 35, 32, 31, 30, 28, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 50, 51, 50, 50, 48, 48, 48, 49, - 48, 50, 51, 53, 55, 57, 58, 60, 63, 66, 69, 69, 67, 66, 65, 64, - 62, 62, 64, 66, 67, 68, 67, 65, 64, 66, 68, 68, 66, 65, 66, 70, - 73, 71, 67, 64, 64, 65, 67, 66, 65, 63, 62, 61, 61, 60, 60, 60, - 60, 59, 59, 58, 57, 56, 55, 54, 53, 52, 51, 51, 50, 49, 49, 50, - 50, 50, 50, 49, 49, 49, 49, 51, 51, 53, 55, 61, 66, 72, 79, 82, - 90, 70, 43, 38, 38, 46, 45, 53, 52, 50, 50, 43, 44, 47, 56, 57, - 37, 28, 60, 75, 72, 59, 55, 49, 43, 39, 34, 31, 30, 30, 28, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 52, 51, 49, 49, 49, 48, 48, 47, - 47, 48, 50, 51, 54, 55, 57, 58, 61, 65, 66, 65, 64, 64, 64, 63, - 58, 59, 62, 64, 65, 66, 66, 63, 63, 65, 66, 66, 65, 63, 65, 69, - 72, 70, 66, 63, 62, 64, 66, 65, 63, 62, 60, 60, 60, 59, 58, 59, - 58, 58, 57, 56, 56, 55, 54, 52, 51, 50, 49, 49, 48, 47, 47, 48, - 49, 49, 49, 47, 47, 47, 47, 50, 50, 52, 55, 58, 64, 68, 75, 77, - 84, 90, 75, 50, 42, 50, 48, 54, 55, 50, 52, 52, 42, 44, 51, 36, - 36, 64, 77, 73, 65, 57, 50, 46, 40, 37, 33, 30, 29, 30, 28, 29, - 42, 43, 43, 44, 45, 45, 46, 47, 51, 51, 49, 49, 50, 49, 48, 48, - 47, 49, 51, 52, 52, 54, 55, 56, 58, 62, 62, 61, 61, 61, 62, 60, - 57, 58, 61, 62, 63, 64, 63, 61, 61, 63, 64, 64, 63, 61, 63, 67, - 70, 68, 65, 61, 61, 62, 64, 64, 63, 61, 60, 59, 58, 58, 57, 58, - 58, 57, 57, 55, 54, 53, 53, 51, 51, 50, 49, 49, 48, 47, 47, 48, - 48, 48, 48, 47, 47, 47, 47, 47, 48, 50, 52, 55, 60, 64, 70, 69, - 78, 89, 92, 81, 63, 59, 49, 50, 47, 43, 44, 40, 46, 40, 43, 54, - 69, 81, 79, 69, 61, 54, 49, 45, 40, 37, 32, 29, 29, 30, 28, 29, - 42, 42, 43, 44, 45, 45, 46, 47, 48, 48, 47, 48, 48, 48, 48, 48, - 48, 49, 50, 51, 52, 52, 54, 55, 56, 58, 58, 57, 57, 57, 58, 57, - 56, 57, 59, 61, 61, 62, 61, 60, 60, 61, 62, 63, 61, 60, 61, 63, - 66, 66, 63, 59, 58, 59, 61, 62, 61, 59, 59, 58, 57, 56, 55, 57, - 58, 57, 56, 54, 53, 52, 51, 51, 51, 50, 49, 49, 48, 47, 47, 46, - 46, 45, 45, 44, 44, 44, 44, 43, 44, 47, 49, 51, 56, 61, 66, 67, - 75, 83, 89, 92, 80, 73, 63, 55, 48, 45, 46, 44, 48, 53, 67, 82, - 86, 80, 75, 67, 61, 53, 49, 46, 41, 38, 34, 32, 31, 30, 28, 29, - 42, 42, 43, 44, 45, 46, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, - 49, 49, 50, 52, 53, 52, 54, 55, 56, 56, 56, 56, 56, 56, 56, 55, - 55, 57, 59, 60, 62, 61, 60, 60, 59, 60, 61, 62, 61, 60, 60, 61, - 64, 65, 62, 58, 57, 57, 59, 60, 59, 58, 57, 57, 56, 55, 55, 56, - 57, 56, 55, 53, 52, 51, 51, 51, 51, 50, 49, 49, 48, 47, 47, 45, - 45, 44, 43, 43, 43, 43, 42, 40, 42, 45, 47, 50, 54, 60, 63, 67, - 72, 78, 82, 85, 84, 81, 78, 75, 69, 66, 65, 64, 69, 73, 78, 82, - 80, 77, 71, 65, 59, 52, 49, 47, 42, 38, 35, 34, 31, 29, 28, 29, - 42, 42, 43, 44, 45, 45, 46, 47, 46, 46, 46, 46, 46, 47, 48, 48, - 49, 49, 50, 51, 53, 52, 54, 55, 55, 55, 55, 55, 55, 55, 55, 54, - 55, 57, 58, 60, 61, 60, 59, 59, 59, 60, 61, 61, 61, 60, 59, 60, - 63, 64, 61, 58, 56, 57, 58, 59, 58, 57, 57, 56, 56, 55, 54, 56, - 56, 55, 55, 53, 51, 51, 50, 50, 50, 49, 48, 48, 47, 46, 46, 45, - 44, 43, 42, 42, 42, 42, 41, 39, 41, 43, 45, 47, 52, 57, 60, 63, - 67, 73, 76, 79, 82, 82, 83, 86, 83, 82, 82, 80, 80, 79, 78, 77, - 75, 70, 65, 60, 55, 49, 46, 45, 41, 37, 35, 34, 31, 29, 28, 29, - 42, 42, 43, 44, 44, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 48, - 48, 49, 50, 50, 51, 52, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 56, 58, 59, 59, 59, 58, 57, 58, 59, 59, 60, 59, 59, 58, 59, - 62, 63, 60, 58, 56, 55, 57, 57, 57, 56, 55, 55, 54, 54, 53, 54, - 55, 54, 53, 52, 51, 50, 49, 49, 48, 48, 47, 46, 46, 45, 44, 44, - 43, 42, 42, 42, 42, 42, 41, 38, 39, 42, 43, 45, 49, 53, 57, 59, - 63, 68, 70, 72, 74, 76, 77, 77, 77, 78, 78, 78, 75, 73, 72, 72, - 69, 64, 59, 56, 51, 46, 43, 42, 39, 35, 33, 33, 31, 29, 28, 29, - 42, 42, 43, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 46, 47, 47, - 48, 48, 49, 50, 50, 51, 54, 55, 53, 53, 53, 53, 53, 53, 53, 53, - 54, 55, 57, 58, 59, 58, 57, 56, 57, 58, 59, 59, 59, 58, 57, 58, - 61, 62, 59, 57, 55, 54, 55, 56, 56, 55, 54, 54, 53, 52, 52, 53, - 54, 53, 52, 51, 50, 49, 49, 48, 47, 47, 46, 45, 45, 44, 43, 43, - 43, 42, 41, 41, 41, 41, 41, 38, 39, 40, 41, 43, 47, 51, 53, 56, - 59, 63, 66, 68, 70, 70, 70, 73, 75, 76, 76, 74, 72, 71, 69, 68, - 64, 59, 55, 52, 49, 43, 41, 39, 37, 34, 32, 32, 30, 29, 29, 29, - 42, 42, 43, 43, 43, 44, 45, 45, 45, 45, 45, 45, 45, 45, 46, 47, - 47, 48, 49, 49, 49, 50, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, - 53, 55, 57, 58, 58, 57, 56, 56, 56, 57, 58, 58, 58, 57, 56, 57, - 60, 61, 58, 56, 55, 53, 54, 55, 55, 54, 53, 53, 52, 51, 51, 53, - 53, 52, 51, 51, 50, 49, 49, 47, 47, 46, 45, 45, 44, 43, 42, 43, - 42, 42, 41, 41, 41, 41, 40, 37, 38, 38, 39, 41, 44, 48, 50, 53, - 55, 59, 62, 63, 65, 65, 65, 68, 71, 71, 69, 66, 65, 64, 63, 61, - 59, 54, 51, 48, 44, 39, 38, 37, 35, 32, 31, 31, 30, 29, 29, 29, - 42, 42, 43, 43, 43, 44, 45, 45, 45, 45, 45, 45, 45, 45, 46, 47, - 47, 48, 49, 49, 49, 50, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, - 53, 55, 56, 57, 57, 56, 56, 55, 55, 56, 57, 58, 57, 56, 55, 56, - 60, 60, 57, 56, 55, 53, 53, 54, 54, 53, 53, 53, 52, 51, 50, 52, - 52, 51, 51, 51, 50, 49, 48, 47, 46, 45, 45, 44, 44, 43, 42, 42, - 42, 41, 41, 41, 41, 41, 40, 37, 37, 38, 38, 40, 42, 46, 48, 49, - 52, 55, 57, 56, 58, 61, 61, 63, 66, 66, 64, 64, 61, 59, 57, 55, - 54, 50, 47, 44, 40, 36, 35, 35, 33, 31, 30, 30, 30, 29, 29, 29, - 42, 42, 43, 43, 43, 43, 43, 43, 42, 43, 43, 44, 44, 45, 46, 47, - 47, 47, 48, 49, 49, 51, 53, 53, 51, 51, 51, 50, 50, 50, 50, 51, - 53, 53, 54, 55, 55, 55, 55, 55, 55, 56, 57, 57, 56, 55, 54, 55, - 57, 59, 57, 54, 52, 50, 50, 53, 54, 53, 53, 51, 50, 50, 49, 51, - 51, 50, 50, 50, 50, 49, 48, 47, 46, 45, 45, 44, 44, 43, 43, 43, - 43, 42, 41, 41, 40, 39, 38, 37, 38, 39, 40, 40, 42, 44, 46, 49, - 51, 53, 54, 55, 55, 57, 58, 60, 60, 60, 60, 59, 57, 55, 54, 52, - 49, 46, 44, 41, 39, 36, 34, 34, 32, 30, 29, 29, 29, 29, 29, 29, - 42, 42, 42, 42, 42, 42, 42, 42, 41, 42, 43, 44, 44, 45, 46, 46, - 46, 47, 48, 49, 49, 51, 52, 52, 50, 50, 50, 50, 50, 50, 50, 51, - 52, 53, 54, 54, 54, 54, 54, 54, 54, 55, 56, 56, 55, 54, 53, 54, - 57, 58, 56, 53, 51, 50, 50, 52, 53, 53, 53, 51, 50, 49, 48, 50, - 51, 50, 49, 49, 49, 49, 48, 47, 46, 45, 45, 44, 44, 44, 44, 44, - 43, 42, 41, 41, 40, 38, 38, 38, 38, 40, 40, 40, 41, 43, 45, 46, - 47, 49, 51, 51, 52, 53, 54, 55, 55, 55, 55, 54, 52, 51, 50, 49, - 46, 43, 42, 40, 38, 35, 34, 33, 32, 30, 29, 29, 29, 29, 29, 29, - 42, 42, 42, 42, 42, 42, 42, 41, 41, 42, 42, 43, 44, 44, 45, 46, - 46, 47, 47, 48, 49, 50, 52, 51, 49, 49, 49, 49, 49, 49, 49, 50, - 52, 53, 53, 54, 53, 53, 53, 53, 54, 55, 55, 55, 54, 53, 52, 53, - 56, 58, 56, 53, 51, 49, 49, 51, 52, 52, 52, 51, 50, 49, 48, 50, - 50, 49, 49, 49, 49, 48, 47, 47, 46, 45, 45, 44, 44, 44, 44, 43, - 42, 42, 41, 41, 40, 38, 38, 39, 39, 40, 40, 40, 41, 42, 43, 43, - 45, 46, 47, 47, 47, 48, 49, 51, 51, 51, 50, 48, 47, 45, 45, 44, - 42, 40, 38, 38, 37, 34, 33, 33, 31, 30, 29, 29, 29, 29, 29, 29, - 42, 42, 42, 42, 42, 42, 42, 41, 41, 41, 42, 43, 43, 44, 44, 45, - 46, 46, 47, 48, 49, 50, 51, 50, 49, 49, 49, 49, 49, 49, 49, 49, - 51, 52, 53, 53, 52, 52, 52, 52, 53, 53, 54, 54, 53, 52, 51, 52, - 55, 57, 55, 52, 50, 49, 49, 50, 51, 51, 51, 50, 49, 48, 48, 49, - 49, 49, 48, 49, 48, 47, 47, 47, 46, 45, 45, 43, 43, 43, 43, 43, - 42, 41, 41, 41, 40, 38, 38, 39, 39, 39, 39, 39, 39, 40, 41, 43, - 43, 44, 45, 45, 45, 45, 46, 48, 48, 48, 48, 46, 44, 43, 41, 39, - 38, 37, 36, 36, 35, 33, 32, 31, 31, 30, 29, 29, 29, 29, 28, 28, - 41, 41, 41, 41, 41, 41, 41, 41, 40, 41, 42, 42, 43, 43, 44, 45, - 45, 46, 47, 48, 50, 50, 50, 48, 48, 48, 48, 48, 48, 48, 48, 49, - 51, 51, 53, 52, 51, 51, 51, 51, 52, 52, 53, 53, 52, 51, 50, 51, - 54, 56, 53, 51, 50, 48, 48, 49, 50, 50, 50, 49, 49, 48, 47, 49, - 49, 48, 48, 48, 48, 47, 46, 46, 46, 45, 45, 43, 43, 43, 43, 42, - 42, 41, 40, 40, 40, 38, 38, 39, 38, 38, 38, 38, 38, 38, 39, 43, - 43, 43, 44, 44, 43, 43, 43, 46, 46, 46, 45, 44, 42, 40, 39, 37, - 36, 34, 34, 35, 33, 31, 31, 30, 30, 30, 29, 29, 29, 29, 28, 28, - 41, 41, 41, 41, 41, 41, 41, 40, 40, 40, 41, 42, 42, 43, 44, 44, - 45, 45, 46, 47, 50, 49, 49, 48, 47, 47, 47, 47, 48, 48, 48, 49, - 50, 51, 52, 52, 50, 50, 50, 50, 51, 51, 52, 52, 51, 50, 49, 50, - 53, 55, 52, 51, 50, 48, 48, 49, 49, 49, 49, 49, 48, 47, 47, 48, - 49, 48, 47, 47, 47, 46, 46, 46, 46, 45, 45, 42, 42, 42, 42, 42, - 41, 40, 40, 40, 40, 38, 38, 40, 40, 39, 38, 39, 39, 38, 39, 41, - 41, 42, 40, 41, 41, 39, 40, 42, 42, 42, 42, 41, 39, 37, 36, 35, - 34, 33, 32, 32, 31, 30, 30, 29, 30, 30, 29, 29, 29, 29, 28, 27, - 40, 40, 40, 40, 41, 41, 41, 40, 40, 40, 41, 41, 41, 42, 43, 43, - 44, 45, 46, 47, 49, 49, 49, 48, 47, 47, 47, 47, 47, 48, 48, 48, - 50, 50, 51, 51, 50, 50, 50, 49, 50, 51, 52, 52, 50, 50, 49, 50, - 53, 55, 53, 51, 49, 48, 48, 49, 49, 49, 49, 49, 48, 48, 47, 48, - 48, 47, 47, 47, 47, 46, 46, 46, 45, 44, 44, 42, 42, 42, 42, 42, - 41, 40, 40, 40, 39, 38, 38, 39, 39, 38, 37, 38, 38, 37, 37, 39, - 39, 39, 38, 39, 39, 38, 39, 40, 40, 39, 39, 38, 37, 36, 35, 34, - 33, 32, 31, 30, 30, 29, 29, 29, 30, 29, 29, 29, 29, 29, 28, 27, - 38, 39, 39, 40, 41, 41, 41, 40, 40, 40, 41, 41, 41, 41, 42, 43, - 43, 44, 46, 48, 49, 49, 49, 49, 48, 48, 48, 47, 46, 47, 48, 48, - 49, 49, 50, 50, 50, 50, 50, 49, 49, 50, 50, 51, 50, 49, 49, 50, - 53, 55, 54, 52, 50, 50, 49, 50, 51, 51, 51, 50, 49, 48, 47, 47, - 47, 47, 47, 46, 46, 46, 46, 44, 43, 43, 42, 42, 42, 42, 42, 42, - 42, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 36, 36, 36, 36, 37, - 37, 37, 37, 37, 37, 37, 37, 38, 37, 36, 36, 37, 36, 35, 34, 32, - 31, 30, 29, 29, 28, 28, 29, 30, 30, 29, 29, 29, 29, 29, 28, 27, - 38, 39, 39, 40, 41, 41, 41, 40, 40, 40, 41, 41, 41, 41, 42, 43, - 43, 44, 46, 48, 49, 49, 49, 49, 49, 49, 49, 48, 47, 48, 48, 48, - 49, 49, 50, 50, 50, 50, 50, 49, 49, 50, 50, 51, 50, 49, 48, 50, - 53, 55, 55, 53, 51, 50, 50, 50, 51, 51, 51, 51, 50, 49, 48, 47, - 47, 47, 47, 46, 46, 46, 46, 44, 43, 43, 42, 42, 42, 42, 42, 42, - 42, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 35, 34, 34, 35, 34, 33, 32, 30, - 30, 29, 28, 29, 28, 27, 28, 30, 30, 29, 29, 29, 29, 29, 28, 27, - 38, 39, 39, 40, 41, 41, 41, 40, 40, 40, 41, 41, 41, 41, 42, 43, - 43, 44, 46, 48, 49, 49, 49, 49, 49, 49, 49, 48, 47, 48, 48, 48, - 48, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 49, 48, 50, - 53, 55, 55, 53, 51, 50, 50, 50, 51, 51, 51, 51, 50, 49, 48, 47, - 47, 47, 47, 46, 46, 46, 46, 44, 43, 43, 42, 42, 42, 42, 42, 42, - 42, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 35, 34, 34, 34, 34, 34, 33, 33, 32, 33, 32, 31, 30, 29, - 28, 27, 27, 29, 28, 27, 28, 30, 30, 29, 29, 29, 29, 29, 28, 27, - 69, 69, 70, 72, 73, 74, 75, 76, 77, 77, 79, 80, 82, 83, 85, 86, - 87, 90, 93, 95, 97, 100, 102, 102, 102, 104, 110, 114, 116, 118, 116, 115, - 125, 127, 122, 122, 126, 129, 135, 142, 132, 139, 137, 142, 144, 144, 140, 136, - 143, 133, 130, 132, 131, 126, 122, 122, 123, 116, 112, 116, 116, 111, 105, 102, - 100, 97, 95, 97, 98, 96, 96, 95, 93, 90, 88, 85, 83, 82, 81, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 46, 45, 46, 45, 45, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 84, 86, 87, - 87, 89, 93, 95, 98, 101, 103, 104, 104, 105, 109, 113, 117, 120, 118, 117, - 126, 130, 127, 126, 128, 132, 138, 146, 138, 142, 141, 145, 147, 147, 143, 140, - 147, 137, 135, 135, 132, 126, 125, 124, 123, 117, 115, 119, 116, 111, 105, 102, - 101, 98, 98, 99, 98, 97, 96, 95, 93, 90, 88, 85, 83, 82, 81, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 46, 46, 46, 46, 45, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 77, 78, 80, 81, 83, 85, 87, 88, - 88, 90, 93, 96, 100, 103, 106, 108, 108, 108, 109, 113, 118, 121, 122, 121, - 127, 134, 132, 130, 130, 134, 141, 149, 144, 145, 147, 149, 150, 150, 147, 145, - 151, 142, 140, 139, 134, 127, 128, 127, 124, 120, 121, 122, 117, 111, 105, 102, - 102, 101, 101, 100, 99, 98, 96, 94, 92, 89, 87, 85, 83, 82, 81, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 46, 46, 47, 46, 45, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 78, 79, 80, 82, 84, 86, 88, 89, - 89, 92, 95, 98, 102, 105, 109, 111, 112, 112, 112, 114, 120, 124, 126, 126, - 127, 134, 136, 134, 132, 135, 142, 151, 151, 148, 152, 153, 154, 154, 150, 150, - 154, 145, 145, 143, 137, 130, 133, 131, 127, 124, 126, 123, 118, 111, 107, 105, - 104, 105, 104, 103, 101, 99, 97, 94, 92, 90, 88, 85, 84, 83, 81, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 47, 47, 47, 47, 46, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 79, 80, 81, 82, 85, 87, 89, 91, - 92, 95, 99, 101, 104, 108, 111, 114, 116, 118, 118, 118, 122, 126, 130, 132, - 130, 135, 141, 140, 135, 138, 146, 155, 158, 151, 158, 157, 159, 159, 155, 156, - 158, 149, 150, 145, 140, 135, 137, 135, 130, 130, 129, 123, 117, 111, 109, 109, - 107, 107, 107, 104, 102, 100, 98, 94, 92, 89, 87, 86, 84, 83, 82, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 47, 47, 48, 47, 46, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 79, 81, 82, 82, 87, 88, 90, 92, - 96, 98, 102, 104, 106, 110, 115, 117, 120, 123, 124, 123, 123, 128, 135, 140, - 139, 139, 148, 149, 142, 146, 154, 161, 165, 156, 165, 164, 167, 167, 163, 163, - 163, 155, 157, 149, 144, 141, 140, 137, 134, 136, 131, 123, 116, 112, 112, 113, - 111, 109, 108, 106, 104, 101, 98, 94, 92, 89, 87, 86, 84, 83, 82, 78, - 77, 76, 76, 74, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 55, 54, 54, - 54, 54, 54, 52, 50, 50, 49, 48, 48, 48, 47, 48, 48, 48, 46, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 80, 81, 82, 83, 88, 89, 91, 94, - 98, 101, 104, 107, 109, 113, 117, 119, 123, 126, 128, 128, 127, 129, 136, 143, - 145, 142, 149, 156, 148, 150, 158, 163, 171, 162, 169, 170, 172, 173, 167, 171, - 167, 161, 161, 152, 146, 147, 144, 138, 140, 140, 132, 122, 117, 115, 115, 115, - 113, 111, 109, 106, 103, 100, 97, 93, 91, 89, 87, 86, 85, 84, 82, 78, - 77, 77, 76, 74, 73, 72, 71, 71, 70, 69, 67, 67, 66, 65, 64, 63, - 62, 61, 61, 61, 60, 59, 58, 58, 58, 58, 57, 57, 56, 56, 54, 54, - 54, 54, 53, 52, 51, 50, 50, 48, 48, 48, 48, 49, 49, 49, 47, 46, - 69, 69, 70, 72, 73, 74, 75, 76, 80, 82, 83, 85, 88, 90, 94, 97, - 101, 104, 108, 111, 114, 117, 121, 123, 126, 130, 133, 136, 134, 132, 137, 143, - 150, 148, 148, 161, 157, 153, 161, 166, 177, 170, 174, 177, 178, 179, 171, 179, - 170, 169, 165, 157, 151, 154, 149, 144, 150, 142, 131, 123, 121, 120, 118, 117, - 116, 113, 111, 106, 102, 98, 95, 93, 91, 89, 88, 87, 86, 84, 83, 79, - 78, 78, 77, 76, 74, 72, 72, 71, 71, 70, 68, 67, 66, 65, 64, 63, - 62, 62, 61, 61, 60, 59, 59, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 53, 52, 52, 52, 51, 50, 49, 48, 48, 50, 50, 50, 48, 47, - 69, 69, 70, 72, 74, 74, 75, 76, 81, 82, 85, 87, 89, 92, 95, 99, - 105, 109, 113, 117, 120, 122, 126, 128, 130, 135, 140, 141, 140, 140, 141, 145, - 153, 157, 154, 161, 169, 161, 162, 172, 183, 179, 181, 184, 184, 185, 178, 186, - 176, 178, 171, 161, 163, 160, 151, 154, 155, 142, 130, 125, 125, 124, 122, 120, - 118, 114, 110, 106, 103, 98, 95, 93, 91, 89, 88, 87, 86, 84, 83, 79, - 78, 78, 77, 76, 74, 72, 72, 71, 71, 70, 68, 67, 66, 65, 65, 63, - 63, 62, 61, 61, 60, 59, 59, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 53, 52, 52, 52, 51, 50, 49, 48, 48, 50, 50, 50, 48, 46, - 69, 70, 71, 73, 74, 75, 76, 77, 81, 83, 87, 89, 91, 94, 99, 104, - 110, 113, 119, 122, 125, 128, 131, 133, 135, 139, 144, 148, 148, 150, 147, 148, - 155, 165, 164, 160, 176, 172, 165, 177, 188, 189, 188, 191, 192, 192, 185, 193, - 183, 186, 176, 166, 172, 164, 158, 163, 155, 141, 132, 131, 131, 130, 127, 124, - 120, 114, 109, 105, 102, 99, 96, 94, 92, 90, 89, 87, 86, 84, 83, 79, - 78, 78, 77, 76, 74, 72, 72, 71, 71, 70, 68, 68, 67, 66, 65, 64, - 63, 62, 62, 62, 61, 60, 59, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 53, 52, 52, 52, 52, 50, 49, 48, 48, 50, 50, 50, 48, 46, - 70, 71, 71, 73, 75, 75, 76, 77, 81, 85, 89, 91, 93, 97, 103, 107, - 112, 116, 122, 126, 129, 132, 135, 137, 139, 143, 147, 152, 156, 158, 157, 154, - 156, 168, 174, 166, 175, 182, 173, 178, 191, 198, 194, 198, 200, 199, 193, 200, - 191, 192, 179, 174, 175, 167, 168, 166, 152, 142, 139, 139, 138, 134, 130, 124, - 119, 113, 108, 104, 102, 100, 98, 95, 94, 92, 90, 88, 87, 85, 83, 79, - 78, 78, 77, 76, 74, 72, 72, 71, 71, 70, 69, 68, 68, 67, 66, 65, - 64, 63, 63, 62, 61, 60, 60, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 53, 53, 53, 53, 52, 50, 49, 48, 48, 50, 50, 50, 48, 46, - 70, 71, 72, 74, 75, 76, 77, 78, 82, 86, 90, 92, 95, 99, 106, 110, - 115, 120, 127, 131, 133, 136, 139, 142, 145, 147, 151, 154, 159, 163, 164, 163, - 160, 167, 179, 177, 177, 189, 187, 183, 196, 208, 200, 206, 210, 208, 202, 207, - 200, 196, 182, 184, 177, 175, 176, 165, 151, 147, 148, 146, 142, 136, 130, 123, - 117, 112, 107, 104, 102, 100, 98, 96, 94, 92, 91, 88, 87, 85, 83, 79, - 78, 78, 77, 76, 74, 72, 72, 71, 71, 70, 69, 69, 68, 67, 66, 65, - 64, 64, 63, 63, 62, 61, 60, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 53, 53, 53, 53, 52, 50, 49, 48, 48, 50, 50, 50, 48, 46, - 71, 71, 72, 74, 76, 77, 77, 79, 82, 87, 91, 93, 96, 101, 107, 113, - 120, 126, 132, 137, 140, 142, 145, 148, 152, 153, 154, 156, 161, 166, 171, 173, - 167, 165, 178, 190, 185, 194, 198, 189, 202, 217, 206, 214, 220, 217, 212, 214, - 209, 200, 186, 193, 181, 187, 182, 163, 154, 153, 155, 150, 145, 137, 129, 121, - 115, 111, 107, 103, 101, 100, 99, 96, 94, 92, 91, 88, 87, 85, 83, 80, - 79, 78, 77, 76, 74, 73, 72, 71, 71, 70, 69, 69, 68, 67, 66, 65, - 65, 64, 63, 63, 62, 61, 60, 59, 59, 58, 58, 58, 57, 56, 55, 54, - 54, 54, 54, 54, 54, 54, 53, 51, 50, 49, 48, 50, 50, 50, 48, 46, - 71, 72, 74, 76, 76, 78, 80, 82, 87, 89, 93, 96, 100, 106, 111, 118, - 126, 134, 144, 144, 145, 152, 158, 156, 159, 161, 162, 164, 163, 174, 179, 180, - 182, 176, 180, 194, 201, 194, 211, 192, 209, 225, 218, 222, 230, 225, 226, 222, - 217, 207, 197, 198, 195, 197, 186, 167, 163, 164, 159, 155, 146, 135, 126, 120, - 117, 113, 109, 106, 104, 102, 99, 96, 95, 93, 92, 89, 88, 85, 84, 80, - 79, 77, 77, 75, 75, 73, 71, 69, 70, 69, 69, 68, 67, 66, 65, 64, - 63, 62, 62, 63, 62, 62, 62, 59, 58, 57, 57, 56, 55, 54, 54, 55, - 54, 53, 53, 54, 53, 52, 53, 52, 51, 50, 49, 50, 50, 49, 47, 46, - 71, 72, 75, 76, 76, 79, 82, 85, 90, 93, 95, 99, 106, 113, 117, 125, - 133, 140, 145, 152, 156, 152, 153, 160, 163, 162, 161, 166, 171, 168, 184, 198, - 194, 188, 178, 188, 213, 201, 212, 211, 208, 233, 228, 234, 240, 236, 238, 228, - 223, 204, 211, 209, 209, 197, 179, 172, 173, 173, 163, 155, 144, 134, 126, 121, - 118, 115, 111, 108, 106, 103, 101, 97, 95, 92, 91, 90, 88, 85, 84, 81, - 80, 79, 78, 76, 75, 74, 73, 70, 70, 70, 70, 68, 67, 66, 65, 64, - 63, 62, 62, 63, 63, 63, 62, 60, 58, 58, 57, 56, 55, 54, 54, 55, - 54, 53, 53, 54, 53, 52, 53, 54, 52, 51, 50, 50, 49, 49, 47, 46, - 71, 72, 75, 76, 76, 80, 83, 87, 91, 95, 101, 105, 113, 120, 125, 134, - 144, 147, 147, 153, 152, 155, 155, 163, 164, 166, 169, 168, 171, 183, 186, 190, - 196, 200, 191, 190, 210, 214, 214, 231, 220, 240, 235, 241, 246, 243, 243, 234, - 237, 221, 225, 212, 219, 195, 184, 187, 179, 177, 166, 153, 143, 134, 127, 122, - 119, 116, 113, 109, 106, 104, 102, 97, 95, 94, 91, 89, 88, 86, 84, 82, - 82, 80, 79, 78, 77, 76, 74, 72, 71, 71, 71, 69, 68, 67, 66, 65, - 64, 63, 62, 64, 64, 64, 64, 62, 61, 60, 59, 59, 58, 57, 57, 56, - 55, 54, 54, 54, 53, 52, 53, 54, 53, 51, 51, 50, 50, 49, 47, 46, - 71, 72, 75, 77, 77, 80, 84, 89, 93, 99, 106, 112, 120, 127, 133, 140, - 146, 150, 153, 154, 151, 150, 140, 130, 128, 133, 147, 159, 171, 177, 182, 189, - 195, 196, 194, 194, 202, 224, 224, 229, 229, 237, 245, 246, 249, 247, 246, 242, - 234, 225, 228, 226, 204, 197, 195, 193, 183, 175, 166, 152, 142, 135, 129, 123, - 120, 117, 114, 109, 106, 103, 101, 98, 96, 94, 92, 90, 89, 87, 85, 84, - 84, 82, 82, 79, 79, 78, 77, 75, 74, 73, 72, 70, 69, 68, 67, 66, - 65, 64, 63, 65, 65, 65, 64, 63, 62, 61, 61, 60, 60, 59, 59, 58, - 57, 56, 55, 54, 53, 53, 53, 55, 53, 52, 51, 50, 50, 49, 47, 46, - 71, 72, 75, 77, 77, 81, 86, 91, 95, 103, 112, 119, 127, 135, 140, 147, - 149, 154, 156, 144, 124, 102, 85, 71, 67, 71, 89, 101, 126, 161, 178, 184, - 192, 167, 173, 186, 197, 221, 232, 235, 237, 228, 245, 241, 243, 242, 242, 238, - 226, 232, 223, 221, 194, 198, 202, 199, 187, 174, 162, 154, 144, 137, 131, 125, - 122, 119, 116, 110, 107, 104, 102, 100, 99, 96, 94, 93, 91, 89, 87, 87, - 86, 85, 85, 82, 81, 80, 80, 77, 76, 75, 74, 72, 71, 70, 69, 67, - 66, 65, 64, 65, 65, 65, 65, 65, 64, 63, 63, 63, 62, 61, 61, 60, - 60, 58, 57, 56, 55, 54, 55, 55, 54, 52, 51, 51, 50, 50, 48, 46, - 71, 73, 75, 77, 78, 82, 87, 92, 97, 105, 116, 126, 134, 142, 147, 154, - 158, 155, 133, 101, 66, 45, 36, 36, 35, 42, 58, 61, 70, 92, 134, 176, - 186, 96, 80, 112, 185, 217, 234, 228, 153, 121, 120, 120, 125, 123, 125, 123, - 130, 138, 110, 91, 98, 106, 116, 164, 180, 174, 161, 156, 147, 140, 133, 127, - 123, 119, 116, 113, 110, 107, 105, 103, 102, 99, 98, 96, 95, 92, 90, 89, - 89, 87, 86, 85, 84, 83, 81, 80, 79, 76, 74, 73, 73, 71, 70, 68, - 68, 67, 66, 67, 67, 67, 67, 67, 66, 65, 65, 65, 65, 64, 64, 64, - 63, 62, 60, 59, 58, 57, 57, 56, 54, 53, 52, 51, 50, 50, 48, 46, - 71, 73, 76, 78, 79, 83, 88, 94, 98, 107, 120, 131, 140, 147, 152, 157, - 154, 131, 81, 44, 36, 32, 29, 36, 41, 52, 63, 60, 58, 57, 73, 114, - 149, 53, 57, 76, 162, 220, 234, 245, 123, 91, 74, 82, 85, 83, 89, 92, - 93, 66, 55, 64, 68, 93, 103, 125, 164, 172, 163, 158, 150, 142, 135, 128, - 124, 120, 117, 116, 115, 112, 109, 106, 105, 102, 100, 99, 97, 96, 93, 91, - 90, 89, 88, 86, 85, 84, 84, 82, 80, 78, 76, 74, 73, 72, 71, 69, - 69, 68, 67, 68, 68, 68, 69, 69, 69, 68, 68, 68, 67, 66, 66, 67, - 66, 65, 63, 61, 60, 59, 58, 56, 55, 53, 52, 50, 50, 49, 48, 47, - 71, 73, 77, 79, 80, 85, 88, 96, 100, 111, 122, 135, 141, 153, 156, 158, - 125, 67, 47, 40, 37, 44, 56, 61, 63, 61, 58, 55, 58, 60, 57, 69, - 97, 56, 53, 57, 137, 232, 242, 242, 127, 95, 84, 92, 92, 96, 102, 88, - 67, 48, 54, 83, 94, 109, 110, 93, 163, 175, 167, 157, 150, 141, 136, 130, - 126, 123, 120, 119, 117, 115, 113, 110, 108, 107, 105, 102, 101, 99, 97, 95, - 94, 93, 92, 90, 89, 87, 86, 85, 84, 82, 80, 76, 75, 73, 72, 71, - 71, 71, 71, 72, 72, 73, 74, 74, 74, 74, 74, 74, 73, 72, 72, 71, - 70, 68, 66, 66, 66, 63, 61, 59, 56, 53, 51, 49, 47, 47, 48, 48, - 71, 73, 77, 79, 81, 87, 90, 98, 103, 115, 126, 137, 146, 155, 155, 134, - 79, 51, 45, 46, 52, 58, 57, 56, 71, 81, 80, 72, 65, 61, 54, 66, - 75, 72, 71, 65, 133, 232, 247, 243, 133, 88, 85, 90, 101, 91, 111, 69, - 60, 55, 69, 104, 119, 133, 126, 96, 162, 177, 167, 158, 152, 144, 140, 135, - 132, 129, 126, 124, 122, 120, 119, 115, 113, 111, 110, 106, 104, 102, 100, 99, - 97, 96, 95, 94, 93, 90, 89, 88, 86, 84, 83, 78, 77, 75, 74, 73, - 73, 73, 73, 76, 77, 78, 78, 78, 78, 78, 78, 78, 77, 76, 76, 76, - 75, 73, 71, 70, 69, 66, 64, 62, 59, 56, 53, 50, 48, 47, 48, 48, - 71, 73, 77, 79, 82, 88, 92, 101, 108, 119, 132, 143, 150, 153, 144, 94, - 64, 53, 47, 45, 48, 49, 55, 89, 118, 133, 138, 132, 105, 80, 61, 66, - 71, 71, 65, 66, 137, 233, 250, 248, 173, 119, 91, 79, 81, 70, 54, 17, - 34, 68, 95, 125, 122, 110, 106, 110, 165, 178, 169, 160, 155, 149, 146, 141, - 138, 135, 132, 129, 128, 126, 124, 120, 118, 116, 115, 111, 109, 106, 105, 104, - 102, 101, 100, 100, 98, 96, 95, 92, 90, 88, 86, 81, 80, 78, 77, 76, - 76, 77, 78, 80, 81, 83, 83, 83, 83, 83, 83, 84, 83, 82, 82, 82, - 80, 78, 76, 73, 73, 70, 67, 65, 61, 58, 55, 51, 48, 48, 47, 47, - 72, 74, 78, 80, 84, 90, 94, 104, 112, 125, 137, 149, 155, 151, 100, 48, - 43, 37, 31, 35, 42, 47, 90, 142, 160, 171, 179, 179, 171, 139, 83, 74, - 72, 83, 64, 62, 138, 232, 249, 254, 238, 191, 145, 90, 81, 66, 18, 19, - 71, 110, 130, 126, 86, 111, 132, 145, 175, 178, 172, 166, 161, 155, 151, 145, - 142, 140, 137, 133, 132, 130, 128, 125, 123, 121, 119, 116, 114, 113, 112, 110, - 108, 107, 107, 106, 105, 102, 100, 97, 94, 91, 89, 85, 83, 81, 79, 79, - 80, 81, 82, 83, 85, 87, 88, 88, 88, 88, 88, 89, 88, 87, 87, 88, - 86, 83, 80, 78, 76, 73, 69, 66, 62, 58, 56, 53, 49, 48, 47, 47, - 73, 75, 79, 81, 86, 92, 97, 107, 118, 131, 143, 153, 160, 136, 40, 30, - 37, 38, 41, 47, 46, 83, 152, 170, 175, 178, 184, 187, 192, 187, 142, 93, - 76, 72, 64, 65, 135, 231, 251, 253, 251, 244, 237, 172, 111, 56, 78, 115, - 131, 137, 145, 93, 98, 172, 191, 193, 192, 185, 180, 175, 169, 162, 158, 151, - 148, 145, 143, 139, 137, 135, 134, 130, 128, 125, 124, 122, 121, 119, 118, 115, - 115, 114, 113, 112, 111, 109, 107, 103, 99, 95, 93, 88, 86, 84, 83, 83, - 85, 87, 87, 87, 90, 92, 94, 95, 95, 95, 95, 97, 96, 95, 94, 93, - 91, 89, 87, 84, 82, 78, 73, 68, 64, 59, 57, 54, 50, 49, 47, 46, - 73, 75, 79, 81, 87, 94, 99, 110, 121, 135, 147, 157, 156, 96, 32, 51, - 57, 55, 52, 45, 58, 128, 173, 181, 181, 182, 185, 187, 190, 191, 185, 118, - 75, 69, 78, 80, 143, 238, 254, 253, 252, 251, 251, 220, 90, 57, 104, 135, - 136, 132, 135, 80, 150, 213, 220, 212, 204, 197, 188, 182, 175, 167, 161, 157, - 154, 151, 149, 146, 143, 141, 139, 136, 134, 132, 130, 126, 124, 123, 121, 118, - 118, 117, 116, 116, 114, 112, 110, 107, 104, 99, 96, 91, 89, 87, 85, 85, - 87, 89, 90, 92, 94, 97, 99, 102, 101, 101, 102, 104, 103, 102, 101, 99, - 97, 95, 93, 91, 88, 84, 78, 72, 67, 62, 58, 55, 51, 49, 47, 46, - 74, 75, 79, 83, 88, 96, 104, 114, 124, 137, 152, 156, 138, 65, 42, 62, - 61, 54, 44, 36, 88, 158, 177, 182, 180, 182, 185, 188, 196, 196, 199, 160, - 83, 86, 90, 88, 137, 238, 254, 252, 252, 252, 253, 238, 55, 98, 130, 138, - 136, 128, 119, 88, 186, 234, 236, 219, 207, 199, 188, 183, 178, 169, 162, 159, - 156, 152, 151, 151, 146, 144, 142, 142, 142, 140, 136, 132, 129, 126, 124, 120, - 119, 123, 121, 122, 119, 116, 114, 115, 110, 106, 100, 95, 92, 90, 88, 87, - 89, 92, 96, 97, 101, 105, 106, 109, 108, 108, 109, 109, 108, 109, 110, 107, - 102, 100, 100, 97, 95, 85, 83, 77, 71, 66, 60, 56, 52, 50, 48, 46, - 74, 75, 80, 85, 89, 98, 107, 118, 128, 141, 155, 156, 117, 45, 40, 61, - 53, 50, 45, 46, 121, 172, 180, 176, 176, 177, 182, 186, 194, 200, 205, 198, - 112, 87, 83, 82, 123, 234, 254, 255, 255, 254, 253, 250, 98, 127, 143, 137, - 123, 115, 117, 97, 204, 240, 232, 215, 200, 191, 184, 179, 174, 166, 158, 158, - 155, 151, 151, 151, 146, 145, 142, 145, 146, 143, 139, 136, 133, 131, 130, 129, - 125, 130, 128, 125, 129, 127, 120, 118, 118, 113, 104, 100, 97, 94, 92, 91, - 93, 98, 103, 108, 109, 113, 115, 118, 118, 117, 117, 118, 117, 117, 115, 113, - 114, 112, 108, 104, 96, 93, 89, 80, 74, 69, 62, 58, 53, 51, 49, 47, - 74, 75, 80, 85, 90, 100, 109, 120, 132, 147, 154, 150, 73, 15, 29, 54, - 50, 52, 48, 63, 143, 178, 177, 171, 170, 172, 176, 180, 189, 196, 202, 203, - 132, 92, 101, 84, 124, 236, 254, 254, 254, 254, 254, 250, 128, 126, 138, 134, - 127, 125, 124, 93, 198, 223, 209, 198, 190, 184, 179, 176, 172, 165, 158, 158, - 157, 155, 156, 154, 151, 150, 146, 150, 151, 148, 145, 139, 138, 139, 139, 138, - 134, 135, 135, 134, 131, 130, 132, 122, 124, 117, 110, 107, 103, 100, 99, 97, - 100, 106, 111, 115, 114, 117, 121, 125, 124, 123, 123, 124, 125, 126, 127, 125, - 125, 123, 115, 114, 104, 100, 93, 83, 77, 70, 63, 59, 54, 52, 49, 47, - 74, 75, 80, 85, 91, 101, 111, 122, 135, 147, 155, 120, 25, 14, 32, 50, - 56, 61, 47, 84, 157, 174, 168, 164, 164, 166, 169, 173, 179, 188, 195, 199, - 158, 104, 88, 61, 124, 231, 252, 253, 252, 251, 250, 250, 117, 89, 69, 99, - 121, 114, 121, 99, 204, 230, 221, 212, 202, 194, 187, 184, 182, 176, 170, 166, - 166, 167, 167, 165, 164, 160, 155, 150, 150, 148, 145, 147, 148, 147, 147, 146, - 146, 146, 144, 145, 141, 138, 138, 137, 130, 120, 122, 115, 110, 107, 105, 105, - 107, 113, 118, 120, 125, 126, 131, 133, 133, 133, 134, 137, 136, 138, 143, 139, - 131, 131, 125, 116, 119, 102, 95, 87, 80, 74, 66, 61, 55, 52, 49, 47, - 74, 75, 80, 85, 92, 103, 113, 125, 138, 145, 156, 95, 42, 47, 51, 63, - 58, 63, 46, 106, 162, 170, 164, 161, 159, 160, 164, 169, 176, 184, 192, 195, - 179, 110, 85, 63, 117, 220, 243, 247, 245, 251, 254, 251, 118, 88, 90, 88, - 98, 122, 129, 95, 198, 227, 222, 218, 210, 203, 197, 192, 189, 185, 180, 175, - 174, 176, 177, 175, 172, 165, 161, 159, 158, 155, 152, 155, 156, 155, 155, 157, - 159, 154, 147, 146, 146, 143, 139, 135, 134, 131, 128, 122, 117, 113, 111, 111, - 114, 119, 125, 129, 136, 133, 135, 136, 138, 139, 139, 142, 148, 149, 148, 146, - 143, 140, 130, 124, 112, 114, 101, 91, 84, 77, 68, 63, 57, 53, 49, 47, - 74, 75, 80, 86, 93, 104, 115, 127, 140, 148, 153, 85, 67, 62, 59, 72, - 64, 59, 49, 125, 165, 166, 162, 159, 155, 157, 161, 165, 173, 180, 187, 191, - 178, 84, 72, 73, 113, 214, 245, 250, 251, 254, 253, 248, 134, 119, 140, 123, - 90, 89, 105, 99, 201, 224, 211, 207, 202, 195, 191, 188, 186, 183, 180, 175, - 175, 177, 177, 177, 174, 166, 167, 163, 160, 156, 152, 156, 159, 162, 164, 163, - 161, 154, 153, 149, 130, 125, 134, 138, 135, 139, 132, 129, 126, 122, 119, 119, - 121, 126, 131, 133, 137, 136, 142, 141, 145, 150, 149, 141, 144, 149, 152, 153, - 149, 140, 142, 141, 114, 112, 99, 94, 86, 79, 70, 64, 58, 53, 49, 47, - 74, 75, 80, 86, 94, 105, 116, 129, 141, 153, 147, 84, 61, 56, 64, 77, - 79, 58, 54, 134, 164, 163, 158, 155, 153, 155, 158, 162, 167, 174, 178, 187, - 177, 75, 90, 100, 117, 219, 252, 254, 254, 255, 254, 250, 144, 151, 135, 142, - 126, 93, 76, 97, 206, 236, 228, 214, 201, 190, 182, 179, 179, 177, 175, 169, - 169, 170, 169, 174, 173, 167, 174, 186, 185, 179, 175, 154, 158, 165, 170, 167, - 163, 160, 173, 194, 191, 176, 158, 160, 132, 137, 138, 135, 132, 128, 126, 127, - 128, 132, 135, 138, 140, 148, 168, 175, 182, 188, 190, 172, 135, 131, 149, 154, - 146, 156, 176, 136, 140, 101, 101, 97, 89, 81, 72, 65, 58, 54, 49, 47, - 75, 77, 82, 88, 95, 105, 116, 129, 148, 150, 129, 65, 58, 70, 78, 84, - 81, 55, 68, 144, 165, 162, 154, 150, 148, 146, 149, 153, 160, 166, 172, 181, - 179, 148, 139, 121, 134, 231, 254, 254, 254, 254, 254, 250, 139, 139, 134, 151, - 143, 138, 140, 95, 203, 235, 225, 224, 214, 196, 179, 171, 166, 168, 179, 178, - 174, 174, 132, 164, 171, 182, 179, 152, 136, 149, 121, 130, 133, 159, 170, 164, - 163, 190, 186, 190, 202, 219, 227, 209, 159, 126, 137, 138, 135, 134, 135, 130, - 134, 140, 138, 139, 150, 152, 156, 152, 146, 150, 135, 83, 51, 122, 156, 148, - 155, 187, 157, 175, 173, 106, 90, 100, 91, 83, 73, 65, 58, 53, 49, 47, - 75, 77, 83, 88, 96, 107, 117, 131, 146, 155, 125, 71, 58, 82, 70, 63, - 43, 40, 74, 150, 162, 156, 149, 145, 143, 141, 144, 148, 156, 163, 168, 178, - 187, 172, 136, 125, 167, 234, 252, 254, 253, 254, 254, 250, 149, 133, 133, 123, - 143, 140, 140, 97, 191, 228, 224, 213, 204, 187, 173, 155, 184, 168, 166, 168, - 159, 163, 107, 148, 173, 198, 185, 141, 137, 122, 115, 124, 125, 127, 161, 161, - 185, 211, 188, 176, 203, 210, 211, 225, 198, 135, 126, 138, 138, 136, 138, 141, - 142, 139, 141, 160, 169, 172, 141, 118, 120, 133, 77, 80, 130, 186, 205, 153, - 169, 181, 148, 180, 165, 126, 73, 97, 93, 84, 75, 67, 60, 55, 49, 47, - 75, 77, 83, 89, 98, 109, 119, 133, 153, 154, 99, 61, 76, 88, 77, 75, - 61, 66, 89, 152, 157, 151, 143, 139, 138, 137, 140, 145, 152, 160, 167, 176, - 189, 199, 189, 185, 201, 235, 248, 254, 248, 254, 254, 252, 134, 116, 149, 137, - 134, 112, 126, 95, 184, 219, 219, 211, 204, 180, 168, 150, 175, 160, 162, 156, - 159, 151, 90, 160, 192, 196, 176, 188, 183, 193, 204, 207, 192, 149, 139, 169, - 176, 155, 175, 181, 200, 202, 204, 175, 169, 200, 116, 135, 141, 139, 142, 147, - 145, 141, 158, 197, 190, 188, 156, 122, 126, 132, 136, 179, 195, 196, 200, 186, - 167, 159, 150, 164, 138, 144, 65, 93, 95, 84, 76, 68, 61, 56, 51, 48, - 75, 77, 83, 89, 99, 110, 121, 135, 154, 152, 91, 75, 97, 80, 84, 76, - 68, 79, 93, 154, 156, 149, 140, 137, 136, 136, 139, 143, 149, 160, 170, 184, - 195, 194, 194, 205, 219, 235, 245, 254, 248, 254, 253, 250, 124, 117, 127, 118, - 145, 153, 147, 95, 187, 213, 210, 209, 200, 167, 160, 164, 162, 154, 166, 175, - 156, 169, 122, 188, 196, 196, 171, 187, 150, 201, 202, 207, 220, 201, 132, 196, - 184, 171, 187, 191, 206, 206, 188, 146, 180, 244, 129, 125, 145, 145, 146, 150, - 147, 154, 178, 196, 191, 187, 187, 172, 115, 96, 163, 204, 184, 158, 175, 158, - 150, 144, 134, 159, 140, 145, 57, 91, 96, 85, 77, 69, 61, 57, 51, 48, - 75, 77, 83, 89, 100, 110, 121, 134, 150, 153, 103, 97, 86, 71, 92, 71, - 85, 86, 94, 152, 157, 149, 141, 137, 135, 136, 139, 144, 151, 161, 171, 182, - 189, 192, 202, 214, 221, 233, 240, 245, 251, 254, 250, 246, 132, 141, 138, 119, - 135, 133, 143, 103, 192, 213, 204, 205, 196, 163, 157, 165, 157, 161, 174, 190, - 145, 163, 160, 208, 208, 188, 171, 188, 146, 196, 182, 201, 189, 203, 177, 217, - 195, 201, 220, 207, 200, 196, 174, 164, 234, 221, 131, 109, 147, 151, 152, 154, - 154, 172, 188, 190, 204, 187, 200, 150, 78, 103, 148, 193, 168, 128, 156, 149, - 165, 92, 93, 158, 171, 139, 60, 94, 95, 85, 76, 68, 61, 56, 51, 49, - 75, 77, 83, 89, 99, 109, 120, 134, 150, 151, 104, 81, 58, 69, 87, 58, - 79, 75, 105, 160, 157, 149, 141, 135, 133, 134, 139, 145, 154, 161, 168, 175, - 182, 189, 198, 208, 218, 227, 229, 233, 252, 255, 248, 247, 154, 137, 137, 135, - 149, 139, 144, 99, 187, 217, 207, 204, 199, 170, 155, 163, 156, 176, 184, 193, - 177, 161, 185, 206, 175, 130, 137, 194, 183, 202, 182, 164, 175, 209, 206, 203, - 196, 158, 166, 206, 209, 214, 203, 205, 194, 134, 147, 91, 146, 156, 157, 158, - 160, 181, 163, 138, 177, 174, 181, 85, 102, 154, 165, 168, 141, 133, 140, 133, - 167, 119, 91, 156, 148, 86, 64, 99, 92, 84, 74, 67, 60, 55, 51, 49, - 75, 77, 83, 89, 98, 109, 120, 134, 149, 147, 97, 68, 61, 70, 65, 54, - 108, 83, 112, 155, 155, 147, 139, 134, 133, 134, 140, 146, 155, 159, 163, 171, - 181, 188, 197, 209, 216, 220, 222, 229, 251, 251, 251, 239, 172, 153, 155, 151, - 149, 145, 153, 93, 180, 218, 211, 201, 198, 179, 157, 179, 168, 186, 182, 189, - 183, 157, 179, 166, 97, 103, 126, 191, 192, 189, 169, 178, 187, 194, 197, 198, - 117, 84, 108, 153, 197, 199, 160, 184, 152, 135, 137, 79, 146, 159, 160, 159, - 160, 173, 154, 155, 167, 148, 132, 69, 140, 186, 188, 172, 148, 158, 124, 132, - 150, 130, 93, 119, 102, 77, 98, 103, 92, 84, 73, 66, 59, 54, 50, 48, - 73, 76, 82, 89, 97, 108, 120, 135, 151, 142, 86, 72, 87, 85, 73, 88, - 116, 84, 114, 157, 155, 146, 138, 136, 137, 139, 144, 147, 148, 153, 161, 167, - 176, 185, 194, 203, 211, 211, 216, 227, 249, 240, 254, 240, 164, 160, 166, 165, - 161, 161, 161, 95, 180, 212, 210, 202, 199, 195, 182, 175, 174, 182, 180, 200, - 184, 159, 174, 102, 105, 163, 185, 194, 206, 200, 197, 198, 175, 170, 174, 141, - 77, 135, 164, 159, 154, 124, 87, 135, 150, 172, 171, 70, 147, 161, 165, 161, - 162, 170, 182, 182, 176, 146, 121, 75, 160, 194, 191, 176, 167, 168, 118, 144, - 116, 124, 83, 128, 126, 116, 114, 105, 93, 82, 72, 65, 58, 53, 50, 48, - 73, 75, 82, 89, 97, 108, 120, 135, 149, 145, 106, 93, 102, 102, 98, 118, - 112, 80, 113, 158, 156, 148, 141, 139, 141, 140, 141, 144, 146, 152, 159, 166, - 174, 180, 191, 200, 202, 203, 212, 225, 238, 233, 250, 235, 167, 157, 142, 169, - 174, 163, 170, 98, 178, 209, 207, 204, 203, 200, 194, 191, 190, 181, 176, 198, - 190, 172, 130, 77, 154, 189, 203, 200, 226, 217, 211, 216, 185, 203, 185, 81, - 112, 174, 183, 181, 186, 175, 169, 192, 182, 202, 187, 67, 146, 162, 166, 161, - 178, 187, 178, 169, 176, 160, 131, 75, 174, 195, 197, 182, 165, 153, 110, 136, - 138, 139, 70, 123, 138, 130, 119, 103, 91, 81, 71, 64, 58, 53, 50, 48, - 72, 75, 81, 88, 96, 108, 120, 134, 146, 149, 127, 114, 102, 104, 105, 121, - 95, 71, 109, 158, 159, 152, 145, 142, 141, 139, 138, 141, 145, 151, 158, 165, - 173, 179, 189, 195, 194, 196, 209, 224, 226, 228, 245, 227, 172, 158, 172, 179, - 177, 161, 181, 97, 176, 207, 204, 201, 202, 202, 197, 193, 191, 176, 183, 217, - 208, 153, 74, 99, 180, 194, 201, 203, 222, 210, 217, 220, 188, 203, 187, 70, - 149, 188, 186, 180, 206, 215, 205, 214, 211, 197, 178, 64, 146, 164, 168, 168, - 186, 180, 157, 139, 168, 166, 138, 86, 176, 202, 201, 182, 146, 132, 126, 139, - 150, 143, 65, 118, 140, 129, 115, 101, 89, 79, 69, 63, 57, 53, 49, 47, - 71, 74, 81, 88, 95, 107, 119, 134, 149, 147, 124, 103, 91, 93, 97, 100, - 92, 76, 110, 160, 162, 155, 147, 142, 136, 136, 138, 140, 145, 151, 158, 163, - 171, 181, 184, 187, 189, 194, 208, 221, 215, 226, 240, 229, 167, 165, 187, 167, - 190, 178, 179, 93, 176, 205, 200, 195, 199, 204, 197, 186, 180, 173, 200, 217, - 179, 77, 46, 125, 190, 211, 197, 202, 217, 214, 217, 198, 173, 187, 151, 85, - 170, 194, 199, 198, 190, 188, 161, 187, 189, 168, 158, 63, 147, 167, 170, 167, - 176, 166, 165, 156, 168, 153, 125, 92, 180, 202, 200, 177, 148, 148, 152, 145, - 136, 117, 64, 117, 135, 125, 111, 97, 86, 77, 68, 62, 56, 53, 49, 46, - 71, 74, 80, 87, 94, 106, 118, 133, 146, 148, 128, 108, 97, 95, 108, 105, - 109, 92, 111, 163, 165, 157, 148, 142, 136, 136, 138, 142, 146, 152, 160, 165, - 173, 182, 181, 182, 187, 196, 209, 216, 207, 227, 234, 225, 148, 155, 144, 154, - 187, 156, 160, 98, 176, 204, 199, 192, 198, 205, 199, 192, 187, 188, 202, 178, - 87, 98, 75, 139, 200, 209, 202, 193, 182, 184, 190, 159, 153, 197, 135, 101, - 186, 198, 200, 193, 186, 190, 156, 202, 174, 167, 146, 65, 150, 169, 171, 166, - 164, 155, 165, 149, 151, 142, 127, 90, 186, 197, 200, 180, 162, 151, 138, 128, - 118, 127, 65, 116, 133, 125, 112, 94, 83, 75, 66, 60, 55, 52, 49, 46, - 70, 74, 80, 87, 94, 106, 118, 132, 143, 150, 130, 111, 97, 90, 114, 114, - 116, 96, 106, 163, 167, 158, 147, 142, 141, 140, 140, 143, 148, 154, 161, 168, - 176, 179, 177, 180, 186, 197, 209, 211, 202, 226, 229, 218, 151, 162, 163, 159, - 154, 122, 137, 92, 177, 204, 198, 192, 195, 201, 200, 192, 192, 197, 181, 137, - 125, 205, 91, 152, 202, 205, 205, 193, 177, 178, 163, 145, 158, 201, 139, 110, - 194, 197, 200, 198, 177, 178, 167, 192, 164, 158, 130, 67, 153, 171, 172, 171, - 163, 164, 169, 148, 158, 148, 136, 99, 181, 200, 197, 179, 160, 135, 124, 120, - 119, 110, 61, 117, 132, 121, 108, 92, 82, 73, 65, 59, 54, 52, 48, 46, - 71, 74, 79, 85, 94, 105, 116, 131, 144, 152, 131, 103, 90, 93, 118, 119, - 118, 111, 95, 162, 167, 159, 149, 143, 142, 141, 143, 145, 149, 154, 163, 171, - 178, 176, 172, 179, 183, 198, 211, 203, 199, 225, 226, 215, 191, 182, 189, 183, - 161, 146, 156, 87, 176, 202, 198, 193, 193, 196, 196, 193, 198, 169, 125, 151, - 221, 238, 94, 150, 198, 203, 201, 196, 202, 178, 143, 154, 176, 199, 141, 114, - 192, 197, 198, 193, 170, 167, 149, 174, 152, 140, 124, 67, 154, 173, 174, 171, - 170, 180, 176, 159, 170, 160, 150, 108, 169, 198, 190, 172, 152, 119, 129, 129, - 136, 86, 71, 120, 129, 117, 102, 89, 79, 70, 62, 57, 54, 51, 47, 46, - 72, 74, 78, 84, 94, 105, 116, 130, 143, 151, 135, 106, 99, 108, 115, 123, - 119, 113, 94, 158, 167, 160, 152, 146, 144, 143, 145, 148, 151, 156, 163, 172, - 176, 171, 175, 180, 185, 200, 203, 196, 200, 225, 223, 220, 206, 171, 181, 192, - 188, 187, 160, 89, 175, 202, 198, 193, 193, 196, 194, 183, 172, 124, 175, 226, - 239, 198, 78, 151, 197, 200, 198, 193, 193, 160, 154, 183, 191, 192, 106, 115, - 192, 198, 196, 196, 180, 172, 168, 168, 139, 138, 146, 67, 155, 175, 175, 173, - 171, 175, 164, 152, 151, 140, 135, 104, 149, 194, 195, 168, 149, 125, 139, 134, - 128, 67, 80, 124, 125, 114, 100, 87, 77, 69, 60, 56, 53, 51, 47, 46, - 71, 72, 77, 83, 92, 103, 114, 128, 140, 150, 142, 117, 112, 119, 107, 132, - 133, 125, 92, 150, 169, 164, 156, 152, 147, 147, 148, 151, 153, 159, 164, 169, - 172, 171, 174, 172, 187, 200, 197, 194, 203, 224, 219, 216, 159, 168, 132, 178, - 192, 148, 124, 94, 175, 204, 198, 190, 194, 198, 193, 170, 127, 183, 239, 236, - 204, 169, 81, 151, 197, 199, 196, 193, 184, 186, 167, 193, 194, 189, 105, 116, - 192, 197, 194, 191, 190, 165, 176, 168, 143, 147, 161, 69, 157, 177, 178, 178, - 172, 164, 148, 151, 136, 131, 132, 133, 140, 172, 175, 150, 140, 131, 125, 118, - 85, 55, 105, 128, 121, 110, 97, 84, 75, 67, 59, 55, 53, 50, 47, 46, - 71, 72, 77, 82, 91, 102, 113, 126, 139, 150, 149, 130, 117, 126, 113, 144, - 149, 141, 92, 145, 172, 168, 159, 154, 149, 148, 150, 153, 156, 162, 164, 166, - 171, 171, 167, 172, 179, 187, 196, 191, 207, 222, 216, 210, 87, 87, 129, 197, - 159, 92, 142, 98, 175, 205, 198, 190, 194, 199, 193, 163, 192, 244, 236, 210, - 204, 196, 93, 150, 196, 198, 194, 186, 169, 204, 160, 186, 182, 183, 115, 115, - 191, 196, 193, 184, 190, 158, 160, 167, 155, 155, 155, 69, 158, 179, 180, 182, - 178, 167, 151, 149, 137, 142, 143, 155, 150, 159, 153, 118, 116, 126, 119, 96, - 58, 78, 128, 131, 117, 106, 93, 82, 72, 66, 58, 54, 52, 49, 47, 46, - 70, 71, 76, 82, 90, 101, 112, 125, 139, 150, 155, 142, 129, 133, 124, 150, - 139, 120, 96, 130, 173, 173, 161, 156, 152, 151, 153, 156, 160, 164, 165, 167, - 174, 166, 170, 195, 181, 170, 186, 187, 208, 218, 213, 209, 150, 119, 133, 139, - 79, 118, 186, 98, 174, 204, 198, 191, 194, 198, 193, 194, 236, 212, 201, 207, - 197, 216, 90, 151, 196, 196, 192, 181, 178, 195, 147, 185, 186, 189, 118, 113, - 190, 195, 192, 185, 186, 165, 155, 168, 160, 159, 159, 69, 158, 179, 181, 184, - 186, 181, 168, 147, 135, 135, 132, 154, 150, 145, 135, 109, 122, 123, 100, 71, - 67, 115, 136, 132, 114, 103, 90, 79, 70, 64, 57, 54, 51, 48, 46, 46, - 70, 71, 76, 81, 89, 100, 111, 124, 137, 147, 156, 148, 137, 138, 130, 150, - 125, 110, 117, 116, 169, 176, 164, 160, 157, 156, 159, 161, 163, 164, 165, 169, - 175, 166, 179, 212, 194, 161, 168, 185, 209, 213, 212, 211, 184, 197, 165, 131, - 122, 201, 192, 90, 173, 203, 199, 193, 193, 197, 193, 205, 229, 170, 163, 189, - 167, 218, 89, 151, 195, 194, 190, 189, 209, 189, 138, 168, 182, 186, 127, 114, - 189, 193, 191, 188, 172, 162, 161, 168, 158, 157, 163, 67, 157, 179, 181, 184, - 189, 189, 183, 158, 139, 132, 133, 153, 133, 123, 120, 122, 132, 99, 66, 67, - 102, 140, 141, 132, 113, 102, 87, 77, 69, 63, 56, 53, 50, 48, 46, 46, - 69, 71, 76, 80, 88, 99, 109, 122, 133, 143, 155, 150, 136, 140, 128, 148, - 143, 152, 153, 117, 160, 176, 170, 165, 162, 162, 164, 166, 167, 165, 166, 169, - 172, 173, 180, 199, 195, 148, 141, 184, 210, 211, 212, 204, 209, 201, 200, 205, - 210, 222, 213, 100, 172, 201, 200, 195, 193, 194, 193, 199, 200, 192, 206, 160, - 208, 219, 85, 149, 194, 193, 189, 190, 191, 168, 148, 157, 150, 141, 87, 114, - 188, 193, 191, 186, 150, 141, 155, 163, 158, 152, 153, 65, 156, 177, 180, 183, - 187, 187, 184, 163, 146, 142, 147, 135, 110, 124, 140, 130, 97, 67, 84, 116, - 148, 147, 145, 131, 113, 102, 86, 76, 68, 63, 56, 53, 50, 47, 46, 46, - 68, 73, 77, 81, 87, 97, 105, 117, 129, 140, 149, 154, 151, 143, 122, 132, - 155, 148, 155, 115, 140, 171, 177, 171, 166, 164, 170, 168, 172, 167, 171, 169, - 173, 177, 170, 151, 184, 107, 111, 185, 212, 208, 208, 203, 218, 203, 211, 212, - 213, 230, 228, 102, 167, 196, 200, 196, 192, 194, 191, 191, 187, 189, 217, 205, - 191, 184, 84, 146, 192, 192, 190, 183, 154, 155, 174, 187, 195, 177, 117, 117, - 186, 196, 191, 188, 135, 101, 103, 135, 149, 152, 144, 64, 157, 176, 180, 181, - 184, 181, 167, 134, 149, 144, 119, 93, 103, 112, 104, 106, 115, 131, 154, 163, - 163, 155, 144, 132, 117, 102, 89, 77, 69, 63, 57, 53, 49, 47, 46, 46, - 68, 72, 77, 80, 86, 95, 103, 114, 124, 136, 146, 153, 149, 134, 128, 129, - 142, 131, 141, 145, 118, 163, 174, 177, 173, 172, 175, 171, 170, 168, 169, 173, - 177, 202, 169, 173, 152, 71, 125, 186, 210, 206, 205, 201, 217, 189, 197, 210, - 191, 224, 203, 104, 161, 194, 200, 200, 195, 190, 188, 194, 207, 202, 183, 174, - 154, 158, 72, 146, 189, 194, 189, 182, 185, 203, 188, 185, 192, 180, 120, 114, - 186, 197, 195, 187, 173, 151, 114, 109, 123, 129, 127, 63, 152, 177, 180, 186, - 184, 168, 143, 136, 148, 138, 74, 92, 150, 163, 163, 172, 176, 177, 181, 178, - 169, 157, 146, 132, 117, 103, 90, 78, 70, 63, 57, 53, 49, 47, 47, 46, - 69, 72, 76, 79, 85, 93, 100, 110, 119, 131, 142, 150, 146, 136, 138, 123, - 119, 120, 155, 157, 131, 143, 175, 172, 177, 173, 174, 174, 168, 165, 163, 172, - 197, 204, 176, 174, 107, 81, 152, 192, 204, 198, 199, 202, 204, 186, 200, 197, - 186, 209, 170, 119, 150, 195, 193, 195, 196, 193, 185, 196, 213, 202, 161, 117, - 150, 157, 76, 151, 190, 193, 191, 185, 205, 210, 168, 173, 177, 168, 113, 118, - 183, 190, 192, 181, 178, 164, 157, 152, 127, 118, 131, 64, 156, 175, 180, 180, - 178, 158, 133, 126, 130, 131, 98, 124, 183, 186, 193, 196, 196, 190, 184, 180, - 169, 157, 147, 132, 117, 103, 91, 80, 71, 64, 57, 53, 49, 48, 47, 46, - 69, 72, 75, 78, 84, 91, 96, 106, 116, 127, 138, 148, 150, 154, 166, 157, - 151, 142, 159, 163, 148, 143, 153, 171, 179, 179, 174, 170, 162, 166, 170, 193, - 201, 193, 180, 158, 74, 119, 169, 195, 198, 187, 193, 198, 193, 191, 202, 195, - 194, 221, 203, 159, 135, 179, 186, 193, 196, 192, 181, 184, 202, 183, 198, 173, - 122, 140, 90, 139, 190, 193, 189, 182, 202, 184, 154, 170, 166, 163, 120, 111, - 176, 184, 186, 181, 181, 134, 154, 157, 164, 160, 152, 81, 148, 175, 182, 184, - 178, 149, 137, 126, 111, 107, 116, 115, 144, 152, 175, 186, 186, 185, 182, 176, - 171, 159, 147, 134, 119, 105, 93, 82, 72, 65, 57, 53, 49, 48, 47, 46, - 69, 71, 74, 76, 82, 88, 92, 101, 111, 123, 134, 145, 148, 148, 159, 171, - 167, 163, 164, 158, 152, 166, 139, 162, 168, 173, 164, 156, 158, 168, 182, 203, - 197, 186, 166, 98, 88, 147, 181, 192, 189, 183, 191, 187, 192, 189, 187, 191, - 198, 213, 213, 211, 162, 163, 175, 182, 190, 186, 181, 186, 187, 181, 201, 197, - 123, 132, 118, 134, 178, 187, 185, 194, 193, 162, 158, 168, 162, 164, 130, 97, - 165, 179, 172, 168, 170, 108, 158, 154, 157, 156, 158, 114, 128, 169, 175, 176, - 174, 134, 132, 101, 106, 104, 114, 99, 72, 103, 145, 138, 140, 150, 157, 164, - 166, 158, 147, 137, 122, 109, 95, 84, 73, 66, 58, 53, 50, 48, 47, 46, - 69, 71, 74, 75, 81, 86, 89, 97, 105, 117, 128, 140, 151, 152, 152, 160, - 141, 161, 174, 133, 128, 145, 144, 167, 160, 149, 149, 164, 192, 183, 148, 143, - 173, 170, 116, 69, 129, 164, 188, 191, 197, 206, 214, 200, 193, 188, 193, 205, - 204, 206, 200, 189, 199, 216, 205, 148, 176, 192, 188, 191, 183, 171, 168, 182, - 194, 195, 188, 164, 153, 168, 196, 207, 172, 151, 150, 162, 159, 154, 111, 113, - 149, 151, 147, 133, 127, 89, 156, 124, 142, 145, 140, 132, 138, 145, 156, 178, - 176, 109, 111, 97, 118, 111, 85, 68, 88, 119, 109, 84, 87, 98, 107, 125, - 136, 144, 146, 138, 125, 112, 99, 85, 75, 66, 58, 54, 50, 48, 47, 46, - 69, 71, 73, 74, 80, 84, 88, 95, 101, 112, 124, 135, 140, 150, 152, 154, - 144, 167, 162, 130, 102, 108, 131, 163, 166, 155, 160, 196, 201, 159, 145, 173, - 168, 137, 76, 110, 150, 170, 184, 182, 196, 210, 214, 198, 187, 190, 203, 208, - 199, 205, 191, 180, 204, 199, 185, 112, 162, 210, 198, 184, 182, 156, 176, 191, - 175, 179, 181, 177, 132, 146, 203, 188, 148, 150, 154, 162, 160, 144, 121, 140, - 130, 115, 115, 113, 106, 100, 145, 135, 138, 132, 128, 135, 147, 121, 134, 172, - 166, 93, 81, 78, 98, 103, 91, 91, 109, 115, 91, 80, 88, 95, 93, 99, - 107, 122, 136, 136, 125, 117, 101, 87, 76, 67, 59, 55, 51, 48, 47, 46, - 70, 70, 72, 73, 79, 82, 87, 93, 98, 109, 119, 130, 140, 145, 152, 152, - 142, 171, 153, 156, 158, 158, 177, 180, 189, 174, 178, 220, 201, 190, 185, 211, - 175, 86, 92, 145, 161, 170, 182, 180, 200, 208, 208, 188, 183, 192, 202, 197, - 202, 197, 177, 187, 205, 186, 162, 91, 158, 211, 191, 174, 173, 170, 189, 181, - 153, 154, 164, 172, 111, 124, 187, 160, 145, 160, 161, 163, 164, 142, 161, 114, - 100, 87, 85, 64, 70, 113, 145, 138, 134, 129, 127, 135, 130, 99, 107, 173, - 173, 132, 110, 117, 112, 114, 100, 99, 123, 113, 101, 97, 106, 106, 98, 97, - 93, 94, 106, 126, 125, 121, 103, 89, 78, 69, 61, 56, 52, 49, 47, 46, - 69, 70, 72, 72, 78, 81, 85, 91, 94, 105, 113, 124, 133, 140, 147, 152, - 148, 143, 145, 168, 177, 186, 199, 200, 212, 136, 195, 212, 172, 188, 184, 159, - 95, 94, 139, 154, 161, 169, 179, 174, 185, 180, 177, 172, 177, 187, 198, 198, - 197, 191, 187, 197, 206, 182, 174, 88, 147, 164, 137, 149, 164, 172, 185, 177, - 160, 161, 159, 146, 94, 123, 183, 171, 169, 173, 150, 127, 114, 68, 71, 78, - 107, 77, 124, 132, 128, 157, 152, 143, 137, 130, 127, 135, 130, 100, 110, 175, - 179, 152, 126, 124, 124, 129, 88, 100, 123, 97, 93, 89, 92, 86, 80, 82, - 82, 82, 78, 105, 126, 119, 106, 92, 80, 71, 62, 57, 52, 49, 47, 45, - 68, 69, 71, 72, 77, 79, 83, 88, 93, 101, 108, 117, 125, 133, 142, 146, - 149, 147, 142, 145, 176, 175, 193, 207, 181, 164, 214, 193, 145, 139, 87, 68, - 107, 137, 153, 161, 159, 165, 172, 169, 168, 143, 129, 128, 131, 134, 139, 137, - 129, 119, 118, 126, 130, 118, 121, 96, 149, 139, 109, 101, 105, 110, 112, 113, - 108, 107, 99, 97, 87, 126, 160, 130, 112, 101, 82, 72, 77, 72, 88, 103, - 93, 103, 148, 125, 100, 108, 95, 96, 92, 86, 85, 95, 90, 83, 114, 173, - 183, 164, 126, 118, 125, 103, 88, 117, 101, 71, 75, 80, 84, 78, 74, 68, - 73, 76, 66, 78, 115, 120, 108, 94, 82, 74, 64, 57, 53, 50, 47, 45, - 68, 68, 70, 71, 76, 77, 81, 86, 92, 99, 104, 111, 119, 126, 135, 141, - 151, 150, 145, 131, 118, 120, 145, 148, 117, 159, 157, 108, 100, 78, 93, 138, - 149, 155, 157, 153, 154, 161, 166, 164, 161, 137, 126, 130, 132, 130, 131, 139, - 137, 128, 125, 130, 130, 132, 128, 136, 156, 150, 132, 124, 124, 122, 120, 119, - 118, 122, 124, 120, 124, 138, 145, 130, 118, 116, 118, 120, 120, 113, 116, 114, - 115, 128, 135, 118, 107, 114, 115, 116, 114, 113, 113, 114, 118, 123, 151, 177, - 183, 177, 145, 117, 102, 78, 105, 99, 77, 77, 78, 80, 83, 80, 79, 73, - 67, 61, 60, 57, 95, 119, 109, 95, 83, 74, 65, 58, 53, 51, 48, 46, - 68, 68, 70, 71, 75, 76, 79, 84, 90, 96, 99, 105, 112, 119, 128, 136, - 147, 148, 150, 151, 145, 135, 128, 113, 100, 95, 97, 101, 117, 125, 138, 151, - 152, 154, 152, 149, 149, 155, 158, 160, 158, 151, 153, 160, 164, 160, 163, 169, - 164, 158, 156, 158, 157, 161, 152, 158, 157, 159, 155, 153, 152, 149, 147, 149, - 148, 147, 147, 147, 147, 148, 152, 144, 143, 144, 146, 146, 147, 140, 139, 136, - 146, 144, 148, 142, 142, 144, 142, 139, 139, 138, 139, 137, 150, 151, 161, 181, - 180, 183, 166, 136, 93, 104, 104, 81, 77, 88, 76, 79, 78, 76, 73, 69, - 63, 59, 62, 45, 78, 116, 109, 95, 83, 74, 65, 58, 54, 51, 48, 47, - 67, 68, 70, 71, 74, 75, 77, 82, 87, 92, 94, 99, 106, 113, 122, 129, - 140, 148, 145, 146, 143, 145, 143, 139, 138, 137, 135, 140, 138, 146, 160, 156, - 151, 147, 149, 145, 145, 151, 153, 157, 155, 157, 162, 165, 169, 164, 165, 177, - 172, 163, 162, 164, 166, 168, 164, 161, 159, 157, 158, 161, 159, 157, 154, 154, - 157, 154, 153, 152, 148, 151, 151, 147, 148, 147, 148, 150, 150, 145, 141, 145, - 146, 146, 145, 145, 143, 148, 148, 147, 146, 144, 144, 146, 155, 158, 166, 177, - 177, 168, 142, 121, 108, 106, 90, 84, 89, 88, 72, 76, 73, 75, 71, 67, - 63, 64, 61, 41, 68, 110, 110, 95, 83, 74, 65, 59, 54, 51, 48, 47, - 67, 68, 69, 70, 71, 73, 76, 79, 83, 86, 91, 96, 104, 109, 116, 122, - 132, 136, 138, 140, 141, 141, 142, 143, 145, 142, 144, 144, 145, 153, 155, 149, - 143, 141, 139, 137, 139, 143, 145, 147, 148, 150, 155, 157, 159, 157, 158, 170, - 167, 157, 154, 156, 159, 159, 156, 152, 151, 149, 149, 150, 149, 147, 146, 146, - 147, 146, 145, 144, 143, 144, 143, 142, 141, 140, 140, 141, 141, 139, 137, 137, - 138, 135, 135, 136, 134, 135, 136, 137, 136, 136, 139, 143, 149, 154, 163, 170, - 158, 109, 96, 105, 112, 106, 134, 127, 114, 96, 80, 73, 73, 70, 63, 63, - 56, 55, 44, 41, 60, 109, 107, 97, 85, 75, 65, 59, 54, 51, 49, 47, - 67, 68, 69, 69, 69, 72, 74, 77, 81, 84, 89, 94, 100, 105, 111, 116, - 123, 127, 131, 132, 134, 135, 136, 138, 141, 141, 140, 140, 143, 149, 148, 143, - 139, 135, 132, 131, 134, 137, 139, 139, 140, 143, 148, 149, 150, 149, 152, 162, - 160, 150, 147, 148, 151, 152, 149, 144, 143, 142, 141, 141, 140, 139, 138, 138, - 138, 138, 137, 136, 136, 135, 134, 134, 133, 132, 132, 133, 133, 132, 131, 128, - 127, 126, 126, 126, 126, 126, 126, 126, 127, 129, 133, 138, 143, 148, 156, 157, - 134, 98, 102, 99, 84, 91, 163, 178, 168, 154, 141, 127, 112, 92, 69, 57, - 60, 49, 40, 33, 51, 108, 111, 97, 85, 74, 65, 59, 54, 51, 49, 47, - 67, 68, 69, 70, 70, 71, 74, 75, 79, 83, 87, 91, 95, 100, 106, 110, - 115, 119, 123, 124, 127, 129, 130, 132, 134, 134, 135, 135, 138, 142, 141, 137, - 132, 129, 126, 125, 128, 131, 133, 134, 134, 136, 140, 143, 144, 142, 145, 154, - 152, 144, 141, 141, 143, 144, 142, 138, 136, 135, 135, 134, 134, 133, 132, 132, - 132, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 126, 125, 124, 123, 121, - 120, 119, 118, 118, 118, 118, 118, 119, 120, 123, 127, 132, 139, 143, 153, 145, - 107, 86, 88, 80, 61, 81, 170, 196, 193, 189, 183, 173, 163, 149, 121, 61, - 55, 42, 28, 27, 53, 108, 110, 96, 84, 73, 64, 58, 53, 50, 49, 47, - 67, 68, 69, 70, 70, 71, 73, 74, 77, 81, 85, 88, 92, 97, 102, 106, - 110, 113, 116, 118, 121, 122, 125, 126, 128, 128, 130, 130, 134, 136, 134, 131, - 127, 124, 122, 122, 125, 127, 129, 129, 129, 131, 135, 137, 139, 136, 138, 146, - 146, 139, 136, 135, 137, 139, 137, 133, 131, 130, 129, 129, 128, 127, 127, 126, - 126, 125, 124, 123, 122, 121, 121, 119, 118, 117, 117, 119, 118, 117, 116, 115, - 114, 113, 113, 113, 113, 113, 113, 113, 114, 118, 122, 127, 134, 140, 149, 135, - 91, 66, 54, 67, 61, 88, 172, 192, 193, 193, 192, 189, 187, 183, 163, 75, - 38, 24, 22, 34, 63, 109, 107, 94, 82, 72, 63, 58, 53, 50, 48, 46, - 67, 68, 69, 70, 70, 71, 72, 73, 76, 78, 82, 85, 89, 94, 99, 102, - 105, 108, 110, 111, 114, 116, 119, 120, 122, 123, 124, 126, 129, 129, 128, 125, - 122, 120, 118, 118, 121, 124, 124, 124, 125, 126, 129, 132, 134, 131, 132, 139, - 139, 134, 129, 127, 130, 133, 131, 127, 126, 125, 124, 124, 123, 122, 121, 121, - 120, 119, 119, 117, 116, 115, 114, 113, 112, 111, 110, 111, 111, 110, 110, 108, - 108, 107, 106, 106, 106, 106, 106, 107, 108, 112, 117, 123, 130, 137, 145, 125, - 88, 64, 47, 77, 70, 96, 175, 192, 193, 193, 194, 193, 190, 187, 172, 92, - 39, 23, 47, 45, 67, 107, 108, 93, 81, 71, 62, 57, 52, 49, 47, 45, - 67, 68, 69, 70, 70, 71, 71, 72, 74, 76, 79, 82, 86, 89, 93, 96, - 101, 103, 104, 105, 108, 110, 113, 115, 114, 116, 118, 121, 124, 122, 120, 117, - 116, 114, 113, 114, 117, 119, 119, 119, 119, 120, 123, 125, 127, 124, 125, 131, - 131, 128, 122, 120, 123, 125, 124, 121, 120, 119, 118, 118, 117, 116, 115, 114, - 113, 112, 112, 109, 108, 107, 107, 106, 106, 105, 104, 103, 103, 102, 101, 101, - 100, 99, 99, 98, 98, 98, 98, 100, 101, 106, 112, 117, 124, 132, 139, 119, - 88, 67, 61, 84, 71, 94, 172, 188, 189, 188, 188, 186, 185, 187, 170, 88, - 48, 48, 69, 45, 73, 109, 108, 92, 80, 70, 61, 56, 52, 49, 47, 45, - 66, 67, 68, 69, 69, 70, 70, 71, 72, 74, 78, 80, 82, 85, 88, 91, - 95, 98, 99, 100, 102, 104, 107, 108, 107, 109, 111, 115, 117, 115, 113, 111, - 109, 108, 107, 109, 111, 113, 112, 113, 114, 115, 117, 120, 121, 118, 119, 124, - 125, 121, 116, 114, 116, 118, 118, 116, 114, 113, 112, 112, 112, 111, 110, 107, - 106, 105, 105, 103, 102, 101, 100, 100, 100, 99, 98, 97, 96, 95, 94, 94, - 93, 92, 91, 91, 91, 91, 91, 93, 95, 100, 105, 111, 118, 126, 135, 122, - 85, 62, 65, 74, 65, 85, 159, 181, 181, 180, 180, 176, 176, 175, 147, 52, - 41, 66, 57, 41, 88, 113, 102, 90, 79, 69, 61, 56, 52, 49, 47, 45, - 66, 67, 67, 68, 69, 69, 70, 71, 72, 74, 77, 79, 81, 84, 87, 89, - 90, 92, 94, 96, 100, 101, 103, 104, 103, 104, 109, 113, 112, 111, 108, 107, - 104, 102, 103, 105, 108, 109, 108, 109, 113, 114, 116, 116, 114, 113, 114, 119, - 120, 118, 112, 111, 111, 112, 113, 112, 111, 109, 107, 107, 107, 106, 105, 102, - 101, 100, 100, 99, 98, 97, 97, 95, 93, 93, 92, 91, 91, 90, 89, 88, - 88, 88, 88, 87, 87, 87, 87, 89, 90, 95, 99, 105, 113, 122, 132, 127, - 87, 55, 65, 61, 58, 69, 132, 166, 172, 172, 172, 170, 168, 156, 100, 37, - 53, 65, 48, 56, 103, 115, 101, 87, 77, 69, 62, 56, 53, 49, 45, 45, - 66, 67, 67, 68, 69, 69, 70, 71, 71, 73, 75, 77, 79, 81, 83, 85, - 87, 88, 90, 92, 94, 96, 98, 99, 99, 100, 104, 107, 106, 104, 103, 102, - 101, 100, 101, 103, 104, 105, 104, 105, 107, 109, 111, 111, 109, 108, 109, 113, - 115, 112, 108, 105, 106, 106, 108, 108, 106, 105, 103, 102, 101, 100, 99, 99, - 98, 97, 96, 94, 93, 92, 91, 90, 89, 89, 88, 87, 87, 86, 85, 85, - 84, 84, 84, 83, 83, 83, 83, 84, 85, 88, 93, 101, 109, 116, 127, 129, - 92, 52, 61, 49, 48, 50, 90, 134, 157, 159, 153, 148, 121, 92, 65, 45, - 65, 56, 38, 76, 109, 109, 102, 85, 75, 68, 61, 55, 52, 49, 45, 45, - 66, 67, 67, 68, 69, 69, 70, 71, 71, 72, 74, 75, 76, 78, 80, 81, - 82, 84, 86, 88, 89, 91, 93, 94, 94, 96, 100, 101, 99, 98, 97, 97, - 98, 97, 98, 99, 100, 101, 101, 101, 103, 105, 107, 106, 105, 104, 105, 108, - 109, 107, 103, 101, 101, 102, 102, 103, 101, 100, 98, 96, 96, 95, 94, 94, - 93, 93, 92, 90, 88, 87, 87, 86, 85, 84, 84, 83, 82, 82, 81, 80, - 80, 80, 80, 79, 79, 79, 79, 78, 80, 83, 87, 96, 104, 111, 121, 128, - 109, 65, 52, 47, 46, 48, 59, 74, 88, 89, 87, 85, 63, 46, 51, 62, - 65, 45, 59, 98, 113, 104, 99, 82, 73, 67, 59, 54, 52, 49, 45, 45, - 66, 67, 67, 68, 69, 69, 70, 71, 71, 71, 72, 74, 74, 76, 77, 78, - 79, 81, 83, 85, 87, 89, 90, 91, 92, 95, 97, 97, 95, 94, 94, 94, - 94, 94, 96, 98, 99, 100, 99, 99, 100, 102, 104, 103, 102, 100, 102, 104, - 106, 104, 100, 98, 97, 98, 99, 99, 97, 95, 94, 93, 93, 92, 92, 91, - 90, 89, 88, 87, 86, 85, 85, 82, 81, 80, 79, 79, 78, 78, 77, 75, - 75, 75, 75, 74, 74, 74, 74, 76, 76, 81, 85, 92, 100, 107, 117, 126, - 125, 96, 64, 52, 46, 54, 55, 58, 56, 54, 55, 48, 49, 51, 61, 67, - 51, 50, 90, 111, 112, 101, 93, 79, 71, 65, 58, 52, 51, 49, 45, 45, - 66, 67, 67, 68, 69, 69, 70, 71, 71, 71, 71, 72, 74, 75, 76, 77, - 77, 78, 80, 82, 85, 87, 88, 88, 89, 93, 94, 93, 92, 92, 92, 91, - 90, 90, 93, 95, 97, 98, 97, 96, 98, 100, 101, 101, 100, 98, 100, 102, - 103, 102, 99, 95, 95, 96, 97, 96, 95, 93, 91, 92, 92, 91, 90, 88, - 87, 87, 86, 85, 85, 84, 83, 80, 79, 78, 77, 77, 76, 75, 75, 73, - 73, 73, 73, 71, 71, 71, 71, 73, 74, 78, 82, 88, 96, 102, 113, 125, - 126, 124, 104, 70, 53, 57, 54, 54, 54, 50, 52, 53, 43, 46, 57, 49, - 56, 92, 112, 113, 106, 98, 85, 76, 68, 63, 56, 52, 50, 49, 45, 45, - 66, 67, 67, 68, 69, 69, 70, 70, 71, 71, 71, 71, 75, 76, 76, 76, - 76, 77, 79, 81, 82, 83, 85, 85, 86, 89, 90, 89, 89, 89, 90, 89, - 87, 88, 91, 92, 93, 94, 93, 93, 95, 97, 99, 99, 97, 96, 97, 99, - 100, 98, 96, 92, 92, 93, 94, 94, 93, 91, 90, 89, 88, 88, 87, 87, - 87, 86, 86, 84, 83, 82, 82, 79, 79, 78, 77, 77, 76, 75, 74, 72, - 72, 72, 72, 70, 70, 70, 70, 71, 72, 75, 80, 84, 91, 97, 108, 119, - 123, 128, 126, 106, 79, 70, 59, 53, 50, 48, 51, 48, 55, 49, 55, 72, - 92, 113, 117, 110, 101, 92, 82, 73, 66, 62, 55, 51, 50, 49, 45, 45, - 64, 65, 66, 66, 68, 68, 69, 70, 71, 70, 71, 71, 73, 73, 74, 74, - 75, 76, 77, 79, 80, 80, 81, 83, 84, 86, 86, 86, 86, 86, 87, 86, - 86, 87, 89, 91, 91, 92, 91, 90, 92, 94, 95, 95, 94, 93, 93, 94, - 96, 96, 93, 90, 89, 89, 91, 92, 91, 89, 89, 88, 87, 86, 85, 85, - 85, 84, 83, 81, 80, 79, 78, 78, 77, 76, 75, 75, 74, 73, 73, 70, - 69, 69, 68, 68, 68, 68, 68, 68, 70, 73, 77, 81, 87, 93, 101, 113, - 119, 124, 128, 128, 112, 102, 91, 78, 71, 69, 72, 70, 75, 80, 94, 110, - 117, 114, 111, 103, 94, 85, 77, 69, 63, 58, 54, 51, 48, 47, 44, 45, - 64, 64, 65, 66, 67, 68, 69, 70, 70, 70, 71, 71, 71, 71, 72, 73, - 74, 75, 76, 77, 79, 78, 79, 81, 84, 85, 85, 85, 85, 85, 86, 85, - 85, 87, 89, 90, 92, 91, 90, 90, 91, 92, 92, 93, 92, 92, 91, 92, - 94, 95, 92, 89, 87, 87, 89, 90, 89, 88, 87, 87, 86, 85, 85, 83, - 82, 81, 81, 78, 77, 76, 76, 76, 75, 74, 73, 73, 72, 71, 71, 69, - 69, 68, 67, 67, 67, 67, 67, 67, 70, 73, 76, 79, 84, 90, 97, 107, - 113, 120, 125, 129, 129, 126, 123, 117, 111, 108, 107, 106, 111, 116, 119, 119, - 117, 112, 105, 96, 88, 80, 72, 64, 60, 55, 52, 51, 48, 45, 44, 45, - 64, 64, 65, 66, 67, 67, 68, 69, 70, 70, 70, 70, 70, 71, 72, 73, - 74, 74, 75, 76, 78, 77, 79, 81, 83, 84, 84, 84, 84, 84, 85, 84, - 85, 87, 88, 90, 91, 90, 89, 89, 90, 91, 92, 92, 92, 91, 90, 91, - 93, 94, 91, 88, 86, 87, 88, 89, 88, 87, 87, 86, 86, 85, 84, 82, - 81, 80, 80, 78, 76, 76, 75, 75, 74, 73, 72, 72, 71, 70, 70, 69, - 68, 67, 66, 66, 66, 66, 67, 66, 69, 72, 74, 77, 82, 88, 93, 101, - 107, 113, 119, 123, 127, 129, 129, 130, 126, 125, 125, 123, 123, 122, 120, 115, - 111, 104, 97, 90, 83, 75, 68, 62, 58, 53, 51, 50, 47, 45, 44, 45, - 64, 64, 65, 66, 66, 67, 67, 68, 70, 70, 70, 70, 70, 70, 71, 72, - 73, 74, 75, 75, 76, 77, 79, 81, 82, 83, 83, 83, 83, 83, 84, 84, - 84, 86, 88, 89, 89, 89, 88, 87, 89, 90, 90, 91, 90, 89, 89, 89, - 92, 93, 90, 88, 86, 85, 87, 87, 87, 86, 85, 85, 84, 84, 83, 81, - 80, 79, 78, 77, 76, 75, 74, 74, 72, 72, 71, 70, 70, 69, 68, 68, - 67, 66, 66, 66, 66, 66, 65, 65, 67, 70, 71, 74, 78, 83, 88, 95, - 101, 107, 111, 115, 118, 122, 121, 120, 120, 120, 121, 120, 118, 115, 112, 109, - 104, 97, 90, 85, 78, 71, 65, 59, 56, 52, 49, 49, 47, 45, 44, 45, - 64, 64, 65, 66, 66, 66, 67, 68, 69, 69, 69, 69, 69, 70, 71, 71, - 72, 73, 74, 75, 75, 76, 79, 81, 81, 82, 82, 82, 82, 82, 83, 83, - 84, 85, 87, 88, 89, 88, 87, 86, 87, 88, 89, 89, 89, 88, 87, 88, - 91, 92, 89, 87, 85, 84, 85, 86, 86, 85, 84, 84, 83, 82, 82, 80, - 79, 78, 77, 76, 75, 74, 74, 73, 71, 71, 70, 69, 69, 68, 67, 67, - 67, 66, 65, 65, 65, 65, 65, 64, 65, 67, 68, 71, 75, 79, 83, 91, - 96, 101, 106, 110, 112, 114, 113, 113, 115, 116, 115, 113, 112, 110, 108, 103, - 98, 91, 85, 80, 74, 68, 62, 56, 54, 50, 48, 48, 46, 45, 45, 45, - 64, 64, 65, 65, 65, 66, 67, 67, 69, 69, 69, 69, 69, 69, 70, 71, - 71, 72, 73, 74, 73, 75, 78, 81, 80, 81, 81, 81, 81, 81, 82, 82, - 83, 85, 87, 88, 88, 87, 86, 86, 86, 87, 88, 88, 88, 87, 86, 87, - 90, 91, 88, 86, 85, 83, 84, 85, 85, 84, 83, 83, 82, 81, 81, 79, - 78, 77, 76, 76, 75, 74, 74, 71, 71, 70, 69, 69, 68, 67, 66, 67, - 66, 66, 65, 65, 65, 65, 64, 63, 64, 65, 66, 69, 72, 76, 79, 84, - 89, 95, 98, 103, 106, 107, 107, 106, 108, 109, 107, 104, 103, 102, 99, 95, - 91, 85, 80, 75, 69, 63, 58, 54, 52, 48, 47, 47, 46, 45, 45, 45, - 64, 64, 65, 65, 65, 66, 67, 67, 69, 69, 69, 69, 69, 69, 70, 71, - 71, 72, 73, 73, 73, 74, 78, 80, 80, 81, 81, 81, 81, 81, 82, 82, - 83, 85, 86, 87, 87, 86, 86, 85, 85, 86, 87, 88, 87, 86, 85, 86, - 90, 90, 87, 86, 85, 83, 83, 84, 84, 83, 83, 83, 82, 81, 80, 78, - 77, 76, 76, 76, 75, 74, 73, 71, 70, 69, 69, 68, 68, 67, 66, 66, - 66, 65, 65, 65, 65, 65, 64, 63, 63, 65, 65, 67, 70, 74, 76, 79, - 83, 88, 91, 91, 96, 99, 100, 99, 102, 101, 99, 99, 97, 94, 92, 88, - 85, 81, 75, 69, 64, 59, 55, 52, 50, 48, 46, 46, 46, 45, 45, 45, - 64, 64, 65, 65, 65, 65, 65, 65, 66, 67, 67, 68, 68, 69, 70, 71, - 71, 71, 72, 73, 73, 75, 77, 79, 79, 80, 80, 79, 79, 79, 80, 80, - 82, 83, 84, 84, 84, 84, 84, 84, 85, 86, 87, 87, 86, 85, 84, 85, - 86, 88, 86, 83, 81, 79, 79, 82, 83, 83, 83, 81, 79, 79, 78, 77, - 76, 75, 75, 75, 75, 74, 73, 71, 70, 69, 69, 68, 68, 67, 67, 67, - 67, 66, 65, 65, 64, 63, 62, 62, 62, 64, 64, 64, 67, 69, 71, 76, - 79, 83, 86, 87, 90, 93, 93, 92, 92, 92, 92, 91, 89, 87, 85, 82, - 78, 73, 68, 64, 61, 56, 53, 51, 49, 47, 45, 45, 45, 45, 45, 45, - 64, 64, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 68, 69, 70, 70, - 70, 71, 72, 73, 73, 75, 76, 78, 79, 79, 79, 79, 79, 79, 80, 80, - 81, 82, 83, 83, 83, 83, 83, 84, 84, 85, 86, 86, 85, 84, 83, 83, - 86, 87, 85, 82, 80, 79, 79, 81, 82, 82, 82, 80, 79, 78, 77, 76, - 75, 74, 74, 74, 74, 73, 72, 71, 70, 69, 69, 68, 68, 68, 68, 68, - 67, 66, 65, 65, 64, 62, 61, 61, 62, 63, 64, 63, 65, 67, 69, 71, - 74, 77, 79, 81, 84, 86, 86, 85, 85, 85, 85, 83, 82, 80, 79, 77, - 74, 70, 66, 62, 58, 54, 52, 50, 49, 47, 45, 45, 45, 45, 45, 45, - 64, 64, 64, 64, 64, 64, 64, 64, 65, 66, 66, 67, 68, 68, 69, 70, - 70, 71, 71, 72, 73, 74, 76, 77, 77, 78, 78, 78, 78, 78, 79, 80, - 81, 82, 82, 83, 82, 82, 82, 82, 84, 85, 85, 85, 84, 83, 82, 83, - 85, 87, 85, 82, 80, 78, 78, 80, 81, 81, 81, 80, 79, 78, 77, 75, - 74, 73, 73, 73, 73, 72, 71, 71, 70, 69, 69, 68, 68, 68, 68, 67, - 66, 66, 65, 65, 64, 62, 61, 61, 61, 62, 62, 62, 63, 65, 66, 66, - 68, 70, 73, 75, 77, 78, 80, 79, 79, 79, 78, 76, 75, 73, 73, 71, - 68, 64, 62, 59, 56, 52, 50, 50, 48, 46, 45, 45, 45, 45, 45, 45, - 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 66, 67, 67, 68, 68, 69, - 70, 70, 71, 72, 73, 74, 75, 76, 77, 78, 78, 78, 78, 78, 79, 79, - 80, 81, 82, 82, 81, 81, 81, 81, 82, 83, 84, 83, 82, 82, 81, 81, - 84, 86, 84, 81, 79, 78, 78, 79, 80, 80, 80, 79, 78, 77, 77, 75, - 73, 73, 72, 73, 72, 71, 71, 71, 70, 69, 69, 67, 67, 67, 67, 67, - 66, 65, 65, 65, 64, 62, 61, 61, 61, 61, 61, 61, 61, 62, 63, 63, - 64, 67, 69, 71, 72, 73, 74, 74, 74, 74, 74, 72, 71, 69, 67, 65, - 63, 60, 58, 56, 53, 50, 49, 48, 48, 46, 45, 45, 45, 45, 44, 44, - 63, 63, 63, 63, 63, 63, 63, 63, 64, 65, 66, 66, 67, 67, 68, 69, - 69, 70, 71, 72, 74, 74, 74, 74, 76, 77, 77, 77, 77, 77, 78, 78, - 80, 80, 82, 81, 80, 80, 80, 80, 81, 81, 82, 82, 81, 80, 79, 80, - 83, 85, 82, 80, 79, 77, 77, 78, 79, 79, 79, 78, 78, 77, 76, 74, - 73, 72, 72, 72, 72, 71, 70, 70, 70, 69, 69, 67, 67, 67, 67, 66, - 66, 65, 64, 64, 64, 62, 61, 61, 60, 60, 60, 60, 60, 60, 61, 62, - 63, 65, 66, 69, 70, 70, 71, 70, 70, 70, 70, 68, 66, 64, 63, 61, - 59, 57, 54, 53, 50, 47, 47, 47, 47, 46, 45, 45, 45, 45, 44, 44, - 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 65, 66, 66, 67, 68, 68, - 69, 69, 70, 71, 74, 73, 73, 74, 75, 75, 75, 76, 76, 77, 77, 78, - 79, 80, 81, 81, 79, 79, 79, 79, 80, 80, 81, 81, 80, 79, 78, 79, - 82, 83, 81, 79, 78, 76, 77, 77, 77, 77, 77, 77, 77, 76, 75, 74, - 73, 72, 71, 71, 71, 70, 70, 70, 70, 69, 69, 66, 66, 66, 66, 66, - 65, 64, 64, 64, 64, 62, 61, 61, 60, 59, 58, 58, 58, 58, 58, 59, - 59, 61, 63, 65, 66, 66, 66, 65, 64, 64, 64, 63, 61, 60, 59, 58, - 57, 54, 52, 50, 47, 46, 46, 46, 46, 46, 45, 45, 45, 45, 44, 43, - 62, 62, 62, 62, 63, 63, 63, 63, 64, 64, 65, 65, 65, 66, 67, 67, - 68, 69, 70, 71, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 76, 77, - 79, 79, 80, 80, 79, 79, 79, 78, 79, 80, 81, 81, 79, 79, 78, 78, - 80, 82, 80, 79, 77, 76, 76, 77, 77, 77, 77, 77, 76, 75, 74, 72, - 72, 71, 71, 71, 71, 70, 70, 70, 69, 68, 68, 66, 66, 66, 66, 65, - 64, 64, 63, 64, 63, 62, 61, 60, 59, 58, 57, 58, 58, 57, 57, 58, - 58, 59, 60, 62, 62, 63, 62, 62, 62, 61, 61, 60, 59, 58, 57, 56, - 55, 53, 52, 49, 48, 46, 45, 45, 46, 45, 45, 45, 45, 45, 44, 43, - 60, 61, 61, 62, 63, 63, 63, 63, 64, 64, 65, 65, 65, 65, 66, 67, - 67, 68, 70, 72, 73, 73, 73, 73, 73, 73, 73, 72, 71, 72, 73, 75, - 78, 78, 79, 79, 79, 79, 79, 78, 78, 79, 79, 80, 79, 78, 78, 77, - 78, 80, 80, 78, 76, 75, 75, 76, 77, 77, 77, 76, 75, 74, 73, 71, - 71, 71, 71, 70, 70, 70, 70, 68, 67, 67, 66, 66, 66, 66, 66, 65, - 64, 63, 63, 62, 61, 60, 60, 59, 59, 58, 58, 58, 58, 58, 58, 59, - 59, 59, 59, 59, 59, 59, 59, 60, 59, 58, 58, 58, 58, 57, 55, 53, - 52, 51, 50, 50, 48, 47, 47, 46, 46, 45, 45, 45, 45, 45, 44, 43, - 60, 61, 61, 62, 63, 63, 63, 63, 64, 64, 65, 65, 65, 65, 66, 67, - 67, 68, 70, 72, 73, 73, 73, 73, 73, 73, 73, 72, 71, 72, 72, 74, - 77, 78, 79, 79, 79, 79, 79, 78, 78, 79, 79, 80, 79, 78, 77, 77, - 78, 80, 80, 78, 76, 75, 75, 75, 76, 76, 76, 76, 75, 74, 73, 71, - 71, 71, 71, 70, 70, 70, 70, 68, 67, 67, 66, 66, 66, 66, 66, 65, - 64, 63, 63, 62, 61, 60, 60, 59, 59, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 57, 56, 55, 55, 56, 55, 54, 53, 51, - 51, 50, 49, 50, 49, 48, 47, 46, 46, 45, 45, 45, 45, 45, 44, 43, - 60, 61, 61, 62, 63, 63, 63, 63, 64, 64, 65, 65, 65, 65, 66, 67, - 67, 68, 70, 72, 73, 73, 73, 73, 73, 73, 73, 72, 71, 72, 72, 74, - 77, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 78, 77, 77, - 78, 80, 80, 78, 76, 75, 75, 75, 76, 76, 76, 76, 75, 74, 73, 71, - 71, 71, 71, 70, 70, 70, 70, 68, 67, 67, 66, 66, 66, 66, 66, 65, - 64, 63, 63, 62, 61, 60, 60, 59, 59, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 57, 56, 56, 56, 56, 55, 54, 54, 53, 54, 53, 52, 51, 50, - 49, 48, 48, 50, 49, 48, 47, 46, 46, 45, 45, 45, 45, 45, 44, 43, - 18, 17, 17, 16, 16, 17, 17, 18, 19, 19, 19, 20, 19, 19, 20, 22, - 27, 29, 31, 30, 30, 31, 32, 32, 31, 31, 36, 38, 39, 41, 37, 35, - 43, 45, 39, 36, 38, 40, 46, 52, 40, 47, 45, 50, 52, 52, 48, 46, - 54, 45, 41, 43, 41, 37, 33, 35, 41, 35, 31, 36, 38, 34, 30, 30, - 31, 29, 30, 32, 34, 35, 36, 36, 35, 32, 30, 27, 25, 24, 23, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 9, 8, 9, 8, 7, 7, - 18, 17, 17, 16, 16, 17, 17, 18, 19, 19, 19, 20, 20, 20, 21, 22, - 26, 28, 29, 29, 30, 31, 32, 33, 32, 32, 34, 36, 39, 41, 38, 37, - 44, 47, 42, 39, 40, 42, 49, 54, 45, 49, 49, 53, 54, 54, 51, 49, - 58, 49, 45, 45, 42, 37, 35, 38, 41, 35, 35, 39, 38, 34, 29, 30, - 32, 31, 32, 33, 35, 35, 35, 36, 35, 32, 30, 27, 25, 24, 23, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 9, 9, 9, 9, 7, 7, - 18, 17, 17, 16, 16, 17, 17, 18, 19, 20, 20, 20, 21, 21, 22, 22, - 25, 27, 28, 29, 31, 32, 34, 34, 34, 33, 34, 35, 39, 41, 41, 38, - 43, 49, 46, 42, 41, 44, 50, 56, 50, 51, 53, 55, 56, 56, 52, 53, - 59, 51, 49, 49, 44, 38, 38, 41, 40, 37, 39, 42, 39, 34, 29, 31, - 33, 34, 34, 35, 36, 35, 36, 36, 34, 31, 29, 27, 25, 24, 23, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 9, 9, 10, 9, 7, 7, - 18, 17, 17, 16, 16, 17, 17, 18, 20, 20, 20, 20, 21, 21, 22, 22, - 24, 26, 28, 29, 31, 32, 34, 35, 35, 35, 34, 36, 39, 41, 43, 41, - 41, 48, 48, 44, 42, 43, 49, 56, 54, 51, 55, 55, 57, 57, 53, 54, - 60, 52, 52, 51, 45, 39, 41, 43, 41, 39, 42, 43, 38, 33, 30, 32, - 35, 36, 37, 37, 37, 36, 35, 35, 33, 30, 28, 26, 25, 23, 22, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 10, 10, 10, 10, 8, 8, - 18, 17, 17, 16, 16, 17, 17, 18, 20, 20, 20, 19, 21, 21, 22, 24, - 25, 27, 29, 30, 31, 32, 35, 36, 37, 39, 37, 37, 38, 40, 45, 45, - 42, 46, 50, 47, 43, 44, 50, 56, 58, 51, 59, 57, 59, 60, 56, 57, - 60, 53, 54, 50, 46, 43, 45, 44, 42, 44, 45, 42, 37, 33, 33, 35, - 38, 38, 39, 39, 37, 37, 35, 34, 32, 29, 27, 26, 24, 23, 22, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 10, 10, 11, 10, 9, 9, - 18, 17, 17, 16, 16, 17, 17, 18, 20, 19, 19, 19, 21, 21, 23, 24, - 26, 28, 29, 30, 30, 32, 35, 36, 38, 41, 39, 37, 36, 39, 45, 50, - 46, 46, 54, 52, 45, 47, 54, 60, 63, 53, 63, 61, 64, 64, 61, 61, - 61, 54, 57, 50, 47, 45, 46, 44, 43, 47, 44, 39, 35, 33, 36, 39, - 40, 38, 38, 38, 38, 36, 33, 32, 30, 27, 25, 24, 22, 21, 20, 20, - 19, 19, 19, 19, 20, 20, 19, 14, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 9, 9, 11, - 11, 11, 11, 9, 7, 7, 9, 11, 11, 11, 10, 11, 11, 11, 10, 10, - 18, 17, 17, 16, 16, 17, 17, 18, 19, 19, 19, 19, 20, 22, 23, 24, - 25, 26, 28, 29, 30, 31, 34, 35, 37, 41, 41, 38, 37, 38, 44, 50, - 50, 46, 52, 56, 48, 48, 56, 60, 66, 56, 64, 65, 67, 67, 62, 64, - 60, 55, 57, 51, 47, 48, 47, 42, 46, 49, 43, 38, 36, 36, 38, 41, - 41, 39, 39, 38, 37, 34, 32, 31, 29, 27, 25, 24, 23, 22, 20, 20, - 19, 20, 19, 19, 21, 20, 20, 15, 13, 14, 15, 15, 16, 17, 16, 14, - 13, 12, 12, 12, 11, 10, 10, 12, 12, 12, 11, 11, 10, 10, 9, 11, - 11, 11, 10, 9, 8, 7, 9, 11, 11, 11, 11, 12, 12, 12, 10, 10, - 18, 17, 18, 16, 16, 17, 17, 18, 19, 19, 19, 20, 20, 22, 25, 25, - 25, 27, 29, 30, 31, 33, 34, 36, 38, 41, 44, 44, 41, 39, 42, 47, - 52, 49, 48, 59, 54, 49, 56, 60, 69, 62, 66, 69, 69, 71, 63, 69, - 59, 60, 57, 53, 50, 55, 50, 45, 52, 48, 41, 37, 39, 41, 41, 43, - 42, 41, 40, 37, 35, 31, 30, 30, 29, 27, 26, 25, 24, 22, 21, 21, - 20, 20, 20, 20, 21, 21, 20, 15, 14, 15, 16, 15, 16, 17, 16, 14, - 13, 13, 12, 12, 11, 10, 10, 13, 13, 12, 12, 12, 11, 10, 10, 11, - 11, 11, 10, 9, 9, 9, 10, 13, 12, 11, 11, 13, 13, 13, 12, 11, - 18, 17, 18, 17, 17, 17, 17, 18, 18, 18, 19, 20, 21, 23, 26, 26, - 27, 29, 32, 32, 33, 35, 36, 38, 40, 43, 47, 47, 44, 43, 43, 45, - 53, 55, 52, 56, 62, 54, 54, 62, 71, 68, 70, 73, 73, 74, 66, 72, - 61, 65, 60, 53, 59, 59, 51, 54, 55, 46, 38, 38, 43, 46, 46, 45, - 42, 40, 38, 35, 34, 31, 29, 29, 28, 26, 25, 24, 23, 21, 20, 21, - 20, 20, 20, 20, 21, 21, 20, 15, 14, 15, 16, 15, 16, 17, 17, 14, - 14, 13, 12, 12, 11, 10, 11, 13, 13, 12, 12, 12, 11, 10, 10, 11, - 11, 11, 10, 9, 9, 9, 10, 13, 12, 11, 11, 13, 13, 13, 12, 12, - 19, 18, 18, 17, 17, 17, 18, 18, 18, 19, 20, 21, 22, 24, 28, 28, - 28, 30, 34, 34, 36, 37, 40, 40, 41, 45, 49, 49, 49, 50, 46, 45, - 51, 61, 59, 52, 65, 61, 54, 64, 74, 75, 74, 77, 78, 78, 71, 75, - 63, 69, 62, 56, 64, 60, 57, 62, 55, 42, 38, 42, 48, 51, 52, 48, - 44, 40, 37, 34, 33, 31, 29, 29, 28, 26, 24, 23, 22, 20, 19, 19, - 20, 20, 20, 20, 21, 21, 20, 15, 14, 15, 16, 16, 17, 18, 17, 15, - 14, 13, 13, 13, 12, 11, 11, 13, 13, 12, 12, 12, 11, 10, 10, 11, - 11, 11, 10, 9, 9, 9, 11, 13, 12, 11, 11, 13, 13, 13, 13, 13, - 20, 19, 19, 18, 18, 18, 18, 18, 18, 18, 21, 23, 23, 27, 30, 31, - 28, 31, 35, 37, 38, 39, 41, 42, 42, 46, 48, 51, 54, 55, 52, 49, - 50, 61, 66, 55, 64, 69, 60, 63, 75, 82, 78, 82, 84, 83, 77, 80, - 69, 72, 63, 62, 65, 60, 65, 63, 49, 43, 45, 49, 54, 55, 54, 48, - 43, 37, 34, 32, 33, 31, 29, 28, 27, 25, 23, 21, 20, 18, 17, 19, - 20, 20, 20, 20, 21, 21, 20, 15, 14, 15, 17, 17, 18, 19, 18, 16, - 15, 14, 14, 13, 12, 11, 11, 13, 13, 12, 12, 12, 11, 10, 10, 11, - 11, 11, 10, 10, 10, 10, 11, 13, 12, 11, 11, 13, 13, 13, 13, 14, - 20, 19, 20, 18, 18, 19, 19, 18, 19, 19, 23, 24, 25, 29, 33, 34, - 30, 33, 38, 41, 41, 42, 44, 45, 47, 49, 51, 53, 56, 59, 59, 57, - 53, 59, 68, 65, 65, 75, 71, 66, 78, 90, 82, 88, 92, 89, 84, 85, - 75, 75, 64, 71, 67, 69, 73, 60, 47, 46, 52, 56, 59, 57, 54, 46, - 41, 36, 33, 32, 32, 31, 29, 28, 27, 25, 24, 21, 20, 18, 17, 19, - 20, 20, 20, 20, 21, 21, 20, 15, 14, 15, 17, 17, 18, 19, 18, 16, - 15, 15, 14, 14, 13, 12, 12, 13, 13, 12, 12, 12, 11, 10, 10, 11, - 11, 11, 10, 10, 10, 10, 11, 13, 12, 11, 11, 13, 13, 13, 13, 14, - 20, 19, 20, 19, 19, 19, 19, 18, 18, 20, 23, 25, 26, 30, 34, 35, - 32, 35, 39, 42, 43, 44, 46, 48, 50, 51, 52, 53, 57, 61, 65, 63, - 56, 55, 67, 76, 69, 78, 84, 70, 79, 95, 86, 93, 97, 94, 90, 90, - 82, 76, 66, 79, 70, 79, 77, 58, 49, 52, 58, 60, 61, 58, 53, 44, - 39, 35, 32, 32, 30, 31, 30, 28, 27, 25, 24, 21, 20, 18, 17, 19, - 19, 20, 19, 19, 20, 19, 20, 16, 15, 16, 17, 18, 20, 19, 19, 16, - 16, 15, 14, 14, 13, 12, 12, 13, 13, 12, 12, 12, 11, 10, 9, 9, - 10, 11, 11, 11, 11, 11, 12, 12, 12, 11, 11, 13, 13, 13, 13, 14, - 21, 21, 22, 21, 20, 20, 21, 20, 18, 22, 27, 29, 32, 35, 36, 36, - 30, 33, 38, 35, 35, 42, 50, 47, 49, 52, 57, 60, 58, 68, 71, 65, - 62, 63, 67, 76, 77, 75, 103, 74, 77, 100, 96, 95, 98, 93, 98, 95, - 89, 79, 74, 78, 78, 84, 74, 61, 62, 63, 62, 63, 60, 56, 52, 44, - 40, 37, 35, 34, 34, 32, 30, 27, 25, 25, 24, 22, 21, 20, 19, 16, - 16, 17, 16, 17, 17, 16, 17, 17, 17, 18, 20, 20, 20, 20, 19, 14, - 12, 12, 11, 12, 12, 12, 13, 15, 15, 14, 14, 13, 12, 11, 9, 9, - 9, 9, 9, 11, 12, 12, 12, 11, 11, 11, 11, 13, 13, 14, 15, 14, - 21, 22, 22, 22, 20, 20, 23, 22, 19, 23, 28, 31, 35, 37, 37, 36, - 28, 31, 33, 37, 41, 41, 45, 51, 50, 52, 53, 58, 61, 54, 65, 73, - 69, 74, 67, 68, 84, 76, 103, 88, 68, 106, 106, 106, 101, 97, 106, 97, - 91, 72, 82, 84, 86, 77, 61, 67, 74, 73, 64, 60, 57, 54, 52, 45, - 41, 38, 36, 35, 35, 33, 31, 26, 24, 23, 23, 22, 21, 21, 20, 16, - 14, 15, 15, 15, 16, 15, 17, 19, 19, 20, 22, 21, 22, 21, 19, 14, - 12, 11, 11, 12, 12, 12, 14, 17, 16, 16, 15, 14, 13, 12, 10, 8, - 8, 8, 9, 11, 11, 12, 11, 9, 9, 10, 12, 13, 14, 15, 15, 15, - 20, 20, 22, 21, 19, 21, 23, 24, 22, 25, 30, 32, 36, 38, 38, 37, - 34, 36, 37, 46, 48, 56, 61, 68, 62, 63, 64, 58, 53, 56, 53, 56, - 72, 90, 87, 76, 83, 85, 94, 101, 79, 113, 115, 114, 108, 105, 110, 99, - 97, 83, 93, 82, 91, 72, 64, 82, 82, 78, 67, 57, 53, 51, 49, 44, - 41, 38, 36, 34, 34, 32, 31, 26, 24, 24, 24, 22, 23, 23, 21, 18, - 18, 19, 18, 19, 19, 18, 19, 20, 19, 21, 21, 21, 22, 21, 20, 16, - 15, 14, 13, 15, 15, 15, 16, 18, 18, 17, 16, 16, 15, 14, 11, 9, - 9, 8, 9, 11, 12, 12, 10, 10, 10, 10, 11, 13, 14, 14, 15, 15, - 20, 20, 21, 21, 19, 21, 24, 25, 25, 28, 32, 32, 34, 36, 37, 38, - 36, 41, 51, 60, 64, 71, 67, 59, 51, 51, 59, 60, 62, 57, 53, 59, - 75, 96, 102, 91, 80, 91, 92, 91, 87, 110, 128, 123, 115, 112, 117, 107, - 89, 83, 92, 95, 78, 74, 74, 89, 89, 79, 67, 56, 49, 47, 47, 44, - 41, 39, 36, 33, 32, 30, 30, 28, 26, 26, 26, 24, 25, 25, 23, 22, - 21, 22, 21, 21, 22, 21, 22, 21, 21, 22, 21, 21, 22, 22, 21, 18, - 17, 16, 15, 16, 16, 16, 17, 19, 19, 18, 18, 17, 17, 16, 13, 11, - 10, 10, 11, 12, 13, 13, 11, 10, 10, 10, 11, 13, 13, 14, 14, 14, - 19, 20, 20, 21, 19, 21, 25, 27, 28, 31, 33, 31, 31, 35, 37, 41, - 42, 52, 66, 67, 59, 47, 37, 27, 23, 21, 30, 29, 41, 65, 73, 72, - 85, 81, 98, 99, 84, 88, 91, 101, 112, 120, 147, 138, 132, 128, 134, 122, - 97, 108, 106, 111, 88, 96, 101, 104, 95, 78, 63, 55, 48, 46, 44, 42, - 41, 38, 37, 33, 31, 29, 28, 30, 30, 28, 29, 28, 28, 28, 27, 25, - 24, 25, 25, 24, 25, 24, 26, 22, 21, 21, 21, 21, 22, 22, 21, 20, - 19, 18, 17, 18, 18, 18, 19, 21, 21, 20, 20, 20, 19, 18, 16, 14, - 14, 13, 14, 15, 15, 15, 12, 10, 10, 10, 11, 13, 13, 14, 13, 13, - 18, 18, 20, 20, 19, 22, 25, 28, 30, 32, 32, 30, 30, 35, 39, 48, - 60, 67, 62, 46, 27, 15, 11, 19, 27, 28, 33, 25, 23, 37, 73, 98, - 97, 29, 27, 46, 86, 87, 90, 113, 80, 69, 80, 77, 75, 70, 78, 67, - 65, 79, 58, 46, 56, 66, 74, 93, 88, 77, 61, 54, 48, 44, 42, 41, - 40, 37, 36, 34, 32, 30, 29, 32, 32, 31, 32, 30, 31, 31, 30, 26, - 26, 27, 26, 26, 27, 26, 26, 23, 21, 20, 20, 21, 21, 21, 21, 20, - 20, 19, 18, 19, 19, 19, 20, 22, 21, 20, 20, 20, 19, 18, 17, 16, - 16, 16, 16, 16, 16, 16, 14, 9, 9, 9, 10, 12, 13, 13, 12, 11, - 17, 18, 19, 19, 19, 21, 25, 28, 31, 32, 30, 28, 29, 37, 46, 59, - 73, 64, 34, 15, 22, 24, 22, 36, 50, 57, 61, 51, 44, 40, 56, 73, - 85, 15, 29, 29, 77, 99, 90, 143, 83, 72, 71, 79, 76, 73, 82, 83, - 79, 58, 54, 67, 72, 95, 98, 68, 71, 74, 61, 56, 48, 43, 40, 39, - 39, 37, 34, 35, 35, 33, 31, 34, 34, 33, 33, 32, 33, 31, 31, 28, - 27, 27, 28, 27, 27, 27, 26, 23, 22, 20, 19, 20, 20, 20, 20, 19, - 19, 18, 18, 19, 19, 19, 20, 21, 21, 20, 19, 20, 19, 18, 18, 17, - 17, 16, 16, 16, 16, 16, 14, 10, 9, 8, 10, 11, 12, 12, 12, 11, - 16, 16, 19, 20, 19, 22, 24, 30, 32, 33, 27, 27, 29, 46, 57, 72, - 65, 24, 23, 33, 40, 48, 56, 59, 61, 57, 50, 45, 52, 60, 64, 53, - 57, 38, 45, 28, 63, 118, 104, 135, 76, 69, 76, 88, 84, 88, 99, 86, - 65, 52, 62, 93, 100, 107, 99, 32, 67, 75, 63, 51, 45, 41, 39, 39, - 38, 36, 35, 35, 35, 34, 34, 36, 35, 34, 34, 33, 33, 31, 31, 28, - 28, 28, 28, 29, 29, 28, 27, 24, 22, 22, 21, 19, 19, 18, 17, 17, - 18, 18, 18, 19, 20, 20, 21, 22, 22, 22, 22, 22, 21, 20, 18, 17, - 17, 16, 16, 17, 18, 17, 13, 11, 9, 7, 7, 8, 8, 9, 11, 12, - 15, 16, 18, 20, 19, 23, 25, 30, 32, 33, 28, 28, 37, 56, 69, 65, - 38, 27, 38, 52, 62, 61, 50, 36, 38, 45, 44, 39, 41, 50, 55, 57, - 54, 70, 75, 45, 67, 123, 114, 138, 79, 61, 81, 92, 102, 92, 118, 81, - 76, 75, 90, 122, 129, 130, 111, 29, 62, 73, 60, 49, 46, 43, 42, 43, - 42, 40, 38, 38, 38, 37, 36, 38, 37, 36, 36, 34, 34, 32, 31, 28, - 28, 28, 28, 30, 29, 28, 27, 24, 23, 22, 21, 19, 20, 18, 17, 17, - 17, 17, 17, 20, 20, 22, 22, 20, 20, 20, 20, 20, 20, 18, 18, 18, - 18, 17, 17, 17, 18, 16, 14, 13, 11, 10, 8, 8, 8, 9, 10, 11, - 14, 16, 18, 20, 20, 23, 27, 32, 34, 34, 31, 33, 46, 64, 75, 45, - 40, 43, 52, 58, 56, 40, 28, 40, 46, 59, 64, 65, 51, 42, 38, 49, - 63, 80, 75, 47, 71, 126, 120, 143, 111, 84, 84, 81, 83, 75, 63, 32, - 58, 93, 118, 139, 121, 91, 72, 33, 62, 70, 58, 50, 49, 48, 47, 47, - 47, 44, 43, 42, 42, 41, 40, 39, 38, 38, 37, 35, 35, 33, 33, 29, - 29, 29, 30, 31, 30, 29, 28, 26, 25, 23, 23, 21, 21, 19, 17, 16, - 16, 17, 18, 20, 21, 23, 23, 19, 19, 19, 19, 19, 18, 17, 18, 20, - 19, 18, 17, 16, 16, 14, 14, 15, 12, 11, 9, 8, 8, 9, 9, 10, - 15, 16, 19, 19, 21, 25, 28, 35, 36, 37, 35, 40, 56, 75, 48, 16, - 30, 37, 41, 45, 39, 18, 34, 63, 61, 67, 73, 79, 83, 70, 31, 43, - 71, 94, 70, 36, 65, 121, 119, 140, 144, 128, 113, 71, 64, 52, 9, 17, - 74, 112, 126, 107, 45, 47, 49, 46, 67, 67, 59, 55, 54, 54, 54, 52, - 49, 47, 46, 44, 44, 43, 42, 40, 39, 37, 37, 37, 37, 35, 34, 31, - 32, 31, 32, 34, 32, 32, 31, 30, 28, 25, 25, 22, 22, 21, 19, 16, - 17, 18, 19, 20, 21, 23, 23, 19, 19, 19, 19, 19, 19, 18, 18, 20, - 19, 18, 18, 16, 16, 13, 13, 16, 12, 9, 9, 9, 7, 7, 7, 8, - 15, 17, 19, 20, 21, 27, 30, 37, 39, 39, 39, 47, 68, 72, 8, 15, - 32, 44, 52, 52, 28, 29, 64, 64, 61, 59, 61, 66, 82, 93, 64, 50, - 76, 82, 64, 31, 53, 113, 118, 125, 144, 170, 195, 145, 89, 38, 66, 108, - 124, 127, 125, 54, 32, 77, 74, 76, 79, 72, 65, 63, 63, 63, 63, 57, - 54, 52, 51, 49, 47, 47, 46, 42, 40, 39, 38, 39, 38, 38, 37, 34, - 33, 34, 34, 34, 35, 33, 34, 33, 32, 28, 27, 24, 23, 23, 21, 16, - 17, 19, 20, 20, 22, 24, 25, 20, 20, 20, 21, 22, 22, 21, 21, 22, - 21, 20, 19, 17, 17, 13, 14, 17, 14, 11, 11, 10, 8, 7, 7, 7, - 15, 17, 19, 20, 23, 26, 31, 37, 40, 40, 41, 53, 73, 44, 11, 45, - 55, 60, 60, 41, 23, 53, 65, 61, 68, 64, 61, 63, 73, 87, 94, 66, - 72, 75, 72, 40, 55, 115, 120, 129, 157, 191, 223, 208, 82, 53, 109, 141, - 140, 132, 123, 43, 82, 113, 99, 91, 88, 81, 72, 70, 69, 69, 69, 63, - 58, 56, 55, 53, 52, 50, 50, 44, 42, 40, 40, 39, 39, 39, 38, 35, - 34, 34, 34, 34, 34, 33, 34, 33, 32, 30, 27, 25, 25, 23, 22, 15, - 17, 19, 21, 22, 24, 27, 27, 25, 26, 26, 26, 27, 26, 26, 26, 25, - 23, 23, 21, 21, 20, 17, 18, 19, 16, 13, 12, 10, 7, 7, 7, 7, - 18, 19, 22, 24, 24, 27, 29, 35, 42, 35, 39, 59, 78, 39, 33, 56, - 56, 60, 49, 15, 24, 59, 63, 67, 69, 68, 66, 68, 78, 84, 94, 86, - 62, 92, 98, 60, 56, 122, 132, 138, 161, 202, 235, 232, 49, 96, 137, 143, - 139, 135, 112, 44, 101, 120, 109, 97, 94, 88, 77, 70, 69, 70, 72, 63, - 56, 55, 56, 57, 53, 50, 47, 40, 38, 37, 37, 36, 38, 39, 39, 38, - 35, 33, 30, 30, 28, 30, 30, 28, 26, 30, 30, 29, 28, 24, 20, 14, - 15, 20, 24, 26, 29, 32, 29, 27, 31, 31, 29, 26, 26, 32, 36, 32, - 25, 20, 21, 21, 24, 19, 21, 19, 16, 12, 11, 11, 9, 9, 9, 8, - 20, 21, 25, 27, 26, 26, 27, 34, 45, 34, 38, 67, 79, 41, 41, 51, - 45, 56, 47, 11, 30, 54, 66, 70, 65, 65, 68, 71, 77, 83, 87, 103, - 70, 91, 105, 71, 54, 126, 142, 149, 166, 209, 243, 247, 88, 119, 146, 135, - 121, 126, 112, 45, 103, 113, 101, 91, 85, 82, 74, 63, 58, 61, 67, 58, - 49, 48, 49, 51, 47, 45, 40, 32, 32, 31, 31, 33, 36, 38, 40, 42, - 36, 33, 26, 22, 28, 32, 29, 17, 22, 29, 29, 32, 29, 24, 19, 16, - 17, 22, 28, 33, 32, 34, 30, 28, 35, 37, 31, 26, 26, 34, 38, 32, - 29, 24, 20, 20, 21, 25, 25, 17, 14, 12, 11, 11, 11, 11, 11, 10, - 21, 22, 26, 27, 27, 25, 26, 35, 47, 39, 39, 66, 40, 15, 30, 44, - 42, 57, 47, 20, 46, 56, 64, 67, 62, 61, 64, 67, 72, 78, 83, 104, - 79, 88, 120, 76, 59, 130, 141, 154, 172, 212, 244, 248, 118, 117, 140, 130, - 125, 137, 120, 40, 94, 93, 77, 67, 62, 64, 60, 51, 46, 48, 55, 51, - 44, 41, 40, 39, 38, 40, 38, 37, 38, 37, 35, 33, 34, 35, 36, 35, - 28, 26, 25, 25, 25, 29, 32, 20, 25, 26, 25, 26, 25, 22, 21, 23, - 23, 25, 26, 27, 24, 25, 26, 26, 32, 35, 29, 22, 21, 26, 30, 26, - 26, 24, 19, 24, 22, 23, 23, 18, 16, 13, 11, 12, 11, 12, 11, 10, - 21, 22, 26, 27, 28, 26, 27, 35, 47, 41, 47, 46, 3, 16, 34, 42, - 49, 64, 40, 35, 59, 53, 56, 61, 57, 56, 59, 60, 64, 71, 77, 94, - 93, 89, 100, 52, 62, 128, 134, 149, 171, 208, 238, 246, 108, 82, 69, 94, - 119, 126, 116, 46, 99, 100, 89, 72, 61, 63, 58, 50, 46, 48, 55, 55, - 49, 42, 37, 35, 38, 42, 44, 47, 48, 45, 41, 39, 37, 33, 30, 22, - 23, 29, 33, 37, 37, 35, 36, 39, 32, 22, 25, 18, 19, 19, 23, 31, - 29, 26, 21, 18, 22, 23, 27, 29, 36, 40, 37, 31, 23, 22, 24, 19, - 18, 26, 28, 25, 33, 19, 20, 22, 17, 15, 13, 12, 12, 12, 11, 10, - 19, 22, 26, 26, 27, 28, 29, 36, 45, 42, 55, 29, 23, 50, 53, 55, - 52, 63, 31, 51, 63, 51, 53, 59, 53, 53, 55, 57, 63, 69, 75, 86, - 100, 82, 88, 51, 58, 120, 124, 140, 169, 207, 239, 244, 109, 81, 90, 82, - 96, 134, 125, 42, 94, 97, 90, 72, 62, 68, 68, 58, 53, 55, 62, 67, - 63, 51, 41, 37, 42, 48, 55, 69, 71, 65, 57, 51, 41, 34, 27, 20, - 28, 36, 42, 48, 50, 46, 42, 47, 41, 30, 20, 13, 15, 19, 26, 36, - 31, 25, 19, 19, 27, 28, 33, 38, 45, 50, 49, 43, 38, 28, 18, 15, - 24, 36, 40, 40, 29, 30, 24, 25, 21, 18, 15, 14, 13, 12, 11, 10, - 19, 21, 25, 25, 27, 28, 30, 37, 43, 46, 61, 26, 48, 65, 61, 66, - 59, 55, 25, 63, 63, 49, 52, 57, 52, 51, 54, 56, 62, 68, 72, 78, - 86, 40, 62, 54, 55, 117, 125, 145, 180, 208, 231, 237, 125, 113, 138, 115, - 88, 100, 100, 46, 97, 93, 78, 62, 58, 68, 72, 67, 63, 65, 71, 84, - 81, 65, 48, 45, 53, 62, 79, 93, 92, 83, 70, 61, 51, 40, 34, 26, - 35, 48, 66, 71, 54, 44, 51, 66, 54, 42, 22, 15, 18, 24, 31, 39, - 33, 27, 23, 25, 35, 42, 56, 64, 71, 77, 77, 63, 51, 39, 28, 25, - 36, 49, 68, 75, 46, 39, 27, 28, 23, 20, 16, 15, 13, 12, 11, 10, - 19, 20, 23, 24, 27, 28, 30, 37, 41, 54, 66, 34, 46, 59, 66, 73, - 76, 49, 21, 65, 60, 46, 49, 54, 51, 52, 53, 56, 58, 62, 66, 71, - 74, 17, 64, 72, 57, 122, 137, 153, 182, 204, 223, 234, 136, 145, 132, 134, - 124, 105, 71, 44, 102, 106, 96, 75, 69, 80, 83, 81, 79, 81, 87, 102, - 101, 81, 61, 62, 72, 85, 109, 138, 139, 128, 112, 76, 63, 52, 47, 43, - 53, 76, 111, 143, 141, 119, 97, 106, 67, 50, 33, 23, 24, 31, 36, 37, - 33, 31, 32, 42, 56, 76, 108, 128, 133, 139, 144, 123, 71, 47, 45, 42, - 52, 86, 124, 92, 93, 46, 38, 29, 24, 21, 16, 14, 12, 12, 11, 10, - 17, 19, 24, 26, 27, 26, 29, 36, 44, 55, 57, 25, 49, 75, 80, 83, - 81, 42, 27, 68, 60, 47, 47, 51, 48, 46, 47, 48, 53, 58, 63, 65, - 68, 74, 95, 78, 67, 134, 137, 154, 186, 192, 214, 225, 130, 136, 130, 141, - 141, 150, 135, 42, 99, 105, 93, 95, 100, 110, 110, 106, 99, 105, 123, 144, - 138, 116, 56, 84, 100, 129, 142, 128, 113, 121, 83, 76, 57, 64, 66, 68, - 85, 135, 155, 171, 184, 193, 195, 179, 113, 57, 44, 34, 33, 39, 43, 28, - 32, 42, 50, 65, 94, 111, 130, 140, 127, 127, 116, 68, 26, 74, 86, 66, - 91, 145, 132, 156, 150, 75, 40, 33, 25, 22, 16, 14, 12, 9, 10, 9, - 17, 19, 24, 26, 28, 28, 30, 34, 37, 62, 63, 43, 55, 88, 73, 63, - 45, 24, 26, 65, 55, 44, 43, 46, 45, 42, 44, 46, 51, 57, 60, 63, - 72, 83, 72, 64, 90, 134, 136, 158, 171, 178, 201, 219, 138, 131, 130, 114, - 141, 151, 136, 44, 87, 98, 93, 92, 106, 120, 130, 122, 150, 136, 140, 162, - 151, 135, 63, 98, 131, 171, 172, 136, 131, 113, 97, 92, 72, 55, 80, 96, - 136, 184, 181, 182, 208, 209, 204, 213, 171, 83, 50, 46, 41, 41, 41, 28, - 35, 48, 72, 112, 141, 159, 143, 130, 117, 121, 73, 87, 135, 173, 168, 104, - 134, 163, 144, 180, 159, 113, 33, 30, 26, 21, 16, 14, 11, 10, 9, 10, - 16, 18, 23, 25, 28, 29, 31, 35, 39, 63, 45, 42, 78, 94, 80, 77, - 64, 42, 29, 60, 49, 40, 39, 41, 42, 40, 42, 45, 50, 56, 61, 63, - 75, 101, 107, 106, 114, 134, 135, 157, 153, 167, 184, 210, 120, 116, 147, 127, - 132, 124, 121, 42, 79, 89, 88, 92, 111, 123, 142, 136, 163, 150, 158, 165, - 166, 144, 69, 133, 170, 185, 175, 190, 185, 196, 202, 192, 159, 99, 80, 129, - 151, 145, 181, 193, 215, 213, 211, 176, 156, 164, 55, 55, 50, 42, 38, 27, - 37, 60, 106, 171, 183, 193, 171, 142, 123, 114, 127, 190, 213, 203, 187, 163, - 152, 155, 155, 169, 138, 137, 30, 25, 28, 21, 18, 15, 13, 10, 10, 10, - 16, 18, 23, 24, 28, 30, 31, 34, 37, 64, 45, 65, 103, 87, 86, 79, - 73, 52, 26, 56, 46, 39, 39, 40, 42, 41, 43, 45, 49, 58, 66, 76, - 85, 88, 93, 108, 121, 132, 135, 148, 141, 160, 166, 201, 109, 118, 126, 109, - 143, 164, 142, 42, 83, 83, 78, 86, 102, 111, 138, 158, 159, 155, 171, 189, - 167, 169, 112, 174, 184, 190, 170, 188, 153, 208, 208, 205, 203, 169, 92, 175, - 173, 167, 189, 200, 216, 216, 197, 152, 175, 220, 79, 53, 54, 40, 33, 25, - 43, 84, 144, 187, 195, 195, 199, 182, 94, 55, 131, 202, 199, 169, 174, 150, - 145, 141, 133, 157, 133, 134, 20, 22, 29, 21, 19, 15, 13, 11, 10, 11, - 16, 18, 22, 24, 28, 29, 30, 32, 31, 65, 63, 92, 95, 79, 94, 75, - 91, 58, 22, 49, 45, 40, 39, 40, 42, 42, 44, 47, 51, 60, 69, 78, - 82, 81, 88, 102, 114, 126, 131, 134, 136, 151, 151, 190, 114, 142, 138, 111, - 133, 144, 138, 49, 88, 83, 72, 75, 86, 98, 131, 159, 156, 164, 182, 200, - 152, 164, 155, 199, 197, 177, 161, 183, 146, 202, 192, 207, 183, 182, 149, 206, - 189, 194, 214, 203, 199, 198, 178, 170, 232, 203, 89, 41, 54, 38, 28, 28, - 54, 113, 166, 190, 211, 191, 200, 140, 29, 27, 86, 169, 170, 133, 157, 150, - 162, 83, 79, 140, 150, 117, 17, 24, 26, 20, 17, 14, 12, 10, 10, 11, - 14, 18, 22, 24, 27, 28, 30, 31, 28, 65, 69, 81, 70, 77, 90, 64, - 86, 44, 28, 54, 45, 41, 39, 40, 42, 42, 45, 49, 56, 61, 67, 75, - 79, 74, 74, 86, 103, 117, 122, 121, 131, 135, 140, 184, 135, 140, 140, 126, - 147, 150, 140, 46, 83, 87, 74, 65, 75, 93, 119, 151, 151, 175, 187, 193, - 174, 156, 177, 194, 157, 107, 114, 178, 175, 206, 191, 173, 176, 197, 188, 196, - 186, 142, 143, 183, 192, 203, 197, 206, 191, 117, 110, 25, 50, 35, 23, 32, - 67, 132, 152, 145, 182, 167, 164, 54, 26, 42, 68, 115, 124, 125, 134, 135, - 161, 100, 61, 119, 109, 48, 14, 28, 23, 19, 15, 12, 10, 8, 9, 11, - 14, 18, 22, 24, 26, 27, 29, 31, 27, 65, 70, 73, 72, 75, 66, 61, - 117, 49, 30, 47, 46, 45, 40, 39, 42, 44, 47, 51, 59, 61, 64, 70, - 75, 74, 80, 91, 102, 107, 109, 114, 131, 120, 134, 167, 148, 155, 158, 143, - 147, 157, 149, 40, 76, 88, 79, 64, 67, 73, 86, 144, 156, 184, 183, 184, - 182, 159, 170, 137, 48, 41, 63, 140, 178, 196, 174, 185, 192, 186, 186, 186, - 81, 32, 49, 92, 160, 190, 155, 182, 150, 125, 107, 16, 49, 35, 25, 36, - 78, 140, 151, 157, 163, 139, 114, 20, 42, 53, 67, 99, 118, 146, 114, 123, - 144, 114, 55, 58, 32, 14, 33, 28, 21, 19, 16, 14, 11, 8, 8, 11, - 13, 18, 22, 25, 25, 27, 30, 31, 29, 65, 66, 82, 97, 85, 72, 97, - 127, 49, 28, 49, 50, 49, 42, 40, 47, 50, 53, 54, 54, 58, 64, 65, - 67, 77, 88, 98, 102, 96, 94, 111, 133, 106, 130, 159, 133, 159, 169, 156, - 159, 173, 156, 42, 75, 82, 78, 74, 65, 58, 70, 110, 154, 183, 182, 194, - 188, 170, 165, 52, 17, 54, 78, 105, 188, 214, 196, 202, 181, 163, 172, 121, - 8, 40, 64, 57, 99, 122, 87, 131, 153, 172, 149, 12, 49, 37, 32, 41, - 94, 156, 187, 178, 162, 141, 111, 17, 52, 51, 57, 91, 132, 161, 108, 124, - 113, 118, 43, 47, 27, 27, 35, 27, 21, 19, 18, 17, 13, 10, 8, 10, - 14, 17, 22, 24, 25, 27, 29, 31, 27, 68, 85, 102, 111, 102, 97, 127, - 124, 45, 28, 49, 51, 52, 45, 44, 52, 50, 50, 51, 53, 57, 63, 66, - 68, 77, 90, 98, 95, 89, 92, 111, 123, 100, 124, 152, 135, 155, 145, 161, - 172, 174, 166, 45, 74, 79, 76, 79, 68, 55, 69, 117, 166, 183, 177, 191, - 194, 185, 118, 18, 47, 63, 82, 99, 205, 233, 209, 220, 191, 197, 185, 54, - 24, 62, 69, 66, 126, 176, 172, 189, 185, 204, 167, 11, 48, 39, 33, 41, - 114, 179, 189, 168, 163, 156, 123, 15, 60, 45, 56, 91, 128, 148, 103, 119, - 140, 137, 31, 37, 31, 33, 35, 24, 20, 19, 18, 17, 14, 9, 9, 11, - 14, 17, 22, 24, 24, 26, 29, 30, 26, 70, 103, 118, 109, 104, 105, 130, - 106, 38, 28, 52, 54, 54, 48, 46, 52, 49, 48, 48, 51, 56, 62, 66, - 71, 79, 87, 92, 87, 85, 95, 114, 111, 94, 119, 143, 139, 156, 175, 171, - 175, 173, 177, 43, 72, 76, 72, 76, 67, 56, 71, 119, 168, 178, 185, 209, - 210, 161, 57, 32, 67, 64, 76, 102, 201, 226, 214, 222, 194, 197, 185, 35, - 52, 70, 68, 63, 145, 215, 207, 211, 215, 199, 158, 9, 48, 41, 36, 47, - 120, 172, 171, 143, 161, 164, 128, 23, 58, 45, 55, 88, 109, 130, 127, 133, - 157, 142, 27, 33, 34, 32, 32, 23, 19, 18, 18, 17, 12, 9, 9, 10, - 13, 16, 22, 24, 25, 27, 30, 33, 31, 66, 92, 101, 97, 95, 98, 108, - 103, 48, 34, 58, 57, 55, 49, 47, 46, 45, 46, 48, 50, 55, 61, 65, - 74, 81, 80, 78, 79, 86, 101, 115, 100, 92, 113, 145, 135, 163, 189, 160, - 188, 190, 174, 39, 71, 75, 69, 70, 65, 59, 72, 112, 157, 175, 201, 208, - 177, 80, 23, 50, 70, 76, 68, 98, 196, 229, 214, 200, 179, 181, 146, 38, - 64, 67, 74, 78, 127, 188, 163, 184, 192, 171, 138, 9, 49, 43, 36, 44, - 109, 157, 182, 167, 168, 153, 113, 24, 55, 40, 49, 81, 112, 149, 161, 150, - 148, 117, 24, 33, 31, 28, 27, 21, 18, 18, 17, 16, 12, 9, 9, 9, - 13, 16, 21, 25, 25, 27, 30, 33, 30, 65, 88, 99, 100, 98, 110, 111, - 118, 67, 41, 64, 59, 54, 49, 47, 45, 45, 46, 48, 51, 55, 62, 66, - 74, 78, 71, 69, 74, 86, 104, 112, 92, 92, 107, 141, 115, 153, 146, 147, - 185, 168, 156, 45, 72, 74, 67, 67, 63, 60, 74, 118, 164, 191, 203, 169, - 83, 98, 48, 59, 73, 68, 69, 88, 159, 198, 187, 161, 158, 190, 129, 44, - 68, 63, 70, 71, 123, 190, 158, 198, 178, 169, 126, 10, 52, 46, 37, 42, - 91, 141, 182, 165, 157, 144, 114, 22, 62, 36, 50, 85, 127, 155, 152, 142, - 132, 125, 25, 34, 31, 28, 29, 20, 17, 17, 16, 15, 12, 9, 9, 9, - 14, 17, 22, 25, 26, 26, 30, 34, 31, 63, 83, 95, 98, 95, 118, 120, - 125, 74, 43, 68, 59, 52, 48, 47, 49, 48, 47, 48, 51, 55, 62, 67, - 72, 70, 63, 62, 69, 84, 100, 106, 86, 92, 102, 134, 118, 160, 165, 151, - 152, 133, 132, 39, 73, 74, 67, 67, 60, 55, 74, 118, 169, 199, 182, 128, - 120, 201, 62, 65, 70, 60, 69, 85, 153, 190, 158, 145, 161, 192, 132, 45, - 67, 55, 68, 75, 114, 179, 170, 188, 168, 160, 110, 11, 55, 47, 38, 44, - 84, 142, 181, 164, 166, 150, 120, 31, 62, 47, 55, 90, 128, 140, 140, 138, - 132, 102, 19, 35, 32, 25, 25, 20, 17, 17, 16, 14, 11, 9, 8, 8, - 16, 18, 22, 23, 26, 27, 29, 34, 34, 61, 75, 79, 88, 100, 123, 124, - 125, 93, 40, 72, 58, 49, 48, 49, 50, 48, 49, 50, 51, 55, 63, 66, - 66, 61, 55, 61, 65, 84, 99, 96, 83, 90, 98, 130, 157, 179, 191, 174, - 159, 158, 152, 34, 72, 72, 66, 68, 58, 50, 71, 119, 175, 171, 127, 141, - 215, 231, 57, 58, 62, 55, 62, 87, 177, 189, 138, 153, 178, 188, 132, 41, - 59, 52, 64, 70, 107, 168, 151, 171, 155, 142, 104, 12, 56, 50, 40, 43, - 82, 144, 176, 168, 178, 162, 135, 48, 61, 58, 63, 94, 126, 123, 144, 146, - 142, 67, 18, 36, 31, 22, 21, 21, 16, 16, 15, 13, 11, 8, 7, 8, - 18, 19, 22, 23, 26, 27, 28, 33, 35, 58, 69, 74, 95, 115, 121, 128, - 125, 99, 44, 71, 56, 46, 49, 53, 51, 49, 50, 51, 52, 56, 63, 64, - 57, 54, 59, 66, 73, 86, 88, 86, 84, 90, 95, 134, 172, 168, 183, 183, - 186, 198, 155, 36, 71, 72, 66, 68, 58, 50, 68, 109, 149, 126, 176, 219, - 236, 190, 42, 55, 56, 49, 59, 84, 167, 171, 147, 180, 192, 180, 96, 38, - 54, 50, 61, 72, 118, 173, 170, 165, 143, 140, 126, 13, 57, 51, 41, 44, - 74, 122, 146, 151, 154, 141, 123, 54, 57, 73, 89, 107, 130, 127, 148, 145, - 122, 32, 15, 36, 30, 22, 21, 21, 16, 16, 14, 13, 11, 7, 6, 8, - 17, 20, 23, 24, 26, 27, 29, 34, 34, 52, 66, 76, 105, 129, 114, 135, - 137, 114, 49, 67, 57, 45, 51, 59, 53, 52, 52, 52, 54, 59, 62, 57, - 48, 57, 70, 75, 88, 93, 82, 81, 87, 89, 90, 130, 125, 165, 133, 169, - 190, 160, 120, 41, 71, 74, 66, 65, 59, 52, 68, 96, 104, 185, 241, 231, - 202, 163, 41, 52, 55, 48, 58, 84, 157, 196, 160, 190, 195, 176, 92, 36, - 52, 50, 62, 70, 130, 164, 178, 165, 147, 149, 141, 14, 59, 54, 45, 48, - 63, 88, 105, 133, 131, 129, 125, 100, 72, 82, 101, 112, 132, 129, 123, 114, - 59, 4, 25, 36, 27, 22, 21, 22, 18, 17, 14, 13, 9, 5, 6, 8, - 17, 20, 23, 24, 26, 26, 28, 34, 36, 49, 66, 83, 108, 136, 120, 146, - 153, 133, 53, 66, 60, 48, 53, 61, 54, 53, 53, 54, 56, 61, 62, 52, - 48, 65, 80, 95, 98, 92, 85, 78, 90, 86, 87, 124, 53, 83, 130, 188, - 157, 104, 137, 45, 71, 75, 66, 65, 59, 53, 68, 89, 169, 245, 238, 208, - 206, 192, 51, 51, 55, 47, 57, 76, 142, 213, 152, 184, 182, 171, 102, 36, - 52, 52, 63, 65, 130, 159, 161, 163, 159, 157, 135, 14, 60, 55, 47, 51, - 59, 72, 85, 114, 124, 139, 140, 138, 104, 97, 106, 103, 118, 120, 105, 77, - 16, 9, 35, 34, 25, 22, 20, 21, 17, 16, 13, 12, 9, 5, 6, 8, - 18, 19, 23, 24, 26, 25, 28, 34, 38, 47, 66, 89, 117, 144, 132, 151, - 142, 114, 63, 54, 61, 51, 55, 62, 56, 55, 56, 57, 60, 62, 63, 53, - 54, 71, 101, 140, 120, 90, 83, 77, 91, 82, 84, 124, 116, 115, 134, 130, - 77, 130, 181, 44, 70, 74, 67, 66, 59, 53, 68, 120, 213, 215, 204, 208, - 202, 214, 52, 52, 55, 47, 57, 71, 150, 204, 138, 181, 186, 177, 105, 36, - 53, 53, 64, 68, 128, 166, 157, 164, 164, 161, 139, 14, 60, 56, 49, 53, - 58, 66, 80, 96, 113, 130, 134, 151, 126, 110, 115, 114, 131, 114, 76, 37, - 7, 24, 31, 31, 24, 22, 19, 20, 16, 16, 14, 13, 8, 4, 5, 8, - 18, 19, 23, 24, 25, 26, 28, 34, 37, 42, 64, 92, 124, 150, 139, 150, - 128, 106, 87, 41, 56, 53, 58, 66, 61, 60, 60, 62, 62, 62, 62, 56, - 61, 81, 127, 176, 152, 94, 73, 79, 91, 77, 83, 126, 150, 193, 165, 122, - 120, 213, 188, 37, 69, 73, 68, 68, 58, 51, 68, 131, 205, 172, 165, 191, - 175, 218, 50, 53, 55, 47, 56, 79, 181, 198, 128, 164, 181, 173, 113, 37, - 54, 55, 66, 74, 114, 163, 162, 164, 162, 159, 143, 13, 59, 56, 49, 52, - 55, 60, 79, 93, 112, 126, 138, 161, 124, 108, 121, 142, 148, 87, 32, 21, - 26, 35, 27, 28, 23, 24, 18, 19, 15, 16, 14, 12, 7, 4, 4, 8, - 19, 20, 23, 23, 25, 26, 29, 34, 36, 39, 59, 85, 111, 143, 139, 154, - 145, 149, 129, 53, 60, 60, 58, 65, 65, 63, 62, 62, 60, 56, 58, 55, - 63, 97, 144, 181, 170, 91, 53, 78, 88, 71, 82, 116, 174, 197, 201, 201, - 212, 232, 205, 47, 72, 71, 65, 68, 57, 46, 65, 124, 178, 195, 210, 165, - 219, 222, 47, 52, 54, 47, 57, 83, 155, 169, 141, 155, 149, 129, 71, 36, - 57, 53, 62, 74, 93, 141, 159, 162, 162, 155, 137, 15, 60, 53, 45, 50, - 53, 63, 85, 101, 120, 136, 150, 136, 97, 104, 128, 128, 86, 30, 25, 45, - 55, 35, 30, 28, 23, 22, 15, 17, 14, 16, 14, 13, 9, 4, 5, 8, - 22, 25, 25, 23, 23, 26, 30, 37, 38, 41, 49, 68, 96, 126, 136, 154, - 157, 144, 141, 79, 72, 72, 55, 52, 67, 61, 59, 52, 52, 47, 53, 51, - 65, 110, 149, 154, 177, 63, 28, 76, 83, 65, 74, 112, 180, 198, 215, 220, - 224, 235, 213, 51, 76, 70, 54, 62, 54, 40, 55, 113, 167, 197, 225, 212, - 206, 195, 54, 52, 52, 45, 62, 82, 97, 137, 173, 192, 194, 169, 99, 33, - 58, 48, 46, 75, 77, 94, 115, 141, 156, 156, 131, 20, 69, 51, 38, 46, - 65, 87, 104, 99, 134, 139, 109, 60, 55, 49, 32, 27, 28, 36, 47, 49, - 48, 43, 39, 33, 26, 14, 11, 15, 13, 16, 16, 16, 12, 10, 8, 7, - 23, 25, 25, 23, 23, 26, 30, 37, 37, 40, 45, 60, 80, 103, 134, 149, - 147, 133, 138, 123, 67, 76, 55, 53, 65, 62, 58, 50, 49, 51, 58, 69, - 92, 153, 160, 180, 144, 24, 38, 75, 83, 69, 80, 118, 182, 185, 200, 219, - 202, 225, 186, 58, 79, 76, 59, 68, 56, 37, 56, 121, 190, 210, 188, 176, - 164, 164, 40, 51, 49, 46, 61, 88, 125, 180, 191, 191, 191, 173, 101, 27, - 60, 47, 46, 75, 114, 139, 126, 111, 125, 129, 112, 18, 64, 51, 34, 50, - 71, 90, 98, 116, 142, 135, 55, 29, 71, 68, 53, 50, 47, 46, 48, 47, - 43, 40, 39, 32, 25, 14, 13, 15, 14, 16, 16, 16, 13, 10, 8, 7, - 23, 24, 24, 22, 22, 25, 29, 35, 36, 38, 41, 54, 71, 93, 128, 131, - 130, 131, 161, 145, 90, 68, 70, 54, 62, 56, 55, 58, 57, 63, 69, 94, - 146, 179, 175, 177, 89, 21, 53, 79, 87, 75, 91, 133, 178, 184, 202, 202, - 192, 207, 153, 78, 78, 91, 68, 68, 61, 49, 65, 131, 200, 209, 161, 111, - 150, 156, 39, 56, 53, 50, 66, 97, 154, 193, 174, 180, 175, 161, 93, 34, - 61, 43, 48, 73, 119, 150, 164, 148, 123, 112, 111, 16, 67, 50, 36, 45, - 70, 87, 98, 115, 130, 131, 75, 47, 91, 80, 73, 63, 57, 48, 45, 48, - 40, 35, 34, 29, 27, 20, 18, 17, 15, 16, 16, 16, 12, 10, 8, 7, - 23, 24, 23, 21, 21, 23, 26, 32, 35, 37, 39, 49, 67, 96, 136, 150, - 164, 159, 172, 162, 121, 86, 68, 67, 63, 62, 61, 66, 68, 84, 99, 145, - 186, 190, 184, 153, 40, 43, 57, 82, 95, 86, 108, 148, 178, 192, 202, 196, - 197, 218, 189, 127, 77, 96, 85, 78, 69, 63, 79, 134, 195, 189, 193, 161, - 116, 132, 50, 50, 63, 60, 74, 107, 162, 174, 165, 180, 166, 157, 103, 35, - 64, 49, 52, 80, 129, 121, 158, 149, 157, 152, 130, 34, 64, 55, 43, 50, - 73, 86, 114, 127, 119, 110, 99, 58, 75, 71, 80, 80, 73, 70, 63, 51, - 45, 36, 30, 28, 29, 26, 23, 18, 15, 16, 16, 15, 12, 10, 9, 8, - 23, 23, 22, 20, 21, 22, 24, 30, 35, 36, 37, 45, 56, 75, 106, 142, - 173, 177, 178, 165, 141, 130, 82, 82, 65, 72, 71, 74, 88, 112, 136, 183, - 208, 196, 167, 78, 35, 56, 59, 81, 103, 106, 136, 162, 191, 195, 187, 191, - 199, 212, 204, 190, 123, 106, 103, 85, 76, 78, 102, 154, 188, 188, 195, 184, - 114, 123, 83, 57, 70, 75, 87, 136, 167, 162, 173, 180, 163, 159, 118, 35, - 70, 64, 60, 85, 128, 101, 164, 148, 151, 149, 142, 75, 55, 64, 48, 44, - 73, 80, 119, 112, 119, 109, 107, 77, 43, 64, 94, 77, 73, 81, 75, 60, - 56, 43, 33, 31, 32, 32, 27, 20, 16, 16, 15, 15, 12, 9, 9, 9, - 23, 23, 22, 20, 20, 22, 23, 29, 34, 35, 35, 40, 53, 65, 78, 108, - 130, 161, 182, 142, 129, 134, 119, 122, 91, 80, 89, 113, 152, 154, 126, 141, - 190, 177, 102, 28, 55, 61, 62, 87, 129, 155, 187, 196, 203, 198, 194, 203, - 206, 208, 198, 181, 181, 186, 163, 71, 79, 109, 136, 178, 194, 180, 162, 173, - 190, 191, 165, 110, 74, 83, 123, 166, 159, 161, 169, 175, 162, 151, 105, 72, - 81, 65, 64, 75, 104, 93, 170, 126, 144, 148, 136, 108, 84, 63, 50, 48, - 76, 59, 105, 113, 136, 117, 89, 83, 99, 123, 104, 72, 71, 79, 71, 58, - 55, 50, 45, 37, 36, 33, 28, 21, 17, 16, 14, 14, 11, 8, 9, 9, - 22, 23, 22, 20, 21, 22, 24, 29, 33, 35, 35, 37, 40, 54, 64, 83, - 108, 145, 154, 133, 108, 110, 129, 147, 131, 121, 131, 173, 183, 147, 137, 173, - 173, 126, 40, 46, 61, 60, 61, 85, 140, 176, 205, 206, 201, 199, 202, 204, - 199, 206, 192, 178, 197, 185, 163, 49, 81, 146, 163, 182, 195, 164, 170, 186, - 176, 180, 168, 142, 78, 86, 150, 160, 142, 162, 171, 172, 160, 141, 118, 117, - 85, 53, 56, 77, 98, 112, 162, 143, 146, 142, 132, 123, 110, 59, 46, 43, - 66, 42, 74, 93, 114, 107, 93, 107, 125, 126, 97, 81, 84, 88, 77, 67, - 59, 54, 52, 44, 35, 33, 26, 20, 17, 16, 14, 14, 11, 8, 8, 9, - 22, 22, 21, 19, 21, 21, 25, 29, 31, 35, 35, 36, 40, 45, 54, 66, - 81, 125, 124, 145, 160, 166, 187, 184, 184, 168, 175, 216, 197, 186, 180, 202, - 156, 49, 32, 60, 58, 57, 64, 89, 150, 184, 206, 196, 191, 193, 197, 189, - 196, 193, 175, 185, 202, 179, 150, 39, 88, 161, 167, 174, 181, 171, 178, 176, - 154, 153, 156, 149, 75, 82, 147, 135, 138, 167, 170, 163, 155, 131, 155, 101, - 70, 42, 43, 42, 70, 125, 160, 145, 144, 141, 134, 130, 105, 52, 31, 45, - 69, 75, 95, 125, 123, 117, 97, 102, 126, 113, 100, 93, 97, 94, 91, 97, - 76, 54, 44, 47, 38, 32, 23, 22, 18, 17, 15, 15, 11, 8, 8, 9, - 21, 20, 20, 19, 21, 22, 25, 29, 28, 33, 33, 35, 37, 40, 47, 55, - 63, 73, 95, 141, 167, 186, 205, 207, 219, 143, 200, 214, 169, 180, 171, 133, - 49, 31, 56, 55, 52, 57, 67, 85, 132, 152, 168, 168, 166, 171, 181, 179, - 178, 174, 172, 183, 192, 168, 157, 35, 79, 115, 109, 137, 156, 158, 163, 162, - 150, 150, 145, 124, 62, 84, 142, 140, 150, 166, 143, 109, 88, 44, 57, 62, - 78, 36, 86, 110, 122, 158, 151, 136, 134, 131, 125, 124, 102, 56, 36, 44, - 69, 84, 97, 118, 126, 127, 81, 90, 114, 89, 85, 80, 80, 69, 78, 101, - 87, 65, 37, 41, 44, 28, 21, 23, 19, 18, 16, 15, 10, 7, 8, 11, - 20, 19, 20, 19, 21, 22, 25, 27, 27, 31, 32, 35, 36, 38, 42, 45, - 49, 60, 73, 95, 144, 154, 177, 196, 176, 160, 210, 185, 129, 115, 54, 24, - 39, 55, 56, 53, 46, 56, 67, 77, 101, 100, 101, 98, 89, 90, 101, 98, - 86, 77, 78, 89, 94, 83, 84, 32, 74, 80, 65, 63, 67, 69, 70, 76, - 73, 71, 62, 58, 43, 73, 101, 79, 72, 70, 48, 26, 26, 26, 51, 69, - 48, 49, 96, 87, 72, 80, 62, 62, 63, 62, 60, 63, 45, 26, 30, 38, - 65, 80, 78, 96, 115, 95, 78, 105, 91, 64, 71, 76, 77, 67, 76, 93, - 88, 74, 43, 29, 40, 29, 21, 24, 20, 20, 17, 14, 11, 7, 9, 13, - 18, 18, 19, 18, 22, 22, 24, 26, 25, 30, 33, 37, 38, 38, 41, 41, - 46, 53, 62, 61, 60, 69, 97, 105, 80, 126, 125, 74, 58, 30, 36, 70, - 67, 65, 56, 43, 44, 53, 63, 64, 71, 70, 70, 66, 55, 55, 69, 75, - 64, 55, 53, 60, 61, 66, 62, 51, 66, 73, 61, 54, 51, 50, 51, 51, - 48, 51, 54, 53, 54, 59, 56, 50, 51, 55, 52, 43, 39, 40, 54, 51, - 40, 46, 56, 50, 43, 47, 41, 43, 48, 52, 54, 50, 44, 38, 47, 37, - 55, 78, 77, 75, 80, 63, 94, 93, 75, 80, 86, 89, 90, 82, 84, 86, - 78, 64, 48, 19, 29, 32, 22, 25, 21, 20, 17, 14, 10, 7, 10, 15, - 18, 18, 19, 19, 21, 22, 23, 25, 23, 28, 31, 36, 37, 37, 39, 39, - 42, 47, 57, 66, 66, 58, 50, 37, 29, 29, 35, 39, 52, 55, 60, 69, - 66, 62, 51, 42, 41, 50, 57, 51, 50, 63, 72, 66, 58, 61, 81, 85, - 67, 60, 58, 60, 61, 67, 58, 53, 51, 63, 61, 54, 50, 50, 56, 55, - 48, 44, 47, 54, 53, 43, 35, 40, 52, 57, 54, 44, 42, 45, 56, 46, - 43, 35, 41, 44, 48, 41, 31, 33, 39, 45, 48, 44, 48, 40, 38, 37, - 47, 73, 84, 80, 61, 85, 91, 72, 73, 91, 85, 90, 87, 81, 74, 66, - 64, 61, 54, 16, 19, 32, 24, 25, 21, 19, 16, 14, 10, 7, 10, 15, - 17, 18, 19, 20, 21, 21, 23, 25, 20, 24, 28, 33, 34, 35, 39, 39, - 40, 48, 48, 52, 52, 53, 47, 42, 43, 47, 50, 57, 56, 59, 68, 65, - 64, 55, 52, 44, 43, 50, 55, 46, 39, 56, 64, 55, 49, 51, 71, 80, - 62, 51, 48, 50, 53, 57, 54, 46, 45, 49, 49, 46, 41, 43, 49, 45, - 38, 34, 36, 41, 37, 29, 19, 29, 43, 43, 40, 36, 34, 37, 43, 37, - 27, 23, 24, 31, 30, 26, 18, 24, 28, 33, 35, 33, 36, 31, 32, 35, - 52, 66, 63, 66, 74, 81, 63, 56, 67, 75, 67, 74, 73, 74, 65, 55, - 59, 66, 58, 18, 16, 30, 25, 23, 19, 18, 16, 14, 10, 8, 10, 15, - 17, 18, 19, 19, 19, 21, 24, 24, 18, 22, 26, 29, 33, 35, 39, 41, - 43, 47, 48, 50, 50, 49, 46, 46, 48, 47, 52, 53, 54, 61, 61, 57, - 56, 51, 47, 44, 45, 49, 53, 47, 43, 51, 57, 55, 53, 53, 64, 71, - 62, 49, 44, 45, 49, 52, 52, 47, 45, 46, 45, 43, 41, 42, 44, 40, - 35, 34, 35, 37, 36, 31, 27, 32, 37, 37, 36, 33, 32, 34, 37, 34, - 31, 27, 27, 31, 30, 27, 24, 30, 31, 33, 33, 31, 32, 32, 35, 42, - 69, 53, 56, 80, 94, 68, 70, 56, 48, 40, 36, 42, 54, 60, 58, 63, - 62, 65, 47, 23, 11, 32, 23, 22, 18, 17, 16, 16, 12, 10, 12, 13, - 17, 18, 19, 19, 19, 22, 24, 25, 19, 21, 25, 26, 30, 33, 38, 40, - 42, 45, 47, 47, 48, 47, 46, 47, 47, 47, 46, 46, 49, 55, 54, 52, - 50, 47, 43, 42, 45, 48, 50, 49, 47, 49, 54, 56, 57, 56, 59, 67, - 62, 50, 43, 42, 47, 51, 51, 48, 47, 46, 45, 45, 44, 43, 42, 40, - 38, 38, 37, 36, 36, 34, 34, 35, 35, 34, 33, 34, 34, 33, 32, 33, - 33, 32, 32, 32, 32, 32, 33, 36, 35, 34, 33, 31, 33, 35, 39, 45, - 77, 81, 92, 94, 73, 38, 61, 62, 54, 47, 48, 49, 52, 44, 41, 56, - 68, 62, 45, 16, 5, 34, 28, 22, 17, 16, 16, 16, 14, 12, 12, 11, - 17, 18, 19, 20, 20, 21, 24, 24, 19, 21, 23, 24, 26, 30, 33, 35, - 36, 39, 40, 41, 42, 41, 42, 42, 42, 43, 43, 43, 46, 50, 50, 47, - 46, 43, 40, 39, 42, 45, 47, 45, 43, 45, 50, 52, 53, 52, 54, 62, - 57, 44, 38, 38, 42, 46, 47, 45, 44, 43, 42, 42, 41, 40, 39, 37, - 35, 34, 33, 32, 32, 31, 30, 31, 30, 29, 29, 31, 30, 29, 29, 30, - 30, 29, 28, 28, 28, 28, 29, 31, 31, 29, 29, 29, 30, 31, 38, 46, - 64, 79, 84, 74, 41, 14, 47, 52, 48, 48, 49, 50, 52, 47, 50, 40, - 49, 46, 29, 10, 8, 34, 27, 21, 17, 17, 16, 16, 14, 12, 12, 11, - 17, 18, 19, 20, 20, 21, 23, 22, 18, 19, 21, 23, 25, 28, 31, 32, - 32, 35, 36, 36, 38, 38, 39, 39, 38, 39, 40, 41, 44, 46, 45, 43, - 42, 40, 37, 37, 40, 43, 44, 42, 40, 42, 46, 48, 49, 47, 49, 56, - 53, 42, 35, 34, 38, 43, 45, 43, 41, 40, 39, 39, 38, 38, 37, 35, - 35, 33, 33, 31, 31, 30, 29, 29, 29, 28, 27, 29, 29, 28, 27, 28, - 28, 27, 27, 27, 27, 27, 27, 28, 28, 27, 26, 27, 29, 30, 40, 49, - 59, 69, 55, 60, 36, 10, 37, 42, 40, 41, 41, 44, 49, 51, 66, 37, - 20, 20, 20, 16, 17, 35, 25, 21, 17, 16, 15, 16, 14, 11, 11, 10, - 17, 18, 19, 20, 20, 21, 22, 21, 17, 18, 20, 21, 24, 26, 29, 31, - 29, 31, 33, 32, 33, 35, 36, 37, 36, 37, 39, 41, 44, 44, 42, 40, - 39, 37, 35, 35, 39, 41, 42, 40, 38, 40, 43, 45, 47, 44, 46, 53, - 49, 40, 32, 31, 35, 40, 42, 40, 38, 37, 36, 36, 36, 35, 34, 35, - 34, 33, 33, 31, 30, 29, 28, 28, 28, 27, 27, 28, 27, 26, 26, 28, - 27, 26, 26, 26, 26, 26, 26, 26, 25, 24, 25, 25, 28, 30, 41, 50, - 66, 76, 55, 72, 44, 12, 39, 47, 45, 43, 41, 43, 45, 46, 66, 45, - 14, 15, 44, 27, 20, 32, 25, 21, 16, 15, 15, 16, 13, 10, 10, 9, - 17, 18, 19, 20, 20, 21, 21, 20, 17, 18, 20, 20, 21, 24, 26, 28, - 28, 29, 30, 28, 29, 31, 33, 34, 32, 34, 36, 39, 42, 40, 38, 36, - 35, 34, 33, 33, 36, 38, 38, 37, 36, 37, 39, 42, 44, 41, 42, 49, - 47, 38, 31, 27, 31, 37, 40, 37, 35, 34, 33, 33, 32, 31, 31, 32, - 33, 32, 32, 29, 28, 27, 27, 28, 27, 26, 26, 25, 25, 24, 23, 26, - 27, 26, 26, 25, 25, 25, 24, 22, 22, 23, 23, 24, 26, 30, 40, 49, - 72, 84, 74, 88, 52, 18, 45, 53, 50, 47, 44, 46, 51, 57, 71, 44, - 26, 41, 66, 26, 22, 29, 23, 22, 17, 16, 15, 16, 12, 8, 9, 9, - 16, 17, 18, 19, 19, 20, 20, 20, 17, 18, 20, 21, 20, 21, 23, 25, - 26, 27, 28, 26, 26, 28, 30, 32, 31, 32, 35, 38, 41, 38, 36, 35, - 33, 32, 30, 32, 35, 36, 36, 35, 34, 35, 37, 40, 41, 38, 39, 45, - 45, 37, 28, 25, 29, 35, 39, 36, 34, 33, 32, 31, 31, 30, 30, 31, - 32, 31, 30, 28, 27, 26, 26, 28, 28, 27, 26, 24, 24, 23, 22, 25, - 26, 25, 25, 24, 24, 24, 24, 21, 21, 21, 21, 23, 25, 29, 39, 50, - 67, 76, 79, 84, 62, 33, 53, 51, 48, 46, 48, 50, 55, 62, 66, 24, - 29, 65, 53, 17, 32, 27, 15, 23, 18, 16, 15, 15, 12, 8, 8, 9, - 16, 17, 17, 18, 19, 19, 20, 20, 19, 20, 21, 21, 22, 23, 24, 24, - 23, 24, 25, 26, 28, 28, 29, 30, 30, 32, 36, 40, 40, 38, 36, 34, - 31, 29, 30, 32, 35, 36, 35, 34, 35, 37, 39, 39, 37, 36, 37, 44, - 45, 38, 30, 26, 28, 34, 38, 37, 35, 33, 31, 31, 31, 30, 30, 31, - 30, 29, 29, 28, 27, 26, 26, 25, 25, 24, 23, 23, 22, 21, 21, 24, - 25, 25, 25, 24, 24, 24, 23, 22, 21, 20, 20, 22, 25, 29, 38, 49, - 60, 60, 73, 74, 70, 44, 50, 42, 44, 46, 51, 58, 65, 63, 38, 27, - 52, 66, 39, 26, 40, 25, 13, 21, 19, 19, 17, 15, 13, 8, 6, 8, - 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 22, 22, 22, 23, 24, - 23, 24, 24, 24, 25, 26, 26, 29, 30, 32, 36, 39, 38, 36, 34, 34, - 32, 31, 32, 33, 34, 36, 34, 33, 32, 34, 36, 36, 34, 33, 34, 41, - 43, 36, 28, 25, 27, 31, 36, 37, 35, 33, 31, 30, 29, 28, 28, 29, - 29, 29, 28, 25, 25, 24, 23, 24, 24, 24, 23, 22, 22, 21, 21, 23, - 24, 24, 24, 23, 23, 23, 22, 20, 19, 19, 19, 20, 23, 28, 35, 43, - 52, 41, 55, 55, 66, 45, 36, 39, 57, 63, 63, 69, 54, 34, 32, 46, - 68, 52, 19, 34, 41, 19, 17, 22, 18, 19, 17, 15, 12, 8, 6, 8, - 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 22, 21, 21, 21, 22, - 22, 23, 23, 23, 23, 24, 24, 27, 30, 32, 35, 37, 35, 34, 33, 32, - 30, 30, 31, 32, 33, 34, 33, 31, 31, 32, 34, 34, 32, 32, 32, 38, - 41, 35, 27, 23, 25, 31, 34, 34, 33, 31, 29, 28, 27, 26, 26, 26, - 26, 26, 25, 23, 21, 20, 20, 22, 22, 22, 21, 20, 20, 19, 18, 20, - 21, 21, 21, 20, 20, 20, 19, 18, 16, 18, 17, 19, 22, 27, 31, 34, - 54, 34, 24, 39, 62, 54, 30, 18, 30, 34, 38, 44, 33, 26, 42, 64, - 60, 27, 24, 42, 41, 19, 21, 22, 19, 19, 17, 15, 12, 8, 6, 8, - 16, 17, 17, 18, 19, 19, 20, 21, 24, 24, 24, 22, 21, 20, 21, 21, - 20, 21, 23, 22, 24, 24, 24, 27, 31, 34, 36, 37, 35, 34, 33, 31, - 29, 28, 31, 33, 34, 35, 34, 31, 30, 32, 34, 34, 32, 31, 33, 38, - 41, 35, 29, 24, 26, 30, 35, 34, 31, 29, 28, 27, 27, 26, 25, 24, - 23, 22, 22, 21, 20, 19, 19, 20, 20, 19, 18, 18, 17, 16, 16, 17, - 17, 17, 17, 16, 16, 16, 16, 17, 18, 18, 18, 20, 22, 26, 28, 27, - 58, 42, 10, 20, 49, 58, 41, 45, 41, 39, 42, 39, 47, 55, 64, 59, - 29, 9, 31, 41, 37, 26, 23, 19, 17, 18, 17, 13, 11, 8, 6, 8, - 16, 17, 17, 18, 19, 19, 20, 21, 25, 25, 24, 22, 22, 21, 21, 20, - 20, 20, 22, 22, 23, 24, 24, 27, 30, 34, 35, 34, 33, 33, 33, 31, - 26, 26, 29, 31, 33, 33, 33, 31, 30, 32, 33, 33, 32, 31, 32, 39, - 41, 35, 30, 25, 26, 30, 36, 34, 31, 30, 28, 28, 28, 27, 26, 23, - 21, 21, 20, 19, 19, 18, 17, 18, 18, 17, 16, 16, 15, 14, 14, 15, - 15, 15, 15, 13, 13, 13, 13, 18, 18, 18, 18, 19, 20, 24, 26, 22, - 48, 51, 23, 13, 37, 51, 43, 59, 57, 48, 48, 47, 41, 46, 50, 22, - 10, 25, 31, 29, 30, 33, 25, 18, 17, 17, 15, 13, 10, 7, 6, 8, - 16, 17, 17, 18, 19, 19, 20, 22, 25, 25, 23, 22, 24, 22, 21, 21, - 20, 21, 22, 22, 22, 22, 23, 25, 28, 32, 32, 31, 31, 31, 32, 29, - 25, 26, 29, 30, 31, 32, 31, 28, 29, 31, 33, 33, 31, 30, 31, 36, - 38, 33, 28, 24, 25, 28, 34, 34, 32, 30, 29, 28, 27, 27, 26, 24, - 22, 21, 20, 19, 18, 17, 16, 18, 18, 17, 16, 16, 16, 15, 14, 14, - 15, 15, 15, 13, 13, 13, 14, 18, 17, 16, 16, 16, 19, 20, 22, 17, - 38, 43, 30, 31, 42, 47, 35, 46, 41, 30, 26, 19, 24, 19, 20, 25, - 28, 29, 22, 19, 26, 34, 30, 18, 16, 16, 15, 12, 10, 7, 6, 8, - 17, 18, 18, 19, 20, 21, 21, 23, 23, 23, 22, 21, 22, 22, 21, 21, - 19, 19, 21, 21, 21, 21, 22, 25, 29, 30, 30, 28, 28, 28, 28, 26, - 23, 24, 26, 28, 28, 29, 27, 26, 26, 27, 28, 29, 27, 27, 27, 31, - 34, 32, 28, 24, 24, 25, 30, 30, 29, 27, 26, 26, 25, 24, 23, 23, - 23, 22, 21, 19, 18, 17, 16, 19, 20, 19, 18, 18, 18, 17, 16, 16, - 16, 15, 15, 14, 14, 14, 15, 18, 19, 18, 18, 17, 19, 21, 22, 19, - 32, 35, 33, 41, 45, 42, 32, 29, 20, 12, 11, 7, 10, 15, 27, 40, - 37, 27, 22, 22, 25, 27, 26, 21, 17, 16, 14, 13, 11, 8, 7, 8, - 17, 18, 19, 19, 21, 21, 22, 23, 21, 21, 21, 21, 21, 21, 22, 21, - 18, 18, 19, 20, 21, 21, 22, 26, 31, 30, 30, 28, 27, 26, 26, 24, - 21, 23, 25, 26, 28, 27, 26, 25, 24, 25, 25, 26, 25, 25, 24, 27, - 30, 31, 28, 24, 23, 23, 26, 26, 25, 24, 24, 23, 23, 22, 21, 24, - 23, 22, 22, 19, 18, 18, 17, 21, 22, 21, 20, 20, 20, 19, 18, 18, - 18, 17, 16, 16, 16, 16, 16, 19, 20, 20, 19, 19, 20, 24, 24, 22, - 26, 31, 34, 37, 39, 35, 32, 28, 23, 19, 18, 17, 21, 26, 30, 32, - 31, 29, 27, 25, 23, 20, 21, 21, 17, 14, 14, 14, 12, 9, 7, 8, - 18, 18, 19, 20, 21, 21, 22, 22, 20, 20, 20, 20, 20, 21, 22, 21, - 17, 17, 18, 19, 21, 20, 22, 26, 31, 30, 29, 27, 26, 25, 25, 24, - 23, 25, 26, 28, 28, 28, 27, 24, 23, 24, 25, 25, 25, 24, 23, 26, - 31, 32, 29, 26, 24, 24, 26, 27, 26, 25, 24, 24, 23, 23, 22, 23, - 23, 22, 22, 20, 18, 18, 17, 21, 22, 21, 20, 20, 19, 18, 18, 18, - 18, 17, 16, 16, 16, 16, 16, 19, 20, 19, 18, 18, 19, 22, 22, 20, - 22, 26, 30, 33, 34, 35, 36, 38, 35, 34, 34, 32, 32, 31, 30, 27, - 25, 23, 22, 21, 18, 15, 17, 20, 16, 13, 12, 13, 11, 9, 8, 8, - 18, 18, 19, 20, 20, 21, 21, 22, 20, 20, 20, 20, 20, 20, 21, 20, - 17, 18, 18, 19, 20, 20, 22, 26, 29, 29, 28, 26, 25, 24, 24, 23, - 22, 24, 26, 27, 27, 27, 26, 24, 22, 23, 24, 25, 24, 23, 22, 26, - 30, 31, 28, 26, 24, 23, 25, 25, 25, 24, 23, 23, 22, 22, 21, 22, - 22, 21, 21, 19, 18, 17, 17, 20, 20, 20, 19, 18, 18, 17, 16, 18, - 17, 16, 16, 16, 16, 16, 16, 18, 18, 18, 16, 15, 17, 20, 20, 17, - 19, 23, 26, 27, 29, 31, 31, 31, 31, 31, 32, 31, 29, 26, 25, 24, - 22, 19, 18, 18, 16, 13, 14, 17, 14, 11, 11, 12, 11, 9, 8, 8, - 18, 18, 19, 20, 20, 20, 21, 21, 20, 19, 19, 19, 19, 20, 21, 20, - 18, 18, 19, 20, 20, 21, 24, 27, 29, 28, 27, 25, 24, 24, 23, 22, - 22, 23, 25, 26, 27, 26, 25, 24, 23, 24, 25, 25, 25, 24, 23, 25, - 29, 30, 27, 25, 23, 22, 23, 24, 24, 23, 22, 22, 21, 20, 20, 21, - 22, 21, 20, 19, 18, 17, 17, 19, 19, 19, 18, 17, 17, 16, 15, 17, - 17, 16, 15, 15, 15, 15, 15, 17, 17, 16, 15, 13, 15, 17, 17, 16, - 17, 22, 24, 26, 28, 27, 26, 28, 30, 31, 30, 28, 27, 25, 24, 21, - 20, 18, 17, 16, 15, 11, 12, 14, 12, 9, 10, 11, 10, 9, 8, 8, - 18, 18, 19, 19, 19, 20, 21, 21, 19, 19, 19, 19, 19, 19, 20, 20, - 18, 19, 20, 20, 20, 21, 25, 28, 28, 27, 26, 24, 23, 23, 22, 22, - 22, 24, 26, 27, 27, 26, 25, 24, 23, 24, 25, 25, 25, 24, 23, 26, - 30, 30, 27, 25, 24, 22, 23, 24, 24, 23, 22, 22, 22, 21, 20, 21, - 21, 20, 19, 19, 18, 17, 17, 19, 19, 18, 17, 17, 16, 15, 14, 17, - 16, 16, 15, 15, 15, 15, 15, 15, 16, 14, 13, 12, 13, 16, 16, 14, - 16, 19, 22, 23, 25, 26, 25, 26, 28, 29, 27, 24, 23, 22, 20, 18, - 17, 16, 15, 14, 11, 8, 10, 12, 10, 8, 9, 10, 10, 9, 8, 8, - 18, 18, 19, 19, 19, 20, 21, 20, 19, 19, 19, 19, 19, 19, 20, 20, - 19, 20, 21, 21, 21, 22, 26, 28, 28, 27, 26, 24, 23, 22, 22, 22, - 23, 25, 26, 27, 27, 26, 26, 24, 23, 24, 25, 26, 25, 24, 23, 26, - 30, 30, 27, 26, 25, 23, 23, 24, 24, 23, 23, 23, 22, 21, 20, 20, - 20, 19, 19, 19, 18, 17, 17, 18, 18, 17, 17, 16, 16, 15, 14, 16, - 16, 15, 15, 15, 15, 15, 15, 15, 15, 14, 12, 12, 13, 15, 16, 12, - 15, 18, 20, 18, 20, 23, 22, 24, 27, 26, 24, 24, 22, 20, 17, 16, - 16, 14, 14, 11, 9, 6, 7, 10, 8, 7, 8, 9, 10, 9, 8, 8, - 18, 18, 19, 19, 19, 19, 19, 18, 17, 17, 17, 18, 18, 19, 20, 20, - 19, 19, 20, 21, 21, 23, 25, 27, 27, 26, 25, 23, 21, 20, 20, 21, - 23, 24, 25, 26, 26, 26, 26, 24, 23, 24, 25, 25, 24, 23, 22, 24, - 28, 30, 28, 25, 23, 21, 21, 23, 24, 24, 24, 22, 21, 20, 20, 21, - 21, 20, 19, 20, 19, 19, 18, 18, 18, 17, 17, 16, 16, 15, 15, 17, - 17, 16, 15, 15, 14, 13, 12, 14, 13, 14, 13, 12, 13, 13, 15, 16, - 17, 19, 19, 20, 20, 21, 22, 23, 24, 24, 23, 22, 20, 19, 17, 17, - 15, 13, 12, 11, 10, 7, 7, 9, 7, 6, 7, 8, 9, 9, 8, 8, - 18, 18, 18, 18, 18, 18, 18, 18, 16, 16, 17, 18, 18, 19, 20, 20, - 19, 20, 21, 21, 22, 23, 25, 26, 27, 25, 25, 22, 21, 20, 20, 21, - 23, 24, 25, 25, 25, 25, 25, 25, 23, 24, 25, 24, 24, 23, 22, 25, - 28, 29, 27, 24, 22, 21, 21, 23, 24, 24, 24, 22, 21, 20, 19, 21, - 21, 20, 20, 20, 20, 19, 18, 18, 18, 17, 17, 16, 16, 16, 16, 17, - 17, 16, 15, 15, 14, 12, 12, 13, 12, 13, 14, 12, 13, 14, 15, 15, - 17, 18, 19, 19, 19, 20, 21, 22, 22, 22, 21, 20, 19, 17, 17, 18, - 16, 13, 12, 12, 12, 8, 8, 8, 7, 6, 7, 8, 9, 9, 8, 8, - 18, 18, 18, 18, 18, 18, 18, 17, 16, 16, 16, 17, 18, 18, 19, 20, - 20, 21, 21, 22, 23, 24, 26, 27, 25, 24, 23, 21, 20, 20, 19, 20, - 23, 24, 24, 25, 24, 24, 24, 24, 24, 25, 25, 25, 24, 23, 22, 24, - 27, 29, 27, 24, 22, 20, 20, 22, 23, 23, 23, 22, 21, 20, 19, 21, - 22, 21, 21, 21, 21, 20, 19, 19, 18, 17, 17, 16, 16, 16, 16, 17, - 16, 16, 15, 15, 14, 12, 12, 12, 12, 13, 13, 13, 14, 15, 16, 14, - 16, 17, 17, 17, 17, 18, 19, 19, 19, 19, 19, 17, 15, 14, 15, 18, - 15, 12, 12, 13, 11, 9, 8, 8, 6, 5, 7, 8, 9, 9, 8, 8, - 18, 18, 18, 18, 18, 18, 18, 17, 15, 15, 16, 17, 17, 18, 18, 19, - 21, 22, 22, 23, 25, 25, 26, 26, 25, 24, 23, 21, 20, 19, 19, 20, - 23, 24, 25, 25, 24, 24, 24, 23, 23, 24, 25, 24, 23, 23, 22, 24, - 27, 29, 27, 24, 22, 21, 21, 23, 23, 23, 23, 22, 21, 21, 20, 22, - 21, 21, 20, 21, 20, 19, 19, 19, 18, 17, 17, 15, 15, 15, 15, 16, - 16, 15, 15, 15, 14, 12, 12, 12, 12, 12, 12, 13, 14, 15, 15, 16, - 17, 18, 18, 17, 17, 17, 18, 18, 18, 18, 18, 16, 14, 13, 14, 16, - 14, 12, 11, 12, 10, 9, 8, 6, 6, 5, 7, 8, 9, 9, 8, 7, - 17, 17, 17, 17, 17, 17, 17, 16, 15, 15, 16, 16, 17, 17, 18, 19, - 21, 22, 23, 24, 26, 26, 26, 25, 24, 23, 22, 20, 19, 18, 18, 20, - 24, 24, 26, 25, 24, 24, 24, 23, 23, 23, 24, 24, 23, 22, 21, 23, - 27, 29, 26, 24, 23, 21, 21, 22, 23, 23, 23, 22, 22, 21, 20, 21, - 21, 20, 20, 20, 20, 19, 18, 18, 18, 17, 17, 15, 15, 15, 15, 16, - 16, 15, 14, 14, 14, 12, 12, 12, 11, 11, 11, 13, 13, 13, 15, 16, - 17, 18, 19, 19, 17, 17, 17, 18, 18, 18, 17, 15, 14, 12, 13, 14, - 13, 11, 11, 10, 9, 8, 7, 5, 5, 5, 7, 8, 9, 9, 8, 7, - 17, 17, 17, 17, 17, 17, 17, 16, 14, 14, 15, 16, 16, 17, 18, 18, - 21, 21, 22, 23, 26, 25, 25, 25, 23, 22, 21, 19, 19, 18, 18, 20, - 23, 24, 25, 25, 23, 23, 23, 22, 22, 22, 23, 23, 22, 21, 20, 22, - 26, 27, 25, 24, 23, 21, 21, 22, 22, 22, 22, 22, 21, 20, 20, 21, - 22, 22, 21, 21, 21, 20, 20, 19, 18, 17, 17, 14, 14, 14, 14, 15, - 15, 14, 14, 14, 14, 12, 12, 12, 12, 10, 11, 12, 13, 13, 13, 16, - 17, 17, 16, 17, 16, 15, 15, 16, 16, 16, 15, 14, 12, 11, 11, 14, - 13, 12, 11, 10, 8, 8, 6, 5, 5, 6, 7, 8, 9, 9, 7, 6, - 16, 16, 16, 16, 17, 17, 17, 16, 14, 14, 15, 15, 15, 16, 17, 18, - 19, 20, 21, 23, 25, 24, 24, 23, 22, 21, 21, 20, 19, 19, 18, 20, - 23, 23, 24, 24, 23, 23, 23, 22, 22, 22, 23, 23, 22, 21, 21, 22, - 25, 27, 25, 23, 21, 20, 20, 21, 22, 22, 22, 21, 20, 20, 19, 20, - 21, 21, 20, 20, 20, 19, 19, 18, 17, 17, 16, 14, 14, 14, 14, 15, - 15, 14, 14, 14, 13, 12, 11, 12, 12, 12, 11, 12, 12, 12, 12, 15, - 15, 15, 14, 15, 15, 14, 15, 15, 15, 15, 14, 14, 13, 11, 12, 14, - 13, 13, 12, 10, 9, 8, 7, 7, 7, 7, 8, 8, 9, 9, 7, 6, - 14, 15, 15, 16, 17, 17, 17, 16, 14, 14, 15, 15, 15, 15, 16, 17, - 17, 18, 20, 22, 23, 23, 23, 22, 21, 21, 21, 20, 18, 19, 19, 20, - 22, 22, 23, 23, 23, 23, 23, 22, 22, 23, 23, 24, 23, 22, 22, 22, - 23, 25, 25, 23, 21, 20, 20, 21, 22, 22, 22, 21, 20, 19, 18, 18, - 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, - 15, 14, 14, 13, 12, 11, 11, 13, 12, 12, 12, 12, 12, 12, 12, 13, - 13, 13, 13, 13, 13, 13, 13, 15, 14, 13, 13, 14, 13, 12, 13, 13, - 13, 12, 11, 11, 10, 9, 9, 10, 9, 8, 8, 9, 9, 9, 8, 7, - 14, 15, 15, 16, 17, 17, 17, 16, 14, 14, 15, 15, 15, 15, 16, 17, - 17, 18, 20, 22, 23, 23, 23, 22, 21, 21, 21, 20, 19, 20, 20, 21, - 21, 22, 23, 23, 23, 23, 23, 22, 22, 23, 23, 24, 23, 22, 21, 21, - 23, 25, 25, 23, 21, 20, 20, 20, 21, 21, 21, 21, 20, 19, 18, 18, - 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, - 15, 14, 14, 13, 12, 11, 11, 13, 13, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 14, 13, 12, 12, 13, 12, 11, 12, 12, - 12, 11, 10, 11, 10, 9, 9, 10, 10, 9, 9, 9, 9, 9, 8, 7, - 14, 15, 15, 16, 17, 17, 17, 16, 14, 14, 15, 15, 15, 15, 16, 17, - 17, 18, 20, 22, 23, 23, 23, 22, 21, 21, 21, 20, 19, 20, 20, 21, - 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 22, 21, 21, - 23, 25, 25, 23, 21, 20, 20, 20, 21, 21, 21, 21, 20, 19, 18, 18, - 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, - 15, 14, 14, 13, 12, 11, 11, 13, 13, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 11, 10, 10, 10, 10, 12, 11, 11, 10, 11, 10, 9, 9, 11, - 10, 9, 9, 11, 10, 9, 9, 10, 10, 9, 9, 9, 9, 9, 8, 7 }; diff --git a/deps/CImg/examples/jawbreaker b/deps/CImg/examples/jawbreaker deleted file mode 100755 index ee5e818..0000000 Binary files a/deps/CImg/examples/jawbreaker and /dev/null differ diff --git a/deps/CImg/examples/jawbreaker.cpp b/deps/CImg/examples/jawbreaker.cpp deleted file mode 100644 index d360a53..0000000 --- a/deps/CImg/examples/jawbreaker.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - # - # File : jawbreaker.cpp - # ( C++ source file ) - # - # Description : A funny game featuring small colored balls. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Main procedure -//---------------- -int main(int argc, char **argv) { - - // Display help (if option '-h' or '--help' specified) and retrieve program arguments - cimg_usage("A small and funny game featuring colored balls.\n (by David Tschumperle)."); - const char *score_file = cimg_option("-s",(char*)0,"Specify score file to use (0=default file)."); - cimg_help("\n" - "** Quick Help *********************************************************\n\n" - "Goal : Delete the board by clicking on groups of adjacent colored balls\n" - " (a group is made of at least two balls with the same color).\n" - " Suppressing large sets gives higher scores.\n\n" - "In-game keys : - BACKSPACE or SPACE = Undo last move\n" - " - CTRL+F = Toggle fullscreen mode\n" - " - ESC = Quit application\n" - " - Q = End current game\n\n" - "*********************************************************************"); - - // Load score file if available - CImgList score_history; - char filename_history[1024]; - std::sprintf(filename_history,"%s%s",score_file?"":cimg::temporary_path(),score_file?score_file:"/jawbreaker.score"); - std::FILE *file = std::fopen(filename_history,"r"); - if (file) { std::fclose(file); score_history = CImg::get_load_dlm(filename_history)<'y'; } - - // Create ball graphics - const unsigned int W = 12, H = 14, Wi = (W<<5), Hi = (H<<5); - unsigned int score = 0, previous_score = 0, shape_score = 0, - best_score = score_history?score_history.max():0U; - - const CImg<> colors(3,7,1,1, 255,255,255, 205,0,230, 0,235,0, 235,255,0, 235,0,0, 0,128,255, 450,350,300); - const unsigned char - white[] = { 255,255,255 }, orange[] = { 255,128,64 }, yellow[] = { 255,255,64 }, red[] = { 255,64,64 }, six = 6; - CImgList<> balls0(7,32,32,1,3,0); - cimglist_for(balls0,l) if (l) { - balls0[l].draw_circle(16,16,14,colors.data(0,l)); - cimg_forXYC(balls0[l],x,y,k) if (balls0(l,x,y,k)) (balls0(l,x,y,k)*=(32-x+y)/60.0f)+=20; - balls0[l].draw_circle(16,16,14,colors.data(0,l),0.5f,~0U). - draw_circle(20,10,5,colors.data(),0.2f).draw_circle(22,8,2,colors.data(),0.4f).cut(0,255); - } - - // Create background graphics - CImgList balls(balls0); - CImg - mask = balls[1].get_cut(0,1).channel(0).dilate(3), - background = CImg(Wi,Hi,1,3,0). - noise(255,1).blur(6,20,0,true).equalize(100,0,255).blur(2,4,0,true); - background.get_shared_channel(0)/=4; background.get_shared_channel(1)/=8; background.get_shared_channel(2)/=2; - - // Begin user-interaction loop. - CImg board, previous_board, selected_board, shape, img(background); - CImgDisplay disp(img.width(),img.height(),"Jawbreaker",0); - bool redraw = true, gameover = false, title = true; - for (float opac = 0.0f; !disp.is_closed(); ) { - - // Init board - if (!board) { - (++((board.assign(W,H,1,1,5).noise(5,1))%=5)).get_shared_row(0).fill(0); - opac = (float)(score = previous_score = shape_score = 0); - gameover = false; redraw = title = true; - previous_board = board; - } - - // Draw graphical board - if (redraw) { - (img=background).draw_text(2,2,"Score : %u",yellow,0,0.7f,24,score). - draw_text(Wi-90,2,"Best : %u",orange,0,0.9f,17,best_score); - if (selected_board) { - cimg_forXY(selected_board,x,y) if (selected_board(x,y)) - img.draw_image(x<<5,y<<5,balls[selected_board(x,y)],mask); - } else cimg_forXY(board,x,y) if (board(x,y)) img.draw_image(x<<5,y<<5,balls[board(x,y)],mask); - if (title) { - CImg text1, text2; - text1.draw_text(0,0,"- Jawbreaker -",white,0,1,48).resize(-100,-100,1,3); - text2.draw_text(0,0,"Press button to start",yellow,0,1,24).resize(-100,-100,1,3); - (img/=2).draw_image((Wi-text1.width())/2, - (Hi-text1.height())/2, - text1,text1.get_dilate(7),1,255). - draw_image((Wi-text2.width())/2, - (Hi+text1.height()+10)/2, - text2,text2.get_dilate(5),0.7f,255); - for (float i = 1; i<10 && !disp.is_keyESC(); i+=0.25) - disp.display(img.get_crop((int)(Wi*(0.5f-i*i/200.0f)),(int)(Hi*(0.5f-i*i*i*i/20000.0f)), - (int)(Wi*(0.5f+i*i/200.0f)),(int)(Hi*(0.5f+i*i*i*i/20000.0f)))).wait(20); - } - } - if ((opac-=0.06f)>0) disp.display((+img).draw_text(disp.mouse_x()-8,disp.mouse_y()-80+(int)(60*opac),"+%u", - white,0,(float)std::sqrt(opac),32,shape_score)).wait(20); - else { if (redraw) { disp.display(img); redraw = false; } else disp.wait(); } - - // Handle key and window events - if (disp.is_resized()) disp.resize(disp); - if (disp.is_keyBACKSPACE() || disp.is_keySPACE()) { - board = previous_board; score = previous_score; selected_board.assign(); redraw = true; disp.set_key(); - } - if (disp.is_keyQ()) { gameover = true; disp.set_key(); } - if (disp.is_keyESC()) disp.close(); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.toggle_fullscreen().display(img); - - // Handle ball selection and removal - const int x = disp.mouse_x()*board.width()/disp.width(), y = disp.mouse_y()*board.height()/disp.height(); - if (disp.button()&1 && x>=0 && y>=0) { - if (title) { title = false; redraw = true; } else { - if (!board(x,y)) { selected_board.assign(); redraw = true; } - else { - if (!selected_board || selected_board(x,y)!=6) { - (selected_board=board).draw_fill(x,y,0,&six,1,shape); - if ((shape_score=(unsigned int)shape.sum())<2) selected_board.assign(); - else { shape_score-=1; shape_score*=shape_score; opac = 1.0f; redraw = true; } - } else { - selected_board.assign(); - previous_board = board; - previous_score = score; - score += shape_score; - board&=--shape; - redraw = true; - - // Handle board modification due to ball removal - for (int pmax = board.width(), p = 0; p=0; --q) { - while (qs>=0 && !board(p,qs)) --qs; - board(p,q) = (qs>=0?board(p,qs--):0); - } - if (!board(p,board.height()-1)) { - board.draw_image(p,board.get_crop(p,0,board.width()-1,board.height()-1).shift(-1)); - if (p text1, text2, text3, text4, text5, text6; - text1.draw_text(0,0,"Game Over !",white,0,1,48).resize(-100,-100,1,3); - const unsigned int remaining_balls = (unsigned int)board.get_cut(0,1).sum(); - if (remaining_balls<8) { - const unsigned int bonus = (22-2*remaining_balls)*10; - score += bonus; - text2.draw_text(0,0,"Jawbreaker Bonus : +%u",white,0,1,24,bonus); - } - score_history.insert(CImg::vector(score)); - text3.draw_text(0,0,"Final score : %u",yellow,0,1,24,score).resize(-100,-100,1,3); - text4.draw_text(0,0,score>best_score?"** New record ! **":"Best score : %u", - orange,0,1,24,score>best_score?score:best_score).resize(-100,-100,1,3); - text5.draw_text(0,0,"Average score : %u",red,0,1,24, - score_history?(unsigned int)(score_history>'x').mean():0U).resize(-100,-100,1,3); - text6.draw_text(0,0,"Games played : %u",red,0,1,24,score_history.size()).resize(-100,-100,1,3); - if (score>best_score) best_score = score; - - unsigned int yt = (Hi-text1.height())/2-20; - (img/=2).draw_image((Wi-text1.width())/2,yt,text1,text1.get_dilate(7),1,255); yt+=80; - if (text2) { img.draw_image((Wi-text2.width())/2,yt,text2,text2.get_dilate(5),1,255); yt+=25; } - img.draw_image((Wi-text3.width())/2,yt,text3,text3.get_dilate(5),1,255). - draw_image((Wi-text4.width())/2,yt+25,text4,text4.get_dilate(5),1,255). - draw_image((Wi-text5.width())/2,yt+50,text5,text5.get_dilate(5),1,255). - draw_image((Wi-text6.width())/2,yt+75,text6,text6.get_dilate(5),1,255).display(disp); - for (disp.flush(); !disp.is_closed() && !disp.key() && !disp.button(); disp.wait()) - if (disp.is_resized()) disp.resize(disp); - disp.flush(); - board.assign(); - for (float i = 10; i>0 && !disp.is_keyESC(); i-=0.25) - disp.display(img.get_crop((int)(Wi*(0.5f-i*i*i*i/20000.0f)),(int)(Hi*(0.5f-i*i/200.0f)), - (int)(Wi*(0.5f+i*i*i*i/20000.0f)),(int)(Hi*(0.5f+i*i/200.0f)))).wait(20); - } - } - - // Save score history if possible, and exit. - if (score_history) { - file = std::fopen(filename_history,"w"); - if (file) { std::fclose(file); (score_history>'y').save_dlm(filename_history); } - } - - return 0; -} diff --git a/deps/CImg/examples/mcf_levelsets2d b/deps/CImg/examples/mcf_levelsets2d deleted file mode 100755 index bcdc251..0000000 Binary files a/deps/CImg/examples/mcf_levelsets2d and /dev/null differ diff --git a/deps/CImg/examples/mcf_levelsets2d.cpp b/deps/CImg/examples/mcf_levelsets2d.cpp deleted file mode 100644 index 58c541e..0000000 --- a/deps/CImg/examples/mcf_levelsets2d.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - # - # File : mcf_levelsets2d.cpp - # ( C++ source file ) - # - # Description : Implementation of the Mean Curvature Flow on a 2D curve, - # using the framework of Level Sets. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Retrieve the curve corresponding to the zero level set of the distance function. -template -CImg get_level0(const CImg& img) { - CImg dest(img); - CImg_2x2(I,T); Inn = 0; - cimg_for2x2(img,x,y,0,0,I,T) if (Icc*Inc<0 || Icc*Icn<0) dest(x,y) = 255; else dest(x,y) = Icc<0?100:0; - return dest; -} - -/*-------------------- - - Main procedure - -----------------------*/ -int main(int argc,char **argv) { - cimg_usage("Perform a Mean Curvature Flow on closed curves, using Level Sets"); - const float dt = cimg_option("-dt",0.8f,"PDE time step"); - const unsigned int nb_iterations = cimg_option("-iter",10000,"Number of iterations"); - - // Create a user-defined closed curve. - CImg curve(256,256,1,2,0); - unsigned char col1[] = {0,255}, col2[] = {200,255}, col3[] = {255,255}; - curve.draw_grid(20,20,0,0,false,false,col1,0.4f,0xCCCCCCCC,0xCCCCCCCC). - draw_text(5,5,"Please draw your curve\nin this window\n(Use your mouse)",col1); - CImgDisplay disp(curve,"Mean curvature flow",0); - int xo = -1, yo = -1, x0 = -1, y0 = -1, x1 = -1, y1 = -1; - while (!disp.is_closed() && (x0<0 || disp.button())) { - if (disp.button() && disp.mouse_x()>=0 && disp.mouse_y()>=0) { - if (x0<0) { xo = x0 = disp.mouse_x(); yo = y0 = disp.mouse_y(); } else { - x1 = disp.mouse_x(); y1 = disp.mouse_y(); - curve.draw_line(x0,y0,x1,y1,col2).display(disp); - x0 = x1; y0 = y1; - } - } - disp.wait(); - if (disp.is_resized()) disp.resize(disp); - } - curve.draw_line(x1,y1,xo,yo,col2).channel(0).draw_fill(0,0,col3); - CImg<> img = CImg<>(curve.get_shared_channel(0)).normalize(-1,1); - - // Perform the "Mean Curvature Flow". - img.distance_eikonal(10); - CImg_3x3(I,float); - for (unsigned int iteration = 0; iteration velocity(img.width(),img.height(),img.depth(),img.spectrum()); - float *ptrd = velocity.data(), veloc_max = 0; - cimg_for3x3(img,x,y,0,0,I,float) { - const float - ix = (Inc - Ipc)/2, - iy = (Icn - Icp)/2, - ixx = Inc + Ipc - 2*Icc, - iyy = Icn + Icp - 2*Icc, - ixy = (Ipp + Inn - Inp - Ipn)/4, - ngrad = ix*ix + iy*iy, - iee = (ngrad>1e-5)?((iy*iy*ixx - 2*ix*iy*ixy + ix*ix*iyy)/ngrad):0; - *(ptrd++) = iee; - if (iee>veloc_max) veloc_max = iee; else if (-iee>veloc_max) veloc_max = -iee; - } - if (veloc_max>0) img+=(velocity*=dt/veloc_max); - if (!(iteration%10)) { - get_level0(img).resize(disp.width(),disp.height()).draw_grid(20,20,0,0,false,false,col3,0.4f,0xCCCCCCCC,0xCCCCCCCC). - draw_text(5,5,"Iteration %d",col3,0,1,13,iteration).display(disp); - } - if (!(iteration%60)) img.distance_eikonal(1,3); - if (disp.is_resized()) disp.resize(); - } - - return 0; -} diff --git a/deps/CImg/examples/mcf_levelsets3d b/deps/CImg/examples/mcf_levelsets3d deleted file mode 100755 index 055ad98..0000000 Binary files a/deps/CImg/examples/mcf_levelsets3d and /dev/null differ diff --git a/deps/CImg/examples/mcf_levelsets3d.cpp b/deps/CImg/examples/mcf_levelsets3d.cpp deleted file mode 100644 index 1a7b43f..0000000 --- a/deps/CImg/examples/mcf_levelsets3d.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* - # - # File : mcf_levelsets3d.cpp - # ( C++ source file ) - # - # Description : Implementation of the Mean Curvature Flow on Surfaces - # using the framework of Level Sets 3D. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#undef min -#undef max - -// Apply the Mean curvature flow PDE -//----------------------------------- -template CImg& mcf_PDE(CImg& img, const unsigned int nb_iterations, - const float dt=0.25f, const float narrow=4.0f) { - CImg velocity(img.width(),img.height(),img.depth(),img.spectrum()); - CImg_3x3x3(I,float); - for (unsigned int iteration = 0; iterationveloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; - } else *(ptrd++) = 0; - if (veloc_max>0) img+=(velocity*=dt/veloc_max); - } - return img; -} - -/*---------------------- - - Main procedure - - --------------------*/ -int main(int argc,char **argv) { - cimg_usage("Mean curvature flow of a surface, using 3D level sets"); - const char *file_i = cimg_option("-i",(char*)0,"Input image"); - const float dt = cimg_option("-dt",0.05f,"PDE Time step"); - const float narrow = cimg_option("-band",5.0f,"Size of the narrow band"); - const bool both = cimg_option("-both",false,"Show both evolving and initial surface"); - - // Define the signed distance map of the initial surface. - CImg<> img; - if (file_i) { - const float sigma = cimg_option("-sigma",1.2f,"Segmentation regularity"); - const float alpha = cimg_option("-alpha",5.0f,"Region growing tolerance"); - img.load(file_i).channel(0); - CImg s; - CImgDisplay disp(img,"Please select a starting point"); - while (!s || s[0]<0) s = img.get_select(0,disp); - CImg<> region; - float tmp[] = { 0 }; - img.draw_fill(s[0],s[1],s[2],tmp,1,region,alpha); - ((img = region.normalize(-1,1))*=-1).blur(sigma); - } - else { // Create synthetic implicit function. - img.assign(60,60,60); - const float exte[] = { 1 }, inte[] = { -1 }; - img.fill(*exte).draw_rectangle(15,15,15,45,45,45,inte).draw_rectangle(25,25,0,35,35,img.depth()-1,exte). - draw_rectangle(0,25,25,img.width()-1,35,35,exte).draw_rectangle(25,0,25,35,img.height()-1,35,exte).noise(0.7); - } - img.distance_eikonal(10,0,0.1f); - - // Compute corresponding surface triangularization by the marching cube algorithm (isovalue 0). - CImg<> points0; - CImgList faces0; - if (both) points0 = img.get_isosurface3d(faces0,0); - const CImgList colors0(faces0.size(),CImg::vector(100,200,255)); - const CImgList<> opacities0(faces0.size(),1,1,1,1,0.2f); - - // Perform MCF evolution. - CImgDisplay disp(256,256,0,1), disp3d(512,512,0,0); - float alpha = 0, beta = 0; - for (unsigned int iteration = 0; !disp.is_closed() && !disp3d.is_closed() && - !disp.is_keyESC() && !disp3d.is_keyESC() && !disp.is_keyQ() && !disp3d.is_keyQ(); ++iteration) { - disp.set_title("3D implicit Function (iter. %u)",iteration); - disp3d.set_title("Mean curvature flow 3D - Isosurface (iter. %u)",iteration); - - // Apply PDE on the distance function. - mcf_PDE(img,1,dt,narrow); // Do one iteration of mean curvature flow. - if (!(iteration%10)) img.distance_eikonal(1,narrow,0.5f); // Every 10 steps, do one iteration of distance function re-initialization. - - // Compute surface triangularization by the marching cube algorithm (isovalue 0) - CImgList faces; - CImg<> points = img.get_isosurface3d(faces,0); - CImgList colors(faces.size(),CImg::vector(200,128,100)); - CImgList<> opacities(faces.size(),CImg<>::vector(1.0f)); - const float fact = 3*cimg::max(disp3d.width(),disp3d.height())/(4.0f*cimg::max(img.width(),img.height())); - - // Append initial object if necessary. - if (both) { - points.append_object3d(faces,points0,faces0); - colors.insert(colors0); - opacities.insert(opacities0); - } - - // Center and rescale the objects - cimg_forX(points,l) { - points(l,0)=(points(l,0)-img.width()/2)*fact; - points(l,1)=(points(l,1)-img.height()/2)*fact; - points(l,2)=(points(l,2)-img.depth()/2)*fact; - } - - // Display 3D object on the display window. - CImg visu(disp3d.width(),disp3d.height(),1,3,0); - const CImg<> rot = CImg<>::rotation_matrix(1,0,0,(beta+=0.01f))*CImg<>::rotation_matrix(0,1,1,(alpha+=0.05f)); - if (points.size()) { - visu.draw_object3d(visu.width()/2.0f,visu.height()/2.0f,0.0f, - rot*points,faces,colors,opacities,3, - false,500.0,0.0f,0.0f,-8000.0f).display(disp3d); - } else visu.fill(0).display(disp3d); - img.display(disp.wait(20)); - - if ((disp3d.button() || disp3d.key()) && points.size() && !disp3d.is_keyESC() && !disp3d.is_keyQ()) { - const unsigned char white[3] = { 255, 255, 255 }; - visu.fill(0).draw_text(10,10,"Time stopped, press any key to start again",white). - display_object3d(disp3d,points,faces,colors,opacities,true,4,3,false,500,0,0,-5000,0.4f,0.3f); - disp3d.set_key(); - } - if (disp.is_resized()) disp.resize(false); - if (disp3d.is_resized()) disp3d.resize(false); - disp.wait(50); - } - - return 0; -} diff --git a/deps/CImg/examples/odykill b/deps/CImg/examples/odykill deleted file mode 100755 index 5ecd280..0000000 Binary files a/deps/CImg/examples/odykill and /dev/null differ diff --git a/deps/CImg/examples/odykill.cpp b/deps/CImg/examples/odykill.cpp deleted file mode 100644 index 6d8c804..0000000 --- a/deps/CImg/examples/odykill.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* - # - # File : odykill.cpp - # ( C++ source file ) - # - # Description : Simple shoot-em-up game featuring the Robotvis/Odyssee Team ! - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "img/odykill.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Create game graphics - CImg graphics[21] = { - CImg(data_tomato,100,100,1,3,false), - CImg(data_heart,100,100,1,3,false), - CImg(data_dynamite,100,100,1,3,false), - CImg(data_brain,100,100,1,3,false), - CImg(data_cdrom,100,100,1,3,false), - CImg(data_enemy,113,150,1,3,false), - CImg(data_enemy2,116,155,1,3,false), - CImg(data_enemy3,104,134,1,3,false), - CImg(data_enemy4,141,151,1,3,false), - CImg(data_enemy5,140,152,1,3,false), - CImg(data_enemy6,131,156,1,3,false), - CImg(data_enemy7,114,125,1,3,false), - CImg(data_enemy8,97,125,1,3,false), - CImg(data_enemy9,143,134,1,3,false), - CImg(data_enemy10,158,214,1,3,false), - CImg(data_enemy11,131,168,1,3,false), - CImg(data_enemy12,114,138,1,3,false), - CImg(data_enemy13,144,144,1,3,false), - CImg(data_enemy14,132,153,1,3,false), - CImg(data_enemy15,152,151,1,3,false), - CImg(data_enemy16,139,185,1,3,false), - }; - CImg<> masks[21]; - const unsigned char black[] = { 0,0,0 }, white[] = { 255,255,255 }; - - // Display weapon selection menu - CImg back0(640,480,1,3), title(data_title,294,94,1,3,true), choose(data_choose,524,49,1,3,true); - back0.fill(0).draw_image(back0.width()/2-title.width()/2,30,title).draw_image(back0.width()/2-choose.width()/2,150,choose); - CImgDisplay disp(back0,"OdyKill"); - int weapon=-1; - - while (!disp.is_closed() && !disp.button()) { - weapon = -1; - for (int k=0; k<5; k++) { - const int mx = disp.mouse_x(), my = disp.mouse_y(); - if (!((mx-40)/110==k && my>250 && my<350)) back0.draw_image(40+k*110,250,graphics[k]/2.0); - else back0.draw_image(40+k*110,250,graphics[weapon=k]); - } - CImg tmp = CImg().draw_text(0,0, - weapon==0?" Tomato ": - weapon==1?" Heart ": - weapon==2?" Dynamite ": - weapon==3?" Brain ": - weapon==4?" CD-Rom ": - " ",white,black,1,32).resize(-100,-100,1,1), - tmp2 = tmp.get_blur(6).normalize(0,255).draw_image(tmp,0.5f); - cimg_forC(back0,k) back0.draw_image(250,390,0,k,tmp2); - - disp.resize(disp).display(back0).wait(); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.toggle_fullscreen(); - if (disp.is_closed() || disp.is_keyQ() || disp.is_keyESC()) std::exit(0); - } - disp.hide_mouse(); - - /*--------------------------------- - - Go ! - - --------------------------------*/ - - const CImg - background = CImg(100,100,1,3,0).noise(100,2).draw_plasma(). - resize(back0.width(),back0.height(),1,3,5)/2.5; - { for (unsigned int k=0; k<21; k++) { - CImg<> tmp = graphics[k].resize(k<5?32:164,k<5?32:164,1,3); - cimg_forXY(tmp,x,y) tmp(x,y) = (tmp(x,y,0)==255 && tmp(x,y,1)==255 && tmp(x,y,2)==255)?0.0f:1.0f; - masks[k]=tmp.get_shared_channel(0); - graphics[k].resize(k<5?32:164,k<5?32:164,1,3,5); - }} - - CImg canvas(background); - int n = 5+((int)(200*cimg::rand())%16); - CImg tomato = graphics[weapon], enemy = graphics[n]; - CImg<> m_tomato = masks[weapon], m_enemy = masks[n]; - - double angle=0; - int tomato_x=0,tomato_y=0,shooted=0; - double enemy_x=-1000, enemy_y=-1000, enemy_z=-1000, tomato_z = 0, vx = 0, vy = 0, vz = 0, va = 0; - double speed = cimg_option("-speed",5.0,"Speed"); - int timeleft = 2000, score = 0; - CImg r_enemy; - - // Main loop - while (timeleft && !disp.is_closed() && !disp.is_keyESC() && !disp.is_keyQ()) { - --timeleft; - const int mx = disp.mouse_x()*back0.width()/disp.width(), my = disp.mouse_y()*back0.height()/disp.height(); - - // Handle object motion - if (tomato_z>0) { - tomato_z+=0.07; tomato_y -= (int)(20*std::cos(cimg::PI/7 + tomato_z*cimg::PI)); - if (tomato_z>=1) { tomato_z=0; tomato_x = mx; tomato_y = my; } - } - if (!shooted) { enemy_x +=vx; enemy_y +=vy; enemy_z +=vz; } - else { - va = 10; - enemy_y += vy; - vy += 2; - tomato_z = 0; - if (enemy_y>5*canvas.height()/4) { - shooted = 0; - int n = 5 + ((int)(200*cimg::rand())%16); - enemy = graphics[n]; - m_enemy = masks[n]; - enemy_x=cimg::crand()*1e8; enemy_y=cimg::crand()*1e8; enemy_z=cimg::crand()*1e8; - va = angle = 0; - } - } - - if (enemy_x<0) { enemy_x=0; vx = speed*cimg::crand(); } - if (enemy_x>canvas.width()) { enemy_x=canvas.width(); vx = speed*cimg::crand(); } - if (enemy_y<0) { enemy_y=0; vy = speed*cimg::crand(); } - if (!shooted && enemy_y>canvas.height()) { enemy_y=canvas.height(); vy = speed*cimg::crand(); } - if (enemy_z<0.1) { enemy_z = 0.1; vz = speed*0.01*cimg::crand(); } - if (enemy_z>0.7) { enemy_z = 0.7; vz = speed*0.01*cimg::crand(); } - angle+=va; - - // Handle mouse interaction - if (!disp.button()) { - if (tomato_z==0) { - tomato_x = mx; tomato_y = my; - } - } else tomato_z +=0.0001; - - // Detect shooting - if (cimg::abs(tomato_z-enemy_z)<0.1) { - if (tomato_x>enemy_x-r_enemy.width()/2 && tomato_xenemy_y-r_enemy.height()/2 && tomato_y rm_enemy = m_enemy.get_resize(r_enemy.width(),r_enemy.height()); - CImg r_tomato = tomato.get_resize((int)(8+tomato.width()*(1-tomato_z)),(int)(8+tomato.height()*(1-tomato_z)),-100,-100); - CImg<> rm_tomato = m_tomato.get_resize(r_tomato.width(),r_tomato.height()); - - if (angle!=0) { r_enemy.rotate((float)angle,0,0); rm_enemy.rotate((float)angle,0,0); cimg_forXY(r_enemy,x,y) r_enemy(x,y,0) = (r_enemy(x,y,0)+255)/2; } - r_enemy*=(1-(enemy_z-0.1)/1.6); - r_tomato*=(1-tomato_z/1.6); - rm_enemy*=(1-(enemy_z-0.1)/1.6); - - if (enemy_z>tomato_z) { - canvas.draw_image((int)(enemy_x - r_enemy.width()/2), - (int)(enemy_y - r_enemy.height()/2), - r_enemy,rm_enemy); - if (tomato_x>=0) canvas.draw_image(tomato_x - r_tomato.width()/2, - tomato_y - r_tomato.height()/2, - r_tomato,rm_tomato); - } - else { - if (tomato_x>=0) canvas.draw_image(tomato_x - r_tomato.width()/2, - tomato_y - r_tomato.height()/2, - r_tomato,rm_tomato); - canvas.draw_image((int)(enemy_x - r_enemy.width()/2), - (int)(enemy_y - r_enemy.height()/2), - r_enemy,rm_enemy); - } - canvas.draw_text(1,1," Time left %d, Score = %d",white,0,0.5f,24,timeleft,score); - disp.resize(disp).display(canvas).wait(25); - if (disp.is_keyCTRLLEFT() && disp.is_keyF()) disp.toggle_fullscreen(); - } - - std::fprintf(stderr,"\n\n YOUR SCORE : %d\n\n\n",score); - - return 0; -} diff --git a/deps/CImg/examples/pde_TschumperleDeriche2d b/deps/CImg/examples/pde_TschumperleDeriche2d deleted file mode 100755 index 84a1af5..0000000 Binary files a/deps/CImg/examples/pde_TschumperleDeriche2d and /dev/null differ diff --git a/deps/CImg/examples/pde_TschumperleDeriche2d.cpp b/deps/CImg/examples/pde_TschumperleDeriche2d.cpp deleted file mode 100644 index 65c4708..0000000 --- a/deps/CImg/examples/pde_TschumperleDeriche2d.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/* - # - # File : pde_TschumperleDeriche2d.cpp - # ( C++ source file ) - # - # Description : Implementation of the Tschumperle-Deriche's Regularization - # PDE, for 2D multivalued images, as described in the articles below. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # (1) PDE-Based Regularization of Multivalued Images and Applications. - # (D. Tschumperle). PhD Thesis. University of Nice-Sophia Antipolis, December 2002. - # (2) Diffusion PDE's on Vector-valued Images : Local Approach and Geometric Viewpoint. - # (D. Tschumperle and R. Deriche). IEEE Signal Processing Magazine, October 2002. - # (3) Vector-Valued Image Regularization with PDE's : A Common Framework for Different Applications. - # (D. Tschumperle and R. Deriche). CVPR'2003, Computer Vision and Pattern Recognition, Madison, United States, June 2003. - # - # This code can be used to perform image restoration, inpainting, magnification or flow visualization. - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif -#undef min -#undef max - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line arguments - //----------------------------- - cimg_usage("Tschumperle-Deriche's flow for 2D Image Restoration, Inpainting, Magnification or Flow visualization"); - const char *file_i = cimg_option("-i",cimg_imagepath "milla.bmp","Input image"); - const char *file_m = cimg_option("-m",(char*)NULL,"Mask image (if Inpainting)"); - const char *file_f = cimg_option("-f",(char*)NULL,"Flow image (if Flow visualization)"); - const char *file_o = cimg_option("-o",(char*)NULL,"Output file"); - const double zoom = cimg_option("-zoom",1.0,"Image magnification"); - - const unsigned int nb_iter = cimg_option("-iter",100000,"Number of iterations"); - const double dt = cimg_option("-dt",20.0,"Adapting time step"); - const double alpha = cimg_option("-alpha",0.0,"Gradient smoothing"); - const double sigma = cimg_option("-sigma",0.5,"Structure tensor smoothing"); - const float a1 = cimg_option("-a1",0.5f,"Diffusion limiter along minimal variations"); - const float a2 = cimg_option("-a2",0.9f,"Diffusion limiter along maximal variations"); - const double noiseg = cimg_option("-ng",0.0,"Add gauss noise before aplying the algorithm"); - const double noiseu = cimg_option("-nu",0.0,"Add uniform noise before applying the algorithm"); - const double noises = cimg_option("-ns",0.0,"Add salt&pepper noise before applying the algorithm"); - const bool stflag = cimg_option("-stats",false,"Display image statistics at each iteration"); - const unsigned int save = cimg_option("-save",0,"Iteration saving step"); - const unsigned int visu = cimg_option("-visu",10,"Visualization step (0=no visualization)"); - const unsigned int init = cimg_option("-init",3,"Inpainting initialization (0=black, 1=white, 2=noise, 3=unchanged)"); - const unsigned int skip = cimg_option("-skip",1,"Step of image geometry computation"); - bool view_t = cimg_option("-d",false,"View tensor directions (useful for debug)"); - double xdt = 0; - - // Variable initialization - //------------------------- - CImg<> img, flow; - CImg mask; - - if (file_i) { - img = CImg<>(file_i).resize(-100,-100,1,-100); - if (file_m) mask = CImg(file_m).resize(img.width(),img.height(),1,1); - else if (zoom>1) { - mask = CImg(img.width(),img.height(),1,1,-1).resize((int)(img.width()*zoom),(int)(img.height()*zoom),1,1,4)+1; - img.resize((int)(img.width()*zoom),(int)(img.height()*zoom),1,-100,3); - } - } else { - if (file_f) { - flow = CImg<>(file_f); - img = CImg<>((int)(flow.width()*zoom),(int)(flow.height()*zoom),1,1,0).noise(100,2); - flow.resize(img.width(),img.height(),1,2,3); - } else throw CImgException("You need to specify at least one input image (option -i), or one flow image (option -f)"); - } - img.noise(noiseg,0).noise(noiseu,1).noise(noises,2); - float initial_min, initial_max = img.max_min(initial_min); - if (mask && init!=3) - cimg_forXYC(img,x,y,k) if (mask(x,y)) - img(x,y,k) = (float)((init? - (init==1?initial_max:((initial_max-initial_min)*cimg::rand())): - initial_min)); - - CImgDisplay disp; - if (visu) disp.assign(img,"Iterated Image"); - CImg<> G(img.width(),img.height(),1,3,0), T(G), veloc(img), val(2), vec(2,2); - - // PDE main iteration loop - //------------------------- - for (unsigned int iter = 0; iter grad = img.get_gradient(); - if (alpha!=0) cimglist_for(grad,l) grad[l].blur((float)alpha); - G.fill(0); - cimg_forXYC(img,x,y,k) { - const float ix = grad[0](x,y,k), iy = grad[1](x,y,k); - G(x,y,0) += ix*ix; - G(x,y,1) += ix*iy; - G(x,y,2) += iy*iy; - } - if (sigma!=0) G.blur((float)sigma); - - // When using PDE for image restoration, inpainting or zooming - T.fill(0); - if (!mask) cimg_forXY(G,x,y) { - G.get_tensor_at(x,y).symmetric_eigen(val,vec); - const float - l1 = (float)std::pow(1.0f + val[0] + val[1],-a1), - l2 = (float)std::pow(1.0f + val[0] + val[1],-a2), - ux = vec(1,0), - uy = vec(1,1); - T(x,y,0) = l1*ux*ux + l2*uy*uy; - T(x,y,1) = l1*ux*uy - l2*ux*uy; - T(x,y,2) = l1*uy*uy + l2*ux*ux; - } - else cimg_forXY(G,x,y) if (mask(x,y)) { - G.get_tensor_at(x,y).symmetric_eigen(val,vec); - const float - ux = vec(1,0), - uy = vec(1,1); - T(x,y,0) = ux*ux; - T(x,y,1) = ux*uy; - T(x,y,2) = uy*uy; - } - } - } - - // Compute the PDE velocity and update the iterated image - //-------------------------------------------------------- - CImg_3x3(I,float); - veloc.fill(0); - cimg_forC(img,k) cimg_for3x3(img,x,y,0,k,I,float) { - const float - a = T(x,y,0), - b = T(x,y,1), - c = T(x,y,2), - ixx = Inc+Ipc-2*Icc, - iyy = Icn+Icp-2*Icc, - ixy = 0.25f*(Ipp+Inn-Ipn-Inp); - veloc(x,y,k) = a*ixx + 2*b*ixy + c*iyy; - } - if (dt>0) { - float m, M = veloc.max_min(m); - xdt = dt/cimg::max(cimg::abs(m),cimg::abs(M)); - } else xdt=-dt; - img+=veloc*xdt; - img.cut((float)initial_min,(float)initial_max); - - // Display and save iterations - if (disp && !(iter%visu)) { - if (!view_t) img.display(disp); - else { - const unsigned char white[3] = {255,255,255}; - CImg visu = img.get_resize(disp.width(),disp.height()).normalize(0,255); - CImg<> isophotes(img.width(),img.height(),1,2,0); - cimg_forXY(img,x,y) if (!mask || mask(x,y)) { - T.get_tensor_at(x,y).symmetric_eigen(val,vec); - isophotes(x,y,0) = vec(0,0); - isophotes(x,y,1) = vec(0,1); - } - visu.draw_quiver(isophotes,white,0.5f,10,9,0).display(disp); - } - } - if (save && file_o && !(iter%save)) img.save(file_o,iter); - if (disp) disp.resize().display(img); - } - - // Save result and exit. - if (file_o) img.save(file_o); - return 0; -} diff --git a/deps/CImg/examples/pde_heatflow2d b/deps/CImg/examples/pde_heatflow2d deleted file mode 100755 index 908b1b1..0000000 Binary files a/deps/CImg/examples/pde_heatflow2d and /dev/null differ diff --git a/deps/CImg/examples/pde_heatflow2d.cpp b/deps/CImg/examples/pde_heatflow2d.cpp deleted file mode 100644 index 56a1008..0000000 --- a/deps/CImg/examples/pde_heatflow2d.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - # - # File : pde_heatflow2D.cpp - # ( C++ source file ) - # - # Description : A simple Heat flow on 2D images. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Include library header file -#include "CImg.h" -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif -#undef min -#undef max - -// Make a simpler namespace alias if one wants to avoid 'using namespace cimg_library' -namespace cil = cimg_library; - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line arguments, and init images and displays - //----------------------------------------------------------- - cimg_usage("Perform a simple Heat Flow on 2D images"); - cil::CImg<> img(cimg_option("-i",cimg_imagepath "milla.bmp","Input image")), veloc(img); - const double dt = cimg_option("-dt",3.0,"Adapting time step"); - img. - noise(cimg_option("-ng",0.0,"Add gaussian noise"),0). - noise(cimg_option("-nu",0.0,"Add uniform noise"),1). - noise(cimg_option("-ns",0.0,"Add Salt&Pepper noise"),2); - cil::CImgDisplay profile(400,300,"Intensity Profile",0,false,true), disp(img,"Heat flow 2D",0,false,true); - disp.move((cil::CImgDisplay::screen_width() - disp.width() - profile.width())/2, - (cil::CImgDisplay::screen_height() - disp.height())/2); - - profile.move(disp.window_x() + 8 + disp.window_width(), disp.window_y()); - const float white[] = { 255,255,255 }; - bool run_PDE = true; - - // Begin PDE iteration loop - //------------------------- - for (int iter = 0; !disp.is_closed() && !profile.is_closed() && - !disp.is_keyQ() && !disp.is_keyESC() && !profile.is_keyQ() && !profile.is_keyESC();) { - - // Compute one iteration of PDE explicit scheme - if (run_PDE) { - CImg_3x3(I,float); - cimg_forC(img,k) cimg_for3x3(img,x,y,0,k,I,float) veloc(x,y,k) = Inc + Ipc + Icn + Icp - 4*Icc; - float m, M = veloc.max_min(m); - const double xdt = dt/(M - m); - img += veloc*xdt; - cil::CImg<>(img).draw_text(2,2,"iter = %d",white,0,1,13,iter).display(disp.wait(25)); - } - - // Plot (R,G,B) intensity profiles and display it - if (disp.mouse_x()>=0) { - const int - mx = disp.mouse_x(), my = disp.mouse_y(), - mnx = mx*profile.width()/disp.width(); - const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 }, white[] = { 255,255,255 }; - cil::CImg(profile.width(),profile.height(),1,3,0). - draw_graph(img.get_shared_row(my,0,0),red,1,1,0,255,0). - draw_graph(img.get_shared_row(my,0,1),green,1,1,0,255,0). - draw_graph(img.get_shared_row(my,0,2),blue,1,1,0,255,0). - draw_line(mnx,0,mnx,profile.height()-1,white,0.5f,cil::cimg::rol(0xFF00FF00,iter%32)). - draw_text(2,2,"(x,y)=(%d,%d)",white,0,1,13,mx,my). - display(profile); - } - - // Mouse button stops/starts PDE evolution. - if (disp.button() || profile.button()) { disp.set_button(); profile.set_button(); run_PDE = !run_PDE; } - profile.resize(); - disp.resize(disp); - if (run_PDE) ++iter; - } - - return 0; -} diff --git a/deps/CImg/examples/plotter1d b/deps/CImg/examples/plotter1d deleted file mode 100755 index 499033e..0000000 Binary files a/deps/CImg/examples/plotter1d and /dev/null differ diff --git a/deps/CImg/examples/plotter1d.cpp b/deps/CImg/examples/plotter1d.cpp deleted file mode 100644 index 3cb780b..0000000 --- a/deps/CImg/examples/plotter1d.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - # - # File : plotter1d.cpp - # ( C++ source file ) - # - # Description : A simple math formula plotter. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Include CImg library file and use its main namespace -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line argument. - cimg_usage("Simple plotter of mathematical formulas"); - const char *const formula = cimg_option("-f","sin(x/8) % cos(2*x)","Formula to plot"); - const float x0 = cimg_option("-x0",-5.0f,"Minimal X-value"); - const float x1 = cimg_option("-x1",5.0f,"Maximal X-value"); - const int resolution = cimg_option("-r",1024,"Plot resolution"); - const unsigned int nresolution = resolution>1?resolution:1024; - const unsigned int plot_type = cimg_option("-p",1,"Plot type"); - const unsigned int vertex_type = cimg_option("-v",1,"Vertex type"); - - // Create plot data. - CImg values(4,nresolution,1,1,0); - const unsigned int r = nresolution - 1; - cimg_forY(values,X) values(0,X) = x0 + X*(x1-x0)/r; - cimg::eval(formula,values).move_to(values); - - // Display interactive plot window. - values.display_graph(formula,plot_type,vertex_type,"X-axis",x0,x1,"Y-axis"); - - // Quit. - return 0; -} diff --git a/deps/CImg/examples/radon_transform2d b/deps/CImg/examples/radon_transform2d deleted file mode 100755 index 6d3b39d..0000000 Binary files a/deps/CImg/examples/radon_transform2d and /dev/null differ diff --git a/deps/CImg/examples/radon_transform2d.cpp b/deps/CImg/examples/radon_transform2d.cpp deleted file mode 100644 index 964a2e5..0000000 --- a/deps/CImg/examples/radon_transform2d.cpp +++ /dev/null @@ -1,378 +0,0 @@ -/* - # - # File : radon_transform2d.cpp - # ( C++ source file ) - # - # Description : An implementation of the Radon Transform. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David G. Starkweather - # ( starkdg@sourceforge.net - starkweatherd@cox.net ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -#define ROUNDING_FACTOR(x) (((x) >= 0) ? 0.5 : -0.5) - -CImg GaussianKernel(double rho); -CImg ApplyGaussian(CImg im,double rho); -CImg RGBtoGrayScale(CImg &im); -int GetAngle(int dy,int dx); -CImg CannyEdges(CImg im, double T1, double T2,bool doHysteresis); -CImg<> RadonTransform(CImg im,int N); - -// Main procedure -//---------------- -int main(int argc,char **argv) { - cimg_usage("Illustration of the Radon Transform"); - - const char *file = cimg_option("-f",cimg_imagepath "parrot_original.ppm","path and file name"); - const double sigma = cimg_option("-r",1.0,"blur coefficient for gaussian low pass filter (lpf)"), - thresh1 = cimg_option("-t1",0.50,"lower threshold for canny edge detector"), - thresh2 = cimg_option("-t2",1.25,"upper threshold for canny edge detector");; - const int N = cimg_option("-n",64,"number of angles to consider in the Radon transform - should be a power of 2"); - - //color to draw lines - const unsigned char green[] = {0,255,0}; - CImg src(file); - - int rhomax = (int)std::sqrt((double)(src.width()*src.width() + src.height()*src.height()))/2; - - if (cimg::dialog(cimg::basename(argv[0]), - "Instructions:\n" - "Click on space bar or Enter key to display Radon transform of given image\n" - "Click on anywhere in the transform window to display a \n" - "corresponding green line in the original image\n", - "Start", "Quit",0,0,0,0, - src.get_resize(100,100,1,3),true)) std::exit(0); - - //retrieve a grayscale from the image - CImg grayScaleIm; - if ((src.spectrum() == 3) && (src.width() > 0) && (src.height() > 0) && (src.depth() == 1)) - grayScaleIm = (CImg)src.get_norm(0).quantize(255,false); - else if ((src.spectrum() == 1)&&(src.width() > 0) && (src.height() > 0) && (src.depth() == 1)) - grayScaleIm = src; - else { // image in wrong format - if (cimg::dialog(cimg::basename("wrong file format"), - "Incorrect file format\n","OK",0,0,0,0,0, - src.get_resize(100,100,1,3),true)) std::exit(0); - } - - //blur the image with a Gaussian lpf to remove spurious edges (e.g. noise) - CImg blurredIm = ApplyGaussian(grayScaleIm,sigma); - - //use canny edge detection algorithm to get edge map of the image - //- the threshold values are used to perform hysteresis in the edge detection process - CImg cannyEdgeMap = CannyEdges(blurredIm,thresh1,thresh2,false); - CImg radonImage = *(new CImg(500,400,1,1,0)); - - //display the two windows - CImgDisplay dispImage(src,"original image"); - dispImage.move(CImgDisplay::screen_width()/8,CImgDisplay::screen_height()/8); - CImgDisplay dispRadon(radonImage,"Radon Transform"); - dispRadon.move(CImgDisplay::screen_width()/4,CImgDisplay::screen_height()/4); - CImgDisplay dispCanny(cannyEdgeMap,"canny edges"); - //start main display loop - while (!dispImage.is_closed() && !dispRadon.is_closed() && - !dispImage.is_keyQ() && !dispRadon.is_keyQ() && - !dispImage.is_keyESC() && !dispRadon.is_keyESC()) { - - CImgDisplay::wait(dispImage,dispRadon); - - if (dispImage.is_keySPACE() || dispRadon.is_keySPACE()) { - radonImage = (CImg)RadonTransform(cannyEdgeMap,N).quantize(255,false).resize(500,400); - radonImage.display(dispRadon); - } - - //when clicking on dispRadon window, draw line in original image window - if (dispRadon.button()) - { - const double rho = dispRadon.mouse_y()*rhomax/dispRadon.height(), - theta = (dispRadon.mouse_x()*N/dispRadon.width())*2*cimg::PI/N, - x = src.width()/2 + rho*std::cos(theta), - y = src.height()/2 + rho*std::sin(theta); - const int x0 = (int)(x + 1000*std::cos(theta + cimg::PI/2)), - y0 = (int)(y + 1000*std::sin(theta + cimg::PI/2)), - x1 = (int)(x - 1000*std::cos(theta + cimg::PI/2)), - y1 = (int)(y - 1000*std::sin(theta + cimg::PI/2)); - src.draw_line(x0,y0,x1,y1,green,1.0f,0xF0F0F0F0).display(dispImage); - } - } - return 0; -} -/** - * PURPOSE: create a 5x5 gaussian kernel matrix - * PARAM rho - gaussiam equation parameter (default = 1.0) - * RETURN CImg the gaussian kernel - **/ - -CImg GaussianKernel(double sigma = 1.0) -{ - CImg resultIm(5,5,1,1,0); - int midX = 3, midY = 3; - cimg_forXY(resultIm,X,Y) { - resultIm(X,Y) = std::ceil(256.0*(std::exp(-(midX*midX + midY*midY)/(2*sigma*sigma)))/(2*cimg::PI*sigma*sigma)); - } - return resultIm; -} -/* - * PURPOSE: convolve a given image with the gaussian kernel - * PARAM CImg im - image to be convolved upon - * PARAM double sigma - gaussian equation parameter - * RETURN CImg image resulting from the convolution - * */ -CImg ApplyGaussian(CImg im,double sigma) -{ - CImg smoothIm(im.width(),im.height(),1,1,0); - - //make gaussian kernel - CImg gk = GaussianKernel(sigma); - //apply gaussian - - CImg_5x5(I,int); - cimg_for5x5(im,X,Y,0,0,I,int) { - float sum = 0; - sum += gk(0,0)*Ibb + gk(0,1)*Ibp + gk(0,2)*Ibc + gk(0,3)*Ibn + gk(0,4)*Iba; - sum += gk(1,0)*Ipb + gk(1,1)*Ipp + gk(1,2)*Ipc + gk(1,3)*Ipn + gk(1,4)*Ipa; - sum += gk(2,0)*Icb + gk(2,1)*Icp + gk(2,2)*Icc + gk(2,3)*Icn + gk(2,4)*Ica; - sum += gk(3,0)*Inb + gk(3,1)*Inp + gk(3,2)*Inc + gk(3,3)*Inn + gk(3,4)*Ina; - sum += gk(4,0)*Iab + gk(4,1)*Iap + gk(4,2)*Iac + gk(4,3)*Ian + gk(4,4)*Iaa; - smoothIm(X,Y) = sum/256; - } - return smoothIm; -} -/** - * PURPOSE: convert a given rgb image to a MxNX1 single vector grayscale image - * PARAM: CImg im - rgb image to convert - * RETURN: CImg grayscale image with MxNx1x1 dimensions - **/ - -CImg RGBtoGrayScale(CImg &im) -{ - CImg grayImage(im.width(),im.height(),im.depth(),1,0); - if (im.spectrum() == 3) { - cimg_forXYZ(im,X,Y,Z) { - grayImage(X,Y,Z,0) = (unsigned char)(0.299*im(X,Y,Z,0) + 0.587*im(X,Y,Z,1) + 0.114*im(X,Y,Z,2)); - } - } - grayImage.quantize(255,false); - return grayImage; -} -/** - * PURPOSE: aux. function used by CannyEdges to quantize an angle theta given by gradients, dx and dy - * into 0 - 7 - * PARAM: dx,dy - gradient magnitudes - * RETURN int value between 0 and 7 - **/ -int GetAngle(int dy,int dx) -{ - double angle = cimg::abs(std::atan2((double)dy,(double)dx)); - if ((angle >= -cimg::PI/8)&&(angle <= cimg::PI/8))//-pi/8 to pi/8 => 0 - return 0; - else if ((angle >= cimg::PI/8)&&(angle <= 3*cimg::PI/8))//pi/8 to 3pi/8 => pi/4 - return 1; - else if ((angle > 3*cimg::PI/8)&&(angle <= 5*cimg::PI/8))//3pi/8 to 5pi/8 => pi/2 - return 2; - else if ((angle > 5*cimg::PI/8)&&(angle <= 7*cimg::PI/8))//5pi/8 to 7pi/8 => 3pi/4 - return 3; - else if (((angle > 7*cimg::PI/8) && (angle <= cimg::PI)) || ((angle <= -7*cimg::PI/8)&&(angle >= -cimg::PI))) //-7pi/8 to -pi OR 7pi/8 to pi => pi - return 4; - else return 0; -} -/** - * PURPOSE: create an edge map of the given image with hysteresis using thresholds T1 and T2 - * PARAMS: CImg im the image to perform edge detection on - * T1 lower threshold - * T2 upper threshold - * RETURN CImg edge map - **/ -CImg CannyEdges(CImg im, double T1, double T2, bool doHysteresis=false) -{ - CImg edges(im); - CImg secDerivs(im); - secDerivs.fill(0); - edges.fill(0); - CImgList gradients = im.get_gradient("xy",1); - int image_width = im.width(); - int image_height = im.height(); - - cimg_forXY(im,X,Y) { - double Gr = std::sqrt(std::pow((double)gradients[0](X,Y),2.0) + std::pow((double)gradients[1](X,Y),2.0)); - double theta = GetAngle(Y,X); - //if Gradient magnitude is positive and X,Y within the image - //take the 2nd deriv in the appropriate direction - if ((Gr > 0)&&(X < image_width-2)&&(Y < image_height - 2)) { - if (theta == 0) - secDerivs(X,Y) = im(X+2,Y) - 2*im(X+1,Y) + im(X,Y); - else if (theta == 1) - secDerivs(X,Y) = im(X+2,Y+2) - 2*im(X+1,Y+1) + im(X,Y); - else if (theta == 2) - secDerivs(X,Y) = im(X,Y+2) - 2*im(X,Y+1) + im(X,Y); - else if (theta == 3) - secDerivs(X,Y) = im(X+2,Y+2) - 2*im(X+1,Y+1) + im(X,Y); - else if (theta == 4) - secDerivs(X,Y) = im(X+2,Y) - 2*im(X+1,Y) + im(X,Y); - } - } - //for each 2nd deriv that crosses a zero point and magnitude passes the upper threshold. - //Perform hysteresis in the direction of the gradient, rechecking the gradient - //angle for each pixel that meets the threshold requirement. Stop checking when - //the lower threshold is not reached. - CImg_5x5(I,float); - cimg_for5x5(secDerivs,X,Y,0,0,I,float) { - if ( (Ipp*Ibb < 0) || - (Ipc*Ibc < 0)|| - (Icp*Icb < 0) ) { - double Gr = std::sqrt(std::pow((double)gradients[0](X,Y),2.0) + std::pow((double)gradients[1](X,Y),2.0)); - int dir = GetAngle(Y,X); - int Xt = X, Yt = Y, delta_x = 0, delta_y=0; - double GRt = Gr; - if (Gr >= T2) - edges(X,Y) = 255; - //work along the gradient in one direction - if (doHysteresis) { - while ((Xt > 0) && (Xt < image_width-1) && (Yt > 0) && (Yt < image_height-1)) { - switch (dir){ - case 0 : delta_x=0;delta_y=1;break; - case 1 : delta_x=1;delta_y=1;break; - case 2 : delta_x=1;delta_y=0;break; - case 3 : delta_x=1;delta_y=-1;break; - case 4 : delta_x=0;delta_y=1;break; - } - Xt += delta_x; - Yt += delta_y; - GRt = std::sqrt(std::pow((double)gradients[0](Xt,Yt),2.0) + std::pow((double)gradients[1](Xt,Yt),2.0)); - dir = GetAngle(Yt,Xt); - if (GRt >= T1) - edges(Xt,Yt) = 255; - } - //work along gradient in other direction - Xt = X; Yt = Y; - while ((Xt > 0) && (Xt < image_width-1) && (Yt > 0) && (Yt < image_height-1)) { - switch (dir){ - case 0 : delta_x=0;delta_y=1;break; - case 1 : delta_x=1;delta_y=1;break; - case 2 : delta_x=1;delta_y=0;break; - case 3 : delta_x=1;delta_y=-1;break; - case 4 : delta_x=0;delta_y=1;break; - } - Xt -= delta_x; - Yt -= delta_y; - GRt = std::sqrt(std::pow((double)gradients[0](Xt,Yt),2.0) + std::pow((double)gradients[1](Xt,Yt),2.0)); - dir = GetAngle(Yt,Xt); - if (GRt >= T1) - edges(Xt,Yt) = 255; - } - } - } - } - return edges; -} -/** - * PURPOSE: perform radon transform of given image - * PARAM: CImg im - image to detect lines - * int N - number of angles to consider (should be a power of 2) - * (the values of N will be spread over 0 to 2PI) - * RETURN CImg - transform of given image of size, N x D - * D = rhomax = sqrt(dimx*dimx + dimy*dimy)/2 - **/ -CImg<> RadonTransform(CImg im,int N) { - int image_width = im.width(); - int image_height = im.height(); - - //calc offsets to center the image - float xofftemp = image_width/2.0f - 1; - float yofftemp = image_height/2.0f - 1; - int xoffset = (int)std::floor(xofftemp + ROUNDING_FACTOR(xofftemp)); - int yoffset = (int)std::floor(yofftemp + ROUNDING_FACTOR(yofftemp)); - float dtemp = (float)std::sqrt((double)(xoffset*xoffset + yoffset*yoffset)); - int D = (int)std::floor(dtemp + ROUNDING_FACTOR(dtemp)); - - CImg<> imRadon(N,D,1,1,0); - - //for each angle k to consider - for (int k= 0 ; k < N; k++) { - //only consider from PI/8 to 3PI/8 and 5PI/8 to 7PI/8 - //to avoid computational complexity of a steep angle - if (k == 0){k = N/8;continue;} - else if (k == (3*N/8 + 1)){ k = 5*N/8;continue;} - else if (k == 7*N/8 + 1){k = N; continue;} - - //for each rho length, determine linear equation and sum the line - //sum is to sum the values along the line at angle k2pi/N - //sum2 is to sum the values along the line at angle k2pi/N + N/4 - //The sum2 is performed merely by swapping the x,y axis as if the image were rotated 90 degrees. - for (int d=0; d < D; d++) { - double theta = 2*k*cimg::PI/N;//calculate actual theta - double alpha = std::tan(theta+cimg::PI/2);//calculate the slope - double beta_temp = -alpha*d*std::cos(theta) + d*std::sin(theta);//y-axis intercept for the line - int beta = (int)std::floor(beta_temp + ROUNDING_FACTOR(beta_temp)); - //for each value of m along x-axis, calculate y - //if the x,y location is within the boundary for the respective image orientations, add to the sum - unsigned int sum1 = 0, - sum2 = 0; - int M = (image_width >= image_height) ? image_width : image_height; - for (int m=0;m < M; m++) { - //interpolate in-between values using nearest-neighbor approximation - //using m,n as x,y indices into image - double n_temp = alpha*(m-xoffset) + beta; - int n = (int)std::floor(n_temp + ROUNDING_FACTOR(n_temp)); - if ((m < image_width) && (n + yoffset >= 0) && (n + yoffset < image_height)) - { - sum1 += im(m, n + yoffset); - } - n_temp = alpha*(m-yoffset) + beta; - n = (int)std::floor(n_temp + ROUNDING_FACTOR(n_temp)); - if ((m < image_height)&&(n + xoffset >= 0)&&(n + xoffset < image_width)) - { - sum2 += im(-(n + xoffset) + image_width - 1, m); - } - } - //assign the sums into the result matrix - imRadon(k,d) = (float)sum1; - //assign sum2 to angle position for theta+PI/4 - imRadon(((k + N/4)%N),d) = (float)sum2; - } - } - return imRadon; -} -/* references: - * 1. See Peter Toft's thesis on the Radon transform: http://petertoft.dk/PhD/index.html - * While I changed his basic algorithm, the main idea is still the same and provides an excellent explanation. - * - * */ diff --git a/deps/CImg/examples/scene3d b/deps/CImg/examples/scene3d deleted file mode 100755 index 9c16379..0000000 Binary files a/deps/CImg/examples/scene3d and /dev/null differ diff --git a/deps/CImg/examples/scene3d.cpp b/deps/CImg/examples/scene3d.cpp deleted file mode 100644 index 9e2b3b8..0000000 --- a/deps/CImg/examples/scene3d.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - # - # File : scene3d.cpp - # ( C++ source file ) - # - # Description : A simple program that demonstrates the use of the - # 3D functions of CImg, in conjonction with the Board library. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Uncomment the line below to use the Board library. -// ( You will need to link your code with the board library object ). -// ( Get the Board Library at : http://libboard.sourceforge.net/ ) -//#define cimg_use_board - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main() { - - // Define a simple 3D scene, composed of various basic objects (torus, cone, cube, ...) - //------------------------------------------------------------------------------------- - std::fprintf(stderr," - Create 3D Scene.\n"); - - // Define objects vertices and primitives. - CImgList cube_prims, cone_prims, torus_prims, sphere_prims, plane_prims, scene_prims; - const CImg - cube_pts = CImg<>::box3d(cube_prims,60,60,60).shift_object3d().shift_object3d(-50,50,0), - cone_pts = CImg<>::cone3d(cone_prims,30,40).shift_object3d().shift_object3d(50,50,0), - torus_pts = CImg<>::torus3d(torus_prims,30,10).shift_object3d().shift_object3d(-50,-50,0), - sphere_pts = CImg<>::sphere3d(sphere_prims,30).shift_object3d().shift_object3d(50,-50,0), - plane_pts = CImg<>::plane3d(plane_prims,200,200,20,20).shift_object3d().shift_object3d(0,0,40); - plane_prims.insert(plane_prims.get_reverse_object3d()); - - // Define objects colors and textures. - const CImgList - cone_cols = CImgList(cone_prims.size(),CImg::vector(128,63,255)), - torus_cols = CImgList(torus_prims.size(),CImg::vector(255,55,163)), - sphere_cols = CImgList(sphere_prims.size(),CImg::vector(115,115,63)), - plane_cols = CImgList(plane_prims.size(),CImg::vector(60,120,180)); - const CImg texture = CImg(cimg_imagepath "milla.bmp").resize(128,128); - CImgList cube_cols; - cimglist_for(cube_prims,p) { - cube_cols.insert(texture,~0U,true); - cube_prims[p].append(CImg::vector(0,0,127,0,127,127,0,127),'y'); - } - - // Define objects opacities. - const CImg - cube_opacs(cube_prims.size(),1,1,1,1.0f), - cone_opacs(cone_prims.size(),1,1,1,0.8f), - torus_opacs(torus_prims.size(),1,1,1,0.6f), - sphere_opacs(sphere_prims.size(),1,1,1,0.4f), - plane_opacs(plane_prims.size(),1,1,1,0.4f); - - // Append all object in a single 3D scene. - const CImg scene_pts = CImg(). - append_object3d(scene_prims,cube_pts,cube_prims). - append_object3d(scene_prims,cone_pts,cone_prims). - append_object3d(scene_prims,torus_pts,torus_prims). - append_object3d(scene_prims,sphere_pts,sphere_prims). - append_object3d(scene_prims,plane_pts,plane_prims); - const CImgList scene_cols = (+cube_cols,cone_cols,torus_cols,sphere_cols,plane_cols); - const CImg scene_opacs = (cube_opacs,cone_opacs,torus_opacs,sphere_opacs,plane_opacs)>'x'; - - // Display object3D in a user-interacted window and get final position matrix. - std::fprintf(stderr," - Display 3D Scene.\n"); - const CImg visu = CImg(3,512,512,1).fill(230,230,255).permute_axes("yzcx"); - CImg view_matrix = CImg<>::identity_matrix(4); - visu.display_object3d("3D Scene",scene_pts,scene_prims,scene_cols,scene_opacs,true,4,4,false, - 500.0f,0,0,-5000,0.5f,0.1f,true,view_matrix.data()); - - // Save object 3D as OFF file. - std::fprintf(stderr," - Save .OFF 3D object file.\n"); - scene_pts.save_off(scene_prims,scene_cols,"output.off"); - - // Save 3D view in SVG, EPS and FIG files. - // (using the Board library : http://libboard.sourceforge.net/ ). -#ifdef cimg_use_board - - // Define a Board instance - LibBoard::Board B; - - // Set Background color of the board. - B.clear(230,230,255); - - // Draw object both in 'visu' and in the board. - (view_matrix.crop(0,0,2,2))*=2; - (+visu).draw_object3d(B,visu.width()/2,visu.height()/2,visu.depth()/2,view_matrix*scene_pts,scene_prims,scene_cols,scene_opacs,3). - display("Snapshot for Board"); - - // Save board into a vector graphics file format. - std::fprintf(stderr," - Save .SVG, .EPS and .FIG snapshots\n"); - B.save("output.svg"); - B.save("output.eps"); - B.save("output.fig"); -#endif - - // Exit. - std::fprintf(stderr," - Exit.\n"); - return 0; -} diff --git a/deps/CImg/examples/spherical_function3d b/deps/CImg/examples/spherical_function3d deleted file mode 100755 index be5756f..0000000 Binary files a/deps/CImg/examples/spherical_function3d and /dev/null differ diff --git a/deps/CImg/examples/spherical_function3d.cpp b/deps/CImg/examples/spherical_function3d.cpp deleted file mode 100644 index 438203d..0000000 --- a/deps/CImg/examples/spherical_function3d.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - # - # File : spherical_function3d.cpp - # ( C++ source file ) - # - # Description : An example that shows how to build custom 3D objects in CImg. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; - -/*--------------------------- - - Main procedure - - --------------------------*/ -int main() { - - CImgList object_colors; - CImgList object_opacities; - - // Define a 3D centered box. - CImg object_vertices = CImg(3,8,1,1, // Define the 8 vertices of the cube. - -1,-1,-1, // (x0,y0,z0) - 1,-1,-1, // (x1,y1,z1) - 1,1,-1, // ... - -1,1,-1, - -1,-1,1, - 1,-1,1, - 1,1,1, // (x6,y6,z6) - -1,1,1).transpose(); // (x7,y7,z7) - CImgList object_primitives(12,1,2,1,1, // Define the 12 segments of the cube. - 0,1, 1,2, 2,3, 3,0, - 4,5, 5,6, 6,7, 7,4, - 0,4, 1,5, 2,6, 3,7); - object_colors.insert(object_primitives.size(),CImg::vector(32,64,255)); - object_opacities.insert(object_primitives.size(),CImg::vector(0.3f)); - - // Define the spherical function's vertices. - CImgList spherical_vertices; - const float a = 1; - const unsigned int na = 132, nb = 132; - for (unsigned int v = 0; v::vector(altitude*x,altitude*y,altitude*z)); - } - - // Define the spherical function's mesh. - CImgList spherical_primitives; - for (unsigned int vv = 0; vv::vector(nb*vv+nu,nb*nv+uu,nb*vv+uu)); - spherical_primitives.insert(CImg::vector(nb*vv+nu,nb*nv+nu,nb*nv+uu)); - object_colors.insert(CImg<>::vector(0,255,255)); - object_colors.insert(CImg<>::vector(100,200,255)); - object_opacities.insert(2,CImg<>::vector(1)); - } - - // Merge 3D objects together. - object_vertices.append_object3d(object_primitives,spherical_vertices>'x',spherical_primitives); - char title[4096] = { 0 }; - std::sprintf(title,"3D Spherical Function (%u vertices, %u primitives)",object_vertices.width(),object_primitives.size()); - CImgDisplay disp(640,480,title,0); - CImg(disp.width(),disp.height(),1,3,220). - display_object3d(disp,object_vertices,object_primitives,object_colors,object_opacities,true,4,3,false, - 500,0,0,-5000,0.1f,1.5f); - - return 0; -} diff --git a/deps/CImg/examples/tetris b/deps/CImg/examples/tetris deleted file mode 100755 index 62206a1..0000000 Binary files a/deps/CImg/examples/tetris and /dev/null differ diff --git a/deps/CImg/examples/tetris.cpp b/deps/CImg/examples/tetris.cpp deleted file mode 100644 index 1f939a6..0000000 --- a/deps/CImg/examples/tetris.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - # - # File : tetris.cpp - # ( C++ source file ) - # - # Description : A CImg version of the famous Tetris game. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "img/tetris.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line argument (if any) - cimg_usage("An implementation of the well known 'Tetris' game with CImg."); - unsigned int - blocdim = cimg_option("-blocdim",18,"Sprite bloc size"), - speed = cimg_option("-speed",20,"Initial speed"), - level = cimg_option("-level",0,"Level"); - const char *geometry = cimg_option("-g","12x20","Size of the board"); - unsigned int bwidth = 12,bheight = 20; - std::sscanf(geometry,"%u%*c%u",&bwidth,&bheight); - - const CImg dlogo = CImg(data_logo,128,96,1,3,true); - if (cimg::dialog("CImg Tetris", - "Welcome to the CImg version of Tetris.\n" - "( by David Tschumperle )\n\n" - "Press 'Start' when you are ready to play !","Start","Quit",0,0,0,0,dlogo,true)) std::exit(0); - - // Create sprite, background graphics and initial board data - const CImgList pieces = CImgList(). - insert(CImg(3,2).fill(1,1,1,0,0,1)). - insert(CImg(3,2).fill(2,2,2,2,0,0)). - insert(CImg(2,2).fill(3,3,3,3)). - insert(CImg(4,1).fill(4,4,4,4)). - insert(CImg(3,2).fill(5,5,0,0,5,5)). - insert(CImg(3,2).fill(0,6,6,6,6,0)). - insert(CImg(3,3).fill(0,7,0,7,7,7,0,7,0)). - insert(CImg(2,1).fill(8,8)). - insert(CImg(3,2).fill(9,9,9,0,9,0)). - insert(CImg(2,2).fill(10,10,0,10)). - insert(CImg(3,1).fill(11,11,11)); - - CImg board(bwidth,bheight,1,1,0), background(board.width()*blocdim,board.height()*blocdim,1,3,0); - (background.noise(30).draw_plasma().noise(30).deriche(5,0,'y').shift(0,-background.height()/2,0,0,2).deriche(5,0,'y'))/=1.5f; - if (level) (board.get_shared_rows(board.height()-level,board.height()-1,0,0).noise(100))%=pieces.size()+1; - - // Create a set of small gradient-colored blocs used to draw the pieces. - CImgList blocs(pieces.size(),blocdim,blocdim,1,3); - cimglist_for(blocs,l) { - CImg color = CImg(3,1,1,1,128).noise(127,1).cut(120,255); - float val; - cimg_forXYC(blocs[l],x,y,k) blocs[l](x,y,k) = (unsigned char)((val=(color[k]*0.7f*(x+y+5)/blocdim))>255?255:val); - blocs[l].draw_line(0,0,0,blocdim-1,(color>>1).data()).draw_line(0,blocdim-1,blocdim-1,blocdim-1,(color>>1).data()); - color = (CImg(color)*=2).cut(0,255); - blocs[l].draw_line(0,0,(int)blocdim-1,0,color.data()).draw_line(blocdim-1,0,blocdim-1,blocdim-1,color.data()); - } - - // Initialize window display and enter the main event loop - CImgDisplay disp(background,"CImg Tetris",0,false,true); - disp.move((CImgDisplay::screen_width() - disp.width())/2, - (CImgDisplay::screen_height() - disp.height())/2).hide_mouse(); - const unsigned char white[3]={ 255, 255, 255 }; - CImg visu, nboard, piece, next, next_mask; - int cx = -1, cy = -1, cn = -1, nn = rand()%pieces.size(), time = 0, score = 0; - bool gameover = false, pause = false; - - while (!gameover && !disp.is_closed() && !disp.is_keyESC() && !disp.is_keyQ()) { - - if (!pause) { - - // Draw the board on the display window. - nboard = board; visu = background; - if (cx>=0 && cy>=0) cimg_forXY(piece,x,y) if (piece(x,y)) nboard(cx-piece.width()/2+x,cy-piece.height()/2+y)=piece(x,y); - cimg_forXY(board,xx,yy) if (nboard(xx,yy)) visu.draw_image(xx*blocdim,yy*blocdim,blocs[nboard(xx,yy)-1]); - visu.draw_text(5,5,"Lines : %d",white,0,1,13,score,nn).draw_text(visu.width()-75,5,"Next :",white,0,1,13); - if (next) visu.draw_image(visu.width()-next.width()-2,10-next.height()/2,next,next_mask).display(disp.wait(20)); - - if (cn<0) { - - // Introduce a new piece on the board (if necessary) and create representation of the next piece - board = nboard; - piece = pieces[cn=nn]; - nn = rand()%pieces.size(); - cx = board.width()/2; - cy = piece.height()/2; - next = CImg(pieces[nn].width()*blocdim,pieces[nn].height()*blocdim,1,3,0); - cimg_forXY(pieces[nn],xi,yi) if (pieces[nn](xi,yi)) next.draw_image(xi*blocdim,yi*blocdim,blocs[pieces[nn](xi,yi)-1]); - next_mask = next.resize(-50,-50).get_norm().threshold(0); - - // Detect tetris lines and do line removal animation if found. - cimg_forY(board,yyy) { - int Y = yyy*blocdim, line = 1; - cimg_forX(board,xxx) if (!board(xxx,yyy)) line=0; - if (line) { - board.draw_image(0,1,board.get_crop(0,0,board.width()-1,yyy-1)); - if (!((++score)%1) && speed>1) --speed; - for (float alpha=0; alpha<=1; alpha+=0.07f) - CImg(visu).draw_image(0,Y,background.get_crop(0,Y,visu.width()-1,Y+blocdim-1),alpha).display(disp.wait(20)); - visu.draw_image(0,Y,background.get_crop(0,Y,visu.width()-1,Y+blocdim-1)); - } - } - } - - // Handle motion & collisions - const int ox = cx, oy = cy; - bool rotated = false, collision; - switch (disp.key()) { - case cimg::keyP: pause = true; break; - case cimg::keyARROWUP: piece.rotate(90); rotated = true; disp.set_key(); break; - case cimg::keyARROWLEFT: --cx; disp.set_key(); break; - case cimg::keyARROWRIGHT: ++cx; disp.set_key(); break; - } - if (cx - piece.width()/2<0) cx = piece.width()/2; - if (cy - piece.height()/2<0) cy = piece.height()/2; - if (cx + (piece.width()-1)/2>=board.width()) cx = board.width() - 1 - (piece.width()-1)/2; - - // Detect collision along the X axis - collision = false; cimg_forXY(piece,i,j) if (piece(i,j) && board(cx-piece.width()/2+i,cy-piece.height()/2+j)) collision = true; - if (collision) { cx=ox; if (rotated) piece.rotate(-90); } - - if (disp.key()==cimg::keyARROWDOWN || !((++time)%speed)) { ++cy; disp.set_key(); } - // Detect collisiong along the Y axis - collision = false; - cimg_forXY(piece,ii,jj) - if (piece(ii,jj) && (cy-piece.height()/2+jj>=board.height() || board(cx-piece.width()/2+ii,cy-piece.height()/2+jj))) collision = true; - if (collision || cy+(piece.height()-1)/2>=board.height()) { cy = oy; cn = -1; } - if (collision && cy==piece.height()/2) gameover = true; - } else { - - // If game is paused (key 'P'), do a little text animation - float A = 0, B = 0; - CImg pauselogo = CImg().draw_text(0,0,"Game Paused\nPress a key",white); - disp.set_key(); while (!disp.is_closed() && !disp.key()) { - const CImg pauserotated = pauselogo.get_rotate((float)(30*std::sin(A)),1,0). - resize((int)(-150-80*std::sin(B)),(int)(-150-80*std::sin(B))); - A+=0.08f; B+=0.043f; - CImg(background). - draw_image((background.width()-pauserotated.width())/2, - (background.height()-pauserotated.height())/2, - pauserotated.get_resize(-100,-100,1,3,2),pauserotated,1,255).display(disp.wait(20)); - if (disp.is_resized()) disp.resize(); - } - disp.set_key(); - pause = false; - } - background.shift(0,-20/(int)speed,0,0,2); - if (disp.is_resized()) disp.resize(); - } - - // End of game reached, display the score and do a 'game over' animation - cimg_forXYC(visu,x,y,k) if (x%2 || y%2) visu(x,y,k) = 0; - visu.display(disp); - char tmp[1024]; - std::sprintf(tmp,"Game Over !\n\nYour score : %d",score); - cimg::dialog("CImg Tetris",tmp,"Quit"); - return 0; -} diff --git a/deps/CImg/examples/tron b/deps/CImg/examples/tron deleted file mode 100755 index 2d64840..0000000 Binary files a/deps/CImg/examples/tron and /dev/null differ diff --git a/deps/CImg/examples/tron.cpp b/deps/CImg/examples/tron.cpp deleted file mode 100644 index 5e626ce..0000000 --- a/deps/CImg/examples/tron.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - # - # File : tron.cpp - # ( C++ source file ) - # - # Description : A clone of the famous (and very simple) Tron game. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main(int argc, char **argv) { - - // Print usage, help and retrieve command line options - //----------------------------------------------------- - cimg_usage("A very simple Tron game, using the CImg Library"); - cimg_help("--- Quick help ----------------------------\n" - " Player 1 (blue) :\n" - " Use keys 'Z' (up), 'S' (down), 'Q' (left)\n" - " and 'D' (right) to control your player.\n" - " Right 'CONTROL' key enables turbospeed\n" - " Player 2 (red) : \n" - " Use arrow keys to control your player.\n" - " 'TAB' key enables turbospeed.\n" - "-------------------------------------------"); - - const char *geom = cimg_option("-g","300x300","Size of the game board"); - const int delay = cimg_option("-s",10,"Game speed (lower value means faster)"); - const bool twoplayers = !cimg_option("-1",false,"One player only"); - const int zoom = cimg_option("-z",1,"Zoom factor"); - const bool full = cimg_option("-f",false,"Fullscreen mode"); - unsigned int W = 400, H = 400; - std::sscanf(geom,"%u%*c%u",&W,&H); - - // Define game colors and variables - //---------------------------------- - const unsigned char blue[] = { 128,200,255}, red[] = { 255,0,0 }, white[] = { 255,255,255 }; - int score1=0, score2=0, round_over=0, ix1=-1, iy1=-1, x1=0, y1=0, u1=0, v1=0, ix2=-1, iy2=-1, x2=0, y2=0, u2=0, v2=0; - bool start_round = true, turbo1 = false, turbo2 = false; - - // Create background image - //-------------------------- - CImg background, img; - background.assign(64,64,1,3,0).noise(60).draw_plasma().resize(W,H).blur(2).normalize(0,128).draw_rectangle(0,0,W-1,H-1,white,1.0f,~0U); - - // Open display window - //--------------------- - CImgDisplay disp(background,"* CImg-Tron *"); - if (zoom>1) disp.resize(-100*zoom,-100*zoom); - if (full) disp.toggle_fullscreen().display(background); - - // Start main game loop - //---------------------- - while (!disp.is_closed() && !disp.is_keyESC()) { - - // Init new game round if necessary - //---------------------------------- - if (start_round) { - - // Init game variables - round_over = 0; - ix1=-1; iy1=-1; x1 = 10; y1 = 10; u1 = 1; v1 = 0; turbo1 = false; - ix2=-1; iy2=-1; x2 = W-11; y2 = H-11; u2 = -1; v2 = 0; turbo2 = false; - img = background; - start_round = false; - - // Display a simple pre-round page - CImg logo, pressakey; - logo.draw_text(0,0," CImg-Tron ",white,0,1,33).resize(-100,-100,1,3); - CImg tmp = (+background).draw_image((W-logo.width())/2,(H-logo.height())/2-20,logo,logo.get_channel(0).dilate(6).normalize(0,1)). - draw_text(W/2-60,H/2+10,"Blue ( %u )",blue,0,1,13,score1). - draw_text(W/2+10,H/2+10,"Red ( %u )",red,0,1,13,score2); - pressakey.draw_text(0,0,"* Press a key to start round *",white); - for (float i = 0; i<1; i+=0.05f) ((+tmp)*=i).display(disp.wait(20)); - disp.flush(); - for (unsigned long t = 0; !disp.key() && !disp.is_closed(); ++t) { - if (!(t%10)) { if (t%20) disp.display(tmp); else disp.display((+tmp).draw_image(W/2-70,H/2+50,pressakey,pressakey,1,255)); } - if (disp.wait(20).is_resized()) disp.resize(disp); - } - if (disp.is_keyESC()) disp.flush(); - } - - // Test collision between players and borders - if (x1<0 || x1>=img.width() || y1<0 || y1>=img.height() || - img(x1,y1,0)!=background(x1,y1,0) || - img(x1,y1,1)!=background(x1,y1,1) || - img(x1,y1,2)!=background(x1,y1,2) || - ((ix1>=0 || iy1>=0) && (img(ix1,iy1,0)!=background(ix1,iy1,0) || // Collision test for turbo mode - img(ix1,iy1,1)!=background(ix1,iy1,1) || - img(ix1,iy1,2)!=background(ix1,iy1,2)))) { round_over=1; score2++; } - if (twoplayers) { - if (x2<0 || x2>=img.width() || y2<0 || y2>=img.height() || - img(x2,y2,0)!=background(x2,y2,0) || - img(x2,y2,1)!=background(x2,y2,1) || - img(x2,y2,2)!=background(x2,y2,2) || - ((ix2>=0 || iy2>=0) && (img(ix2,iy2,0)!=background(ix2,iy2,0) || // Collision test for turbo mode - img(ix2,iy2,1)!=background(ix2,iy2,1) || - img(ix2,iy2,2)!=background(ix2,iy2,2)))) { round_over=2; score1++; } - } - - // Draw new players positions - img.draw_point(x1,y1,blue); - if (ix1>=0 && iy1>=0) img.draw_point(ix1,iy1,blue); - if (twoplayers) { - img.draw_point(x2,y2,red); - if (ix2>=0 && iy2>=0) img.draw_point(ix2,iy2,red); - } - if (disp.is_resized()) disp.resize(disp); - img.display(disp); - - // Update players positions - x1+=u1; y1+=v1; - if (turbo1) { ix1 = x1; iy1 = y1; x1+=u1; y1+=v1; } else { ix1 = iy1 = -1; } - if (twoplayers) { - x2+=u2; y2+=v2; - if (turbo2) { ix2 = x2; iy2 = y2; x2+=u2; y2+=v2; } else { ix2 = iy2 = -1; } - } - - // Test keyboard events - int nu1 = u1, nv1 = v1, nu2 = u2, nv2 = v2; - if (disp.is_keyARROWLEFT()) { nu1 = -1; nv1 = 0; } - if (disp.is_keyARROWRIGHT()) { nu1 = 1; nv1 = 0; } - if (disp.is_keyARROWUP()) { nu1 = 0; nv1 = -1; } - if (disp.is_keyARROWDOWN()) { nu1 = 0; nv1 = 1; } - turbo1 = disp.is_keyCTRLRIGHT(); - if (twoplayers) { - if (disp.is_keyQ()) { nu2 = -1; nv2 = 0; } - if (disp.is_keyD()) { nu2 = 1; nv2 = 0; } - if (disp.is_keyZ()) { nu2 = 0; nv2 = -1; } - if (disp.is_keyS()) { nu2 = 0; nv2 = 1; } - turbo2 = disp.is_keyTAB(); - } - if (nu1!=-u1 && nv1!=-v1) { u1 = nu1; v1 = nv1; } - if (nu2!=-u2 && nv2!=-v2) { u2 = nu2; v2 = nv2; } - - // Check if round is over. - if (round_over) { - const int xc = round_over==1?x1:x2, yc = round_over==1?y1:y2; - for (int r=0; r<50; r+=3) img.draw_circle(xc,yc,r,round_over==1?blue:red,r/300.0f).display(disp.wait(20)); - for (int rr=0; rr<50; rr+=3) - ((+img)*=(50-rr)/50.0f).draw_circle(xc,yc,(50+rr),round_over==1?blue:red,1/6.0f).display(disp.wait(20)); - start_round = true; - } - - // Wait a small amount of time - disp.wait(delay); - } - return 0; -} diff --git a/deps/CImg/examples/tutorial b/deps/CImg/examples/tutorial deleted file mode 100755 index 7f91250..0000000 Binary files a/deps/CImg/examples/tutorial and /dev/null differ diff --git a/deps/CImg/examples/tutorial.cpp b/deps/CImg/examples/tutorial.cpp deleted file mode 100644 index 6fd32a6..0000000 --- a/deps/CImg/examples/tutorial.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - # - # File : tutorial.cpp - # ( C++ source file ) - # - # Description : View the color profile of an image, along the X-axis. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Include CImg library file and use its main namespace -#include "CImg.h" -using namespace cimg_library; - -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Define program usage and read command line parameters - //------------------------------------------------------- - - // Display program usage, when invoked from the command line with option '-h'. - cimg_usage("View the color profile of an image along the X axis"); - - // Read image filename from the command line (or set it to "img/parrot_original.ppm" if option '-i' is not provided). - const char* file_i = cimg_option("-i",cimg_imagepath "parrot_original.ppm","Input image"); - - // Read pre-blurring variance from the command line (or set it to 1.0 if option '-blur' is not provided). - const double sigma = cimg_option("-blur",1.0,"Variance of gaussian pre-blurring"); - - // Init variables - //---------------- - - // Load an image, transform it to a color image (if necessary) and blur it with the standard deviation sigma. - const CImg image = CImg<>(file_i).normalize(0,255).blur((float)sigma).resize(-100,-100,1,3); - - // Create two display window, one for the image, the other for the color profile. - CImgDisplay - main_disp(image,"Color image (Try to move mouse pointer over)",0), - draw_disp(500,400,"Color profile of the X-axis",0); - - // Define colors used to plot the profile, and a hatch to draw the vertical line - unsigned int hatch = 0xF0F0F0F0; - const unsigned char - red[] = { 255,0,0 }, - green[] = { 0,255,0 }, - blue [] = { 0,0,255 }, - black[] = { 0,0,0 }; - - // Enter event loop. This loop ends when one of the two display window is closed or when the keys 'ESC' or 'Q' are pressed. - while (!main_disp.is_closed() && !draw_disp.is_closed() && - !main_disp.is_keyESC() && !draw_disp.is_keyESC() && !main_disp.is_keyQ() && !draw_disp.is_keyQ()) { - - // Handle display window resizing (if any) - if (main_disp.is_resized()) main_disp.resize().display(image); - draw_disp.resize(); - - if (main_disp.mouse_x()>=0 && main_disp.mouse_y()>=0) { // Mouse pointer is over the image - - const int - xm = main_disp.mouse_x(), // X-coordinate of the mouse pointer over the image - ym = main_disp.mouse_y(), // Y-coordinate of the mouse pointer over the image - xl = xm*draw_disp.width()/main_disp.width(), // Corresponding X-coordinate of the hatched line - x = xm*image.width()/main_disp.width(), // Corresponding X-coordinate of the pointed pixel in the image - y = ym*image.height()/main_disp.height(); // Corresponding Y-coordinate of the pointex pixel in the image - - // Retrieve color component values at pixel (x,y) - const unsigned int - val_red = image(x,y,0), - val_green = image(x,y,1), - val_blue = image(x,y,2); - - // Create and display the image of the intensity profile - CImg(draw_disp.width(),draw_disp.height(),1,3,255). - draw_grid(-50*100.0f/image.width(),-50*100.0f/256,0,0,false,true,black,0.2f,0xCCCCCCCC,0xCCCCCCCC). - draw_axes(0,image.width()-1.0f,255.0f,0.0f,black). - draw_graph(image.get_shared_row(y,0,0),red,1,1,0,255,1). - draw_graph(image.get_shared_row(y,0,1),green,1,1,0,255,1). - draw_graph(image.get_shared_row(y,0,2),blue,1,1,0,255,1). - draw_text(30,5,"Pixel (%d,%d)={%d %d %d}",black,0,1,16, - main_disp.mouse_x(),main_disp.mouse_y(),val_red,val_green,val_blue). - draw_line(xl,0,xl,draw_disp.height()-1,black,0.5f,hatch=cimg::rol(hatch)). - display(draw_disp); - } else - // else display a text in the profile display window. - CImg(draw_disp.width(),draw_disp.height()).fill(255). - draw_text(draw_disp.width()/2-130,draw_disp.height()/2-5,"Mouse pointer is outside the image",black,0,1,16).display(draw_disp); - - // Temporize event loop - cimg::wait(20); - } - - return 0; -} diff --git a/deps/CImg/examples/use_RGBclass b/deps/CImg/examples/use_RGBclass deleted file mode 100755 index 31abb4a..0000000 Binary files a/deps/CImg/examples/use_RGBclass and /dev/null differ diff --git a/deps/CImg/examples/use_RGBclass.cpp b/deps/CImg/examples/use_RGBclass.cpp deleted file mode 100644 index e4d3f8b..0000000 --- a/deps/CImg/examples/use_RGBclass.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - # - # File : use_RGBclass.cpp - # ( C++ source file ) - # - # Description : A small code that shows how to write a CImg plugin to - # handle color image manipulation using a user-defined RGB - # class, instead of using classical pixel access of CImg - # with operator(). - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin -#define cimg_plugin "examples/use_RGBclass.cpp" // Path of the plugin is relative to the CImg.h file. -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main() { - - // Load images. - CImg img1(cimg_imagepath "milla.bmp"); - const CImg img2 = CImg(cimg_imagepath "lena.pgm").resize(img1,3); - const float default_color[] = { 30,30,80 }; - - // Modify 'img1' using the RGB pixel accessor. - cimg_forXY(img1,x,y) - if (!((x*y)%31)) img1.RGB_at(x,y) = default_color; - else if ((x+y)%2) img1.RGB_at(x,y) = img2.RGB_at(x,y); - img1.display(); - - // Quit. - return 0; -} - -#else - -//------------------------- -// Start of the plugin code -//------------------------- - -// Define a simple structure of *references* to R,G,B values. -//----------------------------------------------------------- -// (Feel free to add your own operators in there !) -struct st_RGB { - T _R,_G,_B,&R,&G,&B; - - // Construct from R,G,B references of values. - st_RGB(const T& nR, const T& nG, const T& nB):_R(nR),_G(nG),_B(nB),R(_R),G(_G),B(_B) {} - st_RGB(T& nR, T& nG, T& nB):R(nR),G(nG),B(nB) {} - - // Copy constructors. - st_RGB(const st_RGB& rgb):_R(rgb.R),_G(rgb.G),_B(rgb.B),R(_R),G(_G),B(_B) {} - template - st_RGB(const t& rgb):_R(rgb[0]),_G(rgb[1]),_B(rgb[2]) {} - - // Assignement operator. - st_RGB& operator=(const st_RGB& rgb) { - R = (T)(rgb[0]); G = (T)(rgb[1]); B = (T)(rgb[2]); - return *this; - } - template - st_RGB& operator=(const t& rgb) { - R = (T)(rgb[0]); G = (T)(rgb[1]); B = (T)(rgb[2]); - return *this; - } - - // Data (R,G or B) access operator. - const T& operator[](const unsigned int i) const { - return i==2?B:(i==1?G:R); - } - T& operator[](const unsigned int i) { - return i==2?B:(i==1?G:R); - } - - // Print instance on the standard error. - const st_RGB& print() const { - std::fprintf(stderr,"{ %d %d %d }\n",(int)R,(int)G,(int)B); - return *this; - } -}; - -// Define CImg member functions which return pixel values as st_RGB instances. -//-------------------------------------------------------------------------------- -const st_RGB RGB_at(const int x, const int y=0, const int z=0) const { - const int whz = width()*height()*depth(); - const T *const pR = data() + x + y*width() + z*width()*height(), *const pG = pR + whz, *const pB = pG + whz; - return st_RGB(*pR,*pG,*pB); -} - -st_RGB RGB_at(const int x, const int y=0, const int z=0) { - const int whz = width()*height()*depth(); - T *const pR = data() + x + y*width() + z*width()*height(), *const pG = pR + whz, *const pB = pG + whz; - return st_RGB(*pR,*pG,*pB); -} - -//------------------------ -// End of the plugin code -//------------------------ -#endif diff --git a/deps/CImg/examples/use_chlpca b/deps/CImg/examples/use_chlpca deleted file mode 100755 index bf5a590..0000000 Binary files a/deps/CImg/examples/use_chlpca and /dev/null differ diff --git a/deps/CImg/examples/use_chlpca.cpp b/deps/CImg/examples/use_chlpca.cpp deleted file mode 100644 index 97400ec..0000000 --- a/deps/CImg/examples/use_chlpca.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - # - # File : use_chlpca.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/chlpca.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Jerome Boulanger - # ( http://www.irisa.fr/vista/Equipe/People/Jerome.Boulanger.html ) - # - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#define cimg_plugin "plugins/chlpca.h" -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc,char **argv) { - cimg_usage("Patch based denoising "); - const char *file_i = cimg_option("-i",cimg_imagepath "milla.bmp","Input image"); - const int p = cimg_option("-p",3,"patch radius"); - const int w = cimg_option("-w",10,"window radius"); - const float lambda_min = cimg_option("-l",(float)2.f,"component selection threshold"); - const int nstep = cimg_option("-nstep",5,"sub-sampling"); - const float nsim = cimg_option("-nsim",(float)5.f,"dictionnary size a multiple of the patch size"); - const float noise_std = cimg_option("-sigma",(float)-1.f,"noise std (-1:estimated)"); - const bool use_svd = cimg_option("-svd",(float)-1.f,"use svd for computing PCA"); - const char *file_o = cimg_option("-o",(char*)NULL,"Output file"); - CImg<> img(file_i); - img = img.get_chlpca(p, w, nstep, nsim, lambda_min, noise_std, use_svd); - img.display(); - if (file_o) img.save(file_o); - return 0; -} diff --git a/deps/CImg/examples/use_cimgIPL.cpp b/deps/CImg/examples/use_cimgIPL.cpp deleted file mode 100644 index 2fc6a2d..0000000 --- a/deps/CImg/examples/use_cimgIPL.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* -# -# File : use_cimgIPL.cpp -# ( C++ source file ) -# -# Description : Example of use for the CImg plugin 'plugins/cimgIPL.h'. -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Copyright : newleft (haibo.zheng@gmail.com) -# newleftist@hotmail.com -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# -*/ - -#include -#include -#include - -#pragma comment(lib, "cv.lib") -#pragma comment(lib, "cvaux.lib") -#pragma comment(lib, "cxcore.lib") -#pragma comment(lib, "highgui.lib") - -#define cimg_plugin1 "plugins\cimgIPL.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main(int argc, char* argv[]) { - int wid = 0; - CImg<> cImg(argv[1]); - cImg.display("cImg"); - IplImage* ipl; - //ipl = cvLoadImage(argv[1], -1); - ipl = cImg.get_IPL(); - - IplImage *ipl8; - IplImage *ipl16, *ipl32, *ipl64; - IplImage *ipl16to8, *ipl32to8, *ipl64to8; - cvNamedWindow("origin", wid++); - cvNamedWindow("8bit_OK", wid++); - cvNamedWindow("16bit", wid++); - cvNamedWindow("32bit", wid++); - cvNamedWindow("64bit", wid++); - cvNamedWindow("16bitto8", wid++); - cvNamedWindow("32bitto8", wid++); - cvNamedWindow("64bitto8", wid++); - - cvShowImage("origin", ipl); - - ipl8 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_8U, ipl->nChannels); - cvConvert(ipl, ipl8); - - ipl16 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_16U, ipl->nChannels); - cvConvert(ipl, ipl16); - - ipl32 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_32F, ipl->nChannels); - cvConvert(ipl, ipl32); - - ipl64 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_64F, ipl->nChannels); - cvConvert(ipl, ipl64); - - cvShowImage("8bit_OK", ipl8);// this canbe show properly - cvShowImage("16bit", ipl16);// maynot display properly, that's bug of cvShowImage - cvShowImage("32bit", ipl32);// maynot display properly, that's bug of cvShowImage - cvShowImage("64bit", ipl64);// maynot display properly, that's bug of cvShowImage - - // cvShowImage can only display IplImage with IPL_DEPTH_8X, proved by the following codes - ipl16to8 = cvCreateImage(cvGetSize(ipl16), IPL_DEPTH_8U, ipl16->nChannels); - cvConvert(ipl16, ipl16to8); - ipl32to8 = cvCreateImage(cvGetSize(ipl32), IPL_DEPTH_8U, ipl32->nChannels); - cvConvert(ipl32, ipl32to8); - ipl64to8 = cvCreateImage(cvGetSize(ipl64), IPL_DEPTH_8U, ipl64->nChannels); - cvConvert(ipl64, ipl64to8); - cvShowImage("16bitto8", ipl16to8); // diplay ok - cvShowImage("32bitto8", ipl32to8); // diplay ok - cvShowImage("64bitto8", ipl64to8); // diplay ok - - // now, we test ipl8->cImg, ipl16->cImg, ipl32->cImg, ipl64->cImg - cImg.assign(ipl8); - cImg.display("ipl8->cimg"); - cImg.assign(ipl16); - cImg.display("ipl16->cimg"); - cImg.assign(ipl32); - cImg.display("ipl32->cimg"); - cImg.assign(ipl64); - cImg.display("ipl64->cimg"); - - cvWaitKey(0); - - // test another construct - CImg testCImg1(ipl16); - testCImg1.display("testCImg1"); - CImg testCImg2(ipl32); - testCImg2.display("testCImg2"); - CImg testCImg3(ipl64); - testCImg3.display("testCImg3"); - - CImg testCImg4(ipl16); - testCImg4.display("testCImg4"); - CImg testCImg5(ipl32); - testCImg5.display("testCImg5"); - CImg testCImg6(ipl64); - testCImg6.display("testCImg6"); - - cvReleaseImage(&ipl); - cvReleaseImage(&ipl8); - cvReleaseImage(&ipl16); - cvReleaseImage(&ipl32); - cvReleaseImage(&ipl64); - cvReleaseImage(&ipl16to8); - cvReleaseImage(&ipl32to8); - cvReleaseImage(&ipl64to8); - - cvDestroyWindow("origin"); - cvDestroyWindow("8bit_OK"); - cvDestroyWindow("16bit"); - cvDestroyWindow("32bit"); - cvDestroyWindow("64bit"); - cvDestroyWindow("16bitto8"); - cvDestroyWindow("32bitto8"); - cvDestroyWindow("64bitto8"); - - return 0; -} diff --git a/deps/CImg/examples/use_cimgmatlab.cpp b/deps/CImg/examples/use_cimgmatlab.cpp deleted file mode 100644 index 08c0677..0000000 --- a/deps/CImg/examples/use_cimgmatlab.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/*----------------------------------------------------------------------- - - File : use_cimgmatlab.cpp - - Description: Example of use for the CImg plugin 'plugins/cimgmatlab.h' - which allows to use CImg in order to develop matlab external - functions (mex functions). - User should be familiar with Matlab C/C++ mex function concepts, - as this file is by no way a mex programming tutorial. - - This simple example implements a mex function that can be called - as - - - v = cimgmatlab_cannyderiche(u,s) - - v = cimgmatlab_cannyderiche(u,sx,sy) - - v = cimgmatlab_cannyderiche(u,sx,sy,sz) - - The corresponding m-file is cimgmatlab_cannyderiche.m - - - Copyright : Francois Lauze - http://www.itu.dk/people/francois - This software is governed by the Gnu Lesser General Public License - see http://www.gnu.org/copyleft/lgpl.html - - The plugin home page is at - http://www.itu.dk/people/francois/cimgmatlab.html - - for the compilation: using the mex utility provided with matlab, just - remember to add the -I flags with paths to CImg.h and/or cimgmatlab.h. - The default lcc cannot be used, it is a C compiler and not a C++ one! - ---------------------------------------------------------------------------*/ - -#include -#define cimg_plugin "plugins/cimgmatlab.h" -#include - -void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { - if (nrhs < 2) mexErrMsgTxt("No enough input arguments."); - if (nrhs > 4) mexErrMsgTxt("Too many input arguments."); - cimg_library::CImg<> u(prhs[0],true); - if (nrhs == 2) { - const float s = (float)mxGetScalar(prhs[1]); - plhs[0] = u.get_blur(s).toMatlab(); - } else if (nrhs == 3) { - const float sx = (float)mxGetScalar(prhs[1]); - const float sy = (float)mxGetScalar(prhs[2]); - plhs[0] = u.get_blur(sx,sy,0).toMatlab(); - } else if (nrhs == 4) { - const float sx = (float)mxGetScalar(prhs[1]); - const float sy = (float)mxGetScalar(prhs[2]); - const float sz = (float)mxGetScalar(prhs[3]); - plhs[0] = u.get_blur(sx,sy,sz).toMatlab(); - } -} - -/*------------------------------------------------------------------ - - SPECIAL NOTE : - ------------- - - How to read a .mat file using plugin 'cimgmatlab.h' ? - (contribution by Vo Duc Khanh/Denso IT Lab, Tokyo, Japan). - - #include - #include - #include - - #define cimg_plugin "cimgmatlab.h" - - #include "CImg.h" - #include - #include - - ......... - - using namespace cimg_library; - using namespace std; - - // Load input images (125700 images) from training database 'BmpTrainingDb.mat' - MATFile *pmat, *pmat_out; - mxArray *pa, *pa_out; - const char data_path[256] = ".\\BmpTrainingDb.mat\0"; - const char *var_name; - - pmat = matOpen(data_path, "r"); - if (pmat == NULL) { - cout << "Error opening file " << data_path << endl; - return (1); - } - - pa = matGetNextVariable(pmat, &var_name); - if (pa == NULL){ - cout << "Error reading in file " << data_path << endl; - return (1); - } - - CImg train_db(pa,false); - ........ - - - -----------------------------------------------------------------------------*/ diff --git a/deps/CImg/examples/use_cimgmatlab.m b/deps/CImg/examples/use_cimgmatlab.m deleted file mode 100644 index 30abf66..0000000 --- a/deps/CImg/examples/use_cimgmatlab.m +++ /dev/null @@ -1,33 +0,0 @@ -/*----------------------------------------------------------------------- - File : use_cimgmatlab.m - - Description: Example of use for the CImg plugin 'plugins/cimgmatlab.h' - which allows to use CImg in order to develop matlab external - functions (mex functions). - User should be familiar with Matlab C/C++ mex function concepts, - as this file is by no way a mex programming tutorial. - - This simple example implements a mex function that can be called - as - - - v = cimgmatlab_cannyderiche(u,s) - - v = cimgmatlab_cannyderiche(u,sx,sy) - - v = cimgmatlab_cannyderiche(u,sx,sy,sz) - - The corresponding m-file is cimgmatlab_cannyderiche.m - - - Copyright : Francois Lauze - http://www.itu.dk/people/francois - This software is governed by the Gnu General Public License - see http://www.gnu.org/copyleft/gpl.html - - The plugin home page is at - http://www.itu.dk/people/francois/cimgmatlab.html - - for the compilation: using the mex utility provided with matlab, just - remember to add the -I flags with paths to CImg.h and/or cimgmatlab.h. - The default lcc cannot be used, it is a C compiler and not a C++ one! ---------------------------------------------------------------------------*/ - -function v = cimgmatlab_cannyderiche(u,sx,sy,sz) - diff --git a/deps/CImg/examples/use_draw_gradient b/deps/CImg/examples/use_draw_gradient deleted file mode 100755 index e482ee2..0000000 Binary files a/deps/CImg/examples/use_draw_gradient and /dev/null differ diff --git a/deps/CImg/examples/use_draw_gradient.cpp b/deps/CImg/examples/use_draw_gradient.cpp deleted file mode 100644 index aebdea3..0000000 --- a/deps/CImg/examples/use_draw_gradient.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - # - # File : use_draw_gradient.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/draw_gradient.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Jerome Boulanger - # ( http://www.ricam.oeaw.ac.at/people/page.cgi?firstn=Jerome;lastn=Boulanger ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#define cimg_plugin "plugins/draw_gradient.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//--------------- -int main(int argc,char **argv) { - - // Read command line arguments - //---------------------------- - cimg_usage("Example of the use of draw_gradient CImg plugin"); - const char *const file_i = cimg_option("-i",(char*)0,"Input image"); - const int shape = cimg_option("-s",1,"shape [0,6]"); - const int profile = cimg_option("-p",0,"profile [0,7]"); - - // Define an image - CImg img; - if (file_i) img.load(file_i).resize(-100,-100,-100,3); - else img.assign(300,200,1,3,0); - - // Define the color of the gradient - CImg col(3); - const unsigned char col1[3] = { 0,0,255 }, col2[3] = { 255,255,255 }; - CImgDisplay disp(img,"Click and drag to create color gradient",0); - while (!disp.is_closed() && !disp.key()) { - - // Get a vector direction from the user. - const CImg selection = img.get_select(disp,1); - - // Draw a gradient using the selected coordinated. - col.rand(100,255); - printf("Gradient with %s from color (%d,%d,%d) to (%d,%d,%d)\n", - CImg<>::get_gradient_str(shape,profile),col(0),col(1),col(2),col1[0],col1[1],col2[2]); - img.draw_gradient(selection(0),selection(1),selection(3),selection(4), - col.data(),col1,shape,profile,.7f).display(disp); - } - - // color 0 to transparency - if (file_i) img.load(file_i).resize(-100,-100,-100,3); - else img.assign(300,200,1,3,0); - img.display(disp); - disp.show().flush(); - while (!disp.is_closed() && !disp.key()) { - - // Get a vector direction from the user. - const CImg selection = img.get_select(disp,1); - - // Draw a gradient using the selected coordinated. - col.rand(100,255); - printf("Gradient with %s from color (%d,%d,%d) to transparency\n", - CImg<>::get_gradient_str(shape,profile),col(0),col(1),col(2)); - img.draw_gradient(selection(0),selection(1),selection(3),selection(4), - col.data(),0,shape,profile,.7f).display(disp); - } - - - // transparency to color 1 - if (file_i) img.load(file_i).resize(-100,-100,-100,3); - else img.assign(300,200,1,3,0); - img.display(disp); - disp.show().flush(); - while (!disp.is_closed() && !disp.key()) { - - // Get a vector direction from the user. - const CImg selection = img.get_select(disp,1); - - // Draw a gradient using the selected coordinated. - col.rand(100,255); - printf("Gradient with %s from transparency to color (%d,%d,%d)\n", - CImg<>::get_gradient_str(shape,profile),col(0),col(1),col(2)); - img.draw_gradient(selection(0),selection(1),selection(3),selection(4), - 0,col.data(),shape,profile,.7f).display(disp); - } - - // random - if (file_i) img.load(file_i).resize(-100,-100,-100,3); - else img.assign(300,200,1,3,0); - disp.set_title("Random color gradient").show().flush(); - CImg visu(img); - visu.display(disp); - while (!disp.is_closed() && !disp.key()) { - const int - x = (int)(cimg::rand()*visu.width()), - y = (int)(cimg::rand()*visu.height()), - rx = (int)((cimg::rand()*25+5)*(cimg::rand()>.5?-1:1)), - ry = (int)((cimg::rand()*25+5)*(cimg::rand()>.5?-1:1)); - col.rand(64,255); - img.draw_gradient(x,y,x+rx,y+ry,col.data(),0,shape,profile,.4f); - visu = img; - visu.draw_text(10,10,"%.1ffps",col2,0,1,13,disp.frames_per_second()).display(disp); - if (disp.is_resized()) disp.resize(); - } - - return 0; -} diff --git a/deps/CImg/examples/use_jpeg_buffer.cpp b/deps/CImg/examples/use_jpeg_buffer.cpp deleted file mode 100644 index ccb22da..0000000 --- a/deps/CImg/examples/use_jpeg_buffer.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - # - # File : use_jpeg_buffer.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/jpeg_buffer.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Paolo Prete - # ( p4olo_prete(at)yahoo.it ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// These includes are necessary to get the plug-in compile ! -#include -#include -#include - -// Define plugin and include the CImg Library. -#define cimg_plugin "plugins/jpeg_buffer.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main() { - - // Create a jpeg memory buffer from the content of a jpeg file. - // (this is for testing purposes only) - const char *filename_input = "foo.jpg"; - std::fprintf(stderr," - Reading file '%s'\n",filename_input); - std::FILE *file_input = std::fopen(filename_input,"rb"); - if (!file_input) { std::fprintf(stderr,"Input JPEG file not found !"); std::exit(0); } - - std::fprintf(stderr," - Construct input JPEG-coded buffer\n"); - unsigned buf_size = 500000; // Put the file size here ! - JOCTET *buffer_input = new JOCTET[buf_size]; - if (std::fread(buffer_input,sizeof(JOCTET),buf_size,file_input)) std::fclose(file_input); - // -> 'buffer_input' is now a valid jpeg-coded memory buffer. - - // Create a CImg instance from the jpeg-coded buffer using the plug-in function. - std::fprintf(stderr," - Create CImg instance from JPEG-coded buffer\n"); - CImg img; - img.load_jpeg_buffer(buffer_input, buf_size); - delete[] buffer_input; - - // Do you image processing stuff here .... - // Here, we just mirror the image and write "hello". - std::fprintf(stderr," - Do simple processing\n"); - const unsigned char purple[] = { 255, 0, 0 }; - const unsigned char black[] = { 0, 0, 0 }; - img.mirror('y').draw_text(0,0," Hello! ",purple,black,1,57); - - // Display image to see if everything's fine. - img.display("Using 'jpeg_buffer.h' plugin"); - - // Define a new JOCTET array where the processed image has to be saved - // (we don't know its dimension before compressing it, therefore we have to allocate enough memory ) - std::fprintf(stderr," - Construct output JPEG-coded buffer\n"); - JOCTET *buffer_output = new JOCTET[2*buf_size]; - - // Save processed image into this JOCTET buffer, compressed as jpeg. - // This is done again by using the plug-in function. - img.save_jpeg_buffer(buffer_output,buf_size,60); - // Note that here, the variable 'buf_size' contains the length of the - // data which have been written in the given output buffer. - - // Copy the content of the above array into a new file - // (it should give you a valid JPEG file then !) - const char *filename_output = "foo_output.jpg"; - std::fprintf(stderr," - Save output file '%s'\n",filename_output); - std::FILE* file_output = std::fopen(filename_output,"wb"); - std::fwrite(buffer_output, sizeof(JOCTET), buf_size, file_output); - std::fclose(file_output); - delete[] buffer_output; - - std::fprintf(stderr," - All done !\n"); - return 0; -} diff --git a/deps/CImg/examples/use_nlmeans b/deps/CImg/examples/use_nlmeans deleted file mode 100755 index 8b7a8a5..0000000 Binary files a/deps/CImg/examples/use_nlmeans and /dev/null differ diff --git a/deps/CImg/examples/use_nlmeans.cpp b/deps/CImg/examples/use_nlmeans.cpp deleted file mode 100644 index 8f78f55..0000000 --- a/deps/CImg/examples/use_nlmeans.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - # - # File : use_nlmeans.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/nlmeans.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Jerome Boulanger - # ( http://www.irisa.fr/vista/Equipe/People/Jerome.Boulanger.html ) - # - # Benchmark : (CPU intel pentium 4 2.60GHz) compiled with cimg_debug=0. - # patch lambda* alpha T sigma PSNR - # 3x3 15 9x9 3.6s 20 28.22 - # 5x5 17 15x15 22.2s 20 27.91 - # 7x7 42 21x21 80.0s 20 28.68 - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#define cimg_plugin "plugins/nlmeans.h" -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main(int argc,char **argv) { - - // Read command line argument s - //----------------------------- - cimg_usage("Non-local means denoising algorithm.\n [1] Buades, A. Coll, B. and Morel, J.: A review of image " - "denoising algorithms, with a new one. Multiscale Modeling and Simulation: A SIAM Interdisciplinary " - "Journal 4 (2004) 490-530 \n [2] Gasser, T. Sroka,L. Jennen Steinmetz,C. Residual variance and residual " - "pattern nonlinear regression. Biometrika 73 (1986) 625-659 \n Build : "); - - // input/output and general options - const char *file_i = cimg_option("-i",cimg_imagepath "milla.bmp","Input image"); - const char *file_o = cimg_option("-o",(char*)NULL,"Output file"); - const double zoom = cimg_option("-zoom",1.0,"Image magnification"); - const double noiseg = cimg_option("-ng",0.0,"Add gauss noise before aplying the algorithm"); - const double noiseu = cimg_option("-nu",0.0,"Add uniform noise before applying the algorithm"); - const double noises = cimg_option("-ns",0.0,"Add salt&pepper noise before applying the algorithm"); - const unsigned int visu = cimg_option("-visu",1,"Visualization step (0=no visualization)"); - - // non local means options - const int patch_size = cimg_option("-p",1,"Half size of the patch (2p+1)x(2p+1)"); - const float lambda = (float)cimg_option("-lambda",-1.0f,"Bandwidth as defined in [1] (-1 : automatic bandwidth)"); - const double sigma = cimg_option("-sigma",-1,"Noise standard deviation (-1 : robust estimation)"); - const int alpha = cimg_option("-alpha",3,"Neighborhood size (3)"); - const int sampling = cimg_option("-sampling",1,"Sampling of the patch (1: slow, 2: fast)"); - - // Read image - //------------ - CImg<> img; - if (file_i) { - img = CImg<>(file_i); - if (zoom>1) - img.resize((int)(img.width()*zoom),(int)(img.height()*zoom),(int)(img.depth()*zoom),-100,3); - } else throw CImgException("You need to specify at least one input image (option -i)"); - CImg<> original=img; - - // Add some noise - //----------------- - img.noise(noiseg,0).noise(noiseu,1).noise(noises,2); - - // Apply the filter - //--------------------- - long tic = cimg::time(); - CImg<> dest; - dest = img.get_nlmeans(patch_size,lambda,alpha,sigma,sampling); - long tac = cimg::time(); - - // Save result - //----------------- - if (file_o) dest.cut(0,255.f).save(file_o); - - // Display (option -visu) - //------------------- - if (visu){ - fprintf(stderr,"Image computed in %f s \n",(float)(tac-tic)/1000.); - fprintf(stderr,"The pnsr is %f \n",20.*std::log10(255./std::sqrt( (dest-original).pow(2).sum()/original.size() ))); - if (noiseg==0 && noiseu==0 && noises==0) - CImgList<>(original,dest,((dest-original)*=2)+=128).display("Original + Restored + Estimated Noise"); - - else { - CImgList<>(original,img,dest,((dest-img)*=2)+=128,((dest-original)*=2)+=128).display("Original + Noisy + Restored + Estimated Noise + Original Noise"); - } - } - - return 0; -} - - diff --git a/deps/CImg/examples/use_skeleton b/deps/CImg/examples/use_skeleton deleted file mode 100755 index 3106724..0000000 Binary files a/deps/CImg/examples/use_skeleton and /dev/null differ diff --git a/deps/CImg/examples/use_skeleton.cpp b/deps/CImg/examples/use_skeleton.cpp deleted file mode 100644 index e1fa03c..0000000 --- a/deps/CImg/examples/use_skeleton.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - # - # File : use_skeleton.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/skeleton.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Francois-Xavier Dupe - # ( http://www.greyc.ensicaen.fr/~fdupe/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include -#define cimg_plugin "plugins/skeleton.h" -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Main procedure -//---------------- -int main (int argc, char **argv) { - - cimg_usage("Compute the skeleton of a shape, using Hamilton-Jacobi equations"); - - // Read command line arguments - cimg_help("Input/Output options\n" - "--------------------"); - const char* file_i = cimg_option("-i",cimg_imagepath "milla.bmp","Input (black&white) image"); - const int median = cimg_option("-median",0,"Apply median filter"); - const bool invert = cimg_option("-inv",false,"Invert image values"); - const char* file_o = cimg_option("-o",(char*)0,"Output skeleton image"); - const bool display = cimg_option("-visu",true,"Display results"); - - cimg_help("Skeleton computation parameters\n" - "-------------------------------"); - const float thresh = cimg_option("-t",-0.3f,"Threshold"); - const bool curve = cimg_option("-curve",false,"Create medial curve"); - - cimg_help("Torsello correction parameters\n" - "------------------------------"); - const bool correction = cimg_option("-corr",false,"Torsello correction"); - const float dlt1 = 2; - const float dlt2 = cimg_option("-dlt",1.0f,"Discrete step"); - - // Load the image (forcing it to be scalar with 2 values { 0,1 }). - CImg image0(file_i), image = image0.get_norm().quantize(2).normalize(0.0f,1.0f); - if (median) image.blur_median(median); - if (invert) (image-=1)*=-1; - if (display) (image0.get_normalize(0,255),image.get_normalize(0,255)).display("Input image - Binary image"); - - // Compute distance map. - CImgList visu; - CImg distance = image.get_distance(0); - if (display) visu.insert(distance); - - // Compute the gradient of the distance function, and the flux (divergence) of the gradient field. - const CImgList grad = distance.get_gradient("xyz"); - CImg flux = image.get_flux(grad,1,1); - if (display) visu.insert(flux); - - // Use the Torsello correction of the flux if necessary. - if (correction) { - CImg - logdensity = image.get_logdensity(distance,grad,flux,dlt1), - nflux = image.get_corrected_flux(logdensity,grad,flux,dlt2); - if (display) visu.insert(logdensity).insert(nflux); - flux = nflux; - } - - if (visu) { - cimglist_apply(visu,normalize)(0,255); - visu.display(visu.size()==2?"Distance function - Flux":"Distance function - Flux - Log-density - Corrected flux"); - } - - // Compute the skeleton - const CImg skel = image.get_skeleton(flux,distance,curve,thresh); - if (display) { - (image0.resize(-100,-100,1,3)*=0.7f).get_shared_channel(1)|=skel*255.0; - image0.draw_image(0,0,0,0,image*255.0,0.5f).display("Image + Skeleton"); - } - - // Save output image if necessary. - if (file_o) skel.save(file_o); - - return 0; -} diff --git a/deps/CImg/examples/use_tiff_stream.cpp b/deps/CImg/examples/use_tiff_stream.cpp deleted file mode 100644 index 8acd419..0000000 --- a/deps/CImg/examples/use_tiff_stream.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - # - # File : use_tiff_stream.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/jpeg_buffer.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Wolf Blecher - # ( Wolf.Blecher(at)sirona.com ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - - -#include -// These includes are necessary to get the plug-in compile ! Don't forget to link with 'libtiff' and 'libtiffxx' ! -#include "tiffio.h" -#include "tiffio.hxx" - -// Define plugin and include the CImg Library. -#define cimg_plugin "plugins/tiff_stream.h" -#include "CImg.h" -using namespace cimg_library; - -// Main procedure -//---------------- -int main() { - - std::ifstream inFile("input.tif", std::ifstream::in | std::ifstream::binary); - std::ofstream outFile("outFile.tif", std::ofstream::out | std::ifstream::binary); - - if (!inFile.good()) - { - std::cout << "Error Reading from infile" << std::endl; - } - - cimg_library::CImg imgIn; - imgIn.load_tiff(&inFile); - imgIn.display(); - CImg imgOut = imgIn.save_tiff(&outFile, 2U); - imgOut.display(); - - inFile.close(); - outFile.close(); - - inFile.open("outFile.tif", std::ifstream::in | std::ifstream::binary); - imgIn.load_tiff(&inFile); - imgIn.display(); - inFile.close(); - return 0; -} diff --git a/deps/CImg/examples/wavelet_atrous b/deps/CImg/examples/wavelet_atrous deleted file mode 100755 index 41a24db..0000000 Binary files a/deps/CImg/examples/wavelet_atrous and /dev/null differ diff --git a/deps/CImg/examples/wavelet_atrous.cpp b/deps/CImg/examples/wavelet_atrous.cpp deleted file mode 100644 index 6c864bd..0000000 --- a/deps/CImg/examples/wavelet_atrous.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* - # - # File : wavelet_atrous.cpp - # ( C++ source file ) - # - # Description : Performs a 2D or 3D 'a trous' wavelet transform - # (using a cubic spline) on an image or a video sequence. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Author : Renaud Peteri - # ( Renaud.Peteri(at)mines-paris.org ) - # Andrea Onofri - # ( Andrea.Onofri(at)teletu.it ) - # - # Institution : CWI, Amsterdam - # - # Date : February 2005 - # - # References : Starck, J.-L., Murtagh, F. and Bijaoui, A., - # Image Processing and Data Analysis: The Multiscale Approach, - # Cambridge University Press, 1998. - # (Hardback and softback, ISBN 0-521-59084-1 and 0-521-59914-8.) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#include "CImg.h" -using namespace cimg_library; -#ifndef cimg_imagepath -#define cimg_imagepath "img/" -#endif - -// Define convolution mask. -CImg mask(const unsigned char dirIdx, const unsigned char scale) { - int d1 = 1 << (scale-1); - int d2 = 1 << scale; - int c = d2; - int vecLen = (1 << (scale + 1)) + 1; - - float valC = 0.375f; // 6/16 - float valD1 = 0.25f; // 4/16 - float valD2 = 0.0625f; // 1/16 - - switch(dirIdx){ - case 0: //x - { - CImg m(vecLen,1,1);m.fill(0); - m(c) = valC; - m(c-d1) = m(c+d1) = valD1; - m(c-d2) = m(c+d2) = valD2; - return m; - } - case 1: //y - { - CImg m(1,vecLen,1);m.fill(0); - m(0,c) = valC; - m(0,c-d1) = m(0,c+d1) = valD1; - m(0,c-d2) = m(0,c+d2) = valD2; - return m; - } - case 2: //t - { - CImg m(1,1,vecLen);m.fill(0); - m(0,0,c) = valC; - m(0,0,c-d1) = m(0,0,c+d1) = valD1; - m(0,0,c-d2) = m(0,0,c+d2) = valD2; - return m; - } - default: throw CImgException("Error, unknow decompostion axe, dirIdx = '%c'.",dirIdx); - } -} - -/*------------------ - Main procedure - ----------------*/ -int main(int argc,char **argv) { - - cimg_usage("Perform an 'a trous' wavelet transform (using a cubic spline) on an image or on a video sequence.\n" - "This wavelet transform is undecimated and produces 2 images/videos at each scale. For an example of\n" - "decomposition on a video, try -i img/trees.inr (sequence from the MIT).\n" - "\t(Type -h for help)"); - - // Read command line parameters - const char - *name_i = cimg_option("-i",cimg_imagepath "lena.pgm","Input image or video"), - *name_o = cimg_option("-o","","Name of the multiscale analysis output"), - *axe_dec = cimg_option("-axe",(char*)NULL,"Perform the multiscale decomposition in just one direction ('x', 'y' or 't')"); - const unsigned int - s = cimg_option("-s",3,"Scale of decomposition"); - - const bool help = cimg_option("-h",false,"Display Help"); - if(help) exit(0); - - // Initialize Image Data - std::fprintf(stderr," - Load image sequence '%s'...\n",cimg::basename(name_i)); - const CImg texture_in(name_i); - CImg mask_conv; - CImgList res(s,texture_in.width(),texture_in.height(),texture_in.depth()); - CImgList wav(s,texture_in.width(),texture_in.height(),texture_in.depth()); - cimglist_for(res,l) { res(l).fill(0.0); wav(l).fill(0.0);} - unsigned int i; - - int firstDirIdx = 0; - int lastDirIdx = 2; - if (axe_dec){// The multiscale decomposition will be performed in just one direction - char c = cimg::uncase(axe_dec[0]); - switch(c) { - case 'x': {firstDirIdx = 0; break;} - case 'y': {firstDirIdx = 1; break;} - case 't': {firstDirIdx = 2; break;} - default: throw CImgException("Error, unknow decompostion axe '%c', try 'x', 'y' or 't'",c); - } - lastDirIdx = firstDirIdx;//only one direction - } - - for(i=0;i get_load_foo(const char *filename) { - std::fprintf(stderr,"Load '%s' here..\n",filename); - return CImg(512,512,1,3,0).noise(30); -} - -CImg& load_foo(const char *filename) { - return get_load_foo(filename).swap(*this); -} - -// This function saves the instance image into a ".foo" file. -//----------------------------------------------------------- -const CImg& save_foo(const char *filename) const { - std::fprintf(stderr,"Save '%s' here..\n",filename); - return *this; -} - -// The code below allows to add the support for the specified extension. -//--------------------------------------------------------------------- -#ifndef cimg_load_plugin -#define cimg_load_plugin(filename) \ - if (!cimg::strncasecmp(cimg::split_filename(filename),"foo",3)) return load_foo(filename); -#endif -#ifndef cimg_save_plugin -#define cimg_save_plugin(filename) \ - if (!cimg::strncasecmp(cimg::split_filename(filename),"foo",3)) return save_foo(filename); -#endif - -// End of the plugin. -//------------------- -#endif diff --git a/deps/CImg/plugins/chlpca.h b/deps/CImg/plugins/chlpca.h deleted file mode 100644 index 354a568..0000000 --- a/deps/CImg/plugins/chlpca.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - # - # File : chlpca.cpp - # ( C++ source file ) - # - # Description : Example of use for the CImg plugin 'plugins/chlpca.h'. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Jerome Boulanger - # ( http://www.irisa.fr/vista/Equipe/People/Jerome.Boulanger.html ) - # - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -// Define some useful macros. - -//! Some loops -#define cimg_for_step1(bound,i,step) for (int i = 0; i<(int)(bound); i+=step) -#define cimg_for_stepX(img,x,step) cimg_for_step1((img)._width,x,step) -#define cimg_for_stepY(img,y,step) cimg_for_step1((img)._height,y,step) -#define cimg_for_stepZ(img,z,step) cimg_for_step1((img)._depth,z,step) -#define cimg_for_stepXY(img,x,y,step) cimg_for_stepY(img,y,step) cimg_for_stepX(img,x,step) -#define cimg_for_stepXYZ(img,x,y,step) cimg_for_stepZ(img,z,step) cimg_for_stepY(img,y,step) cimg_for_stepX(img,x,step) - -//! Loop for point J(xj,yj) in the neighborhood of a point I(xi,yi) of size (2*rx+1,2*ry+1) -/** - Point J is kept inside the boundaries of the image img. - example of summing the pixels values in a neighborhood 11x11 - cimg_forXY(img,xi,yi) cimg_for_windowXY(img,xi,yi,xj,yj,5,5) dest(yi,yi) += src(xj,yj); -**/ -#define cimg_forXY_window(img,xi,yi,xj,yj,rx,ry) \ -for (int yi0=cimg::max(0,yi-ry), yi1=cimg::min(yi+ry,(int)img.height()-1), yj=yi0;yj<=yi1;++yj) \ -for (int xi0=cimg::max(0,xi-rx), xi1=cimg::min(xi+rx,(int)img.width()-1), xj=xi0;xj<=xi1;++xj) - -#define cimg_forXYZ_window(img,xi,yi,zi,xj,yj,zj,rx,ry,rz) \ -for (int zi0=cimg::max(0,zi-rz), zi1=cimg::min(zi+rz,(int)img.depth()-1) , zj=zi0;zj<=zi1;++zj) \ -for (int yi0=cimg::max(0,yi-ry), yi1=cimg::min(yi+ry,(int)img.height()-1), yj=yi0;yj<=yi1;++yj) \ -for (int xi0=cimg::max(0,xi-rx), xi1=cimg::min(xi+rx,(int)img.width()-1) , xj=xi0;xj<=xi1;++xj) - -//! Crop a patch in the image around position x,y,z and return a column vector -/** - \param x x-coordinate of the center of the patch - \param y y-coordinate of the center of the patch - \param z z-coordinate of the center of the patch - \param px the patch half width - \param px the patch half height - \param px the patch half depth - \return img.get_crop(x0,y0,z0,x1,y1,z1).unroll('y'); -**/ -CImg get_patch(int x, int y, int z, - int px, int py, int pz) const { - if (depth() == 1){ - const int x0 = x - px, y0 = y - py, x1 = x + px, y1 = y + py; - return get_crop(x0, y0, x1, y1).unroll('y'); - } else { - const int - x0 = x - px, y0 = y - py, z0 = z - pz, - x1 = x + px, y1 = y + py, z1 = z + pz; - return get_crop(x0, y0, z0, x1, y1, z1).unroll('y'); - } -} - -//! Extract a local patch dictionnary around point xi,yi,zi -CImg get_patch_dictionnary(const int xi, const int yi, const int zi, - const int px, const int py, const int pz, - const int wx, const int wy, const int wz, - int & idc) const { - const int - n = (2*wx+1) * (2*wy+1) * (2 * (depth()==1?0:wz) + 1), - d = (2*px+1) * (2*py+1) * (2 * (depth()==1?0:px) + 1) * spectrum(); - CImg<> S(n, d); - int idx = 0; - if (depth() == 1) { - cimg_forXY_window((*this), xi, yi, xj, yj, wx, wy){ - CImg patch = get_patch(xj, yj, 0, px, py, 1); - cimg_forY(S,y) S(idx,y) = patch(y); - if (xj==xi && yj==yi) idc = idx; - idx++; - } - } else { - cimg_forXYZ_window((*this), xi,yi,zi,xj,yj,zj,wx,wy,wz){ - CImg patch = get_patch(xj, yj, zj, px, py, pz); - cimg_forY(S,y) S(idx,y) = patch(y); - if (xj==xi && yj==yi && zj==zi) idc = idx; - idx++; - } - } - S.columns(0, idx - 1); - return S; -} - -//! Add a patch to the image -/** - \param x x-coordinate of the center of the patch - \param y y-coordinate of the center of the patch - \param z z-coordinate of the center of the patch - \param img the patch as a 1D column vector - \param px the patch half width - \param px the patch half height - \param px the patch half depth -**/ -CImg & add_patch(const int xi, const int yi, const int zi, - const CImg & patch, - const int px, const int py, const int pz) { - const int - x0 = xi - px, y0 = yi - py, z0 = (depth() == 1 ? 0 : zi - pz), - sx = 2 * px + 1, sy = 2 * py + 1, sz = (depth() == 1 ? 1 : 2 * pz +1); - draw_image(x0, y0, z0, 0, patch.get_resize(sx, sy, sz, spectrum(), -1), -1); - return (*this); -} - -//! Add a constant patch to the image -/** - \param x x-coordinate of the center of the patch - \param y y-coordinate of the center of the patch - \param z z-coordinate of the center of the patch - \param value in the patch - \param px the patch half width - \param px the patch half height - \param px the patch half depth -**/ -CImg & add_patch(const int xi, const int yi, const int zi, const T value, - const int px, const int py, const int pz) { - const int - x0 = xi - px, y0 = yi - py, z0 = (depth() == 1 ? 0 : zi - pz), - x1 = xi + px, y1 = yi + py, z1 = (depth() == 1 ? 0 : zi + pz); - draw_rectangle(x0, y0, z0, 0, x1, y1, z1, spectrum()-1, value, -1); -return (*this); -} - -//! CHLPCA denoising from the PhD thesis of Hu Haijuan -/** - \param px the patch half width - \param px the patch half height - \param px the patch half depth - \param wx the training region half width - \param wy the training region half height - \param wz the training region half depth - \param nstep the subsampling of the image domain - \param nsim the number of patches used for training as a factor of the patch size - \param lambda_min the threshold on the eigen values of the PCA for dimension reduction - \param threshold the threshold on the value of the coefficients - \param pca_use_svd if true use the svd approach to perform the pca otherwise use the covariance method - \note please cite the PhD thesis of Hu Haijuan http://www.univ-ubs.fr/soutenance-de-these-hu-haijuan-337653.kjsp?RH=1318498222799 - **/ -CImg get_chlpca(const int px, const int py, const int pz, - const int wx, const int wy, const int wz, - const int nstep, const float nsim, - const float lambda_min, const float threshold, - const float noise_std, const bool pca_use_svd) const { - const int - nd = (2*px+1) * (2*py+1) * (depth()==1?1:2*pz+1) * spectrum(), - K = nsim * nd; -#ifdef DEBUG - fprintf(stderr,"chlpca: p:%dx%dx%d,w:%dx%dx%d,nd:%d,K:%d\n", - 2*px+1,2*py+1,2*pz+1,2*wx+1,2*wy+1,2*wz+1,nd,K); -#endif - float sigma; - if (noise_std < 0) sigma = std::sqrt(variance_noise()); - else sigma = noise_std; - CImg dest(*this), count(*this); - dest.fill(0); - count.fill(0); - cimg_for_stepZ(*this,zi,(depth()==1||pz==0)?1:nstep){ -#ifdef cimg_use_openmp -#pragma omp parallel for -#endif - cimg_for_stepXY((*this),xi,yi,nstep){ - // extract the training region X - int idc = 0; - CImg S = get_patch_dictionnary(xi,yi,zi,px,py,pz,wx,wy,wz,idc); - // select the K most similar patches within the training set - CImg Sk(S); - CImg index(S.width()); - if (K < Sk.width() - 1){ - CImg mse(S.width()); - CImg perms; - cimg_forX(S,x){mse(x) = S.get_column(idc).MSE(S.get_column(x)); } - mse.sort(perms,true); - cimg_foroff(perms,i) { - cimg_forY(S,j) Sk(i,j) = S(perms(i),j); - index(perms(i)) = i; - } - Sk.columns(0, K); - perms.threshold(K); - } else { - cimg_foroff(index,i) index(i)=i; - } - // centering the patches - CImg M(1, Sk.height(), 1, 1, 0); - cimg_forXY(Sk,x,y) { M(y) += Sk(x,y); } - M /= (T)Sk.width(); - cimg_forXY(Sk,x,y) { Sk(x,y) -= M(y); } - // compute the principal component of the training set S - CImg P, lambda; - if (pca_use_svd) { - CImg V; - Sk.get_transpose().SVD(V,lambda,P,100); - } else { - (Sk * Sk.get_transpose()).symmetric_eigen(lambda, P); - lambda.sqrt(); - } - // dimension reduction - int s = 0; - const T tx = std::sqrt((double)Sk.width()-1.0) * lambda_min * sigma; - while((lambda(s) > tx) && (s < ((int)lambda.size() - 1))) { s++; } - P.columns(0,s); - // project all the patches on the basis (compute scalar product) - Sk = P.get_transpose() * Sk; - // threshold the coefficients - if (threshold > 0) { Sk.threshold(threshold, 1); } - // project back to pixel space - Sk = P * Sk; - // recenter the patches - cimg_forXY(Sk,x,y) { Sk(x,y) += M(y); } - int j = 0; - cimg_forXYZ_window((*this),xi,yi,zi,xj,yj,zj,wx,wy,wz){ - const int id = index(j); - if (id < Sk.width()) { - dest.add_patch(xj, yj, zj, Sk.get_column(id), px, py, pz); - count.add_patch(xj, yj, zj, (T)1, px, py, pz); - } - j++; - } - } - } - cimg_foroff(dest, i) { - if(count(i) != 0) { dest(i) /= count(i); } - else { dest(i) = (*this)(i); } - } - return dest; -} - -//! CHLPCA denoising from the PhD thesis of Hu Haijuan -/** - \param px the patch half width - \param px the patch half height - \param px the patch half depth - \param wx the training region half width - \param wy the training region half height - \param wz the training region half depth - \param nstep the subsampling of the image domain - \param nsim the number of patches used for training as a factor of the patch size - \param lambda_min the threshold on the eigen values of the PCA for dimension reduction - \param threshold the threshold on the value of the coefficients - \param pca_use_svd if true use the svd approach to perform the pca otherwise use the covariance method - \note please cite the PhD thesis of Hu Haijuan http://www.univ-ubs.fr/soutenance-de-these-hu-haijuan-337653.kjsp?RH=1318498222799 - **/ -CImg & chlpca(const int px, const int py, const int pz, - const int wx, const int wy, const int wz, - const int nstep, const float nsim, - const float lambda_min, const float threshold, - const float noise_std, const bool pca_use_svd) { - (*this) = get_chlpca(px, py, pz, wx, wy, wz, nstep, nsim, lambda_min, - threshold, noise_std, pca_use_svd); - return (*this); -} - -//! CHLPCA denoising from the PhD thesis of Hu Haijuan -/** - \param p the patch half size - \param w the training region half size - \param nstep the subsampling of the image domain - \param nsim the number of patches used for training as a factor of the patch size - \param lambda_min the threshold on the eigen values of the PCA for dimension reduction - \param threshold the threshold on the value of the coefficients - \param pca_use_svd if true use the svd approach to perform the pca otherwise use the covariance method - \note please cite the PhD thesis of Hu Haijuan http://www.univ-ubs.fr/soutenance-de-these-hu-haijuan-337653.kjsp?RH=1318498222799 - **/ -CImg get_chlpca(const int p=3, const int w=10, - const int nstep=5, const float nsim=10, - const float lambda_min=2, const float threshold = -1, - const float noise_std=-1, const bool pca_use_svd=true) const { - if (depth()==1) return get_chlpca(p, p, 0, w, w, 0, nstep, nsim, lambda_min, - threshold, noise_std, pca_use_svd); - else return get_chlpca(p, p, p, w, w, w, nstep, nsim, lambda_min, - threshold, noise_std, pca_use_svd); -} - -CImg chlpca(const int p=3, const int w=10, - const int nstep=5, const float nsim=10, - const float lambda_min=2, const float threshold = -1, - const float noise_std=-1, const bool pca_use_svd=true) { - (*this) = get_chlpca(p, w, nstep, nsim, lambda_min, - threshold, noise_std, pca_use_svd); - return (*this); -} diff --git a/deps/CImg/plugins/cimgIPL.h b/deps/CImg/plugins/cimgIPL.h deleted file mode 100644 index 81250fa..0000000 --- a/deps/CImg/plugins/cimgIPL.h +++ /dev/null @@ -1,122 +0,0 @@ -/* -# -# File : cimgIPL.h -# ( C++ header file - CImg plug-in ) -# -# Description : CImg plug-in providing the CImg->IPL and IPL->CImg -# conversions for generic image types -# ( IPL = Intel Performance Library ) -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Copyright : newleft (haibo.zheng@gmail.com) -# newleftist@hotmail.com -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# -*/ - -#ifndef cimg_plugin_cimgIPL -#define cimg_plugin_cimgIPL - -// Conversion IPL -> CImg (constructor) -CImg(const IplImage* src):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(src); -} - -// Conversion IPL -> CImg (in-place constructor) -CImg& assign(const IplImage* src) { - if (!src) return assign(); - switch (src->depth) { - case IPL_DEPTH_1U: { // 1-bit int. - IplImage *src1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); - cvConvert(src,src1); - CImg((unsigned char*)src1->imageData,src1->nChannels,src1->width,src1->height,1,true). - get_permute_axes("yzcx").move_to(*this); - cvReleaseImage(&src1); - } break; - case IPL_DEPTH_8U: // 8-bit unsigned int. - CImg((unsigned char*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_8S: // 8-bit signed int. - CImg((char*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_16U: // 16-bit unsigned int. - CImg((unsigned short*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_16S: // 16-bit signed int. - CImg((short*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_32S: // 32-bit signed int. - CImg((int*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_32F: // 32-bit float. - CImg((float*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - case IPL_DEPTH_64F: // 64-bit double. - CImg((double*)src->imageData,src->nChannels,src->width,src->height,1,true). - get_permute_axes("yzcx").move_to(*this); - break; - default: - throw CImgInstanceException("CImg<%s>::assign(const IplImage* img) : IplImage depth is invalid.", - pixel_type()); - break; - } - if (!std::strcmp(src->channelSeq,"BGR")) mirror('v'); - else if (!std::strcmp(src->channelSeq,"BGRA")) get_shared_channels(0,2).mirror('v'); - return *this; -} - -// Conversion CImg -> IPL -IplImage* get_IPL(const unsigned int z=0) const { - if (is_empty()) - throw CImgInstanceException("CImg<%s>::get_IPL() : instance image (%u,%u,%u,%u,%p) is empty.", - pixel_type(),_width,_height,_depth,_spectrum,_data); - if (z>=_depth) - throw CImgInstanceException("CImg<%s>::get_IPL() : specified slice %u is out of image bounds (%u,%u,%u,%u,%p).", - pixel_type(),z,_width,_height,_depth,_spectrum,_data); - const CImg - _slice = _depth>1?get_slice(z):CImg(), - &slice = _depth>1?_slice:*this; - CImg buf(slice); - if (_spectrum==3 || _spectrum==4) buf.get_shared_channels(0,2).mirror('v'); - buf.permute_axes("cxyz"); - IplImage* const dst = cvCreateImage(cvSize(_width,_height),sizeof(T)*8,_spectrum); - std::memcpy(dst->imageData,buf.data(),buf.size()*sizeof(T)); - return dst; -} - -#endif diff --git a/deps/CImg/plugins/cimg_ipl.h b/deps/CImg/plugins/cimg_ipl.h deleted file mode 100644 index cdb3c18..0000000 --- a/deps/CImg/plugins/cimg_ipl.h +++ /dev/null @@ -1,303 +0,0 @@ -/* -# -# File : cimg_ipl.h -# ( C++ header file - CImg plug-in ) -# -# Description : CImg plug-in providing the CImg->IPL and IPL->CImg -# conversions for generic image types -# ( IPL = Intel Performance Library ) -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Copyright : Hon-Kwok Fung (oldfung@graduate.hku.hk) -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# -# -# -# Usage : -# -# In your application code, #define the path of this plugin file as -# something like -# -# #define cimg_plugin1 "../some_directory/cimg_ipl.h" -# -# You should define such macro before the line #include . The source -# code of CImg provides eight slots cimg_plugin1, cimg_plugin2, ..., -# cimg_plugin8 for insertion of plugins. You may assign a different slot to -# this plugin if cimg_plugin1 is already occupied. -# -# You need also to include prior to CImg.h the following files : -# -# #include -# #include -# -# To create an IplImage from a CImg instance, you may write: -# -# // Given a CImg instance, say, c_img, ... -# IplImage *img = c_img.get_IplImage(); // (a) copy construction of IplImage -# -# CImg supports any number of color channels, while IplImage supports up to 4 -# channels. When the number of channels is 1 or 2, it is hard to tell if these -# channels have genuine color semantics. Even if the number of channels is 3, -# CImg and IplImage can have different channel orders (IplImage: usually BGR; -# CImg: always RGB). The default behaviour of get_IplImage() is to assume that -# the IplImage instance has a BGR channel order (which is the default order in -# OpenCV) and swap the channel order in the destination image buffer. That is, -# the default is to map OpenCV's blue (1st) and red (3rd) channels to CImg's -# blue (2nd) and red (0th) channel respectively. If the user wants to specify -# this default option explicitly, he/she can write: -# -# IplImage *img = c_img.get_IplImage(CV_CVTIMG_SWAP_RB); // identical to (a) -# -# where CV_CVTIMG_SWAP_RB is a flag value defined by OpenCV. If the user wants -# to keep the channel order unchanged (i.e. maps IplImage's 1st, 2nd, ... -# channels to CImg's 0th, 1st, ... channels resp.), he/she can use a zero flag -# value: -# -# IplImage *img = c_img.get_IplImage(0); -# -# However, when the number of channels is smaller than 3, this option will be -# ignored and the default behaviour (flag value CV_CVTIMG_SWAP_RB) will be -# assumed. -# -# CImg also differs from IplImage in that the latter represents a 2D image but -# the former can be a 3D image. If the size of the z-dimension (depth) of the -# CImg instance is larger than 1, one must choose which slice to copy: -# -# IplImage *img1 = c_img.get_IplImage(0, z); -# IplImage *img2 = c_img.get_IplImage(CV_CVTIMG_SWAP_RB, z); -# -# The default z-value is 0. -# -# To do conversion in another direction, write something like this: -# -# // Suppose img1 and img2 are two pointers to IplImage, where -# // img1->depth == IPL_DEPTH_8U and img2->depth == IPL_DEPTH_32F. -# CImg c_img1(img1); // (b) -# CImg c_img1(img1,CV_CVTIMG_SWAP_RB); // identical to (b) -# CImg c_img2(img2); // (c) -# CImg c_img2(img2,CV_CVTIMG_SWAP_RB); // identical to (c) -# -# Again, if one wants to keep the channel order unchanged when the number of -# channels is >= 3, one can write: -# -# CImg c_img1(img1,0); -# CImg c_img2(img2,0); -# -# All such conversions are deep copy constructions, because CImg and IplImage -# have different internal memory layouts. -# -# Technically, we can write code to do conversion between an IplImage instance -# and a CImg instance with different pixel types (e.g. between an IPL_DEPTH_8S -# IplImage instance and a CImg instance), but such conversion is -# problematic because either the semantics of the pixel type is lost or some -# casting is needed. Therefore, the conversion code in this plugin only allows -# conversions of images of identical pixel types. For instance, in line (b) of -# the example code above, if one writes -# -# CImg c_img1(img1); // error; img1's pixel type is IPL_DEPTH_8U -# -# the conversion will generate a runtime error, despite sizeof(char) is equal -# to sizeof(unsigned char). The is certainly inconvenient to some users as -# the pixel type of CImg has to be defined at compile time but the pixel type -# of IplImage is determined at runtime. -# -# Some architecture-dependent code is contained in the two helper functions -# -# bool not_pixel_type_of(const IplImage*) -# -# and -# -# int get_ipl_bit_depth() const -# -# which establish correspondences between IplImage's pixel type and C++ data -# type. For example, they assume that IPL_DEPTH_16S corresponds to a signed -# short and IPL_DEPTH_64F corresponds to a signed double, etc.. Change the -# code if necessary. -# -# Currently, this plugin provides only conversions of OpenCV IplImage instances -# to and from CImg instances. Conversions of general IplImage instances (e.g. -# those with bit-depth IPL_DEPTH_1U or those with origin==1) are not supported. -# Yet the conversion code has taken care of the data alignment to 4-byte or -# 8-byte boundary as well as the use of both interleaved and non-interleaved -# color channels in IplImage. -*/ - -#ifndef IPL_INTERFACE_H -#define IPL_INTERFACE_H - -//---------------------------- -// Architecture-dependent helper functions; change to suit your needs -//---------------------------- - -// Check if this CImg instance and a given IplImage have identical pixel types. -bool not_pixel_type_of(const IplImage *const img) const { - // to do : handle IPL_DEPTH_1U? - return (((unsigned int)img->depth == IPL_DEPTH_8U && typeid(T) != typeid(unsigned char)) || - ((unsigned int)img->depth == IPL_DEPTH_8S && typeid(T) != typeid(char)) || - ((unsigned int)img->depth == IPL_DEPTH_16U && typeid(T) != typeid(unsigned short)) || - ((unsigned int)img->depth == IPL_DEPTH_16S && typeid(T) != typeid(unsigned)) || - ((unsigned int)img->depth == IPL_DEPTH_32S && typeid(T) != typeid(int)) || - ((unsigned int)img->depth == IPL_DEPTH_32F && typeid(T) != typeid(float)) || - ((unsigned int)img->depth == IPL_DEPTH_64F && typeid(T) != typeid(double))); -} - -// Given this CImg instance, return the corresponding bit-depth flag for use in IplImage header. -int get_ipl_bit_depth() const { - // to do : handle IPL_DEPTH_1U? - if (typeid(T) == typeid(unsigned char)) return IPL_DEPTH_8U; - if (typeid(T) == typeid(char)) return IPL_DEPTH_8S; - if (typeid(T) == typeid(unsigned short)) return IPL_DEPTH_16U; - if (typeid(T) == typeid(short)) return IPL_DEPTH_16S; - if (typeid(T) == typeid(int)) return IPL_DEPTH_32S; - if (typeid(T) == typeid(float)) return IPL_DEPTH_32F; - if (typeid(T) == typeid(double)) return IPL_DEPTH_64F; - return 0; -} - -//---------------------------- -// IplImage-to-CImg conversion -//---------------------------- - -// Copy constructor; the optional flag will be ignored when the number of color channels is less than 3. -// Current flag options are 0 and CV_CVTIMG_SWAP_RB; may add CV_CVTIMG_FLIP and CV_CVTIMG_FLIP|CV_CVTIMG_SWAP_RB in the future. -CImg(const IplImage *const img, const int flag=0):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { - assign(img,flag); -} - -// In-place constructor; the optional flag will be ignored when the number of color channels is less than 3. -// Current flag options are 0 and CV_CVTIMG_SWAP_RB; may add CV_CVTIMG_FLIP and CV_CVTIMG_FLIP|CV_CVTIMG_SWAP_RB in the future. -CImg & assign(const IplImage *const img, const int flag=CV_CVTIMG_SWAP_RB) { - if (!img) return assign(); - if (not_pixel_type_of(img)) - throw CImgInstanceException(_cimg_instance - "assign(const IplImage*) : IplImage has no corresponding pixel type.", - cimg_instance); - // to do: handle roi - const int W = img->width, H = img->height; - const char *const dataPtrI = img->imageData; - assign(W,H,1,img->nChannels); - char *const dataPtrC = (char *)_data; - - const int - byte_depth = (img->depth & 255) >> 3, // number of bytes per color - widthStepI = img->widthStep, // to do: handle the case img->origin==1 (currently assumption: img->origin==0) - widthStepC = W*byte_depth, - channelStepC = H*widthStepC; - - if (img->dataOrder==0) { // interleaved color channels - const int pix_size = byte_depth*img->nChannels; - for (int n = 0; nnChannels; ++n) { - const char *linePtrI = dataPtrI + n*byte_depth; - char *linePtrC = dataPtrC + (img->nChannels>=3 && (flag & CV_CVTIMG_SWAP_RB) && n<3?(2-n):n)*channelStepC; - // color order is BGR in IplImage and RGB in CImg - - for (int i = 0; inChannels; ++n) { - const char *linePtrI = dataPtrI + n*byte_depth; - char *linePtrC = dataPtrC + (img->nChannels >= 3 && (flag & CV_CVTIMG_SWAP_RB) && n<3?(2-n):n)*channelStepC; - for (int i = 0; i=_depth) - throw CImgInstanceException(_cimg_instance - "get_IplImage() : Instance has not Z-dimension %u.", - cimg_instance, - z); - if (_spectrum>4) - cimg::warn(_cimg_instance - "get_IplImage() : OpenCV supports only 4 channels, so only the first four will be copied.", - cimg_instance); - - IplImage *const img = cvCreateImage(cvSize(_width,_height),bit_depth,_spectrum); - const int - W = _width, - H = _height, - byte_depth = (img->depth & 255) >> 3, // number of bytes per color - widthStepI = img->widthStep, // to do: handle the case img->origin==1 (current assumption: img->origin==0) - widthStepC = W*byte_depth, - channelStepC = H*_depth*widthStepC; - const char *const dataPtrC = (char*)_data + z*H*widthStepC; - char *const dataPtrI = img->imageData; - - if (!img->dataOrder) { // interleaved color channels - const int pix_size = byte_depth*img->nChannels; - for (int n = 0; nnChannels; ++n) { - const char *linePtrC = dataPtrC + (img->nChannels >= 3 && (flag & CV_CVTIMG_SWAP_RB) && n<3?(2-n):n)*channelStepC; - char *linePtrI = dataPtrI + n*byte_depth; - - // color order is BGR in IplImage and RGB in CImg - for (int i = 0; inChannels; ++n) { - const char *linePtrC = dataPtrC + (img->nChannels>= 3 && (flag & CV_CVTIMG_SWAP_RB) && n<3?(2-n):n)*channelStepC; - char *linePtrI = dataPtrI + n*byte_depth; - for (int i = 0; i images from/to MATLAB arrays, so that CImg can be used to write - * MATLAB mex files. It also swaps the "x" and "y" coordinates when going - * from / to MATLAB array, i.e. the usual image-processing annoying MATLAB - * behaviour of considering images as matrices. - * - * Added to the CImg class are: - * - * - a constructor : CImg(const mxArray *matlabArray, bool vdata = false) - * the vdata serves to decide whether a 3D matlab array should give - * rise to a 3D CImg object or a "2D vectorial" one. - * - * - a assignment operator : CImg & operator=(const mxArray *matlabArray) - * (I use myself extremely seldom and might remove it in the future). - * - * - a routine converting a CImg image to a matlab array: - * mxArray *toMatlab(mxClassID classID = mxDOUBLE_CLASS, - * bool squeeze = false) const - * the squeeze argument serves the opposite purpose than the vdata from - * the constructor. - * - * For a bit more documentation, the manual is this header, see the more - * detailed comments in the source code (i.e. RTFM) - * - * - * Its usage should be straightforward: - * - * - file cimgmatlab.h must be in a directory that the compiler can locate. - * - prior to include CImg.h, mex.h must be included first, else it will - * result in a compiler error. - * - after the inclusion of mex.h, one must define the macro cimg_plugin as - * "cimgmatlab.h" or or or - * a variation that matches your local installation of CImg package and - * plugins probably via the appropriate specification of the include path - * "-Ipath/to/cimg/and/plugins" at mex cmdline. - * - * You would probably have this kind of declaration: - * - * // The begining of my fantastic mex file code... - * #include - * ... - * #define cimg_plugin - * #include - * ... - * // and now I can implement my new killer MATLAB function! - * .... - * - * - * Copyright (c) 2004-2008 Francois Lauze - * Licence: the Gnu Lesser General Public License - * http://www.gnu.org/licenses/lgpl.html - * - * MATLAB is copyright of The MathWorks, Inc, http://www.mathworks.com - * - * Any comments, improvements and potential bug corrections are welcome, so - * write to me at francois@diku.dk, or use CImg forums, I promise I'll try - * to read them once in a while. BTW who modified the cpMatlabData with the - * cimg::type::is_float() test (good idea!) - * - ***************************************************************************/ - -#ifndef cimg_plugin_matlab -#define cimg_plugin_matlab - -#define CIMGMATLAB_VER 0102 -#ifndef mex_h -#error the file mex.h must be included prior to inclusion of cimgmatlab.h -#endif -#ifndef cimg_version -#error cimgmatlab.h requires that CImg.h is included! -#endif - -/********************************************************** - * introduction of mwSize and mwIndex types in relatively * - * recent versions of matlab, 7.3.0 from what I gathered. * - * here is hopefully a needed fix for older versions * - **********************************************************/ -#if !defined(MX_API_VER) || MX_API_VER < 0x7030000 -typedef int mwSize; -#endif - -/********************************************************* - * begin of included methods * - * They are just added as member functions / constructor * - * for the CImg class. * - *********************************************************/ - -private: - -/********************************************************************** - * internally used to transfer MATLAB array values to CImg<> objects, - * check wether the array type is a "numerical" one (including logical) - */ -static int isNumericalClassID(mxClassID id) { - // all these constants are defined in matrix.h included by mex.h - switch (id) { - case mxLOGICAL_CLASS: - case mxDOUBLE_CLASS: - case mxSINGLE_CLASS: - case mxINT8_CLASS: - case mxUINT8_CLASS: - case mxINT16_CLASS: - case mxUINT16_CLASS: - case mxINT32_CLASS: - case mxUINT32_CLASS: - case mxINT64_CLASS: - case mxUINT64_CLASS: return 1; - default: return 0; - } -} - -/*************************************************** - * driving routine that will copy the content of - * a MATLAB array to this->_data - * The type names used are defined in matlab c/c++ - * header file tmwtypes.h - */ -void makeImageFromMatlabData(const mxArray *matlabArray, mxClassID classID) { - if (classID==mxLOGICAL_CLASS) { - // logical type works a bit differently than the numerical types - mxLogical *mdata = mxGetLogicals(matlabArray); - cpMatlabData((const mxLogical *)mdata); - } else { - void *mdata = (void*)mxGetPr(matlabArray); - switch (classID) { - case mxDOUBLE_CLASS : cpMatlabData((const real64_T*)mdata); break; - case mxSINGLE_CLASS : cpMatlabData((const real32_T*)mdata); break; - case mxINT8_CLASS : cpMatlabData((const int8_T*)mdata); break; - case mxUINT8_CLASS : cpMatlabData((const uint8_T*)mdata); break; - case mxINT16_CLASS : cpMatlabData((const int16_T*)mdata); break; - case mxUINT16_CLASS : cpMatlabData((const uint16_T*)mdata); break; - case mxINT32_CLASS : cpMatlabData((const int32_T*)mdata); break; - case mxUINT32_CLASS : cpMatlabData((const uint32_T*)mdata); break; - case mxINT64_CLASS : cpMatlabData((const int64_T*)mdata); break; - case mxUINT64_CLASS : cpMatlabData((const uint64_T*)mdata); break; - } - } -} - -/*********************************************************** - * the actual memory copy and base type conversion is then - * performed by this routine that handles the annoying x-y - * problem of MATLAB when dealing with images: we switch - * line and column storage: the MATLAB A(x,y) becomes the - * CImg img(y,x) - */ -template void cpMatlabData(const t* mdata) { - if (cimg::type::is_float()) { - cimg_forXYZC(*this,x,y,z,v) (*this)(x,y,z,v) = (T)(mdata[((v*_depth + z)*_width + x)*_height + y]); - } else { - cimg_forXYZC(*this,x,y,z,v) (*this)(x,y,z,v) = (T)(int)(mdata[((v*_depth + z)*_width + x)*_height + y]); - } -} - -public: - -/****************************************************************** - * Consruct a CImg object from a MATLAB mxArray. - * The MATLAB array must be AT MOST 4-dimensional. The boolean - * argument vdata is employed in the case the the input mxArray - * has dimension 3, say M x N x K. In that case, if vdata is true, - * the last dimension is assumed to be "vectorial" and the - * resulting CImg object has dimension N x M x 1 x K. Otherwise, - * the resulting object has dimension N x M x K x 1. - * When MATLAB array has dimension 2 or 4, vdata has no effects. - * No shared memory mechanisms are used, it would be the easiest - * to crash Matlab (from my own experience...) - */ -CImg(const mxArray *matlabArray, const bool vdata = false) - : _is_shared(false) { - mwSize nbdims = mxGetNumberOfDimensions(matlabArray); - mxClassID classID = mxGetClassID(matlabArray); - if (nbdims>4 || !isNumericalClassID(classID)) { - _data = 0; _width = _height = _depth = _spectrum = 0; -#if cimg_debug>1 - cimg::warn("MATLAB array is more than 4D or/and not numerical, returning an empty image."); -#endif - } else { - const mwSize *dims = mxGetDimensions(matlabArray); - _depth = _spectrum = 1; - _width = (unsigned)dims[1]; - _height = (unsigned)dims[0]; - if (nbdims==4) { _depth = (unsigned)dims[2]; _spectrum = (unsigned)dims[3]; } - else if (nbdims==3) { - if (vdata) _spectrum = (unsigned)dims[2]; else _depth = (unsigned)dims[2]; - } - _data = new T[size()]; - makeImageFromMatlabData(matlabArray,classID); - } -} - -/******************************************************************* - * operator=(). Copy mxMarray data mArray into the current image - * Works as the previous constructor, but without the vdata stuff. - * don't know if it is of any use... - */ -CImg & operator=(const mxArray *matlabArray) { - int - nbdims = (int)mxGetNumberOfDimensions(matlabArray), - classID = mxGetClassID(matlabArray); - if (nbdims>4 || !isNumericalClassID(classID)) { - delete [] _data; _data = 0; - _width = _height = _depth = _spectrum = 0; -#if cimg_debug>1 - cimg::warn("MATLAB array is more than 4D or/and not numerical, returning an empty image."); -#endif - } else { - const mwSize *dims = mxGetDimensions(matlabArray); - _depth = _spectrum = 1; - _width = (unsigned)dims[1]; - _height = (unsigned)dims[0]; - if (nbdims>2) _depth = (unsigned)dims[2]; - else if (nbdims>3) _spectrum = (unsigned)dims[3]; - delete [] _data; - _data = new T[size()]; - makeImageFromMatlabData(matlabArray,classID); - } -} - -private: - -/***************************************************************** - * private routines used for transfering a CImg to a mxArray - * here also, we have to exchange the x and y dims so we get the - * expected MATLAB array. - */ -template void populate_maltlab_array(c *const mdata) const { - cimg_forXYZC(*this,x,y,z,v) mdata[((v*_depth + z)*_width + x)*_height + y] = (c)(*this)(x,y,z,v); -} - -/************************************************* - * the specialized version for "logical" entries - */ -void populate_maltlab_array(mxLogical *const mdata) const { - cimg_forXYZC(*this,x,y,z,v) mdata[((v*_depth + z)*_width + x)*_height + y] = (mxLogical)((*this)(x,y,z,v)!=0); -} - -public: - -/****************************************** - * export a CImg image to a MATLAB array. - **/ -mxArray *toMatlab(mxClassID classID=mxDOUBLE_CLASS, const bool squeeze=false) const { - if (!isNumericalClassID(classID)) { -#if cimg_debug>1 - cimg::warn("Invalid MATLAB Class Id Specified."); -#endif - return 0; - } - mwSize dims[4]; - dims[0] = (mwSize)_height; - dims[1] = (mwSize)_width; - dims[2] = (mwSize)_depth; - dims[3] = (mwSize)_spectrum; - - if (squeeze && _depth == 1) { - dims[2] = (mwSize)_spectrum; - dims[3] = (mwSize)1; - } - mxArray *matlabArray = mxCreateNumericArray((mwSize)4,dims,classID,mxREAL); - if (classID==mxLOGICAL_CLASS) { - mxLogical *mdata = mxGetLogicals(matlabArray); - populate_maltlab_array(mdata); - } else { - void *mdata = mxGetPr(matlabArray); - switch (classID) { - case mxDOUBLE_CLASS : populate_maltlab_array((real64_T*)mdata); break; - case mxSINGLE_CLASS : populate_maltlab_array((real32_T*)mdata); break; - case mxINT8_CLASS : populate_maltlab_array((int8_T*)mdata); break; - case mxUINT8_CLASS : populate_maltlab_array((uint8_T*)mdata); break; - case mxINT16_CLASS : populate_maltlab_array((int16_T*)mdata); break; - case mxUINT16_CLASS : populate_maltlab_array((uint16_T*)mdata); break; - case mxINT32_CLASS : populate_maltlab_array((int32_T*)mdata); break; - case mxUINT32_CLASS : populate_maltlab_array((uint32_T*)mdata); break; - case mxINT64_CLASS : populate_maltlab_array((int64_T*)mdata); break; - case mxUINT64_CLASS : populate_maltlab_array((uint64_T*)mdata); break; - } - } - return matlabArray; -} - -// end of cimgmatlab.h -#endif diff --git a/deps/CImg/plugins/draw_gradient.h b/deps/CImg/plugins/draw_gradient.h deleted file mode 100644 index 8908120..0000000 --- a/deps/CImg/plugins/draw_gradient.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - # - # File : draw_gradient.h - # ( C++ header file - CImg plug-in ) - # - # Description : Plugin that can be used to draw color gradient on images. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Jerome Boulanger - # ( http://www.ricam.oeaw.ac.at/people/page.cgi?firstn=Jerome;lastn=Boulanger ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin_draw_gradient -#define cimg_plugin_draw_gradient - -// Convert the couple (shape,profile) into a description string -static inline const char *get_gradient_str(const int shape, const int profile) { - static char buf[128]; - switch(shape) { - case 0: std::sprintf(buf,"linear shape and"); break; - case 1: std::sprintf(buf,"spheric shape and"); break; - case 2: std::sprintf(buf,"conic shape and"); break; - case 3: std::sprintf(buf,"square shape and"); break; - case 4: std::sprintf(buf,"rectangle (L1) shape and"); break; - case 5: std::sprintf(buf,"rectangle (Linf) shape and"); break; - case 6: std::sprintf(buf,"Gaussian shape and"); break; - default: std::sprintf(buf,"undefined shape and"); break; - } - switch(profile) { - case 0: std::strcat(buf," linear profile"); break; - case 1: std::strcat(buf," wave profile"); break; - case 2: std::strcat(buf," ring/bar profile"); break; - case 3: std::strcat(buf," exponential"); break; - case 4: std::strcat(buf," vanishing wave profile"); break; - case 5: std::strcat(buf," vanishing ring/bar profile"); break; - case 6: std::strcat(buf," circ diffraction (Airy) profile"); break; - case 7: std::strcat(buf," rect diffraction (sinc2) profile"); break; - default: std::strcat(buf," undefined profile"); break; - } - return buf; -} - -template -void _draw_gradient_profile(T *const ptr, const float opacity, const float r, - const tc *const color0, const tc *const color1, - const int profile) { - const unsigned int id = (color0?1:0) + (color1?2:0); - const tc col0 = color0?*color0:0, col1 = color1?*color1:0; - switch(profile) { - case 0: { // linear - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-r)+col1*r)); break; - case 1: if (r<1) *ptr = (T)((1-opacity*(1-r))**ptr + col0*opacity*(1-r)); break; - case 2: if (r>0) *ptr = (T)((1-opacity*r)**ptr + col1*opacity*r); break; - default: break; - } break; - } - case 1: { // waves - const float f = (1 - (float)std::cos(4.5f*r*2.f*cimg::PI))/2; - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-opacity*(1-f))**ptr + col0*opacity*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-opacity*f)**ptr + col1*opacity*f); break; - default: break; - } break; - } - case 2:{ // ring/bar - const float f = (1 + (float)std::cos(r*2.f*cimg::PI))/2; - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-opacity*(1-f))**ptr + col0*opacity*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-opacity*f)**ptr + col1*opacity*f); break; - default: break; - } break; - } - case 3: { // exponential - const float f = 1 - (float)std::exp(-r); - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-opacity*(1-f))**ptr + col0*opacity*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-opacity*f)**ptr + col1*opacity*f); break; - default: break; - } break; - } - case 4: { // vanishing wave - const float f = (1 - (float)std::cos(4.5f*r*2.f*cimg::PI))/2, o = r<.9f?(float)std::exp(-.5*r*r*12.f):0; - switch(id) { // map the 3 cases - case 3: if (o>0) *ptr = (T)((1-o)**ptr + o*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-o*(1-f))**ptr + col0*o*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-o*f)**ptr + col1*o*f); break; - default: break; - } break; - } - case 5: { // vanishing ring/bar - const float f = (1 + (float)std::cos(r*2.f*cimg::PI))/2, o = r<.9?(float)std::exp(-.5*r*r*12.f):0; - switch(id) { // map the 3 cases - case 3: if (o>0) *ptr = (T)((1-o)**ptr + o*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-o*(1-f))**ptr + col0*o*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-o*f)**ptr + col1*o*f); break; - default: break; - } break; - } - case 6: { // diffraction pattern of a circular aperture (Airy function) -#define myj1(x) (std::sin((x)<3?(x)*2.2/3:(x)-0.8)*std::exp(-std::pow((x)/5.0,1/3.0))) - const float a = 10*(float)cimg::PI*r, tmp = a<0.2?.5f:((float)myj1(a)/a), f = 1-4*tmp*tmp; -#undef myj1 - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-opacity*(1-f))**ptr + col0*opacity*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-opacity*f)**ptr + col1*opacity*f); break; - default: break; - } - break; - } - case 7: { // diffraction pattern of a rectangular function (sinc function) - const float a = 10*(float)cimg::PI*r, tmp = a==0?1:(float)std::sin(a)/a, f = 1-tmp*tmp; - switch(id) { // map the 3 cases - case 3: *ptr = (T)((1-opacity)**ptr + opacity*(col0*(1.f-f)+col1*f)); break; - case 1: if (f<1) *ptr = (T)((1-opacity*(1-f))**ptr + col0*opacity*(1-f)); break; - case 2: if (f>0) *ptr = (T)((1-opacity*f)**ptr + col1*opacity*f); break; - default: break; - } break; - } - default: - CImgArgumentException("CImg<%s>::draw_gradient : unknown profile parameter",pixel_type()); break; - } -} - -//! Draw a gradient with various shape and profile -/** - \param x0 X-coordinate of the 1st control point - \param y0 Y-coordinate of the 1st control point - \param x1 X-coordinate of the 2nd control point - \param y1 Y-coordinate of the 2nd control point - \param color0 Array of dimv() values of type \c T, defining the 1st color. - \param color1 Array of dimv() values of type \c T, defining the 2nd color. - \param shape shape of the gradient (0,3) - \param profile select a profile function (0,7) - \param opacity Drawing opacity. - \note - - if one color is NULL then the gradient is done to transparency -**/ -template -CImg& draw_gradient(const int x0, const int y0, const int x1, const int y1, - const tc *const color0, const tc *const color1, - const int shape=0, const int profile=0, const float opacity=1.0f){ - if (is_empty()) return *this; - if (!color0 && !color1) - throw CImgArgumentException("CImg<%s>::draw_gradient : The two specified colors are (null).", - pixel_type()); - if (profile<0 || profile>7) { // catch this case before entering in the for loop - CImgArgumentException("CImg<%s>::draw_gradient : unknown profile parameter",pixel_type()); - return *this; - } - const float abx = (float)x1-x0, aby = (float)y1-y0, ab2 = abx*abx + aby*aby; // pt A=(x0,y0), B=(x1,y1) - const tc *pcol0 = color0, *pcol1 = color1; - T *ptr = data(); - - switch(shape) { - case 0: { // linear - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { // point M=(x,z) - const float amx = (float)x-x0, amy = (float)y-y0, r = cimg::max(0.f,cimg::min(1.f,(amx*abx+amy*aby)/ab2)); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 1:{ // radial - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, r = cimg::max(0.f,cimg::min(1.f,(amx*amx+amy*amy)/ab2)); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 2:{ // radial cone - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, r = cimg::max(0.f,cimg::min(1.f,(float)std::sqrt((amx*amx+amy*amy)/ab2))); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 3:{ // square - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, r=cimg::max(0.f,cimg::min(1.f,(cimg::abs(amx*abx+amy*aby)+cimg::abs(amx*aby-amy*abx))/ab2)); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 4:{ // rectangle (L1) - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, - r = cimg::max(0.f,cimg::min(1.f,(cimg::abs(amx/abx)+cimg::abs(amy/aby)))); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 5:{ // rectangle (Linf) - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, - r=cimg::max(0.f,cimg::min(1.f,cimg::max(cimg::abs(amx/abx),cimg::abs(amy/aby)))); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - case 6:{ // gaussian - cimg_forC(*this,v) { cimg_forXYZ(*this,x,y,z) { - const float amx = (float)x-x0, amy = (float)y-y0, r = cimg::max(0.f,cimg::min(1.f,1-(float)std::exp(-(amx*amx+amy*amy)/ab2))); - _draw_gradient_profile(ptr++,opacity,r,pcol0,pcol1,profile); - } if (pcol0) ++pcol0; if (pcol1) ++pcol1; }} break; - default: - CImgArgumentException("CImg<%s>::draw_gradient : unknown shape parameter",pixel_type()); break; - } - return *this; -} - -template -CImg& draw_gradient(const int x0, const int y0, const int x1, const int y1, - const tc *const color0, const int color1, - const int shape=0, const int profile=0, const float opacity=1.0f) { - cimg::unused(color1); - return (*this).draw_gradient(x0,y0,x1,y1,color0,(tc*)0,shape,profile,opacity); -} - -template -CImg& draw_gradient(const int x0, const int y0, const int x1, const int y1, - const int color0, const tc *const color1, - const int shape=0, const int profile=0, const float opacity=1.0f) { - cimg::unused(color0); - return (*this).draw_gradient(x0,y0,x1,y1,(tc*)0,color1,shape,profile,opacity); -} - -#endif diff --git a/deps/CImg/plugins/jpeg_buffer.h b/deps/CImg/plugins/jpeg_buffer.h deleted file mode 100644 index 2350314..0000000 --- a/deps/CImg/plugins/jpeg_buffer.h +++ /dev/null @@ -1,374 +0,0 @@ -/* - # - # File : jpeg_buffer.h - # ( C++ header file - CImg plug-in ) - # - # Description : This CImg plug-in provide functions to load and save jpeg images - # directly from/to memory buffers of JOCTET buffers, using the - # JPEG library (required to compile !) - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Paolo Prete - # ( p4olo_prete@yahoo.it ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -/*----------------------------------------------------------------------------------- - - IMPORTANT NOTE : - - You *need* to include the following lines in your own code to use this plugin : - - #include - #include - #include - - (see example file provided in examples/use_jpeg_buffer.cpp). - -------------------------------------------------------------------------------------*/ - -#ifndef cimg_plugin_jpeg_buffer -#define cimg_plugin_jpeg_buffer - -/////////////////////////////////////////////////////////////////////////////////////// -// -// extension of libjpeg (helper functions for loading images from JOCTET arrays) -// hacked from -// http://www.koders.com/cpp/fidB5A4549ABB5CB01824058F57A43D095D3F95AB40.aspx -// -/////////////////////////////////////////////////////////////////////////////////////// - -#define INPUT_BUF_SIZE 4096 - -struct my_source_mem { - struct jpeg_source_mgr pub; // Public fields - int indexinmem; - JOCTET *inmem; // Source stream - JOCTET *buffer; // Start of buffer - int lenght; // Size of buffer in memory - boolean start_of_file; // Have we gotten any data yet? -}; - -struct my_source_mgr { - struct jpeg_source_mgr pub; // public fields - FILE *infile; // source stream - JOCTET *buffer; // start of buffer - boolean start_of_file; // have we gotten any data yet? -}; - -typedef my_source_mem *my_src_mptr; -typedef my_source_mgr *my_src_ptr; - -static boolean fill_minput_buffer(j_decompress_ptr cinfo) { - my_src_mptr src = (my_src_mptr) cinfo->src; - size_t nbytes; - if (src->indexinmem+INPUT_BUF_SIZE>src->lenght) nbytes=src->lenght-src->indexinmem; - else nbytes = INPUT_BUF_SIZE; - std::memcpy(src->buffer,src->inmem,nbytes); - src->inmem += nbytes; - src->indexinmem += (int)nbytes; - src->pub.next_input_byte = src->buffer; - src->pub.bytes_in_buffer = INPUT_BUF_SIZE; - src->start_of_file = FALSE; - return TRUE; -} - -static void skip_minput_data(j_decompress_ptr cinfo, long num_bytes) { - my_src_ptr src = (my_src_ptr)cinfo->src; - if (num_bytes > 0) { - while (num_bytes > (long) src->pub.bytes_in_buffer) { - num_bytes -= (long) src->pub.bytes_in_buffer; - fill_minput_buffer(cinfo); - // note we assume that fill_input_buffer will never return FALSE, - // so suspension need not be handled. - // - } - src->pub.next_input_byte += (size_t) num_bytes; - src->pub.bytes_in_buffer -= (size_t) num_bytes; - } -} - -static void init_msource(j_decompress_ptr cinfo) { - my_src_mptr src = (my_src_mptr)cinfo->src; - src->start_of_file = TRUE; -} - -static void term_source(j_decompress_ptr) { - // no work necessary here -} - -static void jpeg_mem_src(j_decompress_ptr cinfo, JOCTET * memptr,int lenght) { - my_src_mptr src; - - // The source object and input buffer are made permanent so that a series - //of JPEG images can be read from the same file by calling jpeg_stdio_src - // only before the first one. (If we discarded the buffer at the end of - // one image, we'd likely lose the start of the next one.) - // This makes it unsafe to use this manager and a different source - // manager serially with the same JPEG object. Caveat programmer. - // - - // first time for this JPEG object? - if (cinfo->src == NULL) { - cinfo->src = (struct jpeg_source_mgr*)(*cinfo->mem->alloc_small)((j_common_ptr) cinfo, JPOOL_PERMANENT,sizeof(my_source_mem)); - src = (my_src_mptr) cinfo->src; - src->buffer = (JOCTET *)(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,INPUT_BUF_SIZE * sizeof(JOCTET)); - } - - src = (my_src_mptr) cinfo->src; - src->pub.init_source = init_msource; - src->pub.fill_input_buffer = fill_minput_buffer; - src->pub.skip_input_data = skip_minput_data; - //src->pub.resync_to_restart = jpeg_resync_to_restart; // use default method - src->pub.term_source = term_source; - src->inmem = memptr; - src->indexinmem = 0; - src->lenght = lenght; - src->pub.bytes_in_buffer = 0; // forces fill_input_buffer on first read - src->pub.next_input_byte = NULL; // until buffer loaded -} - -// The following declarations and 5 functions are jpeg related -// functions used by put_jpeg_grey_memory and put_jpeg_yuv420p_memory -// -struct mem_destination_mgr { - struct jpeg_destination_mgr pub; - JOCTET *buf; - size_t bufsize; - size_t jpegsize; -}; - -typedef mem_destination_mgr *mem_dest_ptr; - -static void init_destination(j_compress_ptr cinfo) { - mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest; - dest->pub.next_output_byte = dest->buf; - dest->pub.free_in_buffer = dest->bufsize; - dest->jpegsize = 0; -} - -static boolean empty_output_buffer(j_compress_ptr cinfo) { - mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest; - dest->pub.next_output_byte = dest->buf; - dest->pub.free_in_buffer = dest->bufsize; - return FALSE; - ERREXIT(cinfo, JERR_BUFFER_SIZE); -} - -static void term_destination(j_compress_ptr cinfo) { - mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest; - dest->jpegsize = dest->bufsize - dest->pub.free_in_buffer; -} - -static void jpeg_mem_dest(j_compress_ptr cinfo, JOCTET* buf, size_t bufsize) { - mem_dest_ptr dest; - if (cinfo->dest == NULL) { - cinfo->dest = (struct jpeg_destination_mgr *) - (*cinfo->mem->alloc_small)((j_common_ptr)cinfo,JPOOL_PERMANENT,sizeof(mem_destination_mgr)); - } - dest = (mem_dest_ptr) cinfo->dest; - dest->pub.init_destination = init_destination; - dest->pub.empty_output_buffer = empty_output_buffer; - dest->pub.term_destination = term_destination; - dest->buf = buf; - dest->bufsize = bufsize; - dest->jpegsize = 0; -} - -static unsigned jpeg_mem_size(j_compress_ptr cinfo) { - mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest; - return dest->jpegsize; -} - -///////////////////////////////////////////////////////////////// -// -// Define main CImg plugin functions. -// (you should use these functions only in your own code) -// -///////////////////////////////////////////////////////////////// - -//! Load image from a jpeg-coded memory buffer. -/** - \param buffer Memory buffer containing the jpeg-coded image data. - \param buffer_size Size of the memory buffer, in bytes. -**/ -static CImg get_load_jpeg_buffer(const JOCTET *const buffer, const unsigned buffer_size) { - struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_decompress(&cinfo); - jpeg_mem_src(&cinfo,const_cast(buffer),buffer_size); - jpeg_read_header(&cinfo,TRUE); - jpeg_start_decompress(&cinfo); - - const unsigned int row_stride = cinfo.output_width * cinfo.output_components; - JOCTET *buf = new JOCTET[cinfo.output_width*cinfo.output_height*cinfo.output_components]; - const JOCTET *buf2 = buf; - JSAMPROW row_pointer[1]; - while (cinfo.output_scanline < cinfo.output_height) { - row_pointer[0] = buf + cinfo.output_scanline*row_stride; - jpeg_read_scanlines(&cinfo,row_pointer,1); - } - jpeg_finish_decompress(&cinfo); - jpeg_destroy_decompress(&cinfo); - - CImg dest(cinfo.output_width,cinfo.output_height,1,cinfo.output_components); - switch (dest.spectrum()) { - case 1: { - T *ptr_g = dest.data(0,0,0,0); - cimg_foroff(dest,off) *(ptr_g++) = (T)*(buf2++); - } break; - case 3: { - T - *ptr_r = dest.data(0,0,0,0), - *ptr_g = dest.data(0,0,0,1), - *ptr_b = dest.data(0,0,0,2); - cimg_forXY(dest,x,y) { - *(ptr_r++) = (T)*(buf2++); - *(ptr_g++) = (T)*(buf2++); - *(ptr_b++) = (T)*(buf2++); - } - } break; - case 4: { - T - *ptr_r = dest.data(0,0,0,0), - *ptr_g = dest.data(0,0,0,1), - *ptr_b = dest.data(0,0,0,2), - *ptr_a = dest.data(0,0,0,3); - cimg_forXY(dest,x,y) { - *(ptr_r++) = (T)*(buf2++); - *(ptr_g++) = (T)*(buf2++); - *(ptr_b++) = (T)*(buf2++); - *(ptr_a++) = (T)*(buf2++); - } - } break; - } - delete[] buf; - - return dest; -} - -//! Load image from a jpeg-coded memory buffer (in-place version) -/** - \param buffer Memory buffer containing the jpeg-coded image data. - \param buffer_size Size of the memory buffer, in bytes. -**/ -CImg& load_jpeg_buffer(const JOCTET *const buffer, const unsigned buffer_size) { - return get_load_jpeg_buffer(buffer,buffer_size).move_to(*this); -} - -//! Save image in a memory buffer, directly as a jpeg-coded file -/** - \param buffer Memory buffer that will be written with the jpeg-coded image data. - \param buffer_size Initial size of the memory buffer. When the function returns, the variable - contains the effective length needed to fill the buffer. - \param quality Quality of the jpeg compression. -**/ -const CImg& save_jpeg_buffer(JOCTET *const buffer, unsigned int &buffer_size, const int quality=100) const { - - // Fill pixel buffer - JOCTET *buf; - unsigned int dimbuf=0; - J_COLOR_SPACE colortype=JCS_RGB; - switch (spectrum()) { - case 1: { - // Greyscale images - JOCTET *buf2 = buf = new JOCTET[width()*height()*(dimbuf=1)]; - const T - *ptr_g = data(); - colortype = JCS_GRAYSCALE; - cimg_foroff(*this,off) *(buf2++) = (JOCTET)*(ptr_g++); - } break; - case 2: - case 3: { - // RGB images - JOCTET *buf2 = buf = new JOCTET[width()*height()*(dimbuf=3)]; - const T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,spectrum()>2?2:0); - colortype = JCS_RGB; - cimg_forXY(*this,x,y) { - *(buf2++) = (JOCTET)*(ptr_r++); - *(buf2++) = (JOCTET)*(ptr_g++); - *(buf2++) = (JOCTET)*(ptr_b++); - } - } break; - default: { - // YCMYK images - JOCTET *buf2 = buf = new JOCTET[width()*height()*(dimbuf=4)]; - const T - *ptr_r = data(0,0,0,0), - *ptr_g = data(0,0,0,1), - *ptr_b = data(0,0,0,2), - *ptr_a = data(0,0,0,3); - colortype = JCS_CMYK; - cimg_forXY(*this,x,y) { - *(buf2++) = (JOCTET)*(ptr_r++); - *(buf2++) = (JOCTET)*(ptr_g++); - *(buf2++) = (JOCTET)*(ptr_b++); - *(buf2++) = (JOCTET)*(ptr_a++); - } - } break; - } - - // Call libjpeg functions - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - jpeg_mem_dest(&cinfo, buffer, buffer_size); - cinfo.image_width = width(); - cinfo.image_height = height(); - cinfo.input_components = dimbuf; - cinfo.in_color_space = colortype; - jpeg_set_defaults(&cinfo); - jpeg_set_quality(&cinfo,quality<100?quality:100,TRUE); - jpeg_start_compress(&cinfo,TRUE); - - const unsigned int row_stride = width()*dimbuf; - JSAMPROW row_pointer[1]; - while (cinfo.next_scanline < cinfo.image_height) { - row_pointer[0] = &buf[cinfo.next_scanline*row_stride]; - jpeg_write_scanlines(&cinfo,row_pointer,1); - } - jpeg_finish_compress(&cinfo); - delete[] buf; - buffer_size = jpeg_mem_size(&cinfo); - jpeg_destroy_compress(&cinfo); - return *this; -} - -// End of the plug-in -//------------------- -#endif diff --git a/deps/CImg/plugins/loop_macros.h b/deps/CImg/plugins/loop_macros.h deleted file mode 100644 index d9fb462..0000000 --- a/deps/CImg/plugins/loop_macros.h +++ /dev/null @@ -1,24166 +0,0 @@ -/* - # - # File : loop_macros.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plug-in adding useful loop macros in CImg, in order to - # deal with NxN neighborhoods (where N=10..32) - # and NxNxN neighborhoods (where N=4..8) - # This file has been automatically generated using the loop - # macro generator available in 'examples/generate_loop_macros.cpp' - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : David Tschumperle - # ( http://tschumperle.users.greyc.fr/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin_loop_macros -#define cimg_plugin_loop_macros - -// Define 10x10 loop macros -//------------------------- -#define cimg_for10(bound,i) for (int i = 0, \ - _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5; \ - _n5##i<(int)(bound) || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i) - -#define cimg_for10X(img,x) cimg_for10((img)._width,x) -#define cimg_for10Y(img,y) cimg_for10((img)._height,y) -#define cimg_for10Z(img,z) cimg_for10((img)._depth,z) -#define cimg_for10C(img,c) cimg_for10((img)._spectrum,c) -#define cimg_for10XY(img,x,y) cimg_for10Y(img,y) cimg_for10X(img,x) -#define cimg_for10XZ(img,x,z) cimg_for10Z(img,z) cimg_for10X(img,x) -#define cimg_for10XC(img,x,c) cimg_for10C(img,c) cimg_for10X(img,x) -#define cimg_for10YZ(img,y,z) cimg_for10Z(img,z) cimg_for10Y(img,y) -#define cimg_for10YC(img,y,c) cimg_for10C(img,c) cimg_for10Y(img,y) -#define cimg_for10ZC(img,z,c) cimg_for10C(img,c) cimg_for10Z(img,z) -#define cimg_for10XYZ(img,x,y,z) cimg_for10Z(img,z) cimg_for10XY(img,x,y) -#define cimg_for10XZC(img,x,z,c) cimg_for10C(img,c) cimg_for10XZ(img,x,z) -#define cimg_for10YZC(img,y,z,c) cimg_for10C(img,c) cimg_for10YZ(img,y,z) -#define cimg_for10XYZC(img,x,y,z,c) cimg_for10C(img,c) cimg_for10XYZ(img,x,y,z) - -#define cimg_for_in10(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5; \ - i<=(int)(i1) && (_n5##i<(int)(bound) || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i) - -#define cimg_for_in10X(img,x0,x1,x) cimg_for_in10((img)._width,x0,x1,x) -#define cimg_for_in10Y(img,y0,y1,y) cimg_for_in10((img)._height,y0,y1,y) -#define cimg_for_in10Z(img,z0,z1,z) cimg_for_in10((img)._depth,z0,z1,z) -#define cimg_for_in10C(img,c0,c1,c) cimg_for_in10((img)._spectrum,c0,c1,c) -#define cimg_for_in10XY(img,x0,y0,x1,y1,x,y) cimg_for_in10Y(img,y0,y1,y) cimg_for_in10X(img,x0,x1,x) -#define cimg_for_in10XZ(img,x0,z0,x1,z1,x,z) cimg_for_in10Z(img,z0,z1,z) cimg_for_in10X(img,x0,x1,x) -#define cimg_for_in10XC(img,x0,c0,x1,c1,x,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10X(img,x0,x1,x) -#define cimg_for_in10YZ(img,y0,z0,y1,z1,y,z) cimg_for_in10Z(img,z0,z1,z) cimg_for_in10Y(img,y0,y1,y) -#define cimg_for_in10YC(img,y0,c0,y1,c1,y,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10Y(img,y0,y1,y) -#define cimg_for_in10ZC(img,z0,c0,z1,c1,z,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10Z(img,z0,z1,z) -#define cimg_for_in10XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in10Z(img,z0,z1,z) cimg_for_in10XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in10XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in10YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in10XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in10C(img,c0,c1,c) cimg_for_in10XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for10x10(img,x,y,z,c,I,T) \ - cimg_for10((img)._height,y) for (int x = 0, \ - _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = (T)(img)(0,_p4##y,z,c)), \ - (I[10] = I[11] = I[12] = I[13] = I[14] = (T)(img)(0,_p3##y,z,c)), \ - (I[20] = I[21] = I[22] = I[23] = I[24] = (T)(img)(0,_p2##y,z,c)), \ - (I[30] = I[31] = I[32] = I[33] = I[34] = (T)(img)(0,_p1##y,z,c)), \ - (I[40] = I[41] = I[42] = I[43] = I[44] = (T)(img)(0,y,z,c)), \ - (I[50] = I[51] = I[52] = I[53] = I[54] = (T)(img)(0,_n1##y,z,c)), \ - (I[60] = I[61] = I[62] = I[63] = I[64] = (T)(img)(0,_n2##y,z,c)), \ - (I[70] = I[71] = I[72] = I[73] = I[74] = (T)(img)(0,_n3##y,z,c)), \ - (I[80] = I[81] = I[82] = I[83] = I[84] = (T)(img)(0,_n4##y,z,c)), \ - (I[90] = I[91] = I[92] = I[93] = I[94] = (T)(img)(0,_n5##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[25] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,y,z,c)), \ - (I[55] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[65] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[75] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[85] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[26] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,y,z,c)), \ - (I[56] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[66] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[76] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[86] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[27] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,y,z,c)), \ - (I[57] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[67] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[77] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[87] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[28] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,y,z,c)), \ - (I[58] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[68] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[78] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[88] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_n5##y,z,c)), \ - 5>=((img)._width)?(img).width()-1:5); \ - (_n5##x<(img).width() && ( \ - (I[9] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[29] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,y,z,c)), \ - (I[59] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[69] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[79] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[89] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_n5##y,z,c)),1)) || \ - _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x) - -#define cimg_for_in10x10(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in10((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = (int)( \ - (I[0] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[10] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[20] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[30] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[40] = (T)(img)(_p4##x,y,z,c)), \ - (I[50] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[60] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[70] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[80] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[90] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[1] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[11] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[21] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[31] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[41] = (T)(img)(_p3##x,y,z,c)), \ - (I[51] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[61] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[71] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[81] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[91] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[2] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[12] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[22] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[32] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[42] = (T)(img)(_p2##x,y,z,c)), \ - (I[52] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[62] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[72] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[82] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[92] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[3] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[13] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[23] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[33] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[43] = (T)(img)(_p1##x,y,z,c)), \ - (I[53] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[63] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[73] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[83] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[93] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[4] = (T)(img)(x,_p4##y,z,c)), \ - (I[14] = (T)(img)(x,_p3##y,z,c)), \ - (I[24] = (T)(img)(x,_p2##y,z,c)), \ - (I[34] = (T)(img)(x,_p1##y,z,c)), \ - (I[44] = (T)(img)(x,y,z,c)), \ - (I[54] = (T)(img)(x,_n1##y,z,c)), \ - (I[64] = (T)(img)(x,_n2##y,z,c)), \ - (I[74] = (T)(img)(x,_n3##y,z,c)), \ - (I[84] = (T)(img)(x,_n4##y,z,c)), \ - (I[94] = (T)(img)(x,_n5##y,z,c)), \ - (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[25] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,y,z,c)), \ - (I[55] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[65] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[75] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[85] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[26] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,y,z,c)), \ - (I[56] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[66] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[76] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[86] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[27] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,y,z,c)), \ - (I[57] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[67] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[77] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[87] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[28] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,y,z,c)), \ - (I[58] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[68] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[78] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[88] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_n5##y,z,c)), \ - x+5>=(img).width()?(img).width()-1:x+5); \ - x<=(int)(x1) && ((_n5##x<(img).width() && ( \ - (I[9] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[29] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,y,z,c)), \ - (I[59] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[69] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[79] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[89] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_n5##y,z,c)),1)) || \ - _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x) - -#define cimg_get10x10(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p4##x,_p4##y,z,c), I[1] = (T)(img)(_p3##x,_p4##y,z,c), I[2] = (T)(img)(_p2##x,_p4##y,z,c), I[3] = (T)(img)(_p1##x,_p4##y,z,c), I[4] = (T)(img)(x,_p4##y,z,c), I[5] = (T)(img)(_n1##x,_p4##y,z,c), I[6] = (T)(img)(_n2##x,_p4##y,z,c), I[7] = (T)(img)(_n3##x,_p4##y,z,c), I[8] = (T)(img)(_n4##x,_p4##y,z,c), I[9] = (T)(img)(_n5##x,_p4##y,z,c), \ - I[10] = (T)(img)(_p4##x,_p3##y,z,c), I[11] = (T)(img)(_p3##x,_p3##y,z,c), I[12] = (T)(img)(_p2##x,_p3##y,z,c), I[13] = (T)(img)(_p1##x,_p3##y,z,c), I[14] = (T)(img)(x,_p3##y,z,c), I[15] = (T)(img)(_n1##x,_p3##y,z,c), I[16] = (T)(img)(_n2##x,_p3##y,z,c), I[17] = (T)(img)(_n3##x,_p3##y,z,c), I[18] = (T)(img)(_n4##x,_p3##y,z,c), I[19] = (T)(img)(_n5##x,_p3##y,z,c), \ - I[20] = (T)(img)(_p4##x,_p2##y,z,c), I[21] = (T)(img)(_p3##x,_p2##y,z,c), I[22] = (T)(img)(_p2##x,_p2##y,z,c), I[23] = (T)(img)(_p1##x,_p2##y,z,c), I[24] = (T)(img)(x,_p2##y,z,c), I[25] = (T)(img)(_n1##x,_p2##y,z,c), I[26] = (T)(img)(_n2##x,_p2##y,z,c), I[27] = (T)(img)(_n3##x,_p2##y,z,c), I[28] = (T)(img)(_n4##x,_p2##y,z,c), I[29] = (T)(img)(_n5##x,_p2##y,z,c), \ - I[30] = (T)(img)(_p4##x,_p1##y,z,c), I[31] = (T)(img)(_p3##x,_p1##y,z,c), I[32] = (T)(img)(_p2##x,_p1##y,z,c), I[33] = (T)(img)(_p1##x,_p1##y,z,c), I[34] = (T)(img)(x,_p1##y,z,c), I[35] = (T)(img)(_n1##x,_p1##y,z,c), I[36] = (T)(img)(_n2##x,_p1##y,z,c), I[37] = (T)(img)(_n3##x,_p1##y,z,c), I[38] = (T)(img)(_n4##x,_p1##y,z,c), I[39] = (T)(img)(_n5##x,_p1##y,z,c), \ - I[40] = (T)(img)(_p4##x,y,z,c), I[41] = (T)(img)(_p3##x,y,z,c), I[42] = (T)(img)(_p2##x,y,z,c), I[43] = (T)(img)(_p1##x,y,z,c), I[44] = (T)(img)(x,y,z,c), I[45] = (T)(img)(_n1##x,y,z,c), I[46] = (T)(img)(_n2##x,y,z,c), I[47] = (T)(img)(_n3##x,y,z,c), I[48] = (T)(img)(_n4##x,y,z,c), I[49] = (T)(img)(_n5##x,y,z,c), \ - I[50] = (T)(img)(_p4##x,_n1##y,z,c), I[51] = (T)(img)(_p3##x,_n1##y,z,c), I[52] = (T)(img)(_p2##x,_n1##y,z,c), I[53] = (T)(img)(_p1##x,_n1##y,z,c), I[54] = (T)(img)(x,_n1##y,z,c), I[55] = (T)(img)(_n1##x,_n1##y,z,c), I[56] = (T)(img)(_n2##x,_n1##y,z,c), I[57] = (T)(img)(_n3##x,_n1##y,z,c), I[58] = (T)(img)(_n4##x,_n1##y,z,c), I[59] = (T)(img)(_n5##x,_n1##y,z,c), \ - I[60] = (T)(img)(_p4##x,_n2##y,z,c), I[61] = (T)(img)(_p3##x,_n2##y,z,c), I[62] = (T)(img)(_p2##x,_n2##y,z,c), I[63] = (T)(img)(_p1##x,_n2##y,z,c), I[64] = (T)(img)(x,_n2##y,z,c), I[65] = (T)(img)(_n1##x,_n2##y,z,c), I[66] = (T)(img)(_n2##x,_n2##y,z,c), I[67] = (T)(img)(_n3##x,_n2##y,z,c), I[68] = (T)(img)(_n4##x,_n2##y,z,c), I[69] = (T)(img)(_n5##x,_n2##y,z,c), \ - I[70] = (T)(img)(_p4##x,_n3##y,z,c), I[71] = (T)(img)(_p3##x,_n3##y,z,c), I[72] = (T)(img)(_p2##x,_n3##y,z,c), I[73] = (T)(img)(_p1##x,_n3##y,z,c), I[74] = (T)(img)(x,_n3##y,z,c), I[75] = (T)(img)(_n1##x,_n3##y,z,c), I[76] = (T)(img)(_n2##x,_n3##y,z,c), I[77] = (T)(img)(_n3##x,_n3##y,z,c), I[78] = (T)(img)(_n4##x,_n3##y,z,c), I[79] = (T)(img)(_n5##x,_n3##y,z,c), \ - I[80] = (T)(img)(_p4##x,_n4##y,z,c), I[81] = (T)(img)(_p3##x,_n4##y,z,c), I[82] = (T)(img)(_p2##x,_n4##y,z,c), I[83] = (T)(img)(_p1##x,_n4##y,z,c), I[84] = (T)(img)(x,_n4##y,z,c), I[85] = (T)(img)(_n1##x,_n4##y,z,c), I[86] = (T)(img)(_n2##x,_n4##y,z,c), I[87] = (T)(img)(_n3##x,_n4##y,z,c), I[88] = (T)(img)(_n4##x,_n4##y,z,c), I[89] = (T)(img)(_n5##x,_n4##y,z,c), \ - I[90] = (T)(img)(_p4##x,_n5##y,z,c), I[91] = (T)(img)(_p3##x,_n5##y,z,c), I[92] = (T)(img)(_p2##x,_n5##y,z,c), I[93] = (T)(img)(_p1##x,_n5##y,z,c), I[94] = (T)(img)(x,_n5##y,z,c), I[95] = (T)(img)(_n1##x,_n5##y,z,c), I[96] = (T)(img)(_n2##x,_n5##y,z,c), I[97] = (T)(img)(_n3##x,_n5##y,z,c), I[98] = (T)(img)(_n4##x,_n5##y,z,c), I[99] = (T)(img)(_n5##x,_n5##y,z,c); - -// Define 11x11 loop macros -//------------------------- -#define cimg_for11(bound,i) for (int i = 0, \ - _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5; \ - _n5##i<(int)(bound) || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i) - -#define cimg_for11X(img,x) cimg_for11((img)._width,x) -#define cimg_for11Y(img,y) cimg_for11((img)._height,y) -#define cimg_for11Z(img,z) cimg_for11((img)._depth,z) -#define cimg_for11C(img,c) cimg_for11((img)._spectrum,c) -#define cimg_for11XY(img,x,y) cimg_for11Y(img,y) cimg_for11X(img,x) -#define cimg_for11XZ(img,x,z) cimg_for11Z(img,z) cimg_for11X(img,x) -#define cimg_for11XC(img,x,c) cimg_for11C(img,c) cimg_for11X(img,x) -#define cimg_for11YZ(img,y,z) cimg_for11Z(img,z) cimg_for11Y(img,y) -#define cimg_for11YC(img,y,c) cimg_for11C(img,c) cimg_for11Y(img,y) -#define cimg_for11ZC(img,z,c) cimg_for11C(img,c) cimg_for11Z(img,z) -#define cimg_for11XYZ(img,x,y,z) cimg_for11Z(img,z) cimg_for11XY(img,x,y) -#define cimg_for11XZC(img,x,z,c) cimg_for11C(img,c) cimg_for11XZ(img,x,z) -#define cimg_for11YZC(img,y,z,c) cimg_for11C(img,c) cimg_for11YZ(img,y,z) -#define cimg_for11XYZC(img,x,y,z,c) cimg_for11C(img,c) cimg_for11XYZ(img,x,y,z) - -#define cimg_for_in11(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5; \ - i<=(int)(i1) && (_n5##i<(int)(bound) || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i) - -#define cimg_for_in11X(img,x0,x1,x) cimg_for_in11((img)._width,x0,x1,x) -#define cimg_for_in11Y(img,y0,y1,y) cimg_for_in11((img)._height,y0,y1,y) -#define cimg_for_in11Z(img,z0,z1,z) cimg_for_in11((img)._depth,z0,z1,z) -#define cimg_for_in11C(img,c0,c1,c) cimg_for_in11((img)._spectrum,c0,c1,c) -#define cimg_for_in11XY(img,x0,y0,x1,y1,x,y) cimg_for_in11Y(img,y0,y1,y) cimg_for_in11X(img,x0,x1,x) -#define cimg_for_in11XZ(img,x0,z0,x1,z1,x,z) cimg_for_in11Z(img,z0,z1,z) cimg_for_in11X(img,x0,x1,x) -#define cimg_for_in11XC(img,x0,c0,x1,c1,x,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11X(img,x0,x1,x) -#define cimg_for_in11YZ(img,y0,z0,y1,z1,y,z) cimg_for_in11Z(img,z0,z1,z) cimg_for_in11Y(img,y0,y1,y) -#define cimg_for_in11YC(img,y0,c0,y1,c1,y,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11Y(img,y0,y1,y) -#define cimg_for_in11ZC(img,z0,c0,z1,c1,z,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11Z(img,z0,z1,z) -#define cimg_for_in11XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in11Z(img,z0,z1,z) cimg_for_in11XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in11XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in11YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in11XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in11C(img,c0,c1,c) cimg_for_in11XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for11x11(img,x,y,z,c,I,T) \ - cimg_for11((img)._height,y) for (int x = 0, \ - _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = (T)(img)(0,_p5##y,z,c)), \ - (I[11] = I[12] = I[13] = I[14] = I[15] = I[16] = (T)(img)(0,_p4##y,z,c)), \ - (I[22] = I[23] = I[24] = I[25] = I[26] = I[27] = (T)(img)(0,_p3##y,z,c)), \ - (I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_p2##y,z,c)), \ - (I[44] = I[45] = I[46] = I[47] = I[48] = I[49] = (T)(img)(0,_p1##y,z,c)), \ - (I[55] = I[56] = I[57] = I[58] = I[59] = I[60] = (T)(img)(0,y,z,c)), \ - (I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = (T)(img)(0,_n1##y,z,c)), \ - (I[77] = I[78] = I[79] = I[80] = I[81] = I[82] = (T)(img)(0,_n2##y,z,c)), \ - (I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = (T)(img)(0,_n3##y,z,c)), \ - (I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = (T)(img)(0,_n4##y,z,c)), \ - (I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = (T)(img)(0,_n5##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[17] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[28] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[61] = (T)(img)(_n1##x,y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[83] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[94] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[116] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[18] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[29] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[62] = (T)(img)(_n2##x,y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[84] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[95] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[117] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[8] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[19] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[30] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[63] = (T)(img)(_n3##x,y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[85] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[96] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[118] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[9] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[20] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[31] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[42] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[64] = (T)(img)(_n4##x,y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[86] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[97] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[119] = (T)(img)(_n4##x,_n5##y,z,c)), \ - 5>=((img)._width)?(img).width()-1:5); \ - (_n5##x<(img).width() && ( \ - (I[10] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[21] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[32] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[43] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[54] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[65] = (T)(img)(_n5##x,y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[87] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[98] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[120] = (T)(img)(_n5##x,_n5##y,z,c)),1)) || \ - _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], \ - I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], \ - I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \ - I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], \ - I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], \ - I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], \ - I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], \ - _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x) - -#define cimg_for_in11x11(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in11((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = (int)( \ - (I[0] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[11] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[22] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[33] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[44] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[55] = (T)(img)(_p5##x,y,z,c)), \ - (I[66] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[77] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[88] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[99] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[110] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[1] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[12] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[23] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[34] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[45] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[56] = (T)(img)(_p4##x,y,z,c)), \ - (I[67] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[78] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[89] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[100] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[111] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[2] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[13] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[24] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[35] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[46] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[57] = (T)(img)(_p3##x,y,z,c)), \ - (I[68] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[79] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[90] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[101] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[112] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[3] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[14] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[25] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[36] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[47] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[58] = (T)(img)(_p2##x,y,z,c)), \ - (I[69] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[80] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[91] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[102] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[113] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[4] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[15] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[26] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[37] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[48] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[59] = (T)(img)(_p1##x,y,z,c)), \ - (I[70] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[81] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[92] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[103] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[114] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[5] = (T)(img)(x,_p5##y,z,c)), \ - (I[16] = (T)(img)(x,_p4##y,z,c)), \ - (I[27] = (T)(img)(x,_p3##y,z,c)), \ - (I[38] = (T)(img)(x,_p2##y,z,c)), \ - (I[49] = (T)(img)(x,_p1##y,z,c)), \ - (I[60] = (T)(img)(x,y,z,c)), \ - (I[71] = (T)(img)(x,_n1##y,z,c)), \ - (I[82] = (T)(img)(x,_n2##y,z,c)), \ - (I[93] = (T)(img)(x,_n3##y,z,c)), \ - (I[104] = (T)(img)(x,_n4##y,z,c)), \ - (I[115] = (T)(img)(x,_n5##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[17] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[28] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[61] = (T)(img)(_n1##x,y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[83] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[94] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[116] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[18] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[29] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[62] = (T)(img)(_n2##x,y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[84] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[95] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[117] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[8] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[19] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[30] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[63] = (T)(img)(_n3##x,y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[85] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[96] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[118] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[9] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[20] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[31] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[42] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[64] = (T)(img)(_n4##x,y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[86] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[97] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[119] = (T)(img)(_n4##x,_n5##y,z,c)), \ - x+5>=(img).width()?(img).width()-1:x+5); \ - x<=(int)(x1) && ((_n5##x<(img).width() && ( \ - (I[10] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[21] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[32] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[43] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[54] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[65] = (T)(img)(_n5##x,y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[87] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[98] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[120] = (T)(img)(_n5##x,_n5##y,z,c)),1)) || \ - _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], \ - I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], \ - I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \ - I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], \ - I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], \ - I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], \ - I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], \ - _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x) - -#define cimg_get11x11(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p5##x,_p5##y,z,c), I[1] = (T)(img)(_p4##x,_p5##y,z,c), I[2] = (T)(img)(_p3##x,_p5##y,z,c), I[3] = (T)(img)(_p2##x,_p5##y,z,c), I[4] = (T)(img)(_p1##x,_p5##y,z,c), I[5] = (T)(img)(x,_p5##y,z,c), I[6] = (T)(img)(_n1##x,_p5##y,z,c), I[7] = (T)(img)(_n2##x,_p5##y,z,c), I[8] = (T)(img)(_n3##x,_p5##y,z,c), I[9] = (T)(img)(_n4##x,_p5##y,z,c), I[10] = (T)(img)(_n5##x,_p5##y,z,c), \ - I[11] = (T)(img)(_p5##x,_p4##y,z,c), I[12] = (T)(img)(_p4##x,_p4##y,z,c), I[13] = (T)(img)(_p3##x,_p4##y,z,c), I[14] = (T)(img)(_p2##x,_p4##y,z,c), I[15] = (T)(img)(_p1##x,_p4##y,z,c), I[16] = (T)(img)(x,_p4##y,z,c), I[17] = (T)(img)(_n1##x,_p4##y,z,c), I[18] = (T)(img)(_n2##x,_p4##y,z,c), I[19] = (T)(img)(_n3##x,_p4##y,z,c), I[20] = (T)(img)(_n4##x,_p4##y,z,c), I[21] = (T)(img)(_n5##x,_p4##y,z,c), \ - I[22] = (T)(img)(_p5##x,_p3##y,z,c), I[23] = (T)(img)(_p4##x,_p3##y,z,c), I[24] = (T)(img)(_p3##x,_p3##y,z,c), I[25] = (T)(img)(_p2##x,_p3##y,z,c), I[26] = (T)(img)(_p1##x,_p3##y,z,c), I[27] = (T)(img)(x,_p3##y,z,c), I[28] = (T)(img)(_n1##x,_p3##y,z,c), I[29] = (T)(img)(_n2##x,_p3##y,z,c), I[30] = (T)(img)(_n3##x,_p3##y,z,c), I[31] = (T)(img)(_n4##x,_p3##y,z,c), I[32] = (T)(img)(_n5##x,_p3##y,z,c), \ - I[33] = (T)(img)(_p5##x,_p2##y,z,c), I[34] = (T)(img)(_p4##x,_p2##y,z,c), I[35] = (T)(img)(_p3##x,_p2##y,z,c), I[36] = (T)(img)(_p2##x,_p2##y,z,c), I[37] = (T)(img)(_p1##x,_p2##y,z,c), I[38] = (T)(img)(x,_p2##y,z,c), I[39] = (T)(img)(_n1##x,_p2##y,z,c), I[40] = (T)(img)(_n2##x,_p2##y,z,c), I[41] = (T)(img)(_n3##x,_p2##y,z,c), I[42] = (T)(img)(_n4##x,_p2##y,z,c), I[43] = (T)(img)(_n5##x,_p2##y,z,c), \ - I[44] = (T)(img)(_p5##x,_p1##y,z,c), I[45] = (T)(img)(_p4##x,_p1##y,z,c), I[46] = (T)(img)(_p3##x,_p1##y,z,c), I[47] = (T)(img)(_p2##x,_p1##y,z,c), I[48] = (T)(img)(_p1##x,_p1##y,z,c), I[49] = (T)(img)(x,_p1##y,z,c), I[50] = (T)(img)(_n1##x,_p1##y,z,c), I[51] = (T)(img)(_n2##x,_p1##y,z,c), I[52] = (T)(img)(_n3##x,_p1##y,z,c), I[53] = (T)(img)(_n4##x,_p1##y,z,c), I[54] = (T)(img)(_n5##x,_p1##y,z,c), \ - I[55] = (T)(img)(_p5##x,y,z,c), I[56] = (T)(img)(_p4##x,y,z,c), I[57] = (T)(img)(_p3##x,y,z,c), I[58] = (T)(img)(_p2##x,y,z,c), I[59] = (T)(img)(_p1##x,y,z,c), I[60] = (T)(img)(x,y,z,c), I[61] = (T)(img)(_n1##x,y,z,c), I[62] = (T)(img)(_n2##x,y,z,c), I[63] = (T)(img)(_n3##x,y,z,c), I[64] = (T)(img)(_n4##x,y,z,c), I[65] = (T)(img)(_n5##x,y,z,c), \ - I[66] = (T)(img)(_p5##x,_n1##y,z,c), I[67] = (T)(img)(_p4##x,_n1##y,z,c), I[68] = (T)(img)(_p3##x,_n1##y,z,c), I[69] = (T)(img)(_p2##x,_n1##y,z,c), I[70] = (T)(img)(_p1##x,_n1##y,z,c), I[71] = (T)(img)(x,_n1##y,z,c), I[72] = (T)(img)(_n1##x,_n1##y,z,c), I[73] = (T)(img)(_n2##x,_n1##y,z,c), I[74] = (T)(img)(_n3##x,_n1##y,z,c), I[75] = (T)(img)(_n4##x,_n1##y,z,c), I[76] = (T)(img)(_n5##x,_n1##y,z,c), \ - I[77] = (T)(img)(_p5##x,_n2##y,z,c), I[78] = (T)(img)(_p4##x,_n2##y,z,c), I[79] = (T)(img)(_p3##x,_n2##y,z,c), I[80] = (T)(img)(_p2##x,_n2##y,z,c), I[81] = (T)(img)(_p1##x,_n2##y,z,c), I[82] = (T)(img)(x,_n2##y,z,c), I[83] = (T)(img)(_n1##x,_n2##y,z,c), I[84] = (T)(img)(_n2##x,_n2##y,z,c), I[85] = (T)(img)(_n3##x,_n2##y,z,c), I[86] = (T)(img)(_n4##x,_n2##y,z,c), I[87] = (T)(img)(_n5##x,_n2##y,z,c), \ - I[88] = (T)(img)(_p5##x,_n3##y,z,c), I[89] = (T)(img)(_p4##x,_n3##y,z,c), I[90] = (T)(img)(_p3##x,_n3##y,z,c), I[91] = (T)(img)(_p2##x,_n3##y,z,c), I[92] = (T)(img)(_p1##x,_n3##y,z,c), I[93] = (T)(img)(x,_n3##y,z,c), I[94] = (T)(img)(_n1##x,_n3##y,z,c), I[95] = (T)(img)(_n2##x,_n3##y,z,c), I[96] = (T)(img)(_n3##x,_n3##y,z,c), I[97] = (T)(img)(_n4##x,_n3##y,z,c), I[98] = (T)(img)(_n5##x,_n3##y,z,c), \ - I[99] = (T)(img)(_p5##x,_n4##y,z,c), I[100] = (T)(img)(_p4##x,_n4##y,z,c), I[101] = (T)(img)(_p3##x,_n4##y,z,c), I[102] = (T)(img)(_p2##x,_n4##y,z,c), I[103] = (T)(img)(_p1##x,_n4##y,z,c), I[104] = (T)(img)(x,_n4##y,z,c), I[105] = (T)(img)(_n1##x,_n4##y,z,c), I[106] = (T)(img)(_n2##x,_n4##y,z,c), I[107] = (T)(img)(_n3##x,_n4##y,z,c), I[108] = (T)(img)(_n4##x,_n4##y,z,c), I[109] = (T)(img)(_n5##x,_n4##y,z,c), \ - I[110] = (T)(img)(_p5##x,_n5##y,z,c), I[111] = (T)(img)(_p4##x,_n5##y,z,c), I[112] = (T)(img)(_p3##x,_n5##y,z,c), I[113] = (T)(img)(_p2##x,_n5##y,z,c), I[114] = (T)(img)(_p1##x,_n5##y,z,c), I[115] = (T)(img)(x,_n5##y,z,c), I[116] = (T)(img)(_n1##x,_n5##y,z,c), I[117] = (T)(img)(_n2##x,_n5##y,z,c), I[118] = (T)(img)(_n3##x,_n5##y,z,c), I[119] = (T)(img)(_n4##x,_n5##y,z,c), I[120] = (T)(img)(_n5##x,_n5##y,z,c); - -// Define 12x12 loop macros -//------------------------- -#define cimg_for12(bound,i) for (int i = 0, \ - _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6; \ - _n6##i<(int)(bound) || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i) - -#define cimg_for12X(img,x) cimg_for12((img)._width,x) -#define cimg_for12Y(img,y) cimg_for12((img)._height,y) -#define cimg_for12Z(img,z) cimg_for12((img)._depth,z) -#define cimg_for12C(img,c) cimg_for12((img)._spectrum,c) -#define cimg_for12XY(img,x,y) cimg_for12Y(img,y) cimg_for12X(img,x) -#define cimg_for12XZ(img,x,z) cimg_for12Z(img,z) cimg_for12X(img,x) -#define cimg_for12XC(img,x,c) cimg_for12C(img,c) cimg_for12X(img,x) -#define cimg_for12YZ(img,y,z) cimg_for12Z(img,z) cimg_for12Y(img,y) -#define cimg_for12YC(img,y,c) cimg_for12C(img,c) cimg_for12Y(img,y) -#define cimg_for12ZC(img,z,c) cimg_for12C(img,c) cimg_for12Z(img,z) -#define cimg_for12XYZ(img,x,y,z) cimg_for12Z(img,z) cimg_for12XY(img,x,y) -#define cimg_for12XZC(img,x,z,c) cimg_for12C(img,c) cimg_for12XZ(img,x,z) -#define cimg_for12YZC(img,y,z,c) cimg_for12C(img,c) cimg_for12YZ(img,y,z) -#define cimg_for12XYZC(img,x,y,z,c) cimg_for12C(img,c) cimg_for12XYZ(img,x,y,z) - -#define cimg_for_in12(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6; \ - i<=(int)(i1) && (_n6##i<(int)(bound) || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i) - -#define cimg_for_in12X(img,x0,x1,x) cimg_for_in12((img)._width,x0,x1,x) -#define cimg_for_in12Y(img,y0,y1,y) cimg_for_in12((img)._height,y0,y1,y) -#define cimg_for_in12Z(img,z0,z1,z) cimg_for_in12((img)._depth,z0,z1,z) -#define cimg_for_in12C(img,c0,c1,c) cimg_for_in12((img)._spectrum,c0,c1,c) -#define cimg_for_in12XY(img,x0,y0,x1,y1,x,y) cimg_for_in12Y(img,y0,y1,y) cimg_for_in12X(img,x0,x1,x) -#define cimg_for_in12XZ(img,x0,z0,x1,z1,x,z) cimg_for_in12Z(img,z0,z1,z) cimg_for_in12X(img,x0,x1,x) -#define cimg_for_in12XC(img,x0,c0,x1,c1,x,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12X(img,x0,x1,x) -#define cimg_for_in12YZ(img,y0,z0,y1,z1,y,z) cimg_for_in12Z(img,z0,z1,z) cimg_for_in12Y(img,y0,y1,y) -#define cimg_for_in12YC(img,y0,c0,y1,c1,y,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12Y(img,y0,y1,y) -#define cimg_for_in12ZC(img,z0,c0,z1,c1,z,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12Z(img,z0,z1,z) -#define cimg_for_in12XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in12Z(img,z0,z1,z) cimg_for_in12XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in12XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in12YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in12XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in12C(img,c0,c1,c) cimg_for_in12XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for12x12(img,x,y,z,c,I,T) \ - cimg_for12((img)._height,y) for (int x = 0, \ - _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = (T)(img)(0,_p5##y,z,c)), \ - (I[12] = I[13] = I[14] = I[15] = I[16] = I[17] = (T)(img)(0,_p4##y,z,c)), \ - (I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = (T)(img)(0,_p3##y,z,c)), \ - (I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = (T)(img)(0,_p2##y,z,c)), \ - (I[48] = I[49] = I[50] = I[51] = I[52] = I[53] = (T)(img)(0,_p1##y,z,c)), \ - (I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = (T)(img)(0,y,z,c)), \ - (I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = (T)(img)(0,_n1##y,z,c)), \ - (I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = (T)(img)(0,_n2##y,z,c)), \ - (I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = (T)(img)(0,_n3##y,z,c)), \ - (I[108] = I[109] = I[110] = I[111] = I[112] = I[113] = (T)(img)(0,_n4##y,z,c)), \ - (I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = (T)(img)(0,_n5##y,z,c)), \ - (I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = (T)(img)(0,_n6##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[42] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[54] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[66] = (T)(img)(_n1##x,y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[90] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[102] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[114] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[126] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[138] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[43] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[55] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[67] = (T)(img)(_n2##x,y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[91] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[103] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[115] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[127] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[139] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[8] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[20] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[32] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[44] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[56] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[68] = (T)(img)(_n3##x,y,z,c)), \ - (I[80] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[92] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[104] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[116] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[128] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[140] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[9] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[21] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[33] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[45] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[57] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[69] = (T)(img)(_n4##x,y,z,c)), \ - (I[81] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[93] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[105] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[117] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[129] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[141] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[10] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[22] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[34] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[46] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[58] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[70] = (T)(img)(_n5##x,y,z,c)), \ - (I[82] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[94] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[106] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[118] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[130] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[142] = (T)(img)(_n5##x,_n6##y,z,c)), \ - 6>=((img)._width)?(img).width()-1:6); \ - (_n6##x<(img).width() && ( \ - (I[11] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[23] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[35] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[47] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[59] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[71] = (T)(img)(_n6##x,y,z,c)), \ - (I[83] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[95] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[107] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[119] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[131] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[143] = (T)(img)(_n6##x,_n6##y,z,c)),1)) || \ - _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x) - -#define cimg_for_in12x12(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in12((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = (int)( \ - (I[0] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[12] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[24] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[36] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[48] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[60] = (T)(img)(_p5##x,y,z,c)), \ - (I[72] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[84] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[96] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[108] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[120] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[132] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[1] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[13] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[25] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[37] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[49] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[61] = (T)(img)(_p4##x,y,z,c)), \ - (I[73] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[85] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[97] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[109] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[121] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[133] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[2] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[14] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[26] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[38] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[50] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[62] = (T)(img)(_p3##x,y,z,c)), \ - (I[74] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[86] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[98] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[110] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[122] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[134] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[3] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[15] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[27] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[39] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[51] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[63] = (T)(img)(_p2##x,y,z,c)), \ - (I[75] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[87] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[99] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[111] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[123] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[135] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[4] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[16] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[28] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[40] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[52] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[64] = (T)(img)(_p1##x,y,z,c)), \ - (I[76] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[88] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[100] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[112] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[124] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[136] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[5] = (T)(img)(x,_p5##y,z,c)), \ - (I[17] = (T)(img)(x,_p4##y,z,c)), \ - (I[29] = (T)(img)(x,_p3##y,z,c)), \ - (I[41] = (T)(img)(x,_p2##y,z,c)), \ - (I[53] = (T)(img)(x,_p1##y,z,c)), \ - (I[65] = (T)(img)(x,y,z,c)), \ - (I[77] = (T)(img)(x,_n1##y,z,c)), \ - (I[89] = (T)(img)(x,_n2##y,z,c)), \ - (I[101] = (T)(img)(x,_n3##y,z,c)), \ - (I[113] = (T)(img)(x,_n4##y,z,c)), \ - (I[125] = (T)(img)(x,_n5##y,z,c)), \ - (I[137] = (T)(img)(x,_n6##y,z,c)), \ - (I[6] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[18] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[42] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[54] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[66] = (T)(img)(_n1##x,y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[90] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[102] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[114] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[126] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[138] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[7] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[19] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[43] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[55] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[67] = (T)(img)(_n2##x,y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[91] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[103] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[115] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[127] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[139] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[8] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[20] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[32] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[44] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[56] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[68] = (T)(img)(_n3##x,y,z,c)), \ - (I[80] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[92] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[104] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[116] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[128] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[140] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[9] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[21] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[33] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[45] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[57] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[69] = (T)(img)(_n4##x,y,z,c)), \ - (I[81] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[93] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[105] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[117] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[129] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[141] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[10] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[22] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[34] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[46] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[58] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[70] = (T)(img)(_n5##x,y,z,c)), \ - (I[82] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[94] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[106] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[118] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[130] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[142] = (T)(img)(_n5##x,_n6##y,z,c)), \ - x+6>=(img).width()?(img).width()-1:x+6); \ - x<=(int)(x1) && ((_n6##x<(img).width() && ( \ - (I[11] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[23] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[35] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[47] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[59] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[71] = (T)(img)(_n6##x,y,z,c)), \ - (I[83] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[95] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[107] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[119] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[131] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[143] = (T)(img)(_n6##x,_n6##y,z,c)),1)) || \ - _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x) - -#define cimg_get12x12(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p5##x,_p5##y,z,c), I[1] = (T)(img)(_p4##x,_p5##y,z,c), I[2] = (T)(img)(_p3##x,_p5##y,z,c), I[3] = (T)(img)(_p2##x,_p5##y,z,c), I[4] = (T)(img)(_p1##x,_p5##y,z,c), I[5] = (T)(img)(x,_p5##y,z,c), I[6] = (T)(img)(_n1##x,_p5##y,z,c), I[7] = (T)(img)(_n2##x,_p5##y,z,c), I[8] = (T)(img)(_n3##x,_p5##y,z,c), I[9] = (T)(img)(_n4##x,_p5##y,z,c), I[10] = (T)(img)(_n5##x,_p5##y,z,c), I[11] = (T)(img)(_n6##x,_p5##y,z,c), \ - I[12] = (T)(img)(_p5##x,_p4##y,z,c), I[13] = (T)(img)(_p4##x,_p4##y,z,c), I[14] = (T)(img)(_p3##x,_p4##y,z,c), I[15] = (T)(img)(_p2##x,_p4##y,z,c), I[16] = (T)(img)(_p1##x,_p4##y,z,c), I[17] = (T)(img)(x,_p4##y,z,c), I[18] = (T)(img)(_n1##x,_p4##y,z,c), I[19] = (T)(img)(_n2##x,_p4##y,z,c), I[20] = (T)(img)(_n3##x,_p4##y,z,c), I[21] = (T)(img)(_n4##x,_p4##y,z,c), I[22] = (T)(img)(_n5##x,_p4##y,z,c), I[23] = (T)(img)(_n6##x,_p4##y,z,c), \ - I[24] = (T)(img)(_p5##x,_p3##y,z,c), I[25] = (T)(img)(_p4##x,_p3##y,z,c), I[26] = (T)(img)(_p3##x,_p3##y,z,c), I[27] = (T)(img)(_p2##x,_p3##y,z,c), I[28] = (T)(img)(_p1##x,_p3##y,z,c), I[29] = (T)(img)(x,_p3##y,z,c), I[30] = (T)(img)(_n1##x,_p3##y,z,c), I[31] = (T)(img)(_n2##x,_p3##y,z,c), I[32] = (T)(img)(_n3##x,_p3##y,z,c), I[33] = (T)(img)(_n4##x,_p3##y,z,c), I[34] = (T)(img)(_n5##x,_p3##y,z,c), I[35] = (T)(img)(_n6##x,_p3##y,z,c), \ - I[36] = (T)(img)(_p5##x,_p2##y,z,c), I[37] = (T)(img)(_p4##x,_p2##y,z,c), I[38] = (T)(img)(_p3##x,_p2##y,z,c), I[39] = (T)(img)(_p2##x,_p2##y,z,c), I[40] = (T)(img)(_p1##x,_p2##y,z,c), I[41] = (T)(img)(x,_p2##y,z,c), I[42] = (T)(img)(_n1##x,_p2##y,z,c), I[43] = (T)(img)(_n2##x,_p2##y,z,c), I[44] = (T)(img)(_n3##x,_p2##y,z,c), I[45] = (T)(img)(_n4##x,_p2##y,z,c), I[46] = (T)(img)(_n5##x,_p2##y,z,c), I[47] = (T)(img)(_n6##x,_p2##y,z,c), \ - I[48] = (T)(img)(_p5##x,_p1##y,z,c), I[49] = (T)(img)(_p4##x,_p1##y,z,c), I[50] = (T)(img)(_p3##x,_p1##y,z,c), I[51] = (T)(img)(_p2##x,_p1##y,z,c), I[52] = (T)(img)(_p1##x,_p1##y,z,c), I[53] = (T)(img)(x,_p1##y,z,c), I[54] = (T)(img)(_n1##x,_p1##y,z,c), I[55] = (T)(img)(_n2##x,_p1##y,z,c), I[56] = (T)(img)(_n3##x,_p1##y,z,c), I[57] = (T)(img)(_n4##x,_p1##y,z,c), I[58] = (T)(img)(_n5##x,_p1##y,z,c), I[59] = (T)(img)(_n6##x,_p1##y,z,c), \ - I[60] = (T)(img)(_p5##x,y,z,c), I[61] = (T)(img)(_p4##x,y,z,c), I[62] = (T)(img)(_p3##x,y,z,c), I[63] = (T)(img)(_p2##x,y,z,c), I[64] = (T)(img)(_p1##x,y,z,c), I[65] = (T)(img)(x,y,z,c), I[66] = (T)(img)(_n1##x,y,z,c), I[67] = (T)(img)(_n2##x,y,z,c), I[68] = (T)(img)(_n3##x,y,z,c), I[69] = (T)(img)(_n4##x,y,z,c), I[70] = (T)(img)(_n5##x,y,z,c), I[71] = (T)(img)(_n6##x,y,z,c), \ - I[72] = (T)(img)(_p5##x,_n1##y,z,c), I[73] = (T)(img)(_p4##x,_n1##y,z,c), I[74] = (T)(img)(_p3##x,_n1##y,z,c), I[75] = (T)(img)(_p2##x,_n1##y,z,c), I[76] = (T)(img)(_p1##x,_n1##y,z,c), I[77] = (T)(img)(x,_n1##y,z,c), I[78] = (T)(img)(_n1##x,_n1##y,z,c), I[79] = (T)(img)(_n2##x,_n1##y,z,c), I[80] = (T)(img)(_n3##x,_n1##y,z,c), I[81] = (T)(img)(_n4##x,_n1##y,z,c), I[82] = (T)(img)(_n5##x,_n1##y,z,c), I[83] = (T)(img)(_n6##x,_n1##y,z,c), \ - I[84] = (T)(img)(_p5##x,_n2##y,z,c), I[85] = (T)(img)(_p4##x,_n2##y,z,c), I[86] = (T)(img)(_p3##x,_n2##y,z,c), I[87] = (T)(img)(_p2##x,_n2##y,z,c), I[88] = (T)(img)(_p1##x,_n2##y,z,c), I[89] = (T)(img)(x,_n2##y,z,c), I[90] = (T)(img)(_n1##x,_n2##y,z,c), I[91] = (T)(img)(_n2##x,_n2##y,z,c), I[92] = (T)(img)(_n3##x,_n2##y,z,c), I[93] = (T)(img)(_n4##x,_n2##y,z,c), I[94] = (T)(img)(_n5##x,_n2##y,z,c), I[95] = (T)(img)(_n6##x,_n2##y,z,c), \ - I[96] = (T)(img)(_p5##x,_n3##y,z,c), I[97] = (T)(img)(_p4##x,_n3##y,z,c), I[98] = (T)(img)(_p3##x,_n3##y,z,c), I[99] = (T)(img)(_p2##x,_n3##y,z,c), I[100] = (T)(img)(_p1##x,_n3##y,z,c), I[101] = (T)(img)(x,_n3##y,z,c), I[102] = (T)(img)(_n1##x,_n3##y,z,c), I[103] = (T)(img)(_n2##x,_n3##y,z,c), I[104] = (T)(img)(_n3##x,_n3##y,z,c), I[105] = (T)(img)(_n4##x,_n3##y,z,c), I[106] = (T)(img)(_n5##x,_n3##y,z,c), I[107] = (T)(img)(_n6##x,_n3##y,z,c), \ - I[108] = (T)(img)(_p5##x,_n4##y,z,c), I[109] = (T)(img)(_p4##x,_n4##y,z,c), I[110] = (T)(img)(_p3##x,_n4##y,z,c), I[111] = (T)(img)(_p2##x,_n4##y,z,c), I[112] = (T)(img)(_p1##x,_n4##y,z,c), I[113] = (T)(img)(x,_n4##y,z,c), I[114] = (T)(img)(_n1##x,_n4##y,z,c), I[115] = (T)(img)(_n2##x,_n4##y,z,c), I[116] = (T)(img)(_n3##x,_n4##y,z,c), I[117] = (T)(img)(_n4##x,_n4##y,z,c), I[118] = (T)(img)(_n5##x,_n4##y,z,c), I[119] = (T)(img)(_n6##x,_n4##y,z,c), \ - I[120] = (T)(img)(_p5##x,_n5##y,z,c), I[121] = (T)(img)(_p4##x,_n5##y,z,c), I[122] = (T)(img)(_p3##x,_n5##y,z,c), I[123] = (T)(img)(_p2##x,_n5##y,z,c), I[124] = (T)(img)(_p1##x,_n5##y,z,c), I[125] = (T)(img)(x,_n5##y,z,c), I[126] = (T)(img)(_n1##x,_n5##y,z,c), I[127] = (T)(img)(_n2##x,_n5##y,z,c), I[128] = (T)(img)(_n3##x,_n5##y,z,c), I[129] = (T)(img)(_n4##x,_n5##y,z,c), I[130] = (T)(img)(_n5##x,_n5##y,z,c), I[131] = (T)(img)(_n6##x,_n5##y,z,c), \ - I[132] = (T)(img)(_p5##x,_n6##y,z,c), I[133] = (T)(img)(_p4##x,_n6##y,z,c), I[134] = (T)(img)(_p3##x,_n6##y,z,c), I[135] = (T)(img)(_p2##x,_n6##y,z,c), I[136] = (T)(img)(_p1##x,_n6##y,z,c), I[137] = (T)(img)(x,_n6##y,z,c), I[138] = (T)(img)(_n1##x,_n6##y,z,c), I[139] = (T)(img)(_n2##x,_n6##y,z,c), I[140] = (T)(img)(_n3##x,_n6##y,z,c), I[141] = (T)(img)(_n4##x,_n6##y,z,c), I[142] = (T)(img)(_n5##x,_n6##y,z,c), I[143] = (T)(img)(_n6##x,_n6##y,z,c); - -// Define 13x13 loop macros -//------------------------- -#define cimg_for13(bound,i) for (int i = 0, \ - _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6; \ - _n6##i<(int)(bound) || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i) - -#define cimg_for13X(img,x) cimg_for13((img)._width,x) -#define cimg_for13Y(img,y) cimg_for13((img)._height,y) -#define cimg_for13Z(img,z) cimg_for13((img)._depth,z) -#define cimg_for13C(img,c) cimg_for13((img)._spectrum,c) -#define cimg_for13XY(img,x,y) cimg_for13Y(img,y) cimg_for13X(img,x) -#define cimg_for13XZ(img,x,z) cimg_for13Z(img,z) cimg_for13X(img,x) -#define cimg_for13XC(img,x,c) cimg_for13C(img,c) cimg_for13X(img,x) -#define cimg_for13YZ(img,y,z) cimg_for13Z(img,z) cimg_for13Y(img,y) -#define cimg_for13YC(img,y,c) cimg_for13C(img,c) cimg_for13Y(img,y) -#define cimg_for13ZC(img,z,c) cimg_for13C(img,c) cimg_for13Z(img,z) -#define cimg_for13XYZ(img,x,y,z) cimg_for13Z(img,z) cimg_for13XY(img,x,y) -#define cimg_for13XZC(img,x,z,c) cimg_for13C(img,c) cimg_for13XZ(img,x,z) -#define cimg_for13YZC(img,y,z,c) cimg_for13C(img,c) cimg_for13YZ(img,y,z) -#define cimg_for13XYZC(img,x,y,z,c) cimg_for13C(img,c) cimg_for13XYZ(img,x,y,z) - -#define cimg_for_in13(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6; \ - i<=(int)(i1) && (_n6##i<(int)(bound) || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i) - -#define cimg_for_in13X(img,x0,x1,x) cimg_for_in13((img)._width,x0,x1,x) -#define cimg_for_in13Y(img,y0,y1,y) cimg_for_in13((img)._height,y0,y1,y) -#define cimg_for_in13Z(img,z0,z1,z) cimg_for_in13((img)._depth,z0,z1,z) -#define cimg_for_in13C(img,c0,c1,c) cimg_for_in13((img)._spectrum,c0,c1,c) -#define cimg_for_in13XY(img,x0,y0,x1,y1,x,y) cimg_for_in13Y(img,y0,y1,y) cimg_for_in13X(img,x0,x1,x) -#define cimg_for_in13XZ(img,x0,z0,x1,z1,x,z) cimg_for_in13Z(img,z0,z1,z) cimg_for_in13X(img,x0,x1,x) -#define cimg_for_in13XC(img,x0,c0,x1,c1,x,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13X(img,x0,x1,x) -#define cimg_for_in13YZ(img,y0,z0,y1,z1,y,z) cimg_for_in13Z(img,z0,z1,z) cimg_for_in13Y(img,y0,y1,y) -#define cimg_for_in13YC(img,y0,c0,y1,c1,y,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13Y(img,y0,y1,y) -#define cimg_for_in13ZC(img,z0,c0,z1,c1,z,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13Z(img,z0,z1,z) -#define cimg_for_in13XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in13Z(img,z0,z1,z) cimg_for_in13XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in13XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in13YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in13XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in13C(img,c0,c1,c) cimg_for_in13XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for13x13(img,x,y,z,c,I,T) \ - cimg_for13((img)._height,y) for (int x = 0, \ - _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = (T)(img)(0,_p6##y,z,c)), \ - (I[13] = I[14] = I[15] = I[16] = I[17] = I[18] = I[19] = (T)(img)(0,_p5##y,z,c)), \ - (I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = (T)(img)(0,_p4##y,z,c)), \ - (I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = I[45] = (T)(img)(0,_p3##y,z,c)), \ - (I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = I[58] = (T)(img)(0,_p2##y,z,c)), \ - (I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = (T)(img)(0,_p1##y,z,c)), \ - (I[78] = I[79] = I[80] = I[81] = I[82] = I[83] = I[84] = (T)(img)(0,y,z,c)), \ - (I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = (T)(img)(0,_n1##y,z,c)), \ - (I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = (T)(img)(0,_n2##y,z,c)), \ - (I[117] = I[118] = I[119] = I[120] = I[121] = I[122] = I[123] = (T)(img)(0,_n3##y,z,c)), \ - (I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = (T)(img)(0,_n4##y,z,c)), \ - (I[143] = I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = (T)(img)(0,_n5##y,z,c)), \ - (I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = (T)(img)(0,_n6##y,z,c)), \ - (I[7] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[46] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[59] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[85] = (T)(img)(_n1##x,y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[124] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[137] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[163] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[8] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[21] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[47] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[60] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[86] = (T)(img)(_n2##x,y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[125] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[138] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[164] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[9] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[22] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[48] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[61] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[87] = (T)(img)(_n3##x,y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[126] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[139] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[165] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[10] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[23] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[36] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[49] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[62] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[88] = (T)(img)(_n4##x,y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[114] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[127] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[140] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[166] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[11] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[24] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[37] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[50] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[63] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[89] = (T)(img)(_n5##x,y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[115] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[128] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[141] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[167] = (T)(img)(_n5##x,_n6##y,z,c)), \ - 6>=((img)._width)?(img).width()-1:6); \ - (_n6##x<(img).width() && ( \ - (I[12] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[25] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[38] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[51] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[64] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[77] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[90] = (T)(img)(_n6##x,y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[116] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[129] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[142] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[168] = (T)(img)(_n6##x,_n6##y,z,c)),1)) || \ - _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], \ - I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], \ - I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], \ - I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], \ - I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], \ - I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], \ - I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], \ - I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], \ - I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], \ - _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x) - -#define cimg_for_in13x13(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in13((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = (int)( \ - (I[0] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[13] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[26] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[39] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[52] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[65] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[78] = (T)(img)(_p6##x,y,z,c)), \ - (I[91] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[104] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[117] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[130] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[143] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[156] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[1] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[14] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[27] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[40] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[53] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[66] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[79] = (T)(img)(_p5##x,y,z,c)), \ - (I[92] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[105] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[118] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[131] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[144] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[157] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[2] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[15] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[28] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[41] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[54] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[67] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[80] = (T)(img)(_p4##x,y,z,c)), \ - (I[93] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[106] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[119] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[132] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[145] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[158] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[3] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[16] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[29] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[42] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[55] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[68] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[81] = (T)(img)(_p3##x,y,z,c)), \ - (I[94] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[107] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[120] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[133] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[146] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[159] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[4] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[17] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[30] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[43] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[56] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[69] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[82] = (T)(img)(_p2##x,y,z,c)), \ - (I[95] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[108] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[121] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[134] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[147] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[160] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[5] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[18] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[31] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[44] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[57] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[70] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[83] = (T)(img)(_p1##x,y,z,c)), \ - (I[96] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[109] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[122] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[135] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[148] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[161] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[6] = (T)(img)(x,_p6##y,z,c)), \ - (I[19] = (T)(img)(x,_p5##y,z,c)), \ - (I[32] = (T)(img)(x,_p4##y,z,c)), \ - (I[45] = (T)(img)(x,_p3##y,z,c)), \ - (I[58] = (T)(img)(x,_p2##y,z,c)), \ - (I[71] = (T)(img)(x,_p1##y,z,c)), \ - (I[84] = (T)(img)(x,y,z,c)), \ - (I[97] = (T)(img)(x,_n1##y,z,c)), \ - (I[110] = (T)(img)(x,_n2##y,z,c)), \ - (I[123] = (T)(img)(x,_n3##y,z,c)), \ - (I[136] = (T)(img)(x,_n4##y,z,c)), \ - (I[149] = (T)(img)(x,_n5##y,z,c)), \ - (I[162] = (T)(img)(x,_n6##y,z,c)), \ - (I[7] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[20] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[46] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[59] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[85] = (T)(img)(_n1##x,y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[124] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[137] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[163] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[8] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[21] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[47] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[60] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[86] = (T)(img)(_n2##x,y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[125] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[138] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[164] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[9] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[22] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[48] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[61] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[87] = (T)(img)(_n3##x,y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[126] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[139] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[165] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[10] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[23] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[36] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[49] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[62] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[88] = (T)(img)(_n4##x,y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[114] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[127] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[140] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[166] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[11] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[24] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[37] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[50] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[63] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[89] = (T)(img)(_n5##x,y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[115] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[128] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[141] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[167] = (T)(img)(_n5##x,_n6##y,z,c)), \ - x+6>=(img).width()?(img).width()-1:x+6); \ - x<=(int)(x1) && ((_n6##x<(img).width() && ( \ - (I[12] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[25] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[38] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[51] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[64] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[77] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[90] = (T)(img)(_n6##x,y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[116] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[129] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[142] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[168] = (T)(img)(_n6##x,_n6##y,z,c)),1)) || \ - _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], \ - I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], \ - I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], \ - I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], \ - I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], \ - I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], \ - I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], \ - I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], \ - I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], \ - _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x) - -#define cimg_get13x13(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p6##x,_p6##y,z,c), I[1] = (T)(img)(_p5##x,_p6##y,z,c), I[2] = (T)(img)(_p4##x,_p6##y,z,c), I[3] = (T)(img)(_p3##x,_p6##y,z,c), I[4] = (T)(img)(_p2##x,_p6##y,z,c), I[5] = (T)(img)(_p1##x,_p6##y,z,c), I[6] = (T)(img)(x,_p6##y,z,c), I[7] = (T)(img)(_n1##x,_p6##y,z,c), I[8] = (T)(img)(_n2##x,_p6##y,z,c), I[9] = (T)(img)(_n3##x,_p6##y,z,c), I[10] = (T)(img)(_n4##x,_p6##y,z,c), I[11] = (T)(img)(_n5##x,_p6##y,z,c), I[12] = (T)(img)(_n6##x,_p6##y,z,c), \ - I[13] = (T)(img)(_p6##x,_p5##y,z,c), I[14] = (T)(img)(_p5##x,_p5##y,z,c), I[15] = (T)(img)(_p4##x,_p5##y,z,c), I[16] = (T)(img)(_p3##x,_p5##y,z,c), I[17] = (T)(img)(_p2##x,_p5##y,z,c), I[18] = (T)(img)(_p1##x,_p5##y,z,c), I[19] = (T)(img)(x,_p5##y,z,c), I[20] = (T)(img)(_n1##x,_p5##y,z,c), I[21] = (T)(img)(_n2##x,_p5##y,z,c), I[22] = (T)(img)(_n3##x,_p5##y,z,c), I[23] = (T)(img)(_n4##x,_p5##y,z,c), I[24] = (T)(img)(_n5##x,_p5##y,z,c), I[25] = (T)(img)(_n6##x,_p5##y,z,c), \ - I[26] = (T)(img)(_p6##x,_p4##y,z,c), I[27] = (T)(img)(_p5##x,_p4##y,z,c), I[28] = (T)(img)(_p4##x,_p4##y,z,c), I[29] = (T)(img)(_p3##x,_p4##y,z,c), I[30] = (T)(img)(_p2##x,_p4##y,z,c), I[31] = (T)(img)(_p1##x,_p4##y,z,c), I[32] = (T)(img)(x,_p4##y,z,c), I[33] = (T)(img)(_n1##x,_p4##y,z,c), I[34] = (T)(img)(_n2##x,_p4##y,z,c), I[35] = (T)(img)(_n3##x,_p4##y,z,c), I[36] = (T)(img)(_n4##x,_p4##y,z,c), I[37] = (T)(img)(_n5##x,_p4##y,z,c), I[38] = (T)(img)(_n6##x,_p4##y,z,c), \ - I[39] = (T)(img)(_p6##x,_p3##y,z,c), I[40] = (T)(img)(_p5##x,_p3##y,z,c), I[41] = (T)(img)(_p4##x,_p3##y,z,c), I[42] = (T)(img)(_p3##x,_p3##y,z,c), I[43] = (T)(img)(_p2##x,_p3##y,z,c), I[44] = (T)(img)(_p1##x,_p3##y,z,c), I[45] = (T)(img)(x,_p3##y,z,c), I[46] = (T)(img)(_n1##x,_p3##y,z,c), I[47] = (T)(img)(_n2##x,_p3##y,z,c), I[48] = (T)(img)(_n3##x,_p3##y,z,c), I[49] = (T)(img)(_n4##x,_p3##y,z,c), I[50] = (T)(img)(_n5##x,_p3##y,z,c), I[51] = (T)(img)(_n6##x,_p3##y,z,c), \ - I[52] = (T)(img)(_p6##x,_p2##y,z,c), I[53] = (T)(img)(_p5##x,_p2##y,z,c), I[54] = (T)(img)(_p4##x,_p2##y,z,c), I[55] = (T)(img)(_p3##x,_p2##y,z,c), I[56] = (T)(img)(_p2##x,_p2##y,z,c), I[57] = (T)(img)(_p1##x,_p2##y,z,c), I[58] = (T)(img)(x,_p2##y,z,c), I[59] = (T)(img)(_n1##x,_p2##y,z,c), I[60] = (T)(img)(_n2##x,_p2##y,z,c), I[61] = (T)(img)(_n3##x,_p2##y,z,c), I[62] = (T)(img)(_n4##x,_p2##y,z,c), I[63] = (T)(img)(_n5##x,_p2##y,z,c), I[64] = (T)(img)(_n6##x,_p2##y,z,c), \ - I[65] = (T)(img)(_p6##x,_p1##y,z,c), I[66] = (T)(img)(_p5##x,_p1##y,z,c), I[67] = (T)(img)(_p4##x,_p1##y,z,c), I[68] = (T)(img)(_p3##x,_p1##y,z,c), I[69] = (T)(img)(_p2##x,_p1##y,z,c), I[70] = (T)(img)(_p1##x,_p1##y,z,c), I[71] = (T)(img)(x,_p1##y,z,c), I[72] = (T)(img)(_n1##x,_p1##y,z,c), I[73] = (T)(img)(_n2##x,_p1##y,z,c), I[74] = (T)(img)(_n3##x,_p1##y,z,c), I[75] = (T)(img)(_n4##x,_p1##y,z,c), I[76] = (T)(img)(_n5##x,_p1##y,z,c), I[77] = (T)(img)(_n6##x,_p1##y,z,c), \ - I[78] = (T)(img)(_p6##x,y,z,c), I[79] = (T)(img)(_p5##x,y,z,c), I[80] = (T)(img)(_p4##x,y,z,c), I[81] = (T)(img)(_p3##x,y,z,c), I[82] = (T)(img)(_p2##x,y,z,c), I[83] = (T)(img)(_p1##x,y,z,c), I[84] = (T)(img)(x,y,z,c), I[85] = (T)(img)(_n1##x,y,z,c), I[86] = (T)(img)(_n2##x,y,z,c), I[87] = (T)(img)(_n3##x,y,z,c), I[88] = (T)(img)(_n4##x,y,z,c), I[89] = (T)(img)(_n5##x,y,z,c), I[90] = (T)(img)(_n6##x,y,z,c), \ - I[91] = (T)(img)(_p6##x,_n1##y,z,c), I[92] = (T)(img)(_p5##x,_n1##y,z,c), I[93] = (T)(img)(_p4##x,_n1##y,z,c), I[94] = (T)(img)(_p3##x,_n1##y,z,c), I[95] = (T)(img)(_p2##x,_n1##y,z,c), I[96] = (T)(img)(_p1##x,_n1##y,z,c), I[97] = (T)(img)(x,_n1##y,z,c), I[98] = (T)(img)(_n1##x,_n1##y,z,c), I[99] = (T)(img)(_n2##x,_n1##y,z,c), I[100] = (T)(img)(_n3##x,_n1##y,z,c), I[101] = (T)(img)(_n4##x,_n1##y,z,c), I[102] = (T)(img)(_n5##x,_n1##y,z,c), I[103] = (T)(img)(_n6##x,_n1##y,z,c), \ - I[104] = (T)(img)(_p6##x,_n2##y,z,c), I[105] = (T)(img)(_p5##x,_n2##y,z,c), I[106] = (T)(img)(_p4##x,_n2##y,z,c), I[107] = (T)(img)(_p3##x,_n2##y,z,c), I[108] = (T)(img)(_p2##x,_n2##y,z,c), I[109] = (T)(img)(_p1##x,_n2##y,z,c), I[110] = (T)(img)(x,_n2##y,z,c), I[111] = (T)(img)(_n1##x,_n2##y,z,c), I[112] = (T)(img)(_n2##x,_n2##y,z,c), I[113] = (T)(img)(_n3##x,_n2##y,z,c), I[114] = (T)(img)(_n4##x,_n2##y,z,c), I[115] = (T)(img)(_n5##x,_n2##y,z,c), I[116] = (T)(img)(_n6##x,_n2##y,z,c), \ - I[117] = (T)(img)(_p6##x,_n3##y,z,c), I[118] = (T)(img)(_p5##x,_n3##y,z,c), I[119] = (T)(img)(_p4##x,_n3##y,z,c), I[120] = (T)(img)(_p3##x,_n3##y,z,c), I[121] = (T)(img)(_p2##x,_n3##y,z,c), I[122] = (T)(img)(_p1##x,_n3##y,z,c), I[123] = (T)(img)(x,_n3##y,z,c), I[124] = (T)(img)(_n1##x,_n3##y,z,c), I[125] = (T)(img)(_n2##x,_n3##y,z,c), I[126] = (T)(img)(_n3##x,_n3##y,z,c), I[127] = (T)(img)(_n4##x,_n3##y,z,c), I[128] = (T)(img)(_n5##x,_n3##y,z,c), I[129] = (T)(img)(_n6##x,_n3##y,z,c), \ - I[130] = (T)(img)(_p6##x,_n4##y,z,c), I[131] = (T)(img)(_p5##x,_n4##y,z,c), I[132] = (T)(img)(_p4##x,_n4##y,z,c), I[133] = (T)(img)(_p3##x,_n4##y,z,c), I[134] = (T)(img)(_p2##x,_n4##y,z,c), I[135] = (T)(img)(_p1##x,_n4##y,z,c), I[136] = (T)(img)(x,_n4##y,z,c), I[137] = (T)(img)(_n1##x,_n4##y,z,c), I[138] = (T)(img)(_n2##x,_n4##y,z,c), I[139] = (T)(img)(_n3##x,_n4##y,z,c), I[140] = (T)(img)(_n4##x,_n4##y,z,c), I[141] = (T)(img)(_n5##x,_n4##y,z,c), I[142] = (T)(img)(_n6##x,_n4##y,z,c), \ - I[143] = (T)(img)(_p6##x,_n5##y,z,c), I[144] = (T)(img)(_p5##x,_n5##y,z,c), I[145] = (T)(img)(_p4##x,_n5##y,z,c), I[146] = (T)(img)(_p3##x,_n5##y,z,c), I[147] = (T)(img)(_p2##x,_n5##y,z,c), I[148] = (T)(img)(_p1##x,_n5##y,z,c), I[149] = (T)(img)(x,_n5##y,z,c), I[150] = (T)(img)(_n1##x,_n5##y,z,c), I[151] = (T)(img)(_n2##x,_n5##y,z,c), I[152] = (T)(img)(_n3##x,_n5##y,z,c), I[153] = (T)(img)(_n4##x,_n5##y,z,c), I[154] = (T)(img)(_n5##x,_n5##y,z,c), I[155] = (T)(img)(_n6##x,_n5##y,z,c), \ - I[156] = (T)(img)(_p6##x,_n6##y,z,c), I[157] = (T)(img)(_p5##x,_n6##y,z,c), I[158] = (T)(img)(_p4##x,_n6##y,z,c), I[159] = (T)(img)(_p3##x,_n6##y,z,c), I[160] = (T)(img)(_p2##x,_n6##y,z,c), I[161] = (T)(img)(_p1##x,_n6##y,z,c), I[162] = (T)(img)(x,_n6##y,z,c), I[163] = (T)(img)(_n1##x,_n6##y,z,c), I[164] = (T)(img)(_n2##x,_n6##y,z,c), I[165] = (T)(img)(_n3##x,_n6##y,z,c), I[166] = (T)(img)(_n4##x,_n6##y,z,c), I[167] = (T)(img)(_n5##x,_n6##y,z,c), I[168] = (T)(img)(_n6##x,_n6##y,z,c); - -// Define 14x14 loop macros -//------------------------- -#define cimg_for14(bound,i) for (int i = 0, \ - _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7; \ - _n7##i<(int)(bound) || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i) - -#define cimg_for14X(img,x) cimg_for14((img)._width,x) -#define cimg_for14Y(img,y) cimg_for14((img)._height,y) -#define cimg_for14Z(img,z) cimg_for14((img)._depth,z) -#define cimg_for14C(img,c) cimg_for14((img)._spectrum,c) -#define cimg_for14XY(img,x,y) cimg_for14Y(img,y) cimg_for14X(img,x) -#define cimg_for14XZ(img,x,z) cimg_for14Z(img,z) cimg_for14X(img,x) -#define cimg_for14XC(img,x,c) cimg_for14C(img,c) cimg_for14X(img,x) -#define cimg_for14YZ(img,y,z) cimg_for14Z(img,z) cimg_for14Y(img,y) -#define cimg_for14YC(img,y,c) cimg_for14C(img,c) cimg_for14Y(img,y) -#define cimg_for14ZC(img,z,c) cimg_for14C(img,c) cimg_for14Z(img,z) -#define cimg_for14XYZ(img,x,y,z) cimg_for14Z(img,z) cimg_for14XY(img,x,y) -#define cimg_for14XZC(img,x,z,c) cimg_for14C(img,c) cimg_for14XZ(img,x,z) -#define cimg_for14YZC(img,y,z,c) cimg_for14C(img,c) cimg_for14YZ(img,y,z) -#define cimg_for14XYZC(img,x,y,z,c) cimg_for14C(img,c) cimg_for14XYZ(img,x,y,z) - -#define cimg_for_in14(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7; \ - i<=(int)(i1) && (_n7##i<(int)(bound) || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i) - -#define cimg_for_in14X(img,x0,x1,x) cimg_for_in14((img)._width,x0,x1,x) -#define cimg_for_in14Y(img,y0,y1,y) cimg_for_in14((img)._height,y0,y1,y) -#define cimg_for_in14Z(img,z0,z1,z) cimg_for_in14((img)._depth,z0,z1,z) -#define cimg_for_in14C(img,c0,c1,c) cimg_for_in14((img)._spectrum,c0,c1,c) -#define cimg_for_in14XY(img,x0,y0,x1,y1,x,y) cimg_for_in14Y(img,y0,y1,y) cimg_for_in14X(img,x0,x1,x) -#define cimg_for_in14XZ(img,x0,z0,x1,z1,x,z) cimg_for_in14Z(img,z0,z1,z) cimg_for_in14X(img,x0,x1,x) -#define cimg_for_in14XC(img,x0,c0,x1,c1,x,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14X(img,x0,x1,x) -#define cimg_for_in14YZ(img,y0,z0,y1,z1,y,z) cimg_for_in14Z(img,z0,z1,z) cimg_for_in14Y(img,y0,y1,y) -#define cimg_for_in14YC(img,y0,c0,y1,c1,y,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14Y(img,y0,y1,y) -#define cimg_for_in14ZC(img,z0,c0,z1,c1,z,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14Z(img,z0,z1,z) -#define cimg_for_in14XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in14Z(img,z0,z1,z) cimg_for_in14XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in14XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in14YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in14XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in14C(img,c0,c1,c) cimg_for_in14XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for14x14(img,x,y,z,c,I,T) \ - cimg_for14((img)._height,y) for (int x = 0, \ - _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = (T)(img)(0,_p6##y,z,c)), \ - (I[14] = I[15] = I[16] = I[17] = I[18] = I[19] = I[20] = (T)(img)(0,_p5##y,z,c)), \ - (I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = (T)(img)(0,_p4##y,z,c)), \ - (I[42] = I[43] = I[44] = I[45] = I[46] = I[47] = I[48] = (T)(img)(0,_p3##y,z,c)), \ - (I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = (T)(img)(0,_p2##y,z,c)), \ - (I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_p1##y,z,c)), \ - (I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = (T)(img)(0,y,z,c)), \ - (I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = (T)(img)(0,_n1##y,z,c)), \ - (I[112] = I[113] = I[114] = I[115] = I[116] = I[117] = I[118] = (T)(img)(0,_n2##y,z,c)), \ - (I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = (T)(img)(0,_n3##y,z,c)), \ - (I[140] = I[141] = I[142] = I[143] = I[144] = I[145] = I[146] = (T)(img)(0,_n4##y,z,c)), \ - (I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = (T)(img)(0,_n5##y,z,c)), \ - (I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = (T)(img)(0,_n6##y,z,c)), \ - (I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = (T)(img)(0,_n7##y,z,c)), \ - (I[7] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[21] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[49] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[91] = (T)(img)(_n1##x,y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[119] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[133] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[147] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[161] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[175] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[8] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[22] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[50] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[92] = (T)(img)(_n2##x,y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[120] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[134] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[148] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[162] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[176] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[9] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[23] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[51] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[93] = (T)(img)(_n3##x,y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[121] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[135] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[149] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[163] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[177] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[10] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[24] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[52] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[94] = (T)(img)(_n4##x,y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[122] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[136] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[150] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[164] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[178] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[11] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[25] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[53] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[95] = (T)(img)(_n5##x,y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[123] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[137] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[151] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[165] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[179] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[12] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[26] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[40] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[54] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[96] = (T)(img)(_n6##x,y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[124] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[138] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[152] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[166] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[180] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_n7##y,z,c)), \ - 7>=((img)._width)?(img).width()-1:7); \ - (_n7##x<(img).width() && ( \ - (I[13] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[27] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[41] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[55] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[97] = (T)(img)(_n7##x,y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[125] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[139] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[153] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[167] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[181] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_n7##y,z,c)),1)) || \ - _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], \ - I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x) - -#define cimg_for_in14x14(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in14((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = (int)( \ - (I[0] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[14] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[28] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[42] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[56] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[70] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[84] = (T)(img)(_p6##x,y,z,c)), \ - (I[98] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[112] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[126] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[140] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[154] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[168] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[182] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[1] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[15] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[29] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[43] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[57] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[71] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[85] = (T)(img)(_p5##x,y,z,c)), \ - (I[99] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[113] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[127] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[141] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[155] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[169] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[183] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[2] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[16] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[30] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[44] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[58] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[72] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[86] = (T)(img)(_p4##x,y,z,c)), \ - (I[100] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[114] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[128] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[142] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[156] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[170] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[184] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[3] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[17] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[31] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[45] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[59] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[73] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[87] = (T)(img)(_p3##x,y,z,c)), \ - (I[101] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[115] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[129] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[143] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[157] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[171] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[185] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[4] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[18] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[32] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[46] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[60] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[74] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[88] = (T)(img)(_p2##x,y,z,c)), \ - (I[102] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[116] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[130] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[144] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[158] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[172] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[186] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[5] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[19] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[33] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[47] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[61] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[75] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[89] = (T)(img)(_p1##x,y,z,c)), \ - (I[103] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[117] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[131] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[145] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[159] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[173] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[187] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[6] = (T)(img)(x,_p6##y,z,c)), \ - (I[20] = (T)(img)(x,_p5##y,z,c)), \ - (I[34] = (T)(img)(x,_p4##y,z,c)), \ - (I[48] = (T)(img)(x,_p3##y,z,c)), \ - (I[62] = (T)(img)(x,_p2##y,z,c)), \ - (I[76] = (T)(img)(x,_p1##y,z,c)), \ - (I[90] = (T)(img)(x,y,z,c)), \ - (I[104] = (T)(img)(x,_n1##y,z,c)), \ - (I[118] = (T)(img)(x,_n2##y,z,c)), \ - (I[132] = (T)(img)(x,_n3##y,z,c)), \ - (I[146] = (T)(img)(x,_n4##y,z,c)), \ - (I[160] = (T)(img)(x,_n5##y,z,c)), \ - (I[174] = (T)(img)(x,_n6##y,z,c)), \ - (I[188] = (T)(img)(x,_n7##y,z,c)), \ - (I[7] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[21] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[49] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[91] = (T)(img)(_n1##x,y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[119] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[133] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[147] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[161] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[175] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[8] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[22] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[50] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[92] = (T)(img)(_n2##x,y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[120] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[134] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[148] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[162] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[176] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[9] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[23] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[51] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[93] = (T)(img)(_n3##x,y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[121] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[135] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[149] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[163] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[177] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[10] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[24] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[52] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[94] = (T)(img)(_n4##x,y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[122] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[136] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[150] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[164] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[178] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[11] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[25] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[53] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[95] = (T)(img)(_n5##x,y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[123] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[137] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[151] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[165] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[179] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[12] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[26] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[40] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[54] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[96] = (T)(img)(_n6##x,y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[124] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[138] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[152] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[166] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[180] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_n7##y,z,c)), \ - x+7>=(img).width()?(img).width()-1:x+7); \ - x<=(int)(x1) && ((_n7##x<(img).width() && ( \ - (I[13] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[27] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[41] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[55] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[97] = (T)(img)(_n7##x,y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[125] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[139] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[153] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[167] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[181] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_n7##y,z,c)),1)) || \ - _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], \ - I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x) - -#define cimg_get14x14(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p6##x,_p6##y,z,c), I[1] = (T)(img)(_p5##x,_p6##y,z,c), I[2] = (T)(img)(_p4##x,_p6##y,z,c), I[3] = (T)(img)(_p3##x,_p6##y,z,c), I[4] = (T)(img)(_p2##x,_p6##y,z,c), I[5] = (T)(img)(_p1##x,_p6##y,z,c), I[6] = (T)(img)(x,_p6##y,z,c), I[7] = (T)(img)(_n1##x,_p6##y,z,c), I[8] = (T)(img)(_n2##x,_p6##y,z,c), I[9] = (T)(img)(_n3##x,_p6##y,z,c), I[10] = (T)(img)(_n4##x,_p6##y,z,c), I[11] = (T)(img)(_n5##x,_p6##y,z,c), I[12] = (T)(img)(_n6##x,_p6##y,z,c), I[13] = (T)(img)(_n7##x,_p6##y,z,c), \ - I[14] = (T)(img)(_p6##x,_p5##y,z,c), I[15] = (T)(img)(_p5##x,_p5##y,z,c), I[16] = (T)(img)(_p4##x,_p5##y,z,c), I[17] = (T)(img)(_p3##x,_p5##y,z,c), I[18] = (T)(img)(_p2##x,_p5##y,z,c), I[19] = (T)(img)(_p1##x,_p5##y,z,c), I[20] = (T)(img)(x,_p5##y,z,c), I[21] = (T)(img)(_n1##x,_p5##y,z,c), I[22] = (T)(img)(_n2##x,_p5##y,z,c), I[23] = (T)(img)(_n3##x,_p5##y,z,c), I[24] = (T)(img)(_n4##x,_p5##y,z,c), I[25] = (T)(img)(_n5##x,_p5##y,z,c), I[26] = (T)(img)(_n6##x,_p5##y,z,c), I[27] = (T)(img)(_n7##x,_p5##y,z,c), \ - I[28] = (T)(img)(_p6##x,_p4##y,z,c), I[29] = (T)(img)(_p5##x,_p4##y,z,c), I[30] = (T)(img)(_p4##x,_p4##y,z,c), I[31] = (T)(img)(_p3##x,_p4##y,z,c), I[32] = (T)(img)(_p2##x,_p4##y,z,c), I[33] = (T)(img)(_p1##x,_p4##y,z,c), I[34] = (T)(img)(x,_p4##y,z,c), I[35] = (T)(img)(_n1##x,_p4##y,z,c), I[36] = (T)(img)(_n2##x,_p4##y,z,c), I[37] = (T)(img)(_n3##x,_p4##y,z,c), I[38] = (T)(img)(_n4##x,_p4##y,z,c), I[39] = (T)(img)(_n5##x,_p4##y,z,c), I[40] = (T)(img)(_n6##x,_p4##y,z,c), I[41] = (T)(img)(_n7##x,_p4##y,z,c), \ - I[42] = (T)(img)(_p6##x,_p3##y,z,c), I[43] = (T)(img)(_p5##x,_p3##y,z,c), I[44] = (T)(img)(_p4##x,_p3##y,z,c), I[45] = (T)(img)(_p3##x,_p3##y,z,c), I[46] = (T)(img)(_p2##x,_p3##y,z,c), I[47] = (T)(img)(_p1##x,_p3##y,z,c), I[48] = (T)(img)(x,_p3##y,z,c), I[49] = (T)(img)(_n1##x,_p3##y,z,c), I[50] = (T)(img)(_n2##x,_p3##y,z,c), I[51] = (T)(img)(_n3##x,_p3##y,z,c), I[52] = (T)(img)(_n4##x,_p3##y,z,c), I[53] = (T)(img)(_n5##x,_p3##y,z,c), I[54] = (T)(img)(_n6##x,_p3##y,z,c), I[55] = (T)(img)(_n7##x,_p3##y,z,c), \ - I[56] = (T)(img)(_p6##x,_p2##y,z,c), I[57] = (T)(img)(_p5##x,_p2##y,z,c), I[58] = (T)(img)(_p4##x,_p2##y,z,c), I[59] = (T)(img)(_p3##x,_p2##y,z,c), I[60] = (T)(img)(_p2##x,_p2##y,z,c), I[61] = (T)(img)(_p1##x,_p2##y,z,c), I[62] = (T)(img)(x,_p2##y,z,c), I[63] = (T)(img)(_n1##x,_p2##y,z,c), I[64] = (T)(img)(_n2##x,_p2##y,z,c), I[65] = (T)(img)(_n3##x,_p2##y,z,c), I[66] = (T)(img)(_n4##x,_p2##y,z,c), I[67] = (T)(img)(_n5##x,_p2##y,z,c), I[68] = (T)(img)(_n6##x,_p2##y,z,c), I[69] = (T)(img)(_n7##x,_p2##y,z,c), \ - I[70] = (T)(img)(_p6##x,_p1##y,z,c), I[71] = (T)(img)(_p5##x,_p1##y,z,c), I[72] = (T)(img)(_p4##x,_p1##y,z,c), I[73] = (T)(img)(_p3##x,_p1##y,z,c), I[74] = (T)(img)(_p2##x,_p1##y,z,c), I[75] = (T)(img)(_p1##x,_p1##y,z,c), I[76] = (T)(img)(x,_p1##y,z,c), I[77] = (T)(img)(_n1##x,_p1##y,z,c), I[78] = (T)(img)(_n2##x,_p1##y,z,c), I[79] = (T)(img)(_n3##x,_p1##y,z,c), I[80] = (T)(img)(_n4##x,_p1##y,z,c), I[81] = (T)(img)(_n5##x,_p1##y,z,c), I[82] = (T)(img)(_n6##x,_p1##y,z,c), I[83] = (T)(img)(_n7##x,_p1##y,z,c), \ - I[84] = (T)(img)(_p6##x,y,z,c), I[85] = (T)(img)(_p5##x,y,z,c), I[86] = (T)(img)(_p4##x,y,z,c), I[87] = (T)(img)(_p3##x,y,z,c), I[88] = (T)(img)(_p2##x,y,z,c), I[89] = (T)(img)(_p1##x,y,z,c), I[90] = (T)(img)(x,y,z,c), I[91] = (T)(img)(_n1##x,y,z,c), I[92] = (T)(img)(_n2##x,y,z,c), I[93] = (T)(img)(_n3##x,y,z,c), I[94] = (T)(img)(_n4##x,y,z,c), I[95] = (T)(img)(_n5##x,y,z,c), I[96] = (T)(img)(_n6##x,y,z,c), I[97] = (T)(img)(_n7##x,y,z,c), \ - I[98] = (T)(img)(_p6##x,_n1##y,z,c), I[99] = (T)(img)(_p5##x,_n1##y,z,c), I[100] = (T)(img)(_p4##x,_n1##y,z,c), I[101] = (T)(img)(_p3##x,_n1##y,z,c), I[102] = (T)(img)(_p2##x,_n1##y,z,c), I[103] = (T)(img)(_p1##x,_n1##y,z,c), I[104] = (T)(img)(x,_n1##y,z,c), I[105] = (T)(img)(_n1##x,_n1##y,z,c), I[106] = (T)(img)(_n2##x,_n1##y,z,c), I[107] = (T)(img)(_n3##x,_n1##y,z,c), I[108] = (T)(img)(_n4##x,_n1##y,z,c), I[109] = (T)(img)(_n5##x,_n1##y,z,c), I[110] = (T)(img)(_n6##x,_n1##y,z,c), I[111] = (T)(img)(_n7##x,_n1##y,z,c), \ - I[112] = (T)(img)(_p6##x,_n2##y,z,c), I[113] = (T)(img)(_p5##x,_n2##y,z,c), I[114] = (T)(img)(_p4##x,_n2##y,z,c), I[115] = (T)(img)(_p3##x,_n2##y,z,c), I[116] = (T)(img)(_p2##x,_n2##y,z,c), I[117] = (T)(img)(_p1##x,_n2##y,z,c), I[118] = (T)(img)(x,_n2##y,z,c), I[119] = (T)(img)(_n1##x,_n2##y,z,c), I[120] = (T)(img)(_n2##x,_n2##y,z,c), I[121] = (T)(img)(_n3##x,_n2##y,z,c), I[122] = (T)(img)(_n4##x,_n2##y,z,c), I[123] = (T)(img)(_n5##x,_n2##y,z,c), I[124] = (T)(img)(_n6##x,_n2##y,z,c), I[125] = (T)(img)(_n7##x,_n2##y,z,c), \ - I[126] = (T)(img)(_p6##x,_n3##y,z,c), I[127] = (T)(img)(_p5##x,_n3##y,z,c), I[128] = (T)(img)(_p4##x,_n3##y,z,c), I[129] = (T)(img)(_p3##x,_n3##y,z,c), I[130] = (T)(img)(_p2##x,_n3##y,z,c), I[131] = (T)(img)(_p1##x,_n3##y,z,c), I[132] = (T)(img)(x,_n3##y,z,c), I[133] = (T)(img)(_n1##x,_n3##y,z,c), I[134] = (T)(img)(_n2##x,_n3##y,z,c), I[135] = (T)(img)(_n3##x,_n3##y,z,c), I[136] = (T)(img)(_n4##x,_n3##y,z,c), I[137] = (T)(img)(_n5##x,_n3##y,z,c), I[138] = (T)(img)(_n6##x,_n3##y,z,c), I[139] = (T)(img)(_n7##x,_n3##y,z,c), \ - I[140] = (T)(img)(_p6##x,_n4##y,z,c), I[141] = (T)(img)(_p5##x,_n4##y,z,c), I[142] = (T)(img)(_p4##x,_n4##y,z,c), I[143] = (T)(img)(_p3##x,_n4##y,z,c), I[144] = (T)(img)(_p2##x,_n4##y,z,c), I[145] = (T)(img)(_p1##x,_n4##y,z,c), I[146] = (T)(img)(x,_n4##y,z,c), I[147] = (T)(img)(_n1##x,_n4##y,z,c), I[148] = (T)(img)(_n2##x,_n4##y,z,c), I[149] = (T)(img)(_n3##x,_n4##y,z,c), I[150] = (T)(img)(_n4##x,_n4##y,z,c), I[151] = (T)(img)(_n5##x,_n4##y,z,c), I[152] = (T)(img)(_n6##x,_n4##y,z,c), I[153] = (T)(img)(_n7##x,_n4##y,z,c), \ - I[154] = (T)(img)(_p6##x,_n5##y,z,c), I[155] = (T)(img)(_p5##x,_n5##y,z,c), I[156] = (T)(img)(_p4##x,_n5##y,z,c), I[157] = (T)(img)(_p3##x,_n5##y,z,c), I[158] = (T)(img)(_p2##x,_n5##y,z,c), I[159] = (T)(img)(_p1##x,_n5##y,z,c), I[160] = (T)(img)(x,_n5##y,z,c), I[161] = (T)(img)(_n1##x,_n5##y,z,c), I[162] = (T)(img)(_n2##x,_n5##y,z,c), I[163] = (T)(img)(_n3##x,_n5##y,z,c), I[164] = (T)(img)(_n4##x,_n5##y,z,c), I[165] = (T)(img)(_n5##x,_n5##y,z,c), I[166] = (T)(img)(_n6##x,_n5##y,z,c), I[167] = (T)(img)(_n7##x,_n5##y,z,c), \ - I[168] = (T)(img)(_p6##x,_n6##y,z,c), I[169] = (T)(img)(_p5##x,_n6##y,z,c), I[170] = (T)(img)(_p4##x,_n6##y,z,c), I[171] = (T)(img)(_p3##x,_n6##y,z,c), I[172] = (T)(img)(_p2##x,_n6##y,z,c), I[173] = (T)(img)(_p1##x,_n6##y,z,c), I[174] = (T)(img)(x,_n6##y,z,c), I[175] = (T)(img)(_n1##x,_n6##y,z,c), I[176] = (T)(img)(_n2##x,_n6##y,z,c), I[177] = (T)(img)(_n3##x,_n6##y,z,c), I[178] = (T)(img)(_n4##x,_n6##y,z,c), I[179] = (T)(img)(_n5##x,_n6##y,z,c), I[180] = (T)(img)(_n6##x,_n6##y,z,c), I[181] = (T)(img)(_n7##x,_n6##y,z,c), \ - I[182] = (T)(img)(_p6##x,_n7##y,z,c), I[183] = (T)(img)(_p5##x,_n7##y,z,c), I[184] = (T)(img)(_p4##x,_n7##y,z,c), I[185] = (T)(img)(_p3##x,_n7##y,z,c), I[186] = (T)(img)(_p2##x,_n7##y,z,c), I[187] = (T)(img)(_p1##x,_n7##y,z,c), I[188] = (T)(img)(x,_n7##y,z,c), I[189] = (T)(img)(_n1##x,_n7##y,z,c), I[190] = (T)(img)(_n2##x,_n7##y,z,c), I[191] = (T)(img)(_n3##x,_n7##y,z,c), I[192] = (T)(img)(_n4##x,_n7##y,z,c), I[193] = (T)(img)(_n5##x,_n7##y,z,c), I[194] = (T)(img)(_n6##x,_n7##y,z,c), I[195] = (T)(img)(_n7##x,_n7##y,z,c); - -// Define 15x15 loop macros -//------------------------- -#define cimg_for15(bound,i) for (int i = 0, \ - _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7; \ - _n7##i<(int)(bound) || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i) - -#define cimg_for15X(img,x) cimg_for15((img)._width,x) -#define cimg_for15Y(img,y) cimg_for15((img)._height,y) -#define cimg_for15Z(img,z) cimg_for15((img)._depth,z) -#define cimg_for15C(img,c) cimg_for15((img)._spectrum,c) -#define cimg_for15XY(img,x,y) cimg_for15Y(img,y) cimg_for15X(img,x) -#define cimg_for15XZ(img,x,z) cimg_for15Z(img,z) cimg_for15X(img,x) -#define cimg_for15XC(img,x,c) cimg_for15C(img,c) cimg_for15X(img,x) -#define cimg_for15YZ(img,y,z) cimg_for15Z(img,z) cimg_for15Y(img,y) -#define cimg_for15YC(img,y,c) cimg_for15C(img,c) cimg_for15Y(img,y) -#define cimg_for15ZC(img,z,c) cimg_for15C(img,c) cimg_for15Z(img,z) -#define cimg_for15XYZ(img,x,y,z) cimg_for15Z(img,z) cimg_for15XY(img,x,y) -#define cimg_for15XZC(img,x,z,c) cimg_for15C(img,c) cimg_for15XZ(img,x,z) -#define cimg_for15YZC(img,y,z,c) cimg_for15C(img,c) cimg_for15YZ(img,y,z) -#define cimg_for15XYZC(img,x,y,z,c) cimg_for15C(img,c) cimg_for15XYZ(img,x,y,z) - -#define cimg_for_in15(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7; \ - i<=(int)(i1) && (_n7##i<(int)(bound) || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i) - -#define cimg_for_in15X(img,x0,x1,x) cimg_for_in15((img)._width,x0,x1,x) -#define cimg_for_in15Y(img,y0,y1,y) cimg_for_in15((img)._height,y0,y1,y) -#define cimg_for_in15Z(img,z0,z1,z) cimg_for_in15((img)._depth,z0,z1,z) -#define cimg_for_in15C(img,c0,c1,c) cimg_for_in15((img)._spectrum,c0,c1,c) -#define cimg_for_in15XY(img,x0,y0,x1,y1,x,y) cimg_for_in15Y(img,y0,y1,y) cimg_for_in15X(img,x0,x1,x) -#define cimg_for_in15XZ(img,x0,z0,x1,z1,x,z) cimg_for_in15Z(img,z0,z1,z) cimg_for_in15X(img,x0,x1,x) -#define cimg_for_in15XC(img,x0,c0,x1,c1,x,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15X(img,x0,x1,x) -#define cimg_for_in15YZ(img,y0,z0,y1,z1,y,z) cimg_for_in15Z(img,z0,z1,z) cimg_for_in15Y(img,y0,y1,y) -#define cimg_for_in15YC(img,y0,c0,y1,c1,y,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15Y(img,y0,y1,y) -#define cimg_for_in15ZC(img,z0,c0,z1,c1,z,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15Z(img,z0,z1,z) -#define cimg_for_in15XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in15Z(img,z0,z1,z) cimg_for_in15XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in15XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in15YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in15XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in15C(img,c0,c1,c) cimg_for_in15XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for15x15(img,x,y,z,c,I,T) \ - cimg_for15((img)._height,y) for (int x = 0, \ - _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = (T)(img)(0,_p7##y,z,c)), \ - (I[15] = I[16] = I[17] = I[18] = I[19] = I[20] = I[21] = I[22] = (T)(img)(0,_p6##y,z,c)), \ - (I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = (T)(img)(0,_p5##y,z,c)), \ - (I[45] = I[46] = I[47] = I[48] = I[49] = I[50] = I[51] = I[52] = (T)(img)(0,_p4##y,z,c)), \ - (I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_p3##y,z,c)), \ - (I[75] = I[76] = I[77] = I[78] = I[79] = I[80] = I[81] = I[82] = (T)(img)(0,_p2##y,z,c)), \ - (I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = (T)(img)(0,_p1##y,z,c)), \ - (I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = I[111] = I[112] = (T)(img)(0,y,z,c)), \ - (I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = (T)(img)(0,_n1##y,z,c)), \ - (I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = (T)(img)(0,_n2##y,z,c)), \ - (I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = (T)(img)(0,_n3##y,z,c)), \ - (I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = I[171] = I[172] = (T)(img)(0,_n4##y,z,c)), \ - (I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = (T)(img)(0,_n5##y,z,c)), \ - (I[195] = I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = I[202] = (T)(img)(0,_n6##y,z,c)), \ - (I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = (T)(img)(0,_n7##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[38] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[53] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[83] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[113] = (T)(img)(_n1##x,y,z,c)), \ - (I[128] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[173] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[188] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[203] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[218] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[39] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[54] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[84] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[114] = (T)(img)(_n2##x,y,z,c)), \ - (I[129] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[174] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[189] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[204] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[219] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[10] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[25] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[40] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[55] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[85] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[115] = (T)(img)(_n3##x,y,z,c)), \ - (I[130] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[175] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[190] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[205] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[220] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[11] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[26] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[41] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[56] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[86] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[116] = (T)(img)(_n4##x,y,z,c)), \ - (I[131] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[161] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[176] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[191] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[206] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[221] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[12] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[27] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[42] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[57] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[72] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[87] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[117] = (T)(img)(_n5##x,y,z,c)), \ - (I[132] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[162] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[177] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[192] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[207] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[222] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[13] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[28] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[43] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[58] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[73] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[88] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[118] = (T)(img)(_n6##x,y,z,c)), \ - (I[133] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[163] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[178] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[193] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[208] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[223] = (T)(img)(_n6##x,_n7##y,z,c)), \ - 7>=((img)._width)?(img).width()-1:7); \ - (_n7##x<(img).width() && ( \ - (I[14] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[29] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[44] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[59] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[74] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[89] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[104] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[119] = (T)(img)(_n7##x,y,z,c)), \ - (I[134] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[164] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[179] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[194] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[209] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[224] = (T)(img)(_n7##x,_n7##y,z,c)),1)) || \ - _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], \ - I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], \ - I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], \ - I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], \ - _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x) - -#define cimg_for_in15x15(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in15((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = (int)( \ - (I[0] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[15] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[30] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[45] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[60] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[75] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[90] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[105] = (T)(img)(_p7##x,y,z,c)), \ - (I[120] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[135] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[150] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[165] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[180] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[195] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[210] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[1] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[16] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[31] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[46] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[61] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[76] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[91] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[106] = (T)(img)(_p6##x,y,z,c)), \ - (I[121] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[136] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[151] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[166] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[181] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[196] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[211] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[2] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[17] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[32] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[47] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[62] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[77] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[92] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[107] = (T)(img)(_p5##x,y,z,c)), \ - (I[122] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[137] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[152] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[167] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[182] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[197] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[212] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[3] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[18] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[33] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[48] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[63] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[78] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[93] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[108] = (T)(img)(_p4##x,y,z,c)), \ - (I[123] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[138] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[153] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[168] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[183] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[198] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[213] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[4] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[19] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[34] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[49] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[64] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[79] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[94] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[109] = (T)(img)(_p3##x,y,z,c)), \ - (I[124] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[139] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[154] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[169] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[184] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[199] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[214] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[5] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[20] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[35] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[50] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[65] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[80] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[95] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[110] = (T)(img)(_p2##x,y,z,c)), \ - (I[125] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[140] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[155] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[170] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[185] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[200] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[215] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[6] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[21] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[36] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[51] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[66] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[81] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[96] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[111] = (T)(img)(_p1##x,y,z,c)), \ - (I[126] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[141] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[156] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[171] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[186] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[201] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[216] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[7] = (T)(img)(x,_p7##y,z,c)), \ - (I[22] = (T)(img)(x,_p6##y,z,c)), \ - (I[37] = (T)(img)(x,_p5##y,z,c)), \ - (I[52] = (T)(img)(x,_p4##y,z,c)), \ - (I[67] = (T)(img)(x,_p3##y,z,c)), \ - (I[82] = (T)(img)(x,_p2##y,z,c)), \ - (I[97] = (T)(img)(x,_p1##y,z,c)), \ - (I[112] = (T)(img)(x,y,z,c)), \ - (I[127] = (T)(img)(x,_n1##y,z,c)), \ - (I[142] = (T)(img)(x,_n2##y,z,c)), \ - (I[157] = (T)(img)(x,_n3##y,z,c)), \ - (I[172] = (T)(img)(x,_n4##y,z,c)), \ - (I[187] = (T)(img)(x,_n5##y,z,c)), \ - (I[202] = (T)(img)(x,_n6##y,z,c)), \ - (I[217] = (T)(img)(x,_n7##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[23] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[38] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[53] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[83] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[113] = (T)(img)(_n1##x,y,z,c)), \ - (I[128] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[173] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[188] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[203] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[218] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[24] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[39] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[54] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[84] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[114] = (T)(img)(_n2##x,y,z,c)), \ - (I[129] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[174] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[189] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[204] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[219] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[10] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[25] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[40] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[55] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[85] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[115] = (T)(img)(_n3##x,y,z,c)), \ - (I[130] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[175] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[190] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[205] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[220] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[11] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[26] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[41] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[56] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[86] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[116] = (T)(img)(_n4##x,y,z,c)), \ - (I[131] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[161] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[176] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[191] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[206] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[221] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[12] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[27] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[42] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[57] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[72] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[87] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[117] = (T)(img)(_n5##x,y,z,c)), \ - (I[132] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[162] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[177] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[192] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[207] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[222] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[13] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[28] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[43] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[58] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[73] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[88] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[118] = (T)(img)(_n6##x,y,z,c)), \ - (I[133] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[163] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[178] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[193] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[208] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[223] = (T)(img)(_n6##x,_n7##y,z,c)), \ - x+7>=(img).width()?(img).width()-1:x+7); \ - x<=(int)(x1) && ((_n7##x<(img).width() && ( \ - (I[14] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[29] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[44] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[59] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[74] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[89] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[104] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[119] = (T)(img)(_n7##x,y,z,c)), \ - (I[134] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[164] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[179] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[194] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[209] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[224] = (T)(img)(_n7##x,_n7##y,z,c)),1)) || \ - _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], \ - I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], \ - I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], \ - I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], \ - _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x) - -#define cimg_get15x15(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p7##x,_p7##y,z,c), I[1] = (T)(img)(_p6##x,_p7##y,z,c), I[2] = (T)(img)(_p5##x,_p7##y,z,c), I[3] = (T)(img)(_p4##x,_p7##y,z,c), I[4] = (T)(img)(_p3##x,_p7##y,z,c), I[5] = (T)(img)(_p2##x,_p7##y,z,c), I[6] = (T)(img)(_p1##x,_p7##y,z,c), I[7] = (T)(img)(x,_p7##y,z,c), I[8] = (T)(img)(_n1##x,_p7##y,z,c), I[9] = (T)(img)(_n2##x,_p7##y,z,c), I[10] = (T)(img)(_n3##x,_p7##y,z,c), I[11] = (T)(img)(_n4##x,_p7##y,z,c), I[12] = (T)(img)(_n5##x,_p7##y,z,c), I[13] = (T)(img)(_n6##x,_p7##y,z,c), I[14] = (T)(img)(_n7##x,_p7##y,z,c), \ - I[15] = (T)(img)(_p7##x,_p6##y,z,c), I[16] = (T)(img)(_p6##x,_p6##y,z,c), I[17] = (T)(img)(_p5##x,_p6##y,z,c), I[18] = (T)(img)(_p4##x,_p6##y,z,c), I[19] = (T)(img)(_p3##x,_p6##y,z,c), I[20] = (T)(img)(_p2##x,_p6##y,z,c), I[21] = (T)(img)(_p1##x,_p6##y,z,c), I[22] = (T)(img)(x,_p6##y,z,c), I[23] = (T)(img)(_n1##x,_p6##y,z,c), I[24] = (T)(img)(_n2##x,_p6##y,z,c), I[25] = (T)(img)(_n3##x,_p6##y,z,c), I[26] = (T)(img)(_n4##x,_p6##y,z,c), I[27] = (T)(img)(_n5##x,_p6##y,z,c), I[28] = (T)(img)(_n6##x,_p6##y,z,c), I[29] = (T)(img)(_n7##x,_p6##y,z,c), \ - I[30] = (T)(img)(_p7##x,_p5##y,z,c), I[31] = (T)(img)(_p6##x,_p5##y,z,c), I[32] = (T)(img)(_p5##x,_p5##y,z,c), I[33] = (T)(img)(_p4##x,_p5##y,z,c), I[34] = (T)(img)(_p3##x,_p5##y,z,c), I[35] = (T)(img)(_p2##x,_p5##y,z,c), I[36] = (T)(img)(_p1##x,_p5##y,z,c), I[37] = (T)(img)(x,_p5##y,z,c), I[38] = (T)(img)(_n1##x,_p5##y,z,c), I[39] = (T)(img)(_n2##x,_p5##y,z,c), I[40] = (T)(img)(_n3##x,_p5##y,z,c), I[41] = (T)(img)(_n4##x,_p5##y,z,c), I[42] = (T)(img)(_n5##x,_p5##y,z,c), I[43] = (T)(img)(_n6##x,_p5##y,z,c), I[44] = (T)(img)(_n7##x,_p5##y,z,c), \ - I[45] = (T)(img)(_p7##x,_p4##y,z,c), I[46] = (T)(img)(_p6##x,_p4##y,z,c), I[47] = (T)(img)(_p5##x,_p4##y,z,c), I[48] = (T)(img)(_p4##x,_p4##y,z,c), I[49] = (T)(img)(_p3##x,_p4##y,z,c), I[50] = (T)(img)(_p2##x,_p4##y,z,c), I[51] = (T)(img)(_p1##x,_p4##y,z,c), I[52] = (T)(img)(x,_p4##y,z,c), I[53] = (T)(img)(_n1##x,_p4##y,z,c), I[54] = (T)(img)(_n2##x,_p4##y,z,c), I[55] = (T)(img)(_n3##x,_p4##y,z,c), I[56] = (T)(img)(_n4##x,_p4##y,z,c), I[57] = (T)(img)(_n5##x,_p4##y,z,c), I[58] = (T)(img)(_n6##x,_p4##y,z,c), I[59] = (T)(img)(_n7##x,_p4##y,z,c), \ - I[60] = (T)(img)(_p7##x,_p3##y,z,c), I[61] = (T)(img)(_p6##x,_p3##y,z,c), I[62] = (T)(img)(_p5##x,_p3##y,z,c), I[63] = (T)(img)(_p4##x,_p3##y,z,c), I[64] = (T)(img)(_p3##x,_p3##y,z,c), I[65] = (T)(img)(_p2##x,_p3##y,z,c), I[66] = (T)(img)(_p1##x,_p3##y,z,c), I[67] = (T)(img)(x,_p3##y,z,c), I[68] = (T)(img)(_n1##x,_p3##y,z,c), I[69] = (T)(img)(_n2##x,_p3##y,z,c), I[70] = (T)(img)(_n3##x,_p3##y,z,c), I[71] = (T)(img)(_n4##x,_p3##y,z,c), I[72] = (T)(img)(_n5##x,_p3##y,z,c), I[73] = (T)(img)(_n6##x,_p3##y,z,c), I[74] = (T)(img)(_n7##x,_p3##y,z,c), \ - I[75] = (T)(img)(_p7##x,_p2##y,z,c), I[76] = (T)(img)(_p6##x,_p2##y,z,c), I[77] = (T)(img)(_p5##x,_p2##y,z,c), I[78] = (T)(img)(_p4##x,_p2##y,z,c), I[79] = (T)(img)(_p3##x,_p2##y,z,c), I[80] = (T)(img)(_p2##x,_p2##y,z,c), I[81] = (T)(img)(_p1##x,_p2##y,z,c), I[82] = (T)(img)(x,_p2##y,z,c), I[83] = (T)(img)(_n1##x,_p2##y,z,c), I[84] = (T)(img)(_n2##x,_p2##y,z,c), I[85] = (T)(img)(_n3##x,_p2##y,z,c), I[86] = (T)(img)(_n4##x,_p2##y,z,c), I[87] = (T)(img)(_n5##x,_p2##y,z,c), I[88] = (T)(img)(_n6##x,_p2##y,z,c), I[89] = (T)(img)(_n7##x,_p2##y,z,c), \ - I[90] = (T)(img)(_p7##x,_p1##y,z,c), I[91] = (T)(img)(_p6##x,_p1##y,z,c), I[92] = (T)(img)(_p5##x,_p1##y,z,c), I[93] = (T)(img)(_p4##x,_p1##y,z,c), I[94] = (T)(img)(_p3##x,_p1##y,z,c), I[95] = (T)(img)(_p2##x,_p1##y,z,c), I[96] = (T)(img)(_p1##x,_p1##y,z,c), I[97] = (T)(img)(x,_p1##y,z,c), I[98] = (T)(img)(_n1##x,_p1##y,z,c), I[99] = (T)(img)(_n2##x,_p1##y,z,c), I[100] = (T)(img)(_n3##x,_p1##y,z,c), I[101] = (T)(img)(_n4##x,_p1##y,z,c), I[102] = (T)(img)(_n5##x,_p1##y,z,c), I[103] = (T)(img)(_n6##x,_p1##y,z,c), I[104] = (T)(img)(_n7##x,_p1##y,z,c), \ - I[105] = (T)(img)(_p7##x,y,z,c), I[106] = (T)(img)(_p6##x,y,z,c), I[107] = (T)(img)(_p5##x,y,z,c), I[108] = (T)(img)(_p4##x,y,z,c), I[109] = (T)(img)(_p3##x,y,z,c), I[110] = (T)(img)(_p2##x,y,z,c), I[111] = (T)(img)(_p1##x,y,z,c), I[112] = (T)(img)(x,y,z,c), I[113] = (T)(img)(_n1##x,y,z,c), I[114] = (T)(img)(_n2##x,y,z,c), I[115] = (T)(img)(_n3##x,y,z,c), I[116] = (T)(img)(_n4##x,y,z,c), I[117] = (T)(img)(_n5##x,y,z,c), I[118] = (T)(img)(_n6##x,y,z,c), I[119] = (T)(img)(_n7##x,y,z,c), \ - I[120] = (T)(img)(_p7##x,_n1##y,z,c), I[121] = (T)(img)(_p6##x,_n1##y,z,c), I[122] = (T)(img)(_p5##x,_n1##y,z,c), I[123] = (T)(img)(_p4##x,_n1##y,z,c), I[124] = (T)(img)(_p3##x,_n1##y,z,c), I[125] = (T)(img)(_p2##x,_n1##y,z,c), I[126] = (T)(img)(_p1##x,_n1##y,z,c), I[127] = (T)(img)(x,_n1##y,z,c), I[128] = (T)(img)(_n1##x,_n1##y,z,c), I[129] = (T)(img)(_n2##x,_n1##y,z,c), I[130] = (T)(img)(_n3##x,_n1##y,z,c), I[131] = (T)(img)(_n4##x,_n1##y,z,c), I[132] = (T)(img)(_n5##x,_n1##y,z,c), I[133] = (T)(img)(_n6##x,_n1##y,z,c), I[134] = (T)(img)(_n7##x,_n1##y,z,c), \ - I[135] = (T)(img)(_p7##x,_n2##y,z,c), I[136] = (T)(img)(_p6##x,_n2##y,z,c), I[137] = (T)(img)(_p5##x,_n2##y,z,c), I[138] = (T)(img)(_p4##x,_n2##y,z,c), I[139] = (T)(img)(_p3##x,_n2##y,z,c), I[140] = (T)(img)(_p2##x,_n2##y,z,c), I[141] = (T)(img)(_p1##x,_n2##y,z,c), I[142] = (T)(img)(x,_n2##y,z,c), I[143] = (T)(img)(_n1##x,_n2##y,z,c), I[144] = (T)(img)(_n2##x,_n2##y,z,c), I[145] = (T)(img)(_n3##x,_n2##y,z,c), I[146] = (T)(img)(_n4##x,_n2##y,z,c), I[147] = (T)(img)(_n5##x,_n2##y,z,c), I[148] = (T)(img)(_n6##x,_n2##y,z,c), I[149] = (T)(img)(_n7##x,_n2##y,z,c), \ - I[150] = (T)(img)(_p7##x,_n3##y,z,c), I[151] = (T)(img)(_p6##x,_n3##y,z,c), I[152] = (T)(img)(_p5##x,_n3##y,z,c), I[153] = (T)(img)(_p4##x,_n3##y,z,c), I[154] = (T)(img)(_p3##x,_n3##y,z,c), I[155] = (T)(img)(_p2##x,_n3##y,z,c), I[156] = (T)(img)(_p1##x,_n3##y,z,c), I[157] = (T)(img)(x,_n3##y,z,c), I[158] = (T)(img)(_n1##x,_n3##y,z,c), I[159] = (T)(img)(_n2##x,_n3##y,z,c), I[160] = (T)(img)(_n3##x,_n3##y,z,c), I[161] = (T)(img)(_n4##x,_n3##y,z,c), I[162] = (T)(img)(_n5##x,_n3##y,z,c), I[163] = (T)(img)(_n6##x,_n3##y,z,c), I[164] = (T)(img)(_n7##x,_n3##y,z,c), \ - I[165] = (T)(img)(_p7##x,_n4##y,z,c), I[166] = (T)(img)(_p6##x,_n4##y,z,c), I[167] = (T)(img)(_p5##x,_n4##y,z,c), I[168] = (T)(img)(_p4##x,_n4##y,z,c), I[169] = (T)(img)(_p3##x,_n4##y,z,c), I[170] = (T)(img)(_p2##x,_n4##y,z,c), I[171] = (T)(img)(_p1##x,_n4##y,z,c), I[172] = (T)(img)(x,_n4##y,z,c), I[173] = (T)(img)(_n1##x,_n4##y,z,c), I[174] = (T)(img)(_n2##x,_n4##y,z,c), I[175] = (T)(img)(_n3##x,_n4##y,z,c), I[176] = (T)(img)(_n4##x,_n4##y,z,c), I[177] = (T)(img)(_n5##x,_n4##y,z,c), I[178] = (T)(img)(_n6##x,_n4##y,z,c), I[179] = (T)(img)(_n7##x,_n4##y,z,c), \ - I[180] = (T)(img)(_p7##x,_n5##y,z,c), I[181] = (T)(img)(_p6##x,_n5##y,z,c), I[182] = (T)(img)(_p5##x,_n5##y,z,c), I[183] = (T)(img)(_p4##x,_n5##y,z,c), I[184] = (T)(img)(_p3##x,_n5##y,z,c), I[185] = (T)(img)(_p2##x,_n5##y,z,c), I[186] = (T)(img)(_p1##x,_n5##y,z,c), I[187] = (T)(img)(x,_n5##y,z,c), I[188] = (T)(img)(_n1##x,_n5##y,z,c), I[189] = (T)(img)(_n2##x,_n5##y,z,c), I[190] = (T)(img)(_n3##x,_n5##y,z,c), I[191] = (T)(img)(_n4##x,_n5##y,z,c), I[192] = (T)(img)(_n5##x,_n5##y,z,c), I[193] = (T)(img)(_n6##x,_n5##y,z,c), I[194] = (T)(img)(_n7##x,_n5##y,z,c), \ - I[195] = (T)(img)(_p7##x,_n6##y,z,c), I[196] = (T)(img)(_p6##x,_n6##y,z,c), I[197] = (T)(img)(_p5##x,_n6##y,z,c), I[198] = (T)(img)(_p4##x,_n6##y,z,c), I[199] = (T)(img)(_p3##x,_n6##y,z,c), I[200] = (T)(img)(_p2##x,_n6##y,z,c), I[201] = (T)(img)(_p1##x,_n6##y,z,c), I[202] = (T)(img)(x,_n6##y,z,c), I[203] = (T)(img)(_n1##x,_n6##y,z,c), I[204] = (T)(img)(_n2##x,_n6##y,z,c), I[205] = (T)(img)(_n3##x,_n6##y,z,c), I[206] = (T)(img)(_n4##x,_n6##y,z,c), I[207] = (T)(img)(_n5##x,_n6##y,z,c), I[208] = (T)(img)(_n6##x,_n6##y,z,c), I[209] = (T)(img)(_n7##x,_n6##y,z,c), \ - I[210] = (T)(img)(_p7##x,_n7##y,z,c), I[211] = (T)(img)(_p6##x,_n7##y,z,c), I[212] = (T)(img)(_p5##x,_n7##y,z,c), I[213] = (T)(img)(_p4##x,_n7##y,z,c), I[214] = (T)(img)(_p3##x,_n7##y,z,c), I[215] = (T)(img)(_p2##x,_n7##y,z,c), I[216] = (T)(img)(_p1##x,_n7##y,z,c), I[217] = (T)(img)(x,_n7##y,z,c), I[218] = (T)(img)(_n1##x,_n7##y,z,c), I[219] = (T)(img)(_n2##x,_n7##y,z,c), I[220] = (T)(img)(_n3##x,_n7##y,z,c), I[221] = (T)(img)(_n4##x,_n7##y,z,c), I[222] = (T)(img)(_n5##x,_n7##y,z,c), I[223] = (T)(img)(_n6##x,_n7##y,z,c), I[224] = (T)(img)(_n7##x,_n7##y,z,c); - -// Define 16x16 loop macros -//------------------------- -#define cimg_for16(bound,i) for (int i = 0, \ - _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8; \ - _n8##i<(int)(bound) || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i) - -#define cimg_for16X(img,x) cimg_for16((img)._width,x) -#define cimg_for16Y(img,y) cimg_for16((img)._height,y) -#define cimg_for16Z(img,z) cimg_for16((img)._depth,z) -#define cimg_for16C(img,c) cimg_for16((img)._spectrum,c) -#define cimg_for16XY(img,x,y) cimg_for16Y(img,y) cimg_for16X(img,x) -#define cimg_for16XZ(img,x,z) cimg_for16Z(img,z) cimg_for16X(img,x) -#define cimg_for16XC(img,x,c) cimg_for16C(img,c) cimg_for16X(img,x) -#define cimg_for16YZ(img,y,z) cimg_for16Z(img,z) cimg_for16Y(img,y) -#define cimg_for16YC(img,y,c) cimg_for16C(img,c) cimg_for16Y(img,y) -#define cimg_for16ZC(img,z,c) cimg_for16C(img,c) cimg_for16Z(img,z) -#define cimg_for16XYZ(img,x,y,z) cimg_for16Z(img,z) cimg_for16XY(img,x,y) -#define cimg_for16XZC(img,x,z,c) cimg_for16C(img,c) cimg_for16XZ(img,x,z) -#define cimg_for16YZC(img,y,z,c) cimg_for16C(img,c) cimg_for16YZ(img,y,z) -#define cimg_for16XYZC(img,x,y,z,c) cimg_for16C(img,c) cimg_for16XYZ(img,x,y,z) - -#define cimg_for_in16(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8; \ - i<=(int)(i1) && (_n8##i<(int)(bound) || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i) - -#define cimg_for_in16X(img,x0,x1,x) cimg_for_in16((img)._width,x0,x1,x) -#define cimg_for_in16Y(img,y0,y1,y) cimg_for_in16((img)._height,y0,y1,y) -#define cimg_for_in16Z(img,z0,z1,z) cimg_for_in16((img)._depth,z0,z1,z) -#define cimg_for_in16C(img,c0,c1,c) cimg_for_in16((img)._spectrum,c0,c1,c) -#define cimg_for_in16XY(img,x0,y0,x1,y1,x,y) cimg_for_in16Y(img,y0,y1,y) cimg_for_in16X(img,x0,x1,x) -#define cimg_for_in16XZ(img,x0,z0,x1,z1,x,z) cimg_for_in16Z(img,z0,z1,z) cimg_for_in16X(img,x0,x1,x) -#define cimg_for_in16XC(img,x0,c0,x1,c1,x,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16X(img,x0,x1,x) -#define cimg_for_in16YZ(img,y0,z0,y1,z1,y,z) cimg_for_in16Z(img,z0,z1,z) cimg_for_in16Y(img,y0,y1,y) -#define cimg_for_in16YC(img,y0,c0,y1,c1,y,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16Y(img,y0,y1,y) -#define cimg_for_in16ZC(img,z0,c0,z1,c1,z,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16Z(img,z0,z1,z) -#define cimg_for_in16XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in16Z(img,z0,z1,z) cimg_for_in16XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in16XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in16YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in16XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in16C(img,c0,c1,c) cimg_for_in16XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for16x16(img,x,y,z,c,I,T) \ - cimg_for16((img)._height,y) for (int x = 0, \ - _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = (T)(img)(0,_p7##y,z,c)), \ - (I[16] = I[17] = I[18] = I[19] = I[20] = I[21] = I[22] = I[23] = (T)(img)(0,_p6##y,z,c)), \ - (I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = (T)(img)(0,_p5##y,z,c)), \ - (I[48] = I[49] = I[50] = I[51] = I[52] = I[53] = I[54] = I[55] = (T)(img)(0,_p4##y,z,c)), \ - (I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = (T)(img)(0,_p3##y,z,c)), \ - (I[80] = I[81] = I[82] = I[83] = I[84] = I[85] = I[86] = I[87] = (T)(img)(0,_p2##y,z,c)), \ - (I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = (T)(img)(0,_p1##y,z,c)), \ - (I[112] = I[113] = I[114] = I[115] = I[116] = I[117] = I[118] = I[119] = (T)(img)(0,y,z,c)), \ - (I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = (T)(img)(0,_n1##y,z,c)), \ - (I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = I[150] = I[151] = (T)(img)(0,_n2##y,z,c)), \ - (I[160] = I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = (T)(img)(0,_n3##y,z,c)), \ - (I[176] = I[177] = I[178] = I[179] = I[180] = I[181] = I[182] = I[183] = (T)(img)(0,_n4##y,z,c)), \ - (I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = (T)(img)(0,_n5##y,z,c)), \ - (I[208] = I[209] = I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = (T)(img)(0,_n6##y,z,c)), \ - (I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = I[231] = (T)(img)(0,_n7##y,z,c)), \ - (I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = I[247] = (T)(img)(0,_n8##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[24] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[40] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[56] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[88] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[104] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[120] = (T)(img)(_n1##x,y,z,c)), \ - (I[136] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[152] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[168] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[184] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[216] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[232] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[248] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[25] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[41] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[57] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[89] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[105] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[121] = (T)(img)(_n2##x,y,z,c)), \ - (I[137] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[153] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[169] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[185] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[217] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[233] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[249] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[10] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[26] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[42] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[58] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[90] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[106] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[122] = (T)(img)(_n3##x,y,z,c)), \ - (I[138] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[154] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[170] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[186] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[218] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[234] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[250] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[11] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[27] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[43] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[59] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[91] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[107] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[123] = (T)(img)(_n4##x,y,z,c)), \ - (I[139] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[155] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[171] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[187] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[219] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[235] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[251] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[12] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[28] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[44] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[60] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[92] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[108] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[124] = (T)(img)(_n5##x,y,z,c)), \ - (I[140] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[156] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[172] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[188] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[220] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[236] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[252] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[13] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[29] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[45] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[61] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[77] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[93] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[109] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[125] = (T)(img)(_n6##x,y,z,c)), \ - (I[141] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[157] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[173] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[189] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[221] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[237] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[253] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[14] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[30] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[46] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[62] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[78] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[94] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[110] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[126] = (T)(img)(_n7##x,y,z,c)), \ - (I[142] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[158] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[174] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[190] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[222] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[238] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[254] = (T)(img)(_n7##x,_n8##y,z,c)), \ - 8>=((img)._width)?(img).width()-1:8); \ - (_n8##x<(img).width() && ( \ - (I[15] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[31] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[47] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[63] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[79] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[95] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[111] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[127] = (T)(img)(_n8##x,y,z,c)), \ - (I[143] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[159] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[175] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[191] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[223] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[239] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[255] = (T)(img)(_n8##x,_n8##y,z,c)),1)) || \ - _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x) - -#define cimg_for_in16x16(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in16((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = (int)( \ - (I[0] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[16] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[32] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[48] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[64] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[80] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[96] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[112] = (T)(img)(_p7##x,y,z,c)), \ - (I[128] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[144] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[160] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[176] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[192] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[208] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[224] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[240] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[1] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[17] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[33] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[49] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[65] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[81] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[97] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[113] = (T)(img)(_p6##x,y,z,c)), \ - (I[129] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[145] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[161] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[177] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[193] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[209] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[225] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[241] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[2] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[18] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[34] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[50] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[66] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[82] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[98] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[114] = (T)(img)(_p5##x,y,z,c)), \ - (I[130] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[146] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[162] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[178] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[194] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[210] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[226] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[242] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[3] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[19] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[35] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[51] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[67] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[83] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[99] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[115] = (T)(img)(_p4##x,y,z,c)), \ - (I[131] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[147] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[163] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[179] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[195] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[211] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[227] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[243] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[4] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[20] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[36] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[52] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[68] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[84] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[100] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[116] = (T)(img)(_p3##x,y,z,c)), \ - (I[132] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[148] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[164] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[180] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[196] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[212] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[228] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[244] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[5] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[21] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[37] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[53] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[69] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[85] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[101] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[117] = (T)(img)(_p2##x,y,z,c)), \ - (I[133] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[149] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[165] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[181] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[197] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[213] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[229] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[245] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[6] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[22] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[38] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[54] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[70] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[86] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[102] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[118] = (T)(img)(_p1##x,y,z,c)), \ - (I[134] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[150] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[166] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[182] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[198] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[214] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[230] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[246] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[7] = (T)(img)(x,_p7##y,z,c)), \ - (I[23] = (T)(img)(x,_p6##y,z,c)), \ - (I[39] = (T)(img)(x,_p5##y,z,c)), \ - (I[55] = (T)(img)(x,_p4##y,z,c)), \ - (I[71] = (T)(img)(x,_p3##y,z,c)), \ - (I[87] = (T)(img)(x,_p2##y,z,c)), \ - (I[103] = (T)(img)(x,_p1##y,z,c)), \ - (I[119] = (T)(img)(x,y,z,c)), \ - (I[135] = (T)(img)(x,_n1##y,z,c)), \ - (I[151] = (T)(img)(x,_n2##y,z,c)), \ - (I[167] = (T)(img)(x,_n3##y,z,c)), \ - (I[183] = (T)(img)(x,_n4##y,z,c)), \ - (I[199] = (T)(img)(x,_n5##y,z,c)), \ - (I[215] = (T)(img)(x,_n6##y,z,c)), \ - (I[231] = (T)(img)(x,_n7##y,z,c)), \ - (I[247] = (T)(img)(x,_n8##y,z,c)), \ - (I[8] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[24] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[40] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[56] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[72] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[88] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[104] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[120] = (T)(img)(_n1##x,y,z,c)), \ - (I[136] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[152] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[168] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[184] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[216] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[232] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[248] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[9] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[25] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[41] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[57] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[73] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[89] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[105] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[121] = (T)(img)(_n2##x,y,z,c)), \ - (I[137] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[153] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[169] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[185] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[217] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[233] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[249] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[10] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[26] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[42] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[58] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[74] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[90] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[106] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[122] = (T)(img)(_n3##x,y,z,c)), \ - (I[138] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[154] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[170] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[186] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[218] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[234] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[250] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[11] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[27] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[43] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[59] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[75] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[91] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[107] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[123] = (T)(img)(_n4##x,y,z,c)), \ - (I[139] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[155] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[171] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[187] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[219] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[235] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[251] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[12] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[28] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[44] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[60] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[76] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[92] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[108] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[124] = (T)(img)(_n5##x,y,z,c)), \ - (I[140] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[156] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[172] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[188] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[220] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[236] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[252] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[13] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[29] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[45] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[61] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[77] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[93] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[109] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[125] = (T)(img)(_n6##x,y,z,c)), \ - (I[141] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[157] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[173] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[189] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[221] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[237] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[253] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[14] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[30] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[46] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[62] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[78] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[94] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[110] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[126] = (T)(img)(_n7##x,y,z,c)), \ - (I[142] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[158] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[174] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[190] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[222] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[238] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[254] = (T)(img)(_n7##x,_n8##y,z,c)), \ - x+8>=(img).width()?(img).width()-1:x+8); \ - x<=(int)(x1) && ((_n8##x<(img).width() && ( \ - (I[15] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[31] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[47] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[63] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[79] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[95] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[111] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[127] = (T)(img)(_n8##x,y,z,c)), \ - (I[143] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[159] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[175] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[191] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[223] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[239] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[255] = (T)(img)(_n8##x,_n8##y,z,c)),1)) || \ - _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x) - -#define cimg_get16x16(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p7##x,_p7##y,z,c), I[1] = (T)(img)(_p6##x,_p7##y,z,c), I[2] = (T)(img)(_p5##x,_p7##y,z,c), I[3] = (T)(img)(_p4##x,_p7##y,z,c), I[4] = (T)(img)(_p3##x,_p7##y,z,c), I[5] = (T)(img)(_p2##x,_p7##y,z,c), I[6] = (T)(img)(_p1##x,_p7##y,z,c), I[7] = (T)(img)(x,_p7##y,z,c), I[8] = (T)(img)(_n1##x,_p7##y,z,c), I[9] = (T)(img)(_n2##x,_p7##y,z,c), I[10] = (T)(img)(_n3##x,_p7##y,z,c), I[11] = (T)(img)(_n4##x,_p7##y,z,c), I[12] = (T)(img)(_n5##x,_p7##y,z,c), I[13] = (T)(img)(_n6##x,_p7##y,z,c), I[14] = (T)(img)(_n7##x,_p7##y,z,c), I[15] = (T)(img)(_n8##x,_p7##y,z,c), \ - I[16] = (T)(img)(_p7##x,_p6##y,z,c), I[17] = (T)(img)(_p6##x,_p6##y,z,c), I[18] = (T)(img)(_p5##x,_p6##y,z,c), I[19] = (T)(img)(_p4##x,_p6##y,z,c), I[20] = (T)(img)(_p3##x,_p6##y,z,c), I[21] = (T)(img)(_p2##x,_p6##y,z,c), I[22] = (T)(img)(_p1##x,_p6##y,z,c), I[23] = (T)(img)(x,_p6##y,z,c), I[24] = (T)(img)(_n1##x,_p6##y,z,c), I[25] = (T)(img)(_n2##x,_p6##y,z,c), I[26] = (T)(img)(_n3##x,_p6##y,z,c), I[27] = (T)(img)(_n4##x,_p6##y,z,c), I[28] = (T)(img)(_n5##x,_p6##y,z,c), I[29] = (T)(img)(_n6##x,_p6##y,z,c), I[30] = (T)(img)(_n7##x,_p6##y,z,c), I[31] = (T)(img)(_n8##x,_p6##y,z,c), \ - I[32] = (T)(img)(_p7##x,_p5##y,z,c), I[33] = (T)(img)(_p6##x,_p5##y,z,c), I[34] = (T)(img)(_p5##x,_p5##y,z,c), I[35] = (T)(img)(_p4##x,_p5##y,z,c), I[36] = (T)(img)(_p3##x,_p5##y,z,c), I[37] = (T)(img)(_p2##x,_p5##y,z,c), I[38] = (T)(img)(_p1##x,_p5##y,z,c), I[39] = (T)(img)(x,_p5##y,z,c), I[40] = (T)(img)(_n1##x,_p5##y,z,c), I[41] = (T)(img)(_n2##x,_p5##y,z,c), I[42] = (T)(img)(_n3##x,_p5##y,z,c), I[43] = (T)(img)(_n4##x,_p5##y,z,c), I[44] = (T)(img)(_n5##x,_p5##y,z,c), I[45] = (T)(img)(_n6##x,_p5##y,z,c), I[46] = (T)(img)(_n7##x,_p5##y,z,c), I[47] = (T)(img)(_n8##x,_p5##y,z,c), \ - I[48] = (T)(img)(_p7##x,_p4##y,z,c), I[49] = (T)(img)(_p6##x,_p4##y,z,c), I[50] = (T)(img)(_p5##x,_p4##y,z,c), I[51] = (T)(img)(_p4##x,_p4##y,z,c), I[52] = (T)(img)(_p3##x,_p4##y,z,c), I[53] = (T)(img)(_p2##x,_p4##y,z,c), I[54] = (T)(img)(_p1##x,_p4##y,z,c), I[55] = (T)(img)(x,_p4##y,z,c), I[56] = (T)(img)(_n1##x,_p4##y,z,c), I[57] = (T)(img)(_n2##x,_p4##y,z,c), I[58] = (T)(img)(_n3##x,_p4##y,z,c), I[59] = (T)(img)(_n4##x,_p4##y,z,c), I[60] = (T)(img)(_n5##x,_p4##y,z,c), I[61] = (T)(img)(_n6##x,_p4##y,z,c), I[62] = (T)(img)(_n7##x,_p4##y,z,c), I[63] = (T)(img)(_n8##x,_p4##y,z,c), \ - I[64] = (T)(img)(_p7##x,_p3##y,z,c), I[65] = (T)(img)(_p6##x,_p3##y,z,c), I[66] = (T)(img)(_p5##x,_p3##y,z,c), I[67] = (T)(img)(_p4##x,_p3##y,z,c), I[68] = (T)(img)(_p3##x,_p3##y,z,c), I[69] = (T)(img)(_p2##x,_p3##y,z,c), I[70] = (T)(img)(_p1##x,_p3##y,z,c), I[71] = (T)(img)(x,_p3##y,z,c), I[72] = (T)(img)(_n1##x,_p3##y,z,c), I[73] = (T)(img)(_n2##x,_p3##y,z,c), I[74] = (T)(img)(_n3##x,_p3##y,z,c), I[75] = (T)(img)(_n4##x,_p3##y,z,c), I[76] = (T)(img)(_n5##x,_p3##y,z,c), I[77] = (T)(img)(_n6##x,_p3##y,z,c), I[78] = (T)(img)(_n7##x,_p3##y,z,c), I[79] = (T)(img)(_n8##x,_p3##y,z,c), \ - I[80] = (T)(img)(_p7##x,_p2##y,z,c), I[81] = (T)(img)(_p6##x,_p2##y,z,c), I[82] = (T)(img)(_p5##x,_p2##y,z,c), I[83] = (T)(img)(_p4##x,_p2##y,z,c), I[84] = (T)(img)(_p3##x,_p2##y,z,c), I[85] = (T)(img)(_p2##x,_p2##y,z,c), I[86] = (T)(img)(_p1##x,_p2##y,z,c), I[87] = (T)(img)(x,_p2##y,z,c), I[88] = (T)(img)(_n1##x,_p2##y,z,c), I[89] = (T)(img)(_n2##x,_p2##y,z,c), I[90] = (T)(img)(_n3##x,_p2##y,z,c), I[91] = (T)(img)(_n4##x,_p2##y,z,c), I[92] = (T)(img)(_n5##x,_p2##y,z,c), I[93] = (T)(img)(_n6##x,_p2##y,z,c), I[94] = (T)(img)(_n7##x,_p2##y,z,c), I[95] = (T)(img)(_n8##x,_p2##y,z,c), \ - I[96] = (T)(img)(_p7##x,_p1##y,z,c), I[97] = (T)(img)(_p6##x,_p1##y,z,c), I[98] = (T)(img)(_p5##x,_p1##y,z,c), I[99] = (T)(img)(_p4##x,_p1##y,z,c), I[100] = (T)(img)(_p3##x,_p1##y,z,c), I[101] = (T)(img)(_p2##x,_p1##y,z,c), I[102] = (T)(img)(_p1##x,_p1##y,z,c), I[103] = (T)(img)(x,_p1##y,z,c), I[104] = (T)(img)(_n1##x,_p1##y,z,c), I[105] = (T)(img)(_n2##x,_p1##y,z,c), I[106] = (T)(img)(_n3##x,_p1##y,z,c), I[107] = (T)(img)(_n4##x,_p1##y,z,c), I[108] = (T)(img)(_n5##x,_p1##y,z,c), I[109] = (T)(img)(_n6##x,_p1##y,z,c), I[110] = (T)(img)(_n7##x,_p1##y,z,c), I[111] = (T)(img)(_n8##x,_p1##y,z,c), \ - I[112] = (T)(img)(_p7##x,y,z,c), I[113] = (T)(img)(_p6##x,y,z,c), I[114] = (T)(img)(_p5##x,y,z,c), I[115] = (T)(img)(_p4##x,y,z,c), I[116] = (T)(img)(_p3##x,y,z,c), I[117] = (T)(img)(_p2##x,y,z,c), I[118] = (T)(img)(_p1##x,y,z,c), I[119] = (T)(img)(x,y,z,c), I[120] = (T)(img)(_n1##x,y,z,c), I[121] = (T)(img)(_n2##x,y,z,c), I[122] = (T)(img)(_n3##x,y,z,c), I[123] = (T)(img)(_n4##x,y,z,c), I[124] = (T)(img)(_n5##x,y,z,c), I[125] = (T)(img)(_n6##x,y,z,c), I[126] = (T)(img)(_n7##x,y,z,c), I[127] = (T)(img)(_n8##x,y,z,c), \ - I[128] = (T)(img)(_p7##x,_n1##y,z,c), I[129] = (T)(img)(_p6##x,_n1##y,z,c), I[130] = (T)(img)(_p5##x,_n1##y,z,c), I[131] = (T)(img)(_p4##x,_n1##y,z,c), I[132] = (T)(img)(_p3##x,_n1##y,z,c), I[133] = (T)(img)(_p2##x,_n1##y,z,c), I[134] = (T)(img)(_p1##x,_n1##y,z,c), I[135] = (T)(img)(x,_n1##y,z,c), I[136] = (T)(img)(_n1##x,_n1##y,z,c), I[137] = (T)(img)(_n2##x,_n1##y,z,c), I[138] = (T)(img)(_n3##x,_n1##y,z,c), I[139] = (T)(img)(_n4##x,_n1##y,z,c), I[140] = (T)(img)(_n5##x,_n1##y,z,c), I[141] = (T)(img)(_n6##x,_n1##y,z,c), I[142] = (T)(img)(_n7##x,_n1##y,z,c), I[143] = (T)(img)(_n8##x,_n1##y,z,c), \ - I[144] = (T)(img)(_p7##x,_n2##y,z,c), I[145] = (T)(img)(_p6##x,_n2##y,z,c), I[146] = (T)(img)(_p5##x,_n2##y,z,c), I[147] = (T)(img)(_p4##x,_n2##y,z,c), I[148] = (T)(img)(_p3##x,_n2##y,z,c), I[149] = (T)(img)(_p2##x,_n2##y,z,c), I[150] = (T)(img)(_p1##x,_n2##y,z,c), I[151] = (T)(img)(x,_n2##y,z,c), I[152] = (T)(img)(_n1##x,_n2##y,z,c), I[153] = (T)(img)(_n2##x,_n2##y,z,c), I[154] = (T)(img)(_n3##x,_n2##y,z,c), I[155] = (T)(img)(_n4##x,_n2##y,z,c), I[156] = (T)(img)(_n5##x,_n2##y,z,c), I[157] = (T)(img)(_n6##x,_n2##y,z,c), I[158] = (T)(img)(_n7##x,_n2##y,z,c), I[159] = (T)(img)(_n8##x,_n2##y,z,c), \ - I[160] = (T)(img)(_p7##x,_n3##y,z,c), I[161] = (T)(img)(_p6##x,_n3##y,z,c), I[162] = (T)(img)(_p5##x,_n3##y,z,c), I[163] = (T)(img)(_p4##x,_n3##y,z,c), I[164] = (T)(img)(_p3##x,_n3##y,z,c), I[165] = (T)(img)(_p2##x,_n3##y,z,c), I[166] = (T)(img)(_p1##x,_n3##y,z,c), I[167] = (T)(img)(x,_n3##y,z,c), I[168] = (T)(img)(_n1##x,_n3##y,z,c), I[169] = (T)(img)(_n2##x,_n3##y,z,c), I[170] = (T)(img)(_n3##x,_n3##y,z,c), I[171] = (T)(img)(_n4##x,_n3##y,z,c), I[172] = (T)(img)(_n5##x,_n3##y,z,c), I[173] = (T)(img)(_n6##x,_n3##y,z,c), I[174] = (T)(img)(_n7##x,_n3##y,z,c), I[175] = (T)(img)(_n8##x,_n3##y,z,c), \ - I[176] = (T)(img)(_p7##x,_n4##y,z,c), I[177] = (T)(img)(_p6##x,_n4##y,z,c), I[178] = (T)(img)(_p5##x,_n4##y,z,c), I[179] = (T)(img)(_p4##x,_n4##y,z,c), I[180] = (T)(img)(_p3##x,_n4##y,z,c), I[181] = (T)(img)(_p2##x,_n4##y,z,c), I[182] = (T)(img)(_p1##x,_n4##y,z,c), I[183] = (T)(img)(x,_n4##y,z,c), I[184] = (T)(img)(_n1##x,_n4##y,z,c), I[185] = (T)(img)(_n2##x,_n4##y,z,c), I[186] = (T)(img)(_n3##x,_n4##y,z,c), I[187] = (T)(img)(_n4##x,_n4##y,z,c), I[188] = (T)(img)(_n5##x,_n4##y,z,c), I[189] = (T)(img)(_n6##x,_n4##y,z,c), I[190] = (T)(img)(_n7##x,_n4##y,z,c), I[191] = (T)(img)(_n8##x,_n4##y,z,c), \ - I[192] = (T)(img)(_p7##x,_n5##y,z,c), I[193] = (T)(img)(_p6##x,_n5##y,z,c), I[194] = (T)(img)(_p5##x,_n5##y,z,c), I[195] = (T)(img)(_p4##x,_n5##y,z,c), I[196] = (T)(img)(_p3##x,_n5##y,z,c), I[197] = (T)(img)(_p2##x,_n5##y,z,c), I[198] = (T)(img)(_p1##x,_n5##y,z,c), I[199] = (T)(img)(x,_n5##y,z,c), I[200] = (T)(img)(_n1##x,_n5##y,z,c), I[201] = (T)(img)(_n2##x,_n5##y,z,c), I[202] = (T)(img)(_n3##x,_n5##y,z,c), I[203] = (T)(img)(_n4##x,_n5##y,z,c), I[204] = (T)(img)(_n5##x,_n5##y,z,c), I[205] = (T)(img)(_n6##x,_n5##y,z,c), I[206] = (T)(img)(_n7##x,_n5##y,z,c), I[207] = (T)(img)(_n8##x,_n5##y,z,c), \ - I[208] = (T)(img)(_p7##x,_n6##y,z,c), I[209] = (T)(img)(_p6##x,_n6##y,z,c), I[210] = (T)(img)(_p5##x,_n6##y,z,c), I[211] = (T)(img)(_p4##x,_n6##y,z,c), I[212] = (T)(img)(_p3##x,_n6##y,z,c), I[213] = (T)(img)(_p2##x,_n6##y,z,c), I[214] = (T)(img)(_p1##x,_n6##y,z,c), I[215] = (T)(img)(x,_n6##y,z,c), I[216] = (T)(img)(_n1##x,_n6##y,z,c), I[217] = (T)(img)(_n2##x,_n6##y,z,c), I[218] = (T)(img)(_n3##x,_n6##y,z,c), I[219] = (T)(img)(_n4##x,_n6##y,z,c), I[220] = (T)(img)(_n5##x,_n6##y,z,c), I[221] = (T)(img)(_n6##x,_n6##y,z,c), I[222] = (T)(img)(_n7##x,_n6##y,z,c), I[223] = (T)(img)(_n8##x,_n6##y,z,c), \ - I[224] = (T)(img)(_p7##x,_n7##y,z,c), I[225] = (T)(img)(_p6##x,_n7##y,z,c), I[226] = (T)(img)(_p5##x,_n7##y,z,c), I[227] = (T)(img)(_p4##x,_n7##y,z,c), I[228] = (T)(img)(_p3##x,_n7##y,z,c), I[229] = (T)(img)(_p2##x,_n7##y,z,c), I[230] = (T)(img)(_p1##x,_n7##y,z,c), I[231] = (T)(img)(x,_n7##y,z,c), I[232] = (T)(img)(_n1##x,_n7##y,z,c), I[233] = (T)(img)(_n2##x,_n7##y,z,c), I[234] = (T)(img)(_n3##x,_n7##y,z,c), I[235] = (T)(img)(_n4##x,_n7##y,z,c), I[236] = (T)(img)(_n5##x,_n7##y,z,c), I[237] = (T)(img)(_n6##x,_n7##y,z,c), I[238] = (T)(img)(_n7##x,_n7##y,z,c), I[239] = (T)(img)(_n8##x,_n7##y,z,c), \ - I[240] = (T)(img)(_p7##x,_n8##y,z,c), I[241] = (T)(img)(_p6##x,_n8##y,z,c), I[242] = (T)(img)(_p5##x,_n8##y,z,c), I[243] = (T)(img)(_p4##x,_n8##y,z,c), I[244] = (T)(img)(_p3##x,_n8##y,z,c), I[245] = (T)(img)(_p2##x,_n8##y,z,c), I[246] = (T)(img)(_p1##x,_n8##y,z,c), I[247] = (T)(img)(x,_n8##y,z,c), I[248] = (T)(img)(_n1##x,_n8##y,z,c), I[249] = (T)(img)(_n2##x,_n8##y,z,c), I[250] = (T)(img)(_n3##x,_n8##y,z,c), I[251] = (T)(img)(_n4##x,_n8##y,z,c), I[252] = (T)(img)(_n5##x,_n8##y,z,c), I[253] = (T)(img)(_n6##x,_n8##y,z,c), I[254] = (T)(img)(_n7##x,_n8##y,z,c), I[255] = (T)(img)(_n8##x,_n8##y,z,c); - -// Define 17x17 loop macros -//------------------------- -#define cimg_for17(bound,i) for (int i = 0, \ - _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8; \ - _n8##i<(int)(bound) || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i) - -#define cimg_for17X(img,x) cimg_for17((img)._width,x) -#define cimg_for17Y(img,y) cimg_for17((img)._height,y) -#define cimg_for17Z(img,z) cimg_for17((img)._depth,z) -#define cimg_for17C(img,c) cimg_for17((img)._spectrum,c) -#define cimg_for17XY(img,x,y) cimg_for17Y(img,y) cimg_for17X(img,x) -#define cimg_for17XZ(img,x,z) cimg_for17Z(img,z) cimg_for17X(img,x) -#define cimg_for17XC(img,x,c) cimg_for17C(img,c) cimg_for17X(img,x) -#define cimg_for17YZ(img,y,z) cimg_for17Z(img,z) cimg_for17Y(img,y) -#define cimg_for17YC(img,y,c) cimg_for17C(img,c) cimg_for17Y(img,y) -#define cimg_for17ZC(img,z,c) cimg_for17C(img,c) cimg_for17Z(img,z) -#define cimg_for17XYZ(img,x,y,z) cimg_for17Z(img,z) cimg_for17XY(img,x,y) -#define cimg_for17XZC(img,x,z,c) cimg_for17C(img,c) cimg_for17XZ(img,x,z) -#define cimg_for17YZC(img,y,z,c) cimg_for17C(img,c) cimg_for17YZ(img,y,z) -#define cimg_for17XYZC(img,x,y,z,c) cimg_for17C(img,c) cimg_for17XYZ(img,x,y,z) - -#define cimg_for_in17(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8; \ - i<=(int)(i1) && (_n8##i<(int)(bound) || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i) - -#define cimg_for_in17X(img,x0,x1,x) cimg_for_in17((img)._width,x0,x1,x) -#define cimg_for_in17Y(img,y0,y1,y) cimg_for_in17((img)._height,y0,y1,y) -#define cimg_for_in17Z(img,z0,z1,z) cimg_for_in17((img)._depth,z0,z1,z) -#define cimg_for_in17C(img,c0,c1,c) cimg_for_in17((img)._spectrum,c0,c1,c) -#define cimg_for_in17XY(img,x0,y0,x1,y1,x,y) cimg_for_in17Y(img,y0,y1,y) cimg_for_in17X(img,x0,x1,x) -#define cimg_for_in17XZ(img,x0,z0,x1,z1,x,z) cimg_for_in17Z(img,z0,z1,z) cimg_for_in17X(img,x0,x1,x) -#define cimg_for_in17XC(img,x0,c0,x1,c1,x,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17X(img,x0,x1,x) -#define cimg_for_in17YZ(img,y0,z0,y1,z1,y,z) cimg_for_in17Z(img,z0,z1,z) cimg_for_in17Y(img,y0,y1,y) -#define cimg_for_in17YC(img,y0,c0,y1,c1,y,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17Y(img,y0,y1,y) -#define cimg_for_in17ZC(img,z0,c0,z1,c1,z,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17Z(img,z0,z1,z) -#define cimg_for_in17XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in17Z(img,z0,z1,z) cimg_for_in17XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in17XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in17YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in17XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in17C(img,c0,c1,c) cimg_for_in17XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for17x17(img,x,y,z,c,I,T) \ - cimg_for17((img)._height,y) for (int x = 0, \ - _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = (T)(img)(0,_p8##y,z,c)), \ - (I[17] = I[18] = I[19] = I[20] = I[21] = I[22] = I[23] = I[24] = I[25] = (T)(img)(0,_p7##y,z,c)), \ - (I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = (T)(img)(0,_p6##y,z,c)), \ - (I[51] = I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_p5##y,z,c)), \ - (I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_p4##y,z,c)), \ - (I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = (T)(img)(0,_p3##y,z,c)), \ - (I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = (T)(img)(0,_p2##y,z,c)), \ - (I[119] = I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = (T)(img)(0,_p1##y,z,c)), \ - (I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = I[143] = I[144] = (T)(img)(0,y,z,c)), \ - (I[153] = I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = (T)(img)(0,_n1##y,z,c)), \ - (I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = I[176] = I[177] = I[178] = (T)(img)(0,_n2##y,z,c)), \ - (I[187] = I[188] = I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = (T)(img)(0,_n3##y,z,c)), \ - (I[204] = I[205] = I[206] = I[207] = I[208] = I[209] = I[210] = I[211] = I[212] = (T)(img)(0,_n4##y,z,c)), \ - (I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = (T)(img)(0,_n5##y,z,c)), \ - (I[238] = I[239] = I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = (T)(img)(0,_n6##y,z,c)), \ - (I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = I[263] = (T)(img)(0,_n7##y,z,c)), \ - (I[272] = I[273] = I[274] = I[275] = I[276] = I[277] = I[278] = I[279] = I[280] = (T)(img)(0,_n8##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[26] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[43] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[94] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[128] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[145] = (T)(img)(_n1##x,y,z,c)), \ - (I[162] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[196] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[213] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[264] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[281] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[27] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[44] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[95] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[129] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[146] = (T)(img)(_n2##x,y,z,c)), \ - (I[163] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[197] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[214] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[265] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[282] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[28] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[45] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[96] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[130] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[147] = (T)(img)(_n3##x,y,z,c)), \ - (I[164] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[198] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[215] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[266] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[283] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[12] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[29] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[46] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[97] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[114] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[131] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[148] = (T)(img)(_n4##x,y,z,c)), \ - (I[165] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[182] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[199] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[216] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[267] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[284] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[13] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[30] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[47] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[64] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[98] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[115] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[132] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[149] = (T)(img)(_n5##x,y,z,c)), \ - (I[166] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[183] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[200] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[217] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[268] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[285] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[14] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[31] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[48] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[65] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[99] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[116] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[133] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[150] = (T)(img)(_n6##x,y,z,c)), \ - (I[167] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[184] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[201] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[218] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[269] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[286] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[15] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[32] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[49] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[66] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[100] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[117] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[134] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[151] = (T)(img)(_n7##x,y,z,c)), \ - (I[168] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[185] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[202] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[219] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[270] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[287] = (T)(img)(_n7##x,_n8##y,z,c)), \ - 8>=((img)._width)?(img).width()-1:8); \ - (_n8##x<(img).width() && ( \ - (I[16] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[33] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[50] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[67] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[84] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[101] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[118] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[135] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[152] = (T)(img)(_n8##x,y,z,c)), \ - (I[169] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[186] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[203] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[220] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[271] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[288] = (T)(img)(_n8##x,_n8##y,z,c)),1)) || \ - _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \ - I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], \ - I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], \ - I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], \ - I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], \ - I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], \ - I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], \ - I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], \ - I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], \ - I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], \ - I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], \ - I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], \ - I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], \ - I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], \ - I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], \ - I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], \ - I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], \ - _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x) - -#define cimg_for_in17x17(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in17((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = (int)( \ - (I[0] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[17] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[34] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[51] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[68] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[85] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[102] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[119] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[136] = (T)(img)(_p8##x,y,z,c)), \ - (I[153] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[170] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[187] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[204] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[221] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[238] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[255] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[272] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[1] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[18] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[35] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[52] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[69] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[86] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[103] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[120] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[137] = (T)(img)(_p7##x,y,z,c)), \ - (I[154] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[171] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[188] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[205] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[222] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[239] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[256] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[273] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[2] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[19] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[36] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[53] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[70] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[87] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[104] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[121] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[138] = (T)(img)(_p6##x,y,z,c)), \ - (I[155] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[172] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[189] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[206] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[223] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[240] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[257] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[274] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[3] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[20] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[37] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[54] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[71] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[88] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[105] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[122] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[139] = (T)(img)(_p5##x,y,z,c)), \ - (I[156] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[173] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[190] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[207] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[224] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[241] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[258] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[275] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[4] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[21] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[38] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[55] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[72] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[89] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[106] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[123] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[140] = (T)(img)(_p4##x,y,z,c)), \ - (I[157] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[174] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[191] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[208] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[225] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[242] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[259] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[276] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[5] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[22] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[39] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[56] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[73] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[90] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[107] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[124] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[141] = (T)(img)(_p3##x,y,z,c)), \ - (I[158] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[175] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[192] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[209] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[226] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[243] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[260] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[277] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[6] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[23] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[40] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[57] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[74] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[91] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[108] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[125] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[142] = (T)(img)(_p2##x,y,z,c)), \ - (I[159] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[176] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[193] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[210] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[227] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[244] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[261] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[278] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[7] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[24] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[41] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[58] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[75] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[92] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[109] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[126] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[143] = (T)(img)(_p1##x,y,z,c)), \ - (I[160] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[177] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[194] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[211] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[228] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[245] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[262] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[279] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[8] = (T)(img)(x,_p8##y,z,c)), \ - (I[25] = (T)(img)(x,_p7##y,z,c)), \ - (I[42] = (T)(img)(x,_p6##y,z,c)), \ - (I[59] = (T)(img)(x,_p5##y,z,c)), \ - (I[76] = (T)(img)(x,_p4##y,z,c)), \ - (I[93] = (T)(img)(x,_p3##y,z,c)), \ - (I[110] = (T)(img)(x,_p2##y,z,c)), \ - (I[127] = (T)(img)(x,_p1##y,z,c)), \ - (I[144] = (T)(img)(x,y,z,c)), \ - (I[161] = (T)(img)(x,_n1##y,z,c)), \ - (I[178] = (T)(img)(x,_n2##y,z,c)), \ - (I[195] = (T)(img)(x,_n3##y,z,c)), \ - (I[212] = (T)(img)(x,_n4##y,z,c)), \ - (I[229] = (T)(img)(x,_n5##y,z,c)), \ - (I[246] = (T)(img)(x,_n6##y,z,c)), \ - (I[263] = (T)(img)(x,_n7##y,z,c)), \ - (I[280] = (T)(img)(x,_n8##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[26] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[43] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[94] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[128] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[145] = (T)(img)(_n1##x,y,z,c)), \ - (I[162] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[196] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[213] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[264] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[281] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[27] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[44] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[95] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[129] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[146] = (T)(img)(_n2##x,y,z,c)), \ - (I[163] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[197] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[214] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[265] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[282] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[28] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[45] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[96] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[130] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[147] = (T)(img)(_n3##x,y,z,c)), \ - (I[164] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[198] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[215] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[266] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[283] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[12] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[29] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[46] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[97] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[114] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[131] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[148] = (T)(img)(_n4##x,y,z,c)), \ - (I[165] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[182] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[199] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[216] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[267] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[284] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[13] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[30] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[47] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[64] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[98] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[115] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[132] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[149] = (T)(img)(_n5##x,y,z,c)), \ - (I[166] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[183] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[200] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[217] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[268] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[285] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[14] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[31] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[48] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[65] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[99] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[116] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[133] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[150] = (T)(img)(_n6##x,y,z,c)), \ - (I[167] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[184] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[201] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[218] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[269] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[286] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[15] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[32] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[49] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[66] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[100] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[117] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[134] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[151] = (T)(img)(_n7##x,y,z,c)), \ - (I[168] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[185] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[202] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[219] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[270] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[287] = (T)(img)(_n7##x,_n8##y,z,c)), \ - x+8>=(img).width()?(img).width()-1:x+8); \ - x<=(int)(x1) && ((_n8##x<(img).width() && ( \ - (I[16] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[33] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[50] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[67] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[84] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[101] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[118] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[135] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[152] = (T)(img)(_n8##x,y,z,c)), \ - (I[169] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[186] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[203] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[220] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[271] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[288] = (T)(img)(_n8##x,_n8##y,z,c)),1)) || \ - _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \ - I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], \ - I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], \ - I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], \ - I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], \ - I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], \ - I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], \ - I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], \ - I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], \ - I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], \ - I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], \ - I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], \ - I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], \ - I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], \ - I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], \ - I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], \ - I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], \ - _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x) - -#define cimg_get17x17(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p8##x,_p8##y,z,c), I[1] = (T)(img)(_p7##x,_p8##y,z,c), I[2] = (T)(img)(_p6##x,_p8##y,z,c), I[3] = (T)(img)(_p5##x,_p8##y,z,c), I[4] = (T)(img)(_p4##x,_p8##y,z,c), I[5] = (T)(img)(_p3##x,_p8##y,z,c), I[6] = (T)(img)(_p2##x,_p8##y,z,c), I[7] = (T)(img)(_p1##x,_p8##y,z,c), I[8] = (T)(img)(x,_p8##y,z,c), I[9] = (T)(img)(_n1##x,_p8##y,z,c), I[10] = (T)(img)(_n2##x,_p8##y,z,c), I[11] = (T)(img)(_n3##x,_p8##y,z,c), I[12] = (T)(img)(_n4##x,_p8##y,z,c), I[13] = (T)(img)(_n5##x,_p8##y,z,c), I[14] = (T)(img)(_n6##x,_p8##y,z,c), I[15] = (T)(img)(_n7##x,_p8##y,z,c), I[16] = (T)(img)(_n8##x,_p8##y,z,c), \ - I[17] = (T)(img)(_p8##x,_p7##y,z,c), I[18] = (T)(img)(_p7##x,_p7##y,z,c), I[19] = (T)(img)(_p6##x,_p7##y,z,c), I[20] = (T)(img)(_p5##x,_p7##y,z,c), I[21] = (T)(img)(_p4##x,_p7##y,z,c), I[22] = (T)(img)(_p3##x,_p7##y,z,c), I[23] = (T)(img)(_p2##x,_p7##y,z,c), I[24] = (T)(img)(_p1##x,_p7##y,z,c), I[25] = (T)(img)(x,_p7##y,z,c), I[26] = (T)(img)(_n1##x,_p7##y,z,c), I[27] = (T)(img)(_n2##x,_p7##y,z,c), I[28] = (T)(img)(_n3##x,_p7##y,z,c), I[29] = (T)(img)(_n4##x,_p7##y,z,c), I[30] = (T)(img)(_n5##x,_p7##y,z,c), I[31] = (T)(img)(_n6##x,_p7##y,z,c), I[32] = (T)(img)(_n7##x,_p7##y,z,c), I[33] = (T)(img)(_n8##x,_p7##y,z,c), \ - I[34] = (T)(img)(_p8##x,_p6##y,z,c), I[35] = (T)(img)(_p7##x,_p6##y,z,c), I[36] = (T)(img)(_p6##x,_p6##y,z,c), I[37] = (T)(img)(_p5##x,_p6##y,z,c), I[38] = (T)(img)(_p4##x,_p6##y,z,c), I[39] = (T)(img)(_p3##x,_p6##y,z,c), I[40] = (T)(img)(_p2##x,_p6##y,z,c), I[41] = (T)(img)(_p1##x,_p6##y,z,c), I[42] = (T)(img)(x,_p6##y,z,c), I[43] = (T)(img)(_n1##x,_p6##y,z,c), I[44] = (T)(img)(_n2##x,_p6##y,z,c), I[45] = (T)(img)(_n3##x,_p6##y,z,c), I[46] = (T)(img)(_n4##x,_p6##y,z,c), I[47] = (T)(img)(_n5##x,_p6##y,z,c), I[48] = (T)(img)(_n6##x,_p6##y,z,c), I[49] = (T)(img)(_n7##x,_p6##y,z,c), I[50] = (T)(img)(_n8##x,_p6##y,z,c), \ - I[51] = (T)(img)(_p8##x,_p5##y,z,c), I[52] = (T)(img)(_p7##x,_p5##y,z,c), I[53] = (T)(img)(_p6##x,_p5##y,z,c), I[54] = (T)(img)(_p5##x,_p5##y,z,c), I[55] = (T)(img)(_p4##x,_p5##y,z,c), I[56] = (T)(img)(_p3##x,_p5##y,z,c), I[57] = (T)(img)(_p2##x,_p5##y,z,c), I[58] = (T)(img)(_p1##x,_p5##y,z,c), I[59] = (T)(img)(x,_p5##y,z,c), I[60] = (T)(img)(_n1##x,_p5##y,z,c), I[61] = (T)(img)(_n2##x,_p5##y,z,c), I[62] = (T)(img)(_n3##x,_p5##y,z,c), I[63] = (T)(img)(_n4##x,_p5##y,z,c), I[64] = (T)(img)(_n5##x,_p5##y,z,c), I[65] = (T)(img)(_n6##x,_p5##y,z,c), I[66] = (T)(img)(_n7##x,_p5##y,z,c), I[67] = (T)(img)(_n8##x,_p5##y,z,c), \ - I[68] = (T)(img)(_p8##x,_p4##y,z,c), I[69] = (T)(img)(_p7##x,_p4##y,z,c), I[70] = (T)(img)(_p6##x,_p4##y,z,c), I[71] = (T)(img)(_p5##x,_p4##y,z,c), I[72] = (T)(img)(_p4##x,_p4##y,z,c), I[73] = (T)(img)(_p3##x,_p4##y,z,c), I[74] = (T)(img)(_p2##x,_p4##y,z,c), I[75] = (T)(img)(_p1##x,_p4##y,z,c), I[76] = (T)(img)(x,_p4##y,z,c), I[77] = (T)(img)(_n1##x,_p4##y,z,c), I[78] = (T)(img)(_n2##x,_p4##y,z,c), I[79] = (T)(img)(_n3##x,_p4##y,z,c), I[80] = (T)(img)(_n4##x,_p4##y,z,c), I[81] = (T)(img)(_n5##x,_p4##y,z,c), I[82] = (T)(img)(_n6##x,_p4##y,z,c), I[83] = (T)(img)(_n7##x,_p4##y,z,c), I[84] = (T)(img)(_n8##x,_p4##y,z,c), \ - I[85] = (T)(img)(_p8##x,_p3##y,z,c), I[86] = (T)(img)(_p7##x,_p3##y,z,c), I[87] = (T)(img)(_p6##x,_p3##y,z,c), I[88] = (T)(img)(_p5##x,_p3##y,z,c), I[89] = (T)(img)(_p4##x,_p3##y,z,c), I[90] = (T)(img)(_p3##x,_p3##y,z,c), I[91] = (T)(img)(_p2##x,_p3##y,z,c), I[92] = (T)(img)(_p1##x,_p3##y,z,c), I[93] = (T)(img)(x,_p3##y,z,c), I[94] = (T)(img)(_n1##x,_p3##y,z,c), I[95] = (T)(img)(_n2##x,_p3##y,z,c), I[96] = (T)(img)(_n3##x,_p3##y,z,c), I[97] = (T)(img)(_n4##x,_p3##y,z,c), I[98] = (T)(img)(_n5##x,_p3##y,z,c), I[99] = (T)(img)(_n6##x,_p3##y,z,c), I[100] = (T)(img)(_n7##x,_p3##y,z,c), I[101] = (T)(img)(_n8##x,_p3##y,z,c), \ - I[102] = (T)(img)(_p8##x,_p2##y,z,c), I[103] = (T)(img)(_p7##x,_p2##y,z,c), I[104] = (T)(img)(_p6##x,_p2##y,z,c), I[105] = (T)(img)(_p5##x,_p2##y,z,c), I[106] = (T)(img)(_p4##x,_p2##y,z,c), I[107] = (T)(img)(_p3##x,_p2##y,z,c), I[108] = (T)(img)(_p2##x,_p2##y,z,c), I[109] = (T)(img)(_p1##x,_p2##y,z,c), I[110] = (T)(img)(x,_p2##y,z,c), I[111] = (T)(img)(_n1##x,_p2##y,z,c), I[112] = (T)(img)(_n2##x,_p2##y,z,c), I[113] = (T)(img)(_n3##x,_p2##y,z,c), I[114] = (T)(img)(_n4##x,_p2##y,z,c), I[115] = (T)(img)(_n5##x,_p2##y,z,c), I[116] = (T)(img)(_n6##x,_p2##y,z,c), I[117] = (T)(img)(_n7##x,_p2##y,z,c), I[118] = (T)(img)(_n8##x,_p2##y,z,c), \ - I[119] = (T)(img)(_p8##x,_p1##y,z,c), I[120] = (T)(img)(_p7##x,_p1##y,z,c), I[121] = (T)(img)(_p6##x,_p1##y,z,c), I[122] = (T)(img)(_p5##x,_p1##y,z,c), I[123] = (T)(img)(_p4##x,_p1##y,z,c), I[124] = (T)(img)(_p3##x,_p1##y,z,c), I[125] = (T)(img)(_p2##x,_p1##y,z,c), I[126] = (T)(img)(_p1##x,_p1##y,z,c), I[127] = (T)(img)(x,_p1##y,z,c), I[128] = (T)(img)(_n1##x,_p1##y,z,c), I[129] = (T)(img)(_n2##x,_p1##y,z,c), I[130] = (T)(img)(_n3##x,_p1##y,z,c), I[131] = (T)(img)(_n4##x,_p1##y,z,c), I[132] = (T)(img)(_n5##x,_p1##y,z,c), I[133] = (T)(img)(_n6##x,_p1##y,z,c), I[134] = (T)(img)(_n7##x,_p1##y,z,c), I[135] = (T)(img)(_n8##x,_p1##y,z,c), \ - I[136] = (T)(img)(_p8##x,y,z,c), I[137] = (T)(img)(_p7##x,y,z,c), I[138] = (T)(img)(_p6##x,y,z,c), I[139] = (T)(img)(_p5##x,y,z,c), I[140] = (T)(img)(_p4##x,y,z,c), I[141] = (T)(img)(_p3##x,y,z,c), I[142] = (T)(img)(_p2##x,y,z,c), I[143] = (T)(img)(_p1##x,y,z,c), I[144] = (T)(img)(x,y,z,c), I[145] = (T)(img)(_n1##x,y,z,c), I[146] = (T)(img)(_n2##x,y,z,c), I[147] = (T)(img)(_n3##x,y,z,c), I[148] = (T)(img)(_n4##x,y,z,c), I[149] = (T)(img)(_n5##x,y,z,c), I[150] = (T)(img)(_n6##x,y,z,c), I[151] = (T)(img)(_n7##x,y,z,c), I[152] = (T)(img)(_n8##x,y,z,c), \ - I[153] = (T)(img)(_p8##x,_n1##y,z,c), I[154] = (T)(img)(_p7##x,_n1##y,z,c), I[155] = (T)(img)(_p6##x,_n1##y,z,c), I[156] = (T)(img)(_p5##x,_n1##y,z,c), I[157] = (T)(img)(_p4##x,_n1##y,z,c), I[158] = (T)(img)(_p3##x,_n1##y,z,c), I[159] = (T)(img)(_p2##x,_n1##y,z,c), I[160] = (T)(img)(_p1##x,_n1##y,z,c), I[161] = (T)(img)(x,_n1##y,z,c), I[162] = (T)(img)(_n1##x,_n1##y,z,c), I[163] = (T)(img)(_n2##x,_n1##y,z,c), I[164] = (T)(img)(_n3##x,_n1##y,z,c), I[165] = (T)(img)(_n4##x,_n1##y,z,c), I[166] = (T)(img)(_n5##x,_n1##y,z,c), I[167] = (T)(img)(_n6##x,_n1##y,z,c), I[168] = (T)(img)(_n7##x,_n1##y,z,c), I[169] = (T)(img)(_n8##x,_n1##y,z,c), \ - I[170] = (T)(img)(_p8##x,_n2##y,z,c), I[171] = (T)(img)(_p7##x,_n2##y,z,c), I[172] = (T)(img)(_p6##x,_n2##y,z,c), I[173] = (T)(img)(_p5##x,_n2##y,z,c), I[174] = (T)(img)(_p4##x,_n2##y,z,c), I[175] = (T)(img)(_p3##x,_n2##y,z,c), I[176] = (T)(img)(_p2##x,_n2##y,z,c), I[177] = (T)(img)(_p1##x,_n2##y,z,c), I[178] = (T)(img)(x,_n2##y,z,c), I[179] = (T)(img)(_n1##x,_n2##y,z,c), I[180] = (T)(img)(_n2##x,_n2##y,z,c), I[181] = (T)(img)(_n3##x,_n2##y,z,c), I[182] = (T)(img)(_n4##x,_n2##y,z,c), I[183] = (T)(img)(_n5##x,_n2##y,z,c), I[184] = (T)(img)(_n6##x,_n2##y,z,c), I[185] = (T)(img)(_n7##x,_n2##y,z,c), I[186] = (T)(img)(_n8##x,_n2##y,z,c), \ - I[187] = (T)(img)(_p8##x,_n3##y,z,c), I[188] = (T)(img)(_p7##x,_n3##y,z,c), I[189] = (T)(img)(_p6##x,_n3##y,z,c), I[190] = (T)(img)(_p5##x,_n3##y,z,c), I[191] = (T)(img)(_p4##x,_n3##y,z,c), I[192] = (T)(img)(_p3##x,_n3##y,z,c), I[193] = (T)(img)(_p2##x,_n3##y,z,c), I[194] = (T)(img)(_p1##x,_n3##y,z,c), I[195] = (T)(img)(x,_n3##y,z,c), I[196] = (T)(img)(_n1##x,_n3##y,z,c), I[197] = (T)(img)(_n2##x,_n3##y,z,c), I[198] = (T)(img)(_n3##x,_n3##y,z,c), I[199] = (T)(img)(_n4##x,_n3##y,z,c), I[200] = (T)(img)(_n5##x,_n3##y,z,c), I[201] = (T)(img)(_n6##x,_n3##y,z,c), I[202] = (T)(img)(_n7##x,_n3##y,z,c), I[203] = (T)(img)(_n8##x,_n3##y,z,c), \ - I[204] = (T)(img)(_p8##x,_n4##y,z,c), I[205] = (T)(img)(_p7##x,_n4##y,z,c), I[206] = (T)(img)(_p6##x,_n4##y,z,c), I[207] = (T)(img)(_p5##x,_n4##y,z,c), I[208] = (T)(img)(_p4##x,_n4##y,z,c), I[209] = (T)(img)(_p3##x,_n4##y,z,c), I[210] = (T)(img)(_p2##x,_n4##y,z,c), I[211] = (T)(img)(_p1##x,_n4##y,z,c), I[212] = (T)(img)(x,_n4##y,z,c), I[213] = (T)(img)(_n1##x,_n4##y,z,c), I[214] = (T)(img)(_n2##x,_n4##y,z,c), I[215] = (T)(img)(_n3##x,_n4##y,z,c), I[216] = (T)(img)(_n4##x,_n4##y,z,c), I[217] = (T)(img)(_n5##x,_n4##y,z,c), I[218] = (T)(img)(_n6##x,_n4##y,z,c), I[219] = (T)(img)(_n7##x,_n4##y,z,c), I[220] = (T)(img)(_n8##x,_n4##y,z,c), \ - I[221] = (T)(img)(_p8##x,_n5##y,z,c), I[222] = (T)(img)(_p7##x,_n5##y,z,c), I[223] = (T)(img)(_p6##x,_n5##y,z,c), I[224] = (T)(img)(_p5##x,_n5##y,z,c), I[225] = (T)(img)(_p4##x,_n5##y,z,c), I[226] = (T)(img)(_p3##x,_n5##y,z,c), I[227] = (T)(img)(_p2##x,_n5##y,z,c), I[228] = (T)(img)(_p1##x,_n5##y,z,c), I[229] = (T)(img)(x,_n5##y,z,c), I[230] = (T)(img)(_n1##x,_n5##y,z,c), I[231] = (T)(img)(_n2##x,_n5##y,z,c), I[232] = (T)(img)(_n3##x,_n5##y,z,c), I[233] = (T)(img)(_n4##x,_n5##y,z,c), I[234] = (T)(img)(_n5##x,_n5##y,z,c), I[235] = (T)(img)(_n6##x,_n5##y,z,c), I[236] = (T)(img)(_n7##x,_n5##y,z,c), I[237] = (T)(img)(_n8##x,_n5##y,z,c), \ - I[238] = (T)(img)(_p8##x,_n6##y,z,c), I[239] = (T)(img)(_p7##x,_n6##y,z,c), I[240] = (T)(img)(_p6##x,_n6##y,z,c), I[241] = (T)(img)(_p5##x,_n6##y,z,c), I[242] = (T)(img)(_p4##x,_n6##y,z,c), I[243] = (T)(img)(_p3##x,_n6##y,z,c), I[244] = (T)(img)(_p2##x,_n6##y,z,c), I[245] = (T)(img)(_p1##x,_n6##y,z,c), I[246] = (T)(img)(x,_n6##y,z,c), I[247] = (T)(img)(_n1##x,_n6##y,z,c), I[248] = (T)(img)(_n2##x,_n6##y,z,c), I[249] = (T)(img)(_n3##x,_n6##y,z,c), I[250] = (T)(img)(_n4##x,_n6##y,z,c), I[251] = (T)(img)(_n5##x,_n6##y,z,c), I[252] = (T)(img)(_n6##x,_n6##y,z,c), I[253] = (T)(img)(_n7##x,_n6##y,z,c), I[254] = (T)(img)(_n8##x,_n6##y,z,c), \ - I[255] = (T)(img)(_p8##x,_n7##y,z,c), I[256] = (T)(img)(_p7##x,_n7##y,z,c), I[257] = (T)(img)(_p6##x,_n7##y,z,c), I[258] = (T)(img)(_p5##x,_n7##y,z,c), I[259] = (T)(img)(_p4##x,_n7##y,z,c), I[260] = (T)(img)(_p3##x,_n7##y,z,c), I[261] = (T)(img)(_p2##x,_n7##y,z,c), I[262] = (T)(img)(_p1##x,_n7##y,z,c), I[263] = (T)(img)(x,_n7##y,z,c), I[264] = (T)(img)(_n1##x,_n7##y,z,c), I[265] = (T)(img)(_n2##x,_n7##y,z,c), I[266] = (T)(img)(_n3##x,_n7##y,z,c), I[267] = (T)(img)(_n4##x,_n7##y,z,c), I[268] = (T)(img)(_n5##x,_n7##y,z,c), I[269] = (T)(img)(_n6##x,_n7##y,z,c), I[270] = (T)(img)(_n7##x,_n7##y,z,c), I[271] = (T)(img)(_n8##x,_n7##y,z,c), \ - I[272] = (T)(img)(_p8##x,_n8##y,z,c), I[273] = (T)(img)(_p7##x,_n8##y,z,c), I[274] = (T)(img)(_p6##x,_n8##y,z,c), I[275] = (T)(img)(_p5##x,_n8##y,z,c), I[276] = (T)(img)(_p4##x,_n8##y,z,c), I[277] = (T)(img)(_p3##x,_n8##y,z,c), I[278] = (T)(img)(_p2##x,_n8##y,z,c), I[279] = (T)(img)(_p1##x,_n8##y,z,c), I[280] = (T)(img)(x,_n8##y,z,c), I[281] = (T)(img)(_n1##x,_n8##y,z,c), I[282] = (T)(img)(_n2##x,_n8##y,z,c), I[283] = (T)(img)(_n3##x,_n8##y,z,c), I[284] = (T)(img)(_n4##x,_n8##y,z,c), I[285] = (T)(img)(_n5##x,_n8##y,z,c), I[286] = (T)(img)(_n6##x,_n8##y,z,c), I[287] = (T)(img)(_n7##x,_n8##y,z,c), I[288] = (T)(img)(_n8##x,_n8##y,z,c); - -// Define 18x18 loop macros -//------------------------- -#define cimg_for18(bound,i) for (int i = 0, \ - _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9; \ - _n9##i<(int)(bound) || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i) - -#define cimg_for18X(img,x) cimg_for18((img)._width,x) -#define cimg_for18Y(img,y) cimg_for18((img)._height,y) -#define cimg_for18Z(img,z) cimg_for18((img)._depth,z) -#define cimg_for18C(img,c) cimg_for18((img)._spectrum,c) -#define cimg_for18XY(img,x,y) cimg_for18Y(img,y) cimg_for18X(img,x) -#define cimg_for18XZ(img,x,z) cimg_for18Z(img,z) cimg_for18X(img,x) -#define cimg_for18XC(img,x,c) cimg_for18C(img,c) cimg_for18X(img,x) -#define cimg_for18YZ(img,y,z) cimg_for18Z(img,z) cimg_for18Y(img,y) -#define cimg_for18YC(img,y,c) cimg_for18C(img,c) cimg_for18Y(img,y) -#define cimg_for18ZC(img,z,c) cimg_for18C(img,c) cimg_for18Z(img,z) -#define cimg_for18XYZ(img,x,y,z) cimg_for18Z(img,z) cimg_for18XY(img,x,y) -#define cimg_for18XZC(img,x,z,c) cimg_for18C(img,c) cimg_for18XZ(img,x,z) -#define cimg_for18YZC(img,y,z,c) cimg_for18C(img,c) cimg_for18YZ(img,y,z) -#define cimg_for18XYZC(img,x,y,z,c) cimg_for18C(img,c) cimg_for18XYZ(img,x,y,z) - -#define cimg_for_in18(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9; \ - i<=(int)(i1) && (_n9##i<(int)(bound) || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i) - -#define cimg_for_in18X(img,x0,x1,x) cimg_for_in18((img)._width,x0,x1,x) -#define cimg_for_in18Y(img,y0,y1,y) cimg_for_in18((img)._height,y0,y1,y) -#define cimg_for_in18Z(img,z0,z1,z) cimg_for_in18((img)._depth,z0,z1,z) -#define cimg_for_in18C(img,c0,c1,c) cimg_for_in18((img)._spectrum,c0,c1,c) -#define cimg_for_in18XY(img,x0,y0,x1,y1,x,y) cimg_for_in18Y(img,y0,y1,y) cimg_for_in18X(img,x0,x1,x) -#define cimg_for_in18XZ(img,x0,z0,x1,z1,x,z) cimg_for_in18Z(img,z0,z1,z) cimg_for_in18X(img,x0,x1,x) -#define cimg_for_in18XC(img,x0,c0,x1,c1,x,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18X(img,x0,x1,x) -#define cimg_for_in18YZ(img,y0,z0,y1,z1,y,z) cimg_for_in18Z(img,z0,z1,z) cimg_for_in18Y(img,y0,y1,y) -#define cimg_for_in18YC(img,y0,c0,y1,c1,y,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18Y(img,y0,y1,y) -#define cimg_for_in18ZC(img,z0,c0,z1,c1,z,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18Z(img,z0,z1,z) -#define cimg_for_in18XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in18Z(img,z0,z1,z) cimg_for_in18XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in18XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in18YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in18XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in18C(img,c0,c1,c) cimg_for_in18XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for18x18(img,x,y,z,c,I,T) \ - cimg_for18((img)._height,y) for (int x = 0, \ - _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = (T)(img)(0,_p8##y,z,c)), \ - (I[18] = I[19] = I[20] = I[21] = I[22] = I[23] = I[24] = I[25] = I[26] = (T)(img)(0,_p7##y,z,c)), \ - (I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = (T)(img)(0,_p6##y,z,c)), \ - (I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = (T)(img)(0,_p5##y,z,c)), \ - (I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = I[78] = I[79] = I[80] = (T)(img)(0,_p4##y,z,c)), \ - (I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = (T)(img)(0,_p3##y,z,c)), \ - (I[108] = I[109] = I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = I[116] = (T)(img)(0,_p2##y,z,c)), \ - (I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = (T)(img)(0,_p1##y,z,c)), \ - (I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = I[150] = I[151] = I[152] = (T)(img)(0,y,z,c)), \ - (I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = (T)(img)(0,_n1##y,z,c)), \ - (I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = (T)(img)(0,_n2##y,z,c)), \ - (I[198] = I[199] = I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = (T)(img)(0,_n3##y,z,c)), \ - (I[216] = I[217] = I[218] = I[219] = I[220] = I[221] = I[222] = I[223] = I[224] = (T)(img)(0,_n4##y,z,c)), \ - (I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = I[240] = I[241] = I[242] = (T)(img)(0,_n5##y,z,c)), \ - (I[252] = I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = (T)(img)(0,_n6##y,z,c)), \ - (I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = I[276] = I[277] = I[278] = (T)(img)(0,_n7##y,z,c)), \ - (I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = (T)(img)(0,_n8##y,z,c)), \ - (I[306] = I[307] = I[308] = I[309] = I[310] = I[311] = I[312] = I[313] = I[314] = (T)(img)(0,_n9##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[27] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[117] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[135] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[153] = (T)(img)(_n1##x,y,z,c)), \ - (I[171] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[207] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[225] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[243] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[261] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[279] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[297] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[315] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[28] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[118] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[136] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[154] = (T)(img)(_n2##x,y,z,c)), \ - (I[172] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[208] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[226] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[244] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[262] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[280] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[298] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[316] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[29] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[119] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[137] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[155] = (T)(img)(_n3##x,y,z,c)), \ - (I[173] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[209] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[227] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[245] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[263] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[281] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[299] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[317] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[12] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[30] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[84] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[102] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[120] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[138] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[156] = (T)(img)(_n4##x,y,z,c)), \ - (I[174] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[210] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[228] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[246] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[264] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[282] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[300] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[318] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[13] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[31] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[85] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[103] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[121] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[139] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[157] = (T)(img)(_n5##x,y,z,c)), \ - (I[175] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[211] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[229] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[247] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[265] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[283] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[301] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[319] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[14] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[32] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[50] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[86] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[104] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[122] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[140] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[158] = (T)(img)(_n6##x,y,z,c)), \ - (I[176] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[212] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[230] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[248] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[266] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[284] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[302] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[320] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[15] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[33] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[51] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[87] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[105] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[123] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[141] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[159] = (T)(img)(_n7##x,y,z,c)), \ - (I[177] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[213] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[231] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[249] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[267] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[285] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[303] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[321] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[16] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[34] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[52] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[70] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[88] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[106] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[124] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[142] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[160] = (T)(img)(_n8##x,y,z,c)), \ - (I[178] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[196] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[214] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[232] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[250] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[268] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[286] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[304] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[322] = (T)(img)(_n8##x,_n9##y,z,c)), \ - 9>=((img)._width)?(img).width()-1:9); \ - (_n9##x<(img).width() && ( \ - (I[17] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[35] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[53] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[71] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[89] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[107] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[125] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[143] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[161] = (T)(img)(_n9##x,y,z,c)), \ - (I[179] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[197] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[215] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[233] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[251] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[269] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[287] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[305] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[323] = (T)(img)(_n9##x,_n9##y,z,c)),1)) || \ - _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], \ - I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], \ - I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], \ - _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x) - -#define cimg_for_in18x18(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in18((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = (int)( \ - (I[0] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[18] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[36] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[54] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[72] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[90] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[108] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[126] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[144] = (T)(img)(_p8##x,y,z,c)), \ - (I[162] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[180] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[198] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[216] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[234] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[252] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[270] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[288] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[306] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[1] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[19] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[37] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[55] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[73] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[91] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[109] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[127] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[145] = (T)(img)(_p7##x,y,z,c)), \ - (I[163] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[181] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[199] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[217] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[235] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[253] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[271] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[289] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[307] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[2] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[20] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[38] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[56] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[74] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[92] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[110] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[128] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[146] = (T)(img)(_p6##x,y,z,c)), \ - (I[164] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[182] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[200] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[218] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[236] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[254] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[272] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[290] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[308] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[3] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[21] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[39] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[57] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[75] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[93] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[111] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[129] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[147] = (T)(img)(_p5##x,y,z,c)), \ - (I[165] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[183] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[201] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[219] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[237] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[255] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[273] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[291] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[309] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[4] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[22] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[40] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[58] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[76] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[94] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[112] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[130] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[148] = (T)(img)(_p4##x,y,z,c)), \ - (I[166] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[184] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[202] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[220] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[238] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[256] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[274] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[292] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[310] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[5] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[23] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[41] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[59] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[77] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[95] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[113] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[131] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[149] = (T)(img)(_p3##x,y,z,c)), \ - (I[167] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[185] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[203] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[221] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[239] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[257] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[275] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[293] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[311] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[6] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[24] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[42] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[60] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[78] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[96] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[114] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[132] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[150] = (T)(img)(_p2##x,y,z,c)), \ - (I[168] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[186] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[204] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[222] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[240] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[258] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[276] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[294] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[312] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[7] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[25] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[43] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[61] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[79] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[97] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[115] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[133] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[151] = (T)(img)(_p1##x,y,z,c)), \ - (I[169] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[187] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[205] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[223] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[241] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[259] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[277] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[295] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[313] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[8] = (T)(img)(x,_p8##y,z,c)), \ - (I[26] = (T)(img)(x,_p7##y,z,c)), \ - (I[44] = (T)(img)(x,_p6##y,z,c)), \ - (I[62] = (T)(img)(x,_p5##y,z,c)), \ - (I[80] = (T)(img)(x,_p4##y,z,c)), \ - (I[98] = (T)(img)(x,_p3##y,z,c)), \ - (I[116] = (T)(img)(x,_p2##y,z,c)), \ - (I[134] = (T)(img)(x,_p1##y,z,c)), \ - (I[152] = (T)(img)(x,y,z,c)), \ - (I[170] = (T)(img)(x,_n1##y,z,c)), \ - (I[188] = (T)(img)(x,_n2##y,z,c)), \ - (I[206] = (T)(img)(x,_n3##y,z,c)), \ - (I[224] = (T)(img)(x,_n4##y,z,c)), \ - (I[242] = (T)(img)(x,_n5##y,z,c)), \ - (I[260] = (T)(img)(x,_n6##y,z,c)), \ - (I[278] = (T)(img)(x,_n7##y,z,c)), \ - (I[296] = (T)(img)(x,_n8##y,z,c)), \ - (I[314] = (T)(img)(x,_n9##y,z,c)), \ - (I[9] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[27] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[117] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[135] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[153] = (T)(img)(_n1##x,y,z,c)), \ - (I[171] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[207] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[225] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[243] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[261] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[279] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[297] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[315] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[10] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[28] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[118] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[136] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[154] = (T)(img)(_n2##x,y,z,c)), \ - (I[172] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[208] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[226] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[244] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[262] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[280] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[298] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[316] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[11] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[29] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[119] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[137] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[155] = (T)(img)(_n3##x,y,z,c)), \ - (I[173] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[209] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[227] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[245] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[263] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[281] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[299] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[317] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[12] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[30] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[84] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[102] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[120] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[138] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[156] = (T)(img)(_n4##x,y,z,c)), \ - (I[174] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[210] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[228] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[246] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[264] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[282] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[300] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[318] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[13] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[31] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[85] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[103] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[121] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[139] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[157] = (T)(img)(_n5##x,y,z,c)), \ - (I[175] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[211] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[229] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[247] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[265] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[283] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[301] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[319] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[14] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[32] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[50] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[86] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[104] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[122] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[140] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[158] = (T)(img)(_n6##x,y,z,c)), \ - (I[176] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[212] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[230] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[248] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[266] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[284] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[302] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[320] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[15] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[33] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[51] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[87] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[105] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[123] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[141] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[159] = (T)(img)(_n7##x,y,z,c)), \ - (I[177] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[213] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[231] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[249] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[267] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[285] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[303] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[321] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[16] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[34] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[52] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[70] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[88] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[106] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[124] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[142] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[160] = (T)(img)(_n8##x,y,z,c)), \ - (I[178] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[196] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[214] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[232] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[250] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[268] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[286] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[304] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[322] = (T)(img)(_n8##x,_n9##y,z,c)), \ - x+9>=(img).width()?(img).width()-1:x+9); \ - x<=(int)(x1) && ((_n9##x<(img).width() && ( \ - (I[17] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[35] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[53] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[71] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[89] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[107] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[125] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[143] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[161] = (T)(img)(_n9##x,y,z,c)), \ - (I[179] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[197] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[215] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[233] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[251] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[269] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[287] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[305] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[323] = (T)(img)(_n9##x,_n9##y,z,c)),1)) || \ - _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], \ - I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], \ - I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], \ - _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x) - -#define cimg_get18x18(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p8##x,_p8##y,z,c), I[1] = (T)(img)(_p7##x,_p8##y,z,c), I[2] = (T)(img)(_p6##x,_p8##y,z,c), I[3] = (T)(img)(_p5##x,_p8##y,z,c), I[4] = (T)(img)(_p4##x,_p8##y,z,c), I[5] = (T)(img)(_p3##x,_p8##y,z,c), I[6] = (T)(img)(_p2##x,_p8##y,z,c), I[7] = (T)(img)(_p1##x,_p8##y,z,c), I[8] = (T)(img)(x,_p8##y,z,c), I[9] = (T)(img)(_n1##x,_p8##y,z,c), I[10] = (T)(img)(_n2##x,_p8##y,z,c), I[11] = (T)(img)(_n3##x,_p8##y,z,c), I[12] = (T)(img)(_n4##x,_p8##y,z,c), I[13] = (T)(img)(_n5##x,_p8##y,z,c), I[14] = (T)(img)(_n6##x,_p8##y,z,c), I[15] = (T)(img)(_n7##x,_p8##y,z,c), I[16] = (T)(img)(_n8##x,_p8##y,z,c), I[17] = (T)(img)(_n9##x,_p8##y,z,c), \ - I[18] = (T)(img)(_p8##x,_p7##y,z,c), I[19] = (T)(img)(_p7##x,_p7##y,z,c), I[20] = (T)(img)(_p6##x,_p7##y,z,c), I[21] = (T)(img)(_p5##x,_p7##y,z,c), I[22] = (T)(img)(_p4##x,_p7##y,z,c), I[23] = (T)(img)(_p3##x,_p7##y,z,c), I[24] = (T)(img)(_p2##x,_p7##y,z,c), I[25] = (T)(img)(_p1##x,_p7##y,z,c), I[26] = (T)(img)(x,_p7##y,z,c), I[27] = (T)(img)(_n1##x,_p7##y,z,c), I[28] = (T)(img)(_n2##x,_p7##y,z,c), I[29] = (T)(img)(_n3##x,_p7##y,z,c), I[30] = (T)(img)(_n4##x,_p7##y,z,c), I[31] = (T)(img)(_n5##x,_p7##y,z,c), I[32] = (T)(img)(_n6##x,_p7##y,z,c), I[33] = (T)(img)(_n7##x,_p7##y,z,c), I[34] = (T)(img)(_n8##x,_p7##y,z,c), I[35] = (T)(img)(_n9##x,_p7##y,z,c), \ - I[36] = (T)(img)(_p8##x,_p6##y,z,c), I[37] = (T)(img)(_p7##x,_p6##y,z,c), I[38] = (T)(img)(_p6##x,_p6##y,z,c), I[39] = (T)(img)(_p5##x,_p6##y,z,c), I[40] = (T)(img)(_p4##x,_p6##y,z,c), I[41] = (T)(img)(_p3##x,_p6##y,z,c), I[42] = (T)(img)(_p2##x,_p6##y,z,c), I[43] = (T)(img)(_p1##x,_p6##y,z,c), I[44] = (T)(img)(x,_p6##y,z,c), I[45] = (T)(img)(_n1##x,_p6##y,z,c), I[46] = (T)(img)(_n2##x,_p6##y,z,c), I[47] = (T)(img)(_n3##x,_p6##y,z,c), I[48] = (T)(img)(_n4##x,_p6##y,z,c), I[49] = (T)(img)(_n5##x,_p6##y,z,c), I[50] = (T)(img)(_n6##x,_p6##y,z,c), I[51] = (T)(img)(_n7##x,_p6##y,z,c), I[52] = (T)(img)(_n8##x,_p6##y,z,c), I[53] = (T)(img)(_n9##x,_p6##y,z,c), \ - I[54] = (T)(img)(_p8##x,_p5##y,z,c), I[55] = (T)(img)(_p7##x,_p5##y,z,c), I[56] = (T)(img)(_p6##x,_p5##y,z,c), I[57] = (T)(img)(_p5##x,_p5##y,z,c), I[58] = (T)(img)(_p4##x,_p5##y,z,c), I[59] = (T)(img)(_p3##x,_p5##y,z,c), I[60] = (T)(img)(_p2##x,_p5##y,z,c), I[61] = (T)(img)(_p1##x,_p5##y,z,c), I[62] = (T)(img)(x,_p5##y,z,c), I[63] = (T)(img)(_n1##x,_p5##y,z,c), I[64] = (T)(img)(_n2##x,_p5##y,z,c), I[65] = (T)(img)(_n3##x,_p5##y,z,c), I[66] = (T)(img)(_n4##x,_p5##y,z,c), I[67] = (T)(img)(_n5##x,_p5##y,z,c), I[68] = (T)(img)(_n6##x,_p5##y,z,c), I[69] = (T)(img)(_n7##x,_p5##y,z,c), I[70] = (T)(img)(_n8##x,_p5##y,z,c), I[71] = (T)(img)(_n9##x,_p5##y,z,c), \ - I[72] = (T)(img)(_p8##x,_p4##y,z,c), I[73] = (T)(img)(_p7##x,_p4##y,z,c), I[74] = (T)(img)(_p6##x,_p4##y,z,c), I[75] = (T)(img)(_p5##x,_p4##y,z,c), I[76] = (T)(img)(_p4##x,_p4##y,z,c), I[77] = (T)(img)(_p3##x,_p4##y,z,c), I[78] = (T)(img)(_p2##x,_p4##y,z,c), I[79] = (T)(img)(_p1##x,_p4##y,z,c), I[80] = (T)(img)(x,_p4##y,z,c), I[81] = (T)(img)(_n1##x,_p4##y,z,c), I[82] = (T)(img)(_n2##x,_p4##y,z,c), I[83] = (T)(img)(_n3##x,_p4##y,z,c), I[84] = (T)(img)(_n4##x,_p4##y,z,c), I[85] = (T)(img)(_n5##x,_p4##y,z,c), I[86] = (T)(img)(_n6##x,_p4##y,z,c), I[87] = (T)(img)(_n7##x,_p4##y,z,c), I[88] = (T)(img)(_n8##x,_p4##y,z,c), I[89] = (T)(img)(_n9##x,_p4##y,z,c), \ - I[90] = (T)(img)(_p8##x,_p3##y,z,c), I[91] = (T)(img)(_p7##x,_p3##y,z,c), I[92] = (T)(img)(_p6##x,_p3##y,z,c), I[93] = (T)(img)(_p5##x,_p3##y,z,c), I[94] = (T)(img)(_p4##x,_p3##y,z,c), I[95] = (T)(img)(_p3##x,_p3##y,z,c), I[96] = (T)(img)(_p2##x,_p3##y,z,c), I[97] = (T)(img)(_p1##x,_p3##y,z,c), I[98] = (T)(img)(x,_p3##y,z,c), I[99] = (T)(img)(_n1##x,_p3##y,z,c), I[100] = (T)(img)(_n2##x,_p3##y,z,c), I[101] = (T)(img)(_n3##x,_p3##y,z,c), I[102] = (T)(img)(_n4##x,_p3##y,z,c), I[103] = (T)(img)(_n5##x,_p3##y,z,c), I[104] = (T)(img)(_n6##x,_p3##y,z,c), I[105] = (T)(img)(_n7##x,_p3##y,z,c), I[106] = (T)(img)(_n8##x,_p3##y,z,c), I[107] = (T)(img)(_n9##x,_p3##y,z,c), \ - I[108] = (T)(img)(_p8##x,_p2##y,z,c), I[109] = (T)(img)(_p7##x,_p2##y,z,c), I[110] = (T)(img)(_p6##x,_p2##y,z,c), I[111] = (T)(img)(_p5##x,_p2##y,z,c), I[112] = (T)(img)(_p4##x,_p2##y,z,c), I[113] = (T)(img)(_p3##x,_p2##y,z,c), I[114] = (T)(img)(_p2##x,_p2##y,z,c), I[115] = (T)(img)(_p1##x,_p2##y,z,c), I[116] = (T)(img)(x,_p2##y,z,c), I[117] = (T)(img)(_n1##x,_p2##y,z,c), I[118] = (T)(img)(_n2##x,_p2##y,z,c), I[119] = (T)(img)(_n3##x,_p2##y,z,c), I[120] = (T)(img)(_n4##x,_p2##y,z,c), I[121] = (T)(img)(_n5##x,_p2##y,z,c), I[122] = (T)(img)(_n6##x,_p2##y,z,c), I[123] = (T)(img)(_n7##x,_p2##y,z,c), I[124] = (T)(img)(_n8##x,_p2##y,z,c), I[125] = (T)(img)(_n9##x,_p2##y,z,c), \ - I[126] = (T)(img)(_p8##x,_p1##y,z,c), I[127] = (T)(img)(_p7##x,_p1##y,z,c), I[128] = (T)(img)(_p6##x,_p1##y,z,c), I[129] = (T)(img)(_p5##x,_p1##y,z,c), I[130] = (T)(img)(_p4##x,_p1##y,z,c), I[131] = (T)(img)(_p3##x,_p1##y,z,c), I[132] = (T)(img)(_p2##x,_p1##y,z,c), I[133] = (T)(img)(_p1##x,_p1##y,z,c), I[134] = (T)(img)(x,_p1##y,z,c), I[135] = (T)(img)(_n1##x,_p1##y,z,c), I[136] = (T)(img)(_n2##x,_p1##y,z,c), I[137] = (T)(img)(_n3##x,_p1##y,z,c), I[138] = (T)(img)(_n4##x,_p1##y,z,c), I[139] = (T)(img)(_n5##x,_p1##y,z,c), I[140] = (T)(img)(_n6##x,_p1##y,z,c), I[141] = (T)(img)(_n7##x,_p1##y,z,c), I[142] = (T)(img)(_n8##x,_p1##y,z,c), I[143] = (T)(img)(_n9##x,_p1##y,z,c), \ - I[144] = (T)(img)(_p8##x,y,z,c), I[145] = (T)(img)(_p7##x,y,z,c), I[146] = (T)(img)(_p6##x,y,z,c), I[147] = (T)(img)(_p5##x,y,z,c), I[148] = (T)(img)(_p4##x,y,z,c), I[149] = (T)(img)(_p3##x,y,z,c), I[150] = (T)(img)(_p2##x,y,z,c), I[151] = (T)(img)(_p1##x,y,z,c), I[152] = (T)(img)(x,y,z,c), I[153] = (T)(img)(_n1##x,y,z,c), I[154] = (T)(img)(_n2##x,y,z,c), I[155] = (T)(img)(_n3##x,y,z,c), I[156] = (T)(img)(_n4##x,y,z,c), I[157] = (T)(img)(_n5##x,y,z,c), I[158] = (T)(img)(_n6##x,y,z,c), I[159] = (T)(img)(_n7##x,y,z,c), I[160] = (T)(img)(_n8##x,y,z,c), I[161] = (T)(img)(_n9##x,y,z,c), \ - I[162] = (T)(img)(_p8##x,_n1##y,z,c), I[163] = (T)(img)(_p7##x,_n1##y,z,c), I[164] = (T)(img)(_p6##x,_n1##y,z,c), I[165] = (T)(img)(_p5##x,_n1##y,z,c), I[166] = (T)(img)(_p4##x,_n1##y,z,c), I[167] = (T)(img)(_p3##x,_n1##y,z,c), I[168] = (T)(img)(_p2##x,_n1##y,z,c), I[169] = (T)(img)(_p1##x,_n1##y,z,c), I[170] = (T)(img)(x,_n1##y,z,c), I[171] = (T)(img)(_n1##x,_n1##y,z,c), I[172] = (T)(img)(_n2##x,_n1##y,z,c), I[173] = (T)(img)(_n3##x,_n1##y,z,c), I[174] = (T)(img)(_n4##x,_n1##y,z,c), I[175] = (T)(img)(_n5##x,_n1##y,z,c), I[176] = (T)(img)(_n6##x,_n1##y,z,c), I[177] = (T)(img)(_n7##x,_n1##y,z,c), I[178] = (T)(img)(_n8##x,_n1##y,z,c), I[179] = (T)(img)(_n9##x,_n1##y,z,c), \ - I[180] = (T)(img)(_p8##x,_n2##y,z,c), I[181] = (T)(img)(_p7##x,_n2##y,z,c), I[182] = (T)(img)(_p6##x,_n2##y,z,c), I[183] = (T)(img)(_p5##x,_n2##y,z,c), I[184] = (T)(img)(_p4##x,_n2##y,z,c), I[185] = (T)(img)(_p3##x,_n2##y,z,c), I[186] = (T)(img)(_p2##x,_n2##y,z,c), I[187] = (T)(img)(_p1##x,_n2##y,z,c), I[188] = (T)(img)(x,_n2##y,z,c), I[189] = (T)(img)(_n1##x,_n2##y,z,c), I[190] = (T)(img)(_n2##x,_n2##y,z,c), I[191] = (T)(img)(_n3##x,_n2##y,z,c), I[192] = (T)(img)(_n4##x,_n2##y,z,c), I[193] = (T)(img)(_n5##x,_n2##y,z,c), I[194] = (T)(img)(_n6##x,_n2##y,z,c), I[195] = (T)(img)(_n7##x,_n2##y,z,c), I[196] = (T)(img)(_n8##x,_n2##y,z,c), I[197] = (T)(img)(_n9##x,_n2##y,z,c), \ - I[198] = (T)(img)(_p8##x,_n3##y,z,c), I[199] = (T)(img)(_p7##x,_n3##y,z,c), I[200] = (T)(img)(_p6##x,_n3##y,z,c), I[201] = (T)(img)(_p5##x,_n3##y,z,c), I[202] = (T)(img)(_p4##x,_n3##y,z,c), I[203] = (T)(img)(_p3##x,_n3##y,z,c), I[204] = (T)(img)(_p2##x,_n3##y,z,c), I[205] = (T)(img)(_p1##x,_n3##y,z,c), I[206] = (T)(img)(x,_n3##y,z,c), I[207] = (T)(img)(_n1##x,_n3##y,z,c), I[208] = (T)(img)(_n2##x,_n3##y,z,c), I[209] = (T)(img)(_n3##x,_n3##y,z,c), I[210] = (T)(img)(_n4##x,_n3##y,z,c), I[211] = (T)(img)(_n5##x,_n3##y,z,c), I[212] = (T)(img)(_n6##x,_n3##y,z,c), I[213] = (T)(img)(_n7##x,_n3##y,z,c), I[214] = (T)(img)(_n8##x,_n3##y,z,c), I[215] = (T)(img)(_n9##x,_n3##y,z,c), \ - I[216] = (T)(img)(_p8##x,_n4##y,z,c), I[217] = (T)(img)(_p7##x,_n4##y,z,c), I[218] = (T)(img)(_p6##x,_n4##y,z,c), I[219] = (T)(img)(_p5##x,_n4##y,z,c), I[220] = (T)(img)(_p4##x,_n4##y,z,c), I[221] = (T)(img)(_p3##x,_n4##y,z,c), I[222] = (T)(img)(_p2##x,_n4##y,z,c), I[223] = (T)(img)(_p1##x,_n4##y,z,c), I[224] = (T)(img)(x,_n4##y,z,c), I[225] = (T)(img)(_n1##x,_n4##y,z,c), I[226] = (T)(img)(_n2##x,_n4##y,z,c), I[227] = (T)(img)(_n3##x,_n4##y,z,c), I[228] = (T)(img)(_n4##x,_n4##y,z,c), I[229] = (T)(img)(_n5##x,_n4##y,z,c), I[230] = (T)(img)(_n6##x,_n4##y,z,c), I[231] = (T)(img)(_n7##x,_n4##y,z,c), I[232] = (T)(img)(_n8##x,_n4##y,z,c), I[233] = (T)(img)(_n9##x,_n4##y,z,c), \ - I[234] = (T)(img)(_p8##x,_n5##y,z,c), I[235] = (T)(img)(_p7##x,_n5##y,z,c), I[236] = (T)(img)(_p6##x,_n5##y,z,c), I[237] = (T)(img)(_p5##x,_n5##y,z,c), I[238] = (T)(img)(_p4##x,_n5##y,z,c), I[239] = (T)(img)(_p3##x,_n5##y,z,c), I[240] = (T)(img)(_p2##x,_n5##y,z,c), I[241] = (T)(img)(_p1##x,_n5##y,z,c), I[242] = (T)(img)(x,_n5##y,z,c), I[243] = (T)(img)(_n1##x,_n5##y,z,c), I[244] = (T)(img)(_n2##x,_n5##y,z,c), I[245] = (T)(img)(_n3##x,_n5##y,z,c), I[246] = (T)(img)(_n4##x,_n5##y,z,c), I[247] = (T)(img)(_n5##x,_n5##y,z,c), I[248] = (T)(img)(_n6##x,_n5##y,z,c), I[249] = (T)(img)(_n7##x,_n5##y,z,c), I[250] = (T)(img)(_n8##x,_n5##y,z,c), I[251] = (T)(img)(_n9##x,_n5##y,z,c), \ - I[252] = (T)(img)(_p8##x,_n6##y,z,c), I[253] = (T)(img)(_p7##x,_n6##y,z,c), I[254] = (T)(img)(_p6##x,_n6##y,z,c), I[255] = (T)(img)(_p5##x,_n6##y,z,c), I[256] = (T)(img)(_p4##x,_n6##y,z,c), I[257] = (T)(img)(_p3##x,_n6##y,z,c), I[258] = (T)(img)(_p2##x,_n6##y,z,c), I[259] = (T)(img)(_p1##x,_n6##y,z,c), I[260] = (T)(img)(x,_n6##y,z,c), I[261] = (T)(img)(_n1##x,_n6##y,z,c), I[262] = (T)(img)(_n2##x,_n6##y,z,c), I[263] = (T)(img)(_n3##x,_n6##y,z,c), I[264] = (T)(img)(_n4##x,_n6##y,z,c), I[265] = (T)(img)(_n5##x,_n6##y,z,c), I[266] = (T)(img)(_n6##x,_n6##y,z,c), I[267] = (T)(img)(_n7##x,_n6##y,z,c), I[268] = (T)(img)(_n8##x,_n6##y,z,c), I[269] = (T)(img)(_n9##x,_n6##y,z,c), \ - I[270] = (T)(img)(_p8##x,_n7##y,z,c), I[271] = (T)(img)(_p7##x,_n7##y,z,c), I[272] = (T)(img)(_p6##x,_n7##y,z,c), I[273] = (T)(img)(_p5##x,_n7##y,z,c), I[274] = (T)(img)(_p4##x,_n7##y,z,c), I[275] = (T)(img)(_p3##x,_n7##y,z,c), I[276] = (T)(img)(_p2##x,_n7##y,z,c), I[277] = (T)(img)(_p1##x,_n7##y,z,c), I[278] = (T)(img)(x,_n7##y,z,c), I[279] = (T)(img)(_n1##x,_n7##y,z,c), I[280] = (T)(img)(_n2##x,_n7##y,z,c), I[281] = (T)(img)(_n3##x,_n7##y,z,c), I[282] = (T)(img)(_n4##x,_n7##y,z,c), I[283] = (T)(img)(_n5##x,_n7##y,z,c), I[284] = (T)(img)(_n6##x,_n7##y,z,c), I[285] = (T)(img)(_n7##x,_n7##y,z,c), I[286] = (T)(img)(_n8##x,_n7##y,z,c), I[287] = (T)(img)(_n9##x,_n7##y,z,c), \ - I[288] = (T)(img)(_p8##x,_n8##y,z,c), I[289] = (T)(img)(_p7##x,_n8##y,z,c), I[290] = (T)(img)(_p6##x,_n8##y,z,c), I[291] = (T)(img)(_p5##x,_n8##y,z,c), I[292] = (T)(img)(_p4##x,_n8##y,z,c), I[293] = (T)(img)(_p3##x,_n8##y,z,c), I[294] = (T)(img)(_p2##x,_n8##y,z,c), I[295] = (T)(img)(_p1##x,_n8##y,z,c), I[296] = (T)(img)(x,_n8##y,z,c), I[297] = (T)(img)(_n1##x,_n8##y,z,c), I[298] = (T)(img)(_n2##x,_n8##y,z,c), I[299] = (T)(img)(_n3##x,_n8##y,z,c), I[300] = (T)(img)(_n4##x,_n8##y,z,c), I[301] = (T)(img)(_n5##x,_n8##y,z,c), I[302] = (T)(img)(_n6##x,_n8##y,z,c), I[303] = (T)(img)(_n7##x,_n8##y,z,c), I[304] = (T)(img)(_n8##x,_n8##y,z,c), I[305] = (T)(img)(_n9##x,_n8##y,z,c), \ - I[306] = (T)(img)(_p8##x,_n9##y,z,c), I[307] = (T)(img)(_p7##x,_n9##y,z,c), I[308] = (T)(img)(_p6##x,_n9##y,z,c), I[309] = (T)(img)(_p5##x,_n9##y,z,c), I[310] = (T)(img)(_p4##x,_n9##y,z,c), I[311] = (T)(img)(_p3##x,_n9##y,z,c), I[312] = (T)(img)(_p2##x,_n9##y,z,c), I[313] = (T)(img)(_p1##x,_n9##y,z,c), I[314] = (T)(img)(x,_n9##y,z,c), I[315] = (T)(img)(_n1##x,_n9##y,z,c), I[316] = (T)(img)(_n2##x,_n9##y,z,c), I[317] = (T)(img)(_n3##x,_n9##y,z,c), I[318] = (T)(img)(_n4##x,_n9##y,z,c), I[319] = (T)(img)(_n5##x,_n9##y,z,c), I[320] = (T)(img)(_n6##x,_n9##y,z,c), I[321] = (T)(img)(_n7##x,_n9##y,z,c), I[322] = (T)(img)(_n8##x,_n9##y,z,c), I[323] = (T)(img)(_n9##x,_n9##y,z,c); - -// Define 19x19 loop macros -//------------------------- -#define cimg_for19(bound,i) for (int i = 0, \ - _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9; \ - _n9##i<(int)(bound) || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i) - -#define cimg_for19X(img,x) cimg_for19((img)._width,x) -#define cimg_for19Y(img,y) cimg_for19((img)._height,y) -#define cimg_for19Z(img,z) cimg_for19((img)._depth,z) -#define cimg_for19C(img,c) cimg_for19((img)._spectrum,c) -#define cimg_for19XY(img,x,y) cimg_for19Y(img,y) cimg_for19X(img,x) -#define cimg_for19XZ(img,x,z) cimg_for19Z(img,z) cimg_for19X(img,x) -#define cimg_for19XC(img,x,c) cimg_for19C(img,c) cimg_for19X(img,x) -#define cimg_for19YZ(img,y,z) cimg_for19Z(img,z) cimg_for19Y(img,y) -#define cimg_for19YC(img,y,c) cimg_for19C(img,c) cimg_for19Y(img,y) -#define cimg_for19ZC(img,z,c) cimg_for19C(img,c) cimg_for19Z(img,z) -#define cimg_for19XYZ(img,x,y,z) cimg_for19Z(img,z) cimg_for19XY(img,x,y) -#define cimg_for19XZC(img,x,z,c) cimg_for19C(img,c) cimg_for19XZ(img,x,z) -#define cimg_for19YZC(img,y,z,c) cimg_for19C(img,c) cimg_for19YZ(img,y,z) -#define cimg_for19XYZC(img,x,y,z,c) cimg_for19C(img,c) cimg_for19XYZ(img,x,y,z) - -#define cimg_for_in19(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9; \ - i<=(int)(i1) && (_n9##i<(int)(bound) || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i) - -#define cimg_for_in19X(img,x0,x1,x) cimg_for_in19((img)._width,x0,x1,x) -#define cimg_for_in19Y(img,y0,y1,y) cimg_for_in19((img)._height,y0,y1,y) -#define cimg_for_in19Z(img,z0,z1,z) cimg_for_in19((img)._depth,z0,z1,z) -#define cimg_for_in19C(img,c0,c1,c) cimg_for_in19((img)._spectrum,c0,c1,c) -#define cimg_for_in19XY(img,x0,y0,x1,y1,x,y) cimg_for_in19Y(img,y0,y1,y) cimg_for_in19X(img,x0,x1,x) -#define cimg_for_in19XZ(img,x0,z0,x1,z1,x,z) cimg_for_in19Z(img,z0,z1,z) cimg_for_in19X(img,x0,x1,x) -#define cimg_for_in19XC(img,x0,c0,x1,c1,x,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19X(img,x0,x1,x) -#define cimg_for_in19YZ(img,y0,z0,y1,z1,y,z) cimg_for_in19Z(img,z0,z1,z) cimg_for_in19Y(img,y0,y1,y) -#define cimg_for_in19YC(img,y0,c0,y1,c1,y,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19Y(img,y0,y1,y) -#define cimg_for_in19ZC(img,z0,c0,z1,c1,z,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19Z(img,z0,z1,z) -#define cimg_for_in19XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in19Z(img,z0,z1,z) cimg_for_in19XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in19XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in19YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in19XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in19C(img,c0,c1,c) cimg_for_in19XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for19x19(img,x,y,z,c,I,T) \ - cimg_for19((img)._height,y) for (int x = 0, \ - _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = (T)(img)(0,_p9##y,z,c)), \ - (I[19] = I[20] = I[21] = I[22] = I[23] = I[24] = I[25] = I[26] = I[27] = I[28] = (T)(img)(0,_p8##y,z,c)), \ - (I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = I[45] = I[46] = I[47] = (T)(img)(0,_p7##y,z,c)), \ - (I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = (T)(img)(0,_p6##y,z,c)), \ - (I[76] = I[77] = I[78] = I[79] = I[80] = I[81] = I[82] = I[83] = I[84] = I[85] = (T)(img)(0,_p5##y,z,c)), \ - (I[95] = I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = (T)(img)(0,_p4##y,z,c)), \ - (I[114] = I[115] = I[116] = I[117] = I[118] = I[119] = I[120] = I[121] = I[122] = I[123] = (T)(img)(0,_p3##y,z,c)), \ - (I[133] = I[134] = I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = (T)(img)(0,_p2##y,z,c)), \ - (I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = (T)(img)(0,_p1##y,z,c)), \ - (I[171] = I[172] = I[173] = I[174] = I[175] = I[176] = I[177] = I[178] = I[179] = I[180] = (T)(img)(0,y,z,c)), \ - (I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = (T)(img)(0,_n1##y,z,c)), \ - (I[209] = I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = I[218] = (T)(img)(0,_n2##y,z,c)), \ - (I[228] = I[229] = I[230] = I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = (T)(img)(0,_n3##y,z,c)), \ - (I[247] = I[248] = I[249] = I[250] = I[251] = I[252] = I[253] = I[254] = I[255] = I[256] = (T)(img)(0,_n4##y,z,c)), \ - (I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = (T)(img)(0,_n5##y,z,c)), \ - (I[285] = I[286] = I[287] = I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = (T)(img)(0,_n6##y,z,c)), \ - (I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = I[310] = I[311] = I[312] = I[313] = (T)(img)(0,_n7##y,z,c)), \ - (I[323] = I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = (T)(img)(0,_n8##y,z,c)), \ - (I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = I[348] = I[349] = I[350] = I[351] = (T)(img)(0,_n9##y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[29] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[48] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[67] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[86] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[124] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[162] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[181] = (T)(img)(_n1##x,y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[219] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[257] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[295] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[314] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[333] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[352] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[30] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[49] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[68] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[87] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[125] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[163] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[182] = (T)(img)(_n2##x,y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[220] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[258] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[296] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[315] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[334] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[353] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[12] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[31] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[50] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[69] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[88] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[126] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[164] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[183] = (T)(img)(_n3##x,y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[221] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[259] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[297] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[316] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[335] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[354] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[13] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[32] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[51] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[70] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[89] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[127] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[165] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[184] = (T)(img)(_n4##x,y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[222] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[260] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[298] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[317] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[336] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[355] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[14] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[33] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[52] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[71] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[90] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[128] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[166] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[185] = (T)(img)(_n5##x,y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[223] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[261] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[299] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[318] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[337] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[356] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[15] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[34] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[53] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[72] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[91] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[129] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[167] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[186] = (T)(img)(_n6##x,y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[224] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[262] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[300] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[319] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[338] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[357] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[16] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[35] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[54] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[73] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[92] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[130] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[168] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[187] = (T)(img)(_n7##x,y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[225] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[263] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[301] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[320] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[339] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[358] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[17] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[36] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[55] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[74] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[93] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[112] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[131] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[169] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[188] = (T)(img)(_n8##x,y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[226] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[264] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[302] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[321] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[340] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[359] = (T)(img)(_n8##x,_n9##y,z,c)), \ - 9>=((img)._width)?(img).width()-1:9); \ - (_n9##x<(img).width() && ( \ - (I[18] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[37] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[56] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[75] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[94] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[113] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[132] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[170] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[189] = (T)(img)(_n9##x,y,z,c)), \ - (I[208] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[227] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[265] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[303] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[322] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[341] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[360] = (T)(img)(_n9##x,_n9##y,z,c)),1)) || \ - _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], \ - I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], \ - I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], \ - I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], \ - I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], \ - I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], \ - I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], \ - I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], \ - I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], \ - I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], \ - I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], \ - I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], \ - I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], \ - I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], \ - I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], \ - I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], \ - I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], \ - I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], \ - I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], \ - _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x) - -#define cimg_for_in19x19(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in19((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = (int)( \ - (I[0] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[19] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[38] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[57] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[76] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[95] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[114] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[133] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[152] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[171] = (T)(img)(_p9##x,y,z,c)), \ - (I[190] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[209] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[228] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[247] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[266] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[285] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[304] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[323] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[342] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[1] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[20] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[39] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[58] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[77] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[96] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[115] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[134] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[153] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[172] = (T)(img)(_p8##x,y,z,c)), \ - (I[191] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[210] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[229] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[248] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[267] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[286] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[305] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[324] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[343] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[2] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[21] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[40] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[59] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[78] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[97] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[116] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[135] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[154] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[173] = (T)(img)(_p7##x,y,z,c)), \ - (I[192] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[211] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[230] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[249] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[268] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[287] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[306] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[325] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[344] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[3] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[22] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[41] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[60] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[79] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[98] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[117] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[136] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[155] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[174] = (T)(img)(_p6##x,y,z,c)), \ - (I[193] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[212] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[231] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[250] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[269] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[288] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[307] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[326] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[345] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[4] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[23] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[42] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[61] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[80] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[99] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[118] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[137] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[156] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[175] = (T)(img)(_p5##x,y,z,c)), \ - (I[194] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[213] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[232] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[251] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[270] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[289] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[308] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[327] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[346] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[5] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[24] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[43] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[62] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[81] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[100] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[119] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[138] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[157] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[176] = (T)(img)(_p4##x,y,z,c)), \ - (I[195] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[214] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[233] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[252] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[271] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[290] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[309] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[328] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[347] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[6] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[25] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[44] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[63] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[82] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[101] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[120] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[139] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[158] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[177] = (T)(img)(_p3##x,y,z,c)), \ - (I[196] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[215] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[234] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[253] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[272] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[291] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[310] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[329] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[348] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[7] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[26] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[45] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[64] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[83] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[102] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[121] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[140] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[159] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[178] = (T)(img)(_p2##x,y,z,c)), \ - (I[197] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[216] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[235] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[254] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[273] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[292] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[311] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[330] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[349] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[8] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[27] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[46] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[65] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[84] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[103] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[122] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[141] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[160] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[179] = (T)(img)(_p1##x,y,z,c)), \ - (I[198] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[217] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[236] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[255] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[274] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[293] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[312] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[331] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[350] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[9] = (T)(img)(x,_p9##y,z,c)), \ - (I[28] = (T)(img)(x,_p8##y,z,c)), \ - (I[47] = (T)(img)(x,_p7##y,z,c)), \ - (I[66] = (T)(img)(x,_p6##y,z,c)), \ - (I[85] = (T)(img)(x,_p5##y,z,c)), \ - (I[104] = (T)(img)(x,_p4##y,z,c)), \ - (I[123] = (T)(img)(x,_p3##y,z,c)), \ - (I[142] = (T)(img)(x,_p2##y,z,c)), \ - (I[161] = (T)(img)(x,_p1##y,z,c)), \ - (I[180] = (T)(img)(x,y,z,c)), \ - (I[199] = (T)(img)(x,_n1##y,z,c)), \ - (I[218] = (T)(img)(x,_n2##y,z,c)), \ - (I[237] = (T)(img)(x,_n3##y,z,c)), \ - (I[256] = (T)(img)(x,_n4##y,z,c)), \ - (I[275] = (T)(img)(x,_n5##y,z,c)), \ - (I[294] = (T)(img)(x,_n6##y,z,c)), \ - (I[313] = (T)(img)(x,_n7##y,z,c)), \ - (I[332] = (T)(img)(x,_n8##y,z,c)), \ - (I[351] = (T)(img)(x,_n9##y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[29] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[48] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[67] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[86] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[124] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[162] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[181] = (T)(img)(_n1##x,y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[219] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[257] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[295] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[314] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[333] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[352] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[30] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[49] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[68] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[87] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[125] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[163] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[182] = (T)(img)(_n2##x,y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[220] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[258] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[296] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[315] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[334] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[353] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[12] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[31] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[50] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[69] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[88] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[126] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[164] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[183] = (T)(img)(_n3##x,y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[221] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[259] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[297] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[316] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[335] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[354] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[13] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[32] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[51] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[70] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[89] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[127] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[165] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[184] = (T)(img)(_n4##x,y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[222] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[260] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[298] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[317] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[336] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[355] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[14] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[33] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[52] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[71] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[90] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[128] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[166] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[185] = (T)(img)(_n5##x,y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[223] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[261] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[299] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[318] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[337] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[356] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[15] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[34] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[53] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[72] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[91] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[129] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[167] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[186] = (T)(img)(_n6##x,y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[224] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[262] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[300] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[319] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[338] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[357] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[16] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[35] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[54] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[73] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[92] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[130] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[168] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[187] = (T)(img)(_n7##x,y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[225] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[263] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[301] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[320] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[339] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[358] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[17] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[36] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[55] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[74] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[93] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[112] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[131] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[169] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[188] = (T)(img)(_n8##x,y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[226] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[264] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[302] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[321] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[340] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[359] = (T)(img)(_n8##x,_n9##y,z,c)), \ - x+9>=(img).width()?(img).width()-1:x+9); \ - x<=(int)(x1) && ((_n9##x<(img).width() && ( \ - (I[18] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[37] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[56] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[75] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[94] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[113] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[132] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[170] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[189] = (T)(img)(_n9##x,y,z,c)), \ - (I[208] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[227] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[265] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[303] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[322] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[341] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[360] = (T)(img)(_n9##x,_n9##y,z,c)),1)) || \ - _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], \ - I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], \ - I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], \ - I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], \ - I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], \ - I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], \ - I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], \ - I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], \ - I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], \ - I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], \ - I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], \ - I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], \ - I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], \ - I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], \ - I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], \ - I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], \ - I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], \ - I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], \ - I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], \ - _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x) - -#define cimg_get19x19(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p9##x,_p9##y,z,c), I[1] = (T)(img)(_p8##x,_p9##y,z,c), I[2] = (T)(img)(_p7##x,_p9##y,z,c), I[3] = (T)(img)(_p6##x,_p9##y,z,c), I[4] = (T)(img)(_p5##x,_p9##y,z,c), I[5] = (T)(img)(_p4##x,_p9##y,z,c), I[6] = (T)(img)(_p3##x,_p9##y,z,c), I[7] = (T)(img)(_p2##x,_p9##y,z,c), I[8] = (T)(img)(_p1##x,_p9##y,z,c), I[9] = (T)(img)(x,_p9##y,z,c), I[10] = (T)(img)(_n1##x,_p9##y,z,c), I[11] = (T)(img)(_n2##x,_p9##y,z,c), I[12] = (T)(img)(_n3##x,_p9##y,z,c), I[13] = (T)(img)(_n4##x,_p9##y,z,c), I[14] = (T)(img)(_n5##x,_p9##y,z,c), I[15] = (T)(img)(_n6##x,_p9##y,z,c), I[16] = (T)(img)(_n7##x,_p9##y,z,c), I[17] = (T)(img)(_n8##x,_p9##y,z,c), I[18] = (T)(img)(_n9##x,_p9##y,z,c), \ - I[19] = (T)(img)(_p9##x,_p8##y,z,c), I[20] = (T)(img)(_p8##x,_p8##y,z,c), I[21] = (T)(img)(_p7##x,_p8##y,z,c), I[22] = (T)(img)(_p6##x,_p8##y,z,c), I[23] = (T)(img)(_p5##x,_p8##y,z,c), I[24] = (T)(img)(_p4##x,_p8##y,z,c), I[25] = (T)(img)(_p3##x,_p8##y,z,c), I[26] = (T)(img)(_p2##x,_p8##y,z,c), I[27] = (T)(img)(_p1##x,_p8##y,z,c), I[28] = (T)(img)(x,_p8##y,z,c), I[29] = (T)(img)(_n1##x,_p8##y,z,c), I[30] = (T)(img)(_n2##x,_p8##y,z,c), I[31] = (T)(img)(_n3##x,_p8##y,z,c), I[32] = (T)(img)(_n4##x,_p8##y,z,c), I[33] = (T)(img)(_n5##x,_p8##y,z,c), I[34] = (T)(img)(_n6##x,_p8##y,z,c), I[35] = (T)(img)(_n7##x,_p8##y,z,c), I[36] = (T)(img)(_n8##x,_p8##y,z,c), I[37] = (T)(img)(_n9##x,_p8##y,z,c), \ - I[38] = (T)(img)(_p9##x,_p7##y,z,c), I[39] = (T)(img)(_p8##x,_p7##y,z,c), I[40] = (T)(img)(_p7##x,_p7##y,z,c), I[41] = (T)(img)(_p6##x,_p7##y,z,c), I[42] = (T)(img)(_p5##x,_p7##y,z,c), I[43] = (T)(img)(_p4##x,_p7##y,z,c), I[44] = (T)(img)(_p3##x,_p7##y,z,c), I[45] = (T)(img)(_p2##x,_p7##y,z,c), I[46] = (T)(img)(_p1##x,_p7##y,z,c), I[47] = (T)(img)(x,_p7##y,z,c), I[48] = (T)(img)(_n1##x,_p7##y,z,c), I[49] = (T)(img)(_n2##x,_p7##y,z,c), I[50] = (T)(img)(_n3##x,_p7##y,z,c), I[51] = (T)(img)(_n4##x,_p7##y,z,c), I[52] = (T)(img)(_n5##x,_p7##y,z,c), I[53] = (T)(img)(_n6##x,_p7##y,z,c), I[54] = (T)(img)(_n7##x,_p7##y,z,c), I[55] = (T)(img)(_n8##x,_p7##y,z,c), I[56] = (T)(img)(_n9##x,_p7##y,z,c), \ - I[57] = (T)(img)(_p9##x,_p6##y,z,c), I[58] = (T)(img)(_p8##x,_p6##y,z,c), I[59] = (T)(img)(_p7##x,_p6##y,z,c), I[60] = (T)(img)(_p6##x,_p6##y,z,c), I[61] = (T)(img)(_p5##x,_p6##y,z,c), I[62] = (T)(img)(_p4##x,_p6##y,z,c), I[63] = (T)(img)(_p3##x,_p6##y,z,c), I[64] = (T)(img)(_p2##x,_p6##y,z,c), I[65] = (T)(img)(_p1##x,_p6##y,z,c), I[66] = (T)(img)(x,_p6##y,z,c), I[67] = (T)(img)(_n1##x,_p6##y,z,c), I[68] = (T)(img)(_n2##x,_p6##y,z,c), I[69] = (T)(img)(_n3##x,_p6##y,z,c), I[70] = (T)(img)(_n4##x,_p6##y,z,c), I[71] = (T)(img)(_n5##x,_p6##y,z,c), I[72] = (T)(img)(_n6##x,_p6##y,z,c), I[73] = (T)(img)(_n7##x,_p6##y,z,c), I[74] = (T)(img)(_n8##x,_p6##y,z,c), I[75] = (T)(img)(_n9##x,_p6##y,z,c), \ - I[76] = (T)(img)(_p9##x,_p5##y,z,c), I[77] = (T)(img)(_p8##x,_p5##y,z,c), I[78] = (T)(img)(_p7##x,_p5##y,z,c), I[79] = (T)(img)(_p6##x,_p5##y,z,c), I[80] = (T)(img)(_p5##x,_p5##y,z,c), I[81] = (T)(img)(_p4##x,_p5##y,z,c), I[82] = (T)(img)(_p3##x,_p5##y,z,c), I[83] = (T)(img)(_p2##x,_p5##y,z,c), I[84] = (T)(img)(_p1##x,_p5##y,z,c), I[85] = (T)(img)(x,_p5##y,z,c), I[86] = (T)(img)(_n1##x,_p5##y,z,c), I[87] = (T)(img)(_n2##x,_p5##y,z,c), I[88] = (T)(img)(_n3##x,_p5##y,z,c), I[89] = (T)(img)(_n4##x,_p5##y,z,c), I[90] = (T)(img)(_n5##x,_p5##y,z,c), I[91] = (T)(img)(_n6##x,_p5##y,z,c), I[92] = (T)(img)(_n7##x,_p5##y,z,c), I[93] = (T)(img)(_n8##x,_p5##y,z,c), I[94] = (T)(img)(_n9##x,_p5##y,z,c), \ - I[95] = (T)(img)(_p9##x,_p4##y,z,c), I[96] = (T)(img)(_p8##x,_p4##y,z,c), I[97] = (T)(img)(_p7##x,_p4##y,z,c), I[98] = (T)(img)(_p6##x,_p4##y,z,c), I[99] = (T)(img)(_p5##x,_p4##y,z,c), I[100] = (T)(img)(_p4##x,_p4##y,z,c), I[101] = (T)(img)(_p3##x,_p4##y,z,c), I[102] = (T)(img)(_p2##x,_p4##y,z,c), I[103] = (T)(img)(_p1##x,_p4##y,z,c), I[104] = (T)(img)(x,_p4##y,z,c), I[105] = (T)(img)(_n1##x,_p4##y,z,c), I[106] = (T)(img)(_n2##x,_p4##y,z,c), I[107] = (T)(img)(_n3##x,_p4##y,z,c), I[108] = (T)(img)(_n4##x,_p4##y,z,c), I[109] = (T)(img)(_n5##x,_p4##y,z,c), I[110] = (T)(img)(_n6##x,_p4##y,z,c), I[111] = (T)(img)(_n7##x,_p4##y,z,c), I[112] = (T)(img)(_n8##x,_p4##y,z,c), I[113] = (T)(img)(_n9##x,_p4##y,z,c), \ - I[114] = (T)(img)(_p9##x,_p3##y,z,c), I[115] = (T)(img)(_p8##x,_p3##y,z,c), I[116] = (T)(img)(_p7##x,_p3##y,z,c), I[117] = (T)(img)(_p6##x,_p3##y,z,c), I[118] = (T)(img)(_p5##x,_p3##y,z,c), I[119] = (T)(img)(_p4##x,_p3##y,z,c), I[120] = (T)(img)(_p3##x,_p3##y,z,c), I[121] = (T)(img)(_p2##x,_p3##y,z,c), I[122] = (T)(img)(_p1##x,_p3##y,z,c), I[123] = (T)(img)(x,_p3##y,z,c), I[124] = (T)(img)(_n1##x,_p3##y,z,c), I[125] = (T)(img)(_n2##x,_p3##y,z,c), I[126] = (T)(img)(_n3##x,_p3##y,z,c), I[127] = (T)(img)(_n4##x,_p3##y,z,c), I[128] = (T)(img)(_n5##x,_p3##y,z,c), I[129] = (T)(img)(_n6##x,_p3##y,z,c), I[130] = (T)(img)(_n7##x,_p3##y,z,c), I[131] = (T)(img)(_n8##x,_p3##y,z,c), I[132] = (T)(img)(_n9##x,_p3##y,z,c), \ - I[133] = (T)(img)(_p9##x,_p2##y,z,c), I[134] = (T)(img)(_p8##x,_p2##y,z,c), I[135] = (T)(img)(_p7##x,_p2##y,z,c), I[136] = (T)(img)(_p6##x,_p2##y,z,c), I[137] = (T)(img)(_p5##x,_p2##y,z,c), I[138] = (T)(img)(_p4##x,_p2##y,z,c), I[139] = (T)(img)(_p3##x,_p2##y,z,c), I[140] = (T)(img)(_p2##x,_p2##y,z,c), I[141] = (T)(img)(_p1##x,_p2##y,z,c), I[142] = (T)(img)(x,_p2##y,z,c), I[143] = (T)(img)(_n1##x,_p2##y,z,c), I[144] = (T)(img)(_n2##x,_p2##y,z,c), I[145] = (T)(img)(_n3##x,_p2##y,z,c), I[146] = (T)(img)(_n4##x,_p2##y,z,c), I[147] = (T)(img)(_n5##x,_p2##y,z,c), I[148] = (T)(img)(_n6##x,_p2##y,z,c), I[149] = (T)(img)(_n7##x,_p2##y,z,c), I[150] = (T)(img)(_n8##x,_p2##y,z,c), I[151] = (T)(img)(_n9##x,_p2##y,z,c), \ - I[152] = (T)(img)(_p9##x,_p1##y,z,c), I[153] = (T)(img)(_p8##x,_p1##y,z,c), I[154] = (T)(img)(_p7##x,_p1##y,z,c), I[155] = (T)(img)(_p6##x,_p1##y,z,c), I[156] = (T)(img)(_p5##x,_p1##y,z,c), I[157] = (T)(img)(_p4##x,_p1##y,z,c), I[158] = (T)(img)(_p3##x,_p1##y,z,c), I[159] = (T)(img)(_p2##x,_p1##y,z,c), I[160] = (T)(img)(_p1##x,_p1##y,z,c), I[161] = (T)(img)(x,_p1##y,z,c), I[162] = (T)(img)(_n1##x,_p1##y,z,c), I[163] = (T)(img)(_n2##x,_p1##y,z,c), I[164] = (T)(img)(_n3##x,_p1##y,z,c), I[165] = (T)(img)(_n4##x,_p1##y,z,c), I[166] = (T)(img)(_n5##x,_p1##y,z,c), I[167] = (T)(img)(_n6##x,_p1##y,z,c), I[168] = (T)(img)(_n7##x,_p1##y,z,c), I[169] = (T)(img)(_n8##x,_p1##y,z,c), I[170] = (T)(img)(_n9##x,_p1##y,z,c), \ - I[171] = (T)(img)(_p9##x,y,z,c), I[172] = (T)(img)(_p8##x,y,z,c), I[173] = (T)(img)(_p7##x,y,z,c), I[174] = (T)(img)(_p6##x,y,z,c), I[175] = (T)(img)(_p5##x,y,z,c), I[176] = (T)(img)(_p4##x,y,z,c), I[177] = (T)(img)(_p3##x,y,z,c), I[178] = (T)(img)(_p2##x,y,z,c), I[179] = (T)(img)(_p1##x,y,z,c), I[180] = (T)(img)(x,y,z,c), I[181] = (T)(img)(_n1##x,y,z,c), I[182] = (T)(img)(_n2##x,y,z,c), I[183] = (T)(img)(_n3##x,y,z,c), I[184] = (T)(img)(_n4##x,y,z,c), I[185] = (T)(img)(_n5##x,y,z,c), I[186] = (T)(img)(_n6##x,y,z,c), I[187] = (T)(img)(_n7##x,y,z,c), I[188] = (T)(img)(_n8##x,y,z,c), I[189] = (T)(img)(_n9##x,y,z,c), \ - I[190] = (T)(img)(_p9##x,_n1##y,z,c), I[191] = (T)(img)(_p8##x,_n1##y,z,c), I[192] = (T)(img)(_p7##x,_n1##y,z,c), I[193] = (T)(img)(_p6##x,_n1##y,z,c), I[194] = (T)(img)(_p5##x,_n1##y,z,c), I[195] = (T)(img)(_p4##x,_n1##y,z,c), I[196] = (T)(img)(_p3##x,_n1##y,z,c), I[197] = (T)(img)(_p2##x,_n1##y,z,c), I[198] = (T)(img)(_p1##x,_n1##y,z,c), I[199] = (T)(img)(x,_n1##y,z,c), I[200] = (T)(img)(_n1##x,_n1##y,z,c), I[201] = (T)(img)(_n2##x,_n1##y,z,c), I[202] = (T)(img)(_n3##x,_n1##y,z,c), I[203] = (T)(img)(_n4##x,_n1##y,z,c), I[204] = (T)(img)(_n5##x,_n1##y,z,c), I[205] = (T)(img)(_n6##x,_n1##y,z,c), I[206] = (T)(img)(_n7##x,_n1##y,z,c), I[207] = (T)(img)(_n8##x,_n1##y,z,c), I[208] = (T)(img)(_n9##x,_n1##y,z,c), \ - I[209] = (T)(img)(_p9##x,_n2##y,z,c), I[210] = (T)(img)(_p8##x,_n2##y,z,c), I[211] = (T)(img)(_p7##x,_n2##y,z,c), I[212] = (T)(img)(_p6##x,_n2##y,z,c), I[213] = (T)(img)(_p5##x,_n2##y,z,c), I[214] = (T)(img)(_p4##x,_n2##y,z,c), I[215] = (T)(img)(_p3##x,_n2##y,z,c), I[216] = (T)(img)(_p2##x,_n2##y,z,c), I[217] = (T)(img)(_p1##x,_n2##y,z,c), I[218] = (T)(img)(x,_n2##y,z,c), I[219] = (T)(img)(_n1##x,_n2##y,z,c), I[220] = (T)(img)(_n2##x,_n2##y,z,c), I[221] = (T)(img)(_n3##x,_n2##y,z,c), I[222] = (T)(img)(_n4##x,_n2##y,z,c), I[223] = (T)(img)(_n5##x,_n2##y,z,c), I[224] = (T)(img)(_n6##x,_n2##y,z,c), I[225] = (T)(img)(_n7##x,_n2##y,z,c), I[226] = (T)(img)(_n8##x,_n2##y,z,c), I[227] = (T)(img)(_n9##x,_n2##y,z,c), \ - I[228] = (T)(img)(_p9##x,_n3##y,z,c), I[229] = (T)(img)(_p8##x,_n3##y,z,c), I[230] = (T)(img)(_p7##x,_n3##y,z,c), I[231] = (T)(img)(_p6##x,_n3##y,z,c), I[232] = (T)(img)(_p5##x,_n3##y,z,c), I[233] = (T)(img)(_p4##x,_n3##y,z,c), I[234] = (T)(img)(_p3##x,_n3##y,z,c), I[235] = (T)(img)(_p2##x,_n3##y,z,c), I[236] = (T)(img)(_p1##x,_n3##y,z,c), I[237] = (T)(img)(x,_n3##y,z,c), I[238] = (T)(img)(_n1##x,_n3##y,z,c), I[239] = (T)(img)(_n2##x,_n3##y,z,c), I[240] = (T)(img)(_n3##x,_n3##y,z,c), I[241] = (T)(img)(_n4##x,_n3##y,z,c), I[242] = (T)(img)(_n5##x,_n3##y,z,c), I[243] = (T)(img)(_n6##x,_n3##y,z,c), I[244] = (T)(img)(_n7##x,_n3##y,z,c), I[245] = (T)(img)(_n8##x,_n3##y,z,c), I[246] = (T)(img)(_n9##x,_n3##y,z,c), \ - I[247] = (T)(img)(_p9##x,_n4##y,z,c), I[248] = (T)(img)(_p8##x,_n4##y,z,c), I[249] = (T)(img)(_p7##x,_n4##y,z,c), I[250] = (T)(img)(_p6##x,_n4##y,z,c), I[251] = (T)(img)(_p5##x,_n4##y,z,c), I[252] = (T)(img)(_p4##x,_n4##y,z,c), I[253] = (T)(img)(_p3##x,_n4##y,z,c), I[254] = (T)(img)(_p2##x,_n4##y,z,c), I[255] = (T)(img)(_p1##x,_n4##y,z,c), I[256] = (T)(img)(x,_n4##y,z,c), I[257] = (T)(img)(_n1##x,_n4##y,z,c), I[258] = (T)(img)(_n2##x,_n4##y,z,c), I[259] = (T)(img)(_n3##x,_n4##y,z,c), I[260] = (T)(img)(_n4##x,_n4##y,z,c), I[261] = (T)(img)(_n5##x,_n4##y,z,c), I[262] = (T)(img)(_n6##x,_n4##y,z,c), I[263] = (T)(img)(_n7##x,_n4##y,z,c), I[264] = (T)(img)(_n8##x,_n4##y,z,c), I[265] = (T)(img)(_n9##x,_n4##y,z,c), \ - I[266] = (T)(img)(_p9##x,_n5##y,z,c), I[267] = (T)(img)(_p8##x,_n5##y,z,c), I[268] = (T)(img)(_p7##x,_n5##y,z,c), I[269] = (T)(img)(_p6##x,_n5##y,z,c), I[270] = (T)(img)(_p5##x,_n5##y,z,c), I[271] = (T)(img)(_p4##x,_n5##y,z,c), I[272] = (T)(img)(_p3##x,_n5##y,z,c), I[273] = (T)(img)(_p2##x,_n5##y,z,c), I[274] = (T)(img)(_p1##x,_n5##y,z,c), I[275] = (T)(img)(x,_n5##y,z,c), I[276] = (T)(img)(_n1##x,_n5##y,z,c), I[277] = (T)(img)(_n2##x,_n5##y,z,c), I[278] = (T)(img)(_n3##x,_n5##y,z,c), I[279] = (T)(img)(_n4##x,_n5##y,z,c), I[280] = (T)(img)(_n5##x,_n5##y,z,c), I[281] = (T)(img)(_n6##x,_n5##y,z,c), I[282] = (T)(img)(_n7##x,_n5##y,z,c), I[283] = (T)(img)(_n8##x,_n5##y,z,c), I[284] = (T)(img)(_n9##x,_n5##y,z,c), \ - I[285] = (T)(img)(_p9##x,_n6##y,z,c), I[286] = (T)(img)(_p8##x,_n6##y,z,c), I[287] = (T)(img)(_p7##x,_n6##y,z,c), I[288] = (T)(img)(_p6##x,_n6##y,z,c), I[289] = (T)(img)(_p5##x,_n6##y,z,c), I[290] = (T)(img)(_p4##x,_n6##y,z,c), I[291] = (T)(img)(_p3##x,_n6##y,z,c), I[292] = (T)(img)(_p2##x,_n6##y,z,c), I[293] = (T)(img)(_p1##x,_n6##y,z,c), I[294] = (T)(img)(x,_n6##y,z,c), I[295] = (T)(img)(_n1##x,_n6##y,z,c), I[296] = (T)(img)(_n2##x,_n6##y,z,c), I[297] = (T)(img)(_n3##x,_n6##y,z,c), I[298] = (T)(img)(_n4##x,_n6##y,z,c), I[299] = (T)(img)(_n5##x,_n6##y,z,c), I[300] = (T)(img)(_n6##x,_n6##y,z,c), I[301] = (T)(img)(_n7##x,_n6##y,z,c), I[302] = (T)(img)(_n8##x,_n6##y,z,c), I[303] = (T)(img)(_n9##x,_n6##y,z,c), \ - I[304] = (T)(img)(_p9##x,_n7##y,z,c), I[305] = (T)(img)(_p8##x,_n7##y,z,c), I[306] = (T)(img)(_p7##x,_n7##y,z,c), I[307] = (T)(img)(_p6##x,_n7##y,z,c), I[308] = (T)(img)(_p5##x,_n7##y,z,c), I[309] = (T)(img)(_p4##x,_n7##y,z,c), I[310] = (T)(img)(_p3##x,_n7##y,z,c), I[311] = (T)(img)(_p2##x,_n7##y,z,c), I[312] = (T)(img)(_p1##x,_n7##y,z,c), I[313] = (T)(img)(x,_n7##y,z,c), I[314] = (T)(img)(_n1##x,_n7##y,z,c), I[315] = (T)(img)(_n2##x,_n7##y,z,c), I[316] = (T)(img)(_n3##x,_n7##y,z,c), I[317] = (T)(img)(_n4##x,_n7##y,z,c), I[318] = (T)(img)(_n5##x,_n7##y,z,c), I[319] = (T)(img)(_n6##x,_n7##y,z,c), I[320] = (T)(img)(_n7##x,_n7##y,z,c), I[321] = (T)(img)(_n8##x,_n7##y,z,c), I[322] = (T)(img)(_n9##x,_n7##y,z,c), \ - I[323] = (T)(img)(_p9##x,_n8##y,z,c), I[324] = (T)(img)(_p8##x,_n8##y,z,c), I[325] = (T)(img)(_p7##x,_n8##y,z,c), I[326] = (T)(img)(_p6##x,_n8##y,z,c), I[327] = (T)(img)(_p5##x,_n8##y,z,c), I[328] = (T)(img)(_p4##x,_n8##y,z,c), I[329] = (T)(img)(_p3##x,_n8##y,z,c), I[330] = (T)(img)(_p2##x,_n8##y,z,c), I[331] = (T)(img)(_p1##x,_n8##y,z,c), I[332] = (T)(img)(x,_n8##y,z,c), I[333] = (T)(img)(_n1##x,_n8##y,z,c), I[334] = (T)(img)(_n2##x,_n8##y,z,c), I[335] = (T)(img)(_n3##x,_n8##y,z,c), I[336] = (T)(img)(_n4##x,_n8##y,z,c), I[337] = (T)(img)(_n5##x,_n8##y,z,c), I[338] = (T)(img)(_n6##x,_n8##y,z,c), I[339] = (T)(img)(_n7##x,_n8##y,z,c), I[340] = (T)(img)(_n8##x,_n8##y,z,c), I[341] = (T)(img)(_n9##x,_n8##y,z,c), \ - I[342] = (T)(img)(_p9##x,_n9##y,z,c), I[343] = (T)(img)(_p8##x,_n9##y,z,c), I[344] = (T)(img)(_p7##x,_n9##y,z,c), I[345] = (T)(img)(_p6##x,_n9##y,z,c), I[346] = (T)(img)(_p5##x,_n9##y,z,c), I[347] = (T)(img)(_p4##x,_n9##y,z,c), I[348] = (T)(img)(_p3##x,_n9##y,z,c), I[349] = (T)(img)(_p2##x,_n9##y,z,c), I[350] = (T)(img)(_p1##x,_n9##y,z,c), I[351] = (T)(img)(x,_n9##y,z,c), I[352] = (T)(img)(_n1##x,_n9##y,z,c), I[353] = (T)(img)(_n2##x,_n9##y,z,c), I[354] = (T)(img)(_n3##x,_n9##y,z,c), I[355] = (T)(img)(_n4##x,_n9##y,z,c), I[356] = (T)(img)(_n5##x,_n9##y,z,c), I[357] = (T)(img)(_n6##x,_n9##y,z,c), I[358] = (T)(img)(_n7##x,_n9##y,z,c), I[359] = (T)(img)(_n8##x,_n9##y,z,c), I[360] = (T)(img)(_n9##x,_n9##y,z,c); - -// Define 20x20 loop macros -//------------------------- -#define cimg_for20(bound,i) for (int i = 0, \ - _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10; \ - _n10##i<(int)(bound) || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i) - -#define cimg_for20X(img,x) cimg_for20((img)._width,x) -#define cimg_for20Y(img,y) cimg_for20((img)._height,y) -#define cimg_for20Z(img,z) cimg_for20((img)._depth,z) -#define cimg_for20C(img,c) cimg_for20((img)._spectrum,c) -#define cimg_for20XY(img,x,y) cimg_for20Y(img,y) cimg_for20X(img,x) -#define cimg_for20XZ(img,x,z) cimg_for20Z(img,z) cimg_for20X(img,x) -#define cimg_for20XC(img,x,c) cimg_for20C(img,c) cimg_for20X(img,x) -#define cimg_for20YZ(img,y,z) cimg_for20Z(img,z) cimg_for20Y(img,y) -#define cimg_for20YC(img,y,c) cimg_for20C(img,c) cimg_for20Y(img,y) -#define cimg_for20ZC(img,z,c) cimg_for20C(img,c) cimg_for20Z(img,z) -#define cimg_for20XYZ(img,x,y,z) cimg_for20Z(img,z) cimg_for20XY(img,x,y) -#define cimg_for20XZC(img,x,z,c) cimg_for20C(img,c) cimg_for20XZ(img,x,z) -#define cimg_for20YZC(img,y,z,c) cimg_for20C(img,c) cimg_for20YZ(img,y,z) -#define cimg_for20XYZC(img,x,y,z,c) cimg_for20C(img,c) cimg_for20XYZ(img,x,y,z) - -#define cimg_for_in20(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10; \ - i<=(int)(i1) && (_n10##i<(int)(bound) || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i) - -#define cimg_for_in20X(img,x0,x1,x) cimg_for_in20((img)._width,x0,x1,x) -#define cimg_for_in20Y(img,y0,y1,y) cimg_for_in20((img)._height,y0,y1,y) -#define cimg_for_in20Z(img,z0,z1,z) cimg_for_in20((img)._depth,z0,z1,z) -#define cimg_for_in20C(img,c0,c1,c) cimg_for_in20((img)._spectrum,c0,c1,c) -#define cimg_for_in20XY(img,x0,y0,x1,y1,x,y) cimg_for_in20Y(img,y0,y1,y) cimg_for_in20X(img,x0,x1,x) -#define cimg_for_in20XZ(img,x0,z0,x1,z1,x,z) cimg_for_in20Z(img,z0,z1,z) cimg_for_in20X(img,x0,x1,x) -#define cimg_for_in20XC(img,x0,c0,x1,c1,x,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20X(img,x0,x1,x) -#define cimg_for_in20YZ(img,y0,z0,y1,z1,y,z) cimg_for_in20Z(img,z0,z1,z) cimg_for_in20Y(img,y0,y1,y) -#define cimg_for_in20YC(img,y0,c0,y1,c1,y,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20Y(img,y0,y1,y) -#define cimg_for_in20ZC(img,z0,c0,z1,c1,z,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20Z(img,z0,z1,z) -#define cimg_for_in20XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in20Z(img,z0,z1,z) cimg_for_in20XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in20XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in20YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in20XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in20C(img,c0,c1,c) cimg_for_in20XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for20x20(img,x,y,z,c,I,T) \ - cimg_for20((img)._height,y) for (int x = 0, \ - _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = (T)(img)(0,_p9##y,z,c)), \ - (I[20] = I[21] = I[22] = I[23] = I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = (T)(img)(0,_p8##y,z,c)), \ - (I[40] = I[41] = I[42] = I[43] = I[44] = I[45] = I[46] = I[47] = I[48] = I[49] = (T)(img)(0,_p7##y,z,c)), \ - (I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = (T)(img)(0,_p6##y,z,c)), \ - (I[80] = I[81] = I[82] = I[83] = I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = (T)(img)(0,_p5##y,z,c)), \ - (I[100] = I[101] = I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = (T)(img)(0,_p4##y,z,c)), \ - (I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = I[128] = I[129] = (T)(img)(0,_p3##y,z,c)), \ - (I[140] = I[141] = I[142] = I[143] = I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = (T)(img)(0,_p2##y,z,c)), \ - (I[160] = I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = (T)(img)(0,_p1##y,z,c)), \ - (I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = I[189] = (T)(img)(0,y,z,c)), \ - (I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = I[207] = I[208] = I[209] = (T)(img)(0,_n1##y,z,c)), \ - (I[220] = I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = (T)(img)(0,_n2##y,z,c)), \ - (I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = I[247] = I[248] = I[249] = (T)(img)(0,_n3##y,z,c)), \ - (I[260] = I[261] = I[262] = I[263] = I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = (T)(img)(0,_n4##y,z,c)), \ - (I[280] = I[281] = I[282] = I[283] = I[284] = I[285] = I[286] = I[287] = I[288] = I[289] = (T)(img)(0,_n5##y,z,c)), \ - (I[300] = I[301] = I[302] = I[303] = I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = (T)(img)(0,_n6##y,z,c)), \ - (I[320] = I[321] = I[322] = I[323] = I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = (T)(img)(0,_n7##y,z,c)), \ - (I[340] = I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = I[348] = I[349] = (T)(img)(0,_n8##y,z,c)), \ - (I[360] = I[361] = I[362] = I[363] = I[364] = I[365] = I[366] = I[367] = I[368] = I[369] = (T)(img)(0,_n9##y,z,c)), \ - (I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = I[388] = I[389] = (T)(img)(0,_n10##y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[70] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[90] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[110] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[130] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[170] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[190] = (T)(img)(_n1##x,y,z,c)), \ - (I[210] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[250] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[270] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[290] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[310] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[330] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[350] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[370] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[390] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[71] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[91] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[111] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[131] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[171] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[191] = (T)(img)(_n2##x,y,z,c)), \ - (I[211] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[251] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[271] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[291] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[311] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[331] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[351] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[371] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[391] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[12] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[32] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[72] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[92] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[112] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[132] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[172] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[192] = (T)(img)(_n3##x,y,z,c)), \ - (I[212] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[252] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[272] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[292] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[312] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[332] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[352] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[372] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[392] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[13] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[33] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[73] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[93] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[113] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[133] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[173] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[193] = (T)(img)(_n4##x,y,z,c)), \ - (I[213] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[253] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[273] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[293] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[313] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[333] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[353] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[373] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[393] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[14] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[34] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[54] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[74] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[94] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[114] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[134] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[174] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[194] = (T)(img)(_n5##x,y,z,c)), \ - (I[214] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[254] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[274] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[294] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[314] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[334] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[354] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[374] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[394] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[15] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[35] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[55] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[75] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[95] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[115] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[135] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[175] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[195] = (T)(img)(_n6##x,y,z,c)), \ - (I[215] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[255] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[275] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[295] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[315] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[335] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[355] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[375] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[395] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[16] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[36] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[56] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[76] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[96] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[116] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[136] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[156] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[176] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[196] = (T)(img)(_n7##x,y,z,c)), \ - (I[216] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[256] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[276] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[296] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[316] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[336] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[356] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[376] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[396] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[17] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[37] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[57] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[77] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[97] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[117] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[137] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[157] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[177] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[197] = (T)(img)(_n8##x,y,z,c)), \ - (I[217] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[257] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[277] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[297] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[317] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[337] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[357] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[377] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[397] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[18] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[38] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[58] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[78] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[98] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[118] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[138] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[158] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[178] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[198] = (T)(img)(_n9##x,y,z,c)), \ - (I[218] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[238] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[258] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[278] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[298] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[318] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[338] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[358] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[378] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[398] = (T)(img)(_n9##x,_n10##y,z,c)), \ - 10>=((img)._width)?(img).width()-1:10); \ - (_n10##x<(img).width() && ( \ - (I[19] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[39] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[59] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[79] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[99] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[119] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[139] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[159] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[179] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[199] = (T)(img)(_n10##x,y,z,c)), \ - (I[219] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[239] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[259] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[279] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[299] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[319] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[339] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[359] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[379] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[399] = (T)(img)(_n10##x,_n10##y,z,c)),1)) || \ - _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], \ - I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], \ - I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], \ - I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], \ - I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x) - -#define cimg_for_in20x20(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in20((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = (int)( \ - (I[0] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[20] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[40] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[60] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[80] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[100] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[120] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[140] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[160] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[180] = (T)(img)(_p9##x,y,z,c)), \ - (I[200] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[220] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[240] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[260] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[280] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[300] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[320] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[340] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[360] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[380] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[1] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[21] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[41] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[61] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[81] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[101] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[121] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[141] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[161] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[181] = (T)(img)(_p8##x,y,z,c)), \ - (I[201] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[221] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[241] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[261] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[281] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[301] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[321] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[341] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[361] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[381] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[2] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[22] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[42] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[62] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[82] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[102] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[122] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[142] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[162] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[182] = (T)(img)(_p7##x,y,z,c)), \ - (I[202] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[222] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[242] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[262] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[282] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[302] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[322] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[342] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[362] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[382] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[3] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[23] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[43] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[63] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[83] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[103] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[123] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[143] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[163] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[183] = (T)(img)(_p6##x,y,z,c)), \ - (I[203] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[223] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[243] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[263] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[283] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[303] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[323] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[343] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[363] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[383] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[4] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[24] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[44] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[64] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[84] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[104] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[124] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[144] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[164] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[184] = (T)(img)(_p5##x,y,z,c)), \ - (I[204] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[224] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[244] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[264] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[284] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[304] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[324] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[344] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[364] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[384] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[5] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[25] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[45] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[65] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[85] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[105] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[125] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[145] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[165] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[185] = (T)(img)(_p4##x,y,z,c)), \ - (I[205] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[225] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[245] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[265] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[285] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[305] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[325] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[345] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[365] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[385] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[6] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[26] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[46] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[66] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[86] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[106] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[126] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[146] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[166] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[186] = (T)(img)(_p3##x,y,z,c)), \ - (I[206] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[226] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[246] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[266] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[286] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[306] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[326] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[346] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[366] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[386] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[7] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[27] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[47] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[67] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[87] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[107] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[127] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[147] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[167] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[187] = (T)(img)(_p2##x,y,z,c)), \ - (I[207] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[227] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[247] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[267] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[287] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[307] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[327] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[347] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[367] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[387] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[8] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[28] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[48] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[68] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[88] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[108] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[128] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[148] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[168] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[188] = (T)(img)(_p1##x,y,z,c)), \ - (I[208] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[228] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[248] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[268] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[288] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[308] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[328] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[348] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[368] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[388] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[9] = (T)(img)(x,_p9##y,z,c)), \ - (I[29] = (T)(img)(x,_p8##y,z,c)), \ - (I[49] = (T)(img)(x,_p7##y,z,c)), \ - (I[69] = (T)(img)(x,_p6##y,z,c)), \ - (I[89] = (T)(img)(x,_p5##y,z,c)), \ - (I[109] = (T)(img)(x,_p4##y,z,c)), \ - (I[129] = (T)(img)(x,_p3##y,z,c)), \ - (I[149] = (T)(img)(x,_p2##y,z,c)), \ - (I[169] = (T)(img)(x,_p1##y,z,c)), \ - (I[189] = (T)(img)(x,y,z,c)), \ - (I[209] = (T)(img)(x,_n1##y,z,c)), \ - (I[229] = (T)(img)(x,_n2##y,z,c)), \ - (I[249] = (T)(img)(x,_n3##y,z,c)), \ - (I[269] = (T)(img)(x,_n4##y,z,c)), \ - (I[289] = (T)(img)(x,_n5##y,z,c)), \ - (I[309] = (T)(img)(x,_n6##y,z,c)), \ - (I[329] = (T)(img)(x,_n7##y,z,c)), \ - (I[349] = (T)(img)(x,_n8##y,z,c)), \ - (I[369] = (T)(img)(x,_n9##y,z,c)), \ - (I[389] = (T)(img)(x,_n10##y,z,c)), \ - (I[10] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[50] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[70] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[90] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[110] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[130] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[170] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[190] = (T)(img)(_n1##x,y,z,c)), \ - (I[210] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[250] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[270] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[290] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[310] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[330] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[350] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[370] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[390] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[11] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[51] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[71] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[91] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[111] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[131] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[171] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[191] = (T)(img)(_n2##x,y,z,c)), \ - (I[211] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[251] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[271] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[291] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[311] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[331] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[351] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[371] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[391] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[12] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[32] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[52] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[72] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[92] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[112] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[132] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[172] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[192] = (T)(img)(_n3##x,y,z,c)), \ - (I[212] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[252] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[272] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[292] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[312] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[332] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[352] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[372] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[392] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[13] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[33] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[53] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[73] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[93] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[113] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[133] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[173] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[193] = (T)(img)(_n4##x,y,z,c)), \ - (I[213] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[253] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[273] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[293] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[313] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[333] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[353] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[373] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[393] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[14] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[34] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[54] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[74] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[94] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[114] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[134] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[174] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[194] = (T)(img)(_n5##x,y,z,c)), \ - (I[214] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[254] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[274] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[294] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[314] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[334] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[354] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[374] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[394] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[15] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[35] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[55] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[75] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[95] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[115] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[135] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[175] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[195] = (T)(img)(_n6##x,y,z,c)), \ - (I[215] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[255] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[275] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[295] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[315] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[335] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[355] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[375] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[395] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[16] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[36] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[56] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[76] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[96] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[116] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[136] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[156] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[176] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[196] = (T)(img)(_n7##x,y,z,c)), \ - (I[216] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[256] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[276] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[296] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[316] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[336] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[356] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[376] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[396] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[17] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[37] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[57] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[77] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[97] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[117] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[137] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[157] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[177] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[197] = (T)(img)(_n8##x,y,z,c)), \ - (I[217] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[257] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[277] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[297] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[317] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[337] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[357] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[377] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[397] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[18] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[38] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[58] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[78] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[98] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[118] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[138] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[158] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[178] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[198] = (T)(img)(_n9##x,y,z,c)), \ - (I[218] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[238] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[258] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[278] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[298] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[318] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[338] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[358] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[378] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[398] = (T)(img)(_n9##x,_n10##y,z,c)), \ - x+10>=(img).width()?(img).width()-1:x+10); \ - x<=(int)(x1) && ((_n10##x<(img).width() && ( \ - (I[19] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[39] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[59] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[79] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[99] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[119] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[139] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[159] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[179] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[199] = (T)(img)(_n10##x,y,z,c)), \ - (I[219] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[239] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[259] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[279] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[299] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[319] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[339] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[359] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[379] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[399] = (T)(img)(_n10##x,_n10##y,z,c)),1)) || \ - _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], \ - I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], \ - I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], \ - I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], \ - I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x) - -#define cimg_get20x20(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p9##x,_p9##y,z,c), I[1] = (T)(img)(_p8##x,_p9##y,z,c), I[2] = (T)(img)(_p7##x,_p9##y,z,c), I[3] = (T)(img)(_p6##x,_p9##y,z,c), I[4] = (T)(img)(_p5##x,_p9##y,z,c), I[5] = (T)(img)(_p4##x,_p9##y,z,c), I[6] = (T)(img)(_p3##x,_p9##y,z,c), I[7] = (T)(img)(_p2##x,_p9##y,z,c), I[8] = (T)(img)(_p1##x,_p9##y,z,c), I[9] = (T)(img)(x,_p9##y,z,c), I[10] = (T)(img)(_n1##x,_p9##y,z,c), I[11] = (T)(img)(_n2##x,_p9##y,z,c), I[12] = (T)(img)(_n3##x,_p9##y,z,c), I[13] = (T)(img)(_n4##x,_p9##y,z,c), I[14] = (T)(img)(_n5##x,_p9##y,z,c), I[15] = (T)(img)(_n6##x,_p9##y,z,c), I[16] = (T)(img)(_n7##x,_p9##y,z,c), I[17] = (T)(img)(_n8##x,_p9##y,z,c), I[18] = (T)(img)(_n9##x,_p9##y,z,c), I[19] = (T)(img)(_n10##x,_p9##y,z,c), \ - I[20] = (T)(img)(_p9##x,_p8##y,z,c), I[21] = (T)(img)(_p8##x,_p8##y,z,c), I[22] = (T)(img)(_p7##x,_p8##y,z,c), I[23] = (T)(img)(_p6##x,_p8##y,z,c), I[24] = (T)(img)(_p5##x,_p8##y,z,c), I[25] = (T)(img)(_p4##x,_p8##y,z,c), I[26] = (T)(img)(_p3##x,_p8##y,z,c), I[27] = (T)(img)(_p2##x,_p8##y,z,c), I[28] = (T)(img)(_p1##x,_p8##y,z,c), I[29] = (T)(img)(x,_p8##y,z,c), I[30] = (T)(img)(_n1##x,_p8##y,z,c), I[31] = (T)(img)(_n2##x,_p8##y,z,c), I[32] = (T)(img)(_n3##x,_p8##y,z,c), I[33] = (T)(img)(_n4##x,_p8##y,z,c), I[34] = (T)(img)(_n5##x,_p8##y,z,c), I[35] = (T)(img)(_n6##x,_p8##y,z,c), I[36] = (T)(img)(_n7##x,_p8##y,z,c), I[37] = (T)(img)(_n8##x,_p8##y,z,c), I[38] = (T)(img)(_n9##x,_p8##y,z,c), I[39] = (T)(img)(_n10##x,_p8##y,z,c), \ - I[40] = (T)(img)(_p9##x,_p7##y,z,c), I[41] = (T)(img)(_p8##x,_p7##y,z,c), I[42] = (T)(img)(_p7##x,_p7##y,z,c), I[43] = (T)(img)(_p6##x,_p7##y,z,c), I[44] = (T)(img)(_p5##x,_p7##y,z,c), I[45] = (T)(img)(_p4##x,_p7##y,z,c), I[46] = (T)(img)(_p3##x,_p7##y,z,c), I[47] = (T)(img)(_p2##x,_p7##y,z,c), I[48] = (T)(img)(_p1##x,_p7##y,z,c), I[49] = (T)(img)(x,_p7##y,z,c), I[50] = (T)(img)(_n1##x,_p7##y,z,c), I[51] = (T)(img)(_n2##x,_p7##y,z,c), I[52] = (T)(img)(_n3##x,_p7##y,z,c), I[53] = (T)(img)(_n4##x,_p7##y,z,c), I[54] = (T)(img)(_n5##x,_p7##y,z,c), I[55] = (T)(img)(_n6##x,_p7##y,z,c), I[56] = (T)(img)(_n7##x,_p7##y,z,c), I[57] = (T)(img)(_n8##x,_p7##y,z,c), I[58] = (T)(img)(_n9##x,_p7##y,z,c), I[59] = (T)(img)(_n10##x,_p7##y,z,c), \ - I[60] = (T)(img)(_p9##x,_p6##y,z,c), I[61] = (T)(img)(_p8##x,_p6##y,z,c), I[62] = (T)(img)(_p7##x,_p6##y,z,c), I[63] = (T)(img)(_p6##x,_p6##y,z,c), I[64] = (T)(img)(_p5##x,_p6##y,z,c), I[65] = (T)(img)(_p4##x,_p6##y,z,c), I[66] = (T)(img)(_p3##x,_p6##y,z,c), I[67] = (T)(img)(_p2##x,_p6##y,z,c), I[68] = (T)(img)(_p1##x,_p6##y,z,c), I[69] = (T)(img)(x,_p6##y,z,c), I[70] = (T)(img)(_n1##x,_p6##y,z,c), I[71] = (T)(img)(_n2##x,_p6##y,z,c), I[72] = (T)(img)(_n3##x,_p6##y,z,c), I[73] = (T)(img)(_n4##x,_p6##y,z,c), I[74] = (T)(img)(_n5##x,_p6##y,z,c), I[75] = (T)(img)(_n6##x,_p6##y,z,c), I[76] = (T)(img)(_n7##x,_p6##y,z,c), I[77] = (T)(img)(_n8##x,_p6##y,z,c), I[78] = (T)(img)(_n9##x,_p6##y,z,c), I[79] = (T)(img)(_n10##x,_p6##y,z,c), \ - I[80] = (T)(img)(_p9##x,_p5##y,z,c), I[81] = (T)(img)(_p8##x,_p5##y,z,c), I[82] = (T)(img)(_p7##x,_p5##y,z,c), I[83] = (T)(img)(_p6##x,_p5##y,z,c), I[84] = (T)(img)(_p5##x,_p5##y,z,c), I[85] = (T)(img)(_p4##x,_p5##y,z,c), I[86] = (T)(img)(_p3##x,_p5##y,z,c), I[87] = (T)(img)(_p2##x,_p5##y,z,c), I[88] = (T)(img)(_p1##x,_p5##y,z,c), I[89] = (T)(img)(x,_p5##y,z,c), I[90] = (T)(img)(_n1##x,_p5##y,z,c), I[91] = (T)(img)(_n2##x,_p5##y,z,c), I[92] = (T)(img)(_n3##x,_p5##y,z,c), I[93] = (T)(img)(_n4##x,_p5##y,z,c), I[94] = (T)(img)(_n5##x,_p5##y,z,c), I[95] = (T)(img)(_n6##x,_p5##y,z,c), I[96] = (T)(img)(_n7##x,_p5##y,z,c), I[97] = (T)(img)(_n8##x,_p5##y,z,c), I[98] = (T)(img)(_n9##x,_p5##y,z,c), I[99] = (T)(img)(_n10##x,_p5##y,z,c), \ - I[100] = (T)(img)(_p9##x,_p4##y,z,c), I[101] = (T)(img)(_p8##x,_p4##y,z,c), I[102] = (T)(img)(_p7##x,_p4##y,z,c), I[103] = (T)(img)(_p6##x,_p4##y,z,c), I[104] = (T)(img)(_p5##x,_p4##y,z,c), I[105] = (T)(img)(_p4##x,_p4##y,z,c), I[106] = (T)(img)(_p3##x,_p4##y,z,c), I[107] = (T)(img)(_p2##x,_p4##y,z,c), I[108] = (T)(img)(_p1##x,_p4##y,z,c), I[109] = (T)(img)(x,_p4##y,z,c), I[110] = (T)(img)(_n1##x,_p4##y,z,c), I[111] = (T)(img)(_n2##x,_p4##y,z,c), I[112] = (T)(img)(_n3##x,_p4##y,z,c), I[113] = (T)(img)(_n4##x,_p4##y,z,c), I[114] = (T)(img)(_n5##x,_p4##y,z,c), I[115] = (T)(img)(_n6##x,_p4##y,z,c), I[116] = (T)(img)(_n7##x,_p4##y,z,c), I[117] = (T)(img)(_n8##x,_p4##y,z,c), I[118] = (T)(img)(_n9##x,_p4##y,z,c), I[119] = (T)(img)(_n10##x,_p4##y,z,c), \ - I[120] = (T)(img)(_p9##x,_p3##y,z,c), I[121] = (T)(img)(_p8##x,_p3##y,z,c), I[122] = (T)(img)(_p7##x,_p3##y,z,c), I[123] = (T)(img)(_p6##x,_p3##y,z,c), I[124] = (T)(img)(_p5##x,_p3##y,z,c), I[125] = (T)(img)(_p4##x,_p3##y,z,c), I[126] = (T)(img)(_p3##x,_p3##y,z,c), I[127] = (T)(img)(_p2##x,_p3##y,z,c), I[128] = (T)(img)(_p1##x,_p3##y,z,c), I[129] = (T)(img)(x,_p3##y,z,c), I[130] = (T)(img)(_n1##x,_p3##y,z,c), I[131] = (T)(img)(_n2##x,_p3##y,z,c), I[132] = (T)(img)(_n3##x,_p3##y,z,c), I[133] = (T)(img)(_n4##x,_p3##y,z,c), I[134] = (T)(img)(_n5##x,_p3##y,z,c), I[135] = (T)(img)(_n6##x,_p3##y,z,c), I[136] = (T)(img)(_n7##x,_p3##y,z,c), I[137] = (T)(img)(_n8##x,_p3##y,z,c), I[138] = (T)(img)(_n9##x,_p3##y,z,c), I[139] = (T)(img)(_n10##x,_p3##y,z,c), \ - I[140] = (T)(img)(_p9##x,_p2##y,z,c), I[141] = (T)(img)(_p8##x,_p2##y,z,c), I[142] = (T)(img)(_p7##x,_p2##y,z,c), I[143] = (T)(img)(_p6##x,_p2##y,z,c), I[144] = (T)(img)(_p5##x,_p2##y,z,c), I[145] = (T)(img)(_p4##x,_p2##y,z,c), I[146] = (T)(img)(_p3##x,_p2##y,z,c), I[147] = (T)(img)(_p2##x,_p2##y,z,c), I[148] = (T)(img)(_p1##x,_p2##y,z,c), I[149] = (T)(img)(x,_p2##y,z,c), I[150] = (T)(img)(_n1##x,_p2##y,z,c), I[151] = (T)(img)(_n2##x,_p2##y,z,c), I[152] = (T)(img)(_n3##x,_p2##y,z,c), I[153] = (T)(img)(_n4##x,_p2##y,z,c), I[154] = (T)(img)(_n5##x,_p2##y,z,c), I[155] = (T)(img)(_n6##x,_p2##y,z,c), I[156] = (T)(img)(_n7##x,_p2##y,z,c), I[157] = (T)(img)(_n8##x,_p2##y,z,c), I[158] = (T)(img)(_n9##x,_p2##y,z,c), I[159] = (T)(img)(_n10##x,_p2##y,z,c), \ - I[160] = (T)(img)(_p9##x,_p1##y,z,c), I[161] = (T)(img)(_p8##x,_p1##y,z,c), I[162] = (T)(img)(_p7##x,_p1##y,z,c), I[163] = (T)(img)(_p6##x,_p1##y,z,c), I[164] = (T)(img)(_p5##x,_p1##y,z,c), I[165] = (T)(img)(_p4##x,_p1##y,z,c), I[166] = (T)(img)(_p3##x,_p1##y,z,c), I[167] = (T)(img)(_p2##x,_p1##y,z,c), I[168] = (T)(img)(_p1##x,_p1##y,z,c), I[169] = (T)(img)(x,_p1##y,z,c), I[170] = (T)(img)(_n1##x,_p1##y,z,c), I[171] = (T)(img)(_n2##x,_p1##y,z,c), I[172] = (T)(img)(_n3##x,_p1##y,z,c), I[173] = (T)(img)(_n4##x,_p1##y,z,c), I[174] = (T)(img)(_n5##x,_p1##y,z,c), I[175] = (T)(img)(_n6##x,_p1##y,z,c), I[176] = (T)(img)(_n7##x,_p1##y,z,c), I[177] = (T)(img)(_n8##x,_p1##y,z,c), I[178] = (T)(img)(_n9##x,_p1##y,z,c), I[179] = (T)(img)(_n10##x,_p1##y,z,c), \ - I[180] = (T)(img)(_p9##x,y,z,c), I[181] = (T)(img)(_p8##x,y,z,c), I[182] = (T)(img)(_p7##x,y,z,c), I[183] = (T)(img)(_p6##x,y,z,c), I[184] = (T)(img)(_p5##x,y,z,c), I[185] = (T)(img)(_p4##x,y,z,c), I[186] = (T)(img)(_p3##x,y,z,c), I[187] = (T)(img)(_p2##x,y,z,c), I[188] = (T)(img)(_p1##x,y,z,c), I[189] = (T)(img)(x,y,z,c), I[190] = (T)(img)(_n1##x,y,z,c), I[191] = (T)(img)(_n2##x,y,z,c), I[192] = (T)(img)(_n3##x,y,z,c), I[193] = (T)(img)(_n4##x,y,z,c), I[194] = (T)(img)(_n5##x,y,z,c), I[195] = (T)(img)(_n6##x,y,z,c), I[196] = (T)(img)(_n7##x,y,z,c), I[197] = (T)(img)(_n8##x,y,z,c), I[198] = (T)(img)(_n9##x,y,z,c), I[199] = (T)(img)(_n10##x,y,z,c), \ - I[200] = (T)(img)(_p9##x,_n1##y,z,c), I[201] = (T)(img)(_p8##x,_n1##y,z,c), I[202] = (T)(img)(_p7##x,_n1##y,z,c), I[203] = (T)(img)(_p6##x,_n1##y,z,c), I[204] = (T)(img)(_p5##x,_n1##y,z,c), I[205] = (T)(img)(_p4##x,_n1##y,z,c), I[206] = (T)(img)(_p3##x,_n1##y,z,c), I[207] = (T)(img)(_p2##x,_n1##y,z,c), I[208] = (T)(img)(_p1##x,_n1##y,z,c), I[209] = (T)(img)(x,_n1##y,z,c), I[210] = (T)(img)(_n1##x,_n1##y,z,c), I[211] = (T)(img)(_n2##x,_n1##y,z,c), I[212] = (T)(img)(_n3##x,_n1##y,z,c), I[213] = (T)(img)(_n4##x,_n1##y,z,c), I[214] = (T)(img)(_n5##x,_n1##y,z,c), I[215] = (T)(img)(_n6##x,_n1##y,z,c), I[216] = (T)(img)(_n7##x,_n1##y,z,c), I[217] = (T)(img)(_n8##x,_n1##y,z,c), I[218] = (T)(img)(_n9##x,_n1##y,z,c), I[219] = (T)(img)(_n10##x,_n1##y,z,c), \ - I[220] = (T)(img)(_p9##x,_n2##y,z,c), I[221] = (T)(img)(_p8##x,_n2##y,z,c), I[222] = (T)(img)(_p7##x,_n2##y,z,c), I[223] = (T)(img)(_p6##x,_n2##y,z,c), I[224] = (T)(img)(_p5##x,_n2##y,z,c), I[225] = (T)(img)(_p4##x,_n2##y,z,c), I[226] = (T)(img)(_p3##x,_n2##y,z,c), I[227] = (T)(img)(_p2##x,_n2##y,z,c), I[228] = (T)(img)(_p1##x,_n2##y,z,c), I[229] = (T)(img)(x,_n2##y,z,c), I[230] = (T)(img)(_n1##x,_n2##y,z,c), I[231] = (T)(img)(_n2##x,_n2##y,z,c), I[232] = (T)(img)(_n3##x,_n2##y,z,c), I[233] = (T)(img)(_n4##x,_n2##y,z,c), I[234] = (T)(img)(_n5##x,_n2##y,z,c), I[235] = (T)(img)(_n6##x,_n2##y,z,c), I[236] = (T)(img)(_n7##x,_n2##y,z,c), I[237] = (T)(img)(_n8##x,_n2##y,z,c), I[238] = (T)(img)(_n9##x,_n2##y,z,c), I[239] = (T)(img)(_n10##x,_n2##y,z,c), \ - I[240] = (T)(img)(_p9##x,_n3##y,z,c), I[241] = (T)(img)(_p8##x,_n3##y,z,c), I[242] = (T)(img)(_p7##x,_n3##y,z,c), I[243] = (T)(img)(_p6##x,_n3##y,z,c), I[244] = (T)(img)(_p5##x,_n3##y,z,c), I[245] = (T)(img)(_p4##x,_n3##y,z,c), I[246] = (T)(img)(_p3##x,_n3##y,z,c), I[247] = (T)(img)(_p2##x,_n3##y,z,c), I[248] = (T)(img)(_p1##x,_n3##y,z,c), I[249] = (T)(img)(x,_n3##y,z,c), I[250] = (T)(img)(_n1##x,_n3##y,z,c), I[251] = (T)(img)(_n2##x,_n3##y,z,c), I[252] = (T)(img)(_n3##x,_n3##y,z,c), I[253] = (T)(img)(_n4##x,_n3##y,z,c), I[254] = (T)(img)(_n5##x,_n3##y,z,c), I[255] = (T)(img)(_n6##x,_n3##y,z,c), I[256] = (T)(img)(_n7##x,_n3##y,z,c), I[257] = (T)(img)(_n8##x,_n3##y,z,c), I[258] = (T)(img)(_n9##x,_n3##y,z,c), I[259] = (T)(img)(_n10##x,_n3##y,z,c), \ - I[260] = (T)(img)(_p9##x,_n4##y,z,c), I[261] = (T)(img)(_p8##x,_n4##y,z,c), I[262] = (T)(img)(_p7##x,_n4##y,z,c), I[263] = (T)(img)(_p6##x,_n4##y,z,c), I[264] = (T)(img)(_p5##x,_n4##y,z,c), I[265] = (T)(img)(_p4##x,_n4##y,z,c), I[266] = (T)(img)(_p3##x,_n4##y,z,c), I[267] = (T)(img)(_p2##x,_n4##y,z,c), I[268] = (T)(img)(_p1##x,_n4##y,z,c), I[269] = (T)(img)(x,_n4##y,z,c), I[270] = (T)(img)(_n1##x,_n4##y,z,c), I[271] = (T)(img)(_n2##x,_n4##y,z,c), I[272] = (T)(img)(_n3##x,_n4##y,z,c), I[273] = (T)(img)(_n4##x,_n4##y,z,c), I[274] = (T)(img)(_n5##x,_n4##y,z,c), I[275] = (T)(img)(_n6##x,_n4##y,z,c), I[276] = (T)(img)(_n7##x,_n4##y,z,c), I[277] = (T)(img)(_n8##x,_n4##y,z,c), I[278] = (T)(img)(_n9##x,_n4##y,z,c), I[279] = (T)(img)(_n10##x,_n4##y,z,c), \ - I[280] = (T)(img)(_p9##x,_n5##y,z,c), I[281] = (T)(img)(_p8##x,_n5##y,z,c), I[282] = (T)(img)(_p7##x,_n5##y,z,c), I[283] = (T)(img)(_p6##x,_n5##y,z,c), I[284] = (T)(img)(_p5##x,_n5##y,z,c), I[285] = (T)(img)(_p4##x,_n5##y,z,c), I[286] = (T)(img)(_p3##x,_n5##y,z,c), I[287] = (T)(img)(_p2##x,_n5##y,z,c), I[288] = (T)(img)(_p1##x,_n5##y,z,c), I[289] = (T)(img)(x,_n5##y,z,c), I[290] = (T)(img)(_n1##x,_n5##y,z,c), I[291] = (T)(img)(_n2##x,_n5##y,z,c), I[292] = (T)(img)(_n3##x,_n5##y,z,c), I[293] = (T)(img)(_n4##x,_n5##y,z,c), I[294] = (T)(img)(_n5##x,_n5##y,z,c), I[295] = (T)(img)(_n6##x,_n5##y,z,c), I[296] = (T)(img)(_n7##x,_n5##y,z,c), I[297] = (T)(img)(_n8##x,_n5##y,z,c), I[298] = (T)(img)(_n9##x,_n5##y,z,c), I[299] = (T)(img)(_n10##x,_n5##y,z,c), \ - I[300] = (T)(img)(_p9##x,_n6##y,z,c), I[301] = (T)(img)(_p8##x,_n6##y,z,c), I[302] = (T)(img)(_p7##x,_n6##y,z,c), I[303] = (T)(img)(_p6##x,_n6##y,z,c), I[304] = (T)(img)(_p5##x,_n6##y,z,c), I[305] = (T)(img)(_p4##x,_n6##y,z,c), I[306] = (T)(img)(_p3##x,_n6##y,z,c), I[307] = (T)(img)(_p2##x,_n6##y,z,c), I[308] = (T)(img)(_p1##x,_n6##y,z,c), I[309] = (T)(img)(x,_n6##y,z,c), I[310] = (T)(img)(_n1##x,_n6##y,z,c), I[311] = (T)(img)(_n2##x,_n6##y,z,c), I[312] = (T)(img)(_n3##x,_n6##y,z,c), I[313] = (T)(img)(_n4##x,_n6##y,z,c), I[314] = (T)(img)(_n5##x,_n6##y,z,c), I[315] = (T)(img)(_n6##x,_n6##y,z,c), I[316] = (T)(img)(_n7##x,_n6##y,z,c), I[317] = (T)(img)(_n8##x,_n6##y,z,c), I[318] = (T)(img)(_n9##x,_n6##y,z,c), I[319] = (T)(img)(_n10##x,_n6##y,z,c), \ - I[320] = (T)(img)(_p9##x,_n7##y,z,c), I[321] = (T)(img)(_p8##x,_n7##y,z,c), I[322] = (T)(img)(_p7##x,_n7##y,z,c), I[323] = (T)(img)(_p6##x,_n7##y,z,c), I[324] = (T)(img)(_p5##x,_n7##y,z,c), I[325] = (T)(img)(_p4##x,_n7##y,z,c), I[326] = (T)(img)(_p3##x,_n7##y,z,c), I[327] = (T)(img)(_p2##x,_n7##y,z,c), I[328] = (T)(img)(_p1##x,_n7##y,z,c), I[329] = (T)(img)(x,_n7##y,z,c), I[330] = (T)(img)(_n1##x,_n7##y,z,c), I[331] = (T)(img)(_n2##x,_n7##y,z,c), I[332] = (T)(img)(_n3##x,_n7##y,z,c), I[333] = (T)(img)(_n4##x,_n7##y,z,c), I[334] = (T)(img)(_n5##x,_n7##y,z,c), I[335] = (T)(img)(_n6##x,_n7##y,z,c), I[336] = (T)(img)(_n7##x,_n7##y,z,c), I[337] = (T)(img)(_n8##x,_n7##y,z,c), I[338] = (T)(img)(_n9##x,_n7##y,z,c), I[339] = (T)(img)(_n10##x,_n7##y,z,c), \ - I[340] = (T)(img)(_p9##x,_n8##y,z,c), I[341] = (T)(img)(_p8##x,_n8##y,z,c), I[342] = (T)(img)(_p7##x,_n8##y,z,c), I[343] = (T)(img)(_p6##x,_n8##y,z,c), I[344] = (T)(img)(_p5##x,_n8##y,z,c), I[345] = (T)(img)(_p4##x,_n8##y,z,c), I[346] = (T)(img)(_p3##x,_n8##y,z,c), I[347] = (T)(img)(_p2##x,_n8##y,z,c), I[348] = (T)(img)(_p1##x,_n8##y,z,c), I[349] = (T)(img)(x,_n8##y,z,c), I[350] = (T)(img)(_n1##x,_n8##y,z,c), I[351] = (T)(img)(_n2##x,_n8##y,z,c), I[352] = (T)(img)(_n3##x,_n8##y,z,c), I[353] = (T)(img)(_n4##x,_n8##y,z,c), I[354] = (T)(img)(_n5##x,_n8##y,z,c), I[355] = (T)(img)(_n6##x,_n8##y,z,c), I[356] = (T)(img)(_n7##x,_n8##y,z,c), I[357] = (T)(img)(_n8##x,_n8##y,z,c), I[358] = (T)(img)(_n9##x,_n8##y,z,c), I[359] = (T)(img)(_n10##x,_n8##y,z,c), \ - I[360] = (T)(img)(_p9##x,_n9##y,z,c), I[361] = (T)(img)(_p8##x,_n9##y,z,c), I[362] = (T)(img)(_p7##x,_n9##y,z,c), I[363] = (T)(img)(_p6##x,_n9##y,z,c), I[364] = (T)(img)(_p5##x,_n9##y,z,c), I[365] = (T)(img)(_p4##x,_n9##y,z,c), I[366] = (T)(img)(_p3##x,_n9##y,z,c), I[367] = (T)(img)(_p2##x,_n9##y,z,c), I[368] = (T)(img)(_p1##x,_n9##y,z,c), I[369] = (T)(img)(x,_n9##y,z,c), I[370] = (T)(img)(_n1##x,_n9##y,z,c), I[371] = (T)(img)(_n2##x,_n9##y,z,c), I[372] = (T)(img)(_n3##x,_n9##y,z,c), I[373] = (T)(img)(_n4##x,_n9##y,z,c), I[374] = (T)(img)(_n5##x,_n9##y,z,c), I[375] = (T)(img)(_n6##x,_n9##y,z,c), I[376] = (T)(img)(_n7##x,_n9##y,z,c), I[377] = (T)(img)(_n8##x,_n9##y,z,c), I[378] = (T)(img)(_n9##x,_n9##y,z,c), I[379] = (T)(img)(_n10##x,_n9##y,z,c), \ - I[380] = (T)(img)(_p9##x,_n10##y,z,c), I[381] = (T)(img)(_p8##x,_n10##y,z,c), I[382] = (T)(img)(_p7##x,_n10##y,z,c), I[383] = (T)(img)(_p6##x,_n10##y,z,c), I[384] = (T)(img)(_p5##x,_n10##y,z,c), I[385] = (T)(img)(_p4##x,_n10##y,z,c), I[386] = (T)(img)(_p3##x,_n10##y,z,c), I[387] = (T)(img)(_p2##x,_n10##y,z,c), I[388] = (T)(img)(_p1##x,_n10##y,z,c), I[389] = (T)(img)(x,_n10##y,z,c), I[390] = (T)(img)(_n1##x,_n10##y,z,c), I[391] = (T)(img)(_n2##x,_n10##y,z,c), I[392] = (T)(img)(_n3##x,_n10##y,z,c), I[393] = (T)(img)(_n4##x,_n10##y,z,c), I[394] = (T)(img)(_n5##x,_n10##y,z,c), I[395] = (T)(img)(_n6##x,_n10##y,z,c), I[396] = (T)(img)(_n7##x,_n10##y,z,c), I[397] = (T)(img)(_n8##x,_n10##y,z,c), I[398] = (T)(img)(_n9##x,_n10##y,z,c), I[399] = (T)(img)(_n10##x,_n10##y,z,c); - -// Define 21x21 loop macros -//------------------------- -#define cimg_for21(bound,i) for (int i = 0, \ - _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10; \ - _n10##i<(int)(bound) || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i) - -#define cimg_for21X(img,x) cimg_for21((img)._width,x) -#define cimg_for21Y(img,y) cimg_for21((img)._height,y) -#define cimg_for21Z(img,z) cimg_for21((img)._depth,z) -#define cimg_for21C(img,c) cimg_for21((img)._spectrum,c) -#define cimg_for21XY(img,x,y) cimg_for21Y(img,y) cimg_for21X(img,x) -#define cimg_for21XZ(img,x,z) cimg_for21Z(img,z) cimg_for21X(img,x) -#define cimg_for21XC(img,x,c) cimg_for21C(img,c) cimg_for21X(img,x) -#define cimg_for21YZ(img,y,z) cimg_for21Z(img,z) cimg_for21Y(img,y) -#define cimg_for21YC(img,y,c) cimg_for21C(img,c) cimg_for21Y(img,y) -#define cimg_for21ZC(img,z,c) cimg_for21C(img,c) cimg_for21Z(img,z) -#define cimg_for21XYZ(img,x,y,z) cimg_for21Z(img,z) cimg_for21XY(img,x,y) -#define cimg_for21XZC(img,x,z,c) cimg_for21C(img,c) cimg_for21XZ(img,x,z) -#define cimg_for21YZC(img,y,z,c) cimg_for21C(img,c) cimg_for21YZ(img,y,z) -#define cimg_for21XYZC(img,x,y,z,c) cimg_for21C(img,c) cimg_for21XYZ(img,x,y,z) - -#define cimg_for_in21(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10; \ - i<=(int)(i1) && (_n10##i<(int)(bound) || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i) - -#define cimg_for_in21X(img,x0,x1,x) cimg_for_in21((img)._width,x0,x1,x) -#define cimg_for_in21Y(img,y0,y1,y) cimg_for_in21((img)._height,y0,y1,y) -#define cimg_for_in21Z(img,z0,z1,z) cimg_for_in21((img)._depth,z0,z1,z) -#define cimg_for_in21C(img,c0,c1,c) cimg_for_in21((img)._spectrum,c0,c1,c) -#define cimg_for_in21XY(img,x0,y0,x1,y1,x,y) cimg_for_in21Y(img,y0,y1,y) cimg_for_in21X(img,x0,x1,x) -#define cimg_for_in21XZ(img,x0,z0,x1,z1,x,z) cimg_for_in21Z(img,z0,z1,z) cimg_for_in21X(img,x0,x1,x) -#define cimg_for_in21XC(img,x0,c0,x1,c1,x,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21X(img,x0,x1,x) -#define cimg_for_in21YZ(img,y0,z0,y1,z1,y,z) cimg_for_in21Z(img,z0,z1,z) cimg_for_in21Y(img,y0,y1,y) -#define cimg_for_in21YC(img,y0,c0,y1,c1,y,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21Y(img,y0,y1,y) -#define cimg_for_in21ZC(img,z0,c0,z1,c1,z,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21Z(img,z0,z1,z) -#define cimg_for_in21XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in21Z(img,z0,z1,z) cimg_for_in21XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in21XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in21YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in21XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in21C(img,c0,c1,c) cimg_for_in21XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for21x21(img,x,y,z,c,I,T) \ - cimg_for21((img)._height,y) for (int x = 0, \ - _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p10##y,z,c)), \ - (I[21] = I[22] = I[23] = I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_p9##y,z,c)), \ - (I[42] = I[43] = I[44] = I[45] = I[46] = I[47] = I[48] = I[49] = I[50] = I[51] = I[52] = (T)(img)(0,_p8##y,z,c)), \ - (I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = (T)(img)(0,_p7##y,z,c)), \ - (I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = I[94] = (T)(img)(0,_p6##y,z,c)), \ - (I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = (T)(img)(0,_p5##y,z,c)), \ - (I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = (T)(img)(0,_p4##y,z,c)), \ - (I[147] = I[148] = I[149] = I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = (T)(img)(0,_p3##y,z,c)), \ - (I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = I[176] = I[177] = I[178] = (T)(img)(0,_p2##y,z,c)), \ - (I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = (T)(img)(0,_p1##y,z,c)), \ - (I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = I[218] = I[219] = I[220] = (T)(img)(0,y,z,c)), \ - (I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = I[240] = I[241] = (T)(img)(0,_n1##y,z,c)), \ - (I[252] = I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = (T)(img)(0,_n2##y,z,c)), \ - (I[273] = I[274] = I[275] = I[276] = I[277] = I[278] = I[279] = I[280] = I[281] = I[282] = I[283] = (T)(img)(0,_n3##y,z,c)), \ - (I[294] = I[295] = I[296] = I[297] = I[298] = I[299] = I[300] = I[301] = I[302] = I[303] = I[304] = (T)(img)(0,_n4##y,z,c)), \ - (I[315] = I[316] = I[317] = I[318] = I[319] = I[320] = I[321] = I[322] = I[323] = I[324] = I[325] = (T)(img)(0,_n5##y,z,c)), \ - (I[336] = I[337] = I[338] = I[339] = I[340] = I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = (T)(img)(0,_n6##y,z,c)), \ - (I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = I[363] = I[364] = I[365] = I[366] = I[367] = (T)(img)(0,_n7##y,z,c)), \ - (I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = I[388] = (T)(img)(0,_n8##y,z,c)), \ - (I[399] = I[400] = I[401] = I[402] = I[403] = I[404] = I[405] = I[406] = I[407] = I[408] = I[409] = (T)(img)(0,_n9##y,z,c)), \ - (I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = I[429] = I[430] = (T)(img)(0,_n10##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[53] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[74] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[116] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[137] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[221] = (T)(img)(_n1##x,y,z,c)), \ - (I[242] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[263] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[284] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[305] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[326] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[347] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[368] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[389] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[410] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[431] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[54] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[75] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[117] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[138] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[222] = (T)(img)(_n2##x,y,z,c)), \ - (I[243] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[264] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[285] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[306] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[327] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[348] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[369] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[390] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[411] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[432] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[55] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[76] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[118] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[139] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[223] = (T)(img)(_n3##x,y,z,c)), \ - (I[244] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[265] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[286] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[307] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[328] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[349] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[370] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[391] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[412] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[433] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[14] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[35] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[56] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[77] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[119] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[140] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[161] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[182] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[224] = (T)(img)(_n4##x,y,z,c)), \ - (I[245] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[266] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[287] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[308] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[329] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[350] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[371] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[392] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[413] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[434] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[15] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[36] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[57] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[78] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[120] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[141] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[162] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[183] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[225] = (T)(img)(_n5##x,y,z,c)), \ - (I[246] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[267] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[288] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[309] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[330] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[351] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[372] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[393] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[414] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[435] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[16] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[37] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[58] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[79] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[100] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[121] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[142] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[163] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[184] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[226] = (T)(img)(_n6##x,y,z,c)), \ - (I[247] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[268] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[289] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[310] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[331] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[352] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[373] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[394] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[415] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[436] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[17] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[38] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[59] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[80] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[101] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[122] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[143] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[164] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[185] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[227] = (T)(img)(_n7##x,y,z,c)), \ - (I[248] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[269] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[290] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[311] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[332] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[353] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[374] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[395] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[416] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[437] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[18] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[39] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[60] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[81] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[102] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[123] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[144] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[165] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[186] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[228] = (T)(img)(_n8##x,y,z,c)), \ - (I[249] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[270] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[291] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[312] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[333] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[354] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[375] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[396] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[417] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[438] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[19] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[40] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[61] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[82] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[103] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[124] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[145] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[166] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[187] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[208] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[229] = (T)(img)(_n9##x,y,z,c)), \ - (I[250] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[271] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[292] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[313] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[334] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[355] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[376] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[397] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[418] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[439] = (T)(img)(_n9##x,_n10##y,z,c)), \ - 10>=((img)._width)?(img).width()-1:10); \ - (_n10##x<(img).width() && ( \ - (I[20] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[41] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[62] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[83] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[104] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[125] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[146] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[167] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[188] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[209] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[230] = (T)(img)(_n10##x,y,z,c)), \ - (I[251] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[272] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[293] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[314] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[335] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[356] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[377] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[398] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[419] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[440] = (T)(img)(_n10##x,_n10##y,z,c)),1)) || \ - _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], \ - I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], \ - I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], \ - I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], \ - I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], \ - I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], \ - I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], \ - I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], \ - I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], \ - _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x) - -#define cimg_for_in21x21(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in21((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = (int)( \ - (I[0] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[21] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[42] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[63] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[84] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[105] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[126] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[147] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[168] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[189] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[210] = (T)(img)(_p10##x,y,z,c)), \ - (I[231] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[252] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[273] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[294] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[315] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[336] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[357] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[378] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[399] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[420] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[1] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[22] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[43] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[64] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[85] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[106] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[127] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[148] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[169] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[190] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[211] = (T)(img)(_p9##x,y,z,c)), \ - (I[232] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[253] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[274] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[295] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[316] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[337] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[358] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[379] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[400] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[421] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[2] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[23] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[44] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[65] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[86] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[107] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[128] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[149] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[170] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[191] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[212] = (T)(img)(_p8##x,y,z,c)), \ - (I[233] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[254] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[275] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[296] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[317] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[338] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[359] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[380] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[401] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[422] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[3] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[24] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[45] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[66] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[87] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[108] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[129] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[150] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[171] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[192] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[213] = (T)(img)(_p7##x,y,z,c)), \ - (I[234] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[255] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[276] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[297] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[318] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[339] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[360] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[381] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[402] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[423] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[4] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[25] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[46] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[67] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[88] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[109] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[130] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[151] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[172] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[193] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[214] = (T)(img)(_p6##x,y,z,c)), \ - (I[235] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[256] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[277] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[298] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[319] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[340] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[361] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[382] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[403] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[424] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[5] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[26] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[47] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[68] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[89] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[110] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[131] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[152] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[173] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[194] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[215] = (T)(img)(_p5##x,y,z,c)), \ - (I[236] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[257] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[278] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[299] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[320] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[341] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[362] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[383] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[404] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[425] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[6] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[27] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[48] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[69] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[90] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[111] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[132] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[153] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[174] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[195] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[216] = (T)(img)(_p4##x,y,z,c)), \ - (I[237] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[258] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[279] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[300] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[321] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[342] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[363] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[384] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[405] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[426] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[7] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[28] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[49] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[70] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[91] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[112] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[133] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[154] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[175] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[196] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[217] = (T)(img)(_p3##x,y,z,c)), \ - (I[238] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[259] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[280] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[301] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[322] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[343] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[364] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[385] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[406] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[427] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[8] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[29] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[50] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[71] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[92] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[113] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[134] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[155] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[176] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[197] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[218] = (T)(img)(_p2##x,y,z,c)), \ - (I[239] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[260] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[281] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[302] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[323] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[344] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[365] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[386] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[407] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[428] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[9] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[30] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[51] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[72] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[93] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[114] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[135] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[156] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[177] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[198] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[219] = (T)(img)(_p1##x,y,z,c)), \ - (I[240] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[261] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[282] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[303] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[324] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[345] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[366] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[387] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[408] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[429] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[10] = (T)(img)(x,_p10##y,z,c)), \ - (I[31] = (T)(img)(x,_p9##y,z,c)), \ - (I[52] = (T)(img)(x,_p8##y,z,c)), \ - (I[73] = (T)(img)(x,_p7##y,z,c)), \ - (I[94] = (T)(img)(x,_p6##y,z,c)), \ - (I[115] = (T)(img)(x,_p5##y,z,c)), \ - (I[136] = (T)(img)(x,_p4##y,z,c)), \ - (I[157] = (T)(img)(x,_p3##y,z,c)), \ - (I[178] = (T)(img)(x,_p2##y,z,c)), \ - (I[199] = (T)(img)(x,_p1##y,z,c)), \ - (I[220] = (T)(img)(x,y,z,c)), \ - (I[241] = (T)(img)(x,_n1##y,z,c)), \ - (I[262] = (T)(img)(x,_n2##y,z,c)), \ - (I[283] = (T)(img)(x,_n3##y,z,c)), \ - (I[304] = (T)(img)(x,_n4##y,z,c)), \ - (I[325] = (T)(img)(x,_n5##y,z,c)), \ - (I[346] = (T)(img)(x,_n6##y,z,c)), \ - (I[367] = (T)(img)(x,_n7##y,z,c)), \ - (I[388] = (T)(img)(x,_n8##y,z,c)), \ - (I[409] = (T)(img)(x,_n9##y,z,c)), \ - (I[430] = (T)(img)(x,_n10##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[32] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[53] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[74] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[116] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[137] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[221] = (T)(img)(_n1##x,y,z,c)), \ - (I[242] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[263] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[284] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[305] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[326] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[347] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[368] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[389] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[410] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[431] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[33] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[54] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[75] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[117] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[138] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[222] = (T)(img)(_n2##x,y,z,c)), \ - (I[243] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[264] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[285] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[306] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[327] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[348] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[369] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[390] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[411] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[432] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[34] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[55] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[76] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[118] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[139] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[223] = (T)(img)(_n3##x,y,z,c)), \ - (I[244] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[265] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[286] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[307] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[328] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[349] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[370] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[391] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[412] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[433] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[14] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[35] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[56] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[77] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[119] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[140] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[161] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[182] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[203] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[224] = (T)(img)(_n4##x,y,z,c)), \ - (I[245] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[266] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[287] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[308] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[329] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[350] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[371] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[392] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[413] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[434] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[15] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[36] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[57] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[78] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[120] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[141] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[162] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[183] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[204] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[225] = (T)(img)(_n5##x,y,z,c)), \ - (I[246] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[267] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[288] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[309] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[330] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[351] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[372] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[393] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[414] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[435] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[16] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[37] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[58] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[79] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[100] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[121] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[142] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[163] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[184] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[205] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[226] = (T)(img)(_n6##x,y,z,c)), \ - (I[247] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[268] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[289] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[310] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[331] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[352] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[373] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[394] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[415] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[436] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[17] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[38] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[59] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[80] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[101] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[122] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[143] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[164] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[185] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[206] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[227] = (T)(img)(_n7##x,y,z,c)), \ - (I[248] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[269] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[290] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[311] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[332] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[353] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[374] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[395] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[416] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[437] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[18] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[39] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[60] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[81] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[102] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[123] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[144] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[165] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[186] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[207] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[228] = (T)(img)(_n8##x,y,z,c)), \ - (I[249] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[270] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[291] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[312] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[333] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[354] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[375] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[396] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[417] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[438] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[19] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[40] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[61] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[82] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[103] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[124] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[145] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[166] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[187] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[208] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[229] = (T)(img)(_n9##x,y,z,c)), \ - (I[250] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[271] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[292] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[313] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[334] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[355] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[376] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[397] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[418] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[439] = (T)(img)(_n9##x,_n10##y,z,c)), \ - x+10>=(img).width()?(img).width()-1:x+10); \ - x<=(int)(x1) && ((_n10##x<(img).width() && ( \ - (I[20] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[41] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[62] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[83] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[104] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[125] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[146] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[167] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[188] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[209] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[230] = (T)(img)(_n10##x,y,z,c)), \ - (I[251] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[272] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[293] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[314] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[335] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[356] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[377] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[398] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[419] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[440] = (T)(img)(_n10##x,_n10##y,z,c)),1)) || \ - _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], \ - I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], \ - I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], \ - I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], \ - I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], \ - I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], \ - I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], \ - I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], \ - I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], \ - _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x) - -#define cimg_get21x21(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p10##x,_p10##y,z,c), I[1] = (T)(img)(_p9##x,_p10##y,z,c), I[2] = (T)(img)(_p8##x,_p10##y,z,c), I[3] = (T)(img)(_p7##x,_p10##y,z,c), I[4] = (T)(img)(_p6##x,_p10##y,z,c), I[5] = (T)(img)(_p5##x,_p10##y,z,c), I[6] = (T)(img)(_p4##x,_p10##y,z,c), I[7] = (T)(img)(_p3##x,_p10##y,z,c), I[8] = (T)(img)(_p2##x,_p10##y,z,c), I[9] = (T)(img)(_p1##x,_p10##y,z,c), I[10] = (T)(img)(x,_p10##y,z,c), I[11] = (T)(img)(_n1##x,_p10##y,z,c), I[12] = (T)(img)(_n2##x,_p10##y,z,c), I[13] = (T)(img)(_n3##x,_p10##y,z,c), I[14] = (T)(img)(_n4##x,_p10##y,z,c), I[15] = (T)(img)(_n5##x,_p10##y,z,c), I[16] = (T)(img)(_n6##x,_p10##y,z,c), I[17] = (T)(img)(_n7##x,_p10##y,z,c), I[18] = (T)(img)(_n8##x,_p10##y,z,c), I[19] = (T)(img)(_n9##x,_p10##y,z,c), I[20] = (T)(img)(_n10##x,_p10##y,z,c), \ - I[21] = (T)(img)(_p10##x,_p9##y,z,c), I[22] = (T)(img)(_p9##x,_p9##y,z,c), I[23] = (T)(img)(_p8##x,_p9##y,z,c), I[24] = (T)(img)(_p7##x,_p9##y,z,c), I[25] = (T)(img)(_p6##x,_p9##y,z,c), I[26] = (T)(img)(_p5##x,_p9##y,z,c), I[27] = (T)(img)(_p4##x,_p9##y,z,c), I[28] = (T)(img)(_p3##x,_p9##y,z,c), I[29] = (T)(img)(_p2##x,_p9##y,z,c), I[30] = (T)(img)(_p1##x,_p9##y,z,c), I[31] = (T)(img)(x,_p9##y,z,c), I[32] = (T)(img)(_n1##x,_p9##y,z,c), I[33] = (T)(img)(_n2##x,_p9##y,z,c), I[34] = (T)(img)(_n3##x,_p9##y,z,c), I[35] = (T)(img)(_n4##x,_p9##y,z,c), I[36] = (T)(img)(_n5##x,_p9##y,z,c), I[37] = (T)(img)(_n6##x,_p9##y,z,c), I[38] = (T)(img)(_n7##x,_p9##y,z,c), I[39] = (T)(img)(_n8##x,_p9##y,z,c), I[40] = (T)(img)(_n9##x,_p9##y,z,c), I[41] = (T)(img)(_n10##x,_p9##y,z,c), \ - I[42] = (T)(img)(_p10##x,_p8##y,z,c), I[43] = (T)(img)(_p9##x,_p8##y,z,c), I[44] = (T)(img)(_p8##x,_p8##y,z,c), I[45] = (T)(img)(_p7##x,_p8##y,z,c), I[46] = (T)(img)(_p6##x,_p8##y,z,c), I[47] = (T)(img)(_p5##x,_p8##y,z,c), I[48] = (T)(img)(_p4##x,_p8##y,z,c), I[49] = (T)(img)(_p3##x,_p8##y,z,c), I[50] = (T)(img)(_p2##x,_p8##y,z,c), I[51] = (T)(img)(_p1##x,_p8##y,z,c), I[52] = (T)(img)(x,_p8##y,z,c), I[53] = (T)(img)(_n1##x,_p8##y,z,c), I[54] = (T)(img)(_n2##x,_p8##y,z,c), I[55] = (T)(img)(_n3##x,_p8##y,z,c), I[56] = (T)(img)(_n4##x,_p8##y,z,c), I[57] = (T)(img)(_n5##x,_p8##y,z,c), I[58] = (T)(img)(_n6##x,_p8##y,z,c), I[59] = (T)(img)(_n7##x,_p8##y,z,c), I[60] = (T)(img)(_n8##x,_p8##y,z,c), I[61] = (T)(img)(_n9##x,_p8##y,z,c), I[62] = (T)(img)(_n10##x,_p8##y,z,c), \ - I[63] = (T)(img)(_p10##x,_p7##y,z,c), I[64] = (T)(img)(_p9##x,_p7##y,z,c), I[65] = (T)(img)(_p8##x,_p7##y,z,c), I[66] = (T)(img)(_p7##x,_p7##y,z,c), I[67] = (T)(img)(_p6##x,_p7##y,z,c), I[68] = (T)(img)(_p5##x,_p7##y,z,c), I[69] = (T)(img)(_p4##x,_p7##y,z,c), I[70] = (T)(img)(_p3##x,_p7##y,z,c), I[71] = (T)(img)(_p2##x,_p7##y,z,c), I[72] = (T)(img)(_p1##x,_p7##y,z,c), I[73] = (T)(img)(x,_p7##y,z,c), I[74] = (T)(img)(_n1##x,_p7##y,z,c), I[75] = (T)(img)(_n2##x,_p7##y,z,c), I[76] = (T)(img)(_n3##x,_p7##y,z,c), I[77] = (T)(img)(_n4##x,_p7##y,z,c), I[78] = (T)(img)(_n5##x,_p7##y,z,c), I[79] = (T)(img)(_n6##x,_p7##y,z,c), I[80] = (T)(img)(_n7##x,_p7##y,z,c), I[81] = (T)(img)(_n8##x,_p7##y,z,c), I[82] = (T)(img)(_n9##x,_p7##y,z,c), I[83] = (T)(img)(_n10##x,_p7##y,z,c), \ - I[84] = (T)(img)(_p10##x,_p6##y,z,c), I[85] = (T)(img)(_p9##x,_p6##y,z,c), I[86] = (T)(img)(_p8##x,_p6##y,z,c), I[87] = (T)(img)(_p7##x,_p6##y,z,c), I[88] = (T)(img)(_p6##x,_p6##y,z,c), I[89] = (T)(img)(_p5##x,_p6##y,z,c), I[90] = (T)(img)(_p4##x,_p6##y,z,c), I[91] = (T)(img)(_p3##x,_p6##y,z,c), I[92] = (T)(img)(_p2##x,_p6##y,z,c), I[93] = (T)(img)(_p1##x,_p6##y,z,c), I[94] = (T)(img)(x,_p6##y,z,c), I[95] = (T)(img)(_n1##x,_p6##y,z,c), I[96] = (T)(img)(_n2##x,_p6##y,z,c), I[97] = (T)(img)(_n3##x,_p6##y,z,c), I[98] = (T)(img)(_n4##x,_p6##y,z,c), I[99] = (T)(img)(_n5##x,_p6##y,z,c), I[100] = (T)(img)(_n6##x,_p6##y,z,c), I[101] = (T)(img)(_n7##x,_p6##y,z,c), I[102] = (T)(img)(_n8##x,_p6##y,z,c), I[103] = (T)(img)(_n9##x,_p6##y,z,c), I[104] = (T)(img)(_n10##x,_p6##y,z,c), \ - I[105] = (T)(img)(_p10##x,_p5##y,z,c), I[106] = (T)(img)(_p9##x,_p5##y,z,c), I[107] = (T)(img)(_p8##x,_p5##y,z,c), I[108] = (T)(img)(_p7##x,_p5##y,z,c), I[109] = (T)(img)(_p6##x,_p5##y,z,c), I[110] = (T)(img)(_p5##x,_p5##y,z,c), I[111] = (T)(img)(_p4##x,_p5##y,z,c), I[112] = (T)(img)(_p3##x,_p5##y,z,c), I[113] = (T)(img)(_p2##x,_p5##y,z,c), I[114] = (T)(img)(_p1##x,_p5##y,z,c), I[115] = (T)(img)(x,_p5##y,z,c), I[116] = (T)(img)(_n1##x,_p5##y,z,c), I[117] = (T)(img)(_n2##x,_p5##y,z,c), I[118] = (T)(img)(_n3##x,_p5##y,z,c), I[119] = (T)(img)(_n4##x,_p5##y,z,c), I[120] = (T)(img)(_n5##x,_p5##y,z,c), I[121] = (T)(img)(_n6##x,_p5##y,z,c), I[122] = (T)(img)(_n7##x,_p5##y,z,c), I[123] = (T)(img)(_n8##x,_p5##y,z,c), I[124] = (T)(img)(_n9##x,_p5##y,z,c), I[125] = (T)(img)(_n10##x,_p5##y,z,c), \ - I[126] = (T)(img)(_p10##x,_p4##y,z,c), I[127] = (T)(img)(_p9##x,_p4##y,z,c), I[128] = (T)(img)(_p8##x,_p4##y,z,c), I[129] = (T)(img)(_p7##x,_p4##y,z,c), I[130] = (T)(img)(_p6##x,_p4##y,z,c), I[131] = (T)(img)(_p5##x,_p4##y,z,c), I[132] = (T)(img)(_p4##x,_p4##y,z,c), I[133] = (T)(img)(_p3##x,_p4##y,z,c), I[134] = (T)(img)(_p2##x,_p4##y,z,c), I[135] = (T)(img)(_p1##x,_p4##y,z,c), I[136] = (T)(img)(x,_p4##y,z,c), I[137] = (T)(img)(_n1##x,_p4##y,z,c), I[138] = (T)(img)(_n2##x,_p4##y,z,c), I[139] = (T)(img)(_n3##x,_p4##y,z,c), I[140] = (T)(img)(_n4##x,_p4##y,z,c), I[141] = (T)(img)(_n5##x,_p4##y,z,c), I[142] = (T)(img)(_n6##x,_p4##y,z,c), I[143] = (T)(img)(_n7##x,_p4##y,z,c), I[144] = (T)(img)(_n8##x,_p4##y,z,c), I[145] = (T)(img)(_n9##x,_p4##y,z,c), I[146] = (T)(img)(_n10##x,_p4##y,z,c), \ - I[147] = (T)(img)(_p10##x,_p3##y,z,c), I[148] = (T)(img)(_p9##x,_p3##y,z,c), I[149] = (T)(img)(_p8##x,_p3##y,z,c), I[150] = (T)(img)(_p7##x,_p3##y,z,c), I[151] = (T)(img)(_p6##x,_p3##y,z,c), I[152] = (T)(img)(_p5##x,_p3##y,z,c), I[153] = (T)(img)(_p4##x,_p3##y,z,c), I[154] = (T)(img)(_p3##x,_p3##y,z,c), I[155] = (T)(img)(_p2##x,_p3##y,z,c), I[156] = (T)(img)(_p1##x,_p3##y,z,c), I[157] = (T)(img)(x,_p3##y,z,c), I[158] = (T)(img)(_n1##x,_p3##y,z,c), I[159] = (T)(img)(_n2##x,_p3##y,z,c), I[160] = (T)(img)(_n3##x,_p3##y,z,c), I[161] = (T)(img)(_n4##x,_p3##y,z,c), I[162] = (T)(img)(_n5##x,_p3##y,z,c), I[163] = (T)(img)(_n6##x,_p3##y,z,c), I[164] = (T)(img)(_n7##x,_p3##y,z,c), I[165] = (T)(img)(_n8##x,_p3##y,z,c), I[166] = (T)(img)(_n9##x,_p3##y,z,c), I[167] = (T)(img)(_n10##x,_p3##y,z,c), \ - I[168] = (T)(img)(_p10##x,_p2##y,z,c), I[169] = (T)(img)(_p9##x,_p2##y,z,c), I[170] = (T)(img)(_p8##x,_p2##y,z,c), I[171] = (T)(img)(_p7##x,_p2##y,z,c), I[172] = (T)(img)(_p6##x,_p2##y,z,c), I[173] = (T)(img)(_p5##x,_p2##y,z,c), I[174] = (T)(img)(_p4##x,_p2##y,z,c), I[175] = (T)(img)(_p3##x,_p2##y,z,c), I[176] = (T)(img)(_p2##x,_p2##y,z,c), I[177] = (T)(img)(_p1##x,_p2##y,z,c), I[178] = (T)(img)(x,_p2##y,z,c), I[179] = (T)(img)(_n1##x,_p2##y,z,c), I[180] = (T)(img)(_n2##x,_p2##y,z,c), I[181] = (T)(img)(_n3##x,_p2##y,z,c), I[182] = (T)(img)(_n4##x,_p2##y,z,c), I[183] = (T)(img)(_n5##x,_p2##y,z,c), I[184] = (T)(img)(_n6##x,_p2##y,z,c), I[185] = (T)(img)(_n7##x,_p2##y,z,c), I[186] = (T)(img)(_n8##x,_p2##y,z,c), I[187] = (T)(img)(_n9##x,_p2##y,z,c), I[188] = (T)(img)(_n10##x,_p2##y,z,c), \ - I[189] = (T)(img)(_p10##x,_p1##y,z,c), I[190] = (T)(img)(_p9##x,_p1##y,z,c), I[191] = (T)(img)(_p8##x,_p1##y,z,c), I[192] = (T)(img)(_p7##x,_p1##y,z,c), I[193] = (T)(img)(_p6##x,_p1##y,z,c), I[194] = (T)(img)(_p5##x,_p1##y,z,c), I[195] = (T)(img)(_p4##x,_p1##y,z,c), I[196] = (T)(img)(_p3##x,_p1##y,z,c), I[197] = (T)(img)(_p2##x,_p1##y,z,c), I[198] = (T)(img)(_p1##x,_p1##y,z,c), I[199] = (T)(img)(x,_p1##y,z,c), I[200] = (T)(img)(_n1##x,_p1##y,z,c), I[201] = (T)(img)(_n2##x,_p1##y,z,c), I[202] = (T)(img)(_n3##x,_p1##y,z,c), I[203] = (T)(img)(_n4##x,_p1##y,z,c), I[204] = (T)(img)(_n5##x,_p1##y,z,c), I[205] = (T)(img)(_n6##x,_p1##y,z,c), I[206] = (T)(img)(_n7##x,_p1##y,z,c), I[207] = (T)(img)(_n8##x,_p1##y,z,c), I[208] = (T)(img)(_n9##x,_p1##y,z,c), I[209] = (T)(img)(_n10##x,_p1##y,z,c), \ - I[210] = (T)(img)(_p10##x,y,z,c), I[211] = (T)(img)(_p9##x,y,z,c), I[212] = (T)(img)(_p8##x,y,z,c), I[213] = (T)(img)(_p7##x,y,z,c), I[214] = (T)(img)(_p6##x,y,z,c), I[215] = (T)(img)(_p5##x,y,z,c), I[216] = (T)(img)(_p4##x,y,z,c), I[217] = (T)(img)(_p3##x,y,z,c), I[218] = (T)(img)(_p2##x,y,z,c), I[219] = (T)(img)(_p1##x,y,z,c), I[220] = (T)(img)(x,y,z,c), I[221] = (T)(img)(_n1##x,y,z,c), I[222] = (T)(img)(_n2##x,y,z,c), I[223] = (T)(img)(_n3##x,y,z,c), I[224] = (T)(img)(_n4##x,y,z,c), I[225] = (T)(img)(_n5##x,y,z,c), I[226] = (T)(img)(_n6##x,y,z,c), I[227] = (T)(img)(_n7##x,y,z,c), I[228] = (T)(img)(_n8##x,y,z,c), I[229] = (T)(img)(_n9##x,y,z,c), I[230] = (T)(img)(_n10##x,y,z,c), \ - I[231] = (T)(img)(_p10##x,_n1##y,z,c), I[232] = (T)(img)(_p9##x,_n1##y,z,c), I[233] = (T)(img)(_p8##x,_n1##y,z,c), I[234] = (T)(img)(_p7##x,_n1##y,z,c), I[235] = (T)(img)(_p6##x,_n1##y,z,c), I[236] = (T)(img)(_p5##x,_n1##y,z,c), I[237] = (T)(img)(_p4##x,_n1##y,z,c), I[238] = (T)(img)(_p3##x,_n1##y,z,c), I[239] = (T)(img)(_p2##x,_n1##y,z,c), I[240] = (T)(img)(_p1##x,_n1##y,z,c), I[241] = (T)(img)(x,_n1##y,z,c), I[242] = (T)(img)(_n1##x,_n1##y,z,c), I[243] = (T)(img)(_n2##x,_n1##y,z,c), I[244] = (T)(img)(_n3##x,_n1##y,z,c), I[245] = (T)(img)(_n4##x,_n1##y,z,c), I[246] = (T)(img)(_n5##x,_n1##y,z,c), I[247] = (T)(img)(_n6##x,_n1##y,z,c), I[248] = (T)(img)(_n7##x,_n1##y,z,c), I[249] = (T)(img)(_n8##x,_n1##y,z,c), I[250] = (T)(img)(_n9##x,_n1##y,z,c), I[251] = (T)(img)(_n10##x,_n1##y,z,c), \ - I[252] = (T)(img)(_p10##x,_n2##y,z,c), I[253] = (T)(img)(_p9##x,_n2##y,z,c), I[254] = (T)(img)(_p8##x,_n2##y,z,c), I[255] = (T)(img)(_p7##x,_n2##y,z,c), I[256] = (T)(img)(_p6##x,_n2##y,z,c), I[257] = (T)(img)(_p5##x,_n2##y,z,c), I[258] = (T)(img)(_p4##x,_n2##y,z,c), I[259] = (T)(img)(_p3##x,_n2##y,z,c), I[260] = (T)(img)(_p2##x,_n2##y,z,c), I[261] = (T)(img)(_p1##x,_n2##y,z,c), I[262] = (T)(img)(x,_n2##y,z,c), I[263] = (T)(img)(_n1##x,_n2##y,z,c), I[264] = (T)(img)(_n2##x,_n2##y,z,c), I[265] = (T)(img)(_n3##x,_n2##y,z,c), I[266] = (T)(img)(_n4##x,_n2##y,z,c), I[267] = (T)(img)(_n5##x,_n2##y,z,c), I[268] = (T)(img)(_n6##x,_n2##y,z,c), I[269] = (T)(img)(_n7##x,_n2##y,z,c), I[270] = (T)(img)(_n8##x,_n2##y,z,c), I[271] = (T)(img)(_n9##x,_n2##y,z,c), I[272] = (T)(img)(_n10##x,_n2##y,z,c), \ - I[273] = (T)(img)(_p10##x,_n3##y,z,c), I[274] = (T)(img)(_p9##x,_n3##y,z,c), I[275] = (T)(img)(_p8##x,_n3##y,z,c), I[276] = (T)(img)(_p7##x,_n3##y,z,c), I[277] = (T)(img)(_p6##x,_n3##y,z,c), I[278] = (T)(img)(_p5##x,_n3##y,z,c), I[279] = (T)(img)(_p4##x,_n3##y,z,c), I[280] = (T)(img)(_p3##x,_n3##y,z,c), I[281] = (T)(img)(_p2##x,_n3##y,z,c), I[282] = (T)(img)(_p1##x,_n3##y,z,c), I[283] = (T)(img)(x,_n3##y,z,c), I[284] = (T)(img)(_n1##x,_n3##y,z,c), I[285] = (T)(img)(_n2##x,_n3##y,z,c), I[286] = (T)(img)(_n3##x,_n3##y,z,c), I[287] = (T)(img)(_n4##x,_n3##y,z,c), I[288] = (T)(img)(_n5##x,_n3##y,z,c), I[289] = (T)(img)(_n6##x,_n3##y,z,c), I[290] = (T)(img)(_n7##x,_n3##y,z,c), I[291] = (T)(img)(_n8##x,_n3##y,z,c), I[292] = (T)(img)(_n9##x,_n3##y,z,c), I[293] = (T)(img)(_n10##x,_n3##y,z,c), \ - I[294] = (T)(img)(_p10##x,_n4##y,z,c), I[295] = (T)(img)(_p9##x,_n4##y,z,c), I[296] = (T)(img)(_p8##x,_n4##y,z,c), I[297] = (T)(img)(_p7##x,_n4##y,z,c), I[298] = (T)(img)(_p6##x,_n4##y,z,c), I[299] = (T)(img)(_p5##x,_n4##y,z,c), I[300] = (T)(img)(_p4##x,_n4##y,z,c), I[301] = (T)(img)(_p3##x,_n4##y,z,c), I[302] = (T)(img)(_p2##x,_n4##y,z,c), I[303] = (T)(img)(_p1##x,_n4##y,z,c), I[304] = (T)(img)(x,_n4##y,z,c), I[305] = (T)(img)(_n1##x,_n4##y,z,c), I[306] = (T)(img)(_n2##x,_n4##y,z,c), I[307] = (T)(img)(_n3##x,_n4##y,z,c), I[308] = (T)(img)(_n4##x,_n4##y,z,c), I[309] = (T)(img)(_n5##x,_n4##y,z,c), I[310] = (T)(img)(_n6##x,_n4##y,z,c), I[311] = (T)(img)(_n7##x,_n4##y,z,c), I[312] = (T)(img)(_n8##x,_n4##y,z,c), I[313] = (T)(img)(_n9##x,_n4##y,z,c), I[314] = (T)(img)(_n10##x,_n4##y,z,c), \ - I[315] = (T)(img)(_p10##x,_n5##y,z,c), I[316] = (T)(img)(_p9##x,_n5##y,z,c), I[317] = (T)(img)(_p8##x,_n5##y,z,c), I[318] = (T)(img)(_p7##x,_n5##y,z,c), I[319] = (T)(img)(_p6##x,_n5##y,z,c), I[320] = (T)(img)(_p5##x,_n5##y,z,c), I[321] = (T)(img)(_p4##x,_n5##y,z,c), I[322] = (T)(img)(_p3##x,_n5##y,z,c), I[323] = (T)(img)(_p2##x,_n5##y,z,c), I[324] = (T)(img)(_p1##x,_n5##y,z,c), I[325] = (T)(img)(x,_n5##y,z,c), I[326] = (T)(img)(_n1##x,_n5##y,z,c), I[327] = (T)(img)(_n2##x,_n5##y,z,c), I[328] = (T)(img)(_n3##x,_n5##y,z,c), I[329] = (T)(img)(_n4##x,_n5##y,z,c), I[330] = (T)(img)(_n5##x,_n5##y,z,c), I[331] = (T)(img)(_n6##x,_n5##y,z,c), I[332] = (T)(img)(_n7##x,_n5##y,z,c), I[333] = (T)(img)(_n8##x,_n5##y,z,c), I[334] = (T)(img)(_n9##x,_n5##y,z,c), I[335] = (T)(img)(_n10##x,_n5##y,z,c), \ - I[336] = (T)(img)(_p10##x,_n6##y,z,c), I[337] = (T)(img)(_p9##x,_n6##y,z,c), I[338] = (T)(img)(_p8##x,_n6##y,z,c), I[339] = (T)(img)(_p7##x,_n6##y,z,c), I[340] = (T)(img)(_p6##x,_n6##y,z,c), I[341] = (T)(img)(_p5##x,_n6##y,z,c), I[342] = (T)(img)(_p4##x,_n6##y,z,c), I[343] = (T)(img)(_p3##x,_n6##y,z,c), I[344] = (T)(img)(_p2##x,_n6##y,z,c), I[345] = (T)(img)(_p1##x,_n6##y,z,c), I[346] = (T)(img)(x,_n6##y,z,c), I[347] = (T)(img)(_n1##x,_n6##y,z,c), I[348] = (T)(img)(_n2##x,_n6##y,z,c), I[349] = (T)(img)(_n3##x,_n6##y,z,c), I[350] = (T)(img)(_n4##x,_n6##y,z,c), I[351] = (T)(img)(_n5##x,_n6##y,z,c), I[352] = (T)(img)(_n6##x,_n6##y,z,c), I[353] = (T)(img)(_n7##x,_n6##y,z,c), I[354] = (T)(img)(_n8##x,_n6##y,z,c), I[355] = (T)(img)(_n9##x,_n6##y,z,c), I[356] = (T)(img)(_n10##x,_n6##y,z,c), \ - I[357] = (T)(img)(_p10##x,_n7##y,z,c), I[358] = (T)(img)(_p9##x,_n7##y,z,c), I[359] = (T)(img)(_p8##x,_n7##y,z,c), I[360] = (T)(img)(_p7##x,_n7##y,z,c), I[361] = (T)(img)(_p6##x,_n7##y,z,c), I[362] = (T)(img)(_p5##x,_n7##y,z,c), I[363] = (T)(img)(_p4##x,_n7##y,z,c), I[364] = (T)(img)(_p3##x,_n7##y,z,c), I[365] = (T)(img)(_p2##x,_n7##y,z,c), I[366] = (T)(img)(_p1##x,_n7##y,z,c), I[367] = (T)(img)(x,_n7##y,z,c), I[368] = (T)(img)(_n1##x,_n7##y,z,c), I[369] = (T)(img)(_n2##x,_n7##y,z,c), I[370] = (T)(img)(_n3##x,_n7##y,z,c), I[371] = (T)(img)(_n4##x,_n7##y,z,c), I[372] = (T)(img)(_n5##x,_n7##y,z,c), I[373] = (T)(img)(_n6##x,_n7##y,z,c), I[374] = (T)(img)(_n7##x,_n7##y,z,c), I[375] = (T)(img)(_n8##x,_n7##y,z,c), I[376] = (T)(img)(_n9##x,_n7##y,z,c), I[377] = (T)(img)(_n10##x,_n7##y,z,c), \ - I[378] = (T)(img)(_p10##x,_n8##y,z,c), I[379] = (T)(img)(_p9##x,_n8##y,z,c), I[380] = (T)(img)(_p8##x,_n8##y,z,c), I[381] = (T)(img)(_p7##x,_n8##y,z,c), I[382] = (T)(img)(_p6##x,_n8##y,z,c), I[383] = (T)(img)(_p5##x,_n8##y,z,c), I[384] = (T)(img)(_p4##x,_n8##y,z,c), I[385] = (T)(img)(_p3##x,_n8##y,z,c), I[386] = (T)(img)(_p2##x,_n8##y,z,c), I[387] = (T)(img)(_p1##x,_n8##y,z,c), I[388] = (T)(img)(x,_n8##y,z,c), I[389] = (T)(img)(_n1##x,_n8##y,z,c), I[390] = (T)(img)(_n2##x,_n8##y,z,c), I[391] = (T)(img)(_n3##x,_n8##y,z,c), I[392] = (T)(img)(_n4##x,_n8##y,z,c), I[393] = (T)(img)(_n5##x,_n8##y,z,c), I[394] = (T)(img)(_n6##x,_n8##y,z,c), I[395] = (T)(img)(_n7##x,_n8##y,z,c), I[396] = (T)(img)(_n8##x,_n8##y,z,c), I[397] = (T)(img)(_n9##x,_n8##y,z,c), I[398] = (T)(img)(_n10##x,_n8##y,z,c), \ - I[399] = (T)(img)(_p10##x,_n9##y,z,c), I[400] = (T)(img)(_p9##x,_n9##y,z,c), I[401] = (T)(img)(_p8##x,_n9##y,z,c), I[402] = (T)(img)(_p7##x,_n9##y,z,c), I[403] = (T)(img)(_p6##x,_n9##y,z,c), I[404] = (T)(img)(_p5##x,_n9##y,z,c), I[405] = (T)(img)(_p4##x,_n9##y,z,c), I[406] = (T)(img)(_p3##x,_n9##y,z,c), I[407] = (T)(img)(_p2##x,_n9##y,z,c), I[408] = (T)(img)(_p1##x,_n9##y,z,c), I[409] = (T)(img)(x,_n9##y,z,c), I[410] = (T)(img)(_n1##x,_n9##y,z,c), I[411] = (T)(img)(_n2##x,_n9##y,z,c), I[412] = (T)(img)(_n3##x,_n9##y,z,c), I[413] = (T)(img)(_n4##x,_n9##y,z,c), I[414] = (T)(img)(_n5##x,_n9##y,z,c), I[415] = (T)(img)(_n6##x,_n9##y,z,c), I[416] = (T)(img)(_n7##x,_n9##y,z,c), I[417] = (T)(img)(_n8##x,_n9##y,z,c), I[418] = (T)(img)(_n9##x,_n9##y,z,c), I[419] = (T)(img)(_n10##x,_n9##y,z,c), \ - I[420] = (T)(img)(_p10##x,_n10##y,z,c), I[421] = (T)(img)(_p9##x,_n10##y,z,c), I[422] = (T)(img)(_p8##x,_n10##y,z,c), I[423] = (T)(img)(_p7##x,_n10##y,z,c), I[424] = (T)(img)(_p6##x,_n10##y,z,c), I[425] = (T)(img)(_p5##x,_n10##y,z,c), I[426] = (T)(img)(_p4##x,_n10##y,z,c), I[427] = (T)(img)(_p3##x,_n10##y,z,c), I[428] = (T)(img)(_p2##x,_n10##y,z,c), I[429] = (T)(img)(_p1##x,_n10##y,z,c), I[430] = (T)(img)(x,_n10##y,z,c), I[431] = (T)(img)(_n1##x,_n10##y,z,c), I[432] = (T)(img)(_n2##x,_n10##y,z,c), I[433] = (T)(img)(_n3##x,_n10##y,z,c), I[434] = (T)(img)(_n4##x,_n10##y,z,c), I[435] = (T)(img)(_n5##x,_n10##y,z,c), I[436] = (T)(img)(_n6##x,_n10##y,z,c), I[437] = (T)(img)(_n7##x,_n10##y,z,c), I[438] = (T)(img)(_n8##x,_n10##y,z,c), I[439] = (T)(img)(_n9##x,_n10##y,z,c), I[440] = (T)(img)(_n10##x,_n10##y,z,c); - -// Define 22x22 loop macros -//------------------------- -#define cimg_for22(bound,i) for (int i = 0, \ - _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11; \ - _n11##i<(int)(bound) || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i) - -#define cimg_for22X(img,x) cimg_for22((img)._width,x) -#define cimg_for22Y(img,y) cimg_for22((img)._height,y) -#define cimg_for22Z(img,z) cimg_for22((img)._depth,z) -#define cimg_for22C(img,c) cimg_for22((img)._spectrum,c) -#define cimg_for22XY(img,x,y) cimg_for22Y(img,y) cimg_for22X(img,x) -#define cimg_for22XZ(img,x,z) cimg_for22Z(img,z) cimg_for22X(img,x) -#define cimg_for22XC(img,x,c) cimg_for22C(img,c) cimg_for22X(img,x) -#define cimg_for22YZ(img,y,z) cimg_for22Z(img,z) cimg_for22Y(img,y) -#define cimg_for22YC(img,y,c) cimg_for22C(img,c) cimg_for22Y(img,y) -#define cimg_for22ZC(img,z,c) cimg_for22C(img,c) cimg_for22Z(img,z) -#define cimg_for22XYZ(img,x,y,z) cimg_for22Z(img,z) cimg_for22XY(img,x,y) -#define cimg_for22XZC(img,x,z,c) cimg_for22C(img,c) cimg_for22XZ(img,x,z) -#define cimg_for22YZC(img,y,z,c) cimg_for22C(img,c) cimg_for22YZ(img,y,z) -#define cimg_for22XYZC(img,x,y,z,c) cimg_for22C(img,c) cimg_for22XYZ(img,x,y,z) - -#define cimg_for_in22(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11; \ - i<=(int)(i1) && (_n11##i<(int)(bound) || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i) - -#define cimg_for_in22X(img,x0,x1,x) cimg_for_in22((img)._width,x0,x1,x) -#define cimg_for_in22Y(img,y0,y1,y) cimg_for_in22((img)._height,y0,y1,y) -#define cimg_for_in22Z(img,z0,z1,z) cimg_for_in22((img)._depth,z0,z1,z) -#define cimg_for_in22C(img,c0,c1,c) cimg_for_in22((img)._spectrum,c0,c1,c) -#define cimg_for_in22XY(img,x0,y0,x1,y1,x,y) cimg_for_in22Y(img,y0,y1,y) cimg_for_in22X(img,x0,x1,x) -#define cimg_for_in22XZ(img,x0,z0,x1,z1,x,z) cimg_for_in22Z(img,z0,z1,z) cimg_for_in22X(img,x0,x1,x) -#define cimg_for_in22XC(img,x0,c0,x1,c1,x,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22X(img,x0,x1,x) -#define cimg_for_in22YZ(img,y0,z0,y1,z1,y,z) cimg_for_in22Z(img,z0,z1,z) cimg_for_in22Y(img,y0,y1,y) -#define cimg_for_in22YC(img,y0,c0,y1,c1,y,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22Y(img,y0,y1,y) -#define cimg_for_in22ZC(img,z0,c0,z1,c1,z,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22Z(img,z0,z1,z) -#define cimg_for_in22XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in22Z(img,z0,z1,z) cimg_for_in22XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in22XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in22YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in22XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in22C(img,c0,c1,c) cimg_for_in22XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for22x22(img,x,y,z,c,I,T) \ - cimg_for22((img)._height,y) for (int x = 0, \ - _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p10##y,z,c)), \ - (I[22] = I[23] = I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = (T)(img)(0,_p9##y,z,c)), \ - (I[44] = I[45] = I[46] = I[47] = I[48] = I[49] = I[50] = I[51] = I[52] = I[53] = I[54] = (T)(img)(0,_p8##y,z,c)), \ - (I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_p7##y,z,c)), \ - (I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = (T)(img)(0,_p6##y,z,c)), \ - (I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = I[116] = I[117] = I[118] = I[119] = I[120] = (T)(img)(0,_p5##y,z,c)), \ - (I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = (T)(img)(0,_p4##y,z,c)), \ - (I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = I[163] = I[164] = (T)(img)(0,_p3##y,z,c)), \ - (I[176] = I[177] = I[178] = I[179] = I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = (T)(img)(0,_p2##y,z,c)), \ - (I[198] = I[199] = I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = I[207] = I[208] = (T)(img)(0,_p1##y,z,c)), \ - (I[220] = I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = (T)(img)(0,y,z,c)), \ - (I[242] = I[243] = I[244] = I[245] = I[246] = I[247] = I[248] = I[249] = I[250] = I[251] = I[252] = (T)(img)(0,_n1##y,z,c)), \ - (I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = I[272] = I[273] = I[274] = (T)(img)(0,_n2##y,z,c)), \ - (I[286] = I[287] = I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = (T)(img)(0,_n3##y,z,c)), \ - (I[308] = I[309] = I[310] = I[311] = I[312] = I[313] = I[314] = I[315] = I[316] = I[317] = I[318] = (T)(img)(0,_n4##y,z,c)), \ - (I[330] = I[331] = I[332] = I[333] = I[334] = I[335] = I[336] = I[337] = I[338] = I[339] = I[340] = (T)(img)(0,_n5##y,z,c)), \ - (I[352] = I[353] = I[354] = I[355] = I[356] = I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = (T)(img)(0,_n6##y,z,c)), \ - (I[374] = I[375] = I[376] = I[377] = I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = (T)(img)(0,_n7##y,z,c)), \ - (I[396] = I[397] = I[398] = I[399] = I[400] = I[401] = I[402] = I[403] = I[404] = I[405] = I[406] = (T)(img)(0,_n8##y,z,c)), \ - (I[418] = I[419] = I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = (T)(img)(0,_n9##y,z,c)), \ - (I[440] = I[441] = I[442] = I[443] = I[444] = I[445] = I[446] = I[447] = I[448] = I[449] = I[450] = (T)(img)(0,_n10##y,z,c)), \ - (I[462] = I[463] = I[464] = I[465] = I[466] = I[467] = I[468] = I[469] = I[470] = I[471] = I[472] = (T)(img)(0,_n11##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[55] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[121] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[187] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[209] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[231] = (T)(img)(_n1##x,y,z,c)), \ - (I[253] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[275] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[297] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[319] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[341] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[385] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[407] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[429] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[451] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[473] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[56] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[122] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[188] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[210] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[232] = (T)(img)(_n2##x,y,z,c)), \ - (I[254] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[276] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[298] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[320] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[342] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[386] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[408] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[430] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[452] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[474] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[57] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[123] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[189] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[211] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[233] = (T)(img)(_n3##x,y,z,c)), \ - (I[255] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[277] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[299] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[321] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[343] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[387] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[409] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[431] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[453] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[475] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[14] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[36] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[58] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[102] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[124] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[168] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[190] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[212] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[234] = (T)(img)(_n4##x,y,z,c)), \ - (I[256] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[278] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[300] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[322] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[344] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[388] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[410] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[432] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[454] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[476] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[15] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[37] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[59] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[103] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[125] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[169] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[191] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[213] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[235] = (T)(img)(_n5##x,y,z,c)), \ - (I[257] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[279] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[301] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[323] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[345] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[389] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[411] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[433] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[455] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[477] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[16] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[38] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[60] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[104] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[126] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[170] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[192] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[214] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[236] = (T)(img)(_n6##x,y,z,c)), \ - (I[258] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[280] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[302] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[324] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[346] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[390] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[412] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[434] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[456] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[478] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[17] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[39] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[61] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[105] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[127] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[171] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[193] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[215] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[237] = (T)(img)(_n7##x,y,z,c)), \ - (I[259] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[281] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[303] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[325] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[347] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[391] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[413] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[435] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[457] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[479] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[18] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[40] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[62] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[84] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[106] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[128] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[172] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[194] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[216] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[238] = (T)(img)(_n8##x,y,z,c)), \ - (I[260] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[282] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[304] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[326] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[348] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[392] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[414] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[436] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[458] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[480] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[19] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[41] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[63] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[85] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[107] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[129] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[173] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[195] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[217] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[239] = (T)(img)(_n9##x,y,z,c)), \ - (I[261] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[283] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[305] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[327] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[349] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[393] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[415] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[437] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[459] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[481] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[20] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[42] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[64] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[86] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[108] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[130] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[152] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[174] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[196] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[218] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[240] = (T)(img)(_n10##x,y,z,c)), \ - (I[262] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[284] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[306] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[328] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[350] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[394] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[416] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[438] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[460] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[482] = (T)(img)(_n10##x,_n11##y,z,c)), \ - 11>=((img)._width)?(img).width()-1:11); \ - (_n11##x<(img).width() && ( \ - (I[21] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[43] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[65] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[87] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[109] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[131] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[153] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[175] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[197] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[219] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[241] = (T)(img)(_n11##x,y,z,c)), \ - (I[263] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[285] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[307] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[329] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[351] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[395] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[417] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[439] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[461] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[483] = (T)(img)(_n11##x,_n11##y,z,c)),1)) || \ - _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], \ - I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], \ - I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], \ - I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], \ - I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], \ - I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], \ - I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], \ - I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], \ - I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], \ - I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], \ - I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], \ - _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x) - -#define cimg_for_in22x22(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in22((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = (int)( \ - (I[0] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[22] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[44] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[66] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[88] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[110] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[132] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[154] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[176] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[198] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[220] = (T)(img)(_p10##x,y,z,c)), \ - (I[242] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[264] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[286] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[308] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[330] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[352] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[374] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[396] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[418] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[440] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[462] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[1] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[23] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[45] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[67] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[89] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[111] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[133] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[155] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[177] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[199] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[221] = (T)(img)(_p9##x,y,z,c)), \ - (I[243] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[265] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[287] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[309] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[331] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[353] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[375] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[397] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[419] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[441] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[463] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[2] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[24] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[46] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[68] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[90] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[112] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[134] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[156] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[178] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[200] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[222] = (T)(img)(_p8##x,y,z,c)), \ - (I[244] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[266] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[288] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[310] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[332] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[354] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[376] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[398] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[420] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[442] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[464] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[3] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[25] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[47] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[69] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[91] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[113] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[135] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[157] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[179] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[201] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[223] = (T)(img)(_p7##x,y,z,c)), \ - (I[245] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[267] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[289] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[311] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[333] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[355] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[377] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[399] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[421] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[443] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[465] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[4] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[26] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[48] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[70] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[92] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[114] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[136] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[158] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[180] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[202] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[224] = (T)(img)(_p6##x,y,z,c)), \ - (I[246] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[268] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[290] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[312] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[334] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[356] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[378] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[400] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[422] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[444] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[466] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[5] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[27] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[49] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[71] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[93] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[115] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[137] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[159] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[181] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[203] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[225] = (T)(img)(_p5##x,y,z,c)), \ - (I[247] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[269] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[291] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[313] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[335] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[357] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[379] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[401] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[423] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[445] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[467] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[6] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[28] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[50] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[72] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[94] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[116] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[138] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[160] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[182] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[204] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[226] = (T)(img)(_p4##x,y,z,c)), \ - (I[248] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[270] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[292] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[314] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[336] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[358] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[380] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[402] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[424] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[446] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[468] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[7] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[29] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[51] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[73] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[95] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[117] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[139] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[161] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[183] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[205] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[227] = (T)(img)(_p3##x,y,z,c)), \ - (I[249] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[271] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[293] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[315] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[337] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[359] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[381] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[403] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[425] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[447] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[469] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[8] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[30] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[52] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[74] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[96] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[118] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[140] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[162] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[184] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[206] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[228] = (T)(img)(_p2##x,y,z,c)), \ - (I[250] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[272] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[294] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[316] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[338] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[360] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[382] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[404] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[426] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[448] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[470] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[9] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[31] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[53] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[75] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[97] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[119] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[141] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[163] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[185] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[207] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[229] = (T)(img)(_p1##x,y,z,c)), \ - (I[251] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[273] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[295] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[317] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[339] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[361] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[383] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[405] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[427] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[449] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[471] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[10] = (T)(img)(x,_p10##y,z,c)), \ - (I[32] = (T)(img)(x,_p9##y,z,c)), \ - (I[54] = (T)(img)(x,_p8##y,z,c)), \ - (I[76] = (T)(img)(x,_p7##y,z,c)), \ - (I[98] = (T)(img)(x,_p6##y,z,c)), \ - (I[120] = (T)(img)(x,_p5##y,z,c)), \ - (I[142] = (T)(img)(x,_p4##y,z,c)), \ - (I[164] = (T)(img)(x,_p3##y,z,c)), \ - (I[186] = (T)(img)(x,_p2##y,z,c)), \ - (I[208] = (T)(img)(x,_p1##y,z,c)), \ - (I[230] = (T)(img)(x,y,z,c)), \ - (I[252] = (T)(img)(x,_n1##y,z,c)), \ - (I[274] = (T)(img)(x,_n2##y,z,c)), \ - (I[296] = (T)(img)(x,_n3##y,z,c)), \ - (I[318] = (T)(img)(x,_n4##y,z,c)), \ - (I[340] = (T)(img)(x,_n5##y,z,c)), \ - (I[362] = (T)(img)(x,_n6##y,z,c)), \ - (I[384] = (T)(img)(x,_n7##y,z,c)), \ - (I[406] = (T)(img)(x,_n8##y,z,c)), \ - (I[428] = (T)(img)(x,_n9##y,z,c)), \ - (I[450] = (T)(img)(x,_n10##y,z,c)), \ - (I[472] = (T)(img)(x,_n11##y,z,c)), \ - (I[11] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[33] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[55] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[77] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[121] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[187] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[209] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[231] = (T)(img)(_n1##x,y,z,c)), \ - (I[253] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[275] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[297] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[319] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[341] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[385] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[407] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[429] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[451] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[473] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[12] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[34] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[56] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[78] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[122] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[188] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[210] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[232] = (T)(img)(_n2##x,y,z,c)), \ - (I[254] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[276] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[298] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[320] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[342] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[386] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[408] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[430] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[452] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[474] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[13] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[35] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[57] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[79] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[123] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[189] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[211] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[233] = (T)(img)(_n3##x,y,z,c)), \ - (I[255] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[277] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[299] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[321] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[343] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[387] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[409] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[431] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[453] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[475] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[14] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[36] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[58] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[80] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[102] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[124] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[168] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[190] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[212] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[234] = (T)(img)(_n4##x,y,z,c)), \ - (I[256] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[278] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[300] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[322] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[344] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[388] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[410] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[432] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[454] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[476] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[15] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[37] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[59] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[81] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[103] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[125] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[169] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[191] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[213] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[235] = (T)(img)(_n5##x,y,z,c)), \ - (I[257] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[279] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[301] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[323] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[345] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[389] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[411] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[433] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[455] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[477] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[16] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[38] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[60] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[82] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[104] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[126] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[170] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[192] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[214] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[236] = (T)(img)(_n6##x,y,z,c)), \ - (I[258] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[280] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[302] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[324] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[346] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[390] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[412] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[434] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[456] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[478] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[17] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[39] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[61] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[83] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[105] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[127] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[171] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[193] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[215] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[237] = (T)(img)(_n7##x,y,z,c)), \ - (I[259] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[281] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[303] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[325] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[347] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[391] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[413] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[435] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[457] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[479] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[18] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[40] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[62] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[84] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[106] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[128] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[172] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[194] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[216] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[238] = (T)(img)(_n8##x,y,z,c)), \ - (I[260] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[282] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[304] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[326] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[348] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[392] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[414] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[436] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[458] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[480] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[19] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[41] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[63] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[85] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[107] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[129] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[173] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[195] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[217] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[239] = (T)(img)(_n9##x,y,z,c)), \ - (I[261] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[283] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[305] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[327] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[349] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[393] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[415] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[437] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[459] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[481] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[20] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[42] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[64] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[86] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[108] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[130] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[152] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[174] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[196] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[218] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[240] = (T)(img)(_n10##x,y,z,c)), \ - (I[262] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[284] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[306] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[328] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[350] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[394] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[416] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[438] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[460] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[482] = (T)(img)(_n10##x,_n11##y,z,c)), \ - x+11>=(img).width()?(img).width()-1:x+11); \ - x<=(int)(x1) && ((_n11##x<(img).width() && ( \ - (I[21] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[43] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[65] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[87] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[109] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[131] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[153] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[175] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[197] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[219] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[241] = (T)(img)(_n11##x,y,z,c)), \ - (I[263] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[285] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[307] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[329] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[351] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[395] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[417] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[439] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[461] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[483] = (T)(img)(_n11##x,_n11##y,z,c)),1)) || \ - _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], \ - I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], \ - I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], \ - I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], \ - I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], \ - I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], \ - I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], \ - I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], \ - I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], \ - I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], \ - I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], \ - _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x) - -#define cimg_get22x22(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p10##x,_p10##y,z,c), I[1] = (T)(img)(_p9##x,_p10##y,z,c), I[2] = (T)(img)(_p8##x,_p10##y,z,c), I[3] = (T)(img)(_p7##x,_p10##y,z,c), I[4] = (T)(img)(_p6##x,_p10##y,z,c), I[5] = (T)(img)(_p5##x,_p10##y,z,c), I[6] = (T)(img)(_p4##x,_p10##y,z,c), I[7] = (T)(img)(_p3##x,_p10##y,z,c), I[8] = (T)(img)(_p2##x,_p10##y,z,c), I[9] = (T)(img)(_p1##x,_p10##y,z,c), I[10] = (T)(img)(x,_p10##y,z,c), I[11] = (T)(img)(_n1##x,_p10##y,z,c), I[12] = (T)(img)(_n2##x,_p10##y,z,c), I[13] = (T)(img)(_n3##x,_p10##y,z,c), I[14] = (T)(img)(_n4##x,_p10##y,z,c), I[15] = (T)(img)(_n5##x,_p10##y,z,c), I[16] = (T)(img)(_n6##x,_p10##y,z,c), I[17] = (T)(img)(_n7##x,_p10##y,z,c), I[18] = (T)(img)(_n8##x,_p10##y,z,c), I[19] = (T)(img)(_n9##x,_p10##y,z,c), I[20] = (T)(img)(_n10##x,_p10##y,z,c), I[21] = (T)(img)(_n11##x,_p10##y,z,c), \ - I[22] = (T)(img)(_p10##x,_p9##y,z,c), I[23] = (T)(img)(_p9##x,_p9##y,z,c), I[24] = (T)(img)(_p8##x,_p9##y,z,c), I[25] = (T)(img)(_p7##x,_p9##y,z,c), I[26] = (T)(img)(_p6##x,_p9##y,z,c), I[27] = (T)(img)(_p5##x,_p9##y,z,c), I[28] = (T)(img)(_p4##x,_p9##y,z,c), I[29] = (T)(img)(_p3##x,_p9##y,z,c), I[30] = (T)(img)(_p2##x,_p9##y,z,c), I[31] = (T)(img)(_p1##x,_p9##y,z,c), I[32] = (T)(img)(x,_p9##y,z,c), I[33] = (T)(img)(_n1##x,_p9##y,z,c), I[34] = (T)(img)(_n2##x,_p9##y,z,c), I[35] = (T)(img)(_n3##x,_p9##y,z,c), I[36] = (T)(img)(_n4##x,_p9##y,z,c), I[37] = (T)(img)(_n5##x,_p9##y,z,c), I[38] = (T)(img)(_n6##x,_p9##y,z,c), I[39] = (T)(img)(_n7##x,_p9##y,z,c), I[40] = (T)(img)(_n8##x,_p9##y,z,c), I[41] = (T)(img)(_n9##x,_p9##y,z,c), I[42] = (T)(img)(_n10##x,_p9##y,z,c), I[43] = (T)(img)(_n11##x,_p9##y,z,c), \ - I[44] = (T)(img)(_p10##x,_p8##y,z,c), I[45] = (T)(img)(_p9##x,_p8##y,z,c), I[46] = (T)(img)(_p8##x,_p8##y,z,c), I[47] = (T)(img)(_p7##x,_p8##y,z,c), I[48] = (T)(img)(_p6##x,_p8##y,z,c), I[49] = (T)(img)(_p5##x,_p8##y,z,c), I[50] = (T)(img)(_p4##x,_p8##y,z,c), I[51] = (T)(img)(_p3##x,_p8##y,z,c), I[52] = (T)(img)(_p2##x,_p8##y,z,c), I[53] = (T)(img)(_p1##x,_p8##y,z,c), I[54] = (T)(img)(x,_p8##y,z,c), I[55] = (T)(img)(_n1##x,_p8##y,z,c), I[56] = (T)(img)(_n2##x,_p8##y,z,c), I[57] = (T)(img)(_n3##x,_p8##y,z,c), I[58] = (T)(img)(_n4##x,_p8##y,z,c), I[59] = (T)(img)(_n5##x,_p8##y,z,c), I[60] = (T)(img)(_n6##x,_p8##y,z,c), I[61] = (T)(img)(_n7##x,_p8##y,z,c), I[62] = (T)(img)(_n8##x,_p8##y,z,c), I[63] = (T)(img)(_n9##x,_p8##y,z,c), I[64] = (T)(img)(_n10##x,_p8##y,z,c), I[65] = (T)(img)(_n11##x,_p8##y,z,c), \ - I[66] = (T)(img)(_p10##x,_p7##y,z,c), I[67] = (T)(img)(_p9##x,_p7##y,z,c), I[68] = (T)(img)(_p8##x,_p7##y,z,c), I[69] = (T)(img)(_p7##x,_p7##y,z,c), I[70] = (T)(img)(_p6##x,_p7##y,z,c), I[71] = (T)(img)(_p5##x,_p7##y,z,c), I[72] = (T)(img)(_p4##x,_p7##y,z,c), I[73] = (T)(img)(_p3##x,_p7##y,z,c), I[74] = (T)(img)(_p2##x,_p7##y,z,c), I[75] = (T)(img)(_p1##x,_p7##y,z,c), I[76] = (T)(img)(x,_p7##y,z,c), I[77] = (T)(img)(_n1##x,_p7##y,z,c), I[78] = (T)(img)(_n2##x,_p7##y,z,c), I[79] = (T)(img)(_n3##x,_p7##y,z,c), I[80] = (T)(img)(_n4##x,_p7##y,z,c), I[81] = (T)(img)(_n5##x,_p7##y,z,c), I[82] = (T)(img)(_n6##x,_p7##y,z,c), I[83] = (T)(img)(_n7##x,_p7##y,z,c), I[84] = (T)(img)(_n8##x,_p7##y,z,c), I[85] = (T)(img)(_n9##x,_p7##y,z,c), I[86] = (T)(img)(_n10##x,_p7##y,z,c), I[87] = (T)(img)(_n11##x,_p7##y,z,c), \ - I[88] = (T)(img)(_p10##x,_p6##y,z,c), I[89] = (T)(img)(_p9##x,_p6##y,z,c), I[90] = (T)(img)(_p8##x,_p6##y,z,c), I[91] = (T)(img)(_p7##x,_p6##y,z,c), I[92] = (T)(img)(_p6##x,_p6##y,z,c), I[93] = (T)(img)(_p5##x,_p6##y,z,c), I[94] = (T)(img)(_p4##x,_p6##y,z,c), I[95] = (T)(img)(_p3##x,_p6##y,z,c), I[96] = (T)(img)(_p2##x,_p6##y,z,c), I[97] = (T)(img)(_p1##x,_p6##y,z,c), I[98] = (T)(img)(x,_p6##y,z,c), I[99] = (T)(img)(_n1##x,_p6##y,z,c), I[100] = (T)(img)(_n2##x,_p6##y,z,c), I[101] = (T)(img)(_n3##x,_p6##y,z,c), I[102] = (T)(img)(_n4##x,_p6##y,z,c), I[103] = (T)(img)(_n5##x,_p6##y,z,c), I[104] = (T)(img)(_n6##x,_p6##y,z,c), I[105] = (T)(img)(_n7##x,_p6##y,z,c), I[106] = (T)(img)(_n8##x,_p6##y,z,c), I[107] = (T)(img)(_n9##x,_p6##y,z,c), I[108] = (T)(img)(_n10##x,_p6##y,z,c), I[109] = (T)(img)(_n11##x,_p6##y,z,c), \ - I[110] = (T)(img)(_p10##x,_p5##y,z,c), I[111] = (T)(img)(_p9##x,_p5##y,z,c), I[112] = (T)(img)(_p8##x,_p5##y,z,c), I[113] = (T)(img)(_p7##x,_p5##y,z,c), I[114] = (T)(img)(_p6##x,_p5##y,z,c), I[115] = (T)(img)(_p5##x,_p5##y,z,c), I[116] = (T)(img)(_p4##x,_p5##y,z,c), I[117] = (T)(img)(_p3##x,_p5##y,z,c), I[118] = (T)(img)(_p2##x,_p5##y,z,c), I[119] = (T)(img)(_p1##x,_p5##y,z,c), I[120] = (T)(img)(x,_p5##y,z,c), I[121] = (T)(img)(_n1##x,_p5##y,z,c), I[122] = (T)(img)(_n2##x,_p5##y,z,c), I[123] = (T)(img)(_n3##x,_p5##y,z,c), I[124] = (T)(img)(_n4##x,_p5##y,z,c), I[125] = (T)(img)(_n5##x,_p5##y,z,c), I[126] = (T)(img)(_n6##x,_p5##y,z,c), I[127] = (T)(img)(_n7##x,_p5##y,z,c), I[128] = (T)(img)(_n8##x,_p5##y,z,c), I[129] = (T)(img)(_n9##x,_p5##y,z,c), I[130] = (T)(img)(_n10##x,_p5##y,z,c), I[131] = (T)(img)(_n11##x,_p5##y,z,c), \ - I[132] = (T)(img)(_p10##x,_p4##y,z,c), I[133] = (T)(img)(_p9##x,_p4##y,z,c), I[134] = (T)(img)(_p8##x,_p4##y,z,c), I[135] = (T)(img)(_p7##x,_p4##y,z,c), I[136] = (T)(img)(_p6##x,_p4##y,z,c), I[137] = (T)(img)(_p5##x,_p4##y,z,c), I[138] = (T)(img)(_p4##x,_p4##y,z,c), I[139] = (T)(img)(_p3##x,_p4##y,z,c), I[140] = (T)(img)(_p2##x,_p4##y,z,c), I[141] = (T)(img)(_p1##x,_p4##y,z,c), I[142] = (T)(img)(x,_p4##y,z,c), I[143] = (T)(img)(_n1##x,_p4##y,z,c), I[144] = (T)(img)(_n2##x,_p4##y,z,c), I[145] = (T)(img)(_n3##x,_p4##y,z,c), I[146] = (T)(img)(_n4##x,_p4##y,z,c), I[147] = (T)(img)(_n5##x,_p4##y,z,c), I[148] = (T)(img)(_n6##x,_p4##y,z,c), I[149] = (T)(img)(_n7##x,_p4##y,z,c), I[150] = (T)(img)(_n8##x,_p4##y,z,c), I[151] = (T)(img)(_n9##x,_p4##y,z,c), I[152] = (T)(img)(_n10##x,_p4##y,z,c), I[153] = (T)(img)(_n11##x,_p4##y,z,c), \ - I[154] = (T)(img)(_p10##x,_p3##y,z,c), I[155] = (T)(img)(_p9##x,_p3##y,z,c), I[156] = (T)(img)(_p8##x,_p3##y,z,c), I[157] = (T)(img)(_p7##x,_p3##y,z,c), I[158] = (T)(img)(_p6##x,_p3##y,z,c), I[159] = (T)(img)(_p5##x,_p3##y,z,c), I[160] = (T)(img)(_p4##x,_p3##y,z,c), I[161] = (T)(img)(_p3##x,_p3##y,z,c), I[162] = (T)(img)(_p2##x,_p3##y,z,c), I[163] = (T)(img)(_p1##x,_p3##y,z,c), I[164] = (T)(img)(x,_p3##y,z,c), I[165] = (T)(img)(_n1##x,_p3##y,z,c), I[166] = (T)(img)(_n2##x,_p3##y,z,c), I[167] = (T)(img)(_n3##x,_p3##y,z,c), I[168] = (T)(img)(_n4##x,_p3##y,z,c), I[169] = (T)(img)(_n5##x,_p3##y,z,c), I[170] = (T)(img)(_n6##x,_p3##y,z,c), I[171] = (T)(img)(_n7##x,_p3##y,z,c), I[172] = (T)(img)(_n8##x,_p3##y,z,c), I[173] = (T)(img)(_n9##x,_p3##y,z,c), I[174] = (T)(img)(_n10##x,_p3##y,z,c), I[175] = (T)(img)(_n11##x,_p3##y,z,c), \ - I[176] = (T)(img)(_p10##x,_p2##y,z,c), I[177] = (T)(img)(_p9##x,_p2##y,z,c), I[178] = (T)(img)(_p8##x,_p2##y,z,c), I[179] = (T)(img)(_p7##x,_p2##y,z,c), I[180] = (T)(img)(_p6##x,_p2##y,z,c), I[181] = (T)(img)(_p5##x,_p2##y,z,c), I[182] = (T)(img)(_p4##x,_p2##y,z,c), I[183] = (T)(img)(_p3##x,_p2##y,z,c), I[184] = (T)(img)(_p2##x,_p2##y,z,c), I[185] = (T)(img)(_p1##x,_p2##y,z,c), I[186] = (T)(img)(x,_p2##y,z,c), I[187] = (T)(img)(_n1##x,_p2##y,z,c), I[188] = (T)(img)(_n2##x,_p2##y,z,c), I[189] = (T)(img)(_n3##x,_p2##y,z,c), I[190] = (T)(img)(_n4##x,_p2##y,z,c), I[191] = (T)(img)(_n5##x,_p2##y,z,c), I[192] = (T)(img)(_n6##x,_p2##y,z,c), I[193] = (T)(img)(_n7##x,_p2##y,z,c), I[194] = (T)(img)(_n8##x,_p2##y,z,c), I[195] = (T)(img)(_n9##x,_p2##y,z,c), I[196] = (T)(img)(_n10##x,_p2##y,z,c), I[197] = (T)(img)(_n11##x,_p2##y,z,c), \ - I[198] = (T)(img)(_p10##x,_p1##y,z,c), I[199] = (T)(img)(_p9##x,_p1##y,z,c), I[200] = (T)(img)(_p8##x,_p1##y,z,c), I[201] = (T)(img)(_p7##x,_p1##y,z,c), I[202] = (T)(img)(_p6##x,_p1##y,z,c), I[203] = (T)(img)(_p5##x,_p1##y,z,c), I[204] = (T)(img)(_p4##x,_p1##y,z,c), I[205] = (T)(img)(_p3##x,_p1##y,z,c), I[206] = (T)(img)(_p2##x,_p1##y,z,c), I[207] = (T)(img)(_p1##x,_p1##y,z,c), I[208] = (T)(img)(x,_p1##y,z,c), I[209] = (T)(img)(_n1##x,_p1##y,z,c), I[210] = (T)(img)(_n2##x,_p1##y,z,c), I[211] = (T)(img)(_n3##x,_p1##y,z,c), I[212] = (T)(img)(_n4##x,_p1##y,z,c), I[213] = (T)(img)(_n5##x,_p1##y,z,c), I[214] = (T)(img)(_n6##x,_p1##y,z,c), I[215] = (T)(img)(_n7##x,_p1##y,z,c), I[216] = (T)(img)(_n8##x,_p1##y,z,c), I[217] = (T)(img)(_n9##x,_p1##y,z,c), I[218] = (T)(img)(_n10##x,_p1##y,z,c), I[219] = (T)(img)(_n11##x,_p1##y,z,c), \ - I[220] = (T)(img)(_p10##x,y,z,c), I[221] = (T)(img)(_p9##x,y,z,c), I[222] = (T)(img)(_p8##x,y,z,c), I[223] = (T)(img)(_p7##x,y,z,c), I[224] = (T)(img)(_p6##x,y,z,c), I[225] = (T)(img)(_p5##x,y,z,c), I[226] = (T)(img)(_p4##x,y,z,c), I[227] = (T)(img)(_p3##x,y,z,c), I[228] = (T)(img)(_p2##x,y,z,c), I[229] = (T)(img)(_p1##x,y,z,c), I[230] = (T)(img)(x,y,z,c), I[231] = (T)(img)(_n1##x,y,z,c), I[232] = (T)(img)(_n2##x,y,z,c), I[233] = (T)(img)(_n3##x,y,z,c), I[234] = (T)(img)(_n4##x,y,z,c), I[235] = (T)(img)(_n5##x,y,z,c), I[236] = (T)(img)(_n6##x,y,z,c), I[237] = (T)(img)(_n7##x,y,z,c), I[238] = (T)(img)(_n8##x,y,z,c), I[239] = (T)(img)(_n9##x,y,z,c), I[240] = (T)(img)(_n10##x,y,z,c), I[241] = (T)(img)(_n11##x,y,z,c), \ - I[242] = (T)(img)(_p10##x,_n1##y,z,c), I[243] = (T)(img)(_p9##x,_n1##y,z,c), I[244] = (T)(img)(_p8##x,_n1##y,z,c), I[245] = (T)(img)(_p7##x,_n1##y,z,c), I[246] = (T)(img)(_p6##x,_n1##y,z,c), I[247] = (T)(img)(_p5##x,_n1##y,z,c), I[248] = (T)(img)(_p4##x,_n1##y,z,c), I[249] = (T)(img)(_p3##x,_n1##y,z,c), I[250] = (T)(img)(_p2##x,_n1##y,z,c), I[251] = (T)(img)(_p1##x,_n1##y,z,c), I[252] = (T)(img)(x,_n1##y,z,c), I[253] = (T)(img)(_n1##x,_n1##y,z,c), I[254] = (T)(img)(_n2##x,_n1##y,z,c), I[255] = (T)(img)(_n3##x,_n1##y,z,c), I[256] = (T)(img)(_n4##x,_n1##y,z,c), I[257] = (T)(img)(_n5##x,_n1##y,z,c), I[258] = (T)(img)(_n6##x,_n1##y,z,c), I[259] = (T)(img)(_n7##x,_n1##y,z,c), I[260] = (T)(img)(_n8##x,_n1##y,z,c), I[261] = (T)(img)(_n9##x,_n1##y,z,c), I[262] = (T)(img)(_n10##x,_n1##y,z,c), I[263] = (T)(img)(_n11##x,_n1##y,z,c), \ - I[264] = (T)(img)(_p10##x,_n2##y,z,c), I[265] = (T)(img)(_p9##x,_n2##y,z,c), I[266] = (T)(img)(_p8##x,_n2##y,z,c), I[267] = (T)(img)(_p7##x,_n2##y,z,c), I[268] = (T)(img)(_p6##x,_n2##y,z,c), I[269] = (T)(img)(_p5##x,_n2##y,z,c), I[270] = (T)(img)(_p4##x,_n2##y,z,c), I[271] = (T)(img)(_p3##x,_n2##y,z,c), I[272] = (T)(img)(_p2##x,_n2##y,z,c), I[273] = (T)(img)(_p1##x,_n2##y,z,c), I[274] = (T)(img)(x,_n2##y,z,c), I[275] = (T)(img)(_n1##x,_n2##y,z,c), I[276] = (T)(img)(_n2##x,_n2##y,z,c), I[277] = (T)(img)(_n3##x,_n2##y,z,c), I[278] = (T)(img)(_n4##x,_n2##y,z,c), I[279] = (T)(img)(_n5##x,_n2##y,z,c), I[280] = (T)(img)(_n6##x,_n2##y,z,c), I[281] = (T)(img)(_n7##x,_n2##y,z,c), I[282] = (T)(img)(_n8##x,_n2##y,z,c), I[283] = (T)(img)(_n9##x,_n2##y,z,c), I[284] = (T)(img)(_n10##x,_n2##y,z,c), I[285] = (T)(img)(_n11##x,_n2##y,z,c), \ - I[286] = (T)(img)(_p10##x,_n3##y,z,c), I[287] = (T)(img)(_p9##x,_n3##y,z,c), I[288] = (T)(img)(_p8##x,_n3##y,z,c), I[289] = (T)(img)(_p7##x,_n3##y,z,c), I[290] = (T)(img)(_p6##x,_n3##y,z,c), I[291] = (T)(img)(_p5##x,_n3##y,z,c), I[292] = (T)(img)(_p4##x,_n3##y,z,c), I[293] = (T)(img)(_p3##x,_n3##y,z,c), I[294] = (T)(img)(_p2##x,_n3##y,z,c), I[295] = (T)(img)(_p1##x,_n3##y,z,c), I[296] = (T)(img)(x,_n3##y,z,c), I[297] = (T)(img)(_n1##x,_n3##y,z,c), I[298] = (T)(img)(_n2##x,_n3##y,z,c), I[299] = (T)(img)(_n3##x,_n3##y,z,c), I[300] = (T)(img)(_n4##x,_n3##y,z,c), I[301] = (T)(img)(_n5##x,_n3##y,z,c), I[302] = (T)(img)(_n6##x,_n3##y,z,c), I[303] = (T)(img)(_n7##x,_n3##y,z,c), I[304] = (T)(img)(_n8##x,_n3##y,z,c), I[305] = (T)(img)(_n9##x,_n3##y,z,c), I[306] = (T)(img)(_n10##x,_n3##y,z,c), I[307] = (T)(img)(_n11##x,_n3##y,z,c), \ - I[308] = (T)(img)(_p10##x,_n4##y,z,c), I[309] = (T)(img)(_p9##x,_n4##y,z,c), I[310] = (T)(img)(_p8##x,_n4##y,z,c), I[311] = (T)(img)(_p7##x,_n4##y,z,c), I[312] = (T)(img)(_p6##x,_n4##y,z,c), I[313] = (T)(img)(_p5##x,_n4##y,z,c), I[314] = (T)(img)(_p4##x,_n4##y,z,c), I[315] = (T)(img)(_p3##x,_n4##y,z,c), I[316] = (T)(img)(_p2##x,_n4##y,z,c), I[317] = (T)(img)(_p1##x,_n4##y,z,c), I[318] = (T)(img)(x,_n4##y,z,c), I[319] = (T)(img)(_n1##x,_n4##y,z,c), I[320] = (T)(img)(_n2##x,_n4##y,z,c), I[321] = (T)(img)(_n3##x,_n4##y,z,c), I[322] = (T)(img)(_n4##x,_n4##y,z,c), I[323] = (T)(img)(_n5##x,_n4##y,z,c), I[324] = (T)(img)(_n6##x,_n4##y,z,c), I[325] = (T)(img)(_n7##x,_n4##y,z,c), I[326] = (T)(img)(_n8##x,_n4##y,z,c), I[327] = (T)(img)(_n9##x,_n4##y,z,c), I[328] = (T)(img)(_n10##x,_n4##y,z,c), I[329] = (T)(img)(_n11##x,_n4##y,z,c), \ - I[330] = (T)(img)(_p10##x,_n5##y,z,c), I[331] = (T)(img)(_p9##x,_n5##y,z,c), I[332] = (T)(img)(_p8##x,_n5##y,z,c), I[333] = (T)(img)(_p7##x,_n5##y,z,c), I[334] = (T)(img)(_p6##x,_n5##y,z,c), I[335] = (T)(img)(_p5##x,_n5##y,z,c), I[336] = (T)(img)(_p4##x,_n5##y,z,c), I[337] = (T)(img)(_p3##x,_n5##y,z,c), I[338] = (T)(img)(_p2##x,_n5##y,z,c), I[339] = (T)(img)(_p1##x,_n5##y,z,c), I[340] = (T)(img)(x,_n5##y,z,c), I[341] = (T)(img)(_n1##x,_n5##y,z,c), I[342] = (T)(img)(_n2##x,_n5##y,z,c), I[343] = (T)(img)(_n3##x,_n5##y,z,c), I[344] = (T)(img)(_n4##x,_n5##y,z,c), I[345] = (T)(img)(_n5##x,_n5##y,z,c), I[346] = (T)(img)(_n6##x,_n5##y,z,c), I[347] = (T)(img)(_n7##x,_n5##y,z,c), I[348] = (T)(img)(_n8##x,_n5##y,z,c), I[349] = (T)(img)(_n9##x,_n5##y,z,c), I[350] = (T)(img)(_n10##x,_n5##y,z,c), I[351] = (T)(img)(_n11##x,_n5##y,z,c), \ - I[352] = (T)(img)(_p10##x,_n6##y,z,c), I[353] = (T)(img)(_p9##x,_n6##y,z,c), I[354] = (T)(img)(_p8##x,_n6##y,z,c), I[355] = (T)(img)(_p7##x,_n6##y,z,c), I[356] = (T)(img)(_p6##x,_n6##y,z,c), I[357] = (T)(img)(_p5##x,_n6##y,z,c), I[358] = (T)(img)(_p4##x,_n6##y,z,c), I[359] = (T)(img)(_p3##x,_n6##y,z,c), I[360] = (T)(img)(_p2##x,_n6##y,z,c), I[361] = (T)(img)(_p1##x,_n6##y,z,c), I[362] = (T)(img)(x,_n6##y,z,c), I[363] = (T)(img)(_n1##x,_n6##y,z,c), I[364] = (T)(img)(_n2##x,_n6##y,z,c), I[365] = (T)(img)(_n3##x,_n6##y,z,c), I[366] = (T)(img)(_n4##x,_n6##y,z,c), I[367] = (T)(img)(_n5##x,_n6##y,z,c), I[368] = (T)(img)(_n6##x,_n6##y,z,c), I[369] = (T)(img)(_n7##x,_n6##y,z,c), I[370] = (T)(img)(_n8##x,_n6##y,z,c), I[371] = (T)(img)(_n9##x,_n6##y,z,c), I[372] = (T)(img)(_n10##x,_n6##y,z,c), I[373] = (T)(img)(_n11##x,_n6##y,z,c), \ - I[374] = (T)(img)(_p10##x,_n7##y,z,c), I[375] = (T)(img)(_p9##x,_n7##y,z,c), I[376] = (T)(img)(_p8##x,_n7##y,z,c), I[377] = (T)(img)(_p7##x,_n7##y,z,c), I[378] = (T)(img)(_p6##x,_n7##y,z,c), I[379] = (T)(img)(_p5##x,_n7##y,z,c), I[380] = (T)(img)(_p4##x,_n7##y,z,c), I[381] = (T)(img)(_p3##x,_n7##y,z,c), I[382] = (T)(img)(_p2##x,_n7##y,z,c), I[383] = (T)(img)(_p1##x,_n7##y,z,c), I[384] = (T)(img)(x,_n7##y,z,c), I[385] = (T)(img)(_n1##x,_n7##y,z,c), I[386] = (T)(img)(_n2##x,_n7##y,z,c), I[387] = (T)(img)(_n3##x,_n7##y,z,c), I[388] = (T)(img)(_n4##x,_n7##y,z,c), I[389] = (T)(img)(_n5##x,_n7##y,z,c), I[390] = (T)(img)(_n6##x,_n7##y,z,c), I[391] = (T)(img)(_n7##x,_n7##y,z,c), I[392] = (T)(img)(_n8##x,_n7##y,z,c), I[393] = (T)(img)(_n9##x,_n7##y,z,c), I[394] = (T)(img)(_n10##x,_n7##y,z,c), I[395] = (T)(img)(_n11##x,_n7##y,z,c), \ - I[396] = (T)(img)(_p10##x,_n8##y,z,c), I[397] = (T)(img)(_p9##x,_n8##y,z,c), I[398] = (T)(img)(_p8##x,_n8##y,z,c), I[399] = (T)(img)(_p7##x,_n8##y,z,c), I[400] = (T)(img)(_p6##x,_n8##y,z,c), I[401] = (T)(img)(_p5##x,_n8##y,z,c), I[402] = (T)(img)(_p4##x,_n8##y,z,c), I[403] = (T)(img)(_p3##x,_n8##y,z,c), I[404] = (T)(img)(_p2##x,_n8##y,z,c), I[405] = (T)(img)(_p1##x,_n8##y,z,c), I[406] = (T)(img)(x,_n8##y,z,c), I[407] = (T)(img)(_n1##x,_n8##y,z,c), I[408] = (T)(img)(_n2##x,_n8##y,z,c), I[409] = (T)(img)(_n3##x,_n8##y,z,c), I[410] = (T)(img)(_n4##x,_n8##y,z,c), I[411] = (T)(img)(_n5##x,_n8##y,z,c), I[412] = (T)(img)(_n6##x,_n8##y,z,c), I[413] = (T)(img)(_n7##x,_n8##y,z,c), I[414] = (T)(img)(_n8##x,_n8##y,z,c), I[415] = (T)(img)(_n9##x,_n8##y,z,c), I[416] = (T)(img)(_n10##x,_n8##y,z,c), I[417] = (T)(img)(_n11##x,_n8##y,z,c), \ - I[418] = (T)(img)(_p10##x,_n9##y,z,c), I[419] = (T)(img)(_p9##x,_n9##y,z,c), I[420] = (T)(img)(_p8##x,_n9##y,z,c), I[421] = (T)(img)(_p7##x,_n9##y,z,c), I[422] = (T)(img)(_p6##x,_n9##y,z,c), I[423] = (T)(img)(_p5##x,_n9##y,z,c), I[424] = (T)(img)(_p4##x,_n9##y,z,c), I[425] = (T)(img)(_p3##x,_n9##y,z,c), I[426] = (T)(img)(_p2##x,_n9##y,z,c), I[427] = (T)(img)(_p1##x,_n9##y,z,c), I[428] = (T)(img)(x,_n9##y,z,c), I[429] = (T)(img)(_n1##x,_n9##y,z,c), I[430] = (T)(img)(_n2##x,_n9##y,z,c), I[431] = (T)(img)(_n3##x,_n9##y,z,c), I[432] = (T)(img)(_n4##x,_n9##y,z,c), I[433] = (T)(img)(_n5##x,_n9##y,z,c), I[434] = (T)(img)(_n6##x,_n9##y,z,c), I[435] = (T)(img)(_n7##x,_n9##y,z,c), I[436] = (T)(img)(_n8##x,_n9##y,z,c), I[437] = (T)(img)(_n9##x,_n9##y,z,c), I[438] = (T)(img)(_n10##x,_n9##y,z,c), I[439] = (T)(img)(_n11##x,_n9##y,z,c), \ - I[440] = (T)(img)(_p10##x,_n10##y,z,c), I[441] = (T)(img)(_p9##x,_n10##y,z,c), I[442] = (T)(img)(_p8##x,_n10##y,z,c), I[443] = (T)(img)(_p7##x,_n10##y,z,c), I[444] = (T)(img)(_p6##x,_n10##y,z,c), I[445] = (T)(img)(_p5##x,_n10##y,z,c), I[446] = (T)(img)(_p4##x,_n10##y,z,c), I[447] = (T)(img)(_p3##x,_n10##y,z,c), I[448] = (T)(img)(_p2##x,_n10##y,z,c), I[449] = (T)(img)(_p1##x,_n10##y,z,c), I[450] = (T)(img)(x,_n10##y,z,c), I[451] = (T)(img)(_n1##x,_n10##y,z,c), I[452] = (T)(img)(_n2##x,_n10##y,z,c), I[453] = (T)(img)(_n3##x,_n10##y,z,c), I[454] = (T)(img)(_n4##x,_n10##y,z,c), I[455] = (T)(img)(_n5##x,_n10##y,z,c), I[456] = (T)(img)(_n6##x,_n10##y,z,c), I[457] = (T)(img)(_n7##x,_n10##y,z,c), I[458] = (T)(img)(_n8##x,_n10##y,z,c), I[459] = (T)(img)(_n9##x,_n10##y,z,c), I[460] = (T)(img)(_n10##x,_n10##y,z,c), I[461] = (T)(img)(_n11##x,_n10##y,z,c), \ - I[462] = (T)(img)(_p10##x,_n11##y,z,c), I[463] = (T)(img)(_p9##x,_n11##y,z,c), I[464] = (T)(img)(_p8##x,_n11##y,z,c), I[465] = (T)(img)(_p7##x,_n11##y,z,c), I[466] = (T)(img)(_p6##x,_n11##y,z,c), I[467] = (T)(img)(_p5##x,_n11##y,z,c), I[468] = (T)(img)(_p4##x,_n11##y,z,c), I[469] = (T)(img)(_p3##x,_n11##y,z,c), I[470] = (T)(img)(_p2##x,_n11##y,z,c), I[471] = (T)(img)(_p1##x,_n11##y,z,c), I[472] = (T)(img)(x,_n11##y,z,c), I[473] = (T)(img)(_n1##x,_n11##y,z,c), I[474] = (T)(img)(_n2##x,_n11##y,z,c), I[475] = (T)(img)(_n3##x,_n11##y,z,c), I[476] = (T)(img)(_n4##x,_n11##y,z,c), I[477] = (T)(img)(_n5##x,_n11##y,z,c), I[478] = (T)(img)(_n6##x,_n11##y,z,c), I[479] = (T)(img)(_n7##x,_n11##y,z,c), I[480] = (T)(img)(_n8##x,_n11##y,z,c), I[481] = (T)(img)(_n9##x,_n11##y,z,c), I[482] = (T)(img)(_n10##x,_n11##y,z,c), I[483] = (T)(img)(_n11##x,_n11##y,z,c); - -// Define 23x23 loop macros -//------------------------- -#define cimg_for23(bound,i) for (int i = 0, \ - _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11; \ - _n11##i<(int)(bound) || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i) - -#define cimg_for23X(img,x) cimg_for23((img)._width,x) -#define cimg_for23Y(img,y) cimg_for23((img)._height,y) -#define cimg_for23Z(img,z) cimg_for23((img)._depth,z) -#define cimg_for23C(img,c) cimg_for23((img)._spectrum,c) -#define cimg_for23XY(img,x,y) cimg_for23Y(img,y) cimg_for23X(img,x) -#define cimg_for23XZ(img,x,z) cimg_for23Z(img,z) cimg_for23X(img,x) -#define cimg_for23XC(img,x,c) cimg_for23C(img,c) cimg_for23X(img,x) -#define cimg_for23YZ(img,y,z) cimg_for23Z(img,z) cimg_for23Y(img,y) -#define cimg_for23YC(img,y,c) cimg_for23C(img,c) cimg_for23Y(img,y) -#define cimg_for23ZC(img,z,c) cimg_for23C(img,c) cimg_for23Z(img,z) -#define cimg_for23XYZ(img,x,y,z) cimg_for23Z(img,z) cimg_for23XY(img,x,y) -#define cimg_for23XZC(img,x,z,c) cimg_for23C(img,c) cimg_for23XZ(img,x,z) -#define cimg_for23YZC(img,y,z,c) cimg_for23C(img,c) cimg_for23YZ(img,y,z) -#define cimg_for23XYZC(img,x,y,z,c) cimg_for23C(img,c) cimg_for23XYZ(img,x,y,z) - -#define cimg_for_in23(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11; \ - i<=(int)(i1) && (_n11##i<(int)(bound) || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i) - -#define cimg_for_in23X(img,x0,x1,x) cimg_for_in23((img)._width,x0,x1,x) -#define cimg_for_in23Y(img,y0,y1,y) cimg_for_in23((img)._height,y0,y1,y) -#define cimg_for_in23Z(img,z0,z1,z) cimg_for_in23((img)._depth,z0,z1,z) -#define cimg_for_in23C(img,c0,c1,c) cimg_for_in23((img)._spectrum,c0,c1,c) -#define cimg_for_in23XY(img,x0,y0,x1,y1,x,y) cimg_for_in23Y(img,y0,y1,y) cimg_for_in23X(img,x0,x1,x) -#define cimg_for_in23XZ(img,x0,z0,x1,z1,x,z) cimg_for_in23Z(img,z0,z1,z) cimg_for_in23X(img,x0,x1,x) -#define cimg_for_in23XC(img,x0,c0,x1,c1,x,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23X(img,x0,x1,x) -#define cimg_for_in23YZ(img,y0,z0,y1,z1,y,z) cimg_for_in23Z(img,z0,z1,z) cimg_for_in23Y(img,y0,y1,y) -#define cimg_for_in23YC(img,y0,c0,y1,c1,y,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23Y(img,y0,y1,y) -#define cimg_for_in23ZC(img,z0,c0,z1,c1,z,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23Z(img,z0,z1,z) -#define cimg_for_in23XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in23Z(img,z0,z1,z) cimg_for_in23XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in23XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in23YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in23XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in23C(img,c0,c1,c) cimg_for_in23XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for23x23(img,x,y,z,c,I,T) \ - cimg_for23((img)._height,y) for (int x = 0, \ - _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p11##y,z,c)), \ - (I[23] = I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = (T)(img)(0,_p10##y,z,c)), \ - (I[46] = I[47] = I[48] = I[49] = I[50] = I[51] = I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = (T)(img)(0,_p9##y,z,c)), \ - (I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = I[78] = I[79] = I[80] = (T)(img)(0,_p8##y,z,c)), \ - (I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = (T)(img)(0,_p7##y,z,c)), \ - (I[115] = I[116] = I[117] = I[118] = I[119] = I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = (T)(img)(0,_p6##y,z,c)), \ - (I[138] = I[139] = I[140] = I[141] = I[142] = I[143] = I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = (T)(img)(0,_p5##y,z,c)), \ - (I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = I[171] = I[172] = (T)(img)(0,_p4##y,z,c)), \ - (I[184] = I[185] = I[186] = I[187] = I[188] = I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = (T)(img)(0,_p3##y,z,c)), \ - (I[207] = I[208] = I[209] = I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = I[218] = (T)(img)(0,_p2##y,z,c)), \ - (I[230] = I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = I[240] = I[241] = (T)(img)(0,_p1##y,z,c)), \ - (I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = I[263] = I[264] = (T)(img)(0,y,z,c)), \ - (I[276] = I[277] = I[278] = I[279] = I[280] = I[281] = I[282] = I[283] = I[284] = I[285] = I[286] = I[287] = (T)(img)(0,_n1##y,z,c)), \ - (I[299] = I[300] = I[301] = I[302] = I[303] = I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = I[310] = (T)(img)(0,_n2##y,z,c)), \ - (I[322] = I[323] = I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = I[333] = (T)(img)(0,_n3##y,z,c)), \ - (I[345] = I[346] = I[347] = I[348] = I[349] = I[350] = I[351] = I[352] = I[353] = I[354] = I[355] = I[356] = (T)(img)(0,_n4##y,z,c)), \ - (I[368] = I[369] = I[370] = I[371] = I[372] = I[373] = I[374] = I[375] = I[376] = I[377] = I[378] = I[379] = (T)(img)(0,_n5##y,z,c)), \ - (I[391] = I[392] = I[393] = I[394] = I[395] = I[396] = I[397] = I[398] = I[399] = I[400] = I[401] = I[402] = (T)(img)(0,_n6##y,z,c)), \ - (I[414] = I[415] = I[416] = I[417] = I[418] = I[419] = I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = (T)(img)(0,_n7##y,z,c)), \ - (I[437] = I[438] = I[439] = I[440] = I[441] = I[442] = I[443] = I[444] = I[445] = I[446] = I[447] = I[448] = (T)(img)(0,_n8##y,z,c)), \ - (I[460] = I[461] = I[462] = I[463] = I[464] = I[465] = I[466] = I[467] = I[468] = I[469] = I[470] = I[471] = (T)(img)(0,_n9##y,z,c)), \ - (I[483] = I[484] = I[485] = I[486] = I[487] = I[488] = I[489] = I[490] = I[491] = I[492] = I[493] = I[494] = (T)(img)(0,_n10##y,z,c)), \ - (I[506] = I[507] = I[508] = I[509] = I[510] = I[511] = I[512] = I[513] = I[514] = I[515] = I[516] = I[517] = (T)(img)(0,_n11##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[58] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[104] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[127] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[173] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[196] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[219] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[242] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[265] = (T)(img)(_n1##x,y,z,c)), \ - (I[288] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[311] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[334] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[357] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[380] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[403] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[426] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[449] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[472] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[495] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[518] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[59] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[105] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[128] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[174] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[197] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[220] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[243] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[266] = (T)(img)(_n2##x,y,z,c)), \ - (I[289] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[312] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[335] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[358] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[381] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[404] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[427] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[450] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[473] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[496] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[519] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[60] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[106] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[129] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[175] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[198] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[221] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[244] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[267] = (T)(img)(_n3##x,y,z,c)), \ - (I[290] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[313] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[336] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[359] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[382] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[405] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[428] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[451] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[474] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[497] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[520] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[61] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[84] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[107] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[130] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[176] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[199] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[222] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[245] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[268] = (T)(img)(_n4##x,y,z,c)), \ - (I[291] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[314] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[337] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[360] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[383] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[406] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[429] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[452] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[475] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[498] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[521] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[16] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[62] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[85] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[108] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[131] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[177] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[200] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[223] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[246] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[269] = (T)(img)(_n5##x,y,z,c)), \ - (I[292] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[315] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[338] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[361] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[384] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[407] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[430] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[453] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[476] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[499] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[522] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[17] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[40] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[63] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[86] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[109] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[132] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[178] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[201] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[224] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[247] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[270] = (T)(img)(_n6##x,y,z,c)), \ - (I[293] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[316] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[339] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[362] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[385] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[408] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[431] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[454] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[477] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[500] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[523] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[18] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[41] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[64] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[87] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[110] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[133] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[156] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[179] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[202] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[225] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[248] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[271] = (T)(img)(_n7##x,y,z,c)), \ - (I[294] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[317] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[340] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[363] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[386] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[409] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[432] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[455] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[478] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[501] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[524] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[19] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[42] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[65] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[88] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[111] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[134] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[157] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[180] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[203] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[226] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[249] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[272] = (T)(img)(_n8##x,y,z,c)), \ - (I[295] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[318] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[341] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[364] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[387] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[410] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[433] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[456] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[479] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[502] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[525] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[20] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[43] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[66] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[89] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[112] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[135] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[158] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[181] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[204] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[227] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[250] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[273] = (T)(img)(_n9##x,y,z,c)), \ - (I[296] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[319] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[342] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[365] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[388] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[411] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[434] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[457] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[480] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[503] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[526] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[21] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[44] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[67] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[90] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[113] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[136] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[159] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[182] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[205] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[228] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[251] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[274] = (T)(img)(_n10##x,y,z,c)), \ - (I[297] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[320] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[343] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[366] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[389] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[412] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[435] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[458] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[481] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[504] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[527] = (T)(img)(_n10##x,_n11##y,z,c)), \ - 11>=((img)._width)?(img).width()-1:11); \ - (_n11##x<(img).width() && ( \ - (I[22] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[45] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[68] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[91] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[114] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[137] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[160] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[183] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[206] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[229] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[252] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[275] = (T)(img)(_n11##x,y,z,c)), \ - (I[298] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[321] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[344] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[367] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[390] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[413] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[436] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[459] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[482] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[505] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[528] = (T)(img)(_n11##x,_n11##y,z,c)),1)) || \ - _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], \ - I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], \ - I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], \ - I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], \ - I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], \ - I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], \ - I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], \ - I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], \ - I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], \ - I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], \ - I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], \ - I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], \ - I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], \ - I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], \ - I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], \ - I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], \ - I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], \ - I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], \ - I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], \ - I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], \ - I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], \ - I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], \ - I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], \ - _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x) - -#define cimg_for_in23x23(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in23((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = (int)( \ - (I[0] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[23] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[46] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[69] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[92] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[115] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[138] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[161] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[184] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[207] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[230] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[253] = (T)(img)(_p11##x,y,z,c)), \ - (I[276] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[299] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[322] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[345] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[368] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[391] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[414] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[437] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[460] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[483] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[506] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[1] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[24] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[47] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[70] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[93] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[116] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[139] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[162] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[185] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[208] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[231] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[254] = (T)(img)(_p10##x,y,z,c)), \ - (I[277] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[300] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[323] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[346] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[369] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[392] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[415] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[438] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[461] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[484] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[507] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[2] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[25] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[48] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[71] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[94] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[117] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[140] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[163] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[186] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[209] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[232] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[255] = (T)(img)(_p9##x,y,z,c)), \ - (I[278] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[301] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[324] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[347] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[370] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[393] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[416] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[439] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[462] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[485] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[508] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[3] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[26] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[49] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[72] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[95] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[118] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[141] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[164] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[187] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[210] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[233] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[256] = (T)(img)(_p8##x,y,z,c)), \ - (I[279] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[302] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[325] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[348] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[371] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[394] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[417] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[440] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[463] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[486] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[509] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[4] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[27] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[50] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[73] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[96] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[119] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[142] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[165] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[188] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[211] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[234] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[257] = (T)(img)(_p7##x,y,z,c)), \ - (I[280] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[303] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[326] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[349] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[372] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[395] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[418] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[441] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[464] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[487] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[510] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[5] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[28] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[51] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[74] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[97] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[120] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[143] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[166] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[189] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[212] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[235] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[258] = (T)(img)(_p6##x,y,z,c)), \ - (I[281] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[304] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[327] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[350] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[373] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[396] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[419] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[442] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[465] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[488] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[511] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[6] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[29] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[52] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[75] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[98] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[121] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[144] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[167] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[190] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[213] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[236] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[259] = (T)(img)(_p5##x,y,z,c)), \ - (I[282] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[305] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[328] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[351] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[374] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[397] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[420] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[443] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[466] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[489] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[512] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[7] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[30] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[53] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[76] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[99] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[122] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[145] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[168] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[191] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[214] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[237] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[260] = (T)(img)(_p4##x,y,z,c)), \ - (I[283] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[306] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[329] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[352] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[375] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[398] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[421] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[444] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[467] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[490] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[513] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[8] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[31] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[54] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[77] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[100] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[123] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[146] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[169] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[192] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[215] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[238] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[261] = (T)(img)(_p3##x,y,z,c)), \ - (I[284] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[307] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[330] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[353] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[376] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[399] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[422] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[445] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[468] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[491] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[514] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[9] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[32] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[55] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[78] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[101] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[124] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[147] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[170] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[193] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[216] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[239] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[262] = (T)(img)(_p2##x,y,z,c)), \ - (I[285] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[308] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[331] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[354] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[377] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[400] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[423] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[446] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[469] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[492] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[515] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[10] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[33] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[56] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[79] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[102] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[125] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[148] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[171] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[194] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[217] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[240] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[263] = (T)(img)(_p1##x,y,z,c)), \ - (I[286] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[309] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[332] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[355] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[378] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[401] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[424] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[447] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[470] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[493] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[516] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[11] = (T)(img)(x,_p11##y,z,c)), \ - (I[34] = (T)(img)(x,_p10##y,z,c)), \ - (I[57] = (T)(img)(x,_p9##y,z,c)), \ - (I[80] = (T)(img)(x,_p8##y,z,c)), \ - (I[103] = (T)(img)(x,_p7##y,z,c)), \ - (I[126] = (T)(img)(x,_p6##y,z,c)), \ - (I[149] = (T)(img)(x,_p5##y,z,c)), \ - (I[172] = (T)(img)(x,_p4##y,z,c)), \ - (I[195] = (T)(img)(x,_p3##y,z,c)), \ - (I[218] = (T)(img)(x,_p2##y,z,c)), \ - (I[241] = (T)(img)(x,_p1##y,z,c)), \ - (I[264] = (T)(img)(x,y,z,c)), \ - (I[287] = (T)(img)(x,_n1##y,z,c)), \ - (I[310] = (T)(img)(x,_n2##y,z,c)), \ - (I[333] = (T)(img)(x,_n3##y,z,c)), \ - (I[356] = (T)(img)(x,_n4##y,z,c)), \ - (I[379] = (T)(img)(x,_n5##y,z,c)), \ - (I[402] = (T)(img)(x,_n6##y,z,c)), \ - (I[425] = (T)(img)(x,_n7##y,z,c)), \ - (I[448] = (T)(img)(x,_n8##y,z,c)), \ - (I[471] = (T)(img)(x,_n9##y,z,c)), \ - (I[494] = (T)(img)(x,_n10##y,z,c)), \ - (I[517] = (T)(img)(x,_n11##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[35] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[58] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[104] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[127] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[150] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[173] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[196] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[219] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[242] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[265] = (T)(img)(_n1##x,y,z,c)), \ - (I[288] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[311] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[334] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[357] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[380] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[403] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[426] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[449] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[472] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[495] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[518] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[36] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[59] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[105] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[128] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[151] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[174] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[197] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[220] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[243] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[266] = (T)(img)(_n2##x,y,z,c)), \ - (I[289] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[312] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[335] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[358] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[381] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[404] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[427] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[450] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[473] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[496] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[519] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[37] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[60] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[106] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[129] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[152] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[175] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[198] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[221] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[244] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[267] = (T)(img)(_n3##x,y,z,c)), \ - (I[290] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[313] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[336] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[359] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[382] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[405] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[428] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[451] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[474] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[497] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[520] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[38] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[61] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[84] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[107] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[130] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[153] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[176] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[199] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[222] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[245] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[268] = (T)(img)(_n4##x,y,z,c)), \ - (I[291] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[314] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[337] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[360] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[383] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[406] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[429] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[452] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[475] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[498] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[521] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[16] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[39] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[62] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[85] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[108] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[131] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[154] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[177] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[200] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[223] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[246] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[269] = (T)(img)(_n5##x,y,z,c)), \ - (I[292] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[315] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[338] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[361] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[384] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[407] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[430] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[453] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[476] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[499] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[522] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[17] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[40] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[63] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[86] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[109] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[132] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[155] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[178] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[201] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[224] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[247] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[270] = (T)(img)(_n6##x,y,z,c)), \ - (I[293] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[316] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[339] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[362] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[385] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[408] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[431] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[454] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[477] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[500] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[523] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[18] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[41] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[64] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[87] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[110] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[133] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[156] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[179] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[202] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[225] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[248] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[271] = (T)(img)(_n7##x,y,z,c)), \ - (I[294] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[317] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[340] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[363] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[386] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[409] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[432] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[455] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[478] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[501] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[524] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[19] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[42] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[65] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[88] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[111] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[134] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[157] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[180] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[203] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[226] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[249] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[272] = (T)(img)(_n8##x,y,z,c)), \ - (I[295] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[318] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[341] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[364] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[387] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[410] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[433] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[456] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[479] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[502] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[525] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[20] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[43] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[66] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[89] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[112] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[135] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[158] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[181] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[204] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[227] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[250] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[273] = (T)(img)(_n9##x,y,z,c)), \ - (I[296] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[319] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[342] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[365] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[388] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[411] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[434] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[457] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[480] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[503] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[526] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[21] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[44] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[67] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[90] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[113] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[136] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[159] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[182] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[205] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[228] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[251] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[274] = (T)(img)(_n10##x,y,z,c)), \ - (I[297] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[320] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[343] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[366] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[389] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[412] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[435] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[458] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[481] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[504] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[527] = (T)(img)(_n10##x,_n11##y,z,c)), \ - x+11>=(img).width()?(img).width()-1:x+11); \ - x<=(int)(x1) && ((_n11##x<(img).width() && ( \ - (I[22] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[45] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[68] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[91] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[114] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[137] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[160] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[183] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[206] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[229] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[252] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[275] = (T)(img)(_n11##x,y,z,c)), \ - (I[298] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[321] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[344] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[367] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[390] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[413] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[436] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[459] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[482] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[505] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[528] = (T)(img)(_n11##x,_n11##y,z,c)),1)) || \ - _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], \ - I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], \ - I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], \ - I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], \ - I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], \ - I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], \ - I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], \ - I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], \ - I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], \ - I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], \ - I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], \ - I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], \ - I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], \ - I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], \ - I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], \ - I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], \ - I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], \ - I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], \ - I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], \ - I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], \ - I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], \ - I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], \ - I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], \ - _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x) - -#define cimg_get23x23(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p11##x,_p11##y,z,c), I[1] = (T)(img)(_p10##x,_p11##y,z,c), I[2] = (T)(img)(_p9##x,_p11##y,z,c), I[3] = (T)(img)(_p8##x,_p11##y,z,c), I[4] = (T)(img)(_p7##x,_p11##y,z,c), I[5] = (T)(img)(_p6##x,_p11##y,z,c), I[6] = (T)(img)(_p5##x,_p11##y,z,c), I[7] = (T)(img)(_p4##x,_p11##y,z,c), I[8] = (T)(img)(_p3##x,_p11##y,z,c), I[9] = (T)(img)(_p2##x,_p11##y,z,c), I[10] = (T)(img)(_p1##x,_p11##y,z,c), I[11] = (T)(img)(x,_p11##y,z,c), I[12] = (T)(img)(_n1##x,_p11##y,z,c), I[13] = (T)(img)(_n2##x,_p11##y,z,c), I[14] = (T)(img)(_n3##x,_p11##y,z,c), I[15] = (T)(img)(_n4##x,_p11##y,z,c), I[16] = (T)(img)(_n5##x,_p11##y,z,c), I[17] = (T)(img)(_n6##x,_p11##y,z,c), I[18] = (T)(img)(_n7##x,_p11##y,z,c), I[19] = (T)(img)(_n8##x,_p11##y,z,c), I[20] = (T)(img)(_n9##x,_p11##y,z,c), I[21] = (T)(img)(_n10##x,_p11##y,z,c), I[22] = (T)(img)(_n11##x,_p11##y,z,c), \ - I[23] = (T)(img)(_p11##x,_p10##y,z,c), I[24] = (T)(img)(_p10##x,_p10##y,z,c), I[25] = (T)(img)(_p9##x,_p10##y,z,c), I[26] = (T)(img)(_p8##x,_p10##y,z,c), I[27] = (T)(img)(_p7##x,_p10##y,z,c), I[28] = (T)(img)(_p6##x,_p10##y,z,c), I[29] = (T)(img)(_p5##x,_p10##y,z,c), I[30] = (T)(img)(_p4##x,_p10##y,z,c), I[31] = (T)(img)(_p3##x,_p10##y,z,c), I[32] = (T)(img)(_p2##x,_p10##y,z,c), I[33] = (T)(img)(_p1##x,_p10##y,z,c), I[34] = (T)(img)(x,_p10##y,z,c), I[35] = (T)(img)(_n1##x,_p10##y,z,c), I[36] = (T)(img)(_n2##x,_p10##y,z,c), I[37] = (T)(img)(_n3##x,_p10##y,z,c), I[38] = (T)(img)(_n4##x,_p10##y,z,c), I[39] = (T)(img)(_n5##x,_p10##y,z,c), I[40] = (T)(img)(_n6##x,_p10##y,z,c), I[41] = (T)(img)(_n7##x,_p10##y,z,c), I[42] = (T)(img)(_n8##x,_p10##y,z,c), I[43] = (T)(img)(_n9##x,_p10##y,z,c), I[44] = (T)(img)(_n10##x,_p10##y,z,c), I[45] = (T)(img)(_n11##x,_p10##y,z,c), \ - I[46] = (T)(img)(_p11##x,_p9##y,z,c), I[47] = (T)(img)(_p10##x,_p9##y,z,c), I[48] = (T)(img)(_p9##x,_p9##y,z,c), I[49] = (T)(img)(_p8##x,_p9##y,z,c), I[50] = (T)(img)(_p7##x,_p9##y,z,c), I[51] = (T)(img)(_p6##x,_p9##y,z,c), I[52] = (T)(img)(_p5##x,_p9##y,z,c), I[53] = (T)(img)(_p4##x,_p9##y,z,c), I[54] = (T)(img)(_p3##x,_p9##y,z,c), I[55] = (T)(img)(_p2##x,_p9##y,z,c), I[56] = (T)(img)(_p1##x,_p9##y,z,c), I[57] = (T)(img)(x,_p9##y,z,c), I[58] = (T)(img)(_n1##x,_p9##y,z,c), I[59] = (T)(img)(_n2##x,_p9##y,z,c), I[60] = (T)(img)(_n3##x,_p9##y,z,c), I[61] = (T)(img)(_n4##x,_p9##y,z,c), I[62] = (T)(img)(_n5##x,_p9##y,z,c), I[63] = (T)(img)(_n6##x,_p9##y,z,c), I[64] = (T)(img)(_n7##x,_p9##y,z,c), I[65] = (T)(img)(_n8##x,_p9##y,z,c), I[66] = (T)(img)(_n9##x,_p9##y,z,c), I[67] = (T)(img)(_n10##x,_p9##y,z,c), I[68] = (T)(img)(_n11##x,_p9##y,z,c), \ - I[69] = (T)(img)(_p11##x,_p8##y,z,c), I[70] = (T)(img)(_p10##x,_p8##y,z,c), I[71] = (T)(img)(_p9##x,_p8##y,z,c), I[72] = (T)(img)(_p8##x,_p8##y,z,c), I[73] = (T)(img)(_p7##x,_p8##y,z,c), I[74] = (T)(img)(_p6##x,_p8##y,z,c), I[75] = (T)(img)(_p5##x,_p8##y,z,c), I[76] = (T)(img)(_p4##x,_p8##y,z,c), I[77] = (T)(img)(_p3##x,_p8##y,z,c), I[78] = (T)(img)(_p2##x,_p8##y,z,c), I[79] = (T)(img)(_p1##x,_p8##y,z,c), I[80] = (T)(img)(x,_p8##y,z,c), I[81] = (T)(img)(_n1##x,_p8##y,z,c), I[82] = (T)(img)(_n2##x,_p8##y,z,c), I[83] = (T)(img)(_n3##x,_p8##y,z,c), I[84] = (T)(img)(_n4##x,_p8##y,z,c), I[85] = (T)(img)(_n5##x,_p8##y,z,c), I[86] = (T)(img)(_n6##x,_p8##y,z,c), I[87] = (T)(img)(_n7##x,_p8##y,z,c), I[88] = (T)(img)(_n8##x,_p8##y,z,c), I[89] = (T)(img)(_n9##x,_p8##y,z,c), I[90] = (T)(img)(_n10##x,_p8##y,z,c), I[91] = (T)(img)(_n11##x,_p8##y,z,c), \ - I[92] = (T)(img)(_p11##x,_p7##y,z,c), I[93] = (T)(img)(_p10##x,_p7##y,z,c), I[94] = (T)(img)(_p9##x,_p7##y,z,c), I[95] = (T)(img)(_p8##x,_p7##y,z,c), I[96] = (T)(img)(_p7##x,_p7##y,z,c), I[97] = (T)(img)(_p6##x,_p7##y,z,c), I[98] = (T)(img)(_p5##x,_p7##y,z,c), I[99] = (T)(img)(_p4##x,_p7##y,z,c), I[100] = (T)(img)(_p3##x,_p7##y,z,c), I[101] = (T)(img)(_p2##x,_p7##y,z,c), I[102] = (T)(img)(_p1##x,_p7##y,z,c), I[103] = (T)(img)(x,_p7##y,z,c), I[104] = (T)(img)(_n1##x,_p7##y,z,c), I[105] = (T)(img)(_n2##x,_p7##y,z,c), I[106] = (T)(img)(_n3##x,_p7##y,z,c), I[107] = (T)(img)(_n4##x,_p7##y,z,c), I[108] = (T)(img)(_n5##x,_p7##y,z,c), I[109] = (T)(img)(_n6##x,_p7##y,z,c), I[110] = (T)(img)(_n7##x,_p7##y,z,c), I[111] = (T)(img)(_n8##x,_p7##y,z,c), I[112] = (T)(img)(_n9##x,_p7##y,z,c), I[113] = (T)(img)(_n10##x,_p7##y,z,c), I[114] = (T)(img)(_n11##x,_p7##y,z,c), \ - I[115] = (T)(img)(_p11##x,_p6##y,z,c), I[116] = (T)(img)(_p10##x,_p6##y,z,c), I[117] = (T)(img)(_p9##x,_p6##y,z,c), I[118] = (T)(img)(_p8##x,_p6##y,z,c), I[119] = (T)(img)(_p7##x,_p6##y,z,c), I[120] = (T)(img)(_p6##x,_p6##y,z,c), I[121] = (T)(img)(_p5##x,_p6##y,z,c), I[122] = (T)(img)(_p4##x,_p6##y,z,c), I[123] = (T)(img)(_p3##x,_p6##y,z,c), I[124] = (T)(img)(_p2##x,_p6##y,z,c), I[125] = (T)(img)(_p1##x,_p6##y,z,c), I[126] = (T)(img)(x,_p6##y,z,c), I[127] = (T)(img)(_n1##x,_p6##y,z,c), I[128] = (T)(img)(_n2##x,_p6##y,z,c), I[129] = (T)(img)(_n3##x,_p6##y,z,c), I[130] = (T)(img)(_n4##x,_p6##y,z,c), I[131] = (T)(img)(_n5##x,_p6##y,z,c), I[132] = (T)(img)(_n6##x,_p6##y,z,c), I[133] = (T)(img)(_n7##x,_p6##y,z,c), I[134] = (T)(img)(_n8##x,_p6##y,z,c), I[135] = (T)(img)(_n9##x,_p6##y,z,c), I[136] = (T)(img)(_n10##x,_p6##y,z,c), I[137] = (T)(img)(_n11##x,_p6##y,z,c), \ - I[138] = (T)(img)(_p11##x,_p5##y,z,c), I[139] = (T)(img)(_p10##x,_p5##y,z,c), I[140] = (T)(img)(_p9##x,_p5##y,z,c), I[141] = (T)(img)(_p8##x,_p5##y,z,c), I[142] = (T)(img)(_p7##x,_p5##y,z,c), I[143] = (T)(img)(_p6##x,_p5##y,z,c), I[144] = (T)(img)(_p5##x,_p5##y,z,c), I[145] = (T)(img)(_p4##x,_p5##y,z,c), I[146] = (T)(img)(_p3##x,_p5##y,z,c), I[147] = (T)(img)(_p2##x,_p5##y,z,c), I[148] = (T)(img)(_p1##x,_p5##y,z,c), I[149] = (T)(img)(x,_p5##y,z,c), I[150] = (T)(img)(_n1##x,_p5##y,z,c), I[151] = (T)(img)(_n2##x,_p5##y,z,c), I[152] = (T)(img)(_n3##x,_p5##y,z,c), I[153] = (T)(img)(_n4##x,_p5##y,z,c), I[154] = (T)(img)(_n5##x,_p5##y,z,c), I[155] = (T)(img)(_n6##x,_p5##y,z,c), I[156] = (T)(img)(_n7##x,_p5##y,z,c), I[157] = (T)(img)(_n8##x,_p5##y,z,c), I[158] = (T)(img)(_n9##x,_p5##y,z,c), I[159] = (T)(img)(_n10##x,_p5##y,z,c), I[160] = (T)(img)(_n11##x,_p5##y,z,c), \ - I[161] = (T)(img)(_p11##x,_p4##y,z,c), I[162] = (T)(img)(_p10##x,_p4##y,z,c), I[163] = (T)(img)(_p9##x,_p4##y,z,c), I[164] = (T)(img)(_p8##x,_p4##y,z,c), I[165] = (T)(img)(_p7##x,_p4##y,z,c), I[166] = (T)(img)(_p6##x,_p4##y,z,c), I[167] = (T)(img)(_p5##x,_p4##y,z,c), I[168] = (T)(img)(_p4##x,_p4##y,z,c), I[169] = (T)(img)(_p3##x,_p4##y,z,c), I[170] = (T)(img)(_p2##x,_p4##y,z,c), I[171] = (T)(img)(_p1##x,_p4##y,z,c), I[172] = (T)(img)(x,_p4##y,z,c), I[173] = (T)(img)(_n1##x,_p4##y,z,c), I[174] = (T)(img)(_n2##x,_p4##y,z,c), I[175] = (T)(img)(_n3##x,_p4##y,z,c), I[176] = (T)(img)(_n4##x,_p4##y,z,c), I[177] = (T)(img)(_n5##x,_p4##y,z,c), I[178] = (T)(img)(_n6##x,_p4##y,z,c), I[179] = (T)(img)(_n7##x,_p4##y,z,c), I[180] = (T)(img)(_n8##x,_p4##y,z,c), I[181] = (T)(img)(_n9##x,_p4##y,z,c), I[182] = (T)(img)(_n10##x,_p4##y,z,c), I[183] = (T)(img)(_n11##x,_p4##y,z,c), \ - I[184] = (T)(img)(_p11##x,_p3##y,z,c), I[185] = (T)(img)(_p10##x,_p3##y,z,c), I[186] = (T)(img)(_p9##x,_p3##y,z,c), I[187] = (T)(img)(_p8##x,_p3##y,z,c), I[188] = (T)(img)(_p7##x,_p3##y,z,c), I[189] = (T)(img)(_p6##x,_p3##y,z,c), I[190] = (T)(img)(_p5##x,_p3##y,z,c), I[191] = (T)(img)(_p4##x,_p3##y,z,c), I[192] = (T)(img)(_p3##x,_p3##y,z,c), I[193] = (T)(img)(_p2##x,_p3##y,z,c), I[194] = (T)(img)(_p1##x,_p3##y,z,c), I[195] = (T)(img)(x,_p3##y,z,c), I[196] = (T)(img)(_n1##x,_p3##y,z,c), I[197] = (T)(img)(_n2##x,_p3##y,z,c), I[198] = (T)(img)(_n3##x,_p3##y,z,c), I[199] = (T)(img)(_n4##x,_p3##y,z,c), I[200] = (T)(img)(_n5##x,_p3##y,z,c), I[201] = (T)(img)(_n6##x,_p3##y,z,c), I[202] = (T)(img)(_n7##x,_p3##y,z,c), I[203] = (T)(img)(_n8##x,_p3##y,z,c), I[204] = (T)(img)(_n9##x,_p3##y,z,c), I[205] = (T)(img)(_n10##x,_p3##y,z,c), I[206] = (T)(img)(_n11##x,_p3##y,z,c), \ - I[207] = (T)(img)(_p11##x,_p2##y,z,c), I[208] = (T)(img)(_p10##x,_p2##y,z,c), I[209] = (T)(img)(_p9##x,_p2##y,z,c), I[210] = (T)(img)(_p8##x,_p2##y,z,c), I[211] = (T)(img)(_p7##x,_p2##y,z,c), I[212] = (T)(img)(_p6##x,_p2##y,z,c), I[213] = (T)(img)(_p5##x,_p2##y,z,c), I[214] = (T)(img)(_p4##x,_p2##y,z,c), I[215] = (T)(img)(_p3##x,_p2##y,z,c), I[216] = (T)(img)(_p2##x,_p2##y,z,c), I[217] = (T)(img)(_p1##x,_p2##y,z,c), I[218] = (T)(img)(x,_p2##y,z,c), I[219] = (T)(img)(_n1##x,_p2##y,z,c), I[220] = (T)(img)(_n2##x,_p2##y,z,c), I[221] = (T)(img)(_n3##x,_p2##y,z,c), I[222] = (T)(img)(_n4##x,_p2##y,z,c), I[223] = (T)(img)(_n5##x,_p2##y,z,c), I[224] = (T)(img)(_n6##x,_p2##y,z,c), I[225] = (T)(img)(_n7##x,_p2##y,z,c), I[226] = (T)(img)(_n8##x,_p2##y,z,c), I[227] = (T)(img)(_n9##x,_p2##y,z,c), I[228] = (T)(img)(_n10##x,_p2##y,z,c), I[229] = (T)(img)(_n11##x,_p2##y,z,c), \ - I[230] = (T)(img)(_p11##x,_p1##y,z,c), I[231] = (T)(img)(_p10##x,_p1##y,z,c), I[232] = (T)(img)(_p9##x,_p1##y,z,c), I[233] = (T)(img)(_p8##x,_p1##y,z,c), I[234] = (T)(img)(_p7##x,_p1##y,z,c), I[235] = (T)(img)(_p6##x,_p1##y,z,c), I[236] = (T)(img)(_p5##x,_p1##y,z,c), I[237] = (T)(img)(_p4##x,_p1##y,z,c), I[238] = (T)(img)(_p3##x,_p1##y,z,c), I[239] = (T)(img)(_p2##x,_p1##y,z,c), I[240] = (T)(img)(_p1##x,_p1##y,z,c), I[241] = (T)(img)(x,_p1##y,z,c), I[242] = (T)(img)(_n1##x,_p1##y,z,c), I[243] = (T)(img)(_n2##x,_p1##y,z,c), I[244] = (T)(img)(_n3##x,_p1##y,z,c), I[245] = (T)(img)(_n4##x,_p1##y,z,c), I[246] = (T)(img)(_n5##x,_p1##y,z,c), I[247] = (T)(img)(_n6##x,_p1##y,z,c), I[248] = (T)(img)(_n7##x,_p1##y,z,c), I[249] = (T)(img)(_n8##x,_p1##y,z,c), I[250] = (T)(img)(_n9##x,_p1##y,z,c), I[251] = (T)(img)(_n10##x,_p1##y,z,c), I[252] = (T)(img)(_n11##x,_p1##y,z,c), \ - I[253] = (T)(img)(_p11##x,y,z,c), I[254] = (T)(img)(_p10##x,y,z,c), I[255] = (T)(img)(_p9##x,y,z,c), I[256] = (T)(img)(_p8##x,y,z,c), I[257] = (T)(img)(_p7##x,y,z,c), I[258] = (T)(img)(_p6##x,y,z,c), I[259] = (T)(img)(_p5##x,y,z,c), I[260] = (T)(img)(_p4##x,y,z,c), I[261] = (T)(img)(_p3##x,y,z,c), I[262] = (T)(img)(_p2##x,y,z,c), I[263] = (T)(img)(_p1##x,y,z,c), I[264] = (T)(img)(x,y,z,c), I[265] = (T)(img)(_n1##x,y,z,c), I[266] = (T)(img)(_n2##x,y,z,c), I[267] = (T)(img)(_n3##x,y,z,c), I[268] = (T)(img)(_n4##x,y,z,c), I[269] = (T)(img)(_n5##x,y,z,c), I[270] = (T)(img)(_n6##x,y,z,c), I[271] = (T)(img)(_n7##x,y,z,c), I[272] = (T)(img)(_n8##x,y,z,c), I[273] = (T)(img)(_n9##x,y,z,c), I[274] = (T)(img)(_n10##x,y,z,c), I[275] = (T)(img)(_n11##x,y,z,c), \ - I[276] = (T)(img)(_p11##x,_n1##y,z,c), I[277] = (T)(img)(_p10##x,_n1##y,z,c), I[278] = (T)(img)(_p9##x,_n1##y,z,c), I[279] = (T)(img)(_p8##x,_n1##y,z,c), I[280] = (T)(img)(_p7##x,_n1##y,z,c), I[281] = (T)(img)(_p6##x,_n1##y,z,c), I[282] = (T)(img)(_p5##x,_n1##y,z,c), I[283] = (T)(img)(_p4##x,_n1##y,z,c), I[284] = (T)(img)(_p3##x,_n1##y,z,c), I[285] = (T)(img)(_p2##x,_n1##y,z,c), I[286] = (T)(img)(_p1##x,_n1##y,z,c), I[287] = (T)(img)(x,_n1##y,z,c), I[288] = (T)(img)(_n1##x,_n1##y,z,c), I[289] = (T)(img)(_n2##x,_n1##y,z,c), I[290] = (T)(img)(_n3##x,_n1##y,z,c), I[291] = (T)(img)(_n4##x,_n1##y,z,c), I[292] = (T)(img)(_n5##x,_n1##y,z,c), I[293] = (T)(img)(_n6##x,_n1##y,z,c), I[294] = (T)(img)(_n7##x,_n1##y,z,c), I[295] = (T)(img)(_n8##x,_n1##y,z,c), I[296] = (T)(img)(_n9##x,_n1##y,z,c), I[297] = (T)(img)(_n10##x,_n1##y,z,c), I[298] = (T)(img)(_n11##x,_n1##y,z,c), \ - I[299] = (T)(img)(_p11##x,_n2##y,z,c), I[300] = (T)(img)(_p10##x,_n2##y,z,c), I[301] = (T)(img)(_p9##x,_n2##y,z,c), I[302] = (T)(img)(_p8##x,_n2##y,z,c), I[303] = (T)(img)(_p7##x,_n2##y,z,c), I[304] = (T)(img)(_p6##x,_n2##y,z,c), I[305] = (T)(img)(_p5##x,_n2##y,z,c), I[306] = (T)(img)(_p4##x,_n2##y,z,c), I[307] = (T)(img)(_p3##x,_n2##y,z,c), I[308] = (T)(img)(_p2##x,_n2##y,z,c), I[309] = (T)(img)(_p1##x,_n2##y,z,c), I[310] = (T)(img)(x,_n2##y,z,c), I[311] = (T)(img)(_n1##x,_n2##y,z,c), I[312] = (T)(img)(_n2##x,_n2##y,z,c), I[313] = (T)(img)(_n3##x,_n2##y,z,c), I[314] = (T)(img)(_n4##x,_n2##y,z,c), I[315] = (T)(img)(_n5##x,_n2##y,z,c), I[316] = (T)(img)(_n6##x,_n2##y,z,c), I[317] = (T)(img)(_n7##x,_n2##y,z,c), I[318] = (T)(img)(_n8##x,_n2##y,z,c), I[319] = (T)(img)(_n9##x,_n2##y,z,c), I[320] = (T)(img)(_n10##x,_n2##y,z,c), I[321] = (T)(img)(_n11##x,_n2##y,z,c), \ - I[322] = (T)(img)(_p11##x,_n3##y,z,c), I[323] = (T)(img)(_p10##x,_n3##y,z,c), I[324] = (T)(img)(_p9##x,_n3##y,z,c), I[325] = (T)(img)(_p8##x,_n3##y,z,c), I[326] = (T)(img)(_p7##x,_n3##y,z,c), I[327] = (T)(img)(_p6##x,_n3##y,z,c), I[328] = (T)(img)(_p5##x,_n3##y,z,c), I[329] = (T)(img)(_p4##x,_n3##y,z,c), I[330] = (T)(img)(_p3##x,_n3##y,z,c), I[331] = (T)(img)(_p2##x,_n3##y,z,c), I[332] = (T)(img)(_p1##x,_n3##y,z,c), I[333] = (T)(img)(x,_n3##y,z,c), I[334] = (T)(img)(_n1##x,_n3##y,z,c), I[335] = (T)(img)(_n2##x,_n3##y,z,c), I[336] = (T)(img)(_n3##x,_n3##y,z,c), I[337] = (T)(img)(_n4##x,_n3##y,z,c), I[338] = (T)(img)(_n5##x,_n3##y,z,c), I[339] = (T)(img)(_n6##x,_n3##y,z,c), I[340] = (T)(img)(_n7##x,_n3##y,z,c), I[341] = (T)(img)(_n8##x,_n3##y,z,c), I[342] = (T)(img)(_n9##x,_n3##y,z,c), I[343] = (T)(img)(_n10##x,_n3##y,z,c), I[344] = (T)(img)(_n11##x,_n3##y,z,c), \ - I[345] = (T)(img)(_p11##x,_n4##y,z,c), I[346] = (T)(img)(_p10##x,_n4##y,z,c), I[347] = (T)(img)(_p9##x,_n4##y,z,c), I[348] = (T)(img)(_p8##x,_n4##y,z,c), I[349] = (T)(img)(_p7##x,_n4##y,z,c), I[350] = (T)(img)(_p6##x,_n4##y,z,c), I[351] = (T)(img)(_p5##x,_n4##y,z,c), I[352] = (T)(img)(_p4##x,_n4##y,z,c), I[353] = (T)(img)(_p3##x,_n4##y,z,c), I[354] = (T)(img)(_p2##x,_n4##y,z,c), I[355] = (T)(img)(_p1##x,_n4##y,z,c), I[356] = (T)(img)(x,_n4##y,z,c), I[357] = (T)(img)(_n1##x,_n4##y,z,c), I[358] = (T)(img)(_n2##x,_n4##y,z,c), I[359] = (T)(img)(_n3##x,_n4##y,z,c), I[360] = (T)(img)(_n4##x,_n4##y,z,c), I[361] = (T)(img)(_n5##x,_n4##y,z,c), I[362] = (T)(img)(_n6##x,_n4##y,z,c), I[363] = (T)(img)(_n7##x,_n4##y,z,c), I[364] = (T)(img)(_n8##x,_n4##y,z,c), I[365] = (T)(img)(_n9##x,_n4##y,z,c), I[366] = (T)(img)(_n10##x,_n4##y,z,c), I[367] = (T)(img)(_n11##x,_n4##y,z,c), \ - I[368] = (T)(img)(_p11##x,_n5##y,z,c), I[369] = (T)(img)(_p10##x,_n5##y,z,c), I[370] = (T)(img)(_p9##x,_n5##y,z,c), I[371] = (T)(img)(_p8##x,_n5##y,z,c), I[372] = (T)(img)(_p7##x,_n5##y,z,c), I[373] = (T)(img)(_p6##x,_n5##y,z,c), I[374] = (T)(img)(_p5##x,_n5##y,z,c), I[375] = (T)(img)(_p4##x,_n5##y,z,c), I[376] = (T)(img)(_p3##x,_n5##y,z,c), I[377] = (T)(img)(_p2##x,_n5##y,z,c), I[378] = (T)(img)(_p1##x,_n5##y,z,c), I[379] = (T)(img)(x,_n5##y,z,c), I[380] = (T)(img)(_n1##x,_n5##y,z,c), I[381] = (T)(img)(_n2##x,_n5##y,z,c), I[382] = (T)(img)(_n3##x,_n5##y,z,c), I[383] = (T)(img)(_n4##x,_n5##y,z,c), I[384] = (T)(img)(_n5##x,_n5##y,z,c), I[385] = (T)(img)(_n6##x,_n5##y,z,c), I[386] = (T)(img)(_n7##x,_n5##y,z,c), I[387] = (T)(img)(_n8##x,_n5##y,z,c), I[388] = (T)(img)(_n9##x,_n5##y,z,c), I[389] = (T)(img)(_n10##x,_n5##y,z,c), I[390] = (T)(img)(_n11##x,_n5##y,z,c), \ - I[391] = (T)(img)(_p11##x,_n6##y,z,c), I[392] = (T)(img)(_p10##x,_n6##y,z,c), I[393] = (T)(img)(_p9##x,_n6##y,z,c), I[394] = (T)(img)(_p8##x,_n6##y,z,c), I[395] = (T)(img)(_p7##x,_n6##y,z,c), I[396] = (T)(img)(_p6##x,_n6##y,z,c), I[397] = (T)(img)(_p5##x,_n6##y,z,c), I[398] = (T)(img)(_p4##x,_n6##y,z,c), I[399] = (T)(img)(_p3##x,_n6##y,z,c), I[400] = (T)(img)(_p2##x,_n6##y,z,c), I[401] = (T)(img)(_p1##x,_n6##y,z,c), I[402] = (T)(img)(x,_n6##y,z,c), I[403] = (T)(img)(_n1##x,_n6##y,z,c), I[404] = (T)(img)(_n2##x,_n6##y,z,c), I[405] = (T)(img)(_n3##x,_n6##y,z,c), I[406] = (T)(img)(_n4##x,_n6##y,z,c), I[407] = (T)(img)(_n5##x,_n6##y,z,c), I[408] = (T)(img)(_n6##x,_n6##y,z,c), I[409] = (T)(img)(_n7##x,_n6##y,z,c), I[410] = (T)(img)(_n8##x,_n6##y,z,c), I[411] = (T)(img)(_n9##x,_n6##y,z,c), I[412] = (T)(img)(_n10##x,_n6##y,z,c), I[413] = (T)(img)(_n11##x,_n6##y,z,c), \ - I[414] = (T)(img)(_p11##x,_n7##y,z,c), I[415] = (T)(img)(_p10##x,_n7##y,z,c), I[416] = (T)(img)(_p9##x,_n7##y,z,c), I[417] = (T)(img)(_p8##x,_n7##y,z,c), I[418] = (T)(img)(_p7##x,_n7##y,z,c), I[419] = (T)(img)(_p6##x,_n7##y,z,c), I[420] = (T)(img)(_p5##x,_n7##y,z,c), I[421] = (T)(img)(_p4##x,_n7##y,z,c), I[422] = (T)(img)(_p3##x,_n7##y,z,c), I[423] = (T)(img)(_p2##x,_n7##y,z,c), I[424] = (T)(img)(_p1##x,_n7##y,z,c), I[425] = (T)(img)(x,_n7##y,z,c), I[426] = (T)(img)(_n1##x,_n7##y,z,c), I[427] = (T)(img)(_n2##x,_n7##y,z,c), I[428] = (T)(img)(_n3##x,_n7##y,z,c), I[429] = (T)(img)(_n4##x,_n7##y,z,c), I[430] = (T)(img)(_n5##x,_n7##y,z,c), I[431] = (T)(img)(_n6##x,_n7##y,z,c), I[432] = (T)(img)(_n7##x,_n7##y,z,c), I[433] = (T)(img)(_n8##x,_n7##y,z,c), I[434] = (T)(img)(_n9##x,_n7##y,z,c), I[435] = (T)(img)(_n10##x,_n7##y,z,c), I[436] = (T)(img)(_n11##x,_n7##y,z,c), \ - I[437] = (T)(img)(_p11##x,_n8##y,z,c), I[438] = (T)(img)(_p10##x,_n8##y,z,c), I[439] = (T)(img)(_p9##x,_n8##y,z,c), I[440] = (T)(img)(_p8##x,_n8##y,z,c), I[441] = (T)(img)(_p7##x,_n8##y,z,c), I[442] = (T)(img)(_p6##x,_n8##y,z,c), I[443] = (T)(img)(_p5##x,_n8##y,z,c), I[444] = (T)(img)(_p4##x,_n8##y,z,c), I[445] = (T)(img)(_p3##x,_n8##y,z,c), I[446] = (T)(img)(_p2##x,_n8##y,z,c), I[447] = (T)(img)(_p1##x,_n8##y,z,c), I[448] = (T)(img)(x,_n8##y,z,c), I[449] = (T)(img)(_n1##x,_n8##y,z,c), I[450] = (T)(img)(_n2##x,_n8##y,z,c), I[451] = (T)(img)(_n3##x,_n8##y,z,c), I[452] = (T)(img)(_n4##x,_n8##y,z,c), I[453] = (T)(img)(_n5##x,_n8##y,z,c), I[454] = (T)(img)(_n6##x,_n8##y,z,c), I[455] = (T)(img)(_n7##x,_n8##y,z,c), I[456] = (T)(img)(_n8##x,_n8##y,z,c), I[457] = (T)(img)(_n9##x,_n8##y,z,c), I[458] = (T)(img)(_n10##x,_n8##y,z,c), I[459] = (T)(img)(_n11##x,_n8##y,z,c), \ - I[460] = (T)(img)(_p11##x,_n9##y,z,c), I[461] = (T)(img)(_p10##x,_n9##y,z,c), I[462] = (T)(img)(_p9##x,_n9##y,z,c), I[463] = (T)(img)(_p8##x,_n9##y,z,c), I[464] = (T)(img)(_p7##x,_n9##y,z,c), I[465] = (T)(img)(_p6##x,_n9##y,z,c), I[466] = (T)(img)(_p5##x,_n9##y,z,c), I[467] = (T)(img)(_p4##x,_n9##y,z,c), I[468] = (T)(img)(_p3##x,_n9##y,z,c), I[469] = (T)(img)(_p2##x,_n9##y,z,c), I[470] = (T)(img)(_p1##x,_n9##y,z,c), I[471] = (T)(img)(x,_n9##y,z,c), I[472] = (T)(img)(_n1##x,_n9##y,z,c), I[473] = (T)(img)(_n2##x,_n9##y,z,c), I[474] = (T)(img)(_n3##x,_n9##y,z,c), I[475] = (T)(img)(_n4##x,_n9##y,z,c), I[476] = (T)(img)(_n5##x,_n9##y,z,c), I[477] = (T)(img)(_n6##x,_n9##y,z,c), I[478] = (T)(img)(_n7##x,_n9##y,z,c), I[479] = (T)(img)(_n8##x,_n9##y,z,c), I[480] = (T)(img)(_n9##x,_n9##y,z,c), I[481] = (T)(img)(_n10##x,_n9##y,z,c), I[482] = (T)(img)(_n11##x,_n9##y,z,c), \ - I[483] = (T)(img)(_p11##x,_n10##y,z,c), I[484] = (T)(img)(_p10##x,_n10##y,z,c), I[485] = (T)(img)(_p9##x,_n10##y,z,c), I[486] = (T)(img)(_p8##x,_n10##y,z,c), I[487] = (T)(img)(_p7##x,_n10##y,z,c), I[488] = (T)(img)(_p6##x,_n10##y,z,c), I[489] = (T)(img)(_p5##x,_n10##y,z,c), I[490] = (T)(img)(_p4##x,_n10##y,z,c), I[491] = (T)(img)(_p3##x,_n10##y,z,c), I[492] = (T)(img)(_p2##x,_n10##y,z,c), I[493] = (T)(img)(_p1##x,_n10##y,z,c), I[494] = (T)(img)(x,_n10##y,z,c), I[495] = (T)(img)(_n1##x,_n10##y,z,c), I[496] = (T)(img)(_n2##x,_n10##y,z,c), I[497] = (T)(img)(_n3##x,_n10##y,z,c), I[498] = (T)(img)(_n4##x,_n10##y,z,c), I[499] = (T)(img)(_n5##x,_n10##y,z,c), I[500] = (T)(img)(_n6##x,_n10##y,z,c), I[501] = (T)(img)(_n7##x,_n10##y,z,c), I[502] = (T)(img)(_n8##x,_n10##y,z,c), I[503] = (T)(img)(_n9##x,_n10##y,z,c), I[504] = (T)(img)(_n10##x,_n10##y,z,c), I[505] = (T)(img)(_n11##x,_n10##y,z,c), \ - I[506] = (T)(img)(_p11##x,_n11##y,z,c), I[507] = (T)(img)(_p10##x,_n11##y,z,c), I[508] = (T)(img)(_p9##x,_n11##y,z,c), I[509] = (T)(img)(_p8##x,_n11##y,z,c), I[510] = (T)(img)(_p7##x,_n11##y,z,c), I[511] = (T)(img)(_p6##x,_n11##y,z,c), I[512] = (T)(img)(_p5##x,_n11##y,z,c), I[513] = (T)(img)(_p4##x,_n11##y,z,c), I[514] = (T)(img)(_p3##x,_n11##y,z,c), I[515] = (T)(img)(_p2##x,_n11##y,z,c), I[516] = (T)(img)(_p1##x,_n11##y,z,c), I[517] = (T)(img)(x,_n11##y,z,c), I[518] = (T)(img)(_n1##x,_n11##y,z,c), I[519] = (T)(img)(_n2##x,_n11##y,z,c), I[520] = (T)(img)(_n3##x,_n11##y,z,c), I[521] = (T)(img)(_n4##x,_n11##y,z,c), I[522] = (T)(img)(_n5##x,_n11##y,z,c), I[523] = (T)(img)(_n6##x,_n11##y,z,c), I[524] = (T)(img)(_n7##x,_n11##y,z,c), I[525] = (T)(img)(_n8##x,_n11##y,z,c), I[526] = (T)(img)(_n9##x,_n11##y,z,c), I[527] = (T)(img)(_n10##x,_n11##y,z,c), I[528] = (T)(img)(_n11##x,_n11##y,z,c); - -// Define 24x24 loop macros -//------------------------- -#define cimg_for24(bound,i) for (int i = 0, \ - _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12; \ - _n12##i<(int)(bound) || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i) - -#define cimg_for24X(img,x) cimg_for24((img)._width,x) -#define cimg_for24Y(img,y) cimg_for24((img)._height,y) -#define cimg_for24Z(img,z) cimg_for24((img)._depth,z) -#define cimg_for24C(img,c) cimg_for24((img)._spectrum,c) -#define cimg_for24XY(img,x,y) cimg_for24Y(img,y) cimg_for24X(img,x) -#define cimg_for24XZ(img,x,z) cimg_for24Z(img,z) cimg_for24X(img,x) -#define cimg_for24XC(img,x,c) cimg_for24C(img,c) cimg_for24X(img,x) -#define cimg_for24YZ(img,y,z) cimg_for24Z(img,z) cimg_for24Y(img,y) -#define cimg_for24YC(img,y,c) cimg_for24C(img,c) cimg_for24Y(img,y) -#define cimg_for24ZC(img,z,c) cimg_for24C(img,c) cimg_for24Z(img,z) -#define cimg_for24XYZ(img,x,y,z) cimg_for24Z(img,z) cimg_for24XY(img,x,y) -#define cimg_for24XZC(img,x,z,c) cimg_for24C(img,c) cimg_for24XZ(img,x,z) -#define cimg_for24YZC(img,y,z,c) cimg_for24C(img,c) cimg_for24YZ(img,y,z) -#define cimg_for24XYZC(img,x,y,z,c) cimg_for24C(img,c) cimg_for24XYZ(img,x,y,z) - -#define cimg_for_in24(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12; \ - i<=(int)(i1) && (_n12##i<(int)(bound) || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i) - -#define cimg_for_in24X(img,x0,x1,x) cimg_for_in24((img)._width,x0,x1,x) -#define cimg_for_in24Y(img,y0,y1,y) cimg_for_in24((img)._height,y0,y1,y) -#define cimg_for_in24Z(img,z0,z1,z) cimg_for_in24((img)._depth,z0,z1,z) -#define cimg_for_in24C(img,c0,c1,c) cimg_for_in24((img)._spectrum,c0,c1,c) -#define cimg_for_in24XY(img,x0,y0,x1,y1,x,y) cimg_for_in24Y(img,y0,y1,y) cimg_for_in24X(img,x0,x1,x) -#define cimg_for_in24XZ(img,x0,z0,x1,z1,x,z) cimg_for_in24Z(img,z0,z1,z) cimg_for_in24X(img,x0,x1,x) -#define cimg_for_in24XC(img,x0,c0,x1,c1,x,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24X(img,x0,x1,x) -#define cimg_for_in24YZ(img,y0,z0,y1,z1,y,z) cimg_for_in24Z(img,z0,z1,z) cimg_for_in24Y(img,y0,y1,y) -#define cimg_for_in24YC(img,y0,c0,y1,c1,y,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24Y(img,y0,y1,y) -#define cimg_for_in24ZC(img,z0,c0,z1,c1,z,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24Z(img,z0,z1,z) -#define cimg_for_in24XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in24Z(img,z0,z1,z) cimg_for_in24XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in24XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in24YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in24XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in24C(img,c0,c1,c) cimg_for_in24XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for24x24(img,x,y,z,c,I,T) \ - cimg_for24((img)._height,y) for (int x = 0, \ - _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p11##y,z,c)), \ - (I[24] = I[25] = I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = (T)(img)(0,_p10##y,z,c)), \ - (I[48] = I[49] = I[50] = I[51] = I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_p9##y,z,c)), \ - (I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = I[78] = I[79] = I[80] = I[81] = I[82] = I[83] = (T)(img)(0,_p8##y,z,c)), \ - (I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = (T)(img)(0,_p7##y,z,c)), \ - (I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = (T)(img)(0,_p6##y,z,c)), \ - (I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = (T)(img)(0,_p5##y,z,c)), \ - (I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = I[176] = I[177] = I[178] = I[179] = (T)(img)(0,_p4##y,z,c)), \ - (I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = I[202] = I[203] = (T)(img)(0,_p3##y,z,c)), \ - (I[216] = I[217] = I[218] = I[219] = I[220] = I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = (T)(img)(0,_p2##y,z,c)), \ - (I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = I[247] = I[248] = I[249] = I[250] = I[251] = (T)(img)(0,_p1##y,z,c)), \ - (I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = (T)(img)(0,y,z,c)), \ - (I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = I[297] = I[298] = I[299] = (T)(img)(0,_n1##y,z,c)), \ - (I[312] = I[313] = I[314] = I[315] = I[316] = I[317] = I[318] = I[319] = I[320] = I[321] = I[322] = I[323] = (T)(img)(0,_n2##y,z,c)), \ - (I[336] = I[337] = I[338] = I[339] = I[340] = I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = (T)(img)(0,_n3##y,z,c)), \ - (I[360] = I[361] = I[362] = I[363] = I[364] = I[365] = I[366] = I[367] = I[368] = I[369] = I[370] = I[371] = (T)(img)(0,_n4##y,z,c)), \ - (I[384] = I[385] = I[386] = I[387] = I[388] = I[389] = I[390] = I[391] = I[392] = I[393] = I[394] = I[395] = (T)(img)(0,_n5##y,z,c)), \ - (I[408] = I[409] = I[410] = I[411] = I[412] = I[413] = I[414] = I[415] = I[416] = I[417] = I[418] = I[419] = (T)(img)(0,_n6##y,z,c)), \ - (I[432] = I[433] = I[434] = I[435] = I[436] = I[437] = I[438] = I[439] = I[440] = I[441] = I[442] = I[443] = (T)(img)(0,_n7##y,z,c)), \ - (I[456] = I[457] = I[458] = I[459] = I[460] = I[461] = I[462] = I[463] = I[464] = I[465] = I[466] = I[467] = (T)(img)(0,_n8##y,z,c)), \ - (I[480] = I[481] = I[482] = I[483] = I[484] = I[485] = I[486] = I[487] = I[488] = I[489] = I[490] = I[491] = (T)(img)(0,_n9##y,z,c)), \ - (I[504] = I[505] = I[506] = I[507] = I[508] = I[509] = I[510] = I[511] = I[512] = I[513] = I[514] = I[515] = (T)(img)(0,_n10##y,z,c)), \ - (I[528] = I[529] = I[530] = I[531] = I[532] = I[533] = I[534] = I[535] = I[536] = I[537] = I[538] = I[539] = (T)(img)(0,_n11##y,z,c)), \ - (I[552] = I[553] = I[554] = I[555] = I[556] = I[557] = I[558] = I[559] = I[560] = I[561] = I[562] = I[563] = (T)(img)(0,_n12##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[36] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[84] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[108] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[132] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[156] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[180] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[204] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[228] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[252] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,y,z,c)), \ - (I[300] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[324] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[348] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[372] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[396] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[420] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[444] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[468] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[492] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[516] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[540] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[564] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[37] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[85] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[109] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[133] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[157] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[181] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[205] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[229] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[253] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,y,z,c)), \ - (I[301] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[325] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[349] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[373] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[397] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[421] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[445] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[469] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[493] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[517] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[541] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[565] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[38] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[86] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[110] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[134] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[158] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[182] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[206] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[230] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[254] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,y,z,c)), \ - (I[302] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[326] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[350] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[374] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[398] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[422] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[446] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[470] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[494] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[518] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[542] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[566] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[39] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[87] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[111] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[135] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[159] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[183] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[207] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[231] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[255] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,y,z,c)), \ - (I[303] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[327] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[351] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[375] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[399] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[423] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[447] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[471] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[495] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[519] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[543] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[567] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[16] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[40] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[64] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[88] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[112] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[136] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[160] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[184] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[208] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[232] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[256] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,y,z,c)), \ - (I[304] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[328] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[352] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[376] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[400] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[424] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[448] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[472] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[496] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[520] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[544] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[568] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[17] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[41] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[65] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[89] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[113] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[137] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[161] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[185] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[209] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[233] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[257] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,y,z,c)), \ - (I[305] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[329] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[353] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[377] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[401] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[425] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[449] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[473] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[497] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[521] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[545] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[569] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[18] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[42] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[66] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[90] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[114] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[138] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[162] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[186] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[210] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[234] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[258] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,y,z,c)), \ - (I[306] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[330] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[354] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[378] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[402] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[426] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[450] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[474] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[498] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[522] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[546] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[570] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[19] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[43] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[67] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[91] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[115] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[139] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[163] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[187] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[211] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[235] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[259] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,y,z,c)), \ - (I[307] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[331] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[355] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[379] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[403] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[427] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[451] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[475] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[499] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[523] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[547] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[571] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[20] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[44] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[68] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[92] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[116] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[140] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[164] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[188] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[212] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[236] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[260] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,y,z,c)), \ - (I[308] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[332] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[356] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[380] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[404] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[428] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[452] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[476] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[500] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[524] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[548] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[572] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[21] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[45] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[69] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[93] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[117] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[141] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[165] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[189] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[213] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[237] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[261] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[285] = (T)(img)(_n10##x,y,z,c)), \ - (I[309] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[333] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[357] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[381] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[405] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[429] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[453] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[477] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[501] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[525] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[549] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[573] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[22] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[46] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[70] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[94] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[118] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[142] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[166] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[190] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[214] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[238] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[262] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[286] = (T)(img)(_n11##x,y,z,c)), \ - (I[310] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[334] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[358] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[382] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[406] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[430] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[454] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[478] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[502] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[526] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[550] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[574] = (T)(img)(_n11##x,_n12##y,z,c)), \ - 12>=((img)._width)?(img).width()-1:12); \ - (_n12##x<(img).width() && ( \ - (I[23] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[47] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[71] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[95] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[119] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[143] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[167] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[191] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[215] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[239] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[263] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[287] = (T)(img)(_n12##x,y,z,c)), \ - (I[311] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[335] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[359] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[383] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[407] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[431] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[455] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[479] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[503] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[527] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[551] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[575] = (T)(img)(_n12##x,_n12##y,z,c)),1)) || \ - _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], \ - I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], \ - I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], \ - I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], \ - I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], \ - _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x) - -#define cimg_for_in24x24(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in24((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = (int)( \ - (I[0] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[24] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[48] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[72] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[96] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[120] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[144] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[168] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[192] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[216] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[240] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[264] = (T)(img)(_p11##x,y,z,c)), \ - (I[288] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[312] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[336] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[360] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[384] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[408] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[432] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[456] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[480] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[504] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[528] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[552] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[1] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[25] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[49] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[73] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[97] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[121] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[145] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[169] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[193] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[217] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[241] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[265] = (T)(img)(_p10##x,y,z,c)), \ - (I[289] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[313] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[337] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[361] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[385] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[409] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[433] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[457] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[481] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[505] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[529] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[553] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[2] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[26] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[50] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[74] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[98] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[122] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[146] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[170] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[194] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[218] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[242] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[266] = (T)(img)(_p9##x,y,z,c)), \ - (I[290] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[314] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[338] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[362] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[386] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[410] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[434] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[458] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[482] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[506] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[530] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[554] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[3] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[27] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[51] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[75] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[99] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[123] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[147] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[171] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[195] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[219] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[243] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[267] = (T)(img)(_p8##x,y,z,c)), \ - (I[291] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[315] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[339] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[363] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[387] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[411] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[435] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[459] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[483] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[507] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[531] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[555] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[4] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[28] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[52] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[76] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[100] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[124] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[148] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[172] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[196] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[220] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[244] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[268] = (T)(img)(_p7##x,y,z,c)), \ - (I[292] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[316] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[340] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[364] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[388] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[412] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[436] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[460] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[484] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[508] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[532] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[556] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[5] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[29] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[53] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[77] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[101] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[125] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[149] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[173] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[197] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[221] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[245] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[269] = (T)(img)(_p6##x,y,z,c)), \ - (I[293] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[317] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[341] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[365] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[389] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[413] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[437] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[461] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[485] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[509] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[533] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[557] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[6] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[30] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[54] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[78] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[102] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[126] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[150] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[174] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[198] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[222] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[246] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[270] = (T)(img)(_p5##x,y,z,c)), \ - (I[294] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[318] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[342] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[366] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[390] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[414] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[438] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[462] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[486] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[510] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[534] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[558] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[7] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[31] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[55] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[79] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[103] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[127] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[151] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[175] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[199] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[223] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[247] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[271] = (T)(img)(_p4##x,y,z,c)), \ - (I[295] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[319] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[343] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[367] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[391] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[415] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[439] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[463] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[487] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[511] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[535] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[559] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[8] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[32] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[56] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[80] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[104] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[128] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[152] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[176] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[200] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[224] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[248] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[272] = (T)(img)(_p3##x,y,z,c)), \ - (I[296] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[320] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[344] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[368] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[392] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[416] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[440] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[464] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[488] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[512] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[536] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[560] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[9] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[33] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[57] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[81] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[105] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[129] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[153] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[177] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[201] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[225] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[249] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[273] = (T)(img)(_p2##x,y,z,c)), \ - (I[297] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[321] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[345] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[369] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[393] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[417] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[441] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[465] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[489] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[513] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[537] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[561] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[10] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[34] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[58] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[82] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[106] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[130] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[154] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[178] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[202] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[226] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[250] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[274] = (T)(img)(_p1##x,y,z,c)), \ - (I[298] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[322] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[346] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[370] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[394] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[418] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[442] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[466] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[490] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[514] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[538] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[562] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[11] = (T)(img)(x,_p11##y,z,c)), \ - (I[35] = (T)(img)(x,_p10##y,z,c)), \ - (I[59] = (T)(img)(x,_p9##y,z,c)), \ - (I[83] = (T)(img)(x,_p8##y,z,c)), \ - (I[107] = (T)(img)(x,_p7##y,z,c)), \ - (I[131] = (T)(img)(x,_p6##y,z,c)), \ - (I[155] = (T)(img)(x,_p5##y,z,c)), \ - (I[179] = (T)(img)(x,_p4##y,z,c)), \ - (I[203] = (T)(img)(x,_p3##y,z,c)), \ - (I[227] = (T)(img)(x,_p2##y,z,c)), \ - (I[251] = (T)(img)(x,_p1##y,z,c)), \ - (I[275] = (T)(img)(x,y,z,c)), \ - (I[299] = (T)(img)(x,_n1##y,z,c)), \ - (I[323] = (T)(img)(x,_n2##y,z,c)), \ - (I[347] = (T)(img)(x,_n3##y,z,c)), \ - (I[371] = (T)(img)(x,_n4##y,z,c)), \ - (I[395] = (T)(img)(x,_n5##y,z,c)), \ - (I[419] = (T)(img)(x,_n6##y,z,c)), \ - (I[443] = (T)(img)(x,_n7##y,z,c)), \ - (I[467] = (T)(img)(x,_n8##y,z,c)), \ - (I[491] = (T)(img)(x,_n9##y,z,c)), \ - (I[515] = (T)(img)(x,_n10##y,z,c)), \ - (I[539] = (T)(img)(x,_n11##y,z,c)), \ - (I[563] = (T)(img)(x,_n12##y,z,c)), \ - (I[12] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[36] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[60] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[84] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[108] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[132] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[156] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[180] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[204] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[228] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[252] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,y,z,c)), \ - (I[300] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[324] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[348] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[372] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[396] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[420] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[444] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[468] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[492] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[516] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[540] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[564] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[13] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[37] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[61] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[85] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[109] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[133] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[157] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[181] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[205] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[229] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[253] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,y,z,c)), \ - (I[301] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[325] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[349] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[373] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[397] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[421] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[445] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[469] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[493] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[517] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[541] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[565] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[14] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[38] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[62] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[86] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[110] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[134] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[158] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[182] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[206] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[230] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[254] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,y,z,c)), \ - (I[302] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[326] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[350] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[374] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[398] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[422] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[446] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[470] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[494] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[518] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[542] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[566] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[15] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[39] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[63] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[87] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[111] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[135] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[159] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[183] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[207] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[231] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[255] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,y,z,c)), \ - (I[303] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[327] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[351] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[375] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[399] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[423] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[447] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[471] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[495] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[519] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[543] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[567] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[16] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[40] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[64] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[88] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[112] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[136] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[160] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[184] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[208] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[232] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[256] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,y,z,c)), \ - (I[304] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[328] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[352] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[376] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[400] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[424] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[448] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[472] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[496] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[520] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[544] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[568] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[17] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[41] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[65] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[89] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[113] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[137] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[161] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[185] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[209] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[233] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[257] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,y,z,c)), \ - (I[305] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[329] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[353] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[377] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[401] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[425] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[449] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[473] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[497] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[521] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[545] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[569] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[18] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[42] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[66] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[90] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[114] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[138] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[162] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[186] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[210] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[234] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[258] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,y,z,c)), \ - (I[306] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[330] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[354] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[378] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[402] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[426] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[450] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[474] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[498] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[522] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[546] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[570] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[19] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[43] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[67] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[91] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[115] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[139] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[163] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[187] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[211] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[235] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[259] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,y,z,c)), \ - (I[307] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[331] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[355] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[379] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[403] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[427] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[451] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[475] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[499] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[523] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[547] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[571] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[20] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[44] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[68] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[92] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[116] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[140] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[164] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[188] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[212] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[236] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[260] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,y,z,c)), \ - (I[308] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[332] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[356] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[380] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[404] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[428] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[452] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[476] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[500] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[524] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[548] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[572] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[21] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[45] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[69] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[93] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[117] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[141] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[165] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[189] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[213] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[237] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[261] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[285] = (T)(img)(_n10##x,y,z,c)), \ - (I[309] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[333] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[357] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[381] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[405] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[429] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[453] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[477] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[501] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[525] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[549] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[573] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[22] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[46] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[70] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[94] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[118] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[142] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[166] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[190] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[214] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[238] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[262] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[286] = (T)(img)(_n11##x,y,z,c)), \ - (I[310] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[334] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[358] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[382] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[406] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[430] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[454] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[478] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[502] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[526] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[550] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[574] = (T)(img)(_n11##x,_n12##y,z,c)), \ - x+12>=(img).width()?(img).width()-1:x+12); \ - x<=(int)(x1) && ((_n12##x<(img).width() && ( \ - (I[23] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[47] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[71] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[95] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[119] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[143] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[167] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[191] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[215] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[239] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[263] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[287] = (T)(img)(_n12##x,y,z,c)), \ - (I[311] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[335] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[359] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[383] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[407] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[431] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[455] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[479] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[503] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[527] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[551] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[575] = (T)(img)(_n12##x,_n12##y,z,c)),1)) || \ - _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], \ - I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], \ - I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], \ - I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], \ - I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], \ - _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x) - -#define cimg_get24x24(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p11##x,_p11##y,z,c), I[1] = (T)(img)(_p10##x,_p11##y,z,c), I[2] = (T)(img)(_p9##x,_p11##y,z,c), I[3] = (T)(img)(_p8##x,_p11##y,z,c), I[4] = (T)(img)(_p7##x,_p11##y,z,c), I[5] = (T)(img)(_p6##x,_p11##y,z,c), I[6] = (T)(img)(_p5##x,_p11##y,z,c), I[7] = (T)(img)(_p4##x,_p11##y,z,c), I[8] = (T)(img)(_p3##x,_p11##y,z,c), I[9] = (T)(img)(_p2##x,_p11##y,z,c), I[10] = (T)(img)(_p1##x,_p11##y,z,c), I[11] = (T)(img)(x,_p11##y,z,c), I[12] = (T)(img)(_n1##x,_p11##y,z,c), I[13] = (T)(img)(_n2##x,_p11##y,z,c), I[14] = (T)(img)(_n3##x,_p11##y,z,c), I[15] = (T)(img)(_n4##x,_p11##y,z,c), I[16] = (T)(img)(_n5##x,_p11##y,z,c), I[17] = (T)(img)(_n6##x,_p11##y,z,c), I[18] = (T)(img)(_n7##x,_p11##y,z,c), I[19] = (T)(img)(_n8##x,_p11##y,z,c), I[20] = (T)(img)(_n9##x,_p11##y,z,c), I[21] = (T)(img)(_n10##x,_p11##y,z,c), I[22] = (T)(img)(_n11##x,_p11##y,z,c), I[23] = (T)(img)(_n12##x,_p11##y,z,c), \ - I[24] = (T)(img)(_p11##x,_p10##y,z,c), I[25] = (T)(img)(_p10##x,_p10##y,z,c), I[26] = (T)(img)(_p9##x,_p10##y,z,c), I[27] = (T)(img)(_p8##x,_p10##y,z,c), I[28] = (T)(img)(_p7##x,_p10##y,z,c), I[29] = (T)(img)(_p6##x,_p10##y,z,c), I[30] = (T)(img)(_p5##x,_p10##y,z,c), I[31] = (T)(img)(_p4##x,_p10##y,z,c), I[32] = (T)(img)(_p3##x,_p10##y,z,c), I[33] = (T)(img)(_p2##x,_p10##y,z,c), I[34] = (T)(img)(_p1##x,_p10##y,z,c), I[35] = (T)(img)(x,_p10##y,z,c), I[36] = (T)(img)(_n1##x,_p10##y,z,c), I[37] = (T)(img)(_n2##x,_p10##y,z,c), I[38] = (T)(img)(_n3##x,_p10##y,z,c), I[39] = (T)(img)(_n4##x,_p10##y,z,c), I[40] = (T)(img)(_n5##x,_p10##y,z,c), I[41] = (T)(img)(_n6##x,_p10##y,z,c), I[42] = (T)(img)(_n7##x,_p10##y,z,c), I[43] = (T)(img)(_n8##x,_p10##y,z,c), I[44] = (T)(img)(_n9##x,_p10##y,z,c), I[45] = (T)(img)(_n10##x,_p10##y,z,c), I[46] = (T)(img)(_n11##x,_p10##y,z,c), I[47] = (T)(img)(_n12##x,_p10##y,z,c), \ - I[48] = (T)(img)(_p11##x,_p9##y,z,c), I[49] = (T)(img)(_p10##x,_p9##y,z,c), I[50] = (T)(img)(_p9##x,_p9##y,z,c), I[51] = (T)(img)(_p8##x,_p9##y,z,c), I[52] = (T)(img)(_p7##x,_p9##y,z,c), I[53] = (T)(img)(_p6##x,_p9##y,z,c), I[54] = (T)(img)(_p5##x,_p9##y,z,c), I[55] = (T)(img)(_p4##x,_p9##y,z,c), I[56] = (T)(img)(_p3##x,_p9##y,z,c), I[57] = (T)(img)(_p2##x,_p9##y,z,c), I[58] = (T)(img)(_p1##x,_p9##y,z,c), I[59] = (T)(img)(x,_p9##y,z,c), I[60] = (T)(img)(_n1##x,_p9##y,z,c), I[61] = (T)(img)(_n2##x,_p9##y,z,c), I[62] = (T)(img)(_n3##x,_p9##y,z,c), I[63] = (T)(img)(_n4##x,_p9##y,z,c), I[64] = (T)(img)(_n5##x,_p9##y,z,c), I[65] = (T)(img)(_n6##x,_p9##y,z,c), I[66] = (T)(img)(_n7##x,_p9##y,z,c), I[67] = (T)(img)(_n8##x,_p9##y,z,c), I[68] = (T)(img)(_n9##x,_p9##y,z,c), I[69] = (T)(img)(_n10##x,_p9##y,z,c), I[70] = (T)(img)(_n11##x,_p9##y,z,c), I[71] = (T)(img)(_n12##x,_p9##y,z,c), \ - I[72] = (T)(img)(_p11##x,_p8##y,z,c), I[73] = (T)(img)(_p10##x,_p8##y,z,c), I[74] = (T)(img)(_p9##x,_p8##y,z,c), I[75] = (T)(img)(_p8##x,_p8##y,z,c), I[76] = (T)(img)(_p7##x,_p8##y,z,c), I[77] = (T)(img)(_p6##x,_p8##y,z,c), I[78] = (T)(img)(_p5##x,_p8##y,z,c), I[79] = (T)(img)(_p4##x,_p8##y,z,c), I[80] = (T)(img)(_p3##x,_p8##y,z,c), I[81] = (T)(img)(_p2##x,_p8##y,z,c), I[82] = (T)(img)(_p1##x,_p8##y,z,c), I[83] = (T)(img)(x,_p8##y,z,c), I[84] = (T)(img)(_n1##x,_p8##y,z,c), I[85] = (T)(img)(_n2##x,_p8##y,z,c), I[86] = (T)(img)(_n3##x,_p8##y,z,c), I[87] = (T)(img)(_n4##x,_p8##y,z,c), I[88] = (T)(img)(_n5##x,_p8##y,z,c), I[89] = (T)(img)(_n6##x,_p8##y,z,c), I[90] = (T)(img)(_n7##x,_p8##y,z,c), I[91] = (T)(img)(_n8##x,_p8##y,z,c), I[92] = (T)(img)(_n9##x,_p8##y,z,c), I[93] = (T)(img)(_n10##x,_p8##y,z,c), I[94] = (T)(img)(_n11##x,_p8##y,z,c), I[95] = (T)(img)(_n12##x,_p8##y,z,c), \ - I[96] = (T)(img)(_p11##x,_p7##y,z,c), I[97] = (T)(img)(_p10##x,_p7##y,z,c), I[98] = (T)(img)(_p9##x,_p7##y,z,c), I[99] = (T)(img)(_p8##x,_p7##y,z,c), I[100] = (T)(img)(_p7##x,_p7##y,z,c), I[101] = (T)(img)(_p6##x,_p7##y,z,c), I[102] = (T)(img)(_p5##x,_p7##y,z,c), I[103] = (T)(img)(_p4##x,_p7##y,z,c), I[104] = (T)(img)(_p3##x,_p7##y,z,c), I[105] = (T)(img)(_p2##x,_p7##y,z,c), I[106] = (T)(img)(_p1##x,_p7##y,z,c), I[107] = (T)(img)(x,_p7##y,z,c), I[108] = (T)(img)(_n1##x,_p7##y,z,c), I[109] = (T)(img)(_n2##x,_p7##y,z,c), I[110] = (T)(img)(_n3##x,_p7##y,z,c), I[111] = (T)(img)(_n4##x,_p7##y,z,c), I[112] = (T)(img)(_n5##x,_p7##y,z,c), I[113] = (T)(img)(_n6##x,_p7##y,z,c), I[114] = (T)(img)(_n7##x,_p7##y,z,c), I[115] = (T)(img)(_n8##x,_p7##y,z,c), I[116] = (T)(img)(_n9##x,_p7##y,z,c), I[117] = (T)(img)(_n10##x,_p7##y,z,c), I[118] = (T)(img)(_n11##x,_p7##y,z,c), I[119] = (T)(img)(_n12##x,_p7##y,z,c), \ - I[120] = (T)(img)(_p11##x,_p6##y,z,c), I[121] = (T)(img)(_p10##x,_p6##y,z,c), I[122] = (T)(img)(_p9##x,_p6##y,z,c), I[123] = (T)(img)(_p8##x,_p6##y,z,c), I[124] = (T)(img)(_p7##x,_p6##y,z,c), I[125] = (T)(img)(_p6##x,_p6##y,z,c), I[126] = (T)(img)(_p5##x,_p6##y,z,c), I[127] = (T)(img)(_p4##x,_p6##y,z,c), I[128] = (T)(img)(_p3##x,_p6##y,z,c), I[129] = (T)(img)(_p2##x,_p6##y,z,c), I[130] = (T)(img)(_p1##x,_p6##y,z,c), I[131] = (T)(img)(x,_p6##y,z,c), I[132] = (T)(img)(_n1##x,_p6##y,z,c), I[133] = (T)(img)(_n2##x,_p6##y,z,c), I[134] = (T)(img)(_n3##x,_p6##y,z,c), I[135] = (T)(img)(_n4##x,_p6##y,z,c), I[136] = (T)(img)(_n5##x,_p6##y,z,c), I[137] = (T)(img)(_n6##x,_p6##y,z,c), I[138] = (T)(img)(_n7##x,_p6##y,z,c), I[139] = (T)(img)(_n8##x,_p6##y,z,c), I[140] = (T)(img)(_n9##x,_p6##y,z,c), I[141] = (T)(img)(_n10##x,_p6##y,z,c), I[142] = (T)(img)(_n11##x,_p6##y,z,c), I[143] = (T)(img)(_n12##x,_p6##y,z,c), \ - I[144] = (T)(img)(_p11##x,_p5##y,z,c), I[145] = (T)(img)(_p10##x,_p5##y,z,c), I[146] = (T)(img)(_p9##x,_p5##y,z,c), I[147] = (T)(img)(_p8##x,_p5##y,z,c), I[148] = (T)(img)(_p7##x,_p5##y,z,c), I[149] = (T)(img)(_p6##x,_p5##y,z,c), I[150] = (T)(img)(_p5##x,_p5##y,z,c), I[151] = (T)(img)(_p4##x,_p5##y,z,c), I[152] = (T)(img)(_p3##x,_p5##y,z,c), I[153] = (T)(img)(_p2##x,_p5##y,z,c), I[154] = (T)(img)(_p1##x,_p5##y,z,c), I[155] = (T)(img)(x,_p5##y,z,c), I[156] = (T)(img)(_n1##x,_p5##y,z,c), I[157] = (T)(img)(_n2##x,_p5##y,z,c), I[158] = (T)(img)(_n3##x,_p5##y,z,c), I[159] = (T)(img)(_n4##x,_p5##y,z,c), I[160] = (T)(img)(_n5##x,_p5##y,z,c), I[161] = (T)(img)(_n6##x,_p5##y,z,c), I[162] = (T)(img)(_n7##x,_p5##y,z,c), I[163] = (T)(img)(_n8##x,_p5##y,z,c), I[164] = (T)(img)(_n9##x,_p5##y,z,c), I[165] = (T)(img)(_n10##x,_p5##y,z,c), I[166] = (T)(img)(_n11##x,_p5##y,z,c), I[167] = (T)(img)(_n12##x,_p5##y,z,c), \ - I[168] = (T)(img)(_p11##x,_p4##y,z,c), I[169] = (T)(img)(_p10##x,_p4##y,z,c), I[170] = (T)(img)(_p9##x,_p4##y,z,c), I[171] = (T)(img)(_p8##x,_p4##y,z,c), I[172] = (T)(img)(_p7##x,_p4##y,z,c), I[173] = (T)(img)(_p6##x,_p4##y,z,c), I[174] = (T)(img)(_p5##x,_p4##y,z,c), I[175] = (T)(img)(_p4##x,_p4##y,z,c), I[176] = (T)(img)(_p3##x,_p4##y,z,c), I[177] = (T)(img)(_p2##x,_p4##y,z,c), I[178] = (T)(img)(_p1##x,_p4##y,z,c), I[179] = (T)(img)(x,_p4##y,z,c), I[180] = (T)(img)(_n1##x,_p4##y,z,c), I[181] = (T)(img)(_n2##x,_p4##y,z,c), I[182] = (T)(img)(_n3##x,_p4##y,z,c), I[183] = (T)(img)(_n4##x,_p4##y,z,c), I[184] = (T)(img)(_n5##x,_p4##y,z,c), I[185] = (T)(img)(_n6##x,_p4##y,z,c), I[186] = (T)(img)(_n7##x,_p4##y,z,c), I[187] = (T)(img)(_n8##x,_p4##y,z,c), I[188] = (T)(img)(_n9##x,_p4##y,z,c), I[189] = (T)(img)(_n10##x,_p4##y,z,c), I[190] = (T)(img)(_n11##x,_p4##y,z,c), I[191] = (T)(img)(_n12##x,_p4##y,z,c), \ - I[192] = (T)(img)(_p11##x,_p3##y,z,c), I[193] = (T)(img)(_p10##x,_p3##y,z,c), I[194] = (T)(img)(_p9##x,_p3##y,z,c), I[195] = (T)(img)(_p8##x,_p3##y,z,c), I[196] = (T)(img)(_p7##x,_p3##y,z,c), I[197] = (T)(img)(_p6##x,_p3##y,z,c), I[198] = (T)(img)(_p5##x,_p3##y,z,c), I[199] = (T)(img)(_p4##x,_p3##y,z,c), I[200] = (T)(img)(_p3##x,_p3##y,z,c), I[201] = (T)(img)(_p2##x,_p3##y,z,c), I[202] = (T)(img)(_p1##x,_p3##y,z,c), I[203] = (T)(img)(x,_p3##y,z,c), I[204] = (T)(img)(_n1##x,_p3##y,z,c), I[205] = (T)(img)(_n2##x,_p3##y,z,c), I[206] = (T)(img)(_n3##x,_p3##y,z,c), I[207] = (T)(img)(_n4##x,_p3##y,z,c), I[208] = (T)(img)(_n5##x,_p3##y,z,c), I[209] = (T)(img)(_n6##x,_p3##y,z,c), I[210] = (T)(img)(_n7##x,_p3##y,z,c), I[211] = (T)(img)(_n8##x,_p3##y,z,c), I[212] = (T)(img)(_n9##x,_p3##y,z,c), I[213] = (T)(img)(_n10##x,_p3##y,z,c), I[214] = (T)(img)(_n11##x,_p3##y,z,c), I[215] = (T)(img)(_n12##x,_p3##y,z,c), \ - I[216] = (T)(img)(_p11##x,_p2##y,z,c), I[217] = (T)(img)(_p10##x,_p2##y,z,c), I[218] = (T)(img)(_p9##x,_p2##y,z,c), I[219] = (T)(img)(_p8##x,_p2##y,z,c), I[220] = (T)(img)(_p7##x,_p2##y,z,c), I[221] = (T)(img)(_p6##x,_p2##y,z,c), I[222] = (T)(img)(_p5##x,_p2##y,z,c), I[223] = (T)(img)(_p4##x,_p2##y,z,c), I[224] = (T)(img)(_p3##x,_p2##y,z,c), I[225] = (T)(img)(_p2##x,_p2##y,z,c), I[226] = (T)(img)(_p1##x,_p2##y,z,c), I[227] = (T)(img)(x,_p2##y,z,c), I[228] = (T)(img)(_n1##x,_p2##y,z,c), I[229] = (T)(img)(_n2##x,_p2##y,z,c), I[230] = (T)(img)(_n3##x,_p2##y,z,c), I[231] = (T)(img)(_n4##x,_p2##y,z,c), I[232] = (T)(img)(_n5##x,_p2##y,z,c), I[233] = (T)(img)(_n6##x,_p2##y,z,c), I[234] = (T)(img)(_n7##x,_p2##y,z,c), I[235] = (T)(img)(_n8##x,_p2##y,z,c), I[236] = (T)(img)(_n9##x,_p2##y,z,c), I[237] = (T)(img)(_n10##x,_p2##y,z,c), I[238] = (T)(img)(_n11##x,_p2##y,z,c), I[239] = (T)(img)(_n12##x,_p2##y,z,c), \ - I[240] = (T)(img)(_p11##x,_p1##y,z,c), I[241] = (T)(img)(_p10##x,_p1##y,z,c), I[242] = (T)(img)(_p9##x,_p1##y,z,c), I[243] = (T)(img)(_p8##x,_p1##y,z,c), I[244] = (T)(img)(_p7##x,_p1##y,z,c), I[245] = (T)(img)(_p6##x,_p1##y,z,c), I[246] = (T)(img)(_p5##x,_p1##y,z,c), I[247] = (T)(img)(_p4##x,_p1##y,z,c), I[248] = (T)(img)(_p3##x,_p1##y,z,c), I[249] = (T)(img)(_p2##x,_p1##y,z,c), I[250] = (T)(img)(_p1##x,_p1##y,z,c), I[251] = (T)(img)(x,_p1##y,z,c), I[252] = (T)(img)(_n1##x,_p1##y,z,c), I[253] = (T)(img)(_n2##x,_p1##y,z,c), I[254] = (T)(img)(_n3##x,_p1##y,z,c), I[255] = (T)(img)(_n4##x,_p1##y,z,c), I[256] = (T)(img)(_n5##x,_p1##y,z,c), I[257] = (T)(img)(_n6##x,_p1##y,z,c), I[258] = (T)(img)(_n7##x,_p1##y,z,c), I[259] = (T)(img)(_n8##x,_p1##y,z,c), I[260] = (T)(img)(_n9##x,_p1##y,z,c), I[261] = (T)(img)(_n10##x,_p1##y,z,c), I[262] = (T)(img)(_n11##x,_p1##y,z,c), I[263] = (T)(img)(_n12##x,_p1##y,z,c), \ - I[264] = (T)(img)(_p11##x,y,z,c), I[265] = (T)(img)(_p10##x,y,z,c), I[266] = (T)(img)(_p9##x,y,z,c), I[267] = (T)(img)(_p8##x,y,z,c), I[268] = (T)(img)(_p7##x,y,z,c), I[269] = (T)(img)(_p6##x,y,z,c), I[270] = (T)(img)(_p5##x,y,z,c), I[271] = (T)(img)(_p4##x,y,z,c), I[272] = (T)(img)(_p3##x,y,z,c), I[273] = (T)(img)(_p2##x,y,z,c), I[274] = (T)(img)(_p1##x,y,z,c), I[275] = (T)(img)(x,y,z,c), I[276] = (T)(img)(_n1##x,y,z,c), I[277] = (T)(img)(_n2##x,y,z,c), I[278] = (T)(img)(_n3##x,y,z,c), I[279] = (T)(img)(_n4##x,y,z,c), I[280] = (T)(img)(_n5##x,y,z,c), I[281] = (T)(img)(_n6##x,y,z,c), I[282] = (T)(img)(_n7##x,y,z,c), I[283] = (T)(img)(_n8##x,y,z,c), I[284] = (T)(img)(_n9##x,y,z,c), I[285] = (T)(img)(_n10##x,y,z,c), I[286] = (T)(img)(_n11##x,y,z,c), I[287] = (T)(img)(_n12##x,y,z,c), \ - I[288] = (T)(img)(_p11##x,_n1##y,z,c), I[289] = (T)(img)(_p10##x,_n1##y,z,c), I[290] = (T)(img)(_p9##x,_n1##y,z,c), I[291] = (T)(img)(_p8##x,_n1##y,z,c), I[292] = (T)(img)(_p7##x,_n1##y,z,c), I[293] = (T)(img)(_p6##x,_n1##y,z,c), I[294] = (T)(img)(_p5##x,_n1##y,z,c), I[295] = (T)(img)(_p4##x,_n1##y,z,c), I[296] = (T)(img)(_p3##x,_n1##y,z,c), I[297] = (T)(img)(_p2##x,_n1##y,z,c), I[298] = (T)(img)(_p1##x,_n1##y,z,c), I[299] = (T)(img)(x,_n1##y,z,c), I[300] = (T)(img)(_n1##x,_n1##y,z,c), I[301] = (T)(img)(_n2##x,_n1##y,z,c), I[302] = (T)(img)(_n3##x,_n1##y,z,c), I[303] = (T)(img)(_n4##x,_n1##y,z,c), I[304] = (T)(img)(_n5##x,_n1##y,z,c), I[305] = (T)(img)(_n6##x,_n1##y,z,c), I[306] = (T)(img)(_n7##x,_n1##y,z,c), I[307] = (T)(img)(_n8##x,_n1##y,z,c), I[308] = (T)(img)(_n9##x,_n1##y,z,c), I[309] = (T)(img)(_n10##x,_n1##y,z,c), I[310] = (T)(img)(_n11##x,_n1##y,z,c), I[311] = (T)(img)(_n12##x,_n1##y,z,c), \ - I[312] = (T)(img)(_p11##x,_n2##y,z,c), I[313] = (T)(img)(_p10##x,_n2##y,z,c), I[314] = (T)(img)(_p9##x,_n2##y,z,c), I[315] = (T)(img)(_p8##x,_n2##y,z,c), I[316] = (T)(img)(_p7##x,_n2##y,z,c), I[317] = (T)(img)(_p6##x,_n2##y,z,c), I[318] = (T)(img)(_p5##x,_n2##y,z,c), I[319] = (T)(img)(_p4##x,_n2##y,z,c), I[320] = (T)(img)(_p3##x,_n2##y,z,c), I[321] = (T)(img)(_p2##x,_n2##y,z,c), I[322] = (T)(img)(_p1##x,_n2##y,z,c), I[323] = (T)(img)(x,_n2##y,z,c), I[324] = (T)(img)(_n1##x,_n2##y,z,c), I[325] = (T)(img)(_n2##x,_n2##y,z,c), I[326] = (T)(img)(_n3##x,_n2##y,z,c), I[327] = (T)(img)(_n4##x,_n2##y,z,c), I[328] = (T)(img)(_n5##x,_n2##y,z,c), I[329] = (T)(img)(_n6##x,_n2##y,z,c), I[330] = (T)(img)(_n7##x,_n2##y,z,c), I[331] = (T)(img)(_n8##x,_n2##y,z,c), I[332] = (T)(img)(_n9##x,_n2##y,z,c), I[333] = (T)(img)(_n10##x,_n2##y,z,c), I[334] = (T)(img)(_n11##x,_n2##y,z,c), I[335] = (T)(img)(_n12##x,_n2##y,z,c), \ - I[336] = (T)(img)(_p11##x,_n3##y,z,c), I[337] = (T)(img)(_p10##x,_n3##y,z,c), I[338] = (T)(img)(_p9##x,_n3##y,z,c), I[339] = (T)(img)(_p8##x,_n3##y,z,c), I[340] = (T)(img)(_p7##x,_n3##y,z,c), I[341] = (T)(img)(_p6##x,_n3##y,z,c), I[342] = (T)(img)(_p5##x,_n3##y,z,c), I[343] = (T)(img)(_p4##x,_n3##y,z,c), I[344] = (T)(img)(_p3##x,_n3##y,z,c), I[345] = (T)(img)(_p2##x,_n3##y,z,c), I[346] = (T)(img)(_p1##x,_n3##y,z,c), I[347] = (T)(img)(x,_n3##y,z,c), I[348] = (T)(img)(_n1##x,_n3##y,z,c), I[349] = (T)(img)(_n2##x,_n3##y,z,c), I[350] = (T)(img)(_n3##x,_n3##y,z,c), I[351] = (T)(img)(_n4##x,_n3##y,z,c), I[352] = (T)(img)(_n5##x,_n3##y,z,c), I[353] = (T)(img)(_n6##x,_n3##y,z,c), I[354] = (T)(img)(_n7##x,_n3##y,z,c), I[355] = (T)(img)(_n8##x,_n3##y,z,c), I[356] = (T)(img)(_n9##x,_n3##y,z,c), I[357] = (T)(img)(_n10##x,_n3##y,z,c), I[358] = (T)(img)(_n11##x,_n3##y,z,c), I[359] = (T)(img)(_n12##x,_n3##y,z,c), \ - I[360] = (T)(img)(_p11##x,_n4##y,z,c), I[361] = (T)(img)(_p10##x,_n4##y,z,c), I[362] = (T)(img)(_p9##x,_n4##y,z,c), I[363] = (T)(img)(_p8##x,_n4##y,z,c), I[364] = (T)(img)(_p7##x,_n4##y,z,c), I[365] = (T)(img)(_p6##x,_n4##y,z,c), I[366] = (T)(img)(_p5##x,_n4##y,z,c), I[367] = (T)(img)(_p4##x,_n4##y,z,c), I[368] = (T)(img)(_p3##x,_n4##y,z,c), I[369] = (T)(img)(_p2##x,_n4##y,z,c), I[370] = (T)(img)(_p1##x,_n4##y,z,c), I[371] = (T)(img)(x,_n4##y,z,c), I[372] = (T)(img)(_n1##x,_n4##y,z,c), I[373] = (T)(img)(_n2##x,_n4##y,z,c), I[374] = (T)(img)(_n3##x,_n4##y,z,c), I[375] = (T)(img)(_n4##x,_n4##y,z,c), I[376] = (T)(img)(_n5##x,_n4##y,z,c), I[377] = (T)(img)(_n6##x,_n4##y,z,c), I[378] = (T)(img)(_n7##x,_n4##y,z,c), I[379] = (T)(img)(_n8##x,_n4##y,z,c), I[380] = (T)(img)(_n9##x,_n4##y,z,c), I[381] = (T)(img)(_n10##x,_n4##y,z,c), I[382] = (T)(img)(_n11##x,_n4##y,z,c), I[383] = (T)(img)(_n12##x,_n4##y,z,c), \ - I[384] = (T)(img)(_p11##x,_n5##y,z,c), I[385] = (T)(img)(_p10##x,_n5##y,z,c), I[386] = (T)(img)(_p9##x,_n5##y,z,c), I[387] = (T)(img)(_p8##x,_n5##y,z,c), I[388] = (T)(img)(_p7##x,_n5##y,z,c), I[389] = (T)(img)(_p6##x,_n5##y,z,c), I[390] = (T)(img)(_p5##x,_n5##y,z,c), I[391] = (T)(img)(_p4##x,_n5##y,z,c), I[392] = (T)(img)(_p3##x,_n5##y,z,c), I[393] = (T)(img)(_p2##x,_n5##y,z,c), I[394] = (T)(img)(_p1##x,_n5##y,z,c), I[395] = (T)(img)(x,_n5##y,z,c), I[396] = (T)(img)(_n1##x,_n5##y,z,c), I[397] = (T)(img)(_n2##x,_n5##y,z,c), I[398] = (T)(img)(_n3##x,_n5##y,z,c), I[399] = (T)(img)(_n4##x,_n5##y,z,c), I[400] = (T)(img)(_n5##x,_n5##y,z,c), I[401] = (T)(img)(_n6##x,_n5##y,z,c), I[402] = (T)(img)(_n7##x,_n5##y,z,c), I[403] = (T)(img)(_n8##x,_n5##y,z,c), I[404] = (T)(img)(_n9##x,_n5##y,z,c), I[405] = (T)(img)(_n10##x,_n5##y,z,c), I[406] = (T)(img)(_n11##x,_n5##y,z,c), I[407] = (T)(img)(_n12##x,_n5##y,z,c), \ - I[408] = (T)(img)(_p11##x,_n6##y,z,c), I[409] = (T)(img)(_p10##x,_n6##y,z,c), I[410] = (T)(img)(_p9##x,_n6##y,z,c), I[411] = (T)(img)(_p8##x,_n6##y,z,c), I[412] = (T)(img)(_p7##x,_n6##y,z,c), I[413] = (T)(img)(_p6##x,_n6##y,z,c), I[414] = (T)(img)(_p5##x,_n6##y,z,c), I[415] = (T)(img)(_p4##x,_n6##y,z,c), I[416] = (T)(img)(_p3##x,_n6##y,z,c), I[417] = (T)(img)(_p2##x,_n6##y,z,c), I[418] = (T)(img)(_p1##x,_n6##y,z,c), I[419] = (T)(img)(x,_n6##y,z,c), I[420] = (T)(img)(_n1##x,_n6##y,z,c), I[421] = (T)(img)(_n2##x,_n6##y,z,c), I[422] = (T)(img)(_n3##x,_n6##y,z,c), I[423] = (T)(img)(_n4##x,_n6##y,z,c), I[424] = (T)(img)(_n5##x,_n6##y,z,c), I[425] = (T)(img)(_n6##x,_n6##y,z,c), I[426] = (T)(img)(_n7##x,_n6##y,z,c), I[427] = (T)(img)(_n8##x,_n6##y,z,c), I[428] = (T)(img)(_n9##x,_n6##y,z,c), I[429] = (T)(img)(_n10##x,_n6##y,z,c), I[430] = (T)(img)(_n11##x,_n6##y,z,c), I[431] = (T)(img)(_n12##x,_n6##y,z,c), \ - I[432] = (T)(img)(_p11##x,_n7##y,z,c), I[433] = (T)(img)(_p10##x,_n7##y,z,c), I[434] = (T)(img)(_p9##x,_n7##y,z,c), I[435] = (T)(img)(_p8##x,_n7##y,z,c), I[436] = (T)(img)(_p7##x,_n7##y,z,c), I[437] = (T)(img)(_p6##x,_n7##y,z,c), I[438] = (T)(img)(_p5##x,_n7##y,z,c), I[439] = (T)(img)(_p4##x,_n7##y,z,c), I[440] = (T)(img)(_p3##x,_n7##y,z,c), I[441] = (T)(img)(_p2##x,_n7##y,z,c), I[442] = (T)(img)(_p1##x,_n7##y,z,c), I[443] = (T)(img)(x,_n7##y,z,c), I[444] = (T)(img)(_n1##x,_n7##y,z,c), I[445] = (T)(img)(_n2##x,_n7##y,z,c), I[446] = (T)(img)(_n3##x,_n7##y,z,c), I[447] = (T)(img)(_n4##x,_n7##y,z,c), I[448] = (T)(img)(_n5##x,_n7##y,z,c), I[449] = (T)(img)(_n6##x,_n7##y,z,c), I[450] = (T)(img)(_n7##x,_n7##y,z,c), I[451] = (T)(img)(_n8##x,_n7##y,z,c), I[452] = (T)(img)(_n9##x,_n7##y,z,c), I[453] = (T)(img)(_n10##x,_n7##y,z,c), I[454] = (T)(img)(_n11##x,_n7##y,z,c), I[455] = (T)(img)(_n12##x,_n7##y,z,c), \ - I[456] = (T)(img)(_p11##x,_n8##y,z,c), I[457] = (T)(img)(_p10##x,_n8##y,z,c), I[458] = (T)(img)(_p9##x,_n8##y,z,c), I[459] = (T)(img)(_p8##x,_n8##y,z,c), I[460] = (T)(img)(_p7##x,_n8##y,z,c), I[461] = (T)(img)(_p6##x,_n8##y,z,c), I[462] = (T)(img)(_p5##x,_n8##y,z,c), I[463] = (T)(img)(_p4##x,_n8##y,z,c), I[464] = (T)(img)(_p3##x,_n8##y,z,c), I[465] = (T)(img)(_p2##x,_n8##y,z,c), I[466] = (T)(img)(_p1##x,_n8##y,z,c), I[467] = (T)(img)(x,_n8##y,z,c), I[468] = (T)(img)(_n1##x,_n8##y,z,c), I[469] = (T)(img)(_n2##x,_n8##y,z,c), I[470] = (T)(img)(_n3##x,_n8##y,z,c), I[471] = (T)(img)(_n4##x,_n8##y,z,c), I[472] = (T)(img)(_n5##x,_n8##y,z,c), I[473] = (T)(img)(_n6##x,_n8##y,z,c), I[474] = (T)(img)(_n7##x,_n8##y,z,c), I[475] = (T)(img)(_n8##x,_n8##y,z,c), I[476] = (T)(img)(_n9##x,_n8##y,z,c), I[477] = (T)(img)(_n10##x,_n8##y,z,c), I[478] = (T)(img)(_n11##x,_n8##y,z,c), I[479] = (T)(img)(_n12##x,_n8##y,z,c), \ - I[480] = (T)(img)(_p11##x,_n9##y,z,c), I[481] = (T)(img)(_p10##x,_n9##y,z,c), I[482] = (T)(img)(_p9##x,_n9##y,z,c), I[483] = (T)(img)(_p8##x,_n9##y,z,c), I[484] = (T)(img)(_p7##x,_n9##y,z,c), I[485] = (T)(img)(_p6##x,_n9##y,z,c), I[486] = (T)(img)(_p5##x,_n9##y,z,c), I[487] = (T)(img)(_p4##x,_n9##y,z,c), I[488] = (T)(img)(_p3##x,_n9##y,z,c), I[489] = (T)(img)(_p2##x,_n9##y,z,c), I[490] = (T)(img)(_p1##x,_n9##y,z,c), I[491] = (T)(img)(x,_n9##y,z,c), I[492] = (T)(img)(_n1##x,_n9##y,z,c), I[493] = (T)(img)(_n2##x,_n9##y,z,c), I[494] = (T)(img)(_n3##x,_n9##y,z,c), I[495] = (T)(img)(_n4##x,_n9##y,z,c), I[496] = (T)(img)(_n5##x,_n9##y,z,c), I[497] = (T)(img)(_n6##x,_n9##y,z,c), I[498] = (T)(img)(_n7##x,_n9##y,z,c), I[499] = (T)(img)(_n8##x,_n9##y,z,c), I[500] = (T)(img)(_n9##x,_n9##y,z,c), I[501] = (T)(img)(_n10##x,_n9##y,z,c), I[502] = (T)(img)(_n11##x,_n9##y,z,c), I[503] = (T)(img)(_n12##x,_n9##y,z,c), \ - I[504] = (T)(img)(_p11##x,_n10##y,z,c), I[505] = (T)(img)(_p10##x,_n10##y,z,c), I[506] = (T)(img)(_p9##x,_n10##y,z,c), I[507] = (T)(img)(_p8##x,_n10##y,z,c), I[508] = (T)(img)(_p7##x,_n10##y,z,c), I[509] = (T)(img)(_p6##x,_n10##y,z,c), I[510] = (T)(img)(_p5##x,_n10##y,z,c), I[511] = (T)(img)(_p4##x,_n10##y,z,c), I[512] = (T)(img)(_p3##x,_n10##y,z,c), I[513] = (T)(img)(_p2##x,_n10##y,z,c), I[514] = (T)(img)(_p1##x,_n10##y,z,c), I[515] = (T)(img)(x,_n10##y,z,c), I[516] = (T)(img)(_n1##x,_n10##y,z,c), I[517] = (T)(img)(_n2##x,_n10##y,z,c), I[518] = (T)(img)(_n3##x,_n10##y,z,c), I[519] = (T)(img)(_n4##x,_n10##y,z,c), I[520] = (T)(img)(_n5##x,_n10##y,z,c), I[521] = (T)(img)(_n6##x,_n10##y,z,c), I[522] = (T)(img)(_n7##x,_n10##y,z,c), I[523] = (T)(img)(_n8##x,_n10##y,z,c), I[524] = (T)(img)(_n9##x,_n10##y,z,c), I[525] = (T)(img)(_n10##x,_n10##y,z,c), I[526] = (T)(img)(_n11##x,_n10##y,z,c), I[527] = (T)(img)(_n12##x,_n10##y,z,c), \ - I[528] = (T)(img)(_p11##x,_n11##y,z,c), I[529] = (T)(img)(_p10##x,_n11##y,z,c), I[530] = (T)(img)(_p9##x,_n11##y,z,c), I[531] = (T)(img)(_p8##x,_n11##y,z,c), I[532] = (T)(img)(_p7##x,_n11##y,z,c), I[533] = (T)(img)(_p6##x,_n11##y,z,c), I[534] = (T)(img)(_p5##x,_n11##y,z,c), I[535] = (T)(img)(_p4##x,_n11##y,z,c), I[536] = (T)(img)(_p3##x,_n11##y,z,c), I[537] = (T)(img)(_p2##x,_n11##y,z,c), I[538] = (T)(img)(_p1##x,_n11##y,z,c), I[539] = (T)(img)(x,_n11##y,z,c), I[540] = (T)(img)(_n1##x,_n11##y,z,c), I[541] = (T)(img)(_n2##x,_n11##y,z,c), I[542] = (T)(img)(_n3##x,_n11##y,z,c), I[543] = (T)(img)(_n4##x,_n11##y,z,c), I[544] = (T)(img)(_n5##x,_n11##y,z,c), I[545] = (T)(img)(_n6##x,_n11##y,z,c), I[546] = (T)(img)(_n7##x,_n11##y,z,c), I[547] = (T)(img)(_n8##x,_n11##y,z,c), I[548] = (T)(img)(_n9##x,_n11##y,z,c), I[549] = (T)(img)(_n10##x,_n11##y,z,c), I[550] = (T)(img)(_n11##x,_n11##y,z,c), I[551] = (T)(img)(_n12##x,_n11##y,z,c), \ - I[552] = (T)(img)(_p11##x,_n12##y,z,c), I[553] = (T)(img)(_p10##x,_n12##y,z,c), I[554] = (T)(img)(_p9##x,_n12##y,z,c), I[555] = (T)(img)(_p8##x,_n12##y,z,c), I[556] = (T)(img)(_p7##x,_n12##y,z,c), I[557] = (T)(img)(_p6##x,_n12##y,z,c), I[558] = (T)(img)(_p5##x,_n12##y,z,c), I[559] = (T)(img)(_p4##x,_n12##y,z,c), I[560] = (T)(img)(_p3##x,_n12##y,z,c), I[561] = (T)(img)(_p2##x,_n12##y,z,c), I[562] = (T)(img)(_p1##x,_n12##y,z,c), I[563] = (T)(img)(x,_n12##y,z,c), I[564] = (T)(img)(_n1##x,_n12##y,z,c), I[565] = (T)(img)(_n2##x,_n12##y,z,c), I[566] = (T)(img)(_n3##x,_n12##y,z,c), I[567] = (T)(img)(_n4##x,_n12##y,z,c), I[568] = (T)(img)(_n5##x,_n12##y,z,c), I[569] = (T)(img)(_n6##x,_n12##y,z,c), I[570] = (T)(img)(_n7##x,_n12##y,z,c), I[571] = (T)(img)(_n8##x,_n12##y,z,c), I[572] = (T)(img)(_n9##x,_n12##y,z,c), I[573] = (T)(img)(_n10##x,_n12##y,z,c), I[574] = (T)(img)(_n11##x,_n12##y,z,c), I[575] = (T)(img)(_n12##x,_n12##y,z,c); - -// Define 25x25 loop macros -//------------------------- -#define cimg_for25(bound,i) for (int i = 0, \ - _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12; \ - _n12##i<(int)(bound) || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i) - -#define cimg_for25X(img,x) cimg_for25((img)._width,x) -#define cimg_for25Y(img,y) cimg_for25((img)._height,y) -#define cimg_for25Z(img,z) cimg_for25((img)._depth,z) -#define cimg_for25C(img,c) cimg_for25((img)._spectrum,c) -#define cimg_for25XY(img,x,y) cimg_for25Y(img,y) cimg_for25X(img,x) -#define cimg_for25XZ(img,x,z) cimg_for25Z(img,z) cimg_for25X(img,x) -#define cimg_for25XC(img,x,c) cimg_for25C(img,c) cimg_for25X(img,x) -#define cimg_for25YZ(img,y,z) cimg_for25Z(img,z) cimg_for25Y(img,y) -#define cimg_for25YC(img,y,c) cimg_for25C(img,c) cimg_for25Y(img,y) -#define cimg_for25ZC(img,z,c) cimg_for25C(img,c) cimg_for25Z(img,z) -#define cimg_for25XYZ(img,x,y,z) cimg_for25Z(img,z) cimg_for25XY(img,x,y) -#define cimg_for25XZC(img,x,z,c) cimg_for25C(img,c) cimg_for25XZ(img,x,z) -#define cimg_for25YZC(img,y,z,c) cimg_for25C(img,c) cimg_for25YZ(img,y,z) -#define cimg_for25XYZC(img,x,y,z,c) cimg_for25C(img,c) cimg_for25XYZ(img,x,y,z) - -#define cimg_for_in25(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12; \ - i<=(int)(i1) && (_n12##i<(int)(bound) || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i) - -#define cimg_for_in25X(img,x0,x1,x) cimg_for_in25((img)._width,x0,x1,x) -#define cimg_for_in25Y(img,y0,y1,y) cimg_for_in25((img)._height,y0,y1,y) -#define cimg_for_in25Z(img,z0,z1,z) cimg_for_in25((img)._depth,z0,z1,z) -#define cimg_for_in25C(img,c0,c1,c) cimg_for_in25((img)._spectrum,c0,c1,c) -#define cimg_for_in25XY(img,x0,y0,x1,y1,x,y) cimg_for_in25Y(img,y0,y1,y) cimg_for_in25X(img,x0,x1,x) -#define cimg_for_in25XZ(img,x0,z0,x1,z1,x,z) cimg_for_in25Z(img,z0,z1,z) cimg_for_in25X(img,x0,x1,x) -#define cimg_for_in25XC(img,x0,c0,x1,c1,x,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25X(img,x0,x1,x) -#define cimg_for_in25YZ(img,y0,z0,y1,z1,y,z) cimg_for_in25Z(img,z0,z1,z) cimg_for_in25Y(img,y0,y1,y) -#define cimg_for_in25YC(img,y0,c0,y1,c1,y,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25Y(img,y0,y1,y) -#define cimg_for_in25ZC(img,z0,c0,z1,c1,z,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25Z(img,z0,z1,z) -#define cimg_for_in25XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in25Z(img,z0,z1,z) cimg_for_in25XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in25XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in25YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in25XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in25C(img,c0,c1,c) cimg_for_in25XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for25x25(img,x,y,z,c,I,T) \ - cimg_for25((img)._height,y) for (int x = 0, \ - _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = (T)(img)(0,_p12##y,z,c)), \ - (I[25] = I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = (T)(img)(0,_p11##y,z,c)), \ - (I[50] = I[51] = I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = (T)(img)(0,_p10##y,z,c)), \ - (I[75] = I[76] = I[77] = I[78] = I[79] = I[80] = I[81] = I[82] = I[83] = I[84] = I[85] = I[86] = I[87] = (T)(img)(0,_p9##y,z,c)), \ - (I[100] = I[101] = I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = I[111] = I[112] = (T)(img)(0,_p8##y,z,c)), \ - (I[125] = I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = (T)(img)(0,_p7##y,z,c)), \ - (I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = (T)(img)(0,_p6##y,z,c)), \ - (I[175] = I[176] = I[177] = I[178] = I[179] = I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = (T)(img)(0,_p5##y,z,c)), \ - (I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = I[207] = I[208] = I[209] = I[210] = I[211] = I[212] = (T)(img)(0,_p4##y,z,c)), \ - (I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = (T)(img)(0,_p3##y,z,c)), \ - (I[250] = I[251] = I[252] = I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = (T)(img)(0,_p2##y,z,c)), \ - (I[275] = I[276] = I[277] = I[278] = I[279] = I[280] = I[281] = I[282] = I[283] = I[284] = I[285] = I[286] = I[287] = (T)(img)(0,_p1##y,z,c)), \ - (I[300] = I[301] = I[302] = I[303] = I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = I[310] = I[311] = I[312] = (T)(img)(0,y,z,c)), \ - (I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = I[333] = I[334] = I[335] = I[336] = I[337] = (T)(img)(0,_n1##y,z,c)), \ - (I[350] = I[351] = I[352] = I[353] = I[354] = I[355] = I[356] = I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = (T)(img)(0,_n2##y,z,c)), \ - (I[375] = I[376] = I[377] = I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = (T)(img)(0,_n3##y,z,c)), \ - (I[400] = I[401] = I[402] = I[403] = I[404] = I[405] = I[406] = I[407] = I[408] = I[409] = I[410] = I[411] = I[412] = (T)(img)(0,_n4##y,z,c)), \ - (I[425] = I[426] = I[427] = I[428] = I[429] = I[430] = I[431] = I[432] = I[433] = I[434] = I[435] = I[436] = I[437] = (T)(img)(0,_n5##y,z,c)), \ - (I[450] = I[451] = I[452] = I[453] = I[454] = I[455] = I[456] = I[457] = I[458] = I[459] = I[460] = I[461] = I[462] = (T)(img)(0,_n6##y,z,c)), \ - (I[475] = I[476] = I[477] = I[478] = I[479] = I[480] = I[481] = I[482] = I[483] = I[484] = I[485] = I[486] = I[487] = (T)(img)(0,_n7##y,z,c)), \ - (I[500] = I[501] = I[502] = I[503] = I[504] = I[505] = I[506] = I[507] = I[508] = I[509] = I[510] = I[511] = I[512] = (T)(img)(0,_n8##y,z,c)), \ - (I[525] = I[526] = I[527] = I[528] = I[529] = I[530] = I[531] = I[532] = I[533] = I[534] = I[535] = I[536] = I[537] = (T)(img)(0,_n9##y,z,c)), \ - (I[550] = I[551] = I[552] = I[553] = I[554] = I[555] = I[556] = I[557] = I[558] = I[559] = I[560] = I[561] = I[562] = (T)(img)(0,_n10##y,z,c)), \ - (I[575] = I[576] = I[577] = I[578] = I[579] = I[580] = I[581] = I[582] = I[583] = I[584] = I[585] = I[586] = I[587] = (T)(img)(0,_n11##y,z,c)), \ - (I[600] = I[601] = I[602] = I[603] = I[604] = I[605] = I[606] = I[607] = I[608] = I[609] = I[610] = I[611] = I[612] = (T)(img)(0,_n12##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[38] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[88] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[113] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[138] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[163] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[188] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[213] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[263] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[288] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[313] = (T)(img)(_n1##x,y,z,c)), \ - (I[338] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[388] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[413] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[438] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[463] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[488] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[513] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[538] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[563] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[588] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[613] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[39] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[89] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[114] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[139] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[164] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[189] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[214] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[264] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[289] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[314] = (T)(img)(_n2##x,y,z,c)), \ - (I[339] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[389] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[414] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[439] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[464] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[489] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[514] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[539] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[564] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[589] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[614] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[15] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[40] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[90] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[115] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[140] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[165] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[190] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[215] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[265] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[290] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[315] = (T)(img)(_n3##x,y,z,c)), \ - (I[340] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[390] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[415] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[440] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[465] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[490] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[515] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[540] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[565] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[590] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[615] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[16] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[41] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[91] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[116] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[141] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[166] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[191] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[216] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[266] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[291] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[316] = (T)(img)(_n4##x,y,z,c)), \ - (I[341] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[391] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[416] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[441] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[466] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[491] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[516] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[541] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[566] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[591] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[616] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[17] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[42] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[92] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[117] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[142] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[167] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[192] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[217] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[267] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[292] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[317] = (T)(img)(_n5##x,y,z,c)), \ - (I[342] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[392] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[417] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[442] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[467] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[492] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[517] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[542] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[567] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[592] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[617] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[18] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[43] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[93] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[118] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[143] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[168] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[193] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[218] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[268] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[293] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[318] = (T)(img)(_n6##x,y,z,c)), \ - (I[343] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[393] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[418] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[443] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[468] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[493] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[518] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[543] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[568] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[593] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[618] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[19] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[44] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[94] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[119] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[144] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[169] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[194] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[219] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[269] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[294] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[319] = (T)(img)(_n7##x,y,z,c)), \ - (I[344] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[394] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[419] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[444] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[469] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[494] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[519] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[544] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[569] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[594] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[619] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[20] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[45] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[70] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[95] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[120] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[145] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[170] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[195] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[220] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[270] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[295] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[320] = (T)(img)(_n8##x,y,z,c)), \ - (I[345] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[395] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[420] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[445] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[470] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[495] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[520] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[545] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[570] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[595] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[620] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[21] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[46] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[71] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[96] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[121] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[146] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[171] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[196] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[221] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[271] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[296] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[321] = (T)(img)(_n9##x,y,z,c)), \ - (I[346] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[396] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[421] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[446] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[471] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[496] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[521] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[546] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[571] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[596] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[621] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[22] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[47] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[72] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[97] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[122] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[147] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[172] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[197] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[222] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[247] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[272] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[297] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[322] = (T)(img)(_n10##x,y,z,c)), \ - (I[347] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[397] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[422] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[447] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[472] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[497] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[522] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[547] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[572] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[597] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[622] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[23] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[48] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[73] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[98] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[123] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[148] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[173] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[198] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[223] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[248] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[273] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[298] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[323] = (T)(img)(_n11##x,y,z,c)), \ - (I[348] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[398] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[423] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[448] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[473] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[498] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[523] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[548] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[573] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[598] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[623] = (T)(img)(_n11##x,_n12##y,z,c)), \ - 12>=((img)._width)?(img).width()-1:12); \ - (_n12##x<(img).width() && ( \ - (I[24] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[49] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[74] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[99] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[124] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[149] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[174] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[199] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[224] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[249] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[274] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[299] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[324] = (T)(img)(_n12##x,y,z,c)), \ - (I[349] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[374] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[399] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[424] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[449] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[474] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[499] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[524] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[549] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[574] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[599] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[624] = (T)(img)(_n12##x,_n12##y,z,c)),1)) || \ - _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], \ - I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], \ - I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], \ - I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], \ - I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], \ - I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], \ - I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], \ - I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], \ - I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], \ - I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], \ - I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], \ - I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], \ - I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], \ - I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], \ - I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], \ - I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], \ - I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], \ - _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x) - -#define cimg_for_in25x25(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in25((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = (int)( \ - (I[0] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[25] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[50] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[75] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[100] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[125] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[150] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[175] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[200] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[225] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[250] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[275] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[300] = (T)(img)(_p12##x,y,z,c)), \ - (I[325] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[350] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[375] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[400] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[425] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[450] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[475] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[500] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[525] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[550] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[575] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[600] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[1] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[26] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[51] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[76] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[101] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[126] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[151] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[176] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[201] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[226] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[251] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[276] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[301] = (T)(img)(_p11##x,y,z,c)), \ - (I[326] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[351] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[376] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[401] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[426] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[451] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[476] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[501] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[526] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[551] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[576] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[601] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[2] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[27] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[52] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[77] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[102] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[127] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[152] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[177] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[202] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[227] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[252] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[277] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[302] = (T)(img)(_p10##x,y,z,c)), \ - (I[327] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[352] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[377] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[402] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[427] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[452] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[477] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[502] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[527] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[552] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[577] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[602] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[3] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[28] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[53] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[78] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[103] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[128] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[153] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[178] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[203] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[228] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[253] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[278] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[303] = (T)(img)(_p9##x,y,z,c)), \ - (I[328] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[353] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[378] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[403] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[428] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[453] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[478] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[503] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[528] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[553] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[578] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[603] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[4] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[29] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[54] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[79] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[104] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[129] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[154] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[179] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[204] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[229] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[254] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[279] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[304] = (T)(img)(_p8##x,y,z,c)), \ - (I[329] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[354] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[379] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[404] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[429] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[454] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[479] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[504] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[529] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[554] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[579] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[604] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[5] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[30] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[55] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[80] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[105] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[130] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[155] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[180] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[205] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[230] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[255] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[280] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[305] = (T)(img)(_p7##x,y,z,c)), \ - (I[330] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[355] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[380] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[405] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[430] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[455] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[480] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[505] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[530] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[555] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[580] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[605] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[6] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[31] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[56] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[81] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[106] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[131] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[156] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[181] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[206] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[231] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[256] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[281] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[306] = (T)(img)(_p6##x,y,z,c)), \ - (I[331] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[356] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[381] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[406] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[431] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[456] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[481] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[506] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[531] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[556] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[581] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[606] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[7] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[32] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[57] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[82] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[107] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[132] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[157] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[182] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[207] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[232] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[257] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[282] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[307] = (T)(img)(_p5##x,y,z,c)), \ - (I[332] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[357] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[382] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[407] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[432] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[457] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[482] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[507] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[532] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[557] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[582] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[607] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[8] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[33] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[58] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[83] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[108] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[133] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[158] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[183] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[208] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[233] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[258] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[283] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[308] = (T)(img)(_p4##x,y,z,c)), \ - (I[333] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[358] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[383] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[408] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[433] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[458] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[483] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[508] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[533] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[558] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[583] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[608] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[9] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[34] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[59] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[84] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[109] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[134] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[159] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[184] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[209] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[234] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[259] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[284] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[309] = (T)(img)(_p3##x,y,z,c)), \ - (I[334] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[359] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[384] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[409] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[434] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[459] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[484] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[509] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[534] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[559] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[584] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[609] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[10] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[35] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[60] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[85] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[110] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[135] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[160] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[185] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[210] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[235] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[260] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[285] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[310] = (T)(img)(_p2##x,y,z,c)), \ - (I[335] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[360] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[385] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[410] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[435] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[460] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[485] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[510] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[535] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[560] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[585] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[610] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[11] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[36] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[61] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[86] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[111] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[136] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[161] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[186] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[211] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[236] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[261] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[286] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[311] = (T)(img)(_p1##x,y,z,c)), \ - (I[336] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[361] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[386] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[411] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[436] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[461] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[486] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[511] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[536] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[561] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[586] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[611] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[12] = (T)(img)(x,_p12##y,z,c)), \ - (I[37] = (T)(img)(x,_p11##y,z,c)), \ - (I[62] = (T)(img)(x,_p10##y,z,c)), \ - (I[87] = (T)(img)(x,_p9##y,z,c)), \ - (I[112] = (T)(img)(x,_p8##y,z,c)), \ - (I[137] = (T)(img)(x,_p7##y,z,c)), \ - (I[162] = (T)(img)(x,_p6##y,z,c)), \ - (I[187] = (T)(img)(x,_p5##y,z,c)), \ - (I[212] = (T)(img)(x,_p4##y,z,c)), \ - (I[237] = (T)(img)(x,_p3##y,z,c)), \ - (I[262] = (T)(img)(x,_p2##y,z,c)), \ - (I[287] = (T)(img)(x,_p1##y,z,c)), \ - (I[312] = (T)(img)(x,y,z,c)), \ - (I[337] = (T)(img)(x,_n1##y,z,c)), \ - (I[362] = (T)(img)(x,_n2##y,z,c)), \ - (I[387] = (T)(img)(x,_n3##y,z,c)), \ - (I[412] = (T)(img)(x,_n4##y,z,c)), \ - (I[437] = (T)(img)(x,_n5##y,z,c)), \ - (I[462] = (T)(img)(x,_n6##y,z,c)), \ - (I[487] = (T)(img)(x,_n7##y,z,c)), \ - (I[512] = (T)(img)(x,_n8##y,z,c)), \ - (I[537] = (T)(img)(x,_n9##y,z,c)), \ - (I[562] = (T)(img)(x,_n10##y,z,c)), \ - (I[587] = (T)(img)(x,_n11##y,z,c)), \ - (I[612] = (T)(img)(x,_n12##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[38] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[88] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[113] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[138] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[163] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[188] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[213] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[263] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[288] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[313] = (T)(img)(_n1##x,y,z,c)), \ - (I[338] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[388] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[413] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[438] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[463] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[488] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[513] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[538] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[563] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[588] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[613] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[39] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[89] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[114] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[139] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[164] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[189] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[214] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[264] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[289] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[314] = (T)(img)(_n2##x,y,z,c)), \ - (I[339] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[389] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[414] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[439] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[464] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[489] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[514] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[539] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[564] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[589] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[614] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[15] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[40] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[65] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[90] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[115] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[140] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[165] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[190] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[215] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[265] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[290] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[315] = (T)(img)(_n3##x,y,z,c)), \ - (I[340] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[390] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[415] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[440] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[465] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[490] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[515] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[540] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[565] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[590] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[615] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[16] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[41] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[66] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[91] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[116] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[141] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[166] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[191] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[216] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[266] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[291] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[316] = (T)(img)(_n4##x,y,z,c)), \ - (I[341] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[391] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[416] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[441] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[466] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[491] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[516] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[541] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[566] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[591] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[616] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[17] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[42] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[67] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[92] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[117] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[142] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[167] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[192] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[217] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[267] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[292] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[317] = (T)(img)(_n5##x,y,z,c)), \ - (I[342] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[392] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[417] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[442] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[467] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[492] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[517] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[542] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[567] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[592] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[617] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[18] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[43] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[68] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[93] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[118] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[143] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[168] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[193] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[218] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[268] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[293] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[318] = (T)(img)(_n6##x,y,z,c)), \ - (I[343] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[393] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[418] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[443] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[468] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[493] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[518] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[543] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[568] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[593] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[618] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[19] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[44] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[69] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[94] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[119] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[144] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[169] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[194] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[219] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[269] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[294] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[319] = (T)(img)(_n7##x,y,z,c)), \ - (I[344] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[394] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[419] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[444] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[469] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[494] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[519] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[544] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[569] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[594] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[619] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[20] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[45] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[70] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[95] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[120] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[145] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[170] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[195] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[220] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[270] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[295] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[320] = (T)(img)(_n8##x,y,z,c)), \ - (I[345] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[395] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[420] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[445] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[470] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[495] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[520] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[545] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[570] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[595] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[620] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[21] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[46] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[71] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[96] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[121] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[146] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[171] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[196] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[221] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[271] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[296] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[321] = (T)(img)(_n9##x,y,z,c)), \ - (I[346] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[396] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[421] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[446] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[471] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[496] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[521] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[546] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[571] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[596] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[621] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[22] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[47] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[72] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[97] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[122] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[147] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[172] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[197] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[222] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[247] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[272] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[297] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[322] = (T)(img)(_n10##x,y,z,c)), \ - (I[347] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[397] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[422] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[447] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[472] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[497] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[522] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[547] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[572] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[597] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[622] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[23] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[48] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[73] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[98] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[123] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[148] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[173] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[198] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[223] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[248] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[273] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[298] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[323] = (T)(img)(_n11##x,y,z,c)), \ - (I[348] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[398] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[423] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[448] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[473] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[498] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[523] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[548] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[573] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[598] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[623] = (T)(img)(_n11##x,_n12##y,z,c)), \ - x+12>=(img).width()?(img).width()-1:x+12); \ - x<=(int)(x1) && ((_n12##x<(img).width() && ( \ - (I[24] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[49] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[74] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[99] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[124] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[149] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[174] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[199] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[224] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[249] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[274] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[299] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[324] = (T)(img)(_n12##x,y,z,c)), \ - (I[349] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[374] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[399] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[424] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[449] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[474] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[499] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[524] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[549] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[574] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[599] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[624] = (T)(img)(_n12##x,_n12##y,z,c)),1)) || \ - _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], \ - I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], \ - I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], \ - I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], \ - I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], \ - I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], \ - I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], \ - I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], \ - I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], \ - I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], \ - I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], \ - I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], \ - I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], \ - I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], \ - I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], \ - I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], \ - I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], \ - _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x) - -#define cimg_get25x25(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p12##x,_p12##y,z,c), I[1] = (T)(img)(_p11##x,_p12##y,z,c), I[2] = (T)(img)(_p10##x,_p12##y,z,c), I[3] = (T)(img)(_p9##x,_p12##y,z,c), I[4] = (T)(img)(_p8##x,_p12##y,z,c), I[5] = (T)(img)(_p7##x,_p12##y,z,c), I[6] = (T)(img)(_p6##x,_p12##y,z,c), I[7] = (T)(img)(_p5##x,_p12##y,z,c), I[8] = (T)(img)(_p4##x,_p12##y,z,c), I[9] = (T)(img)(_p3##x,_p12##y,z,c), I[10] = (T)(img)(_p2##x,_p12##y,z,c), I[11] = (T)(img)(_p1##x,_p12##y,z,c), I[12] = (T)(img)(x,_p12##y,z,c), I[13] = (T)(img)(_n1##x,_p12##y,z,c), I[14] = (T)(img)(_n2##x,_p12##y,z,c), I[15] = (T)(img)(_n3##x,_p12##y,z,c), I[16] = (T)(img)(_n4##x,_p12##y,z,c), I[17] = (T)(img)(_n5##x,_p12##y,z,c), I[18] = (T)(img)(_n6##x,_p12##y,z,c), I[19] = (T)(img)(_n7##x,_p12##y,z,c), I[20] = (T)(img)(_n8##x,_p12##y,z,c), I[21] = (T)(img)(_n9##x,_p12##y,z,c), I[22] = (T)(img)(_n10##x,_p12##y,z,c), I[23] = (T)(img)(_n11##x,_p12##y,z,c), I[24] = (T)(img)(_n12##x,_p12##y,z,c), \ - I[25] = (T)(img)(_p12##x,_p11##y,z,c), I[26] = (T)(img)(_p11##x,_p11##y,z,c), I[27] = (T)(img)(_p10##x,_p11##y,z,c), I[28] = (T)(img)(_p9##x,_p11##y,z,c), I[29] = (T)(img)(_p8##x,_p11##y,z,c), I[30] = (T)(img)(_p7##x,_p11##y,z,c), I[31] = (T)(img)(_p6##x,_p11##y,z,c), I[32] = (T)(img)(_p5##x,_p11##y,z,c), I[33] = (T)(img)(_p4##x,_p11##y,z,c), I[34] = (T)(img)(_p3##x,_p11##y,z,c), I[35] = (T)(img)(_p2##x,_p11##y,z,c), I[36] = (T)(img)(_p1##x,_p11##y,z,c), I[37] = (T)(img)(x,_p11##y,z,c), I[38] = (T)(img)(_n1##x,_p11##y,z,c), I[39] = (T)(img)(_n2##x,_p11##y,z,c), I[40] = (T)(img)(_n3##x,_p11##y,z,c), I[41] = (T)(img)(_n4##x,_p11##y,z,c), I[42] = (T)(img)(_n5##x,_p11##y,z,c), I[43] = (T)(img)(_n6##x,_p11##y,z,c), I[44] = (T)(img)(_n7##x,_p11##y,z,c), I[45] = (T)(img)(_n8##x,_p11##y,z,c), I[46] = (T)(img)(_n9##x,_p11##y,z,c), I[47] = (T)(img)(_n10##x,_p11##y,z,c), I[48] = (T)(img)(_n11##x,_p11##y,z,c), I[49] = (T)(img)(_n12##x,_p11##y,z,c), \ - I[50] = (T)(img)(_p12##x,_p10##y,z,c), I[51] = (T)(img)(_p11##x,_p10##y,z,c), I[52] = (T)(img)(_p10##x,_p10##y,z,c), I[53] = (T)(img)(_p9##x,_p10##y,z,c), I[54] = (T)(img)(_p8##x,_p10##y,z,c), I[55] = (T)(img)(_p7##x,_p10##y,z,c), I[56] = (T)(img)(_p6##x,_p10##y,z,c), I[57] = (T)(img)(_p5##x,_p10##y,z,c), I[58] = (T)(img)(_p4##x,_p10##y,z,c), I[59] = (T)(img)(_p3##x,_p10##y,z,c), I[60] = (T)(img)(_p2##x,_p10##y,z,c), I[61] = (T)(img)(_p1##x,_p10##y,z,c), I[62] = (T)(img)(x,_p10##y,z,c), I[63] = (T)(img)(_n1##x,_p10##y,z,c), I[64] = (T)(img)(_n2##x,_p10##y,z,c), I[65] = (T)(img)(_n3##x,_p10##y,z,c), I[66] = (T)(img)(_n4##x,_p10##y,z,c), I[67] = (T)(img)(_n5##x,_p10##y,z,c), I[68] = (T)(img)(_n6##x,_p10##y,z,c), I[69] = (T)(img)(_n7##x,_p10##y,z,c), I[70] = (T)(img)(_n8##x,_p10##y,z,c), I[71] = (T)(img)(_n9##x,_p10##y,z,c), I[72] = (T)(img)(_n10##x,_p10##y,z,c), I[73] = (T)(img)(_n11##x,_p10##y,z,c), I[74] = (T)(img)(_n12##x,_p10##y,z,c), \ - I[75] = (T)(img)(_p12##x,_p9##y,z,c), I[76] = (T)(img)(_p11##x,_p9##y,z,c), I[77] = (T)(img)(_p10##x,_p9##y,z,c), I[78] = (T)(img)(_p9##x,_p9##y,z,c), I[79] = (T)(img)(_p8##x,_p9##y,z,c), I[80] = (T)(img)(_p7##x,_p9##y,z,c), I[81] = (T)(img)(_p6##x,_p9##y,z,c), I[82] = (T)(img)(_p5##x,_p9##y,z,c), I[83] = (T)(img)(_p4##x,_p9##y,z,c), I[84] = (T)(img)(_p3##x,_p9##y,z,c), I[85] = (T)(img)(_p2##x,_p9##y,z,c), I[86] = (T)(img)(_p1##x,_p9##y,z,c), I[87] = (T)(img)(x,_p9##y,z,c), I[88] = (T)(img)(_n1##x,_p9##y,z,c), I[89] = (T)(img)(_n2##x,_p9##y,z,c), I[90] = (T)(img)(_n3##x,_p9##y,z,c), I[91] = (T)(img)(_n4##x,_p9##y,z,c), I[92] = (T)(img)(_n5##x,_p9##y,z,c), I[93] = (T)(img)(_n6##x,_p9##y,z,c), I[94] = (T)(img)(_n7##x,_p9##y,z,c), I[95] = (T)(img)(_n8##x,_p9##y,z,c), I[96] = (T)(img)(_n9##x,_p9##y,z,c), I[97] = (T)(img)(_n10##x,_p9##y,z,c), I[98] = (T)(img)(_n11##x,_p9##y,z,c), I[99] = (T)(img)(_n12##x,_p9##y,z,c), \ - I[100] = (T)(img)(_p12##x,_p8##y,z,c), I[101] = (T)(img)(_p11##x,_p8##y,z,c), I[102] = (T)(img)(_p10##x,_p8##y,z,c), I[103] = (T)(img)(_p9##x,_p8##y,z,c), I[104] = (T)(img)(_p8##x,_p8##y,z,c), I[105] = (T)(img)(_p7##x,_p8##y,z,c), I[106] = (T)(img)(_p6##x,_p8##y,z,c), I[107] = (T)(img)(_p5##x,_p8##y,z,c), I[108] = (T)(img)(_p4##x,_p8##y,z,c), I[109] = (T)(img)(_p3##x,_p8##y,z,c), I[110] = (T)(img)(_p2##x,_p8##y,z,c), I[111] = (T)(img)(_p1##x,_p8##y,z,c), I[112] = (T)(img)(x,_p8##y,z,c), I[113] = (T)(img)(_n1##x,_p8##y,z,c), I[114] = (T)(img)(_n2##x,_p8##y,z,c), I[115] = (T)(img)(_n3##x,_p8##y,z,c), I[116] = (T)(img)(_n4##x,_p8##y,z,c), I[117] = (T)(img)(_n5##x,_p8##y,z,c), I[118] = (T)(img)(_n6##x,_p8##y,z,c), I[119] = (T)(img)(_n7##x,_p8##y,z,c), I[120] = (T)(img)(_n8##x,_p8##y,z,c), I[121] = (T)(img)(_n9##x,_p8##y,z,c), I[122] = (T)(img)(_n10##x,_p8##y,z,c), I[123] = (T)(img)(_n11##x,_p8##y,z,c), I[124] = (T)(img)(_n12##x,_p8##y,z,c), \ - I[125] = (T)(img)(_p12##x,_p7##y,z,c), I[126] = (T)(img)(_p11##x,_p7##y,z,c), I[127] = (T)(img)(_p10##x,_p7##y,z,c), I[128] = (T)(img)(_p9##x,_p7##y,z,c), I[129] = (T)(img)(_p8##x,_p7##y,z,c), I[130] = (T)(img)(_p7##x,_p7##y,z,c), I[131] = (T)(img)(_p6##x,_p7##y,z,c), I[132] = (T)(img)(_p5##x,_p7##y,z,c), I[133] = (T)(img)(_p4##x,_p7##y,z,c), I[134] = (T)(img)(_p3##x,_p7##y,z,c), I[135] = (T)(img)(_p2##x,_p7##y,z,c), I[136] = (T)(img)(_p1##x,_p7##y,z,c), I[137] = (T)(img)(x,_p7##y,z,c), I[138] = (T)(img)(_n1##x,_p7##y,z,c), I[139] = (T)(img)(_n2##x,_p7##y,z,c), I[140] = (T)(img)(_n3##x,_p7##y,z,c), I[141] = (T)(img)(_n4##x,_p7##y,z,c), I[142] = (T)(img)(_n5##x,_p7##y,z,c), I[143] = (T)(img)(_n6##x,_p7##y,z,c), I[144] = (T)(img)(_n7##x,_p7##y,z,c), I[145] = (T)(img)(_n8##x,_p7##y,z,c), I[146] = (T)(img)(_n9##x,_p7##y,z,c), I[147] = (T)(img)(_n10##x,_p7##y,z,c), I[148] = (T)(img)(_n11##x,_p7##y,z,c), I[149] = (T)(img)(_n12##x,_p7##y,z,c), \ - I[150] = (T)(img)(_p12##x,_p6##y,z,c), I[151] = (T)(img)(_p11##x,_p6##y,z,c), I[152] = (T)(img)(_p10##x,_p6##y,z,c), I[153] = (T)(img)(_p9##x,_p6##y,z,c), I[154] = (T)(img)(_p8##x,_p6##y,z,c), I[155] = (T)(img)(_p7##x,_p6##y,z,c), I[156] = (T)(img)(_p6##x,_p6##y,z,c), I[157] = (T)(img)(_p5##x,_p6##y,z,c), I[158] = (T)(img)(_p4##x,_p6##y,z,c), I[159] = (T)(img)(_p3##x,_p6##y,z,c), I[160] = (T)(img)(_p2##x,_p6##y,z,c), I[161] = (T)(img)(_p1##x,_p6##y,z,c), I[162] = (T)(img)(x,_p6##y,z,c), I[163] = (T)(img)(_n1##x,_p6##y,z,c), I[164] = (T)(img)(_n2##x,_p6##y,z,c), I[165] = (T)(img)(_n3##x,_p6##y,z,c), I[166] = (T)(img)(_n4##x,_p6##y,z,c), I[167] = (T)(img)(_n5##x,_p6##y,z,c), I[168] = (T)(img)(_n6##x,_p6##y,z,c), I[169] = (T)(img)(_n7##x,_p6##y,z,c), I[170] = (T)(img)(_n8##x,_p6##y,z,c), I[171] = (T)(img)(_n9##x,_p6##y,z,c), I[172] = (T)(img)(_n10##x,_p6##y,z,c), I[173] = (T)(img)(_n11##x,_p6##y,z,c), I[174] = (T)(img)(_n12##x,_p6##y,z,c), \ - I[175] = (T)(img)(_p12##x,_p5##y,z,c), I[176] = (T)(img)(_p11##x,_p5##y,z,c), I[177] = (T)(img)(_p10##x,_p5##y,z,c), I[178] = (T)(img)(_p9##x,_p5##y,z,c), I[179] = (T)(img)(_p8##x,_p5##y,z,c), I[180] = (T)(img)(_p7##x,_p5##y,z,c), I[181] = (T)(img)(_p6##x,_p5##y,z,c), I[182] = (T)(img)(_p5##x,_p5##y,z,c), I[183] = (T)(img)(_p4##x,_p5##y,z,c), I[184] = (T)(img)(_p3##x,_p5##y,z,c), I[185] = (T)(img)(_p2##x,_p5##y,z,c), I[186] = (T)(img)(_p1##x,_p5##y,z,c), I[187] = (T)(img)(x,_p5##y,z,c), I[188] = (T)(img)(_n1##x,_p5##y,z,c), I[189] = (T)(img)(_n2##x,_p5##y,z,c), I[190] = (T)(img)(_n3##x,_p5##y,z,c), I[191] = (T)(img)(_n4##x,_p5##y,z,c), I[192] = (T)(img)(_n5##x,_p5##y,z,c), I[193] = (T)(img)(_n6##x,_p5##y,z,c), I[194] = (T)(img)(_n7##x,_p5##y,z,c), I[195] = (T)(img)(_n8##x,_p5##y,z,c), I[196] = (T)(img)(_n9##x,_p5##y,z,c), I[197] = (T)(img)(_n10##x,_p5##y,z,c), I[198] = (T)(img)(_n11##x,_p5##y,z,c), I[199] = (T)(img)(_n12##x,_p5##y,z,c), \ - I[200] = (T)(img)(_p12##x,_p4##y,z,c), I[201] = (T)(img)(_p11##x,_p4##y,z,c), I[202] = (T)(img)(_p10##x,_p4##y,z,c), I[203] = (T)(img)(_p9##x,_p4##y,z,c), I[204] = (T)(img)(_p8##x,_p4##y,z,c), I[205] = (T)(img)(_p7##x,_p4##y,z,c), I[206] = (T)(img)(_p6##x,_p4##y,z,c), I[207] = (T)(img)(_p5##x,_p4##y,z,c), I[208] = (T)(img)(_p4##x,_p4##y,z,c), I[209] = (T)(img)(_p3##x,_p4##y,z,c), I[210] = (T)(img)(_p2##x,_p4##y,z,c), I[211] = (T)(img)(_p1##x,_p4##y,z,c), I[212] = (T)(img)(x,_p4##y,z,c), I[213] = (T)(img)(_n1##x,_p4##y,z,c), I[214] = (T)(img)(_n2##x,_p4##y,z,c), I[215] = (T)(img)(_n3##x,_p4##y,z,c), I[216] = (T)(img)(_n4##x,_p4##y,z,c), I[217] = (T)(img)(_n5##x,_p4##y,z,c), I[218] = (T)(img)(_n6##x,_p4##y,z,c), I[219] = (T)(img)(_n7##x,_p4##y,z,c), I[220] = (T)(img)(_n8##x,_p4##y,z,c), I[221] = (T)(img)(_n9##x,_p4##y,z,c), I[222] = (T)(img)(_n10##x,_p4##y,z,c), I[223] = (T)(img)(_n11##x,_p4##y,z,c), I[224] = (T)(img)(_n12##x,_p4##y,z,c), \ - I[225] = (T)(img)(_p12##x,_p3##y,z,c), I[226] = (T)(img)(_p11##x,_p3##y,z,c), I[227] = (T)(img)(_p10##x,_p3##y,z,c), I[228] = (T)(img)(_p9##x,_p3##y,z,c), I[229] = (T)(img)(_p8##x,_p3##y,z,c), I[230] = (T)(img)(_p7##x,_p3##y,z,c), I[231] = (T)(img)(_p6##x,_p3##y,z,c), I[232] = (T)(img)(_p5##x,_p3##y,z,c), I[233] = (T)(img)(_p4##x,_p3##y,z,c), I[234] = (T)(img)(_p3##x,_p3##y,z,c), I[235] = (T)(img)(_p2##x,_p3##y,z,c), I[236] = (T)(img)(_p1##x,_p3##y,z,c), I[237] = (T)(img)(x,_p3##y,z,c), I[238] = (T)(img)(_n1##x,_p3##y,z,c), I[239] = (T)(img)(_n2##x,_p3##y,z,c), I[240] = (T)(img)(_n3##x,_p3##y,z,c), I[241] = (T)(img)(_n4##x,_p3##y,z,c), I[242] = (T)(img)(_n5##x,_p3##y,z,c), I[243] = (T)(img)(_n6##x,_p3##y,z,c), I[244] = (T)(img)(_n7##x,_p3##y,z,c), I[245] = (T)(img)(_n8##x,_p3##y,z,c), I[246] = (T)(img)(_n9##x,_p3##y,z,c), I[247] = (T)(img)(_n10##x,_p3##y,z,c), I[248] = (T)(img)(_n11##x,_p3##y,z,c), I[249] = (T)(img)(_n12##x,_p3##y,z,c), \ - I[250] = (T)(img)(_p12##x,_p2##y,z,c), I[251] = (T)(img)(_p11##x,_p2##y,z,c), I[252] = (T)(img)(_p10##x,_p2##y,z,c), I[253] = (T)(img)(_p9##x,_p2##y,z,c), I[254] = (T)(img)(_p8##x,_p2##y,z,c), I[255] = (T)(img)(_p7##x,_p2##y,z,c), I[256] = (T)(img)(_p6##x,_p2##y,z,c), I[257] = (T)(img)(_p5##x,_p2##y,z,c), I[258] = (T)(img)(_p4##x,_p2##y,z,c), I[259] = (T)(img)(_p3##x,_p2##y,z,c), I[260] = (T)(img)(_p2##x,_p2##y,z,c), I[261] = (T)(img)(_p1##x,_p2##y,z,c), I[262] = (T)(img)(x,_p2##y,z,c), I[263] = (T)(img)(_n1##x,_p2##y,z,c), I[264] = (T)(img)(_n2##x,_p2##y,z,c), I[265] = (T)(img)(_n3##x,_p2##y,z,c), I[266] = (T)(img)(_n4##x,_p2##y,z,c), I[267] = (T)(img)(_n5##x,_p2##y,z,c), I[268] = (T)(img)(_n6##x,_p2##y,z,c), I[269] = (T)(img)(_n7##x,_p2##y,z,c), I[270] = (T)(img)(_n8##x,_p2##y,z,c), I[271] = (T)(img)(_n9##x,_p2##y,z,c), I[272] = (T)(img)(_n10##x,_p2##y,z,c), I[273] = (T)(img)(_n11##x,_p2##y,z,c), I[274] = (T)(img)(_n12##x,_p2##y,z,c), \ - I[275] = (T)(img)(_p12##x,_p1##y,z,c), I[276] = (T)(img)(_p11##x,_p1##y,z,c), I[277] = (T)(img)(_p10##x,_p1##y,z,c), I[278] = (T)(img)(_p9##x,_p1##y,z,c), I[279] = (T)(img)(_p8##x,_p1##y,z,c), I[280] = (T)(img)(_p7##x,_p1##y,z,c), I[281] = (T)(img)(_p6##x,_p1##y,z,c), I[282] = (T)(img)(_p5##x,_p1##y,z,c), I[283] = (T)(img)(_p4##x,_p1##y,z,c), I[284] = (T)(img)(_p3##x,_p1##y,z,c), I[285] = (T)(img)(_p2##x,_p1##y,z,c), I[286] = (T)(img)(_p1##x,_p1##y,z,c), I[287] = (T)(img)(x,_p1##y,z,c), I[288] = (T)(img)(_n1##x,_p1##y,z,c), I[289] = (T)(img)(_n2##x,_p1##y,z,c), I[290] = (T)(img)(_n3##x,_p1##y,z,c), I[291] = (T)(img)(_n4##x,_p1##y,z,c), I[292] = (T)(img)(_n5##x,_p1##y,z,c), I[293] = (T)(img)(_n6##x,_p1##y,z,c), I[294] = (T)(img)(_n7##x,_p1##y,z,c), I[295] = (T)(img)(_n8##x,_p1##y,z,c), I[296] = (T)(img)(_n9##x,_p1##y,z,c), I[297] = (T)(img)(_n10##x,_p1##y,z,c), I[298] = (T)(img)(_n11##x,_p1##y,z,c), I[299] = (T)(img)(_n12##x,_p1##y,z,c), \ - I[300] = (T)(img)(_p12##x,y,z,c), I[301] = (T)(img)(_p11##x,y,z,c), I[302] = (T)(img)(_p10##x,y,z,c), I[303] = (T)(img)(_p9##x,y,z,c), I[304] = (T)(img)(_p8##x,y,z,c), I[305] = (T)(img)(_p7##x,y,z,c), I[306] = (T)(img)(_p6##x,y,z,c), I[307] = (T)(img)(_p5##x,y,z,c), I[308] = (T)(img)(_p4##x,y,z,c), I[309] = (T)(img)(_p3##x,y,z,c), I[310] = (T)(img)(_p2##x,y,z,c), I[311] = (T)(img)(_p1##x,y,z,c), I[312] = (T)(img)(x,y,z,c), I[313] = (T)(img)(_n1##x,y,z,c), I[314] = (T)(img)(_n2##x,y,z,c), I[315] = (T)(img)(_n3##x,y,z,c), I[316] = (T)(img)(_n4##x,y,z,c), I[317] = (T)(img)(_n5##x,y,z,c), I[318] = (T)(img)(_n6##x,y,z,c), I[319] = (T)(img)(_n7##x,y,z,c), I[320] = (T)(img)(_n8##x,y,z,c), I[321] = (T)(img)(_n9##x,y,z,c), I[322] = (T)(img)(_n10##x,y,z,c), I[323] = (T)(img)(_n11##x,y,z,c), I[324] = (T)(img)(_n12##x,y,z,c), \ - I[325] = (T)(img)(_p12##x,_n1##y,z,c), I[326] = (T)(img)(_p11##x,_n1##y,z,c), I[327] = (T)(img)(_p10##x,_n1##y,z,c), I[328] = (T)(img)(_p9##x,_n1##y,z,c), I[329] = (T)(img)(_p8##x,_n1##y,z,c), I[330] = (T)(img)(_p7##x,_n1##y,z,c), I[331] = (T)(img)(_p6##x,_n1##y,z,c), I[332] = (T)(img)(_p5##x,_n1##y,z,c), I[333] = (T)(img)(_p4##x,_n1##y,z,c), I[334] = (T)(img)(_p3##x,_n1##y,z,c), I[335] = (T)(img)(_p2##x,_n1##y,z,c), I[336] = (T)(img)(_p1##x,_n1##y,z,c), I[337] = (T)(img)(x,_n1##y,z,c), I[338] = (T)(img)(_n1##x,_n1##y,z,c), I[339] = (T)(img)(_n2##x,_n1##y,z,c), I[340] = (T)(img)(_n3##x,_n1##y,z,c), I[341] = (T)(img)(_n4##x,_n1##y,z,c), I[342] = (T)(img)(_n5##x,_n1##y,z,c), I[343] = (T)(img)(_n6##x,_n1##y,z,c), I[344] = (T)(img)(_n7##x,_n1##y,z,c), I[345] = (T)(img)(_n8##x,_n1##y,z,c), I[346] = (T)(img)(_n9##x,_n1##y,z,c), I[347] = (T)(img)(_n10##x,_n1##y,z,c), I[348] = (T)(img)(_n11##x,_n1##y,z,c), I[349] = (T)(img)(_n12##x,_n1##y,z,c), \ - I[350] = (T)(img)(_p12##x,_n2##y,z,c), I[351] = (T)(img)(_p11##x,_n2##y,z,c), I[352] = (T)(img)(_p10##x,_n2##y,z,c), I[353] = (T)(img)(_p9##x,_n2##y,z,c), I[354] = (T)(img)(_p8##x,_n2##y,z,c), I[355] = (T)(img)(_p7##x,_n2##y,z,c), I[356] = (T)(img)(_p6##x,_n2##y,z,c), I[357] = (T)(img)(_p5##x,_n2##y,z,c), I[358] = (T)(img)(_p4##x,_n2##y,z,c), I[359] = (T)(img)(_p3##x,_n2##y,z,c), I[360] = (T)(img)(_p2##x,_n2##y,z,c), I[361] = (T)(img)(_p1##x,_n2##y,z,c), I[362] = (T)(img)(x,_n2##y,z,c), I[363] = (T)(img)(_n1##x,_n2##y,z,c), I[364] = (T)(img)(_n2##x,_n2##y,z,c), I[365] = (T)(img)(_n3##x,_n2##y,z,c), I[366] = (T)(img)(_n4##x,_n2##y,z,c), I[367] = (T)(img)(_n5##x,_n2##y,z,c), I[368] = (T)(img)(_n6##x,_n2##y,z,c), I[369] = (T)(img)(_n7##x,_n2##y,z,c), I[370] = (T)(img)(_n8##x,_n2##y,z,c), I[371] = (T)(img)(_n9##x,_n2##y,z,c), I[372] = (T)(img)(_n10##x,_n2##y,z,c), I[373] = (T)(img)(_n11##x,_n2##y,z,c), I[374] = (T)(img)(_n12##x,_n2##y,z,c), \ - I[375] = (T)(img)(_p12##x,_n3##y,z,c), I[376] = (T)(img)(_p11##x,_n3##y,z,c), I[377] = (T)(img)(_p10##x,_n3##y,z,c), I[378] = (T)(img)(_p9##x,_n3##y,z,c), I[379] = (T)(img)(_p8##x,_n3##y,z,c), I[380] = (T)(img)(_p7##x,_n3##y,z,c), I[381] = (T)(img)(_p6##x,_n3##y,z,c), I[382] = (T)(img)(_p5##x,_n3##y,z,c), I[383] = (T)(img)(_p4##x,_n3##y,z,c), I[384] = (T)(img)(_p3##x,_n3##y,z,c), I[385] = (T)(img)(_p2##x,_n3##y,z,c), I[386] = (T)(img)(_p1##x,_n3##y,z,c), I[387] = (T)(img)(x,_n3##y,z,c), I[388] = (T)(img)(_n1##x,_n3##y,z,c), I[389] = (T)(img)(_n2##x,_n3##y,z,c), I[390] = (T)(img)(_n3##x,_n3##y,z,c), I[391] = (T)(img)(_n4##x,_n3##y,z,c), I[392] = (T)(img)(_n5##x,_n3##y,z,c), I[393] = (T)(img)(_n6##x,_n3##y,z,c), I[394] = (T)(img)(_n7##x,_n3##y,z,c), I[395] = (T)(img)(_n8##x,_n3##y,z,c), I[396] = (T)(img)(_n9##x,_n3##y,z,c), I[397] = (T)(img)(_n10##x,_n3##y,z,c), I[398] = (T)(img)(_n11##x,_n3##y,z,c), I[399] = (T)(img)(_n12##x,_n3##y,z,c), \ - I[400] = (T)(img)(_p12##x,_n4##y,z,c), I[401] = (T)(img)(_p11##x,_n4##y,z,c), I[402] = (T)(img)(_p10##x,_n4##y,z,c), I[403] = (T)(img)(_p9##x,_n4##y,z,c), I[404] = (T)(img)(_p8##x,_n4##y,z,c), I[405] = (T)(img)(_p7##x,_n4##y,z,c), I[406] = (T)(img)(_p6##x,_n4##y,z,c), I[407] = (T)(img)(_p5##x,_n4##y,z,c), I[408] = (T)(img)(_p4##x,_n4##y,z,c), I[409] = (T)(img)(_p3##x,_n4##y,z,c), I[410] = (T)(img)(_p2##x,_n4##y,z,c), I[411] = (T)(img)(_p1##x,_n4##y,z,c), I[412] = (T)(img)(x,_n4##y,z,c), I[413] = (T)(img)(_n1##x,_n4##y,z,c), I[414] = (T)(img)(_n2##x,_n4##y,z,c), I[415] = (T)(img)(_n3##x,_n4##y,z,c), I[416] = (T)(img)(_n4##x,_n4##y,z,c), I[417] = (T)(img)(_n5##x,_n4##y,z,c), I[418] = (T)(img)(_n6##x,_n4##y,z,c), I[419] = (T)(img)(_n7##x,_n4##y,z,c), I[420] = (T)(img)(_n8##x,_n4##y,z,c), I[421] = (T)(img)(_n9##x,_n4##y,z,c), I[422] = (T)(img)(_n10##x,_n4##y,z,c), I[423] = (T)(img)(_n11##x,_n4##y,z,c), I[424] = (T)(img)(_n12##x,_n4##y,z,c), \ - I[425] = (T)(img)(_p12##x,_n5##y,z,c), I[426] = (T)(img)(_p11##x,_n5##y,z,c), I[427] = (T)(img)(_p10##x,_n5##y,z,c), I[428] = (T)(img)(_p9##x,_n5##y,z,c), I[429] = (T)(img)(_p8##x,_n5##y,z,c), I[430] = (T)(img)(_p7##x,_n5##y,z,c), I[431] = (T)(img)(_p6##x,_n5##y,z,c), I[432] = (T)(img)(_p5##x,_n5##y,z,c), I[433] = (T)(img)(_p4##x,_n5##y,z,c), I[434] = (T)(img)(_p3##x,_n5##y,z,c), I[435] = (T)(img)(_p2##x,_n5##y,z,c), I[436] = (T)(img)(_p1##x,_n5##y,z,c), I[437] = (T)(img)(x,_n5##y,z,c), I[438] = (T)(img)(_n1##x,_n5##y,z,c), I[439] = (T)(img)(_n2##x,_n5##y,z,c), I[440] = (T)(img)(_n3##x,_n5##y,z,c), I[441] = (T)(img)(_n4##x,_n5##y,z,c), I[442] = (T)(img)(_n5##x,_n5##y,z,c), I[443] = (T)(img)(_n6##x,_n5##y,z,c), I[444] = (T)(img)(_n7##x,_n5##y,z,c), I[445] = (T)(img)(_n8##x,_n5##y,z,c), I[446] = (T)(img)(_n9##x,_n5##y,z,c), I[447] = (T)(img)(_n10##x,_n5##y,z,c), I[448] = (T)(img)(_n11##x,_n5##y,z,c), I[449] = (T)(img)(_n12##x,_n5##y,z,c), \ - I[450] = (T)(img)(_p12##x,_n6##y,z,c), I[451] = (T)(img)(_p11##x,_n6##y,z,c), I[452] = (T)(img)(_p10##x,_n6##y,z,c), I[453] = (T)(img)(_p9##x,_n6##y,z,c), I[454] = (T)(img)(_p8##x,_n6##y,z,c), I[455] = (T)(img)(_p7##x,_n6##y,z,c), I[456] = (T)(img)(_p6##x,_n6##y,z,c), I[457] = (T)(img)(_p5##x,_n6##y,z,c), I[458] = (T)(img)(_p4##x,_n6##y,z,c), I[459] = (T)(img)(_p3##x,_n6##y,z,c), I[460] = (T)(img)(_p2##x,_n6##y,z,c), I[461] = (T)(img)(_p1##x,_n6##y,z,c), I[462] = (T)(img)(x,_n6##y,z,c), I[463] = (T)(img)(_n1##x,_n6##y,z,c), I[464] = (T)(img)(_n2##x,_n6##y,z,c), I[465] = (T)(img)(_n3##x,_n6##y,z,c), I[466] = (T)(img)(_n4##x,_n6##y,z,c), I[467] = (T)(img)(_n5##x,_n6##y,z,c), I[468] = (T)(img)(_n6##x,_n6##y,z,c), I[469] = (T)(img)(_n7##x,_n6##y,z,c), I[470] = (T)(img)(_n8##x,_n6##y,z,c), I[471] = (T)(img)(_n9##x,_n6##y,z,c), I[472] = (T)(img)(_n10##x,_n6##y,z,c), I[473] = (T)(img)(_n11##x,_n6##y,z,c), I[474] = (T)(img)(_n12##x,_n6##y,z,c), \ - I[475] = (T)(img)(_p12##x,_n7##y,z,c), I[476] = (T)(img)(_p11##x,_n7##y,z,c), I[477] = (T)(img)(_p10##x,_n7##y,z,c), I[478] = (T)(img)(_p9##x,_n7##y,z,c), I[479] = (T)(img)(_p8##x,_n7##y,z,c), I[480] = (T)(img)(_p7##x,_n7##y,z,c), I[481] = (T)(img)(_p6##x,_n7##y,z,c), I[482] = (T)(img)(_p5##x,_n7##y,z,c), I[483] = (T)(img)(_p4##x,_n7##y,z,c), I[484] = (T)(img)(_p3##x,_n7##y,z,c), I[485] = (T)(img)(_p2##x,_n7##y,z,c), I[486] = (T)(img)(_p1##x,_n7##y,z,c), I[487] = (T)(img)(x,_n7##y,z,c), I[488] = (T)(img)(_n1##x,_n7##y,z,c), I[489] = (T)(img)(_n2##x,_n7##y,z,c), I[490] = (T)(img)(_n3##x,_n7##y,z,c), I[491] = (T)(img)(_n4##x,_n7##y,z,c), I[492] = (T)(img)(_n5##x,_n7##y,z,c), I[493] = (T)(img)(_n6##x,_n7##y,z,c), I[494] = (T)(img)(_n7##x,_n7##y,z,c), I[495] = (T)(img)(_n8##x,_n7##y,z,c), I[496] = (T)(img)(_n9##x,_n7##y,z,c), I[497] = (T)(img)(_n10##x,_n7##y,z,c), I[498] = (T)(img)(_n11##x,_n7##y,z,c), I[499] = (T)(img)(_n12##x,_n7##y,z,c), \ - I[500] = (T)(img)(_p12##x,_n8##y,z,c), I[501] = (T)(img)(_p11##x,_n8##y,z,c), I[502] = (T)(img)(_p10##x,_n8##y,z,c), I[503] = (T)(img)(_p9##x,_n8##y,z,c), I[504] = (T)(img)(_p8##x,_n8##y,z,c), I[505] = (T)(img)(_p7##x,_n8##y,z,c), I[506] = (T)(img)(_p6##x,_n8##y,z,c), I[507] = (T)(img)(_p5##x,_n8##y,z,c), I[508] = (T)(img)(_p4##x,_n8##y,z,c), I[509] = (T)(img)(_p3##x,_n8##y,z,c), I[510] = (T)(img)(_p2##x,_n8##y,z,c), I[511] = (T)(img)(_p1##x,_n8##y,z,c), I[512] = (T)(img)(x,_n8##y,z,c), I[513] = (T)(img)(_n1##x,_n8##y,z,c), I[514] = (T)(img)(_n2##x,_n8##y,z,c), I[515] = (T)(img)(_n3##x,_n8##y,z,c), I[516] = (T)(img)(_n4##x,_n8##y,z,c), I[517] = (T)(img)(_n5##x,_n8##y,z,c), I[518] = (T)(img)(_n6##x,_n8##y,z,c), I[519] = (T)(img)(_n7##x,_n8##y,z,c), I[520] = (T)(img)(_n8##x,_n8##y,z,c), I[521] = (T)(img)(_n9##x,_n8##y,z,c), I[522] = (T)(img)(_n10##x,_n8##y,z,c), I[523] = (T)(img)(_n11##x,_n8##y,z,c), I[524] = (T)(img)(_n12##x,_n8##y,z,c), \ - I[525] = (T)(img)(_p12##x,_n9##y,z,c), I[526] = (T)(img)(_p11##x,_n9##y,z,c), I[527] = (T)(img)(_p10##x,_n9##y,z,c), I[528] = (T)(img)(_p9##x,_n9##y,z,c), I[529] = (T)(img)(_p8##x,_n9##y,z,c), I[530] = (T)(img)(_p7##x,_n9##y,z,c), I[531] = (T)(img)(_p6##x,_n9##y,z,c), I[532] = (T)(img)(_p5##x,_n9##y,z,c), I[533] = (T)(img)(_p4##x,_n9##y,z,c), I[534] = (T)(img)(_p3##x,_n9##y,z,c), I[535] = (T)(img)(_p2##x,_n9##y,z,c), I[536] = (T)(img)(_p1##x,_n9##y,z,c), I[537] = (T)(img)(x,_n9##y,z,c), I[538] = (T)(img)(_n1##x,_n9##y,z,c), I[539] = (T)(img)(_n2##x,_n9##y,z,c), I[540] = (T)(img)(_n3##x,_n9##y,z,c), I[541] = (T)(img)(_n4##x,_n9##y,z,c), I[542] = (T)(img)(_n5##x,_n9##y,z,c), I[543] = (T)(img)(_n6##x,_n9##y,z,c), I[544] = (T)(img)(_n7##x,_n9##y,z,c), I[545] = (T)(img)(_n8##x,_n9##y,z,c), I[546] = (T)(img)(_n9##x,_n9##y,z,c), I[547] = (T)(img)(_n10##x,_n9##y,z,c), I[548] = (T)(img)(_n11##x,_n9##y,z,c), I[549] = (T)(img)(_n12##x,_n9##y,z,c), \ - I[550] = (T)(img)(_p12##x,_n10##y,z,c), I[551] = (T)(img)(_p11##x,_n10##y,z,c), I[552] = (T)(img)(_p10##x,_n10##y,z,c), I[553] = (T)(img)(_p9##x,_n10##y,z,c), I[554] = (T)(img)(_p8##x,_n10##y,z,c), I[555] = (T)(img)(_p7##x,_n10##y,z,c), I[556] = (T)(img)(_p6##x,_n10##y,z,c), I[557] = (T)(img)(_p5##x,_n10##y,z,c), I[558] = (T)(img)(_p4##x,_n10##y,z,c), I[559] = (T)(img)(_p3##x,_n10##y,z,c), I[560] = (T)(img)(_p2##x,_n10##y,z,c), I[561] = (T)(img)(_p1##x,_n10##y,z,c), I[562] = (T)(img)(x,_n10##y,z,c), I[563] = (T)(img)(_n1##x,_n10##y,z,c), I[564] = (T)(img)(_n2##x,_n10##y,z,c), I[565] = (T)(img)(_n3##x,_n10##y,z,c), I[566] = (T)(img)(_n4##x,_n10##y,z,c), I[567] = (T)(img)(_n5##x,_n10##y,z,c), I[568] = (T)(img)(_n6##x,_n10##y,z,c), I[569] = (T)(img)(_n7##x,_n10##y,z,c), I[570] = (T)(img)(_n8##x,_n10##y,z,c), I[571] = (T)(img)(_n9##x,_n10##y,z,c), I[572] = (T)(img)(_n10##x,_n10##y,z,c), I[573] = (T)(img)(_n11##x,_n10##y,z,c), I[574] = (T)(img)(_n12##x,_n10##y,z,c), \ - I[575] = (T)(img)(_p12##x,_n11##y,z,c), I[576] = (T)(img)(_p11##x,_n11##y,z,c), I[577] = (T)(img)(_p10##x,_n11##y,z,c), I[578] = (T)(img)(_p9##x,_n11##y,z,c), I[579] = (T)(img)(_p8##x,_n11##y,z,c), I[580] = (T)(img)(_p7##x,_n11##y,z,c), I[581] = (T)(img)(_p6##x,_n11##y,z,c), I[582] = (T)(img)(_p5##x,_n11##y,z,c), I[583] = (T)(img)(_p4##x,_n11##y,z,c), I[584] = (T)(img)(_p3##x,_n11##y,z,c), I[585] = (T)(img)(_p2##x,_n11##y,z,c), I[586] = (T)(img)(_p1##x,_n11##y,z,c), I[587] = (T)(img)(x,_n11##y,z,c), I[588] = (T)(img)(_n1##x,_n11##y,z,c), I[589] = (T)(img)(_n2##x,_n11##y,z,c), I[590] = (T)(img)(_n3##x,_n11##y,z,c), I[591] = (T)(img)(_n4##x,_n11##y,z,c), I[592] = (T)(img)(_n5##x,_n11##y,z,c), I[593] = (T)(img)(_n6##x,_n11##y,z,c), I[594] = (T)(img)(_n7##x,_n11##y,z,c), I[595] = (T)(img)(_n8##x,_n11##y,z,c), I[596] = (T)(img)(_n9##x,_n11##y,z,c), I[597] = (T)(img)(_n10##x,_n11##y,z,c), I[598] = (T)(img)(_n11##x,_n11##y,z,c), I[599] = (T)(img)(_n12##x,_n11##y,z,c), \ - I[600] = (T)(img)(_p12##x,_n12##y,z,c), I[601] = (T)(img)(_p11##x,_n12##y,z,c), I[602] = (T)(img)(_p10##x,_n12##y,z,c), I[603] = (T)(img)(_p9##x,_n12##y,z,c), I[604] = (T)(img)(_p8##x,_n12##y,z,c), I[605] = (T)(img)(_p7##x,_n12##y,z,c), I[606] = (T)(img)(_p6##x,_n12##y,z,c), I[607] = (T)(img)(_p5##x,_n12##y,z,c), I[608] = (T)(img)(_p4##x,_n12##y,z,c), I[609] = (T)(img)(_p3##x,_n12##y,z,c), I[610] = (T)(img)(_p2##x,_n12##y,z,c), I[611] = (T)(img)(_p1##x,_n12##y,z,c), I[612] = (T)(img)(x,_n12##y,z,c), I[613] = (T)(img)(_n1##x,_n12##y,z,c), I[614] = (T)(img)(_n2##x,_n12##y,z,c), I[615] = (T)(img)(_n3##x,_n12##y,z,c), I[616] = (T)(img)(_n4##x,_n12##y,z,c), I[617] = (T)(img)(_n5##x,_n12##y,z,c), I[618] = (T)(img)(_n6##x,_n12##y,z,c), I[619] = (T)(img)(_n7##x,_n12##y,z,c), I[620] = (T)(img)(_n8##x,_n12##y,z,c), I[621] = (T)(img)(_n9##x,_n12##y,z,c), I[622] = (T)(img)(_n10##x,_n12##y,z,c), I[623] = (T)(img)(_n11##x,_n12##y,z,c), I[624] = (T)(img)(_n12##x,_n12##y,z,c); - -// Define 26x26 loop macros -//------------------------- -#define cimg_for26(bound,i) for (int i = 0, \ - _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13; \ - _n13##i<(int)(bound) || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i) - -#define cimg_for26X(img,x) cimg_for26((img)._width,x) -#define cimg_for26Y(img,y) cimg_for26((img)._height,y) -#define cimg_for26Z(img,z) cimg_for26((img)._depth,z) -#define cimg_for26C(img,c) cimg_for26((img)._spectrum,c) -#define cimg_for26XY(img,x,y) cimg_for26Y(img,y) cimg_for26X(img,x) -#define cimg_for26XZ(img,x,z) cimg_for26Z(img,z) cimg_for26X(img,x) -#define cimg_for26XC(img,x,c) cimg_for26C(img,c) cimg_for26X(img,x) -#define cimg_for26YZ(img,y,z) cimg_for26Z(img,z) cimg_for26Y(img,y) -#define cimg_for26YC(img,y,c) cimg_for26C(img,c) cimg_for26Y(img,y) -#define cimg_for26ZC(img,z,c) cimg_for26C(img,c) cimg_for26Z(img,z) -#define cimg_for26XYZ(img,x,y,z) cimg_for26Z(img,z) cimg_for26XY(img,x,y) -#define cimg_for26XZC(img,x,z,c) cimg_for26C(img,c) cimg_for26XZ(img,x,z) -#define cimg_for26YZC(img,y,z,c) cimg_for26C(img,c) cimg_for26YZ(img,y,z) -#define cimg_for26XYZC(img,x,y,z,c) cimg_for26C(img,c) cimg_for26XYZ(img,x,y,z) - -#define cimg_for_in26(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13; \ - i<=(int)(i1) && (_n13##i<(int)(bound) || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i) - -#define cimg_for_in26X(img,x0,x1,x) cimg_for_in26((img)._width,x0,x1,x) -#define cimg_for_in26Y(img,y0,y1,y) cimg_for_in26((img)._height,y0,y1,y) -#define cimg_for_in26Z(img,z0,z1,z) cimg_for_in26((img)._depth,z0,z1,z) -#define cimg_for_in26C(img,c0,c1,c) cimg_for_in26((img)._spectrum,c0,c1,c) -#define cimg_for_in26XY(img,x0,y0,x1,y1,x,y) cimg_for_in26Y(img,y0,y1,y) cimg_for_in26X(img,x0,x1,x) -#define cimg_for_in26XZ(img,x0,z0,x1,z1,x,z) cimg_for_in26Z(img,z0,z1,z) cimg_for_in26X(img,x0,x1,x) -#define cimg_for_in26XC(img,x0,c0,x1,c1,x,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26X(img,x0,x1,x) -#define cimg_for_in26YZ(img,y0,z0,y1,z1,y,z) cimg_for_in26Z(img,z0,z1,z) cimg_for_in26Y(img,y0,y1,y) -#define cimg_for_in26YC(img,y0,c0,y1,c1,y,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26Y(img,y0,y1,y) -#define cimg_for_in26ZC(img,z0,c0,z1,c1,z,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26Z(img,z0,z1,z) -#define cimg_for_in26XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in26Z(img,z0,z1,z) cimg_for_in26XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in26XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in26YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in26XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in26C(img,c0,c1,c) cimg_for_in26XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for26x26(img,x,y,z,c,I,T) \ - cimg_for26((img)._height,y) for (int x = 0, \ - _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = (T)(img)(0,_p12##y,z,c)), \ - (I[26] = I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_p11##y,z,c)), \ - (I[52] = I[53] = I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = I[63] = I[64] = (T)(img)(0,_p10##y,z,c)), \ - (I[78] = I[79] = I[80] = I[81] = I[82] = I[83] = I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = (T)(img)(0,_p9##y,z,c)), \ - (I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = I[116] = (T)(img)(0,_p8##y,z,c)), \ - (I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = (T)(img)(0,_p7##y,z,c)), \ - (I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = (T)(img)(0,_p6##y,z,c)), \ - (I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = (T)(img)(0,_p5##y,z,c)), \ - (I[208] = I[209] = I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = I[218] = I[219] = I[220] = (T)(img)(0,_p4##y,z,c)), \ - (I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = (T)(img)(0,_p3##y,z,c)), \ - (I[260] = I[261] = I[262] = I[263] = I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = I[272] = (T)(img)(0,_p2##y,z,c)), \ - (I[286] = I[287] = I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = I[297] = I[298] = (T)(img)(0,_p1##y,z,c)), \ - (I[312] = I[313] = I[314] = I[315] = I[316] = I[317] = I[318] = I[319] = I[320] = I[321] = I[322] = I[323] = I[324] = (T)(img)(0,y,z,c)), \ - (I[338] = I[339] = I[340] = I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = I[348] = I[349] = I[350] = (T)(img)(0,_n1##y,z,c)), \ - (I[364] = I[365] = I[366] = I[367] = I[368] = I[369] = I[370] = I[371] = I[372] = I[373] = I[374] = I[375] = I[376] = (T)(img)(0,_n2##y,z,c)), \ - (I[390] = I[391] = I[392] = I[393] = I[394] = I[395] = I[396] = I[397] = I[398] = I[399] = I[400] = I[401] = I[402] = (T)(img)(0,_n3##y,z,c)), \ - (I[416] = I[417] = I[418] = I[419] = I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = (T)(img)(0,_n4##y,z,c)), \ - (I[442] = I[443] = I[444] = I[445] = I[446] = I[447] = I[448] = I[449] = I[450] = I[451] = I[452] = I[453] = I[454] = (T)(img)(0,_n5##y,z,c)), \ - (I[468] = I[469] = I[470] = I[471] = I[472] = I[473] = I[474] = I[475] = I[476] = I[477] = I[478] = I[479] = I[480] = (T)(img)(0,_n6##y,z,c)), \ - (I[494] = I[495] = I[496] = I[497] = I[498] = I[499] = I[500] = I[501] = I[502] = I[503] = I[504] = I[505] = I[506] = (T)(img)(0,_n7##y,z,c)), \ - (I[520] = I[521] = I[522] = I[523] = I[524] = I[525] = I[526] = I[527] = I[528] = I[529] = I[530] = I[531] = I[532] = (T)(img)(0,_n8##y,z,c)), \ - (I[546] = I[547] = I[548] = I[549] = I[550] = I[551] = I[552] = I[553] = I[554] = I[555] = I[556] = I[557] = I[558] = (T)(img)(0,_n9##y,z,c)), \ - (I[572] = I[573] = I[574] = I[575] = I[576] = I[577] = I[578] = I[579] = I[580] = I[581] = I[582] = I[583] = I[584] = (T)(img)(0,_n10##y,z,c)), \ - (I[598] = I[599] = I[600] = I[601] = I[602] = I[603] = I[604] = I[605] = I[606] = I[607] = I[608] = I[609] = I[610] = (T)(img)(0,_n11##y,z,c)), \ - (I[624] = I[625] = I[626] = I[627] = I[628] = I[629] = I[630] = I[631] = I[632] = I[633] = I[634] = I[635] = I[636] = (T)(img)(0,_n12##y,z,c)), \ - (I[650] = I[651] = I[652] = I[653] = I[654] = I[655] = I[656] = I[657] = I[658] = I[659] = I[660] = I[661] = I[662] = (T)(img)(0,_n13##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[65] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[91] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[117] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[169] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[195] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[221] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[273] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[299] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[325] = (T)(img)(_n1##x,y,z,c)), \ - (I[351] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[377] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[403] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[429] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[455] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[481] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[507] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[533] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[559] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[585] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[611] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[637] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[663] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[66] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[92] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[118] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[170] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[196] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[222] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[274] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[300] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[326] = (T)(img)(_n2##x,y,z,c)), \ - (I[352] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[378] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[404] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[430] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[456] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[482] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[508] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[534] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[560] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[586] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[612] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[638] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[664] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[15] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[67] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[93] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[119] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[171] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[197] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[223] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[275] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[301] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[327] = (T)(img)(_n3##x,y,z,c)), \ - (I[353] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[379] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[405] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[431] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[457] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[483] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[509] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[535] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[561] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[587] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[613] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[639] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[665] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[16] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[42] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[68] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[94] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[120] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[172] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[198] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[224] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[276] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[302] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[328] = (T)(img)(_n4##x,y,z,c)), \ - (I[354] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[380] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[406] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[432] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[458] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[484] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[510] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[536] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[562] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[588] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[614] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[640] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[666] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[17] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[43] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[69] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[95] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[121] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[173] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[199] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[225] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[277] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[303] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[329] = (T)(img)(_n5##x,y,z,c)), \ - (I[355] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[381] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[407] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[433] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[459] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[485] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[511] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[537] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[563] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[589] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[615] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[641] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[667] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[18] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[44] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[70] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[96] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[122] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[174] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[200] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[226] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[278] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[304] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[330] = (T)(img)(_n6##x,y,z,c)), \ - (I[356] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[382] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[408] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[434] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[460] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[486] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[512] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[538] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[564] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[590] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[616] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[642] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[668] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[19] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[45] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[71] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[97] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[123] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[175] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[201] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[227] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[279] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[305] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[331] = (T)(img)(_n7##x,y,z,c)), \ - (I[357] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[383] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[409] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[435] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[461] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[487] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[513] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[539] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[565] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[591] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[617] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[643] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[669] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[20] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[46] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[72] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[98] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[124] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[176] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[202] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[228] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[280] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[306] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[332] = (T)(img)(_n8##x,y,z,c)), \ - (I[358] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[384] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[410] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[436] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[462] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[488] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[514] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[540] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[566] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[592] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[618] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[644] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[670] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[21] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[47] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[73] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[99] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[125] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[177] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[203] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[229] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[255] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[281] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[307] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[333] = (T)(img)(_n9##x,y,z,c)), \ - (I[359] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[385] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[411] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[437] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[463] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[489] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[515] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[541] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[567] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[593] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[619] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[645] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[671] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[22] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[48] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[74] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[100] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[126] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[152] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[178] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[204] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[230] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[256] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[282] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[308] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[334] = (T)(img)(_n10##x,y,z,c)), \ - (I[360] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[386] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[412] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[438] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[464] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[490] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[516] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[542] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[568] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[594] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[620] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[646] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[672] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[23] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[49] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[75] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[101] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[127] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[153] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[179] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[205] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[231] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[257] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[283] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[309] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[335] = (T)(img)(_n11##x,y,z,c)), \ - (I[361] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[387] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[413] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[439] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[465] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[491] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[517] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[543] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[569] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[595] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[621] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[647] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[673] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[24] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[50] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[76] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[102] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[128] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[154] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[180] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[206] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[232] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[258] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[284] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[310] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[336] = (T)(img)(_n12##x,y,z,c)), \ - (I[362] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[388] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[414] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[440] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[466] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[492] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[518] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[544] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[570] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[596] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[622] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[648] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[674] = (T)(img)(_n12##x,_n13##y,z,c)), \ - 13>=((img)._width)?(img).width()-1:13); \ - (_n13##x<(img).width() && ( \ - (I[25] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[51] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[77] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[103] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[129] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[155] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[181] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[207] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[233] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[259] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[285] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[311] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[337] = (T)(img)(_n13##x,y,z,c)), \ - (I[363] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[389] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[415] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[441] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[467] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[493] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[519] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[545] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[571] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[597] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[623] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[649] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[675] = (T)(img)(_n13##x,_n13##y,z,c)),1)) || \ - _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], \ - I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], \ - I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], \ - I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], \ - I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], \ - I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], \ - I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], \ - I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], \ - I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], \ - I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], \ - I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], \ - I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], \ - I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], \ - I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], \ - I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], \ - I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], \ - I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], \ - I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], \ - _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x) - -#define cimg_for_in26x26(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in26((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = (int)( \ - (I[0] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[26] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[52] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[78] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[104] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[130] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[156] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[182] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[208] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[234] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[260] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[286] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[312] = (T)(img)(_p12##x,y,z,c)), \ - (I[338] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[364] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[390] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[416] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[442] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[468] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[494] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[520] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[546] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[572] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[598] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[624] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[650] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[1] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[27] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[53] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[79] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[105] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[131] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[157] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[183] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[209] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[235] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[261] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[287] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[313] = (T)(img)(_p11##x,y,z,c)), \ - (I[339] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[365] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[391] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[417] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[443] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[469] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[495] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[521] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[547] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[573] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[599] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[625] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[651] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[2] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[28] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[54] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[80] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[106] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[132] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[158] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[184] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[210] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[236] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[262] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[288] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[314] = (T)(img)(_p10##x,y,z,c)), \ - (I[340] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[366] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[392] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[418] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[444] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[470] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[496] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[522] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[548] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[574] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[600] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[626] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[652] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[3] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[29] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[55] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[81] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[107] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[133] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[159] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[185] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[211] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[237] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[263] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[289] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[315] = (T)(img)(_p9##x,y,z,c)), \ - (I[341] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[367] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[393] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[419] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[445] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[471] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[497] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[523] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[549] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[575] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[601] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[627] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[653] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[4] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[30] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[56] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[82] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[108] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[134] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[160] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[186] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[212] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[238] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[264] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[290] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[316] = (T)(img)(_p8##x,y,z,c)), \ - (I[342] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[368] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[394] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[420] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[446] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[472] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[498] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[524] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[550] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[576] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[602] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[628] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[654] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[5] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[31] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[57] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[83] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[109] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[135] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[161] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[187] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[213] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[239] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[265] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[291] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[317] = (T)(img)(_p7##x,y,z,c)), \ - (I[343] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[369] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[395] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[421] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[447] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[473] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[499] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[525] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[551] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[577] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[603] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[629] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[655] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[6] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[32] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[58] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[84] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[110] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[136] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[162] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[188] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[214] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[240] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[266] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[292] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[318] = (T)(img)(_p6##x,y,z,c)), \ - (I[344] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[370] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[396] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[422] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[448] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[474] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[500] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[526] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[552] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[578] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[604] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[630] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[656] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[7] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[33] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[59] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[85] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[111] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[137] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[163] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[189] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[215] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[241] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[267] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[293] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[319] = (T)(img)(_p5##x,y,z,c)), \ - (I[345] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[371] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[397] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[423] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[449] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[475] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[501] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[527] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[553] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[579] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[605] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[631] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[657] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[8] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[34] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[60] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[86] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[112] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[138] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[164] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[190] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[216] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[242] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[268] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[294] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[320] = (T)(img)(_p4##x,y,z,c)), \ - (I[346] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[372] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[398] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[424] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[450] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[476] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[502] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[528] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[554] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[580] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[606] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[632] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[658] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[9] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[35] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[61] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[87] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[113] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[139] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[165] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[191] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[217] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[243] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[269] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[295] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[321] = (T)(img)(_p3##x,y,z,c)), \ - (I[347] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[373] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[399] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[425] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[451] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[477] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[503] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[529] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[555] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[581] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[607] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[633] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[659] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[10] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[36] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[62] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[88] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[114] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[140] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[166] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[192] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[218] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[244] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[270] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[296] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[322] = (T)(img)(_p2##x,y,z,c)), \ - (I[348] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[374] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[400] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[426] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[452] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[478] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[504] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[530] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[556] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[582] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[608] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[634] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[660] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[11] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[37] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[63] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[89] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[115] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[141] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[167] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[193] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[219] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[245] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[271] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[297] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[323] = (T)(img)(_p1##x,y,z,c)), \ - (I[349] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[375] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[401] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[427] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[453] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[479] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[505] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[531] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[557] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[583] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[609] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[635] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[661] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[12] = (T)(img)(x,_p12##y,z,c)), \ - (I[38] = (T)(img)(x,_p11##y,z,c)), \ - (I[64] = (T)(img)(x,_p10##y,z,c)), \ - (I[90] = (T)(img)(x,_p9##y,z,c)), \ - (I[116] = (T)(img)(x,_p8##y,z,c)), \ - (I[142] = (T)(img)(x,_p7##y,z,c)), \ - (I[168] = (T)(img)(x,_p6##y,z,c)), \ - (I[194] = (T)(img)(x,_p5##y,z,c)), \ - (I[220] = (T)(img)(x,_p4##y,z,c)), \ - (I[246] = (T)(img)(x,_p3##y,z,c)), \ - (I[272] = (T)(img)(x,_p2##y,z,c)), \ - (I[298] = (T)(img)(x,_p1##y,z,c)), \ - (I[324] = (T)(img)(x,y,z,c)), \ - (I[350] = (T)(img)(x,_n1##y,z,c)), \ - (I[376] = (T)(img)(x,_n2##y,z,c)), \ - (I[402] = (T)(img)(x,_n3##y,z,c)), \ - (I[428] = (T)(img)(x,_n4##y,z,c)), \ - (I[454] = (T)(img)(x,_n5##y,z,c)), \ - (I[480] = (T)(img)(x,_n6##y,z,c)), \ - (I[506] = (T)(img)(x,_n7##y,z,c)), \ - (I[532] = (T)(img)(x,_n8##y,z,c)), \ - (I[558] = (T)(img)(x,_n9##y,z,c)), \ - (I[584] = (T)(img)(x,_n10##y,z,c)), \ - (I[610] = (T)(img)(x,_n11##y,z,c)), \ - (I[636] = (T)(img)(x,_n12##y,z,c)), \ - (I[662] = (T)(img)(x,_n13##y,z,c)), \ - (I[13] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[39] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[65] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[91] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[117] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[143] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[169] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[195] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[221] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[273] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[299] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[325] = (T)(img)(_n1##x,y,z,c)), \ - (I[351] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[377] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[403] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[429] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[455] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[481] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[507] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[533] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[559] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[585] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[611] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[637] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[663] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[14] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[40] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[66] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[92] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[118] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[144] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[170] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[196] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[222] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[274] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[300] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[326] = (T)(img)(_n2##x,y,z,c)), \ - (I[352] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[378] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[404] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[430] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[456] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[482] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[508] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[534] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[560] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[586] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[612] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[638] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[664] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[15] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[41] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[67] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[93] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[119] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[145] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[171] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[197] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[223] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[275] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[301] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[327] = (T)(img)(_n3##x,y,z,c)), \ - (I[353] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[379] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[405] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[431] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[457] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[483] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[509] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[535] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[561] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[587] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[613] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[639] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[665] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[16] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[42] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[68] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[94] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[120] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[146] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[172] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[198] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[224] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[276] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[302] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[328] = (T)(img)(_n4##x,y,z,c)), \ - (I[354] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[380] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[406] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[432] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[458] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[484] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[510] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[536] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[562] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[588] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[614] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[640] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[666] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[17] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[43] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[69] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[95] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[121] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[147] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[173] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[199] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[225] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[277] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[303] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[329] = (T)(img)(_n5##x,y,z,c)), \ - (I[355] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[381] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[407] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[433] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[459] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[485] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[511] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[537] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[563] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[589] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[615] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[641] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[667] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[18] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[44] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[70] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[96] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[122] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[148] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[174] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[200] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[226] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[278] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[304] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[330] = (T)(img)(_n6##x,y,z,c)), \ - (I[356] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[382] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[408] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[434] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[460] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[486] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[512] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[538] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[564] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[590] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[616] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[642] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[668] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[19] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[45] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[71] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[97] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[123] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[149] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[175] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[201] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[227] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[279] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[305] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[331] = (T)(img)(_n7##x,y,z,c)), \ - (I[357] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[383] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[409] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[435] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[461] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[487] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[513] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[539] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[565] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[591] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[617] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[643] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[669] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[20] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[46] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[72] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[98] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[124] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[150] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[176] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[202] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[228] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[280] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[306] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[332] = (T)(img)(_n8##x,y,z,c)), \ - (I[358] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[384] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[410] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[436] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[462] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[488] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[514] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[540] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[566] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[592] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[618] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[644] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[670] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[21] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[47] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[73] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[99] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[125] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[151] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[177] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[203] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[229] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[255] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[281] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[307] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[333] = (T)(img)(_n9##x,y,z,c)), \ - (I[359] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[385] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[411] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[437] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[463] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[489] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[515] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[541] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[567] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[593] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[619] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[645] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[671] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[22] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[48] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[74] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[100] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[126] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[152] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[178] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[204] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[230] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[256] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[282] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[308] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[334] = (T)(img)(_n10##x,y,z,c)), \ - (I[360] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[386] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[412] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[438] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[464] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[490] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[516] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[542] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[568] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[594] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[620] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[646] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[672] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[23] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[49] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[75] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[101] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[127] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[153] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[179] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[205] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[231] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[257] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[283] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[309] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[335] = (T)(img)(_n11##x,y,z,c)), \ - (I[361] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[387] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[413] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[439] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[465] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[491] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[517] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[543] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[569] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[595] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[621] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[647] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[673] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[24] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[50] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[76] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[102] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[128] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[154] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[180] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[206] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[232] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[258] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[284] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[310] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[336] = (T)(img)(_n12##x,y,z,c)), \ - (I[362] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[388] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[414] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[440] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[466] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[492] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[518] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[544] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[570] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[596] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[622] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[648] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[674] = (T)(img)(_n12##x,_n13##y,z,c)), \ - x+13>=(img).width()?(img).width()-1:x+13); \ - x<=(int)(x1) && ((_n13##x<(img).width() && ( \ - (I[25] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[51] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[77] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[103] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[129] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[155] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[181] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[207] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[233] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[259] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[285] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[311] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[337] = (T)(img)(_n13##x,y,z,c)), \ - (I[363] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[389] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[415] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[441] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[467] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[493] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[519] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[545] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[571] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[597] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[623] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[649] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[675] = (T)(img)(_n13##x,_n13##y,z,c)),1)) || \ - _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], \ - I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], \ - I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], \ - I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], \ - I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], \ - I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], \ - I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], \ - I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], \ - I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], \ - I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], \ - I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], \ - I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], \ - I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], \ - I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], \ - I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], \ - I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], \ - I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], \ - I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], \ - _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x) - -#define cimg_get26x26(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p12##x,_p12##y,z,c), I[1] = (T)(img)(_p11##x,_p12##y,z,c), I[2] = (T)(img)(_p10##x,_p12##y,z,c), I[3] = (T)(img)(_p9##x,_p12##y,z,c), I[4] = (T)(img)(_p8##x,_p12##y,z,c), I[5] = (T)(img)(_p7##x,_p12##y,z,c), I[6] = (T)(img)(_p6##x,_p12##y,z,c), I[7] = (T)(img)(_p5##x,_p12##y,z,c), I[8] = (T)(img)(_p4##x,_p12##y,z,c), I[9] = (T)(img)(_p3##x,_p12##y,z,c), I[10] = (T)(img)(_p2##x,_p12##y,z,c), I[11] = (T)(img)(_p1##x,_p12##y,z,c), I[12] = (T)(img)(x,_p12##y,z,c), I[13] = (T)(img)(_n1##x,_p12##y,z,c), I[14] = (T)(img)(_n2##x,_p12##y,z,c), I[15] = (T)(img)(_n3##x,_p12##y,z,c), I[16] = (T)(img)(_n4##x,_p12##y,z,c), I[17] = (T)(img)(_n5##x,_p12##y,z,c), I[18] = (T)(img)(_n6##x,_p12##y,z,c), I[19] = (T)(img)(_n7##x,_p12##y,z,c), I[20] = (T)(img)(_n8##x,_p12##y,z,c), I[21] = (T)(img)(_n9##x,_p12##y,z,c), I[22] = (T)(img)(_n10##x,_p12##y,z,c), I[23] = (T)(img)(_n11##x,_p12##y,z,c), I[24] = (T)(img)(_n12##x,_p12##y,z,c), I[25] = (T)(img)(_n13##x,_p12##y,z,c), \ - I[26] = (T)(img)(_p12##x,_p11##y,z,c), I[27] = (T)(img)(_p11##x,_p11##y,z,c), I[28] = (T)(img)(_p10##x,_p11##y,z,c), I[29] = (T)(img)(_p9##x,_p11##y,z,c), I[30] = (T)(img)(_p8##x,_p11##y,z,c), I[31] = (T)(img)(_p7##x,_p11##y,z,c), I[32] = (T)(img)(_p6##x,_p11##y,z,c), I[33] = (T)(img)(_p5##x,_p11##y,z,c), I[34] = (T)(img)(_p4##x,_p11##y,z,c), I[35] = (T)(img)(_p3##x,_p11##y,z,c), I[36] = (T)(img)(_p2##x,_p11##y,z,c), I[37] = (T)(img)(_p1##x,_p11##y,z,c), I[38] = (T)(img)(x,_p11##y,z,c), I[39] = (T)(img)(_n1##x,_p11##y,z,c), I[40] = (T)(img)(_n2##x,_p11##y,z,c), I[41] = (T)(img)(_n3##x,_p11##y,z,c), I[42] = (T)(img)(_n4##x,_p11##y,z,c), I[43] = (T)(img)(_n5##x,_p11##y,z,c), I[44] = (T)(img)(_n6##x,_p11##y,z,c), I[45] = (T)(img)(_n7##x,_p11##y,z,c), I[46] = (T)(img)(_n8##x,_p11##y,z,c), I[47] = (T)(img)(_n9##x,_p11##y,z,c), I[48] = (T)(img)(_n10##x,_p11##y,z,c), I[49] = (T)(img)(_n11##x,_p11##y,z,c), I[50] = (T)(img)(_n12##x,_p11##y,z,c), I[51] = (T)(img)(_n13##x,_p11##y,z,c), \ - I[52] = (T)(img)(_p12##x,_p10##y,z,c), I[53] = (T)(img)(_p11##x,_p10##y,z,c), I[54] = (T)(img)(_p10##x,_p10##y,z,c), I[55] = (T)(img)(_p9##x,_p10##y,z,c), I[56] = (T)(img)(_p8##x,_p10##y,z,c), I[57] = (T)(img)(_p7##x,_p10##y,z,c), I[58] = (T)(img)(_p6##x,_p10##y,z,c), I[59] = (T)(img)(_p5##x,_p10##y,z,c), I[60] = (T)(img)(_p4##x,_p10##y,z,c), I[61] = (T)(img)(_p3##x,_p10##y,z,c), I[62] = (T)(img)(_p2##x,_p10##y,z,c), I[63] = (T)(img)(_p1##x,_p10##y,z,c), I[64] = (T)(img)(x,_p10##y,z,c), I[65] = (T)(img)(_n1##x,_p10##y,z,c), I[66] = (T)(img)(_n2##x,_p10##y,z,c), I[67] = (T)(img)(_n3##x,_p10##y,z,c), I[68] = (T)(img)(_n4##x,_p10##y,z,c), I[69] = (T)(img)(_n5##x,_p10##y,z,c), I[70] = (T)(img)(_n6##x,_p10##y,z,c), I[71] = (T)(img)(_n7##x,_p10##y,z,c), I[72] = (T)(img)(_n8##x,_p10##y,z,c), I[73] = (T)(img)(_n9##x,_p10##y,z,c), I[74] = (T)(img)(_n10##x,_p10##y,z,c), I[75] = (T)(img)(_n11##x,_p10##y,z,c), I[76] = (T)(img)(_n12##x,_p10##y,z,c), I[77] = (T)(img)(_n13##x,_p10##y,z,c), \ - I[78] = (T)(img)(_p12##x,_p9##y,z,c), I[79] = (T)(img)(_p11##x,_p9##y,z,c), I[80] = (T)(img)(_p10##x,_p9##y,z,c), I[81] = (T)(img)(_p9##x,_p9##y,z,c), I[82] = (T)(img)(_p8##x,_p9##y,z,c), I[83] = (T)(img)(_p7##x,_p9##y,z,c), I[84] = (T)(img)(_p6##x,_p9##y,z,c), I[85] = (T)(img)(_p5##x,_p9##y,z,c), I[86] = (T)(img)(_p4##x,_p9##y,z,c), I[87] = (T)(img)(_p3##x,_p9##y,z,c), I[88] = (T)(img)(_p2##x,_p9##y,z,c), I[89] = (T)(img)(_p1##x,_p9##y,z,c), I[90] = (T)(img)(x,_p9##y,z,c), I[91] = (T)(img)(_n1##x,_p9##y,z,c), I[92] = (T)(img)(_n2##x,_p9##y,z,c), I[93] = (T)(img)(_n3##x,_p9##y,z,c), I[94] = (T)(img)(_n4##x,_p9##y,z,c), I[95] = (T)(img)(_n5##x,_p9##y,z,c), I[96] = (T)(img)(_n6##x,_p9##y,z,c), I[97] = (T)(img)(_n7##x,_p9##y,z,c), I[98] = (T)(img)(_n8##x,_p9##y,z,c), I[99] = (T)(img)(_n9##x,_p9##y,z,c), I[100] = (T)(img)(_n10##x,_p9##y,z,c), I[101] = (T)(img)(_n11##x,_p9##y,z,c), I[102] = (T)(img)(_n12##x,_p9##y,z,c), I[103] = (T)(img)(_n13##x,_p9##y,z,c), \ - I[104] = (T)(img)(_p12##x,_p8##y,z,c), I[105] = (T)(img)(_p11##x,_p8##y,z,c), I[106] = (T)(img)(_p10##x,_p8##y,z,c), I[107] = (T)(img)(_p9##x,_p8##y,z,c), I[108] = (T)(img)(_p8##x,_p8##y,z,c), I[109] = (T)(img)(_p7##x,_p8##y,z,c), I[110] = (T)(img)(_p6##x,_p8##y,z,c), I[111] = (T)(img)(_p5##x,_p8##y,z,c), I[112] = (T)(img)(_p4##x,_p8##y,z,c), I[113] = (T)(img)(_p3##x,_p8##y,z,c), I[114] = (T)(img)(_p2##x,_p8##y,z,c), I[115] = (T)(img)(_p1##x,_p8##y,z,c), I[116] = (T)(img)(x,_p8##y,z,c), I[117] = (T)(img)(_n1##x,_p8##y,z,c), I[118] = (T)(img)(_n2##x,_p8##y,z,c), I[119] = (T)(img)(_n3##x,_p8##y,z,c), I[120] = (T)(img)(_n4##x,_p8##y,z,c), I[121] = (T)(img)(_n5##x,_p8##y,z,c), I[122] = (T)(img)(_n6##x,_p8##y,z,c), I[123] = (T)(img)(_n7##x,_p8##y,z,c), I[124] = (T)(img)(_n8##x,_p8##y,z,c), I[125] = (T)(img)(_n9##x,_p8##y,z,c), I[126] = (T)(img)(_n10##x,_p8##y,z,c), I[127] = (T)(img)(_n11##x,_p8##y,z,c), I[128] = (T)(img)(_n12##x,_p8##y,z,c), I[129] = (T)(img)(_n13##x,_p8##y,z,c), \ - I[130] = (T)(img)(_p12##x,_p7##y,z,c), I[131] = (T)(img)(_p11##x,_p7##y,z,c), I[132] = (T)(img)(_p10##x,_p7##y,z,c), I[133] = (T)(img)(_p9##x,_p7##y,z,c), I[134] = (T)(img)(_p8##x,_p7##y,z,c), I[135] = (T)(img)(_p7##x,_p7##y,z,c), I[136] = (T)(img)(_p6##x,_p7##y,z,c), I[137] = (T)(img)(_p5##x,_p7##y,z,c), I[138] = (T)(img)(_p4##x,_p7##y,z,c), I[139] = (T)(img)(_p3##x,_p7##y,z,c), I[140] = (T)(img)(_p2##x,_p7##y,z,c), I[141] = (T)(img)(_p1##x,_p7##y,z,c), I[142] = (T)(img)(x,_p7##y,z,c), I[143] = (T)(img)(_n1##x,_p7##y,z,c), I[144] = (T)(img)(_n2##x,_p7##y,z,c), I[145] = (T)(img)(_n3##x,_p7##y,z,c), I[146] = (T)(img)(_n4##x,_p7##y,z,c), I[147] = (T)(img)(_n5##x,_p7##y,z,c), I[148] = (T)(img)(_n6##x,_p7##y,z,c), I[149] = (T)(img)(_n7##x,_p7##y,z,c), I[150] = (T)(img)(_n8##x,_p7##y,z,c), I[151] = (T)(img)(_n9##x,_p7##y,z,c), I[152] = (T)(img)(_n10##x,_p7##y,z,c), I[153] = (T)(img)(_n11##x,_p7##y,z,c), I[154] = (T)(img)(_n12##x,_p7##y,z,c), I[155] = (T)(img)(_n13##x,_p7##y,z,c), \ - I[156] = (T)(img)(_p12##x,_p6##y,z,c), I[157] = (T)(img)(_p11##x,_p6##y,z,c), I[158] = (T)(img)(_p10##x,_p6##y,z,c), I[159] = (T)(img)(_p9##x,_p6##y,z,c), I[160] = (T)(img)(_p8##x,_p6##y,z,c), I[161] = (T)(img)(_p7##x,_p6##y,z,c), I[162] = (T)(img)(_p6##x,_p6##y,z,c), I[163] = (T)(img)(_p5##x,_p6##y,z,c), I[164] = (T)(img)(_p4##x,_p6##y,z,c), I[165] = (T)(img)(_p3##x,_p6##y,z,c), I[166] = (T)(img)(_p2##x,_p6##y,z,c), I[167] = (T)(img)(_p1##x,_p6##y,z,c), I[168] = (T)(img)(x,_p6##y,z,c), I[169] = (T)(img)(_n1##x,_p6##y,z,c), I[170] = (T)(img)(_n2##x,_p6##y,z,c), I[171] = (T)(img)(_n3##x,_p6##y,z,c), I[172] = (T)(img)(_n4##x,_p6##y,z,c), I[173] = (T)(img)(_n5##x,_p6##y,z,c), I[174] = (T)(img)(_n6##x,_p6##y,z,c), I[175] = (T)(img)(_n7##x,_p6##y,z,c), I[176] = (T)(img)(_n8##x,_p6##y,z,c), I[177] = (T)(img)(_n9##x,_p6##y,z,c), I[178] = (T)(img)(_n10##x,_p6##y,z,c), I[179] = (T)(img)(_n11##x,_p6##y,z,c), I[180] = (T)(img)(_n12##x,_p6##y,z,c), I[181] = (T)(img)(_n13##x,_p6##y,z,c), \ - I[182] = (T)(img)(_p12##x,_p5##y,z,c), I[183] = (T)(img)(_p11##x,_p5##y,z,c), I[184] = (T)(img)(_p10##x,_p5##y,z,c), I[185] = (T)(img)(_p9##x,_p5##y,z,c), I[186] = (T)(img)(_p8##x,_p5##y,z,c), I[187] = (T)(img)(_p7##x,_p5##y,z,c), I[188] = (T)(img)(_p6##x,_p5##y,z,c), I[189] = (T)(img)(_p5##x,_p5##y,z,c), I[190] = (T)(img)(_p4##x,_p5##y,z,c), I[191] = (T)(img)(_p3##x,_p5##y,z,c), I[192] = (T)(img)(_p2##x,_p5##y,z,c), I[193] = (T)(img)(_p1##x,_p5##y,z,c), I[194] = (T)(img)(x,_p5##y,z,c), I[195] = (T)(img)(_n1##x,_p5##y,z,c), I[196] = (T)(img)(_n2##x,_p5##y,z,c), I[197] = (T)(img)(_n3##x,_p5##y,z,c), I[198] = (T)(img)(_n4##x,_p5##y,z,c), I[199] = (T)(img)(_n5##x,_p5##y,z,c), I[200] = (T)(img)(_n6##x,_p5##y,z,c), I[201] = (T)(img)(_n7##x,_p5##y,z,c), I[202] = (T)(img)(_n8##x,_p5##y,z,c), I[203] = (T)(img)(_n9##x,_p5##y,z,c), I[204] = (T)(img)(_n10##x,_p5##y,z,c), I[205] = (T)(img)(_n11##x,_p5##y,z,c), I[206] = (T)(img)(_n12##x,_p5##y,z,c), I[207] = (T)(img)(_n13##x,_p5##y,z,c), \ - I[208] = (T)(img)(_p12##x,_p4##y,z,c), I[209] = (T)(img)(_p11##x,_p4##y,z,c), I[210] = (T)(img)(_p10##x,_p4##y,z,c), I[211] = (T)(img)(_p9##x,_p4##y,z,c), I[212] = (T)(img)(_p8##x,_p4##y,z,c), I[213] = (T)(img)(_p7##x,_p4##y,z,c), I[214] = (T)(img)(_p6##x,_p4##y,z,c), I[215] = (T)(img)(_p5##x,_p4##y,z,c), I[216] = (T)(img)(_p4##x,_p4##y,z,c), I[217] = (T)(img)(_p3##x,_p4##y,z,c), I[218] = (T)(img)(_p2##x,_p4##y,z,c), I[219] = (T)(img)(_p1##x,_p4##y,z,c), I[220] = (T)(img)(x,_p4##y,z,c), I[221] = (T)(img)(_n1##x,_p4##y,z,c), I[222] = (T)(img)(_n2##x,_p4##y,z,c), I[223] = (T)(img)(_n3##x,_p4##y,z,c), I[224] = (T)(img)(_n4##x,_p4##y,z,c), I[225] = (T)(img)(_n5##x,_p4##y,z,c), I[226] = (T)(img)(_n6##x,_p4##y,z,c), I[227] = (T)(img)(_n7##x,_p4##y,z,c), I[228] = (T)(img)(_n8##x,_p4##y,z,c), I[229] = (T)(img)(_n9##x,_p4##y,z,c), I[230] = (T)(img)(_n10##x,_p4##y,z,c), I[231] = (T)(img)(_n11##x,_p4##y,z,c), I[232] = (T)(img)(_n12##x,_p4##y,z,c), I[233] = (T)(img)(_n13##x,_p4##y,z,c), \ - I[234] = (T)(img)(_p12##x,_p3##y,z,c), I[235] = (T)(img)(_p11##x,_p3##y,z,c), I[236] = (T)(img)(_p10##x,_p3##y,z,c), I[237] = (T)(img)(_p9##x,_p3##y,z,c), I[238] = (T)(img)(_p8##x,_p3##y,z,c), I[239] = (T)(img)(_p7##x,_p3##y,z,c), I[240] = (T)(img)(_p6##x,_p3##y,z,c), I[241] = (T)(img)(_p5##x,_p3##y,z,c), I[242] = (T)(img)(_p4##x,_p3##y,z,c), I[243] = (T)(img)(_p3##x,_p3##y,z,c), I[244] = (T)(img)(_p2##x,_p3##y,z,c), I[245] = (T)(img)(_p1##x,_p3##y,z,c), I[246] = (T)(img)(x,_p3##y,z,c), I[247] = (T)(img)(_n1##x,_p3##y,z,c), I[248] = (T)(img)(_n2##x,_p3##y,z,c), I[249] = (T)(img)(_n3##x,_p3##y,z,c), I[250] = (T)(img)(_n4##x,_p3##y,z,c), I[251] = (T)(img)(_n5##x,_p3##y,z,c), I[252] = (T)(img)(_n6##x,_p3##y,z,c), I[253] = (T)(img)(_n7##x,_p3##y,z,c), I[254] = (T)(img)(_n8##x,_p3##y,z,c), I[255] = (T)(img)(_n9##x,_p3##y,z,c), I[256] = (T)(img)(_n10##x,_p3##y,z,c), I[257] = (T)(img)(_n11##x,_p3##y,z,c), I[258] = (T)(img)(_n12##x,_p3##y,z,c), I[259] = (T)(img)(_n13##x,_p3##y,z,c), \ - I[260] = (T)(img)(_p12##x,_p2##y,z,c), I[261] = (T)(img)(_p11##x,_p2##y,z,c), I[262] = (T)(img)(_p10##x,_p2##y,z,c), I[263] = (T)(img)(_p9##x,_p2##y,z,c), I[264] = (T)(img)(_p8##x,_p2##y,z,c), I[265] = (T)(img)(_p7##x,_p2##y,z,c), I[266] = (T)(img)(_p6##x,_p2##y,z,c), I[267] = (T)(img)(_p5##x,_p2##y,z,c), I[268] = (T)(img)(_p4##x,_p2##y,z,c), I[269] = (T)(img)(_p3##x,_p2##y,z,c), I[270] = (T)(img)(_p2##x,_p2##y,z,c), I[271] = (T)(img)(_p1##x,_p2##y,z,c), I[272] = (T)(img)(x,_p2##y,z,c), I[273] = (T)(img)(_n1##x,_p2##y,z,c), I[274] = (T)(img)(_n2##x,_p2##y,z,c), I[275] = (T)(img)(_n3##x,_p2##y,z,c), I[276] = (T)(img)(_n4##x,_p2##y,z,c), I[277] = (T)(img)(_n5##x,_p2##y,z,c), I[278] = (T)(img)(_n6##x,_p2##y,z,c), I[279] = (T)(img)(_n7##x,_p2##y,z,c), I[280] = (T)(img)(_n8##x,_p2##y,z,c), I[281] = (T)(img)(_n9##x,_p2##y,z,c), I[282] = (T)(img)(_n10##x,_p2##y,z,c), I[283] = (T)(img)(_n11##x,_p2##y,z,c), I[284] = (T)(img)(_n12##x,_p2##y,z,c), I[285] = (T)(img)(_n13##x,_p2##y,z,c), \ - I[286] = (T)(img)(_p12##x,_p1##y,z,c), I[287] = (T)(img)(_p11##x,_p1##y,z,c), I[288] = (T)(img)(_p10##x,_p1##y,z,c), I[289] = (T)(img)(_p9##x,_p1##y,z,c), I[290] = (T)(img)(_p8##x,_p1##y,z,c), I[291] = (T)(img)(_p7##x,_p1##y,z,c), I[292] = (T)(img)(_p6##x,_p1##y,z,c), I[293] = (T)(img)(_p5##x,_p1##y,z,c), I[294] = (T)(img)(_p4##x,_p1##y,z,c), I[295] = (T)(img)(_p3##x,_p1##y,z,c), I[296] = (T)(img)(_p2##x,_p1##y,z,c), I[297] = (T)(img)(_p1##x,_p1##y,z,c), I[298] = (T)(img)(x,_p1##y,z,c), I[299] = (T)(img)(_n1##x,_p1##y,z,c), I[300] = (T)(img)(_n2##x,_p1##y,z,c), I[301] = (T)(img)(_n3##x,_p1##y,z,c), I[302] = (T)(img)(_n4##x,_p1##y,z,c), I[303] = (T)(img)(_n5##x,_p1##y,z,c), I[304] = (T)(img)(_n6##x,_p1##y,z,c), I[305] = (T)(img)(_n7##x,_p1##y,z,c), I[306] = (T)(img)(_n8##x,_p1##y,z,c), I[307] = (T)(img)(_n9##x,_p1##y,z,c), I[308] = (T)(img)(_n10##x,_p1##y,z,c), I[309] = (T)(img)(_n11##x,_p1##y,z,c), I[310] = (T)(img)(_n12##x,_p1##y,z,c), I[311] = (T)(img)(_n13##x,_p1##y,z,c), \ - I[312] = (T)(img)(_p12##x,y,z,c), I[313] = (T)(img)(_p11##x,y,z,c), I[314] = (T)(img)(_p10##x,y,z,c), I[315] = (T)(img)(_p9##x,y,z,c), I[316] = (T)(img)(_p8##x,y,z,c), I[317] = (T)(img)(_p7##x,y,z,c), I[318] = (T)(img)(_p6##x,y,z,c), I[319] = (T)(img)(_p5##x,y,z,c), I[320] = (T)(img)(_p4##x,y,z,c), I[321] = (T)(img)(_p3##x,y,z,c), I[322] = (T)(img)(_p2##x,y,z,c), I[323] = (T)(img)(_p1##x,y,z,c), I[324] = (T)(img)(x,y,z,c), I[325] = (T)(img)(_n1##x,y,z,c), I[326] = (T)(img)(_n2##x,y,z,c), I[327] = (T)(img)(_n3##x,y,z,c), I[328] = (T)(img)(_n4##x,y,z,c), I[329] = (T)(img)(_n5##x,y,z,c), I[330] = (T)(img)(_n6##x,y,z,c), I[331] = (T)(img)(_n7##x,y,z,c), I[332] = (T)(img)(_n8##x,y,z,c), I[333] = (T)(img)(_n9##x,y,z,c), I[334] = (T)(img)(_n10##x,y,z,c), I[335] = (T)(img)(_n11##x,y,z,c), I[336] = (T)(img)(_n12##x,y,z,c), I[337] = (T)(img)(_n13##x,y,z,c), \ - I[338] = (T)(img)(_p12##x,_n1##y,z,c), I[339] = (T)(img)(_p11##x,_n1##y,z,c), I[340] = (T)(img)(_p10##x,_n1##y,z,c), I[341] = (T)(img)(_p9##x,_n1##y,z,c), I[342] = (T)(img)(_p8##x,_n1##y,z,c), I[343] = (T)(img)(_p7##x,_n1##y,z,c), I[344] = (T)(img)(_p6##x,_n1##y,z,c), I[345] = (T)(img)(_p5##x,_n1##y,z,c), I[346] = (T)(img)(_p4##x,_n1##y,z,c), I[347] = (T)(img)(_p3##x,_n1##y,z,c), I[348] = (T)(img)(_p2##x,_n1##y,z,c), I[349] = (T)(img)(_p1##x,_n1##y,z,c), I[350] = (T)(img)(x,_n1##y,z,c), I[351] = (T)(img)(_n1##x,_n1##y,z,c), I[352] = (T)(img)(_n2##x,_n1##y,z,c), I[353] = (T)(img)(_n3##x,_n1##y,z,c), I[354] = (T)(img)(_n4##x,_n1##y,z,c), I[355] = (T)(img)(_n5##x,_n1##y,z,c), I[356] = (T)(img)(_n6##x,_n1##y,z,c), I[357] = (T)(img)(_n7##x,_n1##y,z,c), I[358] = (T)(img)(_n8##x,_n1##y,z,c), I[359] = (T)(img)(_n9##x,_n1##y,z,c), I[360] = (T)(img)(_n10##x,_n1##y,z,c), I[361] = (T)(img)(_n11##x,_n1##y,z,c), I[362] = (T)(img)(_n12##x,_n1##y,z,c), I[363] = (T)(img)(_n13##x,_n1##y,z,c), \ - I[364] = (T)(img)(_p12##x,_n2##y,z,c), I[365] = (T)(img)(_p11##x,_n2##y,z,c), I[366] = (T)(img)(_p10##x,_n2##y,z,c), I[367] = (T)(img)(_p9##x,_n2##y,z,c), I[368] = (T)(img)(_p8##x,_n2##y,z,c), I[369] = (T)(img)(_p7##x,_n2##y,z,c), I[370] = (T)(img)(_p6##x,_n2##y,z,c), I[371] = (T)(img)(_p5##x,_n2##y,z,c), I[372] = (T)(img)(_p4##x,_n2##y,z,c), I[373] = (T)(img)(_p3##x,_n2##y,z,c), I[374] = (T)(img)(_p2##x,_n2##y,z,c), I[375] = (T)(img)(_p1##x,_n2##y,z,c), I[376] = (T)(img)(x,_n2##y,z,c), I[377] = (T)(img)(_n1##x,_n2##y,z,c), I[378] = (T)(img)(_n2##x,_n2##y,z,c), I[379] = (T)(img)(_n3##x,_n2##y,z,c), I[380] = (T)(img)(_n4##x,_n2##y,z,c), I[381] = (T)(img)(_n5##x,_n2##y,z,c), I[382] = (T)(img)(_n6##x,_n2##y,z,c), I[383] = (T)(img)(_n7##x,_n2##y,z,c), I[384] = (T)(img)(_n8##x,_n2##y,z,c), I[385] = (T)(img)(_n9##x,_n2##y,z,c), I[386] = (T)(img)(_n10##x,_n2##y,z,c), I[387] = (T)(img)(_n11##x,_n2##y,z,c), I[388] = (T)(img)(_n12##x,_n2##y,z,c), I[389] = (T)(img)(_n13##x,_n2##y,z,c), \ - I[390] = (T)(img)(_p12##x,_n3##y,z,c), I[391] = (T)(img)(_p11##x,_n3##y,z,c), I[392] = (T)(img)(_p10##x,_n3##y,z,c), I[393] = (T)(img)(_p9##x,_n3##y,z,c), I[394] = (T)(img)(_p8##x,_n3##y,z,c), I[395] = (T)(img)(_p7##x,_n3##y,z,c), I[396] = (T)(img)(_p6##x,_n3##y,z,c), I[397] = (T)(img)(_p5##x,_n3##y,z,c), I[398] = (T)(img)(_p4##x,_n3##y,z,c), I[399] = (T)(img)(_p3##x,_n3##y,z,c), I[400] = (T)(img)(_p2##x,_n3##y,z,c), I[401] = (T)(img)(_p1##x,_n3##y,z,c), I[402] = (T)(img)(x,_n3##y,z,c), I[403] = (T)(img)(_n1##x,_n3##y,z,c), I[404] = (T)(img)(_n2##x,_n3##y,z,c), I[405] = (T)(img)(_n3##x,_n3##y,z,c), I[406] = (T)(img)(_n4##x,_n3##y,z,c), I[407] = (T)(img)(_n5##x,_n3##y,z,c), I[408] = (T)(img)(_n6##x,_n3##y,z,c), I[409] = (T)(img)(_n7##x,_n3##y,z,c), I[410] = (T)(img)(_n8##x,_n3##y,z,c), I[411] = (T)(img)(_n9##x,_n3##y,z,c), I[412] = (T)(img)(_n10##x,_n3##y,z,c), I[413] = (T)(img)(_n11##x,_n3##y,z,c), I[414] = (T)(img)(_n12##x,_n3##y,z,c), I[415] = (T)(img)(_n13##x,_n3##y,z,c), \ - I[416] = (T)(img)(_p12##x,_n4##y,z,c), I[417] = (T)(img)(_p11##x,_n4##y,z,c), I[418] = (T)(img)(_p10##x,_n4##y,z,c), I[419] = (T)(img)(_p9##x,_n4##y,z,c), I[420] = (T)(img)(_p8##x,_n4##y,z,c), I[421] = (T)(img)(_p7##x,_n4##y,z,c), I[422] = (T)(img)(_p6##x,_n4##y,z,c), I[423] = (T)(img)(_p5##x,_n4##y,z,c), I[424] = (T)(img)(_p4##x,_n4##y,z,c), I[425] = (T)(img)(_p3##x,_n4##y,z,c), I[426] = (T)(img)(_p2##x,_n4##y,z,c), I[427] = (T)(img)(_p1##x,_n4##y,z,c), I[428] = (T)(img)(x,_n4##y,z,c), I[429] = (T)(img)(_n1##x,_n4##y,z,c), I[430] = (T)(img)(_n2##x,_n4##y,z,c), I[431] = (T)(img)(_n3##x,_n4##y,z,c), I[432] = (T)(img)(_n4##x,_n4##y,z,c), I[433] = (T)(img)(_n5##x,_n4##y,z,c), I[434] = (T)(img)(_n6##x,_n4##y,z,c), I[435] = (T)(img)(_n7##x,_n4##y,z,c), I[436] = (T)(img)(_n8##x,_n4##y,z,c), I[437] = (T)(img)(_n9##x,_n4##y,z,c), I[438] = (T)(img)(_n10##x,_n4##y,z,c), I[439] = (T)(img)(_n11##x,_n4##y,z,c), I[440] = (T)(img)(_n12##x,_n4##y,z,c), I[441] = (T)(img)(_n13##x,_n4##y,z,c), \ - I[442] = (T)(img)(_p12##x,_n5##y,z,c), I[443] = (T)(img)(_p11##x,_n5##y,z,c), I[444] = (T)(img)(_p10##x,_n5##y,z,c), I[445] = (T)(img)(_p9##x,_n5##y,z,c), I[446] = (T)(img)(_p8##x,_n5##y,z,c), I[447] = (T)(img)(_p7##x,_n5##y,z,c), I[448] = (T)(img)(_p6##x,_n5##y,z,c), I[449] = (T)(img)(_p5##x,_n5##y,z,c), I[450] = (T)(img)(_p4##x,_n5##y,z,c), I[451] = (T)(img)(_p3##x,_n5##y,z,c), I[452] = (T)(img)(_p2##x,_n5##y,z,c), I[453] = (T)(img)(_p1##x,_n5##y,z,c), I[454] = (T)(img)(x,_n5##y,z,c), I[455] = (T)(img)(_n1##x,_n5##y,z,c), I[456] = (T)(img)(_n2##x,_n5##y,z,c), I[457] = (T)(img)(_n3##x,_n5##y,z,c), I[458] = (T)(img)(_n4##x,_n5##y,z,c), I[459] = (T)(img)(_n5##x,_n5##y,z,c), I[460] = (T)(img)(_n6##x,_n5##y,z,c), I[461] = (T)(img)(_n7##x,_n5##y,z,c), I[462] = (T)(img)(_n8##x,_n5##y,z,c), I[463] = (T)(img)(_n9##x,_n5##y,z,c), I[464] = (T)(img)(_n10##x,_n5##y,z,c), I[465] = (T)(img)(_n11##x,_n5##y,z,c), I[466] = (T)(img)(_n12##x,_n5##y,z,c), I[467] = (T)(img)(_n13##x,_n5##y,z,c), \ - I[468] = (T)(img)(_p12##x,_n6##y,z,c), I[469] = (T)(img)(_p11##x,_n6##y,z,c), I[470] = (T)(img)(_p10##x,_n6##y,z,c), I[471] = (T)(img)(_p9##x,_n6##y,z,c), I[472] = (T)(img)(_p8##x,_n6##y,z,c), I[473] = (T)(img)(_p7##x,_n6##y,z,c), I[474] = (T)(img)(_p6##x,_n6##y,z,c), I[475] = (T)(img)(_p5##x,_n6##y,z,c), I[476] = (T)(img)(_p4##x,_n6##y,z,c), I[477] = (T)(img)(_p3##x,_n6##y,z,c), I[478] = (T)(img)(_p2##x,_n6##y,z,c), I[479] = (T)(img)(_p1##x,_n6##y,z,c), I[480] = (T)(img)(x,_n6##y,z,c), I[481] = (T)(img)(_n1##x,_n6##y,z,c), I[482] = (T)(img)(_n2##x,_n6##y,z,c), I[483] = (T)(img)(_n3##x,_n6##y,z,c), I[484] = (T)(img)(_n4##x,_n6##y,z,c), I[485] = (T)(img)(_n5##x,_n6##y,z,c), I[486] = (T)(img)(_n6##x,_n6##y,z,c), I[487] = (T)(img)(_n7##x,_n6##y,z,c), I[488] = (T)(img)(_n8##x,_n6##y,z,c), I[489] = (T)(img)(_n9##x,_n6##y,z,c), I[490] = (T)(img)(_n10##x,_n6##y,z,c), I[491] = (T)(img)(_n11##x,_n6##y,z,c), I[492] = (T)(img)(_n12##x,_n6##y,z,c), I[493] = (T)(img)(_n13##x,_n6##y,z,c), \ - I[494] = (T)(img)(_p12##x,_n7##y,z,c), I[495] = (T)(img)(_p11##x,_n7##y,z,c), I[496] = (T)(img)(_p10##x,_n7##y,z,c), I[497] = (T)(img)(_p9##x,_n7##y,z,c), I[498] = (T)(img)(_p8##x,_n7##y,z,c), I[499] = (T)(img)(_p7##x,_n7##y,z,c), I[500] = (T)(img)(_p6##x,_n7##y,z,c), I[501] = (T)(img)(_p5##x,_n7##y,z,c), I[502] = (T)(img)(_p4##x,_n7##y,z,c), I[503] = (T)(img)(_p3##x,_n7##y,z,c), I[504] = (T)(img)(_p2##x,_n7##y,z,c), I[505] = (T)(img)(_p1##x,_n7##y,z,c), I[506] = (T)(img)(x,_n7##y,z,c), I[507] = (T)(img)(_n1##x,_n7##y,z,c), I[508] = (T)(img)(_n2##x,_n7##y,z,c), I[509] = (T)(img)(_n3##x,_n7##y,z,c), I[510] = (T)(img)(_n4##x,_n7##y,z,c), I[511] = (T)(img)(_n5##x,_n7##y,z,c), I[512] = (T)(img)(_n6##x,_n7##y,z,c), I[513] = (T)(img)(_n7##x,_n7##y,z,c), I[514] = (T)(img)(_n8##x,_n7##y,z,c), I[515] = (T)(img)(_n9##x,_n7##y,z,c), I[516] = (T)(img)(_n10##x,_n7##y,z,c), I[517] = (T)(img)(_n11##x,_n7##y,z,c), I[518] = (T)(img)(_n12##x,_n7##y,z,c), I[519] = (T)(img)(_n13##x,_n7##y,z,c), \ - I[520] = (T)(img)(_p12##x,_n8##y,z,c), I[521] = (T)(img)(_p11##x,_n8##y,z,c), I[522] = (T)(img)(_p10##x,_n8##y,z,c), I[523] = (T)(img)(_p9##x,_n8##y,z,c), I[524] = (T)(img)(_p8##x,_n8##y,z,c), I[525] = (T)(img)(_p7##x,_n8##y,z,c), I[526] = (T)(img)(_p6##x,_n8##y,z,c), I[527] = (T)(img)(_p5##x,_n8##y,z,c), I[528] = (T)(img)(_p4##x,_n8##y,z,c), I[529] = (T)(img)(_p3##x,_n8##y,z,c), I[530] = (T)(img)(_p2##x,_n8##y,z,c), I[531] = (T)(img)(_p1##x,_n8##y,z,c), I[532] = (T)(img)(x,_n8##y,z,c), I[533] = (T)(img)(_n1##x,_n8##y,z,c), I[534] = (T)(img)(_n2##x,_n8##y,z,c), I[535] = (T)(img)(_n3##x,_n8##y,z,c), I[536] = (T)(img)(_n4##x,_n8##y,z,c), I[537] = (T)(img)(_n5##x,_n8##y,z,c), I[538] = (T)(img)(_n6##x,_n8##y,z,c), I[539] = (T)(img)(_n7##x,_n8##y,z,c), I[540] = (T)(img)(_n8##x,_n8##y,z,c), I[541] = (T)(img)(_n9##x,_n8##y,z,c), I[542] = (T)(img)(_n10##x,_n8##y,z,c), I[543] = (T)(img)(_n11##x,_n8##y,z,c), I[544] = (T)(img)(_n12##x,_n8##y,z,c), I[545] = (T)(img)(_n13##x,_n8##y,z,c), \ - I[546] = (T)(img)(_p12##x,_n9##y,z,c), I[547] = (T)(img)(_p11##x,_n9##y,z,c), I[548] = (T)(img)(_p10##x,_n9##y,z,c), I[549] = (T)(img)(_p9##x,_n9##y,z,c), I[550] = (T)(img)(_p8##x,_n9##y,z,c), I[551] = (T)(img)(_p7##x,_n9##y,z,c), I[552] = (T)(img)(_p6##x,_n9##y,z,c), I[553] = (T)(img)(_p5##x,_n9##y,z,c), I[554] = (T)(img)(_p4##x,_n9##y,z,c), I[555] = (T)(img)(_p3##x,_n9##y,z,c), I[556] = (T)(img)(_p2##x,_n9##y,z,c), I[557] = (T)(img)(_p1##x,_n9##y,z,c), I[558] = (T)(img)(x,_n9##y,z,c), I[559] = (T)(img)(_n1##x,_n9##y,z,c), I[560] = (T)(img)(_n2##x,_n9##y,z,c), I[561] = (T)(img)(_n3##x,_n9##y,z,c), I[562] = (T)(img)(_n4##x,_n9##y,z,c), I[563] = (T)(img)(_n5##x,_n9##y,z,c), I[564] = (T)(img)(_n6##x,_n9##y,z,c), I[565] = (T)(img)(_n7##x,_n9##y,z,c), I[566] = (T)(img)(_n8##x,_n9##y,z,c), I[567] = (T)(img)(_n9##x,_n9##y,z,c), I[568] = (T)(img)(_n10##x,_n9##y,z,c), I[569] = (T)(img)(_n11##x,_n9##y,z,c), I[570] = (T)(img)(_n12##x,_n9##y,z,c), I[571] = (T)(img)(_n13##x,_n9##y,z,c), \ - I[572] = (T)(img)(_p12##x,_n10##y,z,c), I[573] = (T)(img)(_p11##x,_n10##y,z,c), I[574] = (T)(img)(_p10##x,_n10##y,z,c), I[575] = (T)(img)(_p9##x,_n10##y,z,c), I[576] = (T)(img)(_p8##x,_n10##y,z,c), I[577] = (T)(img)(_p7##x,_n10##y,z,c), I[578] = (T)(img)(_p6##x,_n10##y,z,c), I[579] = (T)(img)(_p5##x,_n10##y,z,c), I[580] = (T)(img)(_p4##x,_n10##y,z,c), I[581] = (T)(img)(_p3##x,_n10##y,z,c), I[582] = (T)(img)(_p2##x,_n10##y,z,c), I[583] = (T)(img)(_p1##x,_n10##y,z,c), I[584] = (T)(img)(x,_n10##y,z,c), I[585] = (T)(img)(_n1##x,_n10##y,z,c), I[586] = (T)(img)(_n2##x,_n10##y,z,c), I[587] = (T)(img)(_n3##x,_n10##y,z,c), I[588] = (T)(img)(_n4##x,_n10##y,z,c), I[589] = (T)(img)(_n5##x,_n10##y,z,c), I[590] = (T)(img)(_n6##x,_n10##y,z,c), I[591] = (T)(img)(_n7##x,_n10##y,z,c), I[592] = (T)(img)(_n8##x,_n10##y,z,c), I[593] = (T)(img)(_n9##x,_n10##y,z,c), I[594] = (T)(img)(_n10##x,_n10##y,z,c), I[595] = (T)(img)(_n11##x,_n10##y,z,c), I[596] = (T)(img)(_n12##x,_n10##y,z,c), I[597] = (T)(img)(_n13##x,_n10##y,z,c), \ - I[598] = (T)(img)(_p12##x,_n11##y,z,c), I[599] = (T)(img)(_p11##x,_n11##y,z,c), I[600] = (T)(img)(_p10##x,_n11##y,z,c), I[601] = (T)(img)(_p9##x,_n11##y,z,c), I[602] = (T)(img)(_p8##x,_n11##y,z,c), I[603] = (T)(img)(_p7##x,_n11##y,z,c), I[604] = (T)(img)(_p6##x,_n11##y,z,c), I[605] = (T)(img)(_p5##x,_n11##y,z,c), I[606] = (T)(img)(_p4##x,_n11##y,z,c), I[607] = (T)(img)(_p3##x,_n11##y,z,c), I[608] = (T)(img)(_p2##x,_n11##y,z,c), I[609] = (T)(img)(_p1##x,_n11##y,z,c), I[610] = (T)(img)(x,_n11##y,z,c), I[611] = (T)(img)(_n1##x,_n11##y,z,c), I[612] = (T)(img)(_n2##x,_n11##y,z,c), I[613] = (T)(img)(_n3##x,_n11##y,z,c), I[614] = (T)(img)(_n4##x,_n11##y,z,c), I[615] = (T)(img)(_n5##x,_n11##y,z,c), I[616] = (T)(img)(_n6##x,_n11##y,z,c), I[617] = (T)(img)(_n7##x,_n11##y,z,c), I[618] = (T)(img)(_n8##x,_n11##y,z,c), I[619] = (T)(img)(_n9##x,_n11##y,z,c), I[620] = (T)(img)(_n10##x,_n11##y,z,c), I[621] = (T)(img)(_n11##x,_n11##y,z,c), I[622] = (T)(img)(_n12##x,_n11##y,z,c), I[623] = (T)(img)(_n13##x,_n11##y,z,c), \ - I[624] = (T)(img)(_p12##x,_n12##y,z,c), I[625] = (T)(img)(_p11##x,_n12##y,z,c), I[626] = (T)(img)(_p10##x,_n12##y,z,c), I[627] = (T)(img)(_p9##x,_n12##y,z,c), I[628] = (T)(img)(_p8##x,_n12##y,z,c), I[629] = (T)(img)(_p7##x,_n12##y,z,c), I[630] = (T)(img)(_p6##x,_n12##y,z,c), I[631] = (T)(img)(_p5##x,_n12##y,z,c), I[632] = (T)(img)(_p4##x,_n12##y,z,c), I[633] = (T)(img)(_p3##x,_n12##y,z,c), I[634] = (T)(img)(_p2##x,_n12##y,z,c), I[635] = (T)(img)(_p1##x,_n12##y,z,c), I[636] = (T)(img)(x,_n12##y,z,c), I[637] = (T)(img)(_n1##x,_n12##y,z,c), I[638] = (T)(img)(_n2##x,_n12##y,z,c), I[639] = (T)(img)(_n3##x,_n12##y,z,c), I[640] = (T)(img)(_n4##x,_n12##y,z,c), I[641] = (T)(img)(_n5##x,_n12##y,z,c), I[642] = (T)(img)(_n6##x,_n12##y,z,c), I[643] = (T)(img)(_n7##x,_n12##y,z,c), I[644] = (T)(img)(_n8##x,_n12##y,z,c), I[645] = (T)(img)(_n9##x,_n12##y,z,c), I[646] = (T)(img)(_n10##x,_n12##y,z,c), I[647] = (T)(img)(_n11##x,_n12##y,z,c), I[648] = (T)(img)(_n12##x,_n12##y,z,c), I[649] = (T)(img)(_n13##x,_n12##y,z,c), \ - I[650] = (T)(img)(_p12##x,_n13##y,z,c), I[651] = (T)(img)(_p11##x,_n13##y,z,c), I[652] = (T)(img)(_p10##x,_n13##y,z,c), I[653] = (T)(img)(_p9##x,_n13##y,z,c), I[654] = (T)(img)(_p8##x,_n13##y,z,c), I[655] = (T)(img)(_p7##x,_n13##y,z,c), I[656] = (T)(img)(_p6##x,_n13##y,z,c), I[657] = (T)(img)(_p5##x,_n13##y,z,c), I[658] = (T)(img)(_p4##x,_n13##y,z,c), I[659] = (T)(img)(_p3##x,_n13##y,z,c), I[660] = (T)(img)(_p2##x,_n13##y,z,c), I[661] = (T)(img)(_p1##x,_n13##y,z,c), I[662] = (T)(img)(x,_n13##y,z,c), I[663] = (T)(img)(_n1##x,_n13##y,z,c), I[664] = (T)(img)(_n2##x,_n13##y,z,c), I[665] = (T)(img)(_n3##x,_n13##y,z,c), I[666] = (T)(img)(_n4##x,_n13##y,z,c), I[667] = (T)(img)(_n5##x,_n13##y,z,c), I[668] = (T)(img)(_n6##x,_n13##y,z,c), I[669] = (T)(img)(_n7##x,_n13##y,z,c), I[670] = (T)(img)(_n8##x,_n13##y,z,c), I[671] = (T)(img)(_n9##x,_n13##y,z,c), I[672] = (T)(img)(_n10##x,_n13##y,z,c), I[673] = (T)(img)(_n11##x,_n13##y,z,c), I[674] = (T)(img)(_n12##x,_n13##y,z,c), I[675] = (T)(img)(_n13##x,_n13##y,z,c); - -// Define 27x27 loop macros -//------------------------- -#define cimg_for27(bound,i) for (int i = 0, \ - _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13; \ - _n13##i<(int)(bound) || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i) - -#define cimg_for27X(img,x) cimg_for27((img)._width,x) -#define cimg_for27Y(img,y) cimg_for27((img)._height,y) -#define cimg_for27Z(img,z) cimg_for27((img)._depth,z) -#define cimg_for27C(img,c) cimg_for27((img)._spectrum,c) -#define cimg_for27XY(img,x,y) cimg_for27Y(img,y) cimg_for27X(img,x) -#define cimg_for27XZ(img,x,z) cimg_for27Z(img,z) cimg_for27X(img,x) -#define cimg_for27XC(img,x,c) cimg_for27C(img,c) cimg_for27X(img,x) -#define cimg_for27YZ(img,y,z) cimg_for27Z(img,z) cimg_for27Y(img,y) -#define cimg_for27YC(img,y,c) cimg_for27C(img,c) cimg_for27Y(img,y) -#define cimg_for27ZC(img,z,c) cimg_for27C(img,c) cimg_for27Z(img,z) -#define cimg_for27XYZ(img,x,y,z) cimg_for27Z(img,z) cimg_for27XY(img,x,y) -#define cimg_for27XZC(img,x,z,c) cimg_for27C(img,c) cimg_for27XZ(img,x,z) -#define cimg_for27YZC(img,y,z,c) cimg_for27C(img,c) cimg_for27YZ(img,y,z) -#define cimg_for27XYZC(img,x,y,z,c) cimg_for27C(img,c) cimg_for27XYZ(img,x,y,z) - -#define cimg_for_in27(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13; \ - i<=(int)(i1) && (_n13##i<(int)(bound) || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i) - -#define cimg_for_in27X(img,x0,x1,x) cimg_for_in27((img)._width,x0,x1,x) -#define cimg_for_in27Y(img,y0,y1,y) cimg_for_in27((img)._height,y0,y1,y) -#define cimg_for_in27Z(img,z0,z1,z) cimg_for_in27((img)._depth,z0,z1,z) -#define cimg_for_in27C(img,c0,c1,c) cimg_for_in27((img)._spectrum,c0,c1,c) -#define cimg_for_in27XY(img,x0,y0,x1,y1,x,y) cimg_for_in27Y(img,y0,y1,y) cimg_for_in27X(img,x0,x1,x) -#define cimg_for_in27XZ(img,x0,z0,x1,z1,x,z) cimg_for_in27Z(img,z0,z1,z) cimg_for_in27X(img,x0,x1,x) -#define cimg_for_in27XC(img,x0,c0,x1,c1,x,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27X(img,x0,x1,x) -#define cimg_for_in27YZ(img,y0,z0,y1,z1,y,z) cimg_for_in27Z(img,z0,z1,z) cimg_for_in27Y(img,y0,y1,y) -#define cimg_for_in27YC(img,y0,c0,y1,c1,y,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27Y(img,y0,y1,y) -#define cimg_for_in27ZC(img,z0,c0,z1,c1,z,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27Z(img,z0,z1,z) -#define cimg_for_in27XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in27Z(img,z0,z1,z) cimg_for_in27XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in27XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in27YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in27XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in27C(img,c0,c1,c) cimg_for_in27XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for27x27(img,x,y,z,c,I,T) \ - cimg_for27((img)._height,y) for (int x = 0, \ - _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p13##y,z,c)), \ - (I[27] = I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = (T)(img)(0,_p12##y,z,c)), \ - (I[54] = I[55] = I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_p11##y,z,c)), \ - (I[81] = I[82] = I[83] = I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = I[94] = (T)(img)(0,_p10##y,z,c)), \ - (I[108] = I[109] = I[110] = I[111] = I[112] = I[113] = I[114] = I[115] = I[116] = I[117] = I[118] = I[119] = I[120] = I[121] = (T)(img)(0,_p9##y,z,c)), \ - (I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = I[143] = I[144] = I[145] = I[146] = I[147] = I[148] = (T)(img)(0,_p8##y,z,c)), \ - (I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = (T)(img)(0,_p7##y,z,c)), \ - (I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = I[202] = (T)(img)(0,_p6##y,z,c)), \ - (I[216] = I[217] = I[218] = I[219] = I[220] = I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = (T)(img)(0,_p5##y,z,c)), \ - (I[243] = I[244] = I[245] = I[246] = I[247] = I[248] = I[249] = I[250] = I[251] = I[252] = I[253] = I[254] = I[255] = I[256] = (T)(img)(0,_p4##y,z,c)), \ - (I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = I[276] = I[277] = I[278] = I[279] = I[280] = I[281] = I[282] = I[283] = (T)(img)(0,_p3##y,z,c)), \ - (I[297] = I[298] = I[299] = I[300] = I[301] = I[302] = I[303] = I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = I[310] = (T)(img)(0,_p2##y,z,c)), \ - (I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = I[333] = I[334] = I[335] = I[336] = I[337] = (T)(img)(0,_p1##y,z,c)), \ - (I[351] = I[352] = I[353] = I[354] = I[355] = I[356] = I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = I[363] = I[364] = (T)(img)(0,y,z,c)), \ - (I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = I[388] = I[389] = I[390] = I[391] = (T)(img)(0,_n1##y,z,c)), \ - (I[405] = I[406] = I[407] = I[408] = I[409] = I[410] = I[411] = I[412] = I[413] = I[414] = I[415] = I[416] = I[417] = I[418] = (T)(img)(0,_n2##y,z,c)), \ - (I[432] = I[433] = I[434] = I[435] = I[436] = I[437] = I[438] = I[439] = I[440] = I[441] = I[442] = I[443] = I[444] = I[445] = (T)(img)(0,_n3##y,z,c)), \ - (I[459] = I[460] = I[461] = I[462] = I[463] = I[464] = I[465] = I[466] = I[467] = I[468] = I[469] = I[470] = I[471] = I[472] = (T)(img)(0,_n4##y,z,c)), \ - (I[486] = I[487] = I[488] = I[489] = I[490] = I[491] = I[492] = I[493] = I[494] = I[495] = I[496] = I[497] = I[498] = I[499] = (T)(img)(0,_n5##y,z,c)), \ - (I[513] = I[514] = I[515] = I[516] = I[517] = I[518] = I[519] = I[520] = I[521] = I[522] = I[523] = I[524] = I[525] = I[526] = (T)(img)(0,_n6##y,z,c)), \ - (I[540] = I[541] = I[542] = I[543] = I[544] = I[545] = I[546] = I[547] = I[548] = I[549] = I[550] = I[551] = I[552] = I[553] = (T)(img)(0,_n7##y,z,c)), \ - (I[567] = I[568] = I[569] = I[570] = I[571] = I[572] = I[573] = I[574] = I[575] = I[576] = I[577] = I[578] = I[579] = I[580] = (T)(img)(0,_n8##y,z,c)), \ - (I[594] = I[595] = I[596] = I[597] = I[598] = I[599] = I[600] = I[601] = I[602] = I[603] = I[604] = I[605] = I[606] = I[607] = (T)(img)(0,_n9##y,z,c)), \ - (I[621] = I[622] = I[623] = I[624] = I[625] = I[626] = I[627] = I[628] = I[629] = I[630] = I[631] = I[632] = I[633] = I[634] = (T)(img)(0,_n10##y,z,c)), \ - (I[648] = I[649] = I[650] = I[651] = I[652] = I[653] = I[654] = I[655] = I[656] = I[657] = I[658] = I[659] = I[660] = I[661] = (T)(img)(0,_n11##y,z,c)), \ - (I[675] = I[676] = I[677] = I[678] = I[679] = I[680] = I[681] = I[682] = I[683] = I[684] = I[685] = I[686] = I[687] = I[688] = (T)(img)(0,_n12##y,z,c)), \ - (I[702] = I[703] = I[704] = I[705] = I[706] = I[707] = I[708] = I[709] = I[710] = I[711] = I[712] = I[713] = I[714] = I[715] = (T)(img)(0,_n13##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[41] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[122] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[149] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[176] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[203] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[257] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[284] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[311] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[338] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[365] = (T)(img)(_n1##x,y,z,c)), \ - (I[392] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[419] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[446] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[473] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[500] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[527] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[554] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[581] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[608] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[635] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[662] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[689] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[716] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[42] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[123] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[150] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[177] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[204] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[258] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[285] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[312] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[339] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[366] = (T)(img)(_n2##x,y,z,c)), \ - (I[393] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[420] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[447] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[474] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[501] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[528] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[555] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[582] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[609] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[636] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[663] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[690] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[717] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[43] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[124] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[151] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[178] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[205] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[259] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[286] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[313] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[340] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[367] = (T)(img)(_n3##x,y,z,c)), \ - (I[394] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[421] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[448] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[475] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[502] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[529] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[556] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[583] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[610] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[637] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[664] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[691] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[718] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[44] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[125] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[152] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[179] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[206] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[260] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[287] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[314] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[341] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[368] = (T)(img)(_n4##x,y,z,c)), \ - (I[395] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[422] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[449] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[476] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[503] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[530] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[557] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[584] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[611] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[638] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[665] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[692] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[719] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[18] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[45] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[72] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[126] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[153] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[180] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[207] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[261] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[288] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[315] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[342] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[369] = (T)(img)(_n5##x,y,z,c)), \ - (I[396] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[423] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[450] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[477] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[504] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[531] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[558] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[585] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[612] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[639] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[666] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[693] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[720] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[19] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[46] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[73] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[100] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[127] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[154] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[181] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[208] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[262] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[289] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[316] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[343] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[370] = (T)(img)(_n6##x,y,z,c)), \ - (I[397] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[424] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[451] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[478] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[505] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[532] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[559] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[586] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[613] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[640] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[667] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[694] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[721] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[20] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[47] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[74] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[101] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[128] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[155] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[182] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[209] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[263] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[290] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[317] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[344] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[371] = (T)(img)(_n7##x,y,z,c)), \ - (I[398] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[425] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[452] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[479] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[506] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[533] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[560] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[587] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[614] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[641] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[668] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[695] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[722] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[21] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[48] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[75] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[102] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[129] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[156] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[183] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[210] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[264] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[291] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[318] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[345] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[372] = (T)(img)(_n8##x,y,z,c)), \ - (I[399] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[426] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[453] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[480] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[507] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[534] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[561] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[588] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[615] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[642] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[669] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[696] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[723] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[22] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[49] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[76] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[103] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[130] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[157] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[184] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[211] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[238] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[265] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[292] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[319] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[346] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[373] = (T)(img)(_n9##x,y,z,c)), \ - (I[400] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[427] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[454] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[481] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[508] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[535] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[562] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[589] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[616] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[643] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[670] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[697] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[724] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[23] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[50] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[77] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[104] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[131] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[158] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[185] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[212] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[239] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[266] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[293] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[320] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[347] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[374] = (T)(img)(_n10##x,y,z,c)), \ - (I[401] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[428] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[455] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[482] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[509] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[536] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[563] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[590] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[617] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[644] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[671] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[698] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[725] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[24] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[51] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[78] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[105] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[132] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[159] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[186] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[213] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[240] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[267] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[294] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[321] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[348] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[375] = (T)(img)(_n11##x,y,z,c)), \ - (I[402] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[429] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[456] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[483] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[510] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[537] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[564] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[591] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[618] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[645] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[672] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[699] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[726] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[25] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[52] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[79] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[106] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[133] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[160] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[187] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[214] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[241] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[268] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[295] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[322] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[349] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[376] = (T)(img)(_n12##x,y,z,c)), \ - (I[403] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[430] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[457] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[484] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[511] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[538] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[565] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[592] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[619] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[646] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[673] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[700] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[727] = (T)(img)(_n12##x,_n13##y,z,c)), \ - 13>=((img)._width)?(img).width()-1:13); \ - (_n13##x<(img).width() && ( \ - (I[26] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[53] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[80] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[107] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[134] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[161] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[188] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[215] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[242] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[269] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[296] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[323] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[350] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[377] = (T)(img)(_n13##x,y,z,c)), \ - (I[404] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[431] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[458] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[485] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[512] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[539] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[566] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[593] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[620] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[647] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[674] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[701] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[728] = (T)(img)(_n13##x,_n13##y,z,c)),1)) || \ - _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \ - I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \ - I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], \ - I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], \ - I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], \ - I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], \ - I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], \ - I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], \ - I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], \ - I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], \ - I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], \ - I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], \ - I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], \ - I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], \ - I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], \ - I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], \ - I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], \ - I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], \ - I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], \ - I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], \ - _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x) - -#define cimg_for_in27x27(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in27((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = (int)( \ - (I[0] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[27] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[54] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[81] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[108] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[135] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[162] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[189] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[216] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[243] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[270] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[297] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[324] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[351] = (T)(img)(_p13##x,y,z,c)), \ - (I[378] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[405] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[432] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[459] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[486] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[513] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[540] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[567] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[594] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[621] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[648] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[675] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[702] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[1] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[28] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[55] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[82] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[109] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[136] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[163] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[190] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[217] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[244] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[271] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[298] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[325] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[352] = (T)(img)(_p12##x,y,z,c)), \ - (I[379] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[406] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[433] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[460] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[487] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[514] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[541] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[568] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[595] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[622] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[649] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[676] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[703] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[2] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[29] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[56] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[83] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[110] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[137] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[164] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[191] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[218] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[245] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[272] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[299] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[326] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[353] = (T)(img)(_p11##x,y,z,c)), \ - (I[380] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[407] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[434] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[461] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[488] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[515] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[542] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[569] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[596] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[623] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[650] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[677] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[704] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[3] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[30] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[57] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[84] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[111] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[138] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[165] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[192] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[219] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[246] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[273] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[300] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[327] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[354] = (T)(img)(_p10##x,y,z,c)), \ - (I[381] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[408] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[435] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[462] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[489] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[516] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[543] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[570] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[597] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[624] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[651] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[678] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[705] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[4] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[31] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[58] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[85] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[112] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[139] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[166] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[193] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[220] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[247] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[274] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[301] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[328] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[355] = (T)(img)(_p9##x,y,z,c)), \ - (I[382] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[409] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[436] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[463] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[490] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[517] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[544] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[571] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[598] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[625] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[652] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[679] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[706] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[5] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[32] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[59] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[86] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[113] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[140] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[167] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[194] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[221] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[248] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[275] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[302] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[329] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[356] = (T)(img)(_p8##x,y,z,c)), \ - (I[383] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[410] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[437] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[464] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[491] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[518] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[545] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[572] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[599] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[626] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[653] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[680] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[707] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[6] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[33] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[60] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[87] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[114] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[141] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[168] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[195] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[222] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[249] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[276] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[303] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[330] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[357] = (T)(img)(_p7##x,y,z,c)), \ - (I[384] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[411] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[438] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[465] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[492] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[519] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[546] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[573] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[600] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[627] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[654] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[681] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[708] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[7] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[34] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[61] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[88] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[115] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[142] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[169] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[196] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[223] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[250] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[277] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[304] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[331] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[358] = (T)(img)(_p6##x,y,z,c)), \ - (I[385] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[412] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[439] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[466] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[493] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[520] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[547] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[574] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[601] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[628] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[655] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[682] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[709] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[8] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[35] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[62] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[89] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[116] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[143] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[170] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[197] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[224] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[251] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[278] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[305] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[332] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[359] = (T)(img)(_p5##x,y,z,c)), \ - (I[386] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[413] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[440] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[467] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[494] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[521] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[548] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[575] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[602] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[629] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[656] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[683] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[710] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[9] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[36] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[63] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[90] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[117] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[144] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[171] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[198] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[225] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[252] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[279] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[306] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[333] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[360] = (T)(img)(_p4##x,y,z,c)), \ - (I[387] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[414] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[441] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[468] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[495] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[522] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[549] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[576] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[603] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[630] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[657] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[684] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[711] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[10] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[37] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[64] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[91] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[118] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[145] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[172] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[199] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[226] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[253] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[280] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[307] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[334] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[361] = (T)(img)(_p3##x,y,z,c)), \ - (I[388] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[415] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[442] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[469] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[496] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[523] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[550] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[577] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[604] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[631] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[658] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[685] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[712] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[11] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[38] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[65] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[92] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[119] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[146] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[173] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[200] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[227] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[254] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[281] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[308] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[335] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[362] = (T)(img)(_p2##x,y,z,c)), \ - (I[389] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[416] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[443] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[470] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[497] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[524] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[551] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[578] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[605] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[632] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[659] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[686] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[713] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[12] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[39] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[66] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[93] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[120] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[147] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[174] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[201] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[228] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[255] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[282] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[309] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[336] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[363] = (T)(img)(_p1##x,y,z,c)), \ - (I[390] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[417] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[444] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[471] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[498] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[525] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[552] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[579] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[606] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[633] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[660] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[687] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[714] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[13] = (T)(img)(x,_p13##y,z,c)), \ - (I[40] = (T)(img)(x,_p12##y,z,c)), \ - (I[67] = (T)(img)(x,_p11##y,z,c)), \ - (I[94] = (T)(img)(x,_p10##y,z,c)), \ - (I[121] = (T)(img)(x,_p9##y,z,c)), \ - (I[148] = (T)(img)(x,_p8##y,z,c)), \ - (I[175] = (T)(img)(x,_p7##y,z,c)), \ - (I[202] = (T)(img)(x,_p6##y,z,c)), \ - (I[229] = (T)(img)(x,_p5##y,z,c)), \ - (I[256] = (T)(img)(x,_p4##y,z,c)), \ - (I[283] = (T)(img)(x,_p3##y,z,c)), \ - (I[310] = (T)(img)(x,_p2##y,z,c)), \ - (I[337] = (T)(img)(x,_p1##y,z,c)), \ - (I[364] = (T)(img)(x,y,z,c)), \ - (I[391] = (T)(img)(x,_n1##y,z,c)), \ - (I[418] = (T)(img)(x,_n2##y,z,c)), \ - (I[445] = (T)(img)(x,_n3##y,z,c)), \ - (I[472] = (T)(img)(x,_n4##y,z,c)), \ - (I[499] = (T)(img)(x,_n5##y,z,c)), \ - (I[526] = (T)(img)(x,_n6##y,z,c)), \ - (I[553] = (T)(img)(x,_n7##y,z,c)), \ - (I[580] = (T)(img)(x,_n8##y,z,c)), \ - (I[607] = (T)(img)(x,_n9##y,z,c)), \ - (I[634] = (T)(img)(x,_n10##y,z,c)), \ - (I[661] = (T)(img)(x,_n11##y,z,c)), \ - (I[688] = (T)(img)(x,_n12##y,z,c)), \ - (I[715] = (T)(img)(x,_n13##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[41] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[95] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[122] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[149] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[176] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[203] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[230] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[257] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[284] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[311] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[338] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[365] = (T)(img)(_n1##x,y,z,c)), \ - (I[392] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[419] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[446] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[473] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[500] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[527] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[554] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[581] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[608] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[635] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[662] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[689] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[716] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[42] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[96] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[123] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[150] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[177] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[204] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[231] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[258] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[285] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[312] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[339] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[366] = (T)(img)(_n2##x,y,z,c)), \ - (I[393] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[420] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[447] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[474] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[501] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[528] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[555] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[582] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[609] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[636] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[663] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[690] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[717] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[43] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[70] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[97] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[124] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[151] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[178] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[205] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[232] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[259] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[286] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[313] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[340] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[367] = (T)(img)(_n3##x,y,z,c)), \ - (I[394] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[421] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[448] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[475] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[502] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[529] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[556] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[583] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[610] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[637] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[664] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[691] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[718] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[44] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[71] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[98] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[125] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[152] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[179] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[206] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[233] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[260] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[287] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[314] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[341] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[368] = (T)(img)(_n4##x,y,z,c)), \ - (I[395] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[422] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[449] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[476] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[503] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[530] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[557] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[584] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[611] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[638] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[665] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[692] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[719] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[18] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[45] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[72] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[99] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[126] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[153] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[180] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[207] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[234] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[261] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[288] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[315] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[342] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[369] = (T)(img)(_n5##x,y,z,c)), \ - (I[396] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[423] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[450] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[477] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[504] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[531] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[558] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[585] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[612] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[639] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[666] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[693] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[720] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[19] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[46] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[73] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[100] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[127] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[154] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[181] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[208] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[235] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[262] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[289] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[316] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[343] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[370] = (T)(img)(_n6##x,y,z,c)), \ - (I[397] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[424] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[451] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[478] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[505] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[532] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[559] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[586] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[613] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[640] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[667] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[694] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[721] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[20] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[47] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[74] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[101] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[128] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[155] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[182] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[209] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[236] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[263] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[290] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[317] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[344] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[371] = (T)(img)(_n7##x,y,z,c)), \ - (I[398] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[425] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[452] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[479] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[506] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[533] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[560] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[587] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[614] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[641] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[668] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[695] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[722] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[21] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[48] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[75] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[102] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[129] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[156] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[183] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[210] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[237] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[264] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[291] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[318] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[345] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[372] = (T)(img)(_n8##x,y,z,c)), \ - (I[399] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[426] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[453] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[480] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[507] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[534] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[561] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[588] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[615] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[642] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[669] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[696] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[723] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[22] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[49] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[76] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[103] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[130] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[157] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[184] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[211] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[238] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[265] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[292] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[319] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[346] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[373] = (T)(img)(_n9##x,y,z,c)), \ - (I[400] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[427] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[454] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[481] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[508] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[535] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[562] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[589] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[616] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[643] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[670] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[697] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[724] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[23] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[50] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[77] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[104] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[131] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[158] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[185] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[212] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[239] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[266] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[293] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[320] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[347] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[374] = (T)(img)(_n10##x,y,z,c)), \ - (I[401] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[428] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[455] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[482] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[509] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[536] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[563] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[590] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[617] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[644] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[671] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[698] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[725] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[24] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[51] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[78] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[105] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[132] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[159] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[186] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[213] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[240] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[267] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[294] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[321] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[348] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[375] = (T)(img)(_n11##x,y,z,c)), \ - (I[402] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[429] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[456] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[483] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[510] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[537] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[564] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[591] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[618] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[645] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[672] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[699] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[726] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[25] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[52] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[79] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[106] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[133] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[160] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[187] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[214] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[241] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[268] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[295] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[322] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[349] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[376] = (T)(img)(_n12##x,y,z,c)), \ - (I[403] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[430] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[457] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[484] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[511] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[538] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[565] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[592] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[619] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[646] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[673] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[700] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[727] = (T)(img)(_n12##x,_n13##y,z,c)), \ - x+13>=(img).width()?(img).width()-1:x+13); \ - x<=(int)(x1) && ((_n13##x<(img).width() && ( \ - (I[26] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[53] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[80] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[107] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[134] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[161] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[188] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[215] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[242] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[269] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[296] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[323] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[350] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[377] = (T)(img)(_n13##x,y,z,c)), \ - (I[404] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[431] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[458] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[485] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[512] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[539] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[566] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[593] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[620] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[647] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[674] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[701] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[728] = (T)(img)(_n13##x,_n13##y,z,c)),1)) || \ - _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \ - I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \ - I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], \ - I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], \ - I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], \ - I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], \ - I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], \ - I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], \ - I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], \ - I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], \ - I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], \ - I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], \ - I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], \ - I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], \ - I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], \ - I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], \ - I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], \ - I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], \ - I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], \ - I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], \ - _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x) - -#define cimg_get27x27(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p13##x,_p13##y,z,c), I[1] = (T)(img)(_p12##x,_p13##y,z,c), I[2] = (T)(img)(_p11##x,_p13##y,z,c), I[3] = (T)(img)(_p10##x,_p13##y,z,c), I[4] = (T)(img)(_p9##x,_p13##y,z,c), I[5] = (T)(img)(_p8##x,_p13##y,z,c), I[6] = (T)(img)(_p7##x,_p13##y,z,c), I[7] = (T)(img)(_p6##x,_p13##y,z,c), I[8] = (T)(img)(_p5##x,_p13##y,z,c), I[9] = (T)(img)(_p4##x,_p13##y,z,c), I[10] = (T)(img)(_p3##x,_p13##y,z,c), I[11] = (T)(img)(_p2##x,_p13##y,z,c), I[12] = (T)(img)(_p1##x,_p13##y,z,c), I[13] = (T)(img)(x,_p13##y,z,c), I[14] = (T)(img)(_n1##x,_p13##y,z,c), I[15] = (T)(img)(_n2##x,_p13##y,z,c), I[16] = (T)(img)(_n3##x,_p13##y,z,c), I[17] = (T)(img)(_n4##x,_p13##y,z,c), I[18] = (T)(img)(_n5##x,_p13##y,z,c), I[19] = (T)(img)(_n6##x,_p13##y,z,c), I[20] = (T)(img)(_n7##x,_p13##y,z,c), I[21] = (T)(img)(_n8##x,_p13##y,z,c), I[22] = (T)(img)(_n9##x,_p13##y,z,c), I[23] = (T)(img)(_n10##x,_p13##y,z,c), I[24] = (T)(img)(_n11##x,_p13##y,z,c), I[25] = (T)(img)(_n12##x,_p13##y,z,c), I[26] = (T)(img)(_n13##x,_p13##y,z,c), \ - I[27] = (T)(img)(_p13##x,_p12##y,z,c), I[28] = (T)(img)(_p12##x,_p12##y,z,c), I[29] = (T)(img)(_p11##x,_p12##y,z,c), I[30] = (T)(img)(_p10##x,_p12##y,z,c), I[31] = (T)(img)(_p9##x,_p12##y,z,c), I[32] = (T)(img)(_p8##x,_p12##y,z,c), I[33] = (T)(img)(_p7##x,_p12##y,z,c), I[34] = (T)(img)(_p6##x,_p12##y,z,c), I[35] = (T)(img)(_p5##x,_p12##y,z,c), I[36] = (T)(img)(_p4##x,_p12##y,z,c), I[37] = (T)(img)(_p3##x,_p12##y,z,c), I[38] = (T)(img)(_p2##x,_p12##y,z,c), I[39] = (T)(img)(_p1##x,_p12##y,z,c), I[40] = (T)(img)(x,_p12##y,z,c), I[41] = (T)(img)(_n1##x,_p12##y,z,c), I[42] = (T)(img)(_n2##x,_p12##y,z,c), I[43] = (T)(img)(_n3##x,_p12##y,z,c), I[44] = (T)(img)(_n4##x,_p12##y,z,c), I[45] = (T)(img)(_n5##x,_p12##y,z,c), I[46] = (T)(img)(_n6##x,_p12##y,z,c), I[47] = (T)(img)(_n7##x,_p12##y,z,c), I[48] = (T)(img)(_n8##x,_p12##y,z,c), I[49] = (T)(img)(_n9##x,_p12##y,z,c), I[50] = (T)(img)(_n10##x,_p12##y,z,c), I[51] = (T)(img)(_n11##x,_p12##y,z,c), I[52] = (T)(img)(_n12##x,_p12##y,z,c), I[53] = (T)(img)(_n13##x,_p12##y,z,c), \ - I[54] = (T)(img)(_p13##x,_p11##y,z,c), I[55] = (T)(img)(_p12##x,_p11##y,z,c), I[56] = (T)(img)(_p11##x,_p11##y,z,c), I[57] = (T)(img)(_p10##x,_p11##y,z,c), I[58] = (T)(img)(_p9##x,_p11##y,z,c), I[59] = (T)(img)(_p8##x,_p11##y,z,c), I[60] = (T)(img)(_p7##x,_p11##y,z,c), I[61] = (T)(img)(_p6##x,_p11##y,z,c), I[62] = (T)(img)(_p5##x,_p11##y,z,c), I[63] = (T)(img)(_p4##x,_p11##y,z,c), I[64] = (T)(img)(_p3##x,_p11##y,z,c), I[65] = (T)(img)(_p2##x,_p11##y,z,c), I[66] = (T)(img)(_p1##x,_p11##y,z,c), I[67] = (T)(img)(x,_p11##y,z,c), I[68] = (T)(img)(_n1##x,_p11##y,z,c), I[69] = (T)(img)(_n2##x,_p11##y,z,c), I[70] = (T)(img)(_n3##x,_p11##y,z,c), I[71] = (T)(img)(_n4##x,_p11##y,z,c), I[72] = (T)(img)(_n5##x,_p11##y,z,c), I[73] = (T)(img)(_n6##x,_p11##y,z,c), I[74] = (T)(img)(_n7##x,_p11##y,z,c), I[75] = (T)(img)(_n8##x,_p11##y,z,c), I[76] = (T)(img)(_n9##x,_p11##y,z,c), I[77] = (T)(img)(_n10##x,_p11##y,z,c), I[78] = (T)(img)(_n11##x,_p11##y,z,c), I[79] = (T)(img)(_n12##x,_p11##y,z,c), I[80] = (T)(img)(_n13##x,_p11##y,z,c), \ - I[81] = (T)(img)(_p13##x,_p10##y,z,c), I[82] = (T)(img)(_p12##x,_p10##y,z,c), I[83] = (T)(img)(_p11##x,_p10##y,z,c), I[84] = (T)(img)(_p10##x,_p10##y,z,c), I[85] = (T)(img)(_p9##x,_p10##y,z,c), I[86] = (T)(img)(_p8##x,_p10##y,z,c), I[87] = (T)(img)(_p7##x,_p10##y,z,c), I[88] = (T)(img)(_p6##x,_p10##y,z,c), I[89] = (T)(img)(_p5##x,_p10##y,z,c), I[90] = (T)(img)(_p4##x,_p10##y,z,c), I[91] = (T)(img)(_p3##x,_p10##y,z,c), I[92] = (T)(img)(_p2##x,_p10##y,z,c), I[93] = (T)(img)(_p1##x,_p10##y,z,c), I[94] = (T)(img)(x,_p10##y,z,c), I[95] = (T)(img)(_n1##x,_p10##y,z,c), I[96] = (T)(img)(_n2##x,_p10##y,z,c), I[97] = (T)(img)(_n3##x,_p10##y,z,c), I[98] = (T)(img)(_n4##x,_p10##y,z,c), I[99] = (T)(img)(_n5##x,_p10##y,z,c), I[100] = (T)(img)(_n6##x,_p10##y,z,c), I[101] = (T)(img)(_n7##x,_p10##y,z,c), I[102] = (T)(img)(_n8##x,_p10##y,z,c), I[103] = (T)(img)(_n9##x,_p10##y,z,c), I[104] = (T)(img)(_n10##x,_p10##y,z,c), I[105] = (T)(img)(_n11##x,_p10##y,z,c), I[106] = (T)(img)(_n12##x,_p10##y,z,c), I[107] = (T)(img)(_n13##x,_p10##y,z,c), \ - I[108] = (T)(img)(_p13##x,_p9##y,z,c), I[109] = (T)(img)(_p12##x,_p9##y,z,c), I[110] = (T)(img)(_p11##x,_p9##y,z,c), I[111] = (T)(img)(_p10##x,_p9##y,z,c), I[112] = (T)(img)(_p9##x,_p9##y,z,c), I[113] = (T)(img)(_p8##x,_p9##y,z,c), I[114] = (T)(img)(_p7##x,_p9##y,z,c), I[115] = (T)(img)(_p6##x,_p9##y,z,c), I[116] = (T)(img)(_p5##x,_p9##y,z,c), I[117] = (T)(img)(_p4##x,_p9##y,z,c), I[118] = (T)(img)(_p3##x,_p9##y,z,c), I[119] = (T)(img)(_p2##x,_p9##y,z,c), I[120] = (T)(img)(_p1##x,_p9##y,z,c), I[121] = (T)(img)(x,_p9##y,z,c), I[122] = (T)(img)(_n1##x,_p9##y,z,c), I[123] = (T)(img)(_n2##x,_p9##y,z,c), I[124] = (T)(img)(_n3##x,_p9##y,z,c), I[125] = (T)(img)(_n4##x,_p9##y,z,c), I[126] = (T)(img)(_n5##x,_p9##y,z,c), I[127] = (T)(img)(_n6##x,_p9##y,z,c), I[128] = (T)(img)(_n7##x,_p9##y,z,c), I[129] = (T)(img)(_n8##x,_p9##y,z,c), I[130] = (T)(img)(_n9##x,_p9##y,z,c), I[131] = (T)(img)(_n10##x,_p9##y,z,c), I[132] = (T)(img)(_n11##x,_p9##y,z,c), I[133] = (T)(img)(_n12##x,_p9##y,z,c), I[134] = (T)(img)(_n13##x,_p9##y,z,c), \ - I[135] = (T)(img)(_p13##x,_p8##y,z,c), I[136] = (T)(img)(_p12##x,_p8##y,z,c), I[137] = (T)(img)(_p11##x,_p8##y,z,c), I[138] = (T)(img)(_p10##x,_p8##y,z,c), I[139] = (T)(img)(_p9##x,_p8##y,z,c), I[140] = (T)(img)(_p8##x,_p8##y,z,c), I[141] = (T)(img)(_p7##x,_p8##y,z,c), I[142] = (T)(img)(_p6##x,_p8##y,z,c), I[143] = (T)(img)(_p5##x,_p8##y,z,c), I[144] = (T)(img)(_p4##x,_p8##y,z,c), I[145] = (T)(img)(_p3##x,_p8##y,z,c), I[146] = (T)(img)(_p2##x,_p8##y,z,c), I[147] = (T)(img)(_p1##x,_p8##y,z,c), I[148] = (T)(img)(x,_p8##y,z,c), I[149] = (T)(img)(_n1##x,_p8##y,z,c), I[150] = (T)(img)(_n2##x,_p8##y,z,c), I[151] = (T)(img)(_n3##x,_p8##y,z,c), I[152] = (T)(img)(_n4##x,_p8##y,z,c), I[153] = (T)(img)(_n5##x,_p8##y,z,c), I[154] = (T)(img)(_n6##x,_p8##y,z,c), I[155] = (T)(img)(_n7##x,_p8##y,z,c), I[156] = (T)(img)(_n8##x,_p8##y,z,c), I[157] = (T)(img)(_n9##x,_p8##y,z,c), I[158] = (T)(img)(_n10##x,_p8##y,z,c), I[159] = (T)(img)(_n11##x,_p8##y,z,c), I[160] = (T)(img)(_n12##x,_p8##y,z,c), I[161] = (T)(img)(_n13##x,_p8##y,z,c), \ - I[162] = (T)(img)(_p13##x,_p7##y,z,c), I[163] = (T)(img)(_p12##x,_p7##y,z,c), I[164] = (T)(img)(_p11##x,_p7##y,z,c), I[165] = (T)(img)(_p10##x,_p7##y,z,c), I[166] = (T)(img)(_p9##x,_p7##y,z,c), I[167] = (T)(img)(_p8##x,_p7##y,z,c), I[168] = (T)(img)(_p7##x,_p7##y,z,c), I[169] = (T)(img)(_p6##x,_p7##y,z,c), I[170] = (T)(img)(_p5##x,_p7##y,z,c), I[171] = (T)(img)(_p4##x,_p7##y,z,c), I[172] = (T)(img)(_p3##x,_p7##y,z,c), I[173] = (T)(img)(_p2##x,_p7##y,z,c), I[174] = (T)(img)(_p1##x,_p7##y,z,c), I[175] = (T)(img)(x,_p7##y,z,c), I[176] = (T)(img)(_n1##x,_p7##y,z,c), I[177] = (T)(img)(_n2##x,_p7##y,z,c), I[178] = (T)(img)(_n3##x,_p7##y,z,c), I[179] = (T)(img)(_n4##x,_p7##y,z,c), I[180] = (T)(img)(_n5##x,_p7##y,z,c), I[181] = (T)(img)(_n6##x,_p7##y,z,c), I[182] = (T)(img)(_n7##x,_p7##y,z,c), I[183] = (T)(img)(_n8##x,_p7##y,z,c), I[184] = (T)(img)(_n9##x,_p7##y,z,c), I[185] = (T)(img)(_n10##x,_p7##y,z,c), I[186] = (T)(img)(_n11##x,_p7##y,z,c), I[187] = (T)(img)(_n12##x,_p7##y,z,c), I[188] = (T)(img)(_n13##x,_p7##y,z,c), \ - I[189] = (T)(img)(_p13##x,_p6##y,z,c), I[190] = (T)(img)(_p12##x,_p6##y,z,c), I[191] = (T)(img)(_p11##x,_p6##y,z,c), I[192] = (T)(img)(_p10##x,_p6##y,z,c), I[193] = (T)(img)(_p9##x,_p6##y,z,c), I[194] = (T)(img)(_p8##x,_p6##y,z,c), I[195] = (T)(img)(_p7##x,_p6##y,z,c), I[196] = (T)(img)(_p6##x,_p6##y,z,c), I[197] = (T)(img)(_p5##x,_p6##y,z,c), I[198] = (T)(img)(_p4##x,_p6##y,z,c), I[199] = (T)(img)(_p3##x,_p6##y,z,c), I[200] = (T)(img)(_p2##x,_p6##y,z,c), I[201] = (T)(img)(_p1##x,_p6##y,z,c), I[202] = (T)(img)(x,_p6##y,z,c), I[203] = (T)(img)(_n1##x,_p6##y,z,c), I[204] = (T)(img)(_n2##x,_p6##y,z,c), I[205] = (T)(img)(_n3##x,_p6##y,z,c), I[206] = (T)(img)(_n4##x,_p6##y,z,c), I[207] = (T)(img)(_n5##x,_p6##y,z,c), I[208] = (T)(img)(_n6##x,_p6##y,z,c), I[209] = (T)(img)(_n7##x,_p6##y,z,c), I[210] = (T)(img)(_n8##x,_p6##y,z,c), I[211] = (T)(img)(_n9##x,_p6##y,z,c), I[212] = (T)(img)(_n10##x,_p6##y,z,c), I[213] = (T)(img)(_n11##x,_p6##y,z,c), I[214] = (T)(img)(_n12##x,_p6##y,z,c), I[215] = (T)(img)(_n13##x,_p6##y,z,c), \ - I[216] = (T)(img)(_p13##x,_p5##y,z,c), I[217] = (T)(img)(_p12##x,_p5##y,z,c), I[218] = (T)(img)(_p11##x,_p5##y,z,c), I[219] = (T)(img)(_p10##x,_p5##y,z,c), I[220] = (T)(img)(_p9##x,_p5##y,z,c), I[221] = (T)(img)(_p8##x,_p5##y,z,c), I[222] = (T)(img)(_p7##x,_p5##y,z,c), I[223] = (T)(img)(_p6##x,_p5##y,z,c), I[224] = (T)(img)(_p5##x,_p5##y,z,c), I[225] = (T)(img)(_p4##x,_p5##y,z,c), I[226] = (T)(img)(_p3##x,_p5##y,z,c), I[227] = (T)(img)(_p2##x,_p5##y,z,c), I[228] = (T)(img)(_p1##x,_p5##y,z,c), I[229] = (T)(img)(x,_p5##y,z,c), I[230] = (T)(img)(_n1##x,_p5##y,z,c), I[231] = (T)(img)(_n2##x,_p5##y,z,c), I[232] = (T)(img)(_n3##x,_p5##y,z,c), I[233] = (T)(img)(_n4##x,_p5##y,z,c), I[234] = (T)(img)(_n5##x,_p5##y,z,c), I[235] = (T)(img)(_n6##x,_p5##y,z,c), I[236] = (T)(img)(_n7##x,_p5##y,z,c), I[237] = (T)(img)(_n8##x,_p5##y,z,c), I[238] = (T)(img)(_n9##x,_p5##y,z,c), I[239] = (T)(img)(_n10##x,_p5##y,z,c), I[240] = (T)(img)(_n11##x,_p5##y,z,c), I[241] = (T)(img)(_n12##x,_p5##y,z,c), I[242] = (T)(img)(_n13##x,_p5##y,z,c), \ - I[243] = (T)(img)(_p13##x,_p4##y,z,c), I[244] = (T)(img)(_p12##x,_p4##y,z,c), I[245] = (T)(img)(_p11##x,_p4##y,z,c), I[246] = (T)(img)(_p10##x,_p4##y,z,c), I[247] = (T)(img)(_p9##x,_p4##y,z,c), I[248] = (T)(img)(_p8##x,_p4##y,z,c), I[249] = (T)(img)(_p7##x,_p4##y,z,c), I[250] = (T)(img)(_p6##x,_p4##y,z,c), I[251] = (T)(img)(_p5##x,_p4##y,z,c), I[252] = (T)(img)(_p4##x,_p4##y,z,c), I[253] = (T)(img)(_p3##x,_p4##y,z,c), I[254] = (T)(img)(_p2##x,_p4##y,z,c), I[255] = (T)(img)(_p1##x,_p4##y,z,c), I[256] = (T)(img)(x,_p4##y,z,c), I[257] = (T)(img)(_n1##x,_p4##y,z,c), I[258] = (T)(img)(_n2##x,_p4##y,z,c), I[259] = (T)(img)(_n3##x,_p4##y,z,c), I[260] = (T)(img)(_n4##x,_p4##y,z,c), I[261] = (T)(img)(_n5##x,_p4##y,z,c), I[262] = (T)(img)(_n6##x,_p4##y,z,c), I[263] = (T)(img)(_n7##x,_p4##y,z,c), I[264] = (T)(img)(_n8##x,_p4##y,z,c), I[265] = (T)(img)(_n9##x,_p4##y,z,c), I[266] = (T)(img)(_n10##x,_p4##y,z,c), I[267] = (T)(img)(_n11##x,_p4##y,z,c), I[268] = (T)(img)(_n12##x,_p4##y,z,c), I[269] = (T)(img)(_n13##x,_p4##y,z,c), \ - I[270] = (T)(img)(_p13##x,_p3##y,z,c), I[271] = (T)(img)(_p12##x,_p3##y,z,c), I[272] = (T)(img)(_p11##x,_p3##y,z,c), I[273] = (T)(img)(_p10##x,_p3##y,z,c), I[274] = (T)(img)(_p9##x,_p3##y,z,c), I[275] = (T)(img)(_p8##x,_p3##y,z,c), I[276] = (T)(img)(_p7##x,_p3##y,z,c), I[277] = (T)(img)(_p6##x,_p3##y,z,c), I[278] = (T)(img)(_p5##x,_p3##y,z,c), I[279] = (T)(img)(_p4##x,_p3##y,z,c), I[280] = (T)(img)(_p3##x,_p3##y,z,c), I[281] = (T)(img)(_p2##x,_p3##y,z,c), I[282] = (T)(img)(_p1##x,_p3##y,z,c), I[283] = (T)(img)(x,_p3##y,z,c), I[284] = (T)(img)(_n1##x,_p3##y,z,c), I[285] = (T)(img)(_n2##x,_p3##y,z,c), I[286] = (T)(img)(_n3##x,_p3##y,z,c), I[287] = (T)(img)(_n4##x,_p3##y,z,c), I[288] = (T)(img)(_n5##x,_p3##y,z,c), I[289] = (T)(img)(_n6##x,_p3##y,z,c), I[290] = (T)(img)(_n7##x,_p3##y,z,c), I[291] = (T)(img)(_n8##x,_p3##y,z,c), I[292] = (T)(img)(_n9##x,_p3##y,z,c), I[293] = (T)(img)(_n10##x,_p3##y,z,c), I[294] = (T)(img)(_n11##x,_p3##y,z,c), I[295] = (T)(img)(_n12##x,_p3##y,z,c), I[296] = (T)(img)(_n13##x,_p3##y,z,c), \ - I[297] = (T)(img)(_p13##x,_p2##y,z,c), I[298] = (T)(img)(_p12##x,_p2##y,z,c), I[299] = (T)(img)(_p11##x,_p2##y,z,c), I[300] = (T)(img)(_p10##x,_p2##y,z,c), I[301] = (T)(img)(_p9##x,_p2##y,z,c), I[302] = (T)(img)(_p8##x,_p2##y,z,c), I[303] = (T)(img)(_p7##x,_p2##y,z,c), I[304] = (T)(img)(_p6##x,_p2##y,z,c), I[305] = (T)(img)(_p5##x,_p2##y,z,c), I[306] = (T)(img)(_p4##x,_p2##y,z,c), I[307] = (T)(img)(_p3##x,_p2##y,z,c), I[308] = (T)(img)(_p2##x,_p2##y,z,c), I[309] = (T)(img)(_p1##x,_p2##y,z,c), I[310] = (T)(img)(x,_p2##y,z,c), I[311] = (T)(img)(_n1##x,_p2##y,z,c), I[312] = (T)(img)(_n2##x,_p2##y,z,c), I[313] = (T)(img)(_n3##x,_p2##y,z,c), I[314] = (T)(img)(_n4##x,_p2##y,z,c), I[315] = (T)(img)(_n5##x,_p2##y,z,c), I[316] = (T)(img)(_n6##x,_p2##y,z,c), I[317] = (T)(img)(_n7##x,_p2##y,z,c), I[318] = (T)(img)(_n8##x,_p2##y,z,c), I[319] = (T)(img)(_n9##x,_p2##y,z,c), I[320] = (T)(img)(_n10##x,_p2##y,z,c), I[321] = (T)(img)(_n11##x,_p2##y,z,c), I[322] = (T)(img)(_n12##x,_p2##y,z,c), I[323] = (T)(img)(_n13##x,_p2##y,z,c), \ - I[324] = (T)(img)(_p13##x,_p1##y,z,c), I[325] = (T)(img)(_p12##x,_p1##y,z,c), I[326] = (T)(img)(_p11##x,_p1##y,z,c), I[327] = (T)(img)(_p10##x,_p1##y,z,c), I[328] = (T)(img)(_p9##x,_p1##y,z,c), I[329] = (T)(img)(_p8##x,_p1##y,z,c), I[330] = (T)(img)(_p7##x,_p1##y,z,c), I[331] = (T)(img)(_p6##x,_p1##y,z,c), I[332] = (T)(img)(_p5##x,_p1##y,z,c), I[333] = (T)(img)(_p4##x,_p1##y,z,c), I[334] = (T)(img)(_p3##x,_p1##y,z,c), I[335] = (T)(img)(_p2##x,_p1##y,z,c), I[336] = (T)(img)(_p1##x,_p1##y,z,c), I[337] = (T)(img)(x,_p1##y,z,c), I[338] = (T)(img)(_n1##x,_p1##y,z,c), I[339] = (T)(img)(_n2##x,_p1##y,z,c), I[340] = (T)(img)(_n3##x,_p1##y,z,c), I[341] = (T)(img)(_n4##x,_p1##y,z,c), I[342] = (T)(img)(_n5##x,_p1##y,z,c), I[343] = (T)(img)(_n6##x,_p1##y,z,c), I[344] = (T)(img)(_n7##x,_p1##y,z,c), I[345] = (T)(img)(_n8##x,_p1##y,z,c), I[346] = (T)(img)(_n9##x,_p1##y,z,c), I[347] = (T)(img)(_n10##x,_p1##y,z,c), I[348] = (T)(img)(_n11##x,_p1##y,z,c), I[349] = (T)(img)(_n12##x,_p1##y,z,c), I[350] = (T)(img)(_n13##x,_p1##y,z,c), \ - I[351] = (T)(img)(_p13##x,y,z,c), I[352] = (T)(img)(_p12##x,y,z,c), I[353] = (T)(img)(_p11##x,y,z,c), I[354] = (T)(img)(_p10##x,y,z,c), I[355] = (T)(img)(_p9##x,y,z,c), I[356] = (T)(img)(_p8##x,y,z,c), I[357] = (T)(img)(_p7##x,y,z,c), I[358] = (T)(img)(_p6##x,y,z,c), I[359] = (T)(img)(_p5##x,y,z,c), I[360] = (T)(img)(_p4##x,y,z,c), I[361] = (T)(img)(_p3##x,y,z,c), I[362] = (T)(img)(_p2##x,y,z,c), I[363] = (T)(img)(_p1##x,y,z,c), I[364] = (T)(img)(x,y,z,c), I[365] = (T)(img)(_n1##x,y,z,c), I[366] = (T)(img)(_n2##x,y,z,c), I[367] = (T)(img)(_n3##x,y,z,c), I[368] = (T)(img)(_n4##x,y,z,c), I[369] = (T)(img)(_n5##x,y,z,c), I[370] = (T)(img)(_n6##x,y,z,c), I[371] = (T)(img)(_n7##x,y,z,c), I[372] = (T)(img)(_n8##x,y,z,c), I[373] = (T)(img)(_n9##x,y,z,c), I[374] = (T)(img)(_n10##x,y,z,c), I[375] = (T)(img)(_n11##x,y,z,c), I[376] = (T)(img)(_n12##x,y,z,c), I[377] = (T)(img)(_n13##x,y,z,c), \ - I[378] = (T)(img)(_p13##x,_n1##y,z,c), I[379] = (T)(img)(_p12##x,_n1##y,z,c), I[380] = (T)(img)(_p11##x,_n1##y,z,c), I[381] = (T)(img)(_p10##x,_n1##y,z,c), I[382] = (T)(img)(_p9##x,_n1##y,z,c), I[383] = (T)(img)(_p8##x,_n1##y,z,c), I[384] = (T)(img)(_p7##x,_n1##y,z,c), I[385] = (T)(img)(_p6##x,_n1##y,z,c), I[386] = (T)(img)(_p5##x,_n1##y,z,c), I[387] = (T)(img)(_p4##x,_n1##y,z,c), I[388] = (T)(img)(_p3##x,_n1##y,z,c), I[389] = (T)(img)(_p2##x,_n1##y,z,c), I[390] = (T)(img)(_p1##x,_n1##y,z,c), I[391] = (T)(img)(x,_n1##y,z,c), I[392] = (T)(img)(_n1##x,_n1##y,z,c), I[393] = (T)(img)(_n2##x,_n1##y,z,c), I[394] = (T)(img)(_n3##x,_n1##y,z,c), I[395] = (T)(img)(_n4##x,_n1##y,z,c), I[396] = (T)(img)(_n5##x,_n1##y,z,c), I[397] = (T)(img)(_n6##x,_n1##y,z,c), I[398] = (T)(img)(_n7##x,_n1##y,z,c), I[399] = (T)(img)(_n8##x,_n1##y,z,c), I[400] = (T)(img)(_n9##x,_n1##y,z,c), I[401] = (T)(img)(_n10##x,_n1##y,z,c), I[402] = (T)(img)(_n11##x,_n1##y,z,c), I[403] = (T)(img)(_n12##x,_n1##y,z,c), I[404] = (T)(img)(_n13##x,_n1##y,z,c), \ - I[405] = (T)(img)(_p13##x,_n2##y,z,c), I[406] = (T)(img)(_p12##x,_n2##y,z,c), I[407] = (T)(img)(_p11##x,_n2##y,z,c), I[408] = (T)(img)(_p10##x,_n2##y,z,c), I[409] = (T)(img)(_p9##x,_n2##y,z,c), I[410] = (T)(img)(_p8##x,_n2##y,z,c), I[411] = (T)(img)(_p7##x,_n2##y,z,c), I[412] = (T)(img)(_p6##x,_n2##y,z,c), I[413] = (T)(img)(_p5##x,_n2##y,z,c), I[414] = (T)(img)(_p4##x,_n2##y,z,c), I[415] = (T)(img)(_p3##x,_n2##y,z,c), I[416] = (T)(img)(_p2##x,_n2##y,z,c), I[417] = (T)(img)(_p1##x,_n2##y,z,c), I[418] = (T)(img)(x,_n2##y,z,c), I[419] = (T)(img)(_n1##x,_n2##y,z,c), I[420] = (T)(img)(_n2##x,_n2##y,z,c), I[421] = (T)(img)(_n3##x,_n2##y,z,c), I[422] = (T)(img)(_n4##x,_n2##y,z,c), I[423] = (T)(img)(_n5##x,_n2##y,z,c), I[424] = (T)(img)(_n6##x,_n2##y,z,c), I[425] = (T)(img)(_n7##x,_n2##y,z,c), I[426] = (T)(img)(_n8##x,_n2##y,z,c), I[427] = (T)(img)(_n9##x,_n2##y,z,c), I[428] = (T)(img)(_n10##x,_n2##y,z,c), I[429] = (T)(img)(_n11##x,_n2##y,z,c), I[430] = (T)(img)(_n12##x,_n2##y,z,c), I[431] = (T)(img)(_n13##x,_n2##y,z,c), \ - I[432] = (T)(img)(_p13##x,_n3##y,z,c), I[433] = (T)(img)(_p12##x,_n3##y,z,c), I[434] = (T)(img)(_p11##x,_n3##y,z,c), I[435] = (T)(img)(_p10##x,_n3##y,z,c), I[436] = (T)(img)(_p9##x,_n3##y,z,c), I[437] = (T)(img)(_p8##x,_n3##y,z,c), I[438] = (T)(img)(_p7##x,_n3##y,z,c), I[439] = (T)(img)(_p6##x,_n3##y,z,c), I[440] = (T)(img)(_p5##x,_n3##y,z,c), I[441] = (T)(img)(_p4##x,_n3##y,z,c), I[442] = (T)(img)(_p3##x,_n3##y,z,c), I[443] = (T)(img)(_p2##x,_n3##y,z,c), I[444] = (T)(img)(_p1##x,_n3##y,z,c), I[445] = (T)(img)(x,_n3##y,z,c), I[446] = (T)(img)(_n1##x,_n3##y,z,c), I[447] = (T)(img)(_n2##x,_n3##y,z,c), I[448] = (T)(img)(_n3##x,_n3##y,z,c), I[449] = (T)(img)(_n4##x,_n3##y,z,c), I[450] = (T)(img)(_n5##x,_n3##y,z,c), I[451] = (T)(img)(_n6##x,_n3##y,z,c), I[452] = (T)(img)(_n7##x,_n3##y,z,c), I[453] = (T)(img)(_n8##x,_n3##y,z,c), I[454] = (T)(img)(_n9##x,_n3##y,z,c), I[455] = (T)(img)(_n10##x,_n3##y,z,c), I[456] = (T)(img)(_n11##x,_n3##y,z,c), I[457] = (T)(img)(_n12##x,_n3##y,z,c), I[458] = (T)(img)(_n13##x,_n3##y,z,c), \ - I[459] = (T)(img)(_p13##x,_n4##y,z,c), I[460] = (T)(img)(_p12##x,_n4##y,z,c), I[461] = (T)(img)(_p11##x,_n4##y,z,c), I[462] = (T)(img)(_p10##x,_n4##y,z,c), I[463] = (T)(img)(_p9##x,_n4##y,z,c), I[464] = (T)(img)(_p8##x,_n4##y,z,c), I[465] = (T)(img)(_p7##x,_n4##y,z,c), I[466] = (T)(img)(_p6##x,_n4##y,z,c), I[467] = (T)(img)(_p5##x,_n4##y,z,c), I[468] = (T)(img)(_p4##x,_n4##y,z,c), I[469] = (T)(img)(_p3##x,_n4##y,z,c), I[470] = (T)(img)(_p2##x,_n4##y,z,c), I[471] = (T)(img)(_p1##x,_n4##y,z,c), I[472] = (T)(img)(x,_n4##y,z,c), I[473] = (T)(img)(_n1##x,_n4##y,z,c), I[474] = (T)(img)(_n2##x,_n4##y,z,c), I[475] = (T)(img)(_n3##x,_n4##y,z,c), I[476] = (T)(img)(_n4##x,_n4##y,z,c), I[477] = (T)(img)(_n5##x,_n4##y,z,c), I[478] = (T)(img)(_n6##x,_n4##y,z,c), I[479] = (T)(img)(_n7##x,_n4##y,z,c), I[480] = (T)(img)(_n8##x,_n4##y,z,c), I[481] = (T)(img)(_n9##x,_n4##y,z,c), I[482] = (T)(img)(_n10##x,_n4##y,z,c), I[483] = (T)(img)(_n11##x,_n4##y,z,c), I[484] = (T)(img)(_n12##x,_n4##y,z,c), I[485] = (T)(img)(_n13##x,_n4##y,z,c), \ - I[486] = (T)(img)(_p13##x,_n5##y,z,c), I[487] = (T)(img)(_p12##x,_n5##y,z,c), I[488] = (T)(img)(_p11##x,_n5##y,z,c), I[489] = (T)(img)(_p10##x,_n5##y,z,c), I[490] = (T)(img)(_p9##x,_n5##y,z,c), I[491] = (T)(img)(_p8##x,_n5##y,z,c), I[492] = (T)(img)(_p7##x,_n5##y,z,c), I[493] = (T)(img)(_p6##x,_n5##y,z,c), I[494] = (T)(img)(_p5##x,_n5##y,z,c), I[495] = (T)(img)(_p4##x,_n5##y,z,c), I[496] = (T)(img)(_p3##x,_n5##y,z,c), I[497] = (T)(img)(_p2##x,_n5##y,z,c), I[498] = (T)(img)(_p1##x,_n5##y,z,c), I[499] = (T)(img)(x,_n5##y,z,c), I[500] = (T)(img)(_n1##x,_n5##y,z,c), I[501] = (T)(img)(_n2##x,_n5##y,z,c), I[502] = (T)(img)(_n3##x,_n5##y,z,c), I[503] = (T)(img)(_n4##x,_n5##y,z,c), I[504] = (T)(img)(_n5##x,_n5##y,z,c), I[505] = (T)(img)(_n6##x,_n5##y,z,c), I[506] = (T)(img)(_n7##x,_n5##y,z,c), I[507] = (T)(img)(_n8##x,_n5##y,z,c), I[508] = (T)(img)(_n9##x,_n5##y,z,c), I[509] = (T)(img)(_n10##x,_n5##y,z,c), I[510] = (T)(img)(_n11##x,_n5##y,z,c), I[511] = (T)(img)(_n12##x,_n5##y,z,c), I[512] = (T)(img)(_n13##x,_n5##y,z,c), \ - I[513] = (T)(img)(_p13##x,_n6##y,z,c), I[514] = (T)(img)(_p12##x,_n6##y,z,c), I[515] = (T)(img)(_p11##x,_n6##y,z,c), I[516] = (T)(img)(_p10##x,_n6##y,z,c), I[517] = (T)(img)(_p9##x,_n6##y,z,c), I[518] = (T)(img)(_p8##x,_n6##y,z,c), I[519] = (T)(img)(_p7##x,_n6##y,z,c), I[520] = (T)(img)(_p6##x,_n6##y,z,c), I[521] = (T)(img)(_p5##x,_n6##y,z,c), I[522] = (T)(img)(_p4##x,_n6##y,z,c), I[523] = (T)(img)(_p3##x,_n6##y,z,c), I[524] = (T)(img)(_p2##x,_n6##y,z,c), I[525] = (T)(img)(_p1##x,_n6##y,z,c), I[526] = (T)(img)(x,_n6##y,z,c), I[527] = (T)(img)(_n1##x,_n6##y,z,c), I[528] = (T)(img)(_n2##x,_n6##y,z,c), I[529] = (T)(img)(_n3##x,_n6##y,z,c), I[530] = (T)(img)(_n4##x,_n6##y,z,c), I[531] = (T)(img)(_n5##x,_n6##y,z,c), I[532] = (T)(img)(_n6##x,_n6##y,z,c), I[533] = (T)(img)(_n7##x,_n6##y,z,c), I[534] = (T)(img)(_n8##x,_n6##y,z,c), I[535] = (T)(img)(_n9##x,_n6##y,z,c), I[536] = (T)(img)(_n10##x,_n6##y,z,c), I[537] = (T)(img)(_n11##x,_n6##y,z,c), I[538] = (T)(img)(_n12##x,_n6##y,z,c), I[539] = (T)(img)(_n13##x,_n6##y,z,c), \ - I[540] = (T)(img)(_p13##x,_n7##y,z,c), I[541] = (T)(img)(_p12##x,_n7##y,z,c), I[542] = (T)(img)(_p11##x,_n7##y,z,c), I[543] = (T)(img)(_p10##x,_n7##y,z,c), I[544] = (T)(img)(_p9##x,_n7##y,z,c), I[545] = (T)(img)(_p8##x,_n7##y,z,c), I[546] = (T)(img)(_p7##x,_n7##y,z,c), I[547] = (T)(img)(_p6##x,_n7##y,z,c), I[548] = (T)(img)(_p5##x,_n7##y,z,c), I[549] = (T)(img)(_p4##x,_n7##y,z,c), I[550] = (T)(img)(_p3##x,_n7##y,z,c), I[551] = (T)(img)(_p2##x,_n7##y,z,c), I[552] = (T)(img)(_p1##x,_n7##y,z,c), I[553] = (T)(img)(x,_n7##y,z,c), I[554] = (T)(img)(_n1##x,_n7##y,z,c), I[555] = (T)(img)(_n2##x,_n7##y,z,c), I[556] = (T)(img)(_n3##x,_n7##y,z,c), I[557] = (T)(img)(_n4##x,_n7##y,z,c), I[558] = (T)(img)(_n5##x,_n7##y,z,c), I[559] = (T)(img)(_n6##x,_n7##y,z,c), I[560] = (T)(img)(_n7##x,_n7##y,z,c), I[561] = (T)(img)(_n8##x,_n7##y,z,c), I[562] = (T)(img)(_n9##x,_n7##y,z,c), I[563] = (T)(img)(_n10##x,_n7##y,z,c), I[564] = (T)(img)(_n11##x,_n7##y,z,c), I[565] = (T)(img)(_n12##x,_n7##y,z,c), I[566] = (T)(img)(_n13##x,_n7##y,z,c), \ - I[567] = (T)(img)(_p13##x,_n8##y,z,c), I[568] = (T)(img)(_p12##x,_n8##y,z,c), I[569] = (T)(img)(_p11##x,_n8##y,z,c), I[570] = (T)(img)(_p10##x,_n8##y,z,c), I[571] = (T)(img)(_p9##x,_n8##y,z,c), I[572] = (T)(img)(_p8##x,_n8##y,z,c), I[573] = (T)(img)(_p7##x,_n8##y,z,c), I[574] = (T)(img)(_p6##x,_n8##y,z,c), I[575] = (T)(img)(_p5##x,_n8##y,z,c), I[576] = (T)(img)(_p4##x,_n8##y,z,c), I[577] = (T)(img)(_p3##x,_n8##y,z,c), I[578] = (T)(img)(_p2##x,_n8##y,z,c), I[579] = (T)(img)(_p1##x,_n8##y,z,c), I[580] = (T)(img)(x,_n8##y,z,c), I[581] = (T)(img)(_n1##x,_n8##y,z,c), I[582] = (T)(img)(_n2##x,_n8##y,z,c), I[583] = (T)(img)(_n3##x,_n8##y,z,c), I[584] = (T)(img)(_n4##x,_n8##y,z,c), I[585] = (T)(img)(_n5##x,_n8##y,z,c), I[586] = (T)(img)(_n6##x,_n8##y,z,c), I[587] = (T)(img)(_n7##x,_n8##y,z,c), I[588] = (T)(img)(_n8##x,_n8##y,z,c), I[589] = (T)(img)(_n9##x,_n8##y,z,c), I[590] = (T)(img)(_n10##x,_n8##y,z,c), I[591] = (T)(img)(_n11##x,_n8##y,z,c), I[592] = (T)(img)(_n12##x,_n8##y,z,c), I[593] = (T)(img)(_n13##x,_n8##y,z,c), \ - I[594] = (T)(img)(_p13##x,_n9##y,z,c), I[595] = (T)(img)(_p12##x,_n9##y,z,c), I[596] = (T)(img)(_p11##x,_n9##y,z,c), I[597] = (T)(img)(_p10##x,_n9##y,z,c), I[598] = (T)(img)(_p9##x,_n9##y,z,c), I[599] = (T)(img)(_p8##x,_n9##y,z,c), I[600] = (T)(img)(_p7##x,_n9##y,z,c), I[601] = (T)(img)(_p6##x,_n9##y,z,c), I[602] = (T)(img)(_p5##x,_n9##y,z,c), I[603] = (T)(img)(_p4##x,_n9##y,z,c), I[604] = (T)(img)(_p3##x,_n9##y,z,c), I[605] = (T)(img)(_p2##x,_n9##y,z,c), I[606] = (T)(img)(_p1##x,_n9##y,z,c), I[607] = (T)(img)(x,_n9##y,z,c), I[608] = (T)(img)(_n1##x,_n9##y,z,c), I[609] = (T)(img)(_n2##x,_n9##y,z,c), I[610] = (T)(img)(_n3##x,_n9##y,z,c), I[611] = (T)(img)(_n4##x,_n9##y,z,c), I[612] = (T)(img)(_n5##x,_n9##y,z,c), I[613] = (T)(img)(_n6##x,_n9##y,z,c), I[614] = (T)(img)(_n7##x,_n9##y,z,c), I[615] = (T)(img)(_n8##x,_n9##y,z,c), I[616] = (T)(img)(_n9##x,_n9##y,z,c), I[617] = (T)(img)(_n10##x,_n9##y,z,c), I[618] = (T)(img)(_n11##x,_n9##y,z,c), I[619] = (T)(img)(_n12##x,_n9##y,z,c), I[620] = (T)(img)(_n13##x,_n9##y,z,c), \ - I[621] = (T)(img)(_p13##x,_n10##y,z,c), I[622] = (T)(img)(_p12##x,_n10##y,z,c), I[623] = (T)(img)(_p11##x,_n10##y,z,c), I[624] = (T)(img)(_p10##x,_n10##y,z,c), I[625] = (T)(img)(_p9##x,_n10##y,z,c), I[626] = (T)(img)(_p8##x,_n10##y,z,c), I[627] = (T)(img)(_p7##x,_n10##y,z,c), I[628] = (T)(img)(_p6##x,_n10##y,z,c), I[629] = (T)(img)(_p5##x,_n10##y,z,c), I[630] = (T)(img)(_p4##x,_n10##y,z,c), I[631] = (T)(img)(_p3##x,_n10##y,z,c), I[632] = (T)(img)(_p2##x,_n10##y,z,c), I[633] = (T)(img)(_p1##x,_n10##y,z,c), I[634] = (T)(img)(x,_n10##y,z,c), I[635] = (T)(img)(_n1##x,_n10##y,z,c), I[636] = (T)(img)(_n2##x,_n10##y,z,c), I[637] = (T)(img)(_n3##x,_n10##y,z,c), I[638] = (T)(img)(_n4##x,_n10##y,z,c), I[639] = (T)(img)(_n5##x,_n10##y,z,c), I[640] = (T)(img)(_n6##x,_n10##y,z,c), I[641] = (T)(img)(_n7##x,_n10##y,z,c), I[642] = (T)(img)(_n8##x,_n10##y,z,c), I[643] = (T)(img)(_n9##x,_n10##y,z,c), I[644] = (T)(img)(_n10##x,_n10##y,z,c), I[645] = (T)(img)(_n11##x,_n10##y,z,c), I[646] = (T)(img)(_n12##x,_n10##y,z,c), I[647] = (T)(img)(_n13##x,_n10##y,z,c), \ - I[648] = (T)(img)(_p13##x,_n11##y,z,c), I[649] = (T)(img)(_p12##x,_n11##y,z,c), I[650] = (T)(img)(_p11##x,_n11##y,z,c), I[651] = (T)(img)(_p10##x,_n11##y,z,c), I[652] = (T)(img)(_p9##x,_n11##y,z,c), I[653] = (T)(img)(_p8##x,_n11##y,z,c), I[654] = (T)(img)(_p7##x,_n11##y,z,c), I[655] = (T)(img)(_p6##x,_n11##y,z,c), I[656] = (T)(img)(_p5##x,_n11##y,z,c), I[657] = (T)(img)(_p4##x,_n11##y,z,c), I[658] = (T)(img)(_p3##x,_n11##y,z,c), I[659] = (T)(img)(_p2##x,_n11##y,z,c), I[660] = (T)(img)(_p1##x,_n11##y,z,c), I[661] = (T)(img)(x,_n11##y,z,c), I[662] = (T)(img)(_n1##x,_n11##y,z,c), I[663] = (T)(img)(_n2##x,_n11##y,z,c), I[664] = (T)(img)(_n3##x,_n11##y,z,c), I[665] = (T)(img)(_n4##x,_n11##y,z,c), I[666] = (T)(img)(_n5##x,_n11##y,z,c), I[667] = (T)(img)(_n6##x,_n11##y,z,c), I[668] = (T)(img)(_n7##x,_n11##y,z,c), I[669] = (T)(img)(_n8##x,_n11##y,z,c), I[670] = (T)(img)(_n9##x,_n11##y,z,c), I[671] = (T)(img)(_n10##x,_n11##y,z,c), I[672] = (T)(img)(_n11##x,_n11##y,z,c), I[673] = (T)(img)(_n12##x,_n11##y,z,c), I[674] = (T)(img)(_n13##x,_n11##y,z,c), \ - I[675] = (T)(img)(_p13##x,_n12##y,z,c), I[676] = (T)(img)(_p12##x,_n12##y,z,c), I[677] = (T)(img)(_p11##x,_n12##y,z,c), I[678] = (T)(img)(_p10##x,_n12##y,z,c), I[679] = (T)(img)(_p9##x,_n12##y,z,c), I[680] = (T)(img)(_p8##x,_n12##y,z,c), I[681] = (T)(img)(_p7##x,_n12##y,z,c), I[682] = (T)(img)(_p6##x,_n12##y,z,c), I[683] = (T)(img)(_p5##x,_n12##y,z,c), I[684] = (T)(img)(_p4##x,_n12##y,z,c), I[685] = (T)(img)(_p3##x,_n12##y,z,c), I[686] = (T)(img)(_p2##x,_n12##y,z,c), I[687] = (T)(img)(_p1##x,_n12##y,z,c), I[688] = (T)(img)(x,_n12##y,z,c), I[689] = (T)(img)(_n1##x,_n12##y,z,c), I[690] = (T)(img)(_n2##x,_n12##y,z,c), I[691] = (T)(img)(_n3##x,_n12##y,z,c), I[692] = (T)(img)(_n4##x,_n12##y,z,c), I[693] = (T)(img)(_n5##x,_n12##y,z,c), I[694] = (T)(img)(_n6##x,_n12##y,z,c), I[695] = (T)(img)(_n7##x,_n12##y,z,c), I[696] = (T)(img)(_n8##x,_n12##y,z,c), I[697] = (T)(img)(_n9##x,_n12##y,z,c), I[698] = (T)(img)(_n10##x,_n12##y,z,c), I[699] = (T)(img)(_n11##x,_n12##y,z,c), I[700] = (T)(img)(_n12##x,_n12##y,z,c), I[701] = (T)(img)(_n13##x,_n12##y,z,c), \ - I[702] = (T)(img)(_p13##x,_n13##y,z,c), I[703] = (T)(img)(_p12##x,_n13##y,z,c), I[704] = (T)(img)(_p11##x,_n13##y,z,c), I[705] = (T)(img)(_p10##x,_n13##y,z,c), I[706] = (T)(img)(_p9##x,_n13##y,z,c), I[707] = (T)(img)(_p8##x,_n13##y,z,c), I[708] = (T)(img)(_p7##x,_n13##y,z,c), I[709] = (T)(img)(_p6##x,_n13##y,z,c), I[710] = (T)(img)(_p5##x,_n13##y,z,c), I[711] = (T)(img)(_p4##x,_n13##y,z,c), I[712] = (T)(img)(_p3##x,_n13##y,z,c), I[713] = (T)(img)(_p2##x,_n13##y,z,c), I[714] = (T)(img)(_p1##x,_n13##y,z,c), I[715] = (T)(img)(x,_n13##y,z,c), I[716] = (T)(img)(_n1##x,_n13##y,z,c), I[717] = (T)(img)(_n2##x,_n13##y,z,c), I[718] = (T)(img)(_n3##x,_n13##y,z,c), I[719] = (T)(img)(_n4##x,_n13##y,z,c), I[720] = (T)(img)(_n5##x,_n13##y,z,c), I[721] = (T)(img)(_n6##x,_n13##y,z,c), I[722] = (T)(img)(_n7##x,_n13##y,z,c), I[723] = (T)(img)(_n8##x,_n13##y,z,c), I[724] = (T)(img)(_n9##x,_n13##y,z,c), I[725] = (T)(img)(_n10##x,_n13##y,z,c), I[726] = (T)(img)(_n11##x,_n13##y,z,c), I[727] = (T)(img)(_n12##x,_n13##y,z,c), I[728] = (T)(img)(_n13##x,_n13##y,z,c); - -// Define 28x28 loop macros -//------------------------- -#define cimg_for28(bound,i) for (int i = 0, \ - _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13, \ - _n14##i = 14>=(int)(bound)?(int)(bound)-1:14; \ - _n14##i<(int)(bound) || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i) - -#define cimg_for28X(img,x) cimg_for28((img)._width,x) -#define cimg_for28Y(img,y) cimg_for28((img)._height,y) -#define cimg_for28Z(img,z) cimg_for28((img)._depth,z) -#define cimg_for28C(img,c) cimg_for28((img)._spectrum,c) -#define cimg_for28XY(img,x,y) cimg_for28Y(img,y) cimg_for28X(img,x) -#define cimg_for28XZ(img,x,z) cimg_for28Z(img,z) cimg_for28X(img,x) -#define cimg_for28XC(img,x,c) cimg_for28C(img,c) cimg_for28X(img,x) -#define cimg_for28YZ(img,y,z) cimg_for28Z(img,z) cimg_for28Y(img,y) -#define cimg_for28YC(img,y,c) cimg_for28C(img,c) cimg_for28Y(img,y) -#define cimg_for28ZC(img,z,c) cimg_for28C(img,c) cimg_for28Z(img,z) -#define cimg_for28XYZ(img,x,y,z) cimg_for28Z(img,z) cimg_for28XY(img,x,y) -#define cimg_for28XZC(img,x,z,c) cimg_for28C(img,c) cimg_for28XZ(img,x,z) -#define cimg_for28YZC(img,y,z,c) cimg_for28C(img,c) cimg_for28YZ(img,y,z) -#define cimg_for28XYZC(img,x,y,z,c) cimg_for28C(img,c) cimg_for28XYZ(img,x,y,z) - -#define cimg_for_in28(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13, \ - _n14##i = i+14>=(int)(bound)?(int)(bound)-1:i+14; \ - i<=(int)(i1) && (_n14##i<(int)(bound) || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i) - -#define cimg_for_in28X(img,x0,x1,x) cimg_for_in28((img)._width,x0,x1,x) -#define cimg_for_in28Y(img,y0,y1,y) cimg_for_in28((img)._height,y0,y1,y) -#define cimg_for_in28Z(img,z0,z1,z) cimg_for_in28((img)._depth,z0,z1,z) -#define cimg_for_in28C(img,c0,c1,c) cimg_for_in28((img)._spectrum,c0,c1,c) -#define cimg_for_in28XY(img,x0,y0,x1,y1,x,y) cimg_for_in28Y(img,y0,y1,y) cimg_for_in28X(img,x0,x1,x) -#define cimg_for_in28XZ(img,x0,z0,x1,z1,x,z) cimg_for_in28Z(img,z0,z1,z) cimg_for_in28X(img,x0,x1,x) -#define cimg_for_in28XC(img,x0,c0,x1,c1,x,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28X(img,x0,x1,x) -#define cimg_for_in28YZ(img,y0,z0,y1,z1,y,z) cimg_for_in28Z(img,z0,z1,z) cimg_for_in28Y(img,y0,y1,y) -#define cimg_for_in28YC(img,y0,c0,y1,c1,y,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28Y(img,y0,y1,y) -#define cimg_for_in28ZC(img,z0,c0,z1,c1,z,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28Z(img,z0,z1,z) -#define cimg_for_in28XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in28Z(img,z0,z1,z) cimg_for_in28XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in28XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in28YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in28XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in28C(img,c0,c1,c) cimg_for_in28XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for28x28(img,x,y,z,c,I,T) \ - cimg_for28((img)._height,y) for (int x = 0, \ - _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = 13>=((img)._width)?(img).width()-1:13, \ - _n14##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p13##y,z,c)), \ - (I[28] = I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = (T)(img)(0,_p12##y,z,c)), \ - (I[56] = I[57] = I[58] = I[59] = I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = (T)(img)(0,_p11##y,z,c)), \ - (I[84] = I[85] = I[86] = I[87] = I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = (T)(img)(0,_p10##y,z,c)), \ - (I[112] = I[113] = I[114] = I[115] = I[116] = I[117] = I[118] = I[119] = I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = (T)(img)(0,_p9##y,z,c)), \ - (I[140] = I[141] = I[142] = I[143] = I[144] = I[145] = I[146] = I[147] = I[148] = I[149] = I[150] = I[151] = I[152] = I[153] = (T)(img)(0,_p8##y,z,c)), \ - (I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = I[176] = I[177] = I[178] = I[179] = I[180] = I[181] = (T)(img)(0,_p7##y,z,c)), \ - (I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = I[207] = I[208] = I[209] = (T)(img)(0,_p6##y,z,c)), \ - (I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = (T)(img)(0,_p5##y,z,c)), \ - (I[252] = I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = I[263] = I[264] = I[265] = (T)(img)(0,_p4##y,z,c)), \ - (I[280] = I[281] = I[282] = I[283] = I[284] = I[285] = I[286] = I[287] = I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = (T)(img)(0,_p3##y,z,c)), \ - (I[308] = I[309] = I[310] = I[311] = I[312] = I[313] = I[314] = I[315] = I[316] = I[317] = I[318] = I[319] = I[320] = I[321] = (T)(img)(0,_p2##y,z,c)), \ - (I[336] = I[337] = I[338] = I[339] = I[340] = I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = I[348] = I[349] = (T)(img)(0,_p1##y,z,c)), \ - (I[364] = I[365] = I[366] = I[367] = I[368] = I[369] = I[370] = I[371] = I[372] = I[373] = I[374] = I[375] = I[376] = I[377] = (T)(img)(0,y,z,c)), \ - (I[392] = I[393] = I[394] = I[395] = I[396] = I[397] = I[398] = I[399] = I[400] = I[401] = I[402] = I[403] = I[404] = I[405] = (T)(img)(0,_n1##y,z,c)), \ - (I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = I[429] = I[430] = I[431] = I[432] = I[433] = (T)(img)(0,_n2##y,z,c)), \ - (I[448] = I[449] = I[450] = I[451] = I[452] = I[453] = I[454] = I[455] = I[456] = I[457] = I[458] = I[459] = I[460] = I[461] = (T)(img)(0,_n3##y,z,c)), \ - (I[476] = I[477] = I[478] = I[479] = I[480] = I[481] = I[482] = I[483] = I[484] = I[485] = I[486] = I[487] = I[488] = I[489] = (T)(img)(0,_n4##y,z,c)), \ - (I[504] = I[505] = I[506] = I[507] = I[508] = I[509] = I[510] = I[511] = I[512] = I[513] = I[514] = I[515] = I[516] = I[517] = (T)(img)(0,_n5##y,z,c)), \ - (I[532] = I[533] = I[534] = I[535] = I[536] = I[537] = I[538] = I[539] = I[540] = I[541] = I[542] = I[543] = I[544] = I[545] = (T)(img)(0,_n6##y,z,c)), \ - (I[560] = I[561] = I[562] = I[563] = I[564] = I[565] = I[566] = I[567] = I[568] = I[569] = I[570] = I[571] = I[572] = I[573] = (T)(img)(0,_n7##y,z,c)), \ - (I[588] = I[589] = I[590] = I[591] = I[592] = I[593] = I[594] = I[595] = I[596] = I[597] = I[598] = I[599] = I[600] = I[601] = (T)(img)(0,_n8##y,z,c)), \ - (I[616] = I[617] = I[618] = I[619] = I[620] = I[621] = I[622] = I[623] = I[624] = I[625] = I[626] = I[627] = I[628] = I[629] = (T)(img)(0,_n9##y,z,c)), \ - (I[644] = I[645] = I[646] = I[647] = I[648] = I[649] = I[650] = I[651] = I[652] = I[653] = I[654] = I[655] = I[656] = I[657] = (T)(img)(0,_n10##y,z,c)), \ - (I[672] = I[673] = I[674] = I[675] = I[676] = I[677] = I[678] = I[679] = I[680] = I[681] = I[682] = I[683] = I[684] = I[685] = (T)(img)(0,_n11##y,z,c)), \ - (I[700] = I[701] = I[702] = I[703] = I[704] = I[705] = I[706] = I[707] = I[708] = I[709] = I[710] = I[711] = I[712] = I[713] = (T)(img)(0,_n12##y,z,c)), \ - (I[728] = I[729] = I[730] = I[731] = I[732] = I[733] = I[734] = I[735] = I[736] = I[737] = I[738] = I[739] = I[740] = I[741] = (T)(img)(0,_n13##y,z,c)), \ - (I[756] = I[757] = I[758] = I[759] = I[760] = I[761] = I[762] = I[763] = I[764] = I[765] = I[766] = I[767] = I[768] = I[769] = (T)(img)(0,_n14##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[42] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[70] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[126] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[154] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[182] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[210] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[266] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[294] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[322] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[350] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[378] = (T)(img)(_n1##x,y,z,c)), \ - (I[406] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[434] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[462] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[490] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[518] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[546] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[574] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[602] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[630] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[658] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[686] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[714] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[742] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[770] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[43] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[71] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[127] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[155] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[183] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[211] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[267] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[295] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[323] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[351] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[379] = (T)(img)(_n2##x,y,z,c)), \ - (I[407] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[435] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[463] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[491] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[519] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[547] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[575] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[603] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[631] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[659] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[687] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[715] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[743] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[771] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[44] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[72] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[128] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[156] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[184] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[212] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[268] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[296] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[324] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[352] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[380] = (T)(img)(_n3##x,y,z,c)), \ - (I[408] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[436] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[464] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[492] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[520] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[548] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[576] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[604] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[632] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[660] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[688] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[716] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[744] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[772] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[45] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[73] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[129] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[157] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[185] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[213] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[269] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[297] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[325] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[353] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[381] = (T)(img)(_n4##x,y,z,c)), \ - (I[409] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[437] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[465] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[493] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[521] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[549] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[577] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[605] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[633] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[661] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[689] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[717] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[745] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[773] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[18] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[46] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[74] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[130] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[158] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[186] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[214] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[270] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[298] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[326] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[354] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[382] = (T)(img)(_n5##x,y,z,c)), \ - (I[410] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[438] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[466] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[494] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[522] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[550] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[578] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[606] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[634] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[662] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[690] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[718] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[746] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[774] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[19] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[47] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[75] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[131] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[159] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[187] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[215] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[271] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[299] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[327] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[355] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[383] = (T)(img)(_n6##x,y,z,c)), \ - (I[411] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[439] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[467] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[495] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[523] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[551] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[579] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[607] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[635] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[663] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[691] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[719] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[747] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[775] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[20] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[48] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[76] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[104] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[132] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[160] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[188] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[216] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[272] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[300] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[328] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[356] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[384] = (T)(img)(_n7##x,y,z,c)), \ - (I[412] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[440] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[468] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[496] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[524] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[552] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[580] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[608] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[636] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[664] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[692] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[720] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[748] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[776] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[21] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[49] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[77] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[105] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[133] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[161] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[189] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[217] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[273] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[301] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[329] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[357] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[385] = (T)(img)(_n8##x,y,z,c)), \ - (I[413] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[441] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[469] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[497] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[525] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[553] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[581] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[609] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[637] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[665] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[693] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[721] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[749] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[777] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[22] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[50] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[78] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[106] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[134] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[162] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[190] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[218] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[274] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[302] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[330] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[358] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[386] = (T)(img)(_n9##x,y,z,c)), \ - (I[414] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[442] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[470] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[498] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[526] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[554] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[582] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[610] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[638] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[666] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[694] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[722] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[750] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[778] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[23] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[51] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[79] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[107] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[135] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[163] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[191] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[219] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[247] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[275] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[303] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[331] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[359] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[387] = (T)(img)(_n10##x,y,z,c)), \ - (I[415] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[443] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[471] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[499] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[527] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[555] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[583] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[611] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[639] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[667] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[695] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[723] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[751] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[779] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[24] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[52] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[80] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[108] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[136] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[164] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[192] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[220] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[248] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[276] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[304] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[332] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[360] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[388] = (T)(img)(_n11##x,y,z,c)), \ - (I[416] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[444] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[472] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[500] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[528] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[556] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[584] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[612] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[640] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[668] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[696] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[724] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[752] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[780] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[25] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[53] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[81] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[109] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[137] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[165] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[193] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[221] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[249] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[277] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[305] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[333] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[361] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[389] = (T)(img)(_n12##x,y,z,c)), \ - (I[417] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[445] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[473] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[501] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[529] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[557] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[585] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[613] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[641] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[669] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[697] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[725] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[753] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[781] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[26] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[54] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[82] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[110] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[138] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[166] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[194] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[222] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[250] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[278] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[306] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[334] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[362] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[390] = (T)(img)(_n13##x,y,z,c)), \ - (I[418] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[446] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[474] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[502] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[530] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[558] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[586] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[614] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[642] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[670] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[698] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[726] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[754] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[782] = (T)(img)(_n13##x,_n14##y,z,c)), \ - 14>=((img)._width)?(img).width()-1:14); \ - (_n14##x<(img).width() && ( \ - (I[27] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[55] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[83] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[111] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[139] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[167] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[195] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[223] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[251] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[279] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[307] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[335] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[363] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[391] = (T)(img)(_n14##x,y,z,c)), \ - (I[419] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[447] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[475] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[503] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[531] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[559] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[587] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[615] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[643] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[671] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[699] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[727] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[755] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[783] = (T)(img)(_n14##x,_n14##y,z,c)),1)) || \ - _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], \ - I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], \ - I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], \ - I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], \ - I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], \ - I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], \ - I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], \ - I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], \ - I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], \ - I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], \ - I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], \ - I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], \ - I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], \ - _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x) - -#define cimg_for_in28x28(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in28((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = x+13>=(img).width()?(img).width()-1:x+13, \ - _n14##x = (int)( \ - (I[0] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[28] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[56] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[84] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[112] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[140] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[168] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[196] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[224] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[252] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[280] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[308] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[336] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[364] = (T)(img)(_p13##x,y,z,c)), \ - (I[392] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[420] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[448] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[476] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[504] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[532] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[560] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[588] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[616] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[644] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[672] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[700] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[728] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[756] = (T)(img)(_p13##x,_n14##y,z,c)), \ - (I[1] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[29] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[57] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[85] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[113] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[141] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[169] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[197] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[225] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[253] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[281] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[309] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[337] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[365] = (T)(img)(_p12##x,y,z,c)), \ - (I[393] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[421] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[449] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[477] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[505] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[533] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[561] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[589] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[617] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[645] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[673] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[701] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[729] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[757] = (T)(img)(_p12##x,_n14##y,z,c)), \ - (I[2] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[30] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[58] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[86] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[114] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[142] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[170] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[198] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[226] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[254] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[282] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[310] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[338] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[366] = (T)(img)(_p11##x,y,z,c)), \ - (I[394] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[422] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[450] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[478] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[506] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[534] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[562] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[590] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[618] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[646] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[674] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[702] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[730] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[758] = (T)(img)(_p11##x,_n14##y,z,c)), \ - (I[3] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[31] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[59] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[87] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[115] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[143] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[171] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[199] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[227] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[255] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[283] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[311] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[339] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[367] = (T)(img)(_p10##x,y,z,c)), \ - (I[395] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[423] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[451] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[479] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[507] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[535] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[563] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[591] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[619] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[647] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[675] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[703] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[731] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[759] = (T)(img)(_p10##x,_n14##y,z,c)), \ - (I[4] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[32] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[60] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[88] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[116] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[144] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[172] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[200] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[228] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[256] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[284] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[312] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[340] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[368] = (T)(img)(_p9##x,y,z,c)), \ - (I[396] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[424] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[452] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[480] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[508] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[536] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[564] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[592] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[620] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[648] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[676] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[704] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[732] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[760] = (T)(img)(_p9##x,_n14##y,z,c)), \ - (I[5] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[33] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[61] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[89] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[117] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[145] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[173] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[201] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[229] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[257] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[285] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[313] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[341] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[369] = (T)(img)(_p8##x,y,z,c)), \ - (I[397] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[425] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[453] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[481] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[509] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[537] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[565] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[593] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[621] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[649] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[677] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[705] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[733] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[761] = (T)(img)(_p8##x,_n14##y,z,c)), \ - (I[6] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[34] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[62] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[90] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[118] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[146] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[174] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[202] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[230] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[258] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[286] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[314] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[342] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[370] = (T)(img)(_p7##x,y,z,c)), \ - (I[398] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[426] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[454] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[482] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[510] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[538] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[566] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[594] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[622] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[650] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[678] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[706] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[734] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[762] = (T)(img)(_p7##x,_n14##y,z,c)), \ - (I[7] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[35] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[63] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[91] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[119] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[147] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[175] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[203] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[231] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[259] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[287] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[315] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[343] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[371] = (T)(img)(_p6##x,y,z,c)), \ - (I[399] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[427] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[455] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[483] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[511] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[539] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[567] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[595] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[623] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[651] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[679] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[707] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[735] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[763] = (T)(img)(_p6##x,_n14##y,z,c)), \ - (I[8] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[36] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[64] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[92] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[120] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[148] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[176] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[204] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[232] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[260] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[288] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[316] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[344] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[372] = (T)(img)(_p5##x,y,z,c)), \ - (I[400] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[428] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[456] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[484] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[512] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[540] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[568] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[596] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[624] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[652] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[680] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[708] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[736] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[764] = (T)(img)(_p5##x,_n14##y,z,c)), \ - (I[9] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[37] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[65] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[93] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[121] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[149] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[177] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[205] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[233] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[261] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[289] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[317] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[345] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[373] = (T)(img)(_p4##x,y,z,c)), \ - (I[401] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[429] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[457] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[485] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[513] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[541] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[569] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[597] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[625] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[653] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[681] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[709] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[737] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[765] = (T)(img)(_p4##x,_n14##y,z,c)), \ - (I[10] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[38] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[66] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[94] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[122] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[150] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[178] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[206] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[234] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[262] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[290] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[318] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[346] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[374] = (T)(img)(_p3##x,y,z,c)), \ - (I[402] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[430] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[458] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[486] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[514] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[542] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[570] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[598] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[626] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[654] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[682] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[710] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[738] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[766] = (T)(img)(_p3##x,_n14##y,z,c)), \ - (I[11] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[39] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[67] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[95] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[123] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[151] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[179] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[207] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[235] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[263] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[291] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[319] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[347] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[375] = (T)(img)(_p2##x,y,z,c)), \ - (I[403] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[431] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[459] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[487] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[515] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[543] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[571] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[599] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[627] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[655] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[683] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[711] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[739] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[767] = (T)(img)(_p2##x,_n14##y,z,c)), \ - (I[12] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[40] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[68] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[96] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[124] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[152] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[180] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[208] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[236] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[264] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[292] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[320] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[348] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[376] = (T)(img)(_p1##x,y,z,c)), \ - (I[404] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[432] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[460] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[488] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[516] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[544] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[572] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[600] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[628] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[656] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[684] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[712] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[740] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[768] = (T)(img)(_p1##x,_n14##y,z,c)), \ - (I[13] = (T)(img)(x,_p13##y,z,c)), \ - (I[41] = (T)(img)(x,_p12##y,z,c)), \ - (I[69] = (T)(img)(x,_p11##y,z,c)), \ - (I[97] = (T)(img)(x,_p10##y,z,c)), \ - (I[125] = (T)(img)(x,_p9##y,z,c)), \ - (I[153] = (T)(img)(x,_p8##y,z,c)), \ - (I[181] = (T)(img)(x,_p7##y,z,c)), \ - (I[209] = (T)(img)(x,_p6##y,z,c)), \ - (I[237] = (T)(img)(x,_p5##y,z,c)), \ - (I[265] = (T)(img)(x,_p4##y,z,c)), \ - (I[293] = (T)(img)(x,_p3##y,z,c)), \ - (I[321] = (T)(img)(x,_p2##y,z,c)), \ - (I[349] = (T)(img)(x,_p1##y,z,c)), \ - (I[377] = (T)(img)(x,y,z,c)), \ - (I[405] = (T)(img)(x,_n1##y,z,c)), \ - (I[433] = (T)(img)(x,_n2##y,z,c)), \ - (I[461] = (T)(img)(x,_n3##y,z,c)), \ - (I[489] = (T)(img)(x,_n4##y,z,c)), \ - (I[517] = (T)(img)(x,_n5##y,z,c)), \ - (I[545] = (T)(img)(x,_n6##y,z,c)), \ - (I[573] = (T)(img)(x,_n7##y,z,c)), \ - (I[601] = (T)(img)(x,_n8##y,z,c)), \ - (I[629] = (T)(img)(x,_n9##y,z,c)), \ - (I[657] = (T)(img)(x,_n10##y,z,c)), \ - (I[685] = (T)(img)(x,_n11##y,z,c)), \ - (I[713] = (T)(img)(x,_n12##y,z,c)), \ - (I[741] = (T)(img)(x,_n13##y,z,c)), \ - (I[769] = (T)(img)(x,_n14##y,z,c)), \ - (I[14] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[42] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[70] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[98] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[126] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[154] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[182] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[210] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[238] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[266] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[294] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[322] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[350] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[378] = (T)(img)(_n1##x,y,z,c)), \ - (I[406] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[434] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[462] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[490] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[518] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[546] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[574] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[602] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[630] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[658] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[686] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[714] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[742] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[770] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[15] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[43] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[71] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[99] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[127] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[155] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[183] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[211] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[239] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[267] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[295] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[323] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[351] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[379] = (T)(img)(_n2##x,y,z,c)), \ - (I[407] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[435] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[463] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[491] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[519] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[547] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[575] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[603] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[631] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[659] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[687] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[715] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[743] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[771] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[16] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[44] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[72] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[100] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[128] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[156] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[184] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[212] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[240] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[268] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[296] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[324] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[352] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[380] = (T)(img)(_n3##x,y,z,c)), \ - (I[408] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[436] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[464] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[492] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[520] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[548] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[576] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[604] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[632] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[660] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[688] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[716] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[744] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[772] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[17] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[45] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[73] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[101] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[129] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[157] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[185] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[213] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[241] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[269] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[297] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[325] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[353] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[381] = (T)(img)(_n4##x,y,z,c)), \ - (I[409] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[437] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[465] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[493] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[521] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[549] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[577] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[605] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[633] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[661] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[689] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[717] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[745] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[773] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[18] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[46] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[74] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[102] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[130] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[158] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[186] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[214] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[242] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[270] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[298] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[326] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[354] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[382] = (T)(img)(_n5##x,y,z,c)), \ - (I[410] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[438] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[466] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[494] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[522] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[550] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[578] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[606] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[634] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[662] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[690] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[718] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[746] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[774] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[19] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[47] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[75] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[103] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[131] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[159] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[187] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[215] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[243] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[271] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[299] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[327] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[355] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[383] = (T)(img)(_n6##x,y,z,c)), \ - (I[411] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[439] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[467] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[495] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[523] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[551] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[579] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[607] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[635] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[663] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[691] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[719] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[747] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[775] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[20] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[48] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[76] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[104] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[132] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[160] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[188] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[216] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[244] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[272] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[300] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[328] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[356] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[384] = (T)(img)(_n7##x,y,z,c)), \ - (I[412] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[440] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[468] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[496] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[524] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[552] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[580] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[608] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[636] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[664] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[692] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[720] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[748] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[776] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[21] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[49] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[77] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[105] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[133] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[161] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[189] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[217] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[245] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[273] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[301] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[329] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[357] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[385] = (T)(img)(_n8##x,y,z,c)), \ - (I[413] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[441] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[469] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[497] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[525] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[553] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[581] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[609] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[637] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[665] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[693] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[721] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[749] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[777] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[22] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[50] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[78] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[106] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[134] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[162] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[190] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[218] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[246] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[274] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[302] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[330] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[358] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[386] = (T)(img)(_n9##x,y,z,c)), \ - (I[414] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[442] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[470] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[498] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[526] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[554] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[582] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[610] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[638] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[666] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[694] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[722] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[750] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[778] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[23] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[51] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[79] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[107] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[135] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[163] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[191] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[219] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[247] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[275] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[303] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[331] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[359] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[387] = (T)(img)(_n10##x,y,z,c)), \ - (I[415] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[443] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[471] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[499] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[527] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[555] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[583] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[611] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[639] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[667] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[695] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[723] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[751] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[779] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[24] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[52] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[80] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[108] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[136] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[164] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[192] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[220] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[248] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[276] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[304] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[332] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[360] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[388] = (T)(img)(_n11##x,y,z,c)), \ - (I[416] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[444] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[472] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[500] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[528] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[556] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[584] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[612] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[640] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[668] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[696] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[724] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[752] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[780] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[25] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[53] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[81] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[109] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[137] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[165] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[193] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[221] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[249] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[277] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[305] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[333] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[361] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[389] = (T)(img)(_n12##x,y,z,c)), \ - (I[417] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[445] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[473] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[501] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[529] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[557] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[585] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[613] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[641] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[669] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[697] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[725] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[753] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[781] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[26] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[54] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[82] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[110] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[138] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[166] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[194] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[222] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[250] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[278] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[306] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[334] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[362] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[390] = (T)(img)(_n13##x,y,z,c)), \ - (I[418] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[446] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[474] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[502] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[530] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[558] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[586] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[614] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[642] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[670] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[698] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[726] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[754] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[782] = (T)(img)(_n13##x,_n14##y,z,c)), \ - x+14>=(img).width()?(img).width()-1:x+14); \ - x<=(int)(x1) && ((_n14##x<(img).width() && ( \ - (I[27] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[55] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[83] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[111] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[139] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[167] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[195] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[223] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[251] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[279] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[307] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[335] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[363] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[391] = (T)(img)(_n14##x,y,z,c)), \ - (I[419] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[447] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[475] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[503] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[531] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[559] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[587] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[615] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[643] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[671] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[699] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[727] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[755] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[783] = (T)(img)(_n14##x,_n14##y,z,c)),1)) || \ - _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], \ - I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], \ - I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], \ - I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], \ - I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], \ - I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], \ - I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], \ - I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], \ - I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], \ - I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], \ - I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], \ - I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], \ - I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], \ - _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x) - -#define cimg_get28x28(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p13##x,_p13##y,z,c), I[1] = (T)(img)(_p12##x,_p13##y,z,c), I[2] = (T)(img)(_p11##x,_p13##y,z,c), I[3] = (T)(img)(_p10##x,_p13##y,z,c), I[4] = (T)(img)(_p9##x,_p13##y,z,c), I[5] = (T)(img)(_p8##x,_p13##y,z,c), I[6] = (T)(img)(_p7##x,_p13##y,z,c), I[7] = (T)(img)(_p6##x,_p13##y,z,c), I[8] = (T)(img)(_p5##x,_p13##y,z,c), I[9] = (T)(img)(_p4##x,_p13##y,z,c), I[10] = (T)(img)(_p3##x,_p13##y,z,c), I[11] = (T)(img)(_p2##x,_p13##y,z,c), I[12] = (T)(img)(_p1##x,_p13##y,z,c), I[13] = (T)(img)(x,_p13##y,z,c), I[14] = (T)(img)(_n1##x,_p13##y,z,c), I[15] = (T)(img)(_n2##x,_p13##y,z,c), I[16] = (T)(img)(_n3##x,_p13##y,z,c), I[17] = (T)(img)(_n4##x,_p13##y,z,c), I[18] = (T)(img)(_n5##x,_p13##y,z,c), I[19] = (T)(img)(_n6##x,_p13##y,z,c), I[20] = (T)(img)(_n7##x,_p13##y,z,c), I[21] = (T)(img)(_n8##x,_p13##y,z,c), I[22] = (T)(img)(_n9##x,_p13##y,z,c), I[23] = (T)(img)(_n10##x,_p13##y,z,c), I[24] = (T)(img)(_n11##x,_p13##y,z,c), I[25] = (T)(img)(_n12##x,_p13##y,z,c), I[26] = (T)(img)(_n13##x,_p13##y,z,c), I[27] = (T)(img)(_n14##x,_p13##y,z,c), \ - I[28] = (T)(img)(_p13##x,_p12##y,z,c), I[29] = (T)(img)(_p12##x,_p12##y,z,c), I[30] = (T)(img)(_p11##x,_p12##y,z,c), I[31] = (T)(img)(_p10##x,_p12##y,z,c), I[32] = (T)(img)(_p9##x,_p12##y,z,c), I[33] = (T)(img)(_p8##x,_p12##y,z,c), I[34] = (T)(img)(_p7##x,_p12##y,z,c), I[35] = (T)(img)(_p6##x,_p12##y,z,c), I[36] = (T)(img)(_p5##x,_p12##y,z,c), I[37] = (T)(img)(_p4##x,_p12##y,z,c), I[38] = (T)(img)(_p3##x,_p12##y,z,c), I[39] = (T)(img)(_p2##x,_p12##y,z,c), I[40] = (T)(img)(_p1##x,_p12##y,z,c), I[41] = (T)(img)(x,_p12##y,z,c), I[42] = (T)(img)(_n1##x,_p12##y,z,c), I[43] = (T)(img)(_n2##x,_p12##y,z,c), I[44] = (T)(img)(_n3##x,_p12##y,z,c), I[45] = (T)(img)(_n4##x,_p12##y,z,c), I[46] = (T)(img)(_n5##x,_p12##y,z,c), I[47] = (T)(img)(_n6##x,_p12##y,z,c), I[48] = (T)(img)(_n7##x,_p12##y,z,c), I[49] = (T)(img)(_n8##x,_p12##y,z,c), I[50] = (T)(img)(_n9##x,_p12##y,z,c), I[51] = (T)(img)(_n10##x,_p12##y,z,c), I[52] = (T)(img)(_n11##x,_p12##y,z,c), I[53] = (T)(img)(_n12##x,_p12##y,z,c), I[54] = (T)(img)(_n13##x,_p12##y,z,c), I[55] = (T)(img)(_n14##x,_p12##y,z,c), \ - I[56] = (T)(img)(_p13##x,_p11##y,z,c), I[57] = (T)(img)(_p12##x,_p11##y,z,c), I[58] = (T)(img)(_p11##x,_p11##y,z,c), I[59] = (T)(img)(_p10##x,_p11##y,z,c), I[60] = (T)(img)(_p9##x,_p11##y,z,c), I[61] = (T)(img)(_p8##x,_p11##y,z,c), I[62] = (T)(img)(_p7##x,_p11##y,z,c), I[63] = (T)(img)(_p6##x,_p11##y,z,c), I[64] = (T)(img)(_p5##x,_p11##y,z,c), I[65] = (T)(img)(_p4##x,_p11##y,z,c), I[66] = (T)(img)(_p3##x,_p11##y,z,c), I[67] = (T)(img)(_p2##x,_p11##y,z,c), I[68] = (T)(img)(_p1##x,_p11##y,z,c), I[69] = (T)(img)(x,_p11##y,z,c), I[70] = (T)(img)(_n1##x,_p11##y,z,c), I[71] = (T)(img)(_n2##x,_p11##y,z,c), I[72] = (T)(img)(_n3##x,_p11##y,z,c), I[73] = (T)(img)(_n4##x,_p11##y,z,c), I[74] = (T)(img)(_n5##x,_p11##y,z,c), I[75] = (T)(img)(_n6##x,_p11##y,z,c), I[76] = (T)(img)(_n7##x,_p11##y,z,c), I[77] = (T)(img)(_n8##x,_p11##y,z,c), I[78] = (T)(img)(_n9##x,_p11##y,z,c), I[79] = (T)(img)(_n10##x,_p11##y,z,c), I[80] = (T)(img)(_n11##x,_p11##y,z,c), I[81] = (T)(img)(_n12##x,_p11##y,z,c), I[82] = (T)(img)(_n13##x,_p11##y,z,c), I[83] = (T)(img)(_n14##x,_p11##y,z,c), \ - I[84] = (T)(img)(_p13##x,_p10##y,z,c), I[85] = (T)(img)(_p12##x,_p10##y,z,c), I[86] = (T)(img)(_p11##x,_p10##y,z,c), I[87] = (T)(img)(_p10##x,_p10##y,z,c), I[88] = (T)(img)(_p9##x,_p10##y,z,c), I[89] = (T)(img)(_p8##x,_p10##y,z,c), I[90] = (T)(img)(_p7##x,_p10##y,z,c), I[91] = (T)(img)(_p6##x,_p10##y,z,c), I[92] = (T)(img)(_p5##x,_p10##y,z,c), I[93] = (T)(img)(_p4##x,_p10##y,z,c), I[94] = (T)(img)(_p3##x,_p10##y,z,c), I[95] = (T)(img)(_p2##x,_p10##y,z,c), I[96] = (T)(img)(_p1##x,_p10##y,z,c), I[97] = (T)(img)(x,_p10##y,z,c), I[98] = (T)(img)(_n1##x,_p10##y,z,c), I[99] = (T)(img)(_n2##x,_p10##y,z,c), I[100] = (T)(img)(_n3##x,_p10##y,z,c), I[101] = (T)(img)(_n4##x,_p10##y,z,c), I[102] = (T)(img)(_n5##x,_p10##y,z,c), I[103] = (T)(img)(_n6##x,_p10##y,z,c), I[104] = (T)(img)(_n7##x,_p10##y,z,c), I[105] = (T)(img)(_n8##x,_p10##y,z,c), I[106] = (T)(img)(_n9##x,_p10##y,z,c), I[107] = (T)(img)(_n10##x,_p10##y,z,c), I[108] = (T)(img)(_n11##x,_p10##y,z,c), I[109] = (T)(img)(_n12##x,_p10##y,z,c), I[110] = (T)(img)(_n13##x,_p10##y,z,c), I[111] = (T)(img)(_n14##x,_p10##y,z,c), \ - I[112] = (T)(img)(_p13##x,_p9##y,z,c), I[113] = (T)(img)(_p12##x,_p9##y,z,c), I[114] = (T)(img)(_p11##x,_p9##y,z,c), I[115] = (T)(img)(_p10##x,_p9##y,z,c), I[116] = (T)(img)(_p9##x,_p9##y,z,c), I[117] = (T)(img)(_p8##x,_p9##y,z,c), I[118] = (T)(img)(_p7##x,_p9##y,z,c), I[119] = (T)(img)(_p6##x,_p9##y,z,c), I[120] = (T)(img)(_p5##x,_p9##y,z,c), I[121] = (T)(img)(_p4##x,_p9##y,z,c), I[122] = (T)(img)(_p3##x,_p9##y,z,c), I[123] = (T)(img)(_p2##x,_p9##y,z,c), I[124] = (T)(img)(_p1##x,_p9##y,z,c), I[125] = (T)(img)(x,_p9##y,z,c), I[126] = (T)(img)(_n1##x,_p9##y,z,c), I[127] = (T)(img)(_n2##x,_p9##y,z,c), I[128] = (T)(img)(_n3##x,_p9##y,z,c), I[129] = (T)(img)(_n4##x,_p9##y,z,c), I[130] = (T)(img)(_n5##x,_p9##y,z,c), I[131] = (T)(img)(_n6##x,_p9##y,z,c), I[132] = (T)(img)(_n7##x,_p9##y,z,c), I[133] = (T)(img)(_n8##x,_p9##y,z,c), I[134] = (T)(img)(_n9##x,_p9##y,z,c), I[135] = (T)(img)(_n10##x,_p9##y,z,c), I[136] = (T)(img)(_n11##x,_p9##y,z,c), I[137] = (T)(img)(_n12##x,_p9##y,z,c), I[138] = (T)(img)(_n13##x,_p9##y,z,c), I[139] = (T)(img)(_n14##x,_p9##y,z,c), \ - I[140] = (T)(img)(_p13##x,_p8##y,z,c), I[141] = (T)(img)(_p12##x,_p8##y,z,c), I[142] = (T)(img)(_p11##x,_p8##y,z,c), I[143] = (T)(img)(_p10##x,_p8##y,z,c), I[144] = (T)(img)(_p9##x,_p8##y,z,c), I[145] = (T)(img)(_p8##x,_p8##y,z,c), I[146] = (T)(img)(_p7##x,_p8##y,z,c), I[147] = (T)(img)(_p6##x,_p8##y,z,c), I[148] = (T)(img)(_p5##x,_p8##y,z,c), I[149] = (T)(img)(_p4##x,_p8##y,z,c), I[150] = (T)(img)(_p3##x,_p8##y,z,c), I[151] = (T)(img)(_p2##x,_p8##y,z,c), I[152] = (T)(img)(_p1##x,_p8##y,z,c), I[153] = (T)(img)(x,_p8##y,z,c), I[154] = (T)(img)(_n1##x,_p8##y,z,c), I[155] = (T)(img)(_n2##x,_p8##y,z,c), I[156] = (T)(img)(_n3##x,_p8##y,z,c), I[157] = (T)(img)(_n4##x,_p8##y,z,c), I[158] = (T)(img)(_n5##x,_p8##y,z,c), I[159] = (T)(img)(_n6##x,_p8##y,z,c), I[160] = (T)(img)(_n7##x,_p8##y,z,c), I[161] = (T)(img)(_n8##x,_p8##y,z,c), I[162] = (T)(img)(_n9##x,_p8##y,z,c), I[163] = (T)(img)(_n10##x,_p8##y,z,c), I[164] = (T)(img)(_n11##x,_p8##y,z,c), I[165] = (T)(img)(_n12##x,_p8##y,z,c), I[166] = (T)(img)(_n13##x,_p8##y,z,c), I[167] = (T)(img)(_n14##x,_p8##y,z,c), \ - I[168] = (T)(img)(_p13##x,_p7##y,z,c), I[169] = (T)(img)(_p12##x,_p7##y,z,c), I[170] = (T)(img)(_p11##x,_p7##y,z,c), I[171] = (T)(img)(_p10##x,_p7##y,z,c), I[172] = (T)(img)(_p9##x,_p7##y,z,c), I[173] = (T)(img)(_p8##x,_p7##y,z,c), I[174] = (T)(img)(_p7##x,_p7##y,z,c), I[175] = (T)(img)(_p6##x,_p7##y,z,c), I[176] = (T)(img)(_p5##x,_p7##y,z,c), I[177] = (T)(img)(_p4##x,_p7##y,z,c), I[178] = (T)(img)(_p3##x,_p7##y,z,c), I[179] = (T)(img)(_p2##x,_p7##y,z,c), I[180] = (T)(img)(_p1##x,_p7##y,z,c), I[181] = (T)(img)(x,_p7##y,z,c), I[182] = (T)(img)(_n1##x,_p7##y,z,c), I[183] = (T)(img)(_n2##x,_p7##y,z,c), I[184] = (T)(img)(_n3##x,_p7##y,z,c), I[185] = (T)(img)(_n4##x,_p7##y,z,c), I[186] = (T)(img)(_n5##x,_p7##y,z,c), I[187] = (T)(img)(_n6##x,_p7##y,z,c), I[188] = (T)(img)(_n7##x,_p7##y,z,c), I[189] = (T)(img)(_n8##x,_p7##y,z,c), I[190] = (T)(img)(_n9##x,_p7##y,z,c), I[191] = (T)(img)(_n10##x,_p7##y,z,c), I[192] = (T)(img)(_n11##x,_p7##y,z,c), I[193] = (T)(img)(_n12##x,_p7##y,z,c), I[194] = (T)(img)(_n13##x,_p7##y,z,c), I[195] = (T)(img)(_n14##x,_p7##y,z,c), \ - I[196] = (T)(img)(_p13##x,_p6##y,z,c), I[197] = (T)(img)(_p12##x,_p6##y,z,c), I[198] = (T)(img)(_p11##x,_p6##y,z,c), I[199] = (T)(img)(_p10##x,_p6##y,z,c), I[200] = (T)(img)(_p9##x,_p6##y,z,c), I[201] = (T)(img)(_p8##x,_p6##y,z,c), I[202] = (T)(img)(_p7##x,_p6##y,z,c), I[203] = (T)(img)(_p6##x,_p6##y,z,c), I[204] = (T)(img)(_p5##x,_p6##y,z,c), I[205] = (T)(img)(_p4##x,_p6##y,z,c), I[206] = (T)(img)(_p3##x,_p6##y,z,c), I[207] = (T)(img)(_p2##x,_p6##y,z,c), I[208] = (T)(img)(_p1##x,_p6##y,z,c), I[209] = (T)(img)(x,_p6##y,z,c), I[210] = (T)(img)(_n1##x,_p6##y,z,c), I[211] = (T)(img)(_n2##x,_p6##y,z,c), I[212] = (T)(img)(_n3##x,_p6##y,z,c), I[213] = (T)(img)(_n4##x,_p6##y,z,c), I[214] = (T)(img)(_n5##x,_p6##y,z,c), I[215] = (T)(img)(_n6##x,_p6##y,z,c), I[216] = (T)(img)(_n7##x,_p6##y,z,c), I[217] = (T)(img)(_n8##x,_p6##y,z,c), I[218] = (T)(img)(_n9##x,_p6##y,z,c), I[219] = (T)(img)(_n10##x,_p6##y,z,c), I[220] = (T)(img)(_n11##x,_p6##y,z,c), I[221] = (T)(img)(_n12##x,_p6##y,z,c), I[222] = (T)(img)(_n13##x,_p6##y,z,c), I[223] = (T)(img)(_n14##x,_p6##y,z,c), \ - I[224] = (T)(img)(_p13##x,_p5##y,z,c), I[225] = (T)(img)(_p12##x,_p5##y,z,c), I[226] = (T)(img)(_p11##x,_p5##y,z,c), I[227] = (T)(img)(_p10##x,_p5##y,z,c), I[228] = (T)(img)(_p9##x,_p5##y,z,c), I[229] = (T)(img)(_p8##x,_p5##y,z,c), I[230] = (T)(img)(_p7##x,_p5##y,z,c), I[231] = (T)(img)(_p6##x,_p5##y,z,c), I[232] = (T)(img)(_p5##x,_p5##y,z,c), I[233] = (T)(img)(_p4##x,_p5##y,z,c), I[234] = (T)(img)(_p3##x,_p5##y,z,c), I[235] = (T)(img)(_p2##x,_p5##y,z,c), I[236] = (T)(img)(_p1##x,_p5##y,z,c), I[237] = (T)(img)(x,_p5##y,z,c), I[238] = (T)(img)(_n1##x,_p5##y,z,c), I[239] = (T)(img)(_n2##x,_p5##y,z,c), I[240] = (T)(img)(_n3##x,_p5##y,z,c), I[241] = (T)(img)(_n4##x,_p5##y,z,c), I[242] = (T)(img)(_n5##x,_p5##y,z,c), I[243] = (T)(img)(_n6##x,_p5##y,z,c), I[244] = (T)(img)(_n7##x,_p5##y,z,c), I[245] = (T)(img)(_n8##x,_p5##y,z,c), I[246] = (T)(img)(_n9##x,_p5##y,z,c), I[247] = (T)(img)(_n10##x,_p5##y,z,c), I[248] = (T)(img)(_n11##x,_p5##y,z,c), I[249] = (T)(img)(_n12##x,_p5##y,z,c), I[250] = (T)(img)(_n13##x,_p5##y,z,c), I[251] = (T)(img)(_n14##x,_p5##y,z,c), \ - I[252] = (T)(img)(_p13##x,_p4##y,z,c), I[253] = (T)(img)(_p12##x,_p4##y,z,c), I[254] = (T)(img)(_p11##x,_p4##y,z,c), I[255] = (T)(img)(_p10##x,_p4##y,z,c), I[256] = (T)(img)(_p9##x,_p4##y,z,c), I[257] = (T)(img)(_p8##x,_p4##y,z,c), I[258] = (T)(img)(_p7##x,_p4##y,z,c), I[259] = (T)(img)(_p6##x,_p4##y,z,c), I[260] = (T)(img)(_p5##x,_p4##y,z,c), I[261] = (T)(img)(_p4##x,_p4##y,z,c), I[262] = (T)(img)(_p3##x,_p4##y,z,c), I[263] = (T)(img)(_p2##x,_p4##y,z,c), I[264] = (T)(img)(_p1##x,_p4##y,z,c), I[265] = (T)(img)(x,_p4##y,z,c), I[266] = (T)(img)(_n1##x,_p4##y,z,c), I[267] = (T)(img)(_n2##x,_p4##y,z,c), I[268] = (T)(img)(_n3##x,_p4##y,z,c), I[269] = (T)(img)(_n4##x,_p4##y,z,c), I[270] = (T)(img)(_n5##x,_p4##y,z,c), I[271] = (T)(img)(_n6##x,_p4##y,z,c), I[272] = (T)(img)(_n7##x,_p4##y,z,c), I[273] = (T)(img)(_n8##x,_p4##y,z,c), I[274] = (T)(img)(_n9##x,_p4##y,z,c), I[275] = (T)(img)(_n10##x,_p4##y,z,c), I[276] = (T)(img)(_n11##x,_p4##y,z,c), I[277] = (T)(img)(_n12##x,_p4##y,z,c), I[278] = (T)(img)(_n13##x,_p4##y,z,c), I[279] = (T)(img)(_n14##x,_p4##y,z,c), \ - I[280] = (T)(img)(_p13##x,_p3##y,z,c), I[281] = (T)(img)(_p12##x,_p3##y,z,c), I[282] = (T)(img)(_p11##x,_p3##y,z,c), I[283] = (T)(img)(_p10##x,_p3##y,z,c), I[284] = (T)(img)(_p9##x,_p3##y,z,c), I[285] = (T)(img)(_p8##x,_p3##y,z,c), I[286] = (T)(img)(_p7##x,_p3##y,z,c), I[287] = (T)(img)(_p6##x,_p3##y,z,c), I[288] = (T)(img)(_p5##x,_p3##y,z,c), I[289] = (T)(img)(_p4##x,_p3##y,z,c), I[290] = (T)(img)(_p3##x,_p3##y,z,c), I[291] = (T)(img)(_p2##x,_p3##y,z,c), I[292] = (T)(img)(_p1##x,_p3##y,z,c), I[293] = (T)(img)(x,_p3##y,z,c), I[294] = (T)(img)(_n1##x,_p3##y,z,c), I[295] = (T)(img)(_n2##x,_p3##y,z,c), I[296] = (T)(img)(_n3##x,_p3##y,z,c), I[297] = (T)(img)(_n4##x,_p3##y,z,c), I[298] = (T)(img)(_n5##x,_p3##y,z,c), I[299] = (T)(img)(_n6##x,_p3##y,z,c), I[300] = (T)(img)(_n7##x,_p3##y,z,c), I[301] = (T)(img)(_n8##x,_p3##y,z,c), I[302] = (T)(img)(_n9##x,_p3##y,z,c), I[303] = (T)(img)(_n10##x,_p3##y,z,c), I[304] = (T)(img)(_n11##x,_p3##y,z,c), I[305] = (T)(img)(_n12##x,_p3##y,z,c), I[306] = (T)(img)(_n13##x,_p3##y,z,c), I[307] = (T)(img)(_n14##x,_p3##y,z,c), \ - I[308] = (T)(img)(_p13##x,_p2##y,z,c), I[309] = (T)(img)(_p12##x,_p2##y,z,c), I[310] = (T)(img)(_p11##x,_p2##y,z,c), I[311] = (T)(img)(_p10##x,_p2##y,z,c), I[312] = (T)(img)(_p9##x,_p2##y,z,c), I[313] = (T)(img)(_p8##x,_p2##y,z,c), I[314] = (T)(img)(_p7##x,_p2##y,z,c), I[315] = (T)(img)(_p6##x,_p2##y,z,c), I[316] = (T)(img)(_p5##x,_p2##y,z,c), I[317] = (T)(img)(_p4##x,_p2##y,z,c), I[318] = (T)(img)(_p3##x,_p2##y,z,c), I[319] = (T)(img)(_p2##x,_p2##y,z,c), I[320] = (T)(img)(_p1##x,_p2##y,z,c), I[321] = (T)(img)(x,_p2##y,z,c), I[322] = (T)(img)(_n1##x,_p2##y,z,c), I[323] = (T)(img)(_n2##x,_p2##y,z,c), I[324] = (T)(img)(_n3##x,_p2##y,z,c), I[325] = (T)(img)(_n4##x,_p2##y,z,c), I[326] = (T)(img)(_n5##x,_p2##y,z,c), I[327] = (T)(img)(_n6##x,_p2##y,z,c), I[328] = (T)(img)(_n7##x,_p2##y,z,c), I[329] = (T)(img)(_n8##x,_p2##y,z,c), I[330] = (T)(img)(_n9##x,_p2##y,z,c), I[331] = (T)(img)(_n10##x,_p2##y,z,c), I[332] = (T)(img)(_n11##x,_p2##y,z,c), I[333] = (T)(img)(_n12##x,_p2##y,z,c), I[334] = (T)(img)(_n13##x,_p2##y,z,c), I[335] = (T)(img)(_n14##x,_p2##y,z,c), \ - I[336] = (T)(img)(_p13##x,_p1##y,z,c), I[337] = (T)(img)(_p12##x,_p1##y,z,c), I[338] = (T)(img)(_p11##x,_p1##y,z,c), I[339] = (T)(img)(_p10##x,_p1##y,z,c), I[340] = (T)(img)(_p9##x,_p1##y,z,c), I[341] = (T)(img)(_p8##x,_p1##y,z,c), I[342] = (T)(img)(_p7##x,_p1##y,z,c), I[343] = (T)(img)(_p6##x,_p1##y,z,c), I[344] = (T)(img)(_p5##x,_p1##y,z,c), I[345] = (T)(img)(_p4##x,_p1##y,z,c), I[346] = (T)(img)(_p3##x,_p1##y,z,c), I[347] = (T)(img)(_p2##x,_p1##y,z,c), I[348] = (T)(img)(_p1##x,_p1##y,z,c), I[349] = (T)(img)(x,_p1##y,z,c), I[350] = (T)(img)(_n1##x,_p1##y,z,c), I[351] = (T)(img)(_n2##x,_p1##y,z,c), I[352] = (T)(img)(_n3##x,_p1##y,z,c), I[353] = (T)(img)(_n4##x,_p1##y,z,c), I[354] = (T)(img)(_n5##x,_p1##y,z,c), I[355] = (T)(img)(_n6##x,_p1##y,z,c), I[356] = (T)(img)(_n7##x,_p1##y,z,c), I[357] = (T)(img)(_n8##x,_p1##y,z,c), I[358] = (T)(img)(_n9##x,_p1##y,z,c), I[359] = (T)(img)(_n10##x,_p1##y,z,c), I[360] = (T)(img)(_n11##x,_p1##y,z,c), I[361] = (T)(img)(_n12##x,_p1##y,z,c), I[362] = (T)(img)(_n13##x,_p1##y,z,c), I[363] = (T)(img)(_n14##x,_p1##y,z,c), \ - I[364] = (T)(img)(_p13##x,y,z,c), I[365] = (T)(img)(_p12##x,y,z,c), I[366] = (T)(img)(_p11##x,y,z,c), I[367] = (T)(img)(_p10##x,y,z,c), I[368] = (T)(img)(_p9##x,y,z,c), I[369] = (T)(img)(_p8##x,y,z,c), I[370] = (T)(img)(_p7##x,y,z,c), I[371] = (T)(img)(_p6##x,y,z,c), I[372] = (T)(img)(_p5##x,y,z,c), I[373] = (T)(img)(_p4##x,y,z,c), I[374] = (T)(img)(_p3##x,y,z,c), I[375] = (T)(img)(_p2##x,y,z,c), I[376] = (T)(img)(_p1##x,y,z,c), I[377] = (T)(img)(x,y,z,c), I[378] = (T)(img)(_n1##x,y,z,c), I[379] = (T)(img)(_n2##x,y,z,c), I[380] = (T)(img)(_n3##x,y,z,c), I[381] = (T)(img)(_n4##x,y,z,c), I[382] = (T)(img)(_n5##x,y,z,c), I[383] = (T)(img)(_n6##x,y,z,c), I[384] = (T)(img)(_n7##x,y,z,c), I[385] = (T)(img)(_n8##x,y,z,c), I[386] = (T)(img)(_n9##x,y,z,c), I[387] = (T)(img)(_n10##x,y,z,c), I[388] = (T)(img)(_n11##x,y,z,c), I[389] = (T)(img)(_n12##x,y,z,c), I[390] = (T)(img)(_n13##x,y,z,c), I[391] = (T)(img)(_n14##x,y,z,c), \ - I[392] = (T)(img)(_p13##x,_n1##y,z,c), I[393] = (T)(img)(_p12##x,_n1##y,z,c), I[394] = (T)(img)(_p11##x,_n1##y,z,c), I[395] = (T)(img)(_p10##x,_n1##y,z,c), I[396] = (T)(img)(_p9##x,_n1##y,z,c), I[397] = (T)(img)(_p8##x,_n1##y,z,c), I[398] = (T)(img)(_p7##x,_n1##y,z,c), I[399] = (T)(img)(_p6##x,_n1##y,z,c), I[400] = (T)(img)(_p5##x,_n1##y,z,c), I[401] = (T)(img)(_p4##x,_n1##y,z,c), I[402] = (T)(img)(_p3##x,_n1##y,z,c), I[403] = (T)(img)(_p2##x,_n1##y,z,c), I[404] = (T)(img)(_p1##x,_n1##y,z,c), I[405] = (T)(img)(x,_n1##y,z,c), I[406] = (T)(img)(_n1##x,_n1##y,z,c), I[407] = (T)(img)(_n2##x,_n1##y,z,c), I[408] = (T)(img)(_n3##x,_n1##y,z,c), I[409] = (T)(img)(_n4##x,_n1##y,z,c), I[410] = (T)(img)(_n5##x,_n1##y,z,c), I[411] = (T)(img)(_n6##x,_n1##y,z,c), I[412] = (T)(img)(_n7##x,_n1##y,z,c), I[413] = (T)(img)(_n8##x,_n1##y,z,c), I[414] = (T)(img)(_n9##x,_n1##y,z,c), I[415] = (T)(img)(_n10##x,_n1##y,z,c), I[416] = (T)(img)(_n11##x,_n1##y,z,c), I[417] = (T)(img)(_n12##x,_n1##y,z,c), I[418] = (T)(img)(_n13##x,_n1##y,z,c), I[419] = (T)(img)(_n14##x,_n1##y,z,c), \ - I[420] = (T)(img)(_p13##x,_n2##y,z,c), I[421] = (T)(img)(_p12##x,_n2##y,z,c), I[422] = (T)(img)(_p11##x,_n2##y,z,c), I[423] = (T)(img)(_p10##x,_n2##y,z,c), I[424] = (T)(img)(_p9##x,_n2##y,z,c), I[425] = (T)(img)(_p8##x,_n2##y,z,c), I[426] = (T)(img)(_p7##x,_n2##y,z,c), I[427] = (T)(img)(_p6##x,_n2##y,z,c), I[428] = (T)(img)(_p5##x,_n2##y,z,c), I[429] = (T)(img)(_p4##x,_n2##y,z,c), I[430] = (T)(img)(_p3##x,_n2##y,z,c), I[431] = (T)(img)(_p2##x,_n2##y,z,c), I[432] = (T)(img)(_p1##x,_n2##y,z,c), I[433] = (T)(img)(x,_n2##y,z,c), I[434] = (T)(img)(_n1##x,_n2##y,z,c), I[435] = (T)(img)(_n2##x,_n2##y,z,c), I[436] = (T)(img)(_n3##x,_n2##y,z,c), I[437] = (T)(img)(_n4##x,_n2##y,z,c), I[438] = (T)(img)(_n5##x,_n2##y,z,c), I[439] = (T)(img)(_n6##x,_n2##y,z,c), I[440] = (T)(img)(_n7##x,_n2##y,z,c), I[441] = (T)(img)(_n8##x,_n2##y,z,c), I[442] = (T)(img)(_n9##x,_n2##y,z,c), I[443] = (T)(img)(_n10##x,_n2##y,z,c), I[444] = (T)(img)(_n11##x,_n2##y,z,c), I[445] = (T)(img)(_n12##x,_n2##y,z,c), I[446] = (T)(img)(_n13##x,_n2##y,z,c), I[447] = (T)(img)(_n14##x,_n2##y,z,c), \ - I[448] = (T)(img)(_p13##x,_n3##y,z,c), I[449] = (T)(img)(_p12##x,_n3##y,z,c), I[450] = (T)(img)(_p11##x,_n3##y,z,c), I[451] = (T)(img)(_p10##x,_n3##y,z,c), I[452] = (T)(img)(_p9##x,_n3##y,z,c), I[453] = (T)(img)(_p8##x,_n3##y,z,c), I[454] = (T)(img)(_p7##x,_n3##y,z,c), I[455] = (T)(img)(_p6##x,_n3##y,z,c), I[456] = (T)(img)(_p5##x,_n3##y,z,c), I[457] = (T)(img)(_p4##x,_n3##y,z,c), I[458] = (T)(img)(_p3##x,_n3##y,z,c), I[459] = (T)(img)(_p2##x,_n3##y,z,c), I[460] = (T)(img)(_p1##x,_n3##y,z,c), I[461] = (T)(img)(x,_n3##y,z,c), I[462] = (T)(img)(_n1##x,_n3##y,z,c), I[463] = (T)(img)(_n2##x,_n3##y,z,c), I[464] = (T)(img)(_n3##x,_n3##y,z,c), I[465] = (T)(img)(_n4##x,_n3##y,z,c), I[466] = (T)(img)(_n5##x,_n3##y,z,c), I[467] = (T)(img)(_n6##x,_n3##y,z,c), I[468] = (T)(img)(_n7##x,_n3##y,z,c), I[469] = (T)(img)(_n8##x,_n3##y,z,c), I[470] = (T)(img)(_n9##x,_n3##y,z,c), I[471] = (T)(img)(_n10##x,_n3##y,z,c), I[472] = (T)(img)(_n11##x,_n3##y,z,c), I[473] = (T)(img)(_n12##x,_n3##y,z,c), I[474] = (T)(img)(_n13##x,_n3##y,z,c), I[475] = (T)(img)(_n14##x,_n3##y,z,c), \ - I[476] = (T)(img)(_p13##x,_n4##y,z,c), I[477] = (T)(img)(_p12##x,_n4##y,z,c), I[478] = (T)(img)(_p11##x,_n4##y,z,c), I[479] = (T)(img)(_p10##x,_n4##y,z,c), I[480] = (T)(img)(_p9##x,_n4##y,z,c), I[481] = (T)(img)(_p8##x,_n4##y,z,c), I[482] = (T)(img)(_p7##x,_n4##y,z,c), I[483] = (T)(img)(_p6##x,_n4##y,z,c), I[484] = (T)(img)(_p5##x,_n4##y,z,c), I[485] = (T)(img)(_p4##x,_n4##y,z,c), I[486] = (T)(img)(_p3##x,_n4##y,z,c), I[487] = (T)(img)(_p2##x,_n4##y,z,c), I[488] = (T)(img)(_p1##x,_n4##y,z,c), I[489] = (T)(img)(x,_n4##y,z,c), I[490] = (T)(img)(_n1##x,_n4##y,z,c), I[491] = (T)(img)(_n2##x,_n4##y,z,c), I[492] = (T)(img)(_n3##x,_n4##y,z,c), I[493] = (T)(img)(_n4##x,_n4##y,z,c), I[494] = (T)(img)(_n5##x,_n4##y,z,c), I[495] = (T)(img)(_n6##x,_n4##y,z,c), I[496] = (T)(img)(_n7##x,_n4##y,z,c), I[497] = (T)(img)(_n8##x,_n4##y,z,c), I[498] = (T)(img)(_n9##x,_n4##y,z,c), I[499] = (T)(img)(_n10##x,_n4##y,z,c), I[500] = (T)(img)(_n11##x,_n4##y,z,c), I[501] = (T)(img)(_n12##x,_n4##y,z,c), I[502] = (T)(img)(_n13##x,_n4##y,z,c), I[503] = (T)(img)(_n14##x,_n4##y,z,c), \ - I[504] = (T)(img)(_p13##x,_n5##y,z,c), I[505] = (T)(img)(_p12##x,_n5##y,z,c), I[506] = (T)(img)(_p11##x,_n5##y,z,c), I[507] = (T)(img)(_p10##x,_n5##y,z,c), I[508] = (T)(img)(_p9##x,_n5##y,z,c), I[509] = (T)(img)(_p8##x,_n5##y,z,c), I[510] = (T)(img)(_p7##x,_n5##y,z,c), I[511] = (T)(img)(_p6##x,_n5##y,z,c), I[512] = (T)(img)(_p5##x,_n5##y,z,c), I[513] = (T)(img)(_p4##x,_n5##y,z,c), I[514] = (T)(img)(_p3##x,_n5##y,z,c), I[515] = (T)(img)(_p2##x,_n5##y,z,c), I[516] = (T)(img)(_p1##x,_n5##y,z,c), I[517] = (T)(img)(x,_n5##y,z,c), I[518] = (T)(img)(_n1##x,_n5##y,z,c), I[519] = (T)(img)(_n2##x,_n5##y,z,c), I[520] = (T)(img)(_n3##x,_n5##y,z,c), I[521] = (T)(img)(_n4##x,_n5##y,z,c), I[522] = (T)(img)(_n5##x,_n5##y,z,c), I[523] = (T)(img)(_n6##x,_n5##y,z,c), I[524] = (T)(img)(_n7##x,_n5##y,z,c), I[525] = (T)(img)(_n8##x,_n5##y,z,c), I[526] = (T)(img)(_n9##x,_n5##y,z,c), I[527] = (T)(img)(_n10##x,_n5##y,z,c), I[528] = (T)(img)(_n11##x,_n5##y,z,c), I[529] = (T)(img)(_n12##x,_n5##y,z,c), I[530] = (T)(img)(_n13##x,_n5##y,z,c), I[531] = (T)(img)(_n14##x,_n5##y,z,c), \ - I[532] = (T)(img)(_p13##x,_n6##y,z,c), I[533] = (T)(img)(_p12##x,_n6##y,z,c), I[534] = (T)(img)(_p11##x,_n6##y,z,c), I[535] = (T)(img)(_p10##x,_n6##y,z,c), I[536] = (T)(img)(_p9##x,_n6##y,z,c), I[537] = (T)(img)(_p8##x,_n6##y,z,c), I[538] = (T)(img)(_p7##x,_n6##y,z,c), I[539] = (T)(img)(_p6##x,_n6##y,z,c), I[540] = (T)(img)(_p5##x,_n6##y,z,c), I[541] = (T)(img)(_p4##x,_n6##y,z,c), I[542] = (T)(img)(_p3##x,_n6##y,z,c), I[543] = (T)(img)(_p2##x,_n6##y,z,c), I[544] = (T)(img)(_p1##x,_n6##y,z,c), I[545] = (T)(img)(x,_n6##y,z,c), I[546] = (T)(img)(_n1##x,_n6##y,z,c), I[547] = (T)(img)(_n2##x,_n6##y,z,c), I[548] = (T)(img)(_n3##x,_n6##y,z,c), I[549] = (T)(img)(_n4##x,_n6##y,z,c), I[550] = (T)(img)(_n5##x,_n6##y,z,c), I[551] = (T)(img)(_n6##x,_n6##y,z,c), I[552] = (T)(img)(_n7##x,_n6##y,z,c), I[553] = (T)(img)(_n8##x,_n6##y,z,c), I[554] = (T)(img)(_n9##x,_n6##y,z,c), I[555] = (T)(img)(_n10##x,_n6##y,z,c), I[556] = (T)(img)(_n11##x,_n6##y,z,c), I[557] = (T)(img)(_n12##x,_n6##y,z,c), I[558] = (T)(img)(_n13##x,_n6##y,z,c), I[559] = (T)(img)(_n14##x,_n6##y,z,c), \ - I[560] = (T)(img)(_p13##x,_n7##y,z,c), I[561] = (T)(img)(_p12##x,_n7##y,z,c), I[562] = (T)(img)(_p11##x,_n7##y,z,c), I[563] = (T)(img)(_p10##x,_n7##y,z,c), I[564] = (T)(img)(_p9##x,_n7##y,z,c), I[565] = (T)(img)(_p8##x,_n7##y,z,c), I[566] = (T)(img)(_p7##x,_n7##y,z,c), I[567] = (T)(img)(_p6##x,_n7##y,z,c), I[568] = (T)(img)(_p5##x,_n7##y,z,c), I[569] = (T)(img)(_p4##x,_n7##y,z,c), I[570] = (T)(img)(_p3##x,_n7##y,z,c), I[571] = (T)(img)(_p2##x,_n7##y,z,c), I[572] = (T)(img)(_p1##x,_n7##y,z,c), I[573] = (T)(img)(x,_n7##y,z,c), I[574] = (T)(img)(_n1##x,_n7##y,z,c), I[575] = (T)(img)(_n2##x,_n7##y,z,c), I[576] = (T)(img)(_n3##x,_n7##y,z,c), I[577] = (T)(img)(_n4##x,_n7##y,z,c), I[578] = (T)(img)(_n5##x,_n7##y,z,c), I[579] = (T)(img)(_n6##x,_n7##y,z,c), I[580] = (T)(img)(_n7##x,_n7##y,z,c), I[581] = (T)(img)(_n8##x,_n7##y,z,c), I[582] = (T)(img)(_n9##x,_n7##y,z,c), I[583] = (T)(img)(_n10##x,_n7##y,z,c), I[584] = (T)(img)(_n11##x,_n7##y,z,c), I[585] = (T)(img)(_n12##x,_n7##y,z,c), I[586] = (T)(img)(_n13##x,_n7##y,z,c), I[587] = (T)(img)(_n14##x,_n7##y,z,c), \ - I[588] = (T)(img)(_p13##x,_n8##y,z,c), I[589] = (T)(img)(_p12##x,_n8##y,z,c), I[590] = (T)(img)(_p11##x,_n8##y,z,c), I[591] = (T)(img)(_p10##x,_n8##y,z,c), I[592] = (T)(img)(_p9##x,_n8##y,z,c), I[593] = (T)(img)(_p8##x,_n8##y,z,c), I[594] = (T)(img)(_p7##x,_n8##y,z,c), I[595] = (T)(img)(_p6##x,_n8##y,z,c), I[596] = (T)(img)(_p5##x,_n8##y,z,c), I[597] = (T)(img)(_p4##x,_n8##y,z,c), I[598] = (T)(img)(_p3##x,_n8##y,z,c), I[599] = (T)(img)(_p2##x,_n8##y,z,c), I[600] = (T)(img)(_p1##x,_n8##y,z,c), I[601] = (T)(img)(x,_n8##y,z,c), I[602] = (T)(img)(_n1##x,_n8##y,z,c), I[603] = (T)(img)(_n2##x,_n8##y,z,c), I[604] = (T)(img)(_n3##x,_n8##y,z,c), I[605] = (T)(img)(_n4##x,_n8##y,z,c), I[606] = (T)(img)(_n5##x,_n8##y,z,c), I[607] = (T)(img)(_n6##x,_n8##y,z,c), I[608] = (T)(img)(_n7##x,_n8##y,z,c), I[609] = (T)(img)(_n8##x,_n8##y,z,c), I[610] = (T)(img)(_n9##x,_n8##y,z,c), I[611] = (T)(img)(_n10##x,_n8##y,z,c), I[612] = (T)(img)(_n11##x,_n8##y,z,c), I[613] = (T)(img)(_n12##x,_n8##y,z,c), I[614] = (T)(img)(_n13##x,_n8##y,z,c), I[615] = (T)(img)(_n14##x,_n8##y,z,c), \ - I[616] = (T)(img)(_p13##x,_n9##y,z,c), I[617] = (T)(img)(_p12##x,_n9##y,z,c), I[618] = (T)(img)(_p11##x,_n9##y,z,c), I[619] = (T)(img)(_p10##x,_n9##y,z,c), I[620] = (T)(img)(_p9##x,_n9##y,z,c), I[621] = (T)(img)(_p8##x,_n9##y,z,c), I[622] = (T)(img)(_p7##x,_n9##y,z,c), I[623] = (T)(img)(_p6##x,_n9##y,z,c), I[624] = (T)(img)(_p5##x,_n9##y,z,c), I[625] = (T)(img)(_p4##x,_n9##y,z,c), I[626] = (T)(img)(_p3##x,_n9##y,z,c), I[627] = (T)(img)(_p2##x,_n9##y,z,c), I[628] = (T)(img)(_p1##x,_n9##y,z,c), I[629] = (T)(img)(x,_n9##y,z,c), I[630] = (T)(img)(_n1##x,_n9##y,z,c), I[631] = (T)(img)(_n2##x,_n9##y,z,c), I[632] = (T)(img)(_n3##x,_n9##y,z,c), I[633] = (T)(img)(_n4##x,_n9##y,z,c), I[634] = (T)(img)(_n5##x,_n9##y,z,c), I[635] = (T)(img)(_n6##x,_n9##y,z,c), I[636] = (T)(img)(_n7##x,_n9##y,z,c), I[637] = (T)(img)(_n8##x,_n9##y,z,c), I[638] = (T)(img)(_n9##x,_n9##y,z,c), I[639] = (T)(img)(_n10##x,_n9##y,z,c), I[640] = (T)(img)(_n11##x,_n9##y,z,c), I[641] = (T)(img)(_n12##x,_n9##y,z,c), I[642] = (T)(img)(_n13##x,_n9##y,z,c), I[643] = (T)(img)(_n14##x,_n9##y,z,c), \ - I[644] = (T)(img)(_p13##x,_n10##y,z,c), I[645] = (T)(img)(_p12##x,_n10##y,z,c), I[646] = (T)(img)(_p11##x,_n10##y,z,c), I[647] = (T)(img)(_p10##x,_n10##y,z,c), I[648] = (T)(img)(_p9##x,_n10##y,z,c), I[649] = (T)(img)(_p8##x,_n10##y,z,c), I[650] = (T)(img)(_p7##x,_n10##y,z,c), I[651] = (T)(img)(_p6##x,_n10##y,z,c), I[652] = (T)(img)(_p5##x,_n10##y,z,c), I[653] = (T)(img)(_p4##x,_n10##y,z,c), I[654] = (T)(img)(_p3##x,_n10##y,z,c), I[655] = (T)(img)(_p2##x,_n10##y,z,c), I[656] = (T)(img)(_p1##x,_n10##y,z,c), I[657] = (T)(img)(x,_n10##y,z,c), I[658] = (T)(img)(_n1##x,_n10##y,z,c), I[659] = (T)(img)(_n2##x,_n10##y,z,c), I[660] = (T)(img)(_n3##x,_n10##y,z,c), I[661] = (T)(img)(_n4##x,_n10##y,z,c), I[662] = (T)(img)(_n5##x,_n10##y,z,c), I[663] = (T)(img)(_n6##x,_n10##y,z,c), I[664] = (T)(img)(_n7##x,_n10##y,z,c), I[665] = (T)(img)(_n8##x,_n10##y,z,c), I[666] = (T)(img)(_n9##x,_n10##y,z,c), I[667] = (T)(img)(_n10##x,_n10##y,z,c), I[668] = (T)(img)(_n11##x,_n10##y,z,c), I[669] = (T)(img)(_n12##x,_n10##y,z,c), I[670] = (T)(img)(_n13##x,_n10##y,z,c), I[671] = (T)(img)(_n14##x,_n10##y,z,c), \ - I[672] = (T)(img)(_p13##x,_n11##y,z,c), I[673] = (T)(img)(_p12##x,_n11##y,z,c), I[674] = (T)(img)(_p11##x,_n11##y,z,c), I[675] = (T)(img)(_p10##x,_n11##y,z,c), I[676] = (T)(img)(_p9##x,_n11##y,z,c), I[677] = (T)(img)(_p8##x,_n11##y,z,c), I[678] = (T)(img)(_p7##x,_n11##y,z,c), I[679] = (T)(img)(_p6##x,_n11##y,z,c), I[680] = (T)(img)(_p5##x,_n11##y,z,c), I[681] = (T)(img)(_p4##x,_n11##y,z,c), I[682] = (T)(img)(_p3##x,_n11##y,z,c), I[683] = (T)(img)(_p2##x,_n11##y,z,c), I[684] = (T)(img)(_p1##x,_n11##y,z,c), I[685] = (T)(img)(x,_n11##y,z,c), I[686] = (T)(img)(_n1##x,_n11##y,z,c), I[687] = (T)(img)(_n2##x,_n11##y,z,c), I[688] = (T)(img)(_n3##x,_n11##y,z,c), I[689] = (T)(img)(_n4##x,_n11##y,z,c), I[690] = (T)(img)(_n5##x,_n11##y,z,c), I[691] = (T)(img)(_n6##x,_n11##y,z,c), I[692] = (T)(img)(_n7##x,_n11##y,z,c), I[693] = (T)(img)(_n8##x,_n11##y,z,c), I[694] = (T)(img)(_n9##x,_n11##y,z,c), I[695] = (T)(img)(_n10##x,_n11##y,z,c), I[696] = (T)(img)(_n11##x,_n11##y,z,c), I[697] = (T)(img)(_n12##x,_n11##y,z,c), I[698] = (T)(img)(_n13##x,_n11##y,z,c), I[699] = (T)(img)(_n14##x,_n11##y,z,c), \ - I[700] = (T)(img)(_p13##x,_n12##y,z,c), I[701] = (T)(img)(_p12##x,_n12##y,z,c), I[702] = (T)(img)(_p11##x,_n12##y,z,c), I[703] = (T)(img)(_p10##x,_n12##y,z,c), I[704] = (T)(img)(_p9##x,_n12##y,z,c), I[705] = (T)(img)(_p8##x,_n12##y,z,c), I[706] = (T)(img)(_p7##x,_n12##y,z,c), I[707] = (T)(img)(_p6##x,_n12##y,z,c), I[708] = (T)(img)(_p5##x,_n12##y,z,c), I[709] = (T)(img)(_p4##x,_n12##y,z,c), I[710] = (T)(img)(_p3##x,_n12##y,z,c), I[711] = (T)(img)(_p2##x,_n12##y,z,c), I[712] = (T)(img)(_p1##x,_n12##y,z,c), I[713] = (T)(img)(x,_n12##y,z,c), I[714] = (T)(img)(_n1##x,_n12##y,z,c), I[715] = (T)(img)(_n2##x,_n12##y,z,c), I[716] = (T)(img)(_n3##x,_n12##y,z,c), I[717] = (T)(img)(_n4##x,_n12##y,z,c), I[718] = (T)(img)(_n5##x,_n12##y,z,c), I[719] = (T)(img)(_n6##x,_n12##y,z,c), I[720] = (T)(img)(_n7##x,_n12##y,z,c), I[721] = (T)(img)(_n8##x,_n12##y,z,c), I[722] = (T)(img)(_n9##x,_n12##y,z,c), I[723] = (T)(img)(_n10##x,_n12##y,z,c), I[724] = (T)(img)(_n11##x,_n12##y,z,c), I[725] = (T)(img)(_n12##x,_n12##y,z,c), I[726] = (T)(img)(_n13##x,_n12##y,z,c), I[727] = (T)(img)(_n14##x,_n12##y,z,c), \ - I[728] = (T)(img)(_p13##x,_n13##y,z,c), I[729] = (T)(img)(_p12##x,_n13##y,z,c), I[730] = (T)(img)(_p11##x,_n13##y,z,c), I[731] = (T)(img)(_p10##x,_n13##y,z,c), I[732] = (T)(img)(_p9##x,_n13##y,z,c), I[733] = (T)(img)(_p8##x,_n13##y,z,c), I[734] = (T)(img)(_p7##x,_n13##y,z,c), I[735] = (T)(img)(_p6##x,_n13##y,z,c), I[736] = (T)(img)(_p5##x,_n13##y,z,c), I[737] = (T)(img)(_p4##x,_n13##y,z,c), I[738] = (T)(img)(_p3##x,_n13##y,z,c), I[739] = (T)(img)(_p2##x,_n13##y,z,c), I[740] = (T)(img)(_p1##x,_n13##y,z,c), I[741] = (T)(img)(x,_n13##y,z,c), I[742] = (T)(img)(_n1##x,_n13##y,z,c), I[743] = (T)(img)(_n2##x,_n13##y,z,c), I[744] = (T)(img)(_n3##x,_n13##y,z,c), I[745] = (T)(img)(_n4##x,_n13##y,z,c), I[746] = (T)(img)(_n5##x,_n13##y,z,c), I[747] = (T)(img)(_n6##x,_n13##y,z,c), I[748] = (T)(img)(_n7##x,_n13##y,z,c), I[749] = (T)(img)(_n8##x,_n13##y,z,c), I[750] = (T)(img)(_n9##x,_n13##y,z,c), I[751] = (T)(img)(_n10##x,_n13##y,z,c), I[752] = (T)(img)(_n11##x,_n13##y,z,c), I[753] = (T)(img)(_n12##x,_n13##y,z,c), I[754] = (T)(img)(_n13##x,_n13##y,z,c), I[755] = (T)(img)(_n14##x,_n13##y,z,c), \ - I[756] = (T)(img)(_p13##x,_n14##y,z,c), I[757] = (T)(img)(_p12##x,_n14##y,z,c), I[758] = (T)(img)(_p11##x,_n14##y,z,c), I[759] = (T)(img)(_p10##x,_n14##y,z,c), I[760] = (T)(img)(_p9##x,_n14##y,z,c), I[761] = (T)(img)(_p8##x,_n14##y,z,c), I[762] = (T)(img)(_p7##x,_n14##y,z,c), I[763] = (T)(img)(_p6##x,_n14##y,z,c), I[764] = (T)(img)(_p5##x,_n14##y,z,c), I[765] = (T)(img)(_p4##x,_n14##y,z,c), I[766] = (T)(img)(_p3##x,_n14##y,z,c), I[767] = (T)(img)(_p2##x,_n14##y,z,c), I[768] = (T)(img)(_p1##x,_n14##y,z,c), I[769] = (T)(img)(x,_n14##y,z,c), I[770] = (T)(img)(_n1##x,_n14##y,z,c), I[771] = (T)(img)(_n2##x,_n14##y,z,c), I[772] = (T)(img)(_n3##x,_n14##y,z,c), I[773] = (T)(img)(_n4##x,_n14##y,z,c), I[774] = (T)(img)(_n5##x,_n14##y,z,c), I[775] = (T)(img)(_n6##x,_n14##y,z,c), I[776] = (T)(img)(_n7##x,_n14##y,z,c), I[777] = (T)(img)(_n8##x,_n14##y,z,c), I[778] = (T)(img)(_n9##x,_n14##y,z,c), I[779] = (T)(img)(_n10##x,_n14##y,z,c), I[780] = (T)(img)(_n11##x,_n14##y,z,c), I[781] = (T)(img)(_n12##x,_n14##y,z,c), I[782] = (T)(img)(_n13##x,_n14##y,z,c), I[783] = (T)(img)(_n14##x,_n14##y,z,c); - -// Define 29x29 loop macros -//------------------------- -#define cimg_for29(bound,i) for (int i = 0, \ - _p14##i = 0, _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13, \ - _n14##i = 14>=(int)(bound)?(int)(bound)-1:14; \ - _n14##i<(int)(bound) || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i) - -#define cimg_for29X(img,x) cimg_for29((img)._width,x) -#define cimg_for29Y(img,y) cimg_for29((img)._height,y) -#define cimg_for29Z(img,z) cimg_for29((img)._depth,z) -#define cimg_for29C(img,c) cimg_for29((img)._spectrum,c) -#define cimg_for29XY(img,x,y) cimg_for29Y(img,y) cimg_for29X(img,x) -#define cimg_for29XZ(img,x,z) cimg_for29Z(img,z) cimg_for29X(img,x) -#define cimg_for29XC(img,x,c) cimg_for29C(img,c) cimg_for29X(img,x) -#define cimg_for29YZ(img,y,z) cimg_for29Z(img,z) cimg_for29Y(img,y) -#define cimg_for29YC(img,y,c) cimg_for29C(img,c) cimg_for29Y(img,y) -#define cimg_for29ZC(img,z,c) cimg_for29C(img,c) cimg_for29Z(img,z) -#define cimg_for29XYZ(img,x,y,z) cimg_for29Z(img,z) cimg_for29XY(img,x,y) -#define cimg_for29XZC(img,x,z,c) cimg_for29C(img,c) cimg_for29XZ(img,x,z) -#define cimg_for29YZC(img,y,z,c) cimg_for29C(img,c) cimg_for29YZ(img,y,z) -#define cimg_for29XYZC(img,x,y,z,c) cimg_for29C(img,c) cimg_for29XYZ(img,x,y,z) - -#define cimg_for_in29(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p14##i = i-14<0?0:i-14, \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13, \ - _n14##i = i+14>=(int)(bound)?(int)(bound)-1:i+14; \ - i<=(int)(i1) && (_n14##i<(int)(bound) || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i) - -#define cimg_for_in29X(img,x0,x1,x) cimg_for_in29((img)._width,x0,x1,x) -#define cimg_for_in29Y(img,y0,y1,y) cimg_for_in29((img)._height,y0,y1,y) -#define cimg_for_in29Z(img,z0,z1,z) cimg_for_in29((img)._depth,z0,z1,z) -#define cimg_for_in29C(img,c0,c1,c) cimg_for_in29((img)._spectrum,c0,c1,c) -#define cimg_for_in29XY(img,x0,y0,x1,y1,x,y) cimg_for_in29Y(img,y0,y1,y) cimg_for_in29X(img,x0,x1,x) -#define cimg_for_in29XZ(img,x0,z0,x1,z1,x,z) cimg_for_in29Z(img,z0,z1,z) cimg_for_in29X(img,x0,x1,x) -#define cimg_for_in29XC(img,x0,c0,x1,c1,x,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29X(img,x0,x1,x) -#define cimg_for_in29YZ(img,y0,z0,y1,z1,y,z) cimg_for_in29Z(img,z0,z1,z) cimg_for_in29Y(img,y0,y1,y) -#define cimg_for_in29YC(img,y0,c0,y1,c1,y,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29Y(img,y0,y1,y) -#define cimg_for_in29ZC(img,z0,c0,z1,c1,z,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29Z(img,z0,z1,z) -#define cimg_for_in29XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in29Z(img,z0,z1,z) cimg_for_in29XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in29XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in29YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in29XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in29C(img,c0,c1,c) cimg_for_in29XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for29x29(img,x,y,z,c,I,T) \ - cimg_for29((img)._height,y) for (int x = 0, \ - _p14##x = 0, _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = 13>=((img)._width)?(img).width()-1:13, \ - _n14##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = I[14] = (T)(img)(0,_p14##y,z,c)), \ - (I[29] = I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = (T)(img)(0,_p13##y,z,c)), \ - (I[58] = I[59] = I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = (T)(img)(0,_p12##y,z,c)), \ - (I[87] = I[88] = I[89] = I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = (T)(img)(0,_p11##y,z,c)), \ - (I[116] = I[117] = I[118] = I[119] = I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = I[128] = I[129] = I[130] = (T)(img)(0,_p10##y,z,c)), \ - (I[145] = I[146] = I[147] = I[148] = I[149] = I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = (T)(img)(0,_p9##y,z,c)), \ - (I[174] = I[175] = I[176] = I[177] = I[178] = I[179] = I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = (T)(img)(0,_p8##y,z,c)), \ - (I[203] = I[204] = I[205] = I[206] = I[207] = I[208] = I[209] = I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = (T)(img)(0,_p7##y,z,c)), \ - (I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = (T)(img)(0,_p6##y,z,c)), \ - (I[261] = I[262] = I[263] = I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = (T)(img)(0,_p5##y,z,c)), \ - (I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = I[297] = I[298] = I[299] = I[300] = I[301] = I[302] = I[303] = I[304] = (T)(img)(0,_p4##y,z,c)), \ - (I[319] = I[320] = I[321] = I[322] = I[323] = I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = I[333] = (T)(img)(0,_p3##y,z,c)), \ - (I[348] = I[349] = I[350] = I[351] = I[352] = I[353] = I[354] = I[355] = I[356] = I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = (T)(img)(0,_p2##y,z,c)), \ - (I[377] = I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = I[388] = I[389] = I[390] = I[391] = (T)(img)(0,_p1##y,z,c)), \ - (I[406] = I[407] = I[408] = I[409] = I[410] = I[411] = I[412] = I[413] = I[414] = I[415] = I[416] = I[417] = I[418] = I[419] = I[420] = (T)(img)(0,y,z,c)), \ - (I[435] = I[436] = I[437] = I[438] = I[439] = I[440] = I[441] = I[442] = I[443] = I[444] = I[445] = I[446] = I[447] = I[448] = I[449] = (T)(img)(0,_n1##y,z,c)), \ - (I[464] = I[465] = I[466] = I[467] = I[468] = I[469] = I[470] = I[471] = I[472] = I[473] = I[474] = I[475] = I[476] = I[477] = I[478] = (T)(img)(0,_n2##y,z,c)), \ - (I[493] = I[494] = I[495] = I[496] = I[497] = I[498] = I[499] = I[500] = I[501] = I[502] = I[503] = I[504] = I[505] = I[506] = I[507] = (T)(img)(0,_n3##y,z,c)), \ - (I[522] = I[523] = I[524] = I[525] = I[526] = I[527] = I[528] = I[529] = I[530] = I[531] = I[532] = I[533] = I[534] = I[535] = I[536] = (T)(img)(0,_n4##y,z,c)), \ - (I[551] = I[552] = I[553] = I[554] = I[555] = I[556] = I[557] = I[558] = I[559] = I[560] = I[561] = I[562] = I[563] = I[564] = I[565] = (T)(img)(0,_n5##y,z,c)), \ - (I[580] = I[581] = I[582] = I[583] = I[584] = I[585] = I[586] = I[587] = I[588] = I[589] = I[590] = I[591] = I[592] = I[593] = I[594] = (T)(img)(0,_n6##y,z,c)), \ - (I[609] = I[610] = I[611] = I[612] = I[613] = I[614] = I[615] = I[616] = I[617] = I[618] = I[619] = I[620] = I[621] = I[622] = I[623] = (T)(img)(0,_n7##y,z,c)), \ - (I[638] = I[639] = I[640] = I[641] = I[642] = I[643] = I[644] = I[645] = I[646] = I[647] = I[648] = I[649] = I[650] = I[651] = I[652] = (T)(img)(0,_n8##y,z,c)), \ - (I[667] = I[668] = I[669] = I[670] = I[671] = I[672] = I[673] = I[674] = I[675] = I[676] = I[677] = I[678] = I[679] = I[680] = I[681] = (T)(img)(0,_n9##y,z,c)), \ - (I[696] = I[697] = I[698] = I[699] = I[700] = I[701] = I[702] = I[703] = I[704] = I[705] = I[706] = I[707] = I[708] = I[709] = I[710] = (T)(img)(0,_n10##y,z,c)), \ - (I[725] = I[726] = I[727] = I[728] = I[729] = I[730] = I[731] = I[732] = I[733] = I[734] = I[735] = I[736] = I[737] = I[738] = I[739] = (T)(img)(0,_n11##y,z,c)), \ - (I[754] = I[755] = I[756] = I[757] = I[758] = I[759] = I[760] = I[761] = I[762] = I[763] = I[764] = I[765] = I[766] = I[767] = I[768] = (T)(img)(0,_n12##y,z,c)), \ - (I[783] = I[784] = I[785] = I[786] = I[787] = I[788] = I[789] = I[790] = I[791] = I[792] = I[793] = I[794] = I[795] = I[796] = I[797] = (T)(img)(0,_n13##y,z,c)), \ - (I[812] = I[813] = I[814] = I[815] = I[816] = I[817] = I[818] = I[819] = I[820] = I[821] = I[822] = I[823] = I[824] = I[825] = I[826] = (T)(img)(0,_n14##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[44] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[73] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[102] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[131] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[160] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[218] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[305] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[334] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[392] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[421] = (T)(img)(_n1##x,y,z,c)), \ - (I[450] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[479] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[508] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[537] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[566] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[595] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[624] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[653] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[682] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[711] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[740] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[769] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[798] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[827] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[45] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[74] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[103] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[132] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[161] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[219] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[306] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[335] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[393] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[422] = (T)(img)(_n2##x,y,z,c)), \ - (I[451] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[480] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[509] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[538] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[567] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[596] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[625] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[654] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[683] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[712] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[741] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[770] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[799] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[828] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[46] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[75] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[104] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[133] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[162] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[220] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[307] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[336] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[394] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[423] = (T)(img)(_n3##x,y,z,c)), \ - (I[452] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[481] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[510] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[539] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[568] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[597] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[626] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[655] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[684] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[713] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[742] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[771] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[800] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[829] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[47] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[76] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[105] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[134] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[163] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[221] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[308] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[337] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[395] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[424] = (T)(img)(_n4##x,y,z,c)), \ - (I[453] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[482] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[511] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[540] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[569] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[598] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[627] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[656] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[685] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[714] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[743] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[772] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[801] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[830] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[48] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[77] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[106] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[135] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[164] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[222] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[309] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[338] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[396] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[425] = (T)(img)(_n5##x,y,z,c)), \ - (I[454] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[483] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[512] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[541] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[570] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[599] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[628] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[657] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[686] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[715] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[744] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[773] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[802] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[831] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[20] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[49] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[78] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[107] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[136] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[165] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[223] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[310] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[339] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[397] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[426] = (T)(img)(_n6##x,y,z,c)), \ - (I[455] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[484] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[513] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[542] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[571] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[600] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[629] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[658] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[687] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[716] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[745] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[774] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[803] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[832] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[21] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[50] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[79] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[108] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[137] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[166] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[224] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[311] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[340] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[398] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[427] = (T)(img)(_n7##x,y,z,c)), \ - (I[456] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[485] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[514] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[543] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[572] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[601] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[630] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[659] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[688] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[717] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[746] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[775] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[804] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[833] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[22] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[51] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[80] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[109] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[138] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[167] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[196] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[225] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[312] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[341] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[399] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[428] = (T)(img)(_n8##x,y,z,c)), \ - (I[457] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[486] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[515] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[544] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[573] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[602] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[631] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[660] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[689] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[718] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[747] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[776] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[805] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[834] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[23] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[52] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[81] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[110] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[139] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[168] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[197] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[226] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[255] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[313] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[342] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[400] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[429] = (T)(img)(_n9##x,y,z,c)), \ - (I[458] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[487] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[516] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[545] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[574] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[603] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[632] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[661] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[690] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[719] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[748] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[777] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[806] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[835] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[24] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[53] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[82] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[111] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[140] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[169] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[198] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[227] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[256] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[285] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[314] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[343] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[401] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[430] = (T)(img)(_n10##x,y,z,c)), \ - (I[459] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[488] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[517] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[546] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[575] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[604] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[633] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[662] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[691] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[720] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[749] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[778] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[807] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[836] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[25] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[54] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[83] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[112] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[141] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[170] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[199] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[228] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[257] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[286] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[315] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[344] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[402] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[431] = (T)(img)(_n11##x,y,z,c)), \ - (I[460] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[489] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[518] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[547] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[576] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[605] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[634] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[663] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[692] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[721] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[750] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[779] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[808] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[837] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[26] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[55] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[84] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[113] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[142] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[171] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[200] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[229] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[258] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[287] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[316] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[345] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[374] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[403] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[432] = (T)(img)(_n12##x,y,z,c)), \ - (I[461] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[490] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[519] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[548] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[577] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[606] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[635] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[664] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[693] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[722] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[751] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[780] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[809] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[838] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[27] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[56] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[85] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[114] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[143] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[172] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[201] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[230] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[259] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[288] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[317] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[346] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[375] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[404] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[433] = (T)(img)(_n13##x,y,z,c)), \ - (I[462] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[491] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[520] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[549] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[578] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[607] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[636] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[665] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[694] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[723] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[752] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[781] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[810] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[839] = (T)(img)(_n13##x,_n14##y,z,c)), \ - 14>=((img)._width)?(img).width()-1:14); \ - (_n14##x<(img).width() && ( \ - (I[28] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[57] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[86] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[115] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[144] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[173] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[202] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[231] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[260] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[289] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[318] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[347] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[376] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[405] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[434] = (T)(img)(_n14##x,y,z,c)), \ - (I[463] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[492] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[521] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[550] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[579] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[608] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[637] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[666] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[695] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[724] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[753] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[782] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[811] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[840] = (T)(img)(_n14##x,_n14##y,z,c)),1)) || \ - _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], \ - I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], \ - I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], \ - I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], \ - I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], \ - I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], \ - I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], \ - I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], \ - I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], \ - I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], \ - I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], \ - I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], \ - I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], \ - I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], \ - I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], \ - I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], \ - I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], \ - I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], \ - I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], \ - I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], \ - I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], \ - I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], \ - I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], \ - I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], \ - I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], \ - I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], \ - I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], \ - I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], \ - I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], I[839] = I[840], \ - _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x) - -#define cimg_for_in29x29(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in29((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p14##x = x-14<0?0:x-14, \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = x+13>=(img).width()?(img).width()-1:x+13, \ - _n14##x = (int)( \ - (I[0] = (T)(img)(_p14##x,_p14##y,z,c)), \ - (I[29] = (T)(img)(_p14##x,_p13##y,z,c)), \ - (I[58] = (T)(img)(_p14##x,_p12##y,z,c)), \ - (I[87] = (T)(img)(_p14##x,_p11##y,z,c)), \ - (I[116] = (T)(img)(_p14##x,_p10##y,z,c)), \ - (I[145] = (T)(img)(_p14##x,_p9##y,z,c)), \ - (I[174] = (T)(img)(_p14##x,_p8##y,z,c)), \ - (I[203] = (T)(img)(_p14##x,_p7##y,z,c)), \ - (I[232] = (T)(img)(_p14##x,_p6##y,z,c)), \ - (I[261] = (T)(img)(_p14##x,_p5##y,z,c)), \ - (I[290] = (T)(img)(_p14##x,_p4##y,z,c)), \ - (I[319] = (T)(img)(_p14##x,_p3##y,z,c)), \ - (I[348] = (T)(img)(_p14##x,_p2##y,z,c)), \ - (I[377] = (T)(img)(_p14##x,_p1##y,z,c)), \ - (I[406] = (T)(img)(_p14##x,y,z,c)), \ - (I[435] = (T)(img)(_p14##x,_n1##y,z,c)), \ - (I[464] = (T)(img)(_p14##x,_n2##y,z,c)), \ - (I[493] = (T)(img)(_p14##x,_n3##y,z,c)), \ - (I[522] = (T)(img)(_p14##x,_n4##y,z,c)), \ - (I[551] = (T)(img)(_p14##x,_n5##y,z,c)), \ - (I[580] = (T)(img)(_p14##x,_n6##y,z,c)), \ - (I[609] = (T)(img)(_p14##x,_n7##y,z,c)), \ - (I[638] = (T)(img)(_p14##x,_n8##y,z,c)), \ - (I[667] = (T)(img)(_p14##x,_n9##y,z,c)), \ - (I[696] = (T)(img)(_p14##x,_n10##y,z,c)), \ - (I[725] = (T)(img)(_p14##x,_n11##y,z,c)), \ - (I[754] = (T)(img)(_p14##x,_n12##y,z,c)), \ - (I[783] = (T)(img)(_p14##x,_n13##y,z,c)), \ - (I[812] = (T)(img)(_p14##x,_n14##y,z,c)), \ - (I[1] = (T)(img)(_p13##x,_p14##y,z,c)), \ - (I[30] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[59] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[88] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[117] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[146] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[175] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[204] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[233] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[262] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[291] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[320] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[349] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[378] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[407] = (T)(img)(_p13##x,y,z,c)), \ - (I[436] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[465] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[494] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[523] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[552] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[581] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[610] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[639] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[668] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[697] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[726] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[755] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[784] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[813] = (T)(img)(_p13##x,_n14##y,z,c)), \ - (I[2] = (T)(img)(_p12##x,_p14##y,z,c)), \ - (I[31] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[60] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[89] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[118] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[147] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[176] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[205] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[234] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[263] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[292] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[321] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[350] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[379] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[408] = (T)(img)(_p12##x,y,z,c)), \ - (I[437] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[466] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[495] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[524] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[553] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[582] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[611] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[640] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[669] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[698] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[727] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[756] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[785] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[814] = (T)(img)(_p12##x,_n14##y,z,c)), \ - (I[3] = (T)(img)(_p11##x,_p14##y,z,c)), \ - (I[32] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[61] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[90] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[119] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[148] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[177] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[206] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[235] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[264] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[293] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[322] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[351] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[380] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[409] = (T)(img)(_p11##x,y,z,c)), \ - (I[438] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[467] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[496] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[525] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[554] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[583] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[612] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[641] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[670] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[699] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[728] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[757] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[786] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[815] = (T)(img)(_p11##x,_n14##y,z,c)), \ - (I[4] = (T)(img)(_p10##x,_p14##y,z,c)), \ - (I[33] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[62] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[91] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[120] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[149] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[178] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[207] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[236] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[265] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[294] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[323] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[352] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[381] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[410] = (T)(img)(_p10##x,y,z,c)), \ - (I[439] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[468] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[497] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[526] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[555] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[584] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[613] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[642] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[671] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[700] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[729] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[758] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[787] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[816] = (T)(img)(_p10##x,_n14##y,z,c)), \ - (I[5] = (T)(img)(_p9##x,_p14##y,z,c)), \ - (I[34] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[63] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[92] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[121] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[150] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[179] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[208] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[237] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[266] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[295] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[324] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[353] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[382] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[411] = (T)(img)(_p9##x,y,z,c)), \ - (I[440] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[469] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[498] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[527] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[556] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[585] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[614] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[643] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[672] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[701] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[730] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[759] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[788] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[817] = (T)(img)(_p9##x,_n14##y,z,c)), \ - (I[6] = (T)(img)(_p8##x,_p14##y,z,c)), \ - (I[35] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[64] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[93] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[122] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[151] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[180] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[209] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[238] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[267] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[296] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[325] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[354] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[383] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[412] = (T)(img)(_p8##x,y,z,c)), \ - (I[441] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[470] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[499] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[528] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[557] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[586] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[615] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[644] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[673] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[702] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[731] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[760] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[789] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[818] = (T)(img)(_p8##x,_n14##y,z,c)), \ - (I[7] = (T)(img)(_p7##x,_p14##y,z,c)), \ - (I[36] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[65] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[94] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[123] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[152] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[181] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[210] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[239] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[268] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[297] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[326] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[355] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[384] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[413] = (T)(img)(_p7##x,y,z,c)), \ - (I[442] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[471] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[500] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[529] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[558] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[587] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[616] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[645] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[674] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[703] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[732] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[761] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[790] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[819] = (T)(img)(_p7##x,_n14##y,z,c)), \ - (I[8] = (T)(img)(_p6##x,_p14##y,z,c)), \ - (I[37] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[66] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[95] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[124] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[153] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[182] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[211] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[240] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[269] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[298] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[327] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[356] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[385] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[414] = (T)(img)(_p6##x,y,z,c)), \ - (I[443] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[472] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[501] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[530] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[559] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[588] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[617] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[646] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[675] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[704] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[733] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[762] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[791] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[820] = (T)(img)(_p6##x,_n14##y,z,c)), \ - (I[9] = (T)(img)(_p5##x,_p14##y,z,c)), \ - (I[38] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[67] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[96] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[125] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[154] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[183] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[212] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[241] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[270] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[299] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[328] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[357] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[386] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[415] = (T)(img)(_p5##x,y,z,c)), \ - (I[444] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[473] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[502] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[531] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[560] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[589] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[618] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[647] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[676] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[705] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[734] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[763] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[792] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[821] = (T)(img)(_p5##x,_n14##y,z,c)), \ - (I[10] = (T)(img)(_p4##x,_p14##y,z,c)), \ - (I[39] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[68] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[97] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[126] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[155] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[184] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[213] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[242] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[271] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[300] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[329] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[358] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[387] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[416] = (T)(img)(_p4##x,y,z,c)), \ - (I[445] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[474] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[503] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[532] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[561] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[590] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[619] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[648] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[677] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[706] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[735] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[764] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[793] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[822] = (T)(img)(_p4##x,_n14##y,z,c)), \ - (I[11] = (T)(img)(_p3##x,_p14##y,z,c)), \ - (I[40] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[69] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[98] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[127] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[156] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[185] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[214] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[243] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[272] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[301] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[330] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[359] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[388] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[417] = (T)(img)(_p3##x,y,z,c)), \ - (I[446] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[475] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[504] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[533] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[562] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[591] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[620] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[649] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[678] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[707] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[736] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[765] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[794] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[823] = (T)(img)(_p3##x,_n14##y,z,c)), \ - (I[12] = (T)(img)(_p2##x,_p14##y,z,c)), \ - (I[41] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[70] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[99] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[128] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[157] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[186] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[215] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[244] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[273] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[302] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[331] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[360] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[389] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[418] = (T)(img)(_p2##x,y,z,c)), \ - (I[447] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[476] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[505] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[534] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[563] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[592] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[621] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[650] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[679] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[708] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[737] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[766] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[795] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[824] = (T)(img)(_p2##x,_n14##y,z,c)), \ - (I[13] = (T)(img)(_p1##x,_p14##y,z,c)), \ - (I[42] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[71] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[100] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[129] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[158] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[187] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[216] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[245] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[274] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[303] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[332] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[361] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[390] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[419] = (T)(img)(_p1##x,y,z,c)), \ - (I[448] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[477] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[506] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[535] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[564] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[593] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[622] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[651] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[680] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[709] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[738] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[767] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[796] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[825] = (T)(img)(_p1##x,_n14##y,z,c)), \ - (I[14] = (T)(img)(x,_p14##y,z,c)), \ - (I[43] = (T)(img)(x,_p13##y,z,c)), \ - (I[72] = (T)(img)(x,_p12##y,z,c)), \ - (I[101] = (T)(img)(x,_p11##y,z,c)), \ - (I[130] = (T)(img)(x,_p10##y,z,c)), \ - (I[159] = (T)(img)(x,_p9##y,z,c)), \ - (I[188] = (T)(img)(x,_p8##y,z,c)), \ - (I[217] = (T)(img)(x,_p7##y,z,c)), \ - (I[246] = (T)(img)(x,_p6##y,z,c)), \ - (I[275] = (T)(img)(x,_p5##y,z,c)), \ - (I[304] = (T)(img)(x,_p4##y,z,c)), \ - (I[333] = (T)(img)(x,_p3##y,z,c)), \ - (I[362] = (T)(img)(x,_p2##y,z,c)), \ - (I[391] = (T)(img)(x,_p1##y,z,c)), \ - (I[420] = (T)(img)(x,y,z,c)), \ - (I[449] = (T)(img)(x,_n1##y,z,c)), \ - (I[478] = (T)(img)(x,_n2##y,z,c)), \ - (I[507] = (T)(img)(x,_n3##y,z,c)), \ - (I[536] = (T)(img)(x,_n4##y,z,c)), \ - (I[565] = (T)(img)(x,_n5##y,z,c)), \ - (I[594] = (T)(img)(x,_n6##y,z,c)), \ - (I[623] = (T)(img)(x,_n7##y,z,c)), \ - (I[652] = (T)(img)(x,_n8##y,z,c)), \ - (I[681] = (T)(img)(x,_n9##y,z,c)), \ - (I[710] = (T)(img)(x,_n10##y,z,c)), \ - (I[739] = (T)(img)(x,_n11##y,z,c)), \ - (I[768] = (T)(img)(x,_n12##y,z,c)), \ - (I[797] = (T)(img)(x,_n13##y,z,c)), \ - (I[826] = (T)(img)(x,_n14##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[44] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[73] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[102] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[131] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[160] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[189] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[218] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[247] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[276] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[305] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[334] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[363] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[392] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[421] = (T)(img)(_n1##x,y,z,c)), \ - (I[450] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[479] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[508] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[537] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[566] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[595] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[624] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[653] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[682] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[711] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[740] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[769] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[798] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[827] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[45] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[74] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[103] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[132] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[161] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[190] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[219] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[248] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[277] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[306] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[335] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[364] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[393] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[422] = (T)(img)(_n2##x,y,z,c)), \ - (I[451] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[480] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[509] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[538] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[567] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[596] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[625] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[654] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[683] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[712] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[741] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[770] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[799] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[828] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[46] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[75] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[104] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[133] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[162] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[191] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[220] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[249] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[278] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[307] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[336] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[365] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[394] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[423] = (T)(img)(_n3##x,y,z,c)), \ - (I[452] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[481] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[510] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[539] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[568] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[597] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[626] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[655] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[684] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[713] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[742] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[771] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[800] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[829] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[47] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[76] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[105] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[134] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[163] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[192] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[221] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[250] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[279] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[308] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[337] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[366] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[395] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[424] = (T)(img)(_n4##x,y,z,c)), \ - (I[453] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[482] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[511] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[540] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[569] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[598] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[627] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[656] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[685] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[714] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[743] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[772] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[801] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[830] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[48] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[77] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[106] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[135] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[164] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[193] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[222] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[251] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[280] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[309] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[338] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[367] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[396] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[425] = (T)(img)(_n5##x,y,z,c)), \ - (I[454] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[483] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[512] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[541] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[570] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[599] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[628] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[657] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[686] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[715] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[744] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[773] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[802] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[831] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[20] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[49] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[78] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[107] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[136] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[165] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[194] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[223] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[252] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[281] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[310] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[339] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[368] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[397] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[426] = (T)(img)(_n6##x,y,z,c)), \ - (I[455] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[484] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[513] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[542] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[571] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[600] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[629] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[658] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[687] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[716] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[745] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[774] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[803] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[832] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[21] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[50] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[79] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[108] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[137] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[166] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[195] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[224] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[253] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[282] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[311] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[340] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[369] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[398] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[427] = (T)(img)(_n7##x,y,z,c)), \ - (I[456] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[485] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[514] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[543] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[572] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[601] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[630] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[659] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[688] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[717] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[746] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[775] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[804] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[833] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[22] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[51] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[80] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[109] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[138] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[167] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[196] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[225] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[254] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[283] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[312] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[341] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[370] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[399] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[428] = (T)(img)(_n8##x,y,z,c)), \ - (I[457] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[486] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[515] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[544] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[573] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[602] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[631] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[660] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[689] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[718] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[747] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[776] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[805] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[834] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[23] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[52] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[81] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[110] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[139] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[168] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[197] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[226] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[255] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[284] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[313] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[342] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[371] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[400] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[429] = (T)(img)(_n9##x,y,z,c)), \ - (I[458] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[487] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[516] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[545] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[574] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[603] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[632] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[661] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[690] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[719] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[748] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[777] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[806] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[835] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[24] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[53] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[82] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[111] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[140] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[169] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[198] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[227] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[256] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[285] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[314] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[343] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[372] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[401] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[430] = (T)(img)(_n10##x,y,z,c)), \ - (I[459] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[488] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[517] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[546] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[575] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[604] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[633] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[662] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[691] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[720] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[749] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[778] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[807] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[836] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[25] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[54] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[83] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[112] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[141] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[170] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[199] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[228] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[257] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[286] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[315] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[344] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[373] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[402] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[431] = (T)(img)(_n11##x,y,z,c)), \ - (I[460] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[489] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[518] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[547] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[576] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[605] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[634] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[663] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[692] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[721] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[750] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[779] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[808] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[837] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[26] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[55] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[84] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[113] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[142] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[171] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[200] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[229] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[258] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[287] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[316] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[345] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[374] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[403] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[432] = (T)(img)(_n12##x,y,z,c)), \ - (I[461] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[490] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[519] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[548] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[577] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[606] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[635] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[664] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[693] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[722] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[751] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[780] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[809] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[838] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[27] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[56] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[85] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[114] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[143] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[172] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[201] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[230] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[259] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[288] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[317] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[346] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[375] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[404] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[433] = (T)(img)(_n13##x,y,z,c)), \ - (I[462] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[491] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[520] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[549] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[578] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[607] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[636] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[665] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[694] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[723] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[752] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[781] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[810] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[839] = (T)(img)(_n13##x,_n14##y,z,c)), \ - x+14>=(img).width()?(img).width()-1:x+14); \ - x<=(int)(x1) && ((_n14##x<(img).width() && ( \ - (I[28] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[57] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[86] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[115] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[144] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[173] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[202] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[231] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[260] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[289] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[318] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[347] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[376] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[405] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[434] = (T)(img)(_n14##x,y,z,c)), \ - (I[463] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[492] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[521] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[550] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[579] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[608] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[637] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[666] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[695] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[724] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[753] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[782] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[811] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[840] = (T)(img)(_n14##x,_n14##y,z,c)),1)) || \ - _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], \ - I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], \ - I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], \ - I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], \ - I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], \ - I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], \ - I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], \ - I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], \ - I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], \ - I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], \ - I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], \ - I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], \ - I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], \ - I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], \ - I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], \ - I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], \ - I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], \ - I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], \ - I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], \ - I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], \ - I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], \ - I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], \ - I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], \ - I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], \ - I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], \ - I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], \ - I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], \ - I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], \ - I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], I[839] = I[840], \ - _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x) - -#define cimg_get29x29(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p14##x,_p14##y,z,c), I[1] = (T)(img)(_p13##x,_p14##y,z,c), I[2] = (T)(img)(_p12##x,_p14##y,z,c), I[3] = (T)(img)(_p11##x,_p14##y,z,c), I[4] = (T)(img)(_p10##x,_p14##y,z,c), I[5] = (T)(img)(_p9##x,_p14##y,z,c), I[6] = (T)(img)(_p8##x,_p14##y,z,c), I[7] = (T)(img)(_p7##x,_p14##y,z,c), I[8] = (T)(img)(_p6##x,_p14##y,z,c), I[9] = (T)(img)(_p5##x,_p14##y,z,c), I[10] = (T)(img)(_p4##x,_p14##y,z,c), I[11] = (T)(img)(_p3##x,_p14##y,z,c), I[12] = (T)(img)(_p2##x,_p14##y,z,c), I[13] = (T)(img)(_p1##x,_p14##y,z,c), I[14] = (T)(img)(x,_p14##y,z,c), I[15] = (T)(img)(_n1##x,_p14##y,z,c), I[16] = (T)(img)(_n2##x,_p14##y,z,c), I[17] = (T)(img)(_n3##x,_p14##y,z,c), I[18] = (T)(img)(_n4##x,_p14##y,z,c), I[19] = (T)(img)(_n5##x,_p14##y,z,c), I[20] = (T)(img)(_n6##x,_p14##y,z,c), I[21] = (T)(img)(_n7##x,_p14##y,z,c), I[22] = (T)(img)(_n8##x,_p14##y,z,c), I[23] = (T)(img)(_n9##x,_p14##y,z,c), I[24] = (T)(img)(_n10##x,_p14##y,z,c), I[25] = (T)(img)(_n11##x,_p14##y,z,c), I[26] = (T)(img)(_n12##x,_p14##y,z,c), I[27] = (T)(img)(_n13##x,_p14##y,z,c), I[28] = (T)(img)(_n14##x,_p14##y,z,c), \ - I[29] = (T)(img)(_p14##x,_p13##y,z,c), I[30] = (T)(img)(_p13##x,_p13##y,z,c), I[31] = (T)(img)(_p12##x,_p13##y,z,c), I[32] = (T)(img)(_p11##x,_p13##y,z,c), I[33] = (T)(img)(_p10##x,_p13##y,z,c), I[34] = (T)(img)(_p9##x,_p13##y,z,c), I[35] = (T)(img)(_p8##x,_p13##y,z,c), I[36] = (T)(img)(_p7##x,_p13##y,z,c), I[37] = (T)(img)(_p6##x,_p13##y,z,c), I[38] = (T)(img)(_p5##x,_p13##y,z,c), I[39] = (T)(img)(_p4##x,_p13##y,z,c), I[40] = (T)(img)(_p3##x,_p13##y,z,c), I[41] = (T)(img)(_p2##x,_p13##y,z,c), I[42] = (T)(img)(_p1##x,_p13##y,z,c), I[43] = (T)(img)(x,_p13##y,z,c), I[44] = (T)(img)(_n1##x,_p13##y,z,c), I[45] = (T)(img)(_n2##x,_p13##y,z,c), I[46] = (T)(img)(_n3##x,_p13##y,z,c), I[47] = (T)(img)(_n4##x,_p13##y,z,c), I[48] = (T)(img)(_n5##x,_p13##y,z,c), I[49] = (T)(img)(_n6##x,_p13##y,z,c), I[50] = (T)(img)(_n7##x,_p13##y,z,c), I[51] = (T)(img)(_n8##x,_p13##y,z,c), I[52] = (T)(img)(_n9##x,_p13##y,z,c), I[53] = (T)(img)(_n10##x,_p13##y,z,c), I[54] = (T)(img)(_n11##x,_p13##y,z,c), I[55] = (T)(img)(_n12##x,_p13##y,z,c), I[56] = (T)(img)(_n13##x,_p13##y,z,c), I[57] = (T)(img)(_n14##x,_p13##y,z,c), \ - I[58] = (T)(img)(_p14##x,_p12##y,z,c), I[59] = (T)(img)(_p13##x,_p12##y,z,c), I[60] = (T)(img)(_p12##x,_p12##y,z,c), I[61] = (T)(img)(_p11##x,_p12##y,z,c), I[62] = (T)(img)(_p10##x,_p12##y,z,c), I[63] = (T)(img)(_p9##x,_p12##y,z,c), I[64] = (T)(img)(_p8##x,_p12##y,z,c), I[65] = (T)(img)(_p7##x,_p12##y,z,c), I[66] = (T)(img)(_p6##x,_p12##y,z,c), I[67] = (T)(img)(_p5##x,_p12##y,z,c), I[68] = (T)(img)(_p4##x,_p12##y,z,c), I[69] = (T)(img)(_p3##x,_p12##y,z,c), I[70] = (T)(img)(_p2##x,_p12##y,z,c), I[71] = (T)(img)(_p1##x,_p12##y,z,c), I[72] = (T)(img)(x,_p12##y,z,c), I[73] = (T)(img)(_n1##x,_p12##y,z,c), I[74] = (T)(img)(_n2##x,_p12##y,z,c), I[75] = (T)(img)(_n3##x,_p12##y,z,c), I[76] = (T)(img)(_n4##x,_p12##y,z,c), I[77] = (T)(img)(_n5##x,_p12##y,z,c), I[78] = (T)(img)(_n6##x,_p12##y,z,c), I[79] = (T)(img)(_n7##x,_p12##y,z,c), I[80] = (T)(img)(_n8##x,_p12##y,z,c), I[81] = (T)(img)(_n9##x,_p12##y,z,c), I[82] = (T)(img)(_n10##x,_p12##y,z,c), I[83] = (T)(img)(_n11##x,_p12##y,z,c), I[84] = (T)(img)(_n12##x,_p12##y,z,c), I[85] = (T)(img)(_n13##x,_p12##y,z,c), I[86] = (T)(img)(_n14##x,_p12##y,z,c), \ - I[87] = (T)(img)(_p14##x,_p11##y,z,c), I[88] = (T)(img)(_p13##x,_p11##y,z,c), I[89] = (T)(img)(_p12##x,_p11##y,z,c), I[90] = (T)(img)(_p11##x,_p11##y,z,c), I[91] = (T)(img)(_p10##x,_p11##y,z,c), I[92] = (T)(img)(_p9##x,_p11##y,z,c), I[93] = (T)(img)(_p8##x,_p11##y,z,c), I[94] = (T)(img)(_p7##x,_p11##y,z,c), I[95] = (T)(img)(_p6##x,_p11##y,z,c), I[96] = (T)(img)(_p5##x,_p11##y,z,c), I[97] = (T)(img)(_p4##x,_p11##y,z,c), I[98] = (T)(img)(_p3##x,_p11##y,z,c), I[99] = (T)(img)(_p2##x,_p11##y,z,c), I[100] = (T)(img)(_p1##x,_p11##y,z,c), I[101] = (T)(img)(x,_p11##y,z,c), I[102] = (T)(img)(_n1##x,_p11##y,z,c), I[103] = (T)(img)(_n2##x,_p11##y,z,c), I[104] = (T)(img)(_n3##x,_p11##y,z,c), I[105] = (T)(img)(_n4##x,_p11##y,z,c), I[106] = (T)(img)(_n5##x,_p11##y,z,c), I[107] = (T)(img)(_n6##x,_p11##y,z,c), I[108] = (T)(img)(_n7##x,_p11##y,z,c), I[109] = (T)(img)(_n8##x,_p11##y,z,c), I[110] = (T)(img)(_n9##x,_p11##y,z,c), I[111] = (T)(img)(_n10##x,_p11##y,z,c), I[112] = (T)(img)(_n11##x,_p11##y,z,c), I[113] = (T)(img)(_n12##x,_p11##y,z,c), I[114] = (T)(img)(_n13##x,_p11##y,z,c), I[115] = (T)(img)(_n14##x,_p11##y,z,c), \ - I[116] = (T)(img)(_p14##x,_p10##y,z,c), I[117] = (T)(img)(_p13##x,_p10##y,z,c), I[118] = (T)(img)(_p12##x,_p10##y,z,c), I[119] = (T)(img)(_p11##x,_p10##y,z,c), I[120] = (T)(img)(_p10##x,_p10##y,z,c), I[121] = (T)(img)(_p9##x,_p10##y,z,c), I[122] = (T)(img)(_p8##x,_p10##y,z,c), I[123] = (T)(img)(_p7##x,_p10##y,z,c), I[124] = (T)(img)(_p6##x,_p10##y,z,c), I[125] = (T)(img)(_p5##x,_p10##y,z,c), I[126] = (T)(img)(_p4##x,_p10##y,z,c), I[127] = (T)(img)(_p3##x,_p10##y,z,c), I[128] = (T)(img)(_p2##x,_p10##y,z,c), I[129] = (T)(img)(_p1##x,_p10##y,z,c), I[130] = (T)(img)(x,_p10##y,z,c), I[131] = (T)(img)(_n1##x,_p10##y,z,c), I[132] = (T)(img)(_n2##x,_p10##y,z,c), I[133] = (T)(img)(_n3##x,_p10##y,z,c), I[134] = (T)(img)(_n4##x,_p10##y,z,c), I[135] = (T)(img)(_n5##x,_p10##y,z,c), I[136] = (T)(img)(_n6##x,_p10##y,z,c), I[137] = (T)(img)(_n7##x,_p10##y,z,c), I[138] = (T)(img)(_n8##x,_p10##y,z,c), I[139] = (T)(img)(_n9##x,_p10##y,z,c), I[140] = (T)(img)(_n10##x,_p10##y,z,c), I[141] = (T)(img)(_n11##x,_p10##y,z,c), I[142] = (T)(img)(_n12##x,_p10##y,z,c), I[143] = (T)(img)(_n13##x,_p10##y,z,c), I[144] = (T)(img)(_n14##x,_p10##y,z,c), \ - I[145] = (T)(img)(_p14##x,_p9##y,z,c), I[146] = (T)(img)(_p13##x,_p9##y,z,c), I[147] = (T)(img)(_p12##x,_p9##y,z,c), I[148] = (T)(img)(_p11##x,_p9##y,z,c), I[149] = (T)(img)(_p10##x,_p9##y,z,c), I[150] = (T)(img)(_p9##x,_p9##y,z,c), I[151] = (T)(img)(_p8##x,_p9##y,z,c), I[152] = (T)(img)(_p7##x,_p9##y,z,c), I[153] = (T)(img)(_p6##x,_p9##y,z,c), I[154] = (T)(img)(_p5##x,_p9##y,z,c), I[155] = (T)(img)(_p4##x,_p9##y,z,c), I[156] = (T)(img)(_p3##x,_p9##y,z,c), I[157] = (T)(img)(_p2##x,_p9##y,z,c), I[158] = (T)(img)(_p1##x,_p9##y,z,c), I[159] = (T)(img)(x,_p9##y,z,c), I[160] = (T)(img)(_n1##x,_p9##y,z,c), I[161] = (T)(img)(_n2##x,_p9##y,z,c), I[162] = (T)(img)(_n3##x,_p9##y,z,c), I[163] = (T)(img)(_n4##x,_p9##y,z,c), I[164] = (T)(img)(_n5##x,_p9##y,z,c), I[165] = (T)(img)(_n6##x,_p9##y,z,c), I[166] = (T)(img)(_n7##x,_p9##y,z,c), I[167] = (T)(img)(_n8##x,_p9##y,z,c), I[168] = (T)(img)(_n9##x,_p9##y,z,c), I[169] = (T)(img)(_n10##x,_p9##y,z,c), I[170] = (T)(img)(_n11##x,_p9##y,z,c), I[171] = (T)(img)(_n12##x,_p9##y,z,c), I[172] = (T)(img)(_n13##x,_p9##y,z,c), I[173] = (T)(img)(_n14##x,_p9##y,z,c), \ - I[174] = (T)(img)(_p14##x,_p8##y,z,c), I[175] = (T)(img)(_p13##x,_p8##y,z,c), I[176] = (T)(img)(_p12##x,_p8##y,z,c), I[177] = (T)(img)(_p11##x,_p8##y,z,c), I[178] = (T)(img)(_p10##x,_p8##y,z,c), I[179] = (T)(img)(_p9##x,_p8##y,z,c), I[180] = (T)(img)(_p8##x,_p8##y,z,c), I[181] = (T)(img)(_p7##x,_p8##y,z,c), I[182] = (T)(img)(_p6##x,_p8##y,z,c), I[183] = (T)(img)(_p5##x,_p8##y,z,c), I[184] = (T)(img)(_p4##x,_p8##y,z,c), I[185] = (T)(img)(_p3##x,_p8##y,z,c), I[186] = (T)(img)(_p2##x,_p8##y,z,c), I[187] = (T)(img)(_p1##x,_p8##y,z,c), I[188] = (T)(img)(x,_p8##y,z,c), I[189] = (T)(img)(_n1##x,_p8##y,z,c), I[190] = (T)(img)(_n2##x,_p8##y,z,c), I[191] = (T)(img)(_n3##x,_p8##y,z,c), I[192] = (T)(img)(_n4##x,_p8##y,z,c), I[193] = (T)(img)(_n5##x,_p8##y,z,c), I[194] = (T)(img)(_n6##x,_p8##y,z,c), I[195] = (T)(img)(_n7##x,_p8##y,z,c), I[196] = (T)(img)(_n8##x,_p8##y,z,c), I[197] = (T)(img)(_n9##x,_p8##y,z,c), I[198] = (T)(img)(_n10##x,_p8##y,z,c), I[199] = (T)(img)(_n11##x,_p8##y,z,c), I[200] = (T)(img)(_n12##x,_p8##y,z,c), I[201] = (T)(img)(_n13##x,_p8##y,z,c), I[202] = (T)(img)(_n14##x,_p8##y,z,c), \ - I[203] = (T)(img)(_p14##x,_p7##y,z,c), I[204] = (T)(img)(_p13##x,_p7##y,z,c), I[205] = (T)(img)(_p12##x,_p7##y,z,c), I[206] = (T)(img)(_p11##x,_p7##y,z,c), I[207] = (T)(img)(_p10##x,_p7##y,z,c), I[208] = (T)(img)(_p9##x,_p7##y,z,c), I[209] = (T)(img)(_p8##x,_p7##y,z,c), I[210] = (T)(img)(_p7##x,_p7##y,z,c), I[211] = (T)(img)(_p6##x,_p7##y,z,c), I[212] = (T)(img)(_p5##x,_p7##y,z,c), I[213] = (T)(img)(_p4##x,_p7##y,z,c), I[214] = (T)(img)(_p3##x,_p7##y,z,c), I[215] = (T)(img)(_p2##x,_p7##y,z,c), I[216] = (T)(img)(_p1##x,_p7##y,z,c), I[217] = (T)(img)(x,_p7##y,z,c), I[218] = (T)(img)(_n1##x,_p7##y,z,c), I[219] = (T)(img)(_n2##x,_p7##y,z,c), I[220] = (T)(img)(_n3##x,_p7##y,z,c), I[221] = (T)(img)(_n4##x,_p7##y,z,c), I[222] = (T)(img)(_n5##x,_p7##y,z,c), I[223] = (T)(img)(_n6##x,_p7##y,z,c), I[224] = (T)(img)(_n7##x,_p7##y,z,c), I[225] = (T)(img)(_n8##x,_p7##y,z,c), I[226] = (T)(img)(_n9##x,_p7##y,z,c), I[227] = (T)(img)(_n10##x,_p7##y,z,c), I[228] = (T)(img)(_n11##x,_p7##y,z,c), I[229] = (T)(img)(_n12##x,_p7##y,z,c), I[230] = (T)(img)(_n13##x,_p7##y,z,c), I[231] = (T)(img)(_n14##x,_p7##y,z,c), \ - I[232] = (T)(img)(_p14##x,_p6##y,z,c), I[233] = (T)(img)(_p13##x,_p6##y,z,c), I[234] = (T)(img)(_p12##x,_p6##y,z,c), I[235] = (T)(img)(_p11##x,_p6##y,z,c), I[236] = (T)(img)(_p10##x,_p6##y,z,c), I[237] = (T)(img)(_p9##x,_p6##y,z,c), I[238] = (T)(img)(_p8##x,_p6##y,z,c), I[239] = (T)(img)(_p7##x,_p6##y,z,c), I[240] = (T)(img)(_p6##x,_p6##y,z,c), I[241] = (T)(img)(_p5##x,_p6##y,z,c), I[242] = (T)(img)(_p4##x,_p6##y,z,c), I[243] = (T)(img)(_p3##x,_p6##y,z,c), I[244] = (T)(img)(_p2##x,_p6##y,z,c), I[245] = (T)(img)(_p1##x,_p6##y,z,c), I[246] = (T)(img)(x,_p6##y,z,c), I[247] = (T)(img)(_n1##x,_p6##y,z,c), I[248] = (T)(img)(_n2##x,_p6##y,z,c), I[249] = (T)(img)(_n3##x,_p6##y,z,c), I[250] = (T)(img)(_n4##x,_p6##y,z,c), I[251] = (T)(img)(_n5##x,_p6##y,z,c), I[252] = (T)(img)(_n6##x,_p6##y,z,c), I[253] = (T)(img)(_n7##x,_p6##y,z,c), I[254] = (T)(img)(_n8##x,_p6##y,z,c), I[255] = (T)(img)(_n9##x,_p6##y,z,c), I[256] = (T)(img)(_n10##x,_p6##y,z,c), I[257] = (T)(img)(_n11##x,_p6##y,z,c), I[258] = (T)(img)(_n12##x,_p6##y,z,c), I[259] = (T)(img)(_n13##x,_p6##y,z,c), I[260] = (T)(img)(_n14##x,_p6##y,z,c), \ - I[261] = (T)(img)(_p14##x,_p5##y,z,c), I[262] = (T)(img)(_p13##x,_p5##y,z,c), I[263] = (T)(img)(_p12##x,_p5##y,z,c), I[264] = (T)(img)(_p11##x,_p5##y,z,c), I[265] = (T)(img)(_p10##x,_p5##y,z,c), I[266] = (T)(img)(_p9##x,_p5##y,z,c), I[267] = (T)(img)(_p8##x,_p5##y,z,c), I[268] = (T)(img)(_p7##x,_p5##y,z,c), I[269] = (T)(img)(_p6##x,_p5##y,z,c), I[270] = (T)(img)(_p5##x,_p5##y,z,c), I[271] = (T)(img)(_p4##x,_p5##y,z,c), I[272] = (T)(img)(_p3##x,_p5##y,z,c), I[273] = (T)(img)(_p2##x,_p5##y,z,c), I[274] = (T)(img)(_p1##x,_p5##y,z,c), I[275] = (T)(img)(x,_p5##y,z,c), I[276] = (T)(img)(_n1##x,_p5##y,z,c), I[277] = (T)(img)(_n2##x,_p5##y,z,c), I[278] = (T)(img)(_n3##x,_p5##y,z,c), I[279] = (T)(img)(_n4##x,_p5##y,z,c), I[280] = (T)(img)(_n5##x,_p5##y,z,c), I[281] = (T)(img)(_n6##x,_p5##y,z,c), I[282] = (T)(img)(_n7##x,_p5##y,z,c), I[283] = (T)(img)(_n8##x,_p5##y,z,c), I[284] = (T)(img)(_n9##x,_p5##y,z,c), I[285] = (T)(img)(_n10##x,_p5##y,z,c), I[286] = (T)(img)(_n11##x,_p5##y,z,c), I[287] = (T)(img)(_n12##x,_p5##y,z,c), I[288] = (T)(img)(_n13##x,_p5##y,z,c), I[289] = (T)(img)(_n14##x,_p5##y,z,c), \ - I[290] = (T)(img)(_p14##x,_p4##y,z,c), I[291] = (T)(img)(_p13##x,_p4##y,z,c), I[292] = (T)(img)(_p12##x,_p4##y,z,c), I[293] = (T)(img)(_p11##x,_p4##y,z,c), I[294] = (T)(img)(_p10##x,_p4##y,z,c), I[295] = (T)(img)(_p9##x,_p4##y,z,c), I[296] = (T)(img)(_p8##x,_p4##y,z,c), I[297] = (T)(img)(_p7##x,_p4##y,z,c), I[298] = (T)(img)(_p6##x,_p4##y,z,c), I[299] = (T)(img)(_p5##x,_p4##y,z,c), I[300] = (T)(img)(_p4##x,_p4##y,z,c), I[301] = (T)(img)(_p3##x,_p4##y,z,c), I[302] = (T)(img)(_p2##x,_p4##y,z,c), I[303] = (T)(img)(_p1##x,_p4##y,z,c), I[304] = (T)(img)(x,_p4##y,z,c), I[305] = (T)(img)(_n1##x,_p4##y,z,c), I[306] = (T)(img)(_n2##x,_p4##y,z,c), I[307] = (T)(img)(_n3##x,_p4##y,z,c), I[308] = (T)(img)(_n4##x,_p4##y,z,c), I[309] = (T)(img)(_n5##x,_p4##y,z,c), I[310] = (T)(img)(_n6##x,_p4##y,z,c), I[311] = (T)(img)(_n7##x,_p4##y,z,c), I[312] = (T)(img)(_n8##x,_p4##y,z,c), I[313] = (T)(img)(_n9##x,_p4##y,z,c), I[314] = (T)(img)(_n10##x,_p4##y,z,c), I[315] = (T)(img)(_n11##x,_p4##y,z,c), I[316] = (T)(img)(_n12##x,_p4##y,z,c), I[317] = (T)(img)(_n13##x,_p4##y,z,c), I[318] = (T)(img)(_n14##x,_p4##y,z,c), \ - I[319] = (T)(img)(_p14##x,_p3##y,z,c), I[320] = (T)(img)(_p13##x,_p3##y,z,c), I[321] = (T)(img)(_p12##x,_p3##y,z,c), I[322] = (T)(img)(_p11##x,_p3##y,z,c), I[323] = (T)(img)(_p10##x,_p3##y,z,c), I[324] = (T)(img)(_p9##x,_p3##y,z,c), I[325] = (T)(img)(_p8##x,_p3##y,z,c), I[326] = (T)(img)(_p7##x,_p3##y,z,c), I[327] = (T)(img)(_p6##x,_p3##y,z,c), I[328] = (T)(img)(_p5##x,_p3##y,z,c), I[329] = (T)(img)(_p4##x,_p3##y,z,c), I[330] = (T)(img)(_p3##x,_p3##y,z,c), I[331] = (T)(img)(_p2##x,_p3##y,z,c), I[332] = (T)(img)(_p1##x,_p3##y,z,c), I[333] = (T)(img)(x,_p3##y,z,c), I[334] = (T)(img)(_n1##x,_p3##y,z,c), I[335] = (T)(img)(_n2##x,_p3##y,z,c), I[336] = (T)(img)(_n3##x,_p3##y,z,c), I[337] = (T)(img)(_n4##x,_p3##y,z,c), I[338] = (T)(img)(_n5##x,_p3##y,z,c), I[339] = (T)(img)(_n6##x,_p3##y,z,c), I[340] = (T)(img)(_n7##x,_p3##y,z,c), I[341] = (T)(img)(_n8##x,_p3##y,z,c), I[342] = (T)(img)(_n9##x,_p3##y,z,c), I[343] = (T)(img)(_n10##x,_p3##y,z,c), I[344] = (T)(img)(_n11##x,_p3##y,z,c), I[345] = (T)(img)(_n12##x,_p3##y,z,c), I[346] = (T)(img)(_n13##x,_p3##y,z,c), I[347] = (T)(img)(_n14##x,_p3##y,z,c), \ - I[348] = (T)(img)(_p14##x,_p2##y,z,c), I[349] = (T)(img)(_p13##x,_p2##y,z,c), I[350] = (T)(img)(_p12##x,_p2##y,z,c), I[351] = (T)(img)(_p11##x,_p2##y,z,c), I[352] = (T)(img)(_p10##x,_p2##y,z,c), I[353] = (T)(img)(_p9##x,_p2##y,z,c), I[354] = (T)(img)(_p8##x,_p2##y,z,c), I[355] = (T)(img)(_p7##x,_p2##y,z,c), I[356] = (T)(img)(_p6##x,_p2##y,z,c), I[357] = (T)(img)(_p5##x,_p2##y,z,c), I[358] = (T)(img)(_p4##x,_p2##y,z,c), I[359] = (T)(img)(_p3##x,_p2##y,z,c), I[360] = (T)(img)(_p2##x,_p2##y,z,c), I[361] = (T)(img)(_p1##x,_p2##y,z,c), I[362] = (T)(img)(x,_p2##y,z,c), I[363] = (T)(img)(_n1##x,_p2##y,z,c), I[364] = (T)(img)(_n2##x,_p2##y,z,c), I[365] = (T)(img)(_n3##x,_p2##y,z,c), I[366] = (T)(img)(_n4##x,_p2##y,z,c), I[367] = (T)(img)(_n5##x,_p2##y,z,c), I[368] = (T)(img)(_n6##x,_p2##y,z,c), I[369] = (T)(img)(_n7##x,_p2##y,z,c), I[370] = (T)(img)(_n8##x,_p2##y,z,c), I[371] = (T)(img)(_n9##x,_p2##y,z,c), I[372] = (T)(img)(_n10##x,_p2##y,z,c), I[373] = (T)(img)(_n11##x,_p2##y,z,c), I[374] = (T)(img)(_n12##x,_p2##y,z,c), I[375] = (T)(img)(_n13##x,_p2##y,z,c), I[376] = (T)(img)(_n14##x,_p2##y,z,c), \ - I[377] = (T)(img)(_p14##x,_p1##y,z,c), I[378] = (T)(img)(_p13##x,_p1##y,z,c), I[379] = (T)(img)(_p12##x,_p1##y,z,c), I[380] = (T)(img)(_p11##x,_p1##y,z,c), I[381] = (T)(img)(_p10##x,_p1##y,z,c), I[382] = (T)(img)(_p9##x,_p1##y,z,c), I[383] = (T)(img)(_p8##x,_p1##y,z,c), I[384] = (T)(img)(_p7##x,_p1##y,z,c), I[385] = (T)(img)(_p6##x,_p1##y,z,c), I[386] = (T)(img)(_p5##x,_p1##y,z,c), I[387] = (T)(img)(_p4##x,_p1##y,z,c), I[388] = (T)(img)(_p3##x,_p1##y,z,c), I[389] = (T)(img)(_p2##x,_p1##y,z,c), I[390] = (T)(img)(_p1##x,_p1##y,z,c), I[391] = (T)(img)(x,_p1##y,z,c), I[392] = (T)(img)(_n1##x,_p1##y,z,c), I[393] = (T)(img)(_n2##x,_p1##y,z,c), I[394] = (T)(img)(_n3##x,_p1##y,z,c), I[395] = (T)(img)(_n4##x,_p1##y,z,c), I[396] = (T)(img)(_n5##x,_p1##y,z,c), I[397] = (T)(img)(_n6##x,_p1##y,z,c), I[398] = (T)(img)(_n7##x,_p1##y,z,c), I[399] = (T)(img)(_n8##x,_p1##y,z,c), I[400] = (T)(img)(_n9##x,_p1##y,z,c), I[401] = (T)(img)(_n10##x,_p1##y,z,c), I[402] = (T)(img)(_n11##x,_p1##y,z,c), I[403] = (T)(img)(_n12##x,_p1##y,z,c), I[404] = (T)(img)(_n13##x,_p1##y,z,c), I[405] = (T)(img)(_n14##x,_p1##y,z,c), \ - I[406] = (T)(img)(_p14##x,y,z,c), I[407] = (T)(img)(_p13##x,y,z,c), I[408] = (T)(img)(_p12##x,y,z,c), I[409] = (T)(img)(_p11##x,y,z,c), I[410] = (T)(img)(_p10##x,y,z,c), I[411] = (T)(img)(_p9##x,y,z,c), I[412] = (T)(img)(_p8##x,y,z,c), I[413] = (T)(img)(_p7##x,y,z,c), I[414] = (T)(img)(_p6##x,y,z,c), I[415] = (T)(img)(_p5##x,y,z,c), I[416] = (T)(img)(_p4##x,y,z,c), I[417] = (T)(img)(_p3##x,y,z,c), I[418] = (T)(img)(_p2##x,y,z,c), I[419] = (T)(img)(_p1##x,y,z,c), I[420] = (T)(img)(x,y,z,c), I[421] = (T)(img)(_n1##x,y,z,c), I[422] = (T)(img)(_n2##x,y,z,c), I[423] = (T)(img)(_n3##x,y,z,c), I[424] = (T)(img)(_n4##x,y,z,c), I[425] = (T)(img)(_n5##x,y,z,c), I[426] = (T)(img)(_n6##x,y,z,c), I[427] = (T)(img)(_n7##x,y,z,c), I[428] = (T)(img)(_n8##x,y,z,c), I[429] = (T)(img)(_n9##x,y,z,c), I[430] = (T)(img)(_n10##x,y,z,c), I[431] = (T)(img)(_n11##x,y,z,c), I[432] = (T)(img)(_n12##x,y,z,c), I[433] = (T)(img)(_n13##x,y,z,c), I[434] = (T)(img)(_n14##x,y,z,c), \ - I[435] = (T)(img)(_p14##x,_n1##y,z,c), I[436] = (T)(img)(_p13##x,_n1##y,z,c), I[437] = (T)(img)(_p12##x,_n1##y,z,c), I[438] = (T)(img)(_p11##x,_n1##y,z,c), I[439] = (T)(img)(_p10##x,_n1##y,z,c), I[440] = (T)(img)(_p9##x,_n1##y,z,c), I[441] = (T)(img)(_p8##x,_n1##y,z,c), I[442] = (T)(img)(_p7##x,_n1##y,z,c), I[443] = (T)(img)(_p6##x,_n1##y,z,c), I[444] = (T)(img)(_p5##x,_n1##y,z,c), I[445] = (T)(img)(_p4##x,_n1##y,z,c), I[446] = (T)(img)(_p3##x,_n1##y,z,c), I[447] = (T)(img)(_p2##x,_n1##y,z,c), I[448] = (T)(img)(_p1##x,_n1##y,z,c), I[449] = (T)(img)(x,_n1##y,z,c), I[450] = (T)(img)(_n1##x,_n1##y,z,c), I[451] = (T)(img)(_n2##x,_n1##y,z,c), I[452] = (T)(img)(_n3##x,_n1##y,z,c), I[453] = (T)(img)(_n4##x,_n1##y,z,c), I[454] = (T)(img)(_n5##x,_n1##y,z,c), I[455] = (T)(img)(_n6##x,_n1##y,z,c), I[456] = (T)(img)(_n7##x,_n1##y,z,c), I[457] = (T)(img)(_n8##x,_n1##y,z,c), I[458] = (T)(img)(_n9##x,_n1##y,z,c), I[459] = (T)(img)(_n10##x,_n1##y,z,c), I[460] = (T)(img)(_n11##x,_n1##y,z,c), I[461] = (T)(img)(_n12##x,_n1##y,z,c), I[462] = (T)(img)(_n13##x,_n1##y,z,c), I[463] = (T)(img)(_n14##x,_n1##y,z,c), \ - I[464] = (T)(img)(_p14##x,_n2##y,z,c), I[465] = (T)(img)(_p13##x,_n2##y,z,c), I[466] = (T)(img)(_p12##x,_n2##y,z,c), I[467] = (T)(img)(_p11##x,_n2##y,z,c), I[468] = (T)(img)(_p10##x,_n2##y,z,c), I[469] = (T)(img)(_p9##x,_n2##y,z,c), I[470] = (T)(img)(_p8##x,_n2##y,z,c), I[471] = (T)(img)(_p7##x,_n2##y,z,c), I[472] = (T)(img)(_p6##x,_n2##y,z,c), I[473] = (T)(img)(_p5##x,_n2##y,z,c), I[474] = (T)(img)(_p4##x,_n2##y,z,c), I[475] = (T)(img)(_p3##x,_n2##y,z,c), I[476] = (T)(img)(_p2##x,_n2##y,z,c), I[477] = (T)(img)(_p1##x,_n2##y,z,c), I[478] = (T)(img)(x,_n2##y,z,c), I[479] = (T)(img)(_n1##x,_n2##y,z,c), I[480] = (T)(img)(_n2##x,_n2##y,z,c), I[481] = (T)(img)(_n3##x,_n2##y,z,c), I[482] = (T)(img)(_n4##x,_n2##y,z,c), I[483] = (T)(img)(_n5##x,_n2##y,z,c), I[484] = (T)(img)(_n6##x,_n2##y,z,c), I[485] = (T)(img)(_n7##x,_n2##y,z,c), I[486] = (T)(img)(_n8##x,_n2##y,z,c), I[487] = (T)(img)(_n9##x,_n2##y,z,c), I[488] = (T)(img)(_n10##x,_n2##y,z,c), I[489] = (T)(img)(_n11##x,_n2##y,z,c), I[490] = (T)(img)(_n12##x,_n2##y,z,c), I[491] = (T)(img)(_n13##x,_n2##y,z,c), I[492] = (T)(img)(_n14##x,_n2##y,z,c), \ - I[493] = (T)(img)(_p14##x,_n3##y,z,c), I[494] = (T)(img)(_p13##x,_n3##y,z,c), I[495] = (T)(img)(_p12##x,_n3##y,z,c), I[496] = (T)(img)(_p11##x,_n3##y,z,c), I[497] = (T)(img)(_p10##x,_n3##y,z,c), I[498] = (T)(img)(_p9##x,_n3##y,z,c), I[499] = (T)(img)(_p8##x,_n3##y,z,c), I[500] = (T)(img)(_p7##x,_n3##y,z,c), I[501] = (T)(img)(_p6##x,_n3##y,z,c), I[502] = (T)(img)(_p5##x,_n3##y,z,c), I[503] = (T)(img)(_p4##x,_n3##y,z,c), I[504] = (T)(img)(_p3##x,_n3##y,z,c), I[505] = (T)(img)(_p2##x,_n3##y,z,c), I[506] = (T)(img)(_p1##x,_n3##y,z,c), I[507] = (T)(img)(x,_n3##y,z,c), I[508] = (T)(img)(_n1##x,_n3##y,z,c), I[509] = (T)(img)(_n2##x,_n3##y,z,c), I[510] = (T)(img)(_n3##x,_n3##y,z,c), I[511] = (T)(img)(_n4##x,_n3##y,z,c), I[512] = (T)(img)(_n5##x,_n3##y,z,c), I[513] = (T)(img)(_n6##x,_n3##y,z,c), I[514] = (T)(img)(_n7##x,_n3##y,z,c), I[515] = (T)(img)(_n8##x,_n3##y,z,c), I[516] = (T)(img)(_n9##x,_n3##y,z,c), I[517] = (T)(img)(_n10##x,_n3##y,z,c), I[518] = (T)(img)(_n11##x,_n3##y,z,c), I[519] = (T)(img)(_n12##x,_n3##y,z,c), I[520] = (T)(img)(_n13##x,_n3##y,z,c), I[521] = (T)(img)(_n14##x,_n3##y,z,c), \ - I[522] = (T)(img)(_p14##x,_n4##y,z,c), I[523] = (T)(img)(_p13##x,_n4##y,z,c), I[524] = (T)(img)(_p12##x,_n4##y,z,c), I[525] = (T)(img)(_p11##x,_n4##y,z,c), I[526] = (T)(img)(_p10##x,_n4##y,z,c), I[527] = (T)(img)(_p9##x,_n4##y,z,c), I[528] = (T)(img)(_p8##x,_n4##y,z,c), I[529] = (T)(img)(_p7##x,_n4##y,z,c), I[530] = (T)(img)(_p6##x,_n4##y,z,c), I[531] = (T)(img)(_p5##x,_n4##y,z,c), I[532] = (T)(img)(_p4##x,_n4##y,z,c), I[533] = (T)(img)(_p3##x,_n4##y,z,c), I[534] = (T)(img)(_p2##x,_n4##y,z,c), I[535] = (T)(img)(_p1##x,_n4##y,z,c), I[536] = (T)(img)(x,_n4##y,z,c), I[537] = (T)(img)(_n1##x,_n4##y,z,c), I[538] = (T)(img)(_n2##x,_n4##y,z,c), I[539] = (T)(img)(_n3##x,_n4##y,z,c), I[540] = (T)(img)(_n4##x,_n4##y,z,c), I[541] = (T)(img)(_n5##x,_n4##y,z,c), I[542] = (T)(img)(_n6##x,_n4##y,z,c), I[543] = (T)(img)(_n7##x,_n4##y,z,c), I[544] = (T)(img)(_n8##x,_n4##y,z,c), I[545] = (T)(img)(_n9##x,_n4##y,z,c), I[546] = (T)(img)(_n10##x,_n4##y,z,c), I[547] = (T)(img)(_n11##x,_n4##y,z,c), I[548] = (T)(img)(_n12##x,_n4##y,z,c), I[549] = (T)(img)(_n13##x,_n4##y,z,c), I[550] = (T)(img)(_n14##x,_n4##y,z,c), \ - I[551] = (T)(img)(_p14##x,_n5##y,z,c), I[552] = (T)(img)(_p13##x,_n5##y,z,c), I[553] = (T)(img)(_p12##x,_n5##y,z,c), I[554] = (T)(img)(_p11##x,_n5##y,z,c), I[555] = (T)(img)(_p10##x,_n5##y,z,c), I[556] = (T)(img)(_p9##x,_n5##y,z,c), I[557] = (T)(img)(_p8##x,_n5##y,z,c), I[558] = (T)(img)(_p7##x,_n5##y,z,c), I[559] = (T)(img)(_p6##x,_n5##y,z,c), I[560] = (T)(img)(_p5##x,_n5##y,z,c), I[561] = (T)(img)(_p4##x,_n5##y,z,c), I[562] = (T)(img)(_p3##x,_n5##y,z,c), I[563] = (T)(img)(_p2##x,_n5##y,z,c), I[564] = (T)(img)(_p1##x,_n5##y,z,c), I[565] = (T)(img)(x,_n5##y,z,c), I[566] = (T)(img)(_n1##x,_n5##y,z,c), I[567] = (T)(img)(_n2##x,_n5##y,z,c), I[568] = (T)(img)(_n3##x,_n5##y,z,c), I[569] = (T)(img)(_n4##x,_n5##y,z,c), I[570] = (T)(img)(_n5##x,_n5##y,z,c), I[571] = (T)(img)(_n6##x,_n5##y,z,c), I[572] = (T)(img)(_n7##x,_n5##y,z,c), I[573] = (T)(img)(_n8##x,_n5##y,z,c), I[574] = (T)(img)(_n9##x,_n5##y,z,c), I[575] = (T)(img)(_n10##x,_n5##y,z,c), I[576] = (T)(img)(_n11##x,_n5##y,z,c), I[577] = (T)(img)(_n12##x,_n5##y,z,c), I[578] = (T)(img)(_n13##x,_n5##y,z,c), I[579] = (T)(img)(_n14##x,_n5##y,z,c), \ - I[580] = (T)(img)(_p14##x,_n6##y,z,c), I[581] = (T)(img)(_p13##x,_n6##y,z,c), I[582] = (T)(img)(_p12##x,_n6##y,z,c), I[583] = (T)(img)(_p11##x,_n6##y,z,c), I[584] = (T)(img)(_p10##x,_n6##y,z,c), I[585] = (T)(img)(_p9##x,_n6##y,z,c), I[586] = (T)(img)(_p8##x,_n6##y,z,c), I[587] = (T)(img)(_p7##x,_n6##y,z,c), I[588] = (T)(img)(_p6##x,_n6##y,z,c), I[589] = (T)(img)(_p5##x,_n6##y,z,c), I[590] = (T)(img)(_p4##x,_n6##y,z,c), I[591] = (T)(img)(_p3##x,_n6##y,z,c), I[592] = (T)(img)(_p2##x,_n6##y,z,c), I[593] = (T)(img)(_p1##x,_n6##y,z,c), I[594] = (T)(img)(x,_n6##y,z,c), I[595] = (T)(img)(_n1##x,_n6##y,z,c), I[596] = (T)(img)(_n2##x,_n6##y,z,c), I[597] = (T)(img)(_n3##x,_n6##y,z,c), I[598] = (T)(img)(_n4##x,_n6##y,z,c), I[599] = (T)(img)(_n5##x,_n6##y,z,c), I[600] = (T)(img)(_n6##x,_n6##y,z,c), I[601] = (T)(img)(_n7##x,_n6##y,z,c), I[602] = (T)(img)(_n8##x,_n6##y,z,c), I[603] = (T)(img)(_n9##x,_n6##y,z,c), I[604] = (T)(img)(_n10##x,_n6##y,z,c), I[605] = (T)(img)(_n11##x,_n6##y,z,c), I[606] = (T)(img)(_n12##x,_n6##y,z,c), I[607] = (T)(img)(_n13##x,_n6##y,z,c), I[608] = (T)(img)(_n14##x,_n6##y,z,c), \ - I[609] = (T)(img)(_p14##x,_n7##y,z,c), I[610] = (T)(img)(_p13##x,_n7##y,z,c), I[611] = (T)(img)(_p12##x,_n7##y,z,c), I[612] = (T)(img)(_p11##x,_n7##y,z,c), I[613] = (T)(img)(_p10##x,_n7##y,z,c), I[614] = (T)(img)(_p9##x,_n7##y,z,c), I[615] = (T)(img)(_p8##x,_n7##y,z,c), I[616] = (T)(img)(_p7##x,_n7##y,z,c), I[617] = (T)(img)(_p6##x,_n7##y,z,c), I[618] = (T)(img)(_p5##x,_n7##y,z,c), I[619] = (T)(img)(_p4##x,_n7##y,z,c), I[620] = (T)(img)(_p3##x,_n7##y,z,c), I[621] = (T)(img)(_p2##x,_n7##y,z,c), I[622] = (T)(img)(_p1##x,_n7##y,z,c), I[623] = (T)(img)(x,_n7##y,z,c), I[624] = (T)(img)(_n1##x,_n7##y,z,c), I[625] = (T)(img)(_n2##x,_n7##y,z,c), I[626] = (T)(img)(_n3##x,_n7##y,z,c), I[627] = (T)(img)(_n4##x,_n7##y,z,c), I[628] = (T)(img)(_n5##x,_n7##y,z,c), I[629] = (T)(img)(_n6##x,_n7##y,z,c), I[630] = (T)(img)(_n7##x,_n7##y,z,c), I[631] = (T)(img)(_n8##x,_n7##y,z,c), I[632] = (T)(img)(_n9##x,_n7##y,z,c), I[633] = (T)(img)(_n10##x,_n7##y,z,c), I[634] = (T)(img)(_n11##x,_n7##y,z,c), I[635] = (T)(img)(_n12##x,_n7##y,z,c), I[636] = (T)(img)(_n13##x,_n7##y,z,c), I[637] = (T)(img)(_n14##x,_n7##y,z,c), \ - I[638] = (T)(img)(_p14##x,_n8##y,z,c), I[639] = (T)(img)(_p13##x,_n8##y,z,c), I[640] = (T)(img)(_p12##x,_n8##y,z,c), I[641] = (T)(img)(_p11##x,_n8##y,z,c), I[642] = (T)(img)(_p10##x,_n8##y,z,c), I[643] = (T)(img)(_p9##x,_n8##y,z,c), I[644] = (T)(img)(_p8##x,_n8##y,z,c), I[645] = (T)(img)(_p7##x,_n8##y,z,c), I[646] = (T)(img)(_p6##x,_n8##y,z,c), I[647] = (T)(img)(_p5##x,_n8##y,z,c), I[648] = (T)(img)(_p4##x,_n8##y,z,c), I[649] = (T)(img)(_p3##x,_n8##y,z,c), I[650] = (T)(img)(_p2##x,_n8##y,z,c), I[651] = (T)(img)(_p1##x,_n8##y,z,c), I[652] = (T)(img)(x,_n8##y,z,c), I[653] = (T)(img)(_n1##x,_n8##y,z,c), I[654] = (T)(img)(_n2##x,_n8##y,z,c), I[655] = (T)(img)(_n3##x,_n8##y,z,c), I[656] = (T)(img)(_n4##x,_n8##y,z,c), I[657] = (T)(img)(_n5##x,_n8##y,z,c), I[658] = (T)(img)(_n6##x,_n8##y,z,c), I[659] = (T)(img)(_n7##x,_n8##y,z,c), I[660] = (T)(img)(_n8##x,_n8##y,z,c), I[661] = (T)(img)(_n9##x,_n8##y,z,c), I[662] = (T)(img)(_n10##x,_n8##y,z,c), I[663] = (T)(img)(_n11##x,_n8##y,z,c), I[664] = (T)(img)(_n12##x,_n8##y,z,c), I[665] = (T)(img)(_n13##x,_n8##y,z,c), I[666] = (T)(img)(_n14##x,_n8##y,z,c), \ - I[667] = (T)(img)(_p14##x,_n9##y,z,c), I[668] = (T)(img)(_p13##x,_n9##y,z,c), I[669] = (T)(img)(_p12##x,_n9##y,z,c), I[670] = (T)(img)(_p11##x,_n9##y,z,c), I[671] = (T)(img)(_p10##x,_n9##y,z,c), I[672] = (T)(img)(_p9##x,_n9##y,z,c), I[673] = (T)(img)(_p8##x,_n9##y,z,c), I[674] = (T)(img)(_p7##x,_n9##y,z,c), I[675] = (T)(img)(_p6##x,_n9##y,z,c), I[676] = (T)(img)(_p5##x,_n9##y,z,c), I[677] = (T)(img)(_p4##x,_n9##y,z,c), I[678] = (T)(img)(_p3##x,_n9##y,z,c), I[679] = (T)(img)(_p2##x,_n9##y,z,c), I[680] = (T)(img)(_p1##x,_n9##y,z,c), I[681] = (T)(img)(x,_n9##y,z,c), I[682] = (T)(img)(_n1##x,_n9##y,z,c), I[683] = (T)(img)(_n2##x,_n9##y,z,c), I[684] = (T)(img)(_n3##x,_n9##y,z,c), I[685] = (T)(img)(_n4##x,_n9##y,z,c), I[686] = (T)(img)(_n5##x,_n9##y,z,c), I[687] = (T)(img)(_n6##x,_n9##y,z,c), I[688] = (T)(img)(_n7##x,_n9##y,z,c), I[689] = (T)(img)(_n8##x,_n9##y,z,c), I[690] = (T)(img)(_n9##x,_n9##y,z,c), I[691] = (T)(img)(_n10##x,_n9##y,z,c), I[692] = (T)(img)(_n11##x,_n9##y,z,c), I[693] = (T)(img)(_n12##x,_n9##y,z,c), I[694] = (T)(img)(_n13##x,_n9##y,z,c), I[695] = (T)(img)(_n14##x,_n9##y,z,c), \ - I[696] = (T)(img)(_p14##x,_n10##y,z,c), I[697] = (T)(img)(_p13##x,_n10##y,z,c), I[698] = (T)(img)(_p12##x,_n10##y,z,c), I[699] = (T)(img)(_p11##x,_n10##y,z,c), I[700] = (T)(img)(_p10##x,_n10##y,z,c), I[701] = (T)(img)(_p9##x,_n10##y,z,c), I[702] = (T)(img)(_p8##x,_n10##y,z,c), I[703] = (T)(img)(_p7##x,_n10##y,z,c), I[704] = (T)(img)(_p6##x,_n10##y,z,c), I[705] = (T)(img)(_p5##x,_n10##y,z,c), I[706] = (T)(img)(_p4##x,_n10##y,z,c), I[707] = (T)(img)(_p3##x,_n10##y,z,c), I[708] = (T)(img)(_p2##x,_n10##y,z,c), I[709] = (T)(img)(_p1##x,_n10##y,z,c), I[710] = (T)(img)(x,_n10##y,z,c), I[711] = (T)(img)(_n1##x,_n10##y,z,c), I[712] = (T)(img)(_n2##x,_n10##y,z,c), I[713] = (T)(img)(_n3##x,_n10##y,z,c), I[714] = (T)(img)(_n4##x,_n10##y,z,c), I[715] = (T)(img)(_n5##x,_n10##y,z,c), I[716] = (T)(img)(_n6##x,_n10##y,z,c), I[717] = (T)(img)(_n7##x,_n10##y,z,c), I[718] = (T)(img)(_n8##x,_n10##y,z,c), I[719] = (T)(img)(_n9##x,_n10##y,z,c), I[720] = (T)(img)(_n10##x,_n10##y,z,c), I[721] = (T)(img)(_n11##x,_n10##y,z,c), I[722] = (T)(img)(_n12##x,_n10##y,z,c), I[723] = (T)(img)(_n13##x,_n10##y,z,c), I[724] = (T)(img)(_n14##x,_n10##y,z,c), \ - I[725] = (T)(img)(_p14##x,_n11##y,z,c), I[726] = (T)(img)(_p13##x,_n11##y,z,c), I[727] = (T)(img)(_p12##x,_n11##y,z,c), I[728] = (T)(img)(_p11##x,_n11##y,z,c), I[729] = (T)(img)(_p10##x,_n11##y,z,c), I[730] = (T)(img)(_p9##x,_n11##y,z,c), I[731] = (T)(img)(_p8##x,_n11##y,z,c), I[732] = (T)(img)(_p7##x,_n11##y,z,c), I[733] = (T)(img)(_p6##x,_n11##y,z,c), I[734] = (T)(img)(_p5##x,_n11##y,z,c), I[735] = (T)(img)(_p4##x,_n11##y,z,c), I[736] = (T)(img)(_p3##x,_n11##y,z,c), I[737] = (T)(img)(_p2##x,_n11##y,z,c), I[738] = (T)(img)(_p1##x,_n11##y,z,c), I[739] = (T)(img)(x,_n11##y,z,c), I[740] = (T)(img)(_n1##x,_n11##y,z,c), I[741] = (T)(img)(_n2##x,_n11##y,z,c), I[742] = (T)(img)(_n3##x,_n11##y,z,c), I[743] = (T)(img)(_n4##x,_n11##y,z,c), I[744] = (T)(img)(_n5##x,_n11##y,z,c), I[745] = (T)(img)(_n6##x,_n11##y,z,c), I[746] = (T)(img)(_n7##x,_n11##y,z,c), I[747] = (T)(img)(_n8##x,_n11##y,z,c), I[748] = (T)(img)(_n9##x,_n11##y,z,c), I[749] = (T)(img)(_n10##x,_n11##y,z,c), I[750] = (T)(img)(_n11##x,_n11##y,z,c), I[751] = (T)(img)(_n12##x,_n11##y,z,c), I[752] = (T)(img)(_n13##x,_n11##y,z,c), I[753] = (T)(img)(_n14##x,_n11##y,z,c), \ - I[754] = (T)(img)(_p14##x,_n12##y,z,c), I[755] = (T)(img)(_p13##x,_n12##y,z,c), I[756] = (T)(img)(_p12##x,_n12##y,z,c), I[757] = (T)(img)(_p11##x,_n12##y,z,c), I[758] = (T)(img)(_p10##x,_n12##y,z,c), I[759] = (T)(img)(_p9##x,_n12##y,z,c), I[760] = (T)(img)(_p8##x,_n12##y,z,c), I[761] = (T)(img)(_p7##x,_n12##y,z,c), I[762] = (T)(img)(_p6##x,_n12##y,z,c), I[763] = (T)(img)(_p5##x,_n12##y,z,c), I[764] = (T)(img)(_p4##x,_n12##y,z,c), I[765] = (T)(img)(_p3##x,_n12##y,z,c), I[766] = (T)(img)(_p2##x,_n12##y,z,c), I[767] = (T)(img)(_p1##x,_n12##y,z,c), I[768] = (T)(img)(x,_n12##y,z,c), I[769] = (T)(img)(_n1##x,_n12##y,z,c), I[770] = (T)(img)(_n2##x,_n12##y,z,c), I[771] = (T)(img)(_n3##x,_n12##y,z,c), I[772] = (T)(img)(_n4##x,_n12##y,z,c), I[773] = (T)(img)(_n5##x,_n12##y,z,c), I[774] = (T)(img)(_n6##x,_n12##y,z,c), I[775] = (T)(img)(_n7##x,_n12##y,z,c), I[776] = (T)(img)(_n8##x,_n12##y,z,c), I[777] = (T)(img)(_n9##x,_n12##y,z,c), I[778] = (T)(img)(_n10##x,_n12##y,z,c), I[779] = (T)(img)(_n11##x,_n12##y,z,c), I[780] = (T)(img)(_n12##x,_n12##y,z,c), I[781] = (T)(img)(_n13##x,_n12##y,z,c), I[782] = (T)(img)(_n14##x,_n12##y,z,c), \ - I[783] = (T)(img)(_p14##x,_n13##y,z,c), I[784] = (T)(img)(_p13##x,_n13##y,z,c), I[785] = (T)(img)(_p12##x,_n13##y,z,c), I[786] = (T)(img)(_p11##x,_n13##y,z,c), I[787] = (T)(img)(_p10##x,_n13##y,z,c), I[788] = (T)(img)(_p9##x,_n13##y,z,c), I[789] = (T)(img)(_p8##x,_n13##y,z,c), I[790] = (T)(img)(_p7##x,_n13##y,z,c), I[791] = (T)(img)(_p6##x,_n13##y,z,c), I[792] = (T)(img)(_p5##x,_n13##y,z,c), I[793] = (T)(img)(_p4##x,_n13##y,z,c), I[794] = (T)(img)(_p3##x,_n13##y,z,c), I[795] = (T)(img)(_p2##x,_n13##y,z,c), I[796] = (T)(img)(_p1##x,_n13##y,z,c), I[797] = (T)(img)(x,_n13##y,z,c), I[798] = (T)(img)(_n1##x,_n13##y,z,c), I[799] = (T)(img)(_n2##x,_n13##y,z,c), I[800] = (T)(img)(_n3##x,_n13##y,z,c), I[801] = (T)(img)(_n4##x,_n13##y,z,c), I[802] = (T)(img)(_n5##x,_n13##y,z,c), I[803] = (T)(img)(_n6##x,_n13##y,z,c), I[804] = (T)(img)(_n7##x,_n13##y,z,c), I[805] = (T)(img)(_n8##x,_n13##y,z,c), I[806] = (T)(img)(_n9##x,_n13##y,z,c), I[807] = (T)(img)(_n10##x,_n13##y,z,c), I[808] = (T)(img)(_n11##x,_n13##y,z,c), I[809] = (T)(img)(_n12##x,_n13##y,z,c), I[810] = (T)(img)(_n13##x,_n13##y,z,c), I[811] = (T)(img)(_n14##x,_n13##y,z,c), \ - I[812] = (T)(img)(_p14##x,_n14##y,z,c), I[813] = (T)(img)(_p13##x,_n14##y,z,c), I[814] = (T)(img)(_p12##x,_n14##y,z,c), I[815] = (T)(img)(_p11##x,_n14##y,z,c), I[816] = (T)(img)(_p10##x,_n14##y,z,c), I[817] = (T)(img)(_p9##x,_n14##y,z,c), I[818] = (T)(img)(_p8##x,_n14##y,z,c), I[819] = (T)(img)(_p7##x,_n14##y,z,c), I[820] = (T)(img)(_p6##x,_n14##y,z,c), I[821] = (T)(img)(_p5##x,_n14##y,z,c), I[822] = (T)(img)(_p4##x,_n14##y,z,c), I[823] = (T)(img)(_p3##x,_n14##y,z,c), I[824] = (T)(img)(_p2##x,_n14##y,z,c), I[825] = (T)(img)(_p1##x,_n14##y,z,c), I[826] = (T)(img)(x,_n14##y,z,c), I[827] = (T)(img)(_n1##x,_n14##y,z,c), I[828] = (T)(img)(_n2##x,_n14##y,z,c), I[829] = (T)(img)(_n3##x,_n14##y,z,c), I[830] = (T)(img)(_n4##x,_n14##y,z,c), I[831] = (T)(img)(_n5##x,_n14##y,z,c), I[832] = (T)(img)(_n6##x,_n14##y,z,c), I[833] = (T)(img)(_n7##x,_n14##y,z,c), I[834] = (T)(img)(_n8##x,_n14##y,z,c), I[835] = (T)(img)(_n9##x,_n14##y,z,c), I[836] = (T)(img)(_n10##x,_n14##y,z,c), I[837] = (T)(img)(_n11##x,_n14##y,z,c), I[838] = (T)(img)(_n12##x,_n14##y,z,c), I[839] = (T)(img)(_n13##x,_n14##y,z,c), I[840] = (T)(img)(_n14##x,_n14##y,z,c); - -// Define 30x30 loop macros -//------------------------- -#define cimg_for30(bound,i) for (int i = 0, \ - _p14##i = 0, _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13, \ - _n14##i = 14>=(int)(bound)?(int)(bound)-1:14, \ - _n15##i = 15>=(int)(bound)?(int)(bound)-1:15; \ - _n15##i<(int)(bound) || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i) - -#define cimg_for30X(img,x) cimg_for30((img)._width,x) -#define cimg_for30Y(img,y) cimg_for30((img)._height,y) -#define cimg_for30Z(img,z) cimg_for30((img)._depth,z) -#define cimg_for30C(img,c) cimg_for30((img)._spectrum,c) -#define cimg_for30XY(img,x,y) cimg_for30Y(img,y) cimg_for30X(img,x) -#define cimg_for30XZ(img,x,z) cimg_for30Z(img,z) cimg_for30X(img,x) -#define cimg_for30XC(img,x,c) cimg_for30C(img,c) cimg_for30X(img,x) -#define cimg_for30YZ(img,y,z) cimg_for30Z(img,z) cimg_for30Y(img,y) -#define cimg_for30YC(img,y,c) cimg_for30C(img,c) cimg_for30Y(img,y) -#define cimg_for30ZC(img,z,c) cimg_for30C(img,c) cimg_for30Z(img,z) -#define cimg_for30XYZ(img,x,y,z) cimg_for30Z(img,z) cimg_for30XY(img,x,y) -#define cimg_for30XZC(img,x,z,c) cimg_for30C(img,c) cimg_for30XZ(img,x,z) -#define cimg_for30YZC(img,y,z,c) cimg_for30C(img,c) cimg_for30YZ(img,y,z) -#define cimg_for30XYZC(img,x,y,z,c) cimg_for30C(img,c) cimg_for30XYZ(img,x,y,z) - -#define cimg_for_in30(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p14##i = i-14<0?0:i-14, \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13, \ - _n14##i = i+14>=(int)(bound)?(int)(bound)-1:i+14, \ - _n15##i = i+15>=(int)(bound)?(int)(bound)-1:i+15; \ - i<=(int)(i1) && (_n15##i<(int)(bound) || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i) - -#define cimg_for_in30X(img,x0,x1,x) cimg_for_in30((img)._width,x0,x1,x) -#define cimg_for_in30Y(img,y0,y1,y) cimg_for_in30((img)._height,y0,y1,y) -#define cimg_for_in30Z(img,z0,z1,z) cimg_for_in30((img)._depth,z0,z1,z) -#define cimg_for_in30C(img,c0,c1,c) cimg_for_in30((img)._spectrum,c0,c1,c) -#define cimg_for_in30XY(img,x0,y0,x1,y1,x,y) cimg_for_in30Y(img,y0,y1,y) cimg_for_in30X(img,x0,x1,x) -#define cimg_for_in30XZ(img,x0,z0,x1,z1,x,z) cimg_for_in30Z(img,z0,z1,z) cimg_for_in30X(img,x0,x1,x) -#define cimg_for_in30XC(img,x0,c0,x1,c1,x,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30X(img,x0,x1,x) -#define cimg_for_in30YZ(img,y0,z0,y1,z1,y,z) cimg_for_in30Z(img,z0,z1,z) cimg_for_in30Y(img,y0,y1,y) -#define cimg_for_in30YC(img,y0,c0,y1,c1,y,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30Y(img,y0,y1,y) -#define cimg_for_in30ZC(img,z0,c0,z1,c1,z,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30Z(img,z0,z1,z) -#define cimg_for_in30XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in30Z(img,z0,z1,z) cimg_for_in30XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in30XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in30YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in30XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in30C(img,c0,c1,c) cimg_for_in30XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for30x30(img,x,y,z,c,I,T) \ - cimg_for30((img)._height,y) for (int x = 0, \ - _p14##x = 0, _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = 13>=((img)._width)?(img).width()-1:13, \ - _n14##x = 14>=((img)._width)?(img).width()-1:14, \ - _n15##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = I[14] = (T)(img)(0,_p14##y,z,c)), \ - (I[30] = I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = (T)(img)(0,_p13##y,z,c)), \ - (I[60] = I[61] = I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = (T)(img)(0,_p12##y,z,c)), \ - (I[90] = I[91] = I[92] = I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = (T)(img)(0,_p11##y,z,c)), \ - (I[120] = I[121] = I[122] = I[123] = I[124] = I[125] = I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = (T)(img)(0,_p10##y,z,c)), \ - (I[150] = I[151] = I[152] = I[153] = I[154] = I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = I[163] = I[164] = (T)(img)(0,_p9##y,z,c)), \ - (I[180] = I[181] = I[182] = I[183] = I[184] = I[185] = I[186] = I[187] = I[188] = I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = (T)(img)(0,_p8##y,z,c)), \ - (I[210] = I[211] = I[212] = I[213] = I[214] = I[215] = I[216] = I[217] = I[218] = I[219] = I[220] = I[221] = I[222] = I[223] = I[224] = (T)(img)(0,_p7##y,z,c)), \ - (I[240] = I[241] = I[242] = I[243] = I[244] = I[245] = I[246] = I[247] = I[248] = I[249] = I[250] = I[251] = I[252] = I[253] = I[254] = (T)(img)(0,_p6##y,z,c)), \ - (I[270] = I[271] = I[272] = I[273] = I[274] = I[275] = I[276] = I[277] = I[278] = I[279] = I[280] = I[281] = I[282] = I[283] = I[284] = (T)(img)(0,_p5##y,z,c)), \ - (I[300] = I[301] = I[302] = I[303] = I[304] = I[305] = I[306] = I[307] = I[308] = I[309] = I[310] = I[311] = I[312] = I[313] = I[314] = (T)(img)(0,_p4##y,z,c)), \ - (I[330] = I[331] = I[332] = I[333] = I[334] = I[335] = I[336] = I[337] = I[338] = I[339] = I[340] = I[341] = I[342] = I[343] = I[344] = (T)(img)(0,_p3##y,z,c)), \ - (I[360] = I[361] = I[362] = I[363] = I[364] = I[365] = I[366] = I[367] = I[368] = I[369] = I[370] = I[371] = I[372] = I[373] = I[374] = (T)(img)(0,_p2##y,z,c)), \ - (I[390] = I[391] = I[392] = I[393] = I[394] = I[395] = I[396] = I[397] = I[398] = I[399] = I[400] = I[401] = I[402] = I[403] = I[404] = (T)(img)(0,_p1##y,z,c)), \ - (I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = I[429] = I[430] = I[431] = I[432] = I[433] = I[434] = (T)(img)(0,y,z,c)), \ - (I[450] = I[451] = I[452] = I[453] = I[454] = I[455] = I[456] = I[457] = I[458] = I[459] = I[460] = I[461] = I[462] = I[463] = I[464] = (T)(img)(0,_n1##y,z,c)), \ - (I[480] = I[481] = I[482] = I[483] = I[484] = I[485] = I[486] = I[487] = I[488] = I[489] = I[490] = I[491] = I[492] = I[493] = I[494] = (T)(img)(0,_n2##y,z,c)), \ - (I[510] = I[511] = I[512] = I[513] = I[514] = I[515] = I[516] = I[517] = I[518] = I[519] = I[520] = I[521] = I[522] = I[523] = I[524] = (T)(img)(0,_n3##y,z,c)), \ - (I[540] = I[541] = I[542] = I[543] = I[544] = I[545] = I[546] = I[547] = I[548] = I[549] = I[550] = I[551] = I[552] = I[553] = I[554] = (T)(img)(0,_n4##y,z,c)), \ - (I[570] = I[571] = I[572] = I[573] = I[574] = I[575] = I[576] = I[577] = I[578] = I[579] = I[580] = I[581] = I[582] = I[583] = I[584] = (T)(img)(0,_n5##y,z,c)), \ - (I[600] = I[601] = I[602] = I[603] = I[604] = I[605] = I[606] = I[607] = I[608] = I[609] = I[610] = I[611] = I[612] = I[613] = I[614] = (T)(img)(0,_n6##y,z,c)), \ - (I[630] = I[631] = I[632] = I[633] = I[634] = I[635] = I[636] = I[637] = I[638] = I[639] = I[640] = I[641] = I[642] = I[643] = I[644] = (T)(img)(0,_n7##y,z,c)), \ - (I[660] = I[661] = I[662] = I[663] = I[664] = I[665] = I[666] = I[667] = I[668] = I[669] = I[670] = I[671] = I[672] = I[673] = I[674] = (T)(img)(0,_n8##y,z,c)), \ - (I[690] = I[691] = I[692] = I[693] = I[694] = I[695] = I[696] = I[697] = I[698] = I[699] = I[700] = I[701] = I[702] = I[703] = I[704] = (T)(img)(0,_n9##y,z,c)), \ - (I[720] = I[721] = I[722] = I[723] = I[724] = I[725] = I[726] = I[727] = I[728] = I[729] = I[730] = I[731] = I[732] = I[733] = I[734] = (T)(img)(0,_n10##y,z,c)), \ - (I[750] = I[751] = I[752] = I[753] = I[754] = I[755] = I[756] = I[757] = I[758] = I[759] = I[760] = I[761] = I[762] = I[763] = I[764] = (T)(img)(0,_n11##y,z,c)), \ - (I[780] = I[781] = I[782] = I[783] = I[784] = I[785] = I[786] = I[787] = I[788] = I[789] = I[790] = I[791] = I[792] = I[793] = I[794] = (T)(img)(0,_n12##y,z,c)), \ - (I[810] = I[811] = I[812] = I[813] = I[814] = I[815] = I[816] = I[817] = I[818] = I[819] = I[820] = I[821] = I[822] = I[823] = I[824] = (T)(img)(0,_n13##y,z,c)), \ - (I[840] = I[841] = I[842] = I[843] = I[844] = I[845] = I[846] = I[847] = I[848] = I[849] = I[850] = I[851] = I[852] = I[853] = I[854] = (T)(img)(0,_n14##y,z,c)), \ - (I[870] = I[871] = I[872] = I[873] = I[874] = I[875] = I[876] = I[877] = I[878] = I[879] = I[880] = I[881] = I[882] = I[883] = I[884] = (T)(img)(0,_n15##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[75] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[135] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[195] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[225] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[255] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[285] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[315] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[345] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[375] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[405] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[435] = (T)(img)(_n1##x,y,z,c)), \ - (I[465] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[495] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[525] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[555] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[585] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[615] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[645] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[675] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[705] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[735] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[765] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[795] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[825] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[855] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[885] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[76] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[136] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[196] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[226] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[256] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[286] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[316] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[346] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[376] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[406] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[436] = (T)(img)(_n2##x,y,z,c)), \ - (I[466] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[496] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[526] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[556] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[586] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[616] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[646] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[676] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[706] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[736] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[766] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[796] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[826] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[856] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[886] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[77] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[137] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[197] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[227] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[257] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[287] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[317] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[347] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[377] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[407] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[437] = (T)(img)(_n3##x,y,z,c)), \ - (I[467] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[497] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[527] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[557] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[587] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[617] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[647] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[677] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[707] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[737] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[767] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[797] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[827] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[857] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[887] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[78] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[138] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[168] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[198] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[228] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[258] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[288] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[318] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[348] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[378] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[408] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[438] = (T)(img)(_n4##x,y,z,c)), \ - (I[468] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[498] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[528] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[558] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[588] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[618] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[648] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[678] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[708] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[738] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[768] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[798] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[828] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[858] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[888] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[79] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[139] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[169] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[199] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[229] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[259] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[289] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[319] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[349] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[379] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[409] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[439] = (T)(img)(_n5##x,y,z,c)), \ - (I[469] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[499] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[529] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[559] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[589] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[619] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[649] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[679] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[709] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[739] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[769] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[799] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[829] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[859] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[889] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[20] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[50] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[80] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[140] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[170] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[200] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[230] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[260] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[290] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[320] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[350] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[380] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[410] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[440] = (T)(img)(_n6##x,y,z,c)), \ - (I[470] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[500] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[530] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[560] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[590] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[620] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[650] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[680] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[710] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[740] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[770] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[800] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[830] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[860] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[890] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[21] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[51] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[81] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[141] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[171] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[201] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[231] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[261] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[291] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[321] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[351] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[381] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[411] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[441] = (T)(img)(_n7##x,y,z,c)), \ - (I[471] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[501] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[531] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[561] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[591] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[621] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[651] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[681] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[711] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[741] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[771] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[801] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[831] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[861] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[891] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[22] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[52] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[82] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[112] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[142] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[172] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[202] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[232] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[262] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[292] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[322] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[352] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[382] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[412] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[442] = (T)(img)(_n8##x,y,z,c)), \ - (I[472] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[502] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[532] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[562] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[592] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[622] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[652] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[682] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[712] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[742] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[772] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[802] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[832] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[862] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[892] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[23] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[53] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[83] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[113] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[143] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[173] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[203] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[233] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[263] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[293] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[323] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[353] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[383] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[413] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[443] = (T)(img)(_n9##x,y,z,c)), \ - (I[473] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[503] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[533] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[563] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[593] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[623] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[653] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[683] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[713] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[743] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[773] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[803] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[833] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[863] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[893] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[24] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[54] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[84] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[114] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[144] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[174] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[204] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[234] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[264] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[294] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[324] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[354] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[384] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[414] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[444] = (T)(img)(_n10##x,y,z,c)), \ - (I[474] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[504] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[534] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[564] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[594] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[624] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[654] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[684] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[714] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[744] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[774] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[804] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[834] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[864] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[894] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[25] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[55] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[85] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[115] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[145] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[175] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[205] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[235] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[265] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[295] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[325] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[355] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[385] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[415] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[445] = (T)(img)(_n11##x,y,z,c)), \ - (I[475] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[505] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[535] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[565] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[595] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[625] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[655] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[685] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[715] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[745] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[775] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[805] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[835] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[865] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[895] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[26] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[56] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[86] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[116] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[146] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[176] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[206] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[236] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[266] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[296] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[326] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[356] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[386] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[416] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[446] = (T)(img)(_n12##x,y,z,c)), \ - (I[476] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[506] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[536] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[566] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[596] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[626] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[656] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[686] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[716] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[746] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[776] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[806] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[836] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[866] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[896] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[27] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[57] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[87] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[117] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[147] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[177] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[207] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[237] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[267] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[297] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[327] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[357] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[387] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[417] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[447] = (T)(img)(_n13##x,y,z,c)), \ - (I[477] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[507] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[537] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[567] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[597] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[627] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[657] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[687] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[717] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[747] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[777] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[807] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[837] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[867] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[897] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[28] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[58] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[88] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[118] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[148] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[178] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[208] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[238] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[268] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[298] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[328] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[358] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[388] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[418] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[448] = (T)(img)(_n14##x,y,z,c)), \ - (I[478] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[508] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[538] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[568] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[598] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[628] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[658] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[688] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[718] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[748] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[778] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[808] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[838] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[868] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[898] = (T)(img)(_n14##x,_n15##y,z,c)), \ - 15>=((img)._width)?(img).width()-1:15); \ - (_n15##x<(img).width() && ( \ - (I[29] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[59] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[89] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[119] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[149] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[179] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[209] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[239] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[269] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[299] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[329] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[359] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[389] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[419] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[449] = (T)(img)(_n15##x,y,z,c)), \ - (I[479] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[509] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[539] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[569] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[599] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[629] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[659] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[689] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[719] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[749] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[779] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[809] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[839] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[869] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[899] = (T)(img)(_n15##x,_n15##y,z,c)),1)) || \ - _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], \ - I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], \ - I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], \ - I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], \ - I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], \ - I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], \ - I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], \ - I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], \ - I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], \ - I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], \ - I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], \ - I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], \ - I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], \ - I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], \ - I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], \ - I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], I[863] = I[864], I[864] = I[865], I[865] = I[866], I[866] = I[867], I[867] = I[868], I[868] = I[869], \ - I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], I[895] = I[896], I[896] = I[897], I[897] = I[898], I[898] = I[899], \ - _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x) - -#define cimg_for_in30x30(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in30((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p14##x = x-14<0?0:x-14, \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = x+13>=(img).width()?(img).width()-1:x+13, \ - _n14##x = x+14>=(img).width()?(img).width()-1:x+14, \ - _n15##x = (int)( \ - (I[0] = (T)(img)(_p14##x,_p14##y,z,c)), \ - (I[30] = (T)(img)(_p14##x,_p13##y,z,c)), \ - (I[60] = (T)(img)(_p14##x,_p12##y,z,c)), \ - (I[90] = (T)(img)(_p14##x,_p11##y,z,c)), \ - (I[120] = (T)(img)(_p14##x,_p10##y,z,c)), \ - (I[150] = (T)(img)(_p14##x,_p9##y,z,c)), \ - (I[180] = (T)(img)(_p14##x,_p8##y,z,c)), \ - (I[210] = (T)(img)(_p14##x,_p7##y,z,c)), \ - (I[240] = (T)(img)(_p14##x,_p6##y,z,c)), \ - (I[270] = (T)(img)(_p14##x,_p5##y,z,c)), \ - (I[300] = (T)(img)(_p14##x,_p4##y,z,c)), \ - (I[330] = (T)(img)(_p14##x,_p3##y,z,c)), \ - (I[360] = (T)(img)(_p14##x,_p2##y,z,c)), \ - (I[390] = (T)(img)(_p14##x,_p1##y,z,c)), \ - (I[420] = (T)(img)(_p14##x,y,z,c)), \ - (I[450] = (T)(img)(_p14##x,_n1##y,z,c)), \ - (I[480] = (T)(img)(_p14##x,_n2##y,z,c)), \ - (I[510] = (T)(img)(_p14##x,_n3##y,z,c)), \ - (I[540] = (T)(img)(_p14##x,_n4##y,z,c)), \ - (I[570] = (T)(img)(_p14##x,_n5##y,z,c)), \ - (I[600] = (T)(img)(_p14##x,_n6##y,z,c)), \ - (I[630] = (T)(img)(_p14##x,_n7##y,z,c)), \ - (I[660] = (T)(img)(_p14##x,_n8##y,z,c)), \ - (I[690] = (T)(img)(_p14##x,_n9##y,z,c)), \ - (I[720] = (T)(img)(_p14##x,_n10##y,z,c)), \ - (I[750] = (T)(img)(_p14##x,_n11##y,z,c)), \ - (I[780] = (T)(img)(_p14##x,_n12##y,z,c)), \ - (I[810] = (T)(img)(_p14##x,_n13##y,z,c)), \ - (I[840] = (T)(img)(_p14##x,_n14##y,z,c)), \ - (I[870] = (T)(img)(_p14##x,_n15##y,z,c)), \ - (I[1] = (T)(img)(_p13##x,_p14##y,z,c)), \ - (I[31] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[61] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[91] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[121] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[151] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[181] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[211] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[241] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[271] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[301] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[331] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[361] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[391] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[421] = (T)(img)(_p13##x,y,z,c)), \ - (I[451] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[481] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[511] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[541] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[571] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[601] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[631] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[661] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[691] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[721] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[751] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[781] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[811] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[841] = (T)(img)(_p13##x,_n14##y,z,c)), \ - (I[871] = (T)(img)(_p13##x,_n15##y,z,c)), \ - (I[2] = (T)(img)(_p12##x,_p14##y,z,c)), \ - (I[32] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[62] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[92] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[122] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[152] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[182] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[212] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[242] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[272] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[302] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[332] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[362] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[392] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[422] = (T)(img)(_p12##x,y,z,c)), \ - (I[452] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[482] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[512] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[542] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[572] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[602] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[632] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[662] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[692] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[722] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[752] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[782] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[812] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[842] = (T)(img)(_p12##x,_n14##y,z,c)), \ - (I[872] = (T)(img)(_p12##x,_n15##y,z,c)), \ - (I[3] = (T)(img)(_p11##x,_p14##y,z,c)), \ - (I[33] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[63] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[93] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[123] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[153] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[183] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[213] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[243] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[273] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[303] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[333] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[363] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[393] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[423] = (T)(img)(_p11##x,y,z,c)), \ - (I[453] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[483] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[513] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[543] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[573] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[603] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[633] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[663] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[693] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[723] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[753] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[783] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[813] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[843] = (T)(img)(_p11##x,_n14##y,z,c)), \ - (I[873] = (T)(img)(_p11##x,_n15##y,z,c)), \ - (I[4] = (T)(img)(_p10##x,_p14##y,z,c)), \ - (I[34] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[64] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[94] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[124] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[154] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[184] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[214] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[244] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[274] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[304] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[334] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[364] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[394] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[424] = (T)(img)(_p10##x,y,z,c)), \ - (I[454] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[484] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[514] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[544] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[574] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[604] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[634] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[664] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[694] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[724] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[754] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[784] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[814] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[844] = (T)(img)(_p10##x,_n14##y,z,c)), \ - (I[874] = (T)(img)(_p10##x,_n15##y,z,c)), \ - (I[5] = (T)(img)(_p9##x,_p14##y,z,c)), \ - (I[35] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[65] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[95] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[125] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[155] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[185] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[215] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[245] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[275] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[305] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[335] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[365] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[395] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[425] = (T)(img)(_p9##x,y,z,c)), \ - (I[455] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[485] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[515] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[545] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[575] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[605] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[635] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[665] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[695] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[725] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[755] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[785] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[815] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[845] = (T)(img)(_p9##x,_n14##y,z,c)), \ - (I[875] = (T)(img)(_p9##x,_n15##y,z,c)), \ - (I[6] = (T)(img)(_p8##x,_p14##y,z,c)), \ - (I[36] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[66] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[96] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[126] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[156] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[186] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[216] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[246] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[276] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[306] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[336] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[366] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[396] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[426] = (T)(img)(_p8##x,y,z,c)), \ - (I[456] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[486] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[516] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[546] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[576] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[606] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[636] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[666] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[696] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[726] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[756] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[786] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[816] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[846] = (T)(img)(_p8##x,_n14##y,z,c)), \ - (I[876] = (T)(img)(_p8##x,_n15##y,z,c)), \ - (I[7] = (T)(img)(_p7##x,_p14##y,z,c)), \ - (I[37] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[67] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[97] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[127] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[157] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[187] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[217] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[247] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[277] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[307] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[337] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[367] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[397] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[427] = (T)(img)(_p7##x,y,z,c)), \ - (I[457] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[487] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[517] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[547] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[577] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[607] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[637] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[667] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[697] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[727] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[757] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[787] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[817] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[847] = (T)(img)(_p7##x,_n14##y,z,c)), \ - (I[877] = (T)(img)(_p7##x,_n15##y,z,c)), \ - (I[8] = (T)(img)(_p6##x,_p14##y,z,c)), \ - (I[38] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[68] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[98] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[128] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[158] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[188] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[218] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[248] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[278] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[308] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[338] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[368] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[398] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[428] = (T)(img)(_p6##x,y,z,c)), \ - (I[458] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[488] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[518] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[548] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[578] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[608] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[638] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[668] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[698] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[728] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[758] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[788] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[818] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[848] = (T)(img)(_p6##x,_n14##y,z,c)), \ - (I[878] = (T)(img)(_p6##x,_n15##y,z,c)), \ - (I[9] = (T)(img)(_p5##x,_p14##y,z,c)), \ - (I[39] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[69] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[99] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[129] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[159] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[189] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[219] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[249] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[279] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[309] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[339] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[369] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[399] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[429] = (T)(img)(_p5##x,y,z,c)), \ - (I[459] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[489] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[519] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[549] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[579] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[609] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[639] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[669] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[699] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[729] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[759] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[789] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[819] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[849] = (T)(img)(_p5##x,_n14##y,z,c)), \ - (I[879] = (T)(img)(_p5##x,_n15##y,z,c)), \ - (I[10] = (T)(img)(_p4##x,_p14##y,z,c)), \ - (I[40] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[70] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[100] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[130] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[160] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[190] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[220] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[250] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[280] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[310] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[340] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[370] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[400] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[430] = (T)(img)(_p4##x,y,z,c)), \ - (I[460] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[490] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[520] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[550] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[580] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[610] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[640] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[670] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[700] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[730] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[760] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[790] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[820] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[850] = (T)(img)(_p4##x,_n14##y,z,c)), \ - (I[880] = (T)(img)(_p4##x,_n15##y,z,c)), \ - (I[11] = (T)(img)(_p3##x,_p14##y,z,c)), \ - (I[41] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[71] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[101] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[131] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[161] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[191] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[221] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[251] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[281] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[311] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[341] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[371] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[401] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[431] = (T)(img)(_p3##x,y,z,c)), \ - (I[461] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[491] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[521] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[551] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[581] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[611] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[641] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[671] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[701] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[731] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[761] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[791] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[821] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[851] = (T)(img)(_p3##x,_n14##y,z,c)), \ - (I[881] = (T)(img)(_p3##x,_n15##y,z,c)), \ - (I[12] = (T)(img)(_p2##x,_p14##y,z,c)), \ - (I[42] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[72] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[102] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[132] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[162] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[192] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[222] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[252] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[282] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[312] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[342] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[372] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[402] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[432] = (T)(img)(_p2##x,y,z,c)), \ - (I[462] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[492] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[522] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[552] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[582] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[612] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[642] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[672] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[702] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[732] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[762] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[792] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[822] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[852] = (T)(img)(_p2##x,_n14##y,z,c)), \ - (I[882] = (T)(img)(_p2##x,_n15##y,z,c)), \ - (I[13] = (T)(img)(_p1##x,_p14##y,z,c)), \ - (I[43] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[73] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[103] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[133] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[163] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[193] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[223] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[253] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[283] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[313] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[343] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[373] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[403] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[433] = (T)(img)(_p1##x,y,z,c)), \ - (I[463] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[493] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[523] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[553] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[583] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[613] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[643] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[673] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[703] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[733] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[763] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[793] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[823] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[853] = (T)(img)(_p1##x,_n14##y,z,c)), \ - (I[883] = (T)(img)(_p1##x,_n15##y,z,c)), \ - (I[14] = (T)(img)(x,_p14##y,z,c)), \ - (I[44] = (T)(img)(x,_p13##y,z,c)), \ - (I[74] = (T)(img)(x,_p12##y,z,c)), \ - (I[104] = (T)(img)(x,_p11##y,z,c)), \ - (I[134] = (T)(img)(x,_p10##y,z,c)), \ - (I[164] = (T)(img)(x,_p9##y,z,c)), \ - (I[194] = (T)(img)(x,_p8##y,z,c)), \ - (I[224] = (T)(img)(x,_p7##y,z,c)), \ - (I[254] = (T)(img)(x,_p6##y,z,c)), \ - (I[284] = (T)(img)(x,_p5##y,z,c)), \ - (I[314] = (T)(img)(x,_p4##y,z,c)), \ - (I[344] = (T)(img)(x,_p3##y,z,c)), \ - (I[374] = (T)(img)(x,_p2##y,z,c)), \ - (I[404] = (T)(img)(x,_p1##y,z,c)), \ - (I[434] = (T)(img)(x,y,z,c)), \ - (I[464] = (T)(img)(x,_n1##y,z,c)), \ - (I[494] = (T)(img)(x,_n2##y,z,c)), \ - (I[524] = (T)(img)(x,_n3##y,z,c)), \ - (I[554] = (T)(img)(x,_n4##y,z,c)), \ - (I[584] = (T)(img)(x,_n5##y,z,c)), \ - (I[614] = (T)(img)(x,_n6##y,z,c)), \ - (I[644] = (T)(img)(x,_n7##y,z,c)), \ - (I[674] = (T)(img)(x,_n8##y,z,c)), \ - (I[704] = (T)(img)(x,_n9##y,z,c)), \ - (I[734] = (T)(img)(x,_n10##y,z,c)), \ - (I[764] = (T)(img)(x,_n11##y,z,c)), \ - (I[794] = (T)(img)(x,_n12##y,z,c)), \ - (I[824] = (T)(img)(x,_n13##y,z,c)), \ - (I[854] = (T)(img)(x,_n14##y,z,c)), \ - (I[884] = (T)(img)(x,_n15##y,z,c)), \ - (I[15] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[45] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[75] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[135] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[195] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[225] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[255] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[285] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[315] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[345] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[375] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[405] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[435] = (T)(img)(_n1##x,y,z,c)), \ - (I[465] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[495] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[525] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[555] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[585] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[615] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[645] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[675] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[705] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[735] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[765] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[795] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[825] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[855] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[885] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[16] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[46] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[76] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[136] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[196] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[226] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[256] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[286] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[316] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[346] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[376] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[406] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[436] = (T)(img)(_n2##x,y,z,c)), \ - (I[466] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[496] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[526] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[556] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[586] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[616] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[646] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[676] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[706] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[736] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[766] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[796] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[826] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[856] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[886] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[17] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[47] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[77] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[137] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[197] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[227] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[257] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[287] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[317] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[347] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[377] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[407] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[437] = (T)(img)(_n3##x,y,z,c)), \ - (I[467] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[497] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[527] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[557] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[587] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[617] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[647] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[677] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[707] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[737] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[767] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[797] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[827] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[857] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[887] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[18] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[48] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[78] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[108] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[138] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[168] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[198] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[228] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[258] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[288] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[318] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[348] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[378] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[408] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[438] = (T)(img)(_n4##x,y,z,c)), \ - (I[468] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[498] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[528] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[558] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[588] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[618] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[648] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[678] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[708] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[738] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[768] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[798] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[828] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[858] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[888] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[19] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[49] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[79] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[109] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[139] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[169] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[199] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[229] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[259] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[289] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[319] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[349] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[379] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[409] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[439] = (T)(img)(_n5##x,y,z,c)), \ - (I[469] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[499] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[529] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[559] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[589] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[619] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[649] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[679] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[709] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[739] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[769] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[799] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[829] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[859] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[889] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[20] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[50] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[80] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[110] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[140] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[170] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[200] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[230] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[260] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[290] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[320] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[350] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[380] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[410] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[440] = (T)(img)(_n6##x,y,z,c)), \ - (I[470] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[500] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[530] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[560] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[590] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[620] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[650] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[680] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[710] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[740] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[770] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[800] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[830] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[860] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[890] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[21] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[51] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[81] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[111] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[141] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[171] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[201] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[231] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[261] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[291] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[321] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[351] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[381] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[411] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[441] = (T)(img)(_n7##x,y,z,c)), \ - (I[471] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[501] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[531] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[561] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[591] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[621] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[651] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[681] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[711] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[741] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[771] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[801] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[831] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[861] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[891] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[22] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[52] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[82] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[112] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[142] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[172] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[202] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[232] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[262] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[292] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[322] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[352] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[382] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[412] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[442] = (T)(img)(_n8##x,y,z,c)), \ - (I[472] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[502] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[532] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[562] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[592] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[622] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[652] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[682] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[712] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[742] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[772] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[802] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[832] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[862] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[892] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[23] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[53] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[83] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[113] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[143] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[173] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[203] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[233] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[263] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[293] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[323] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[353] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[383] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[413] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[443] = (T)(img)(_n9##x,y,z,c)), \ - (I[473] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[503] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[533] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[563] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[593] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[623] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[653] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[683] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[713] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[743] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[773] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[803] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[833] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[863] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[893] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[24] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[54] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[84] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[114] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[144] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[174] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[204] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[234] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[264] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[294] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[324] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[354] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[384] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[414] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[444] = (T)(img)(_n10##x,y,z,c)), \ - (I[474] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[504] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[534] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[564] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[594] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[624] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[654] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[684] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[714] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[744] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[774] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[804] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[834] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[864] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[894] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[25] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[55] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[85] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[115] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[145] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[175] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[205] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[235] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[265] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[295] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[325] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[355] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[385] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[415] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[445] = (T)(img)(_n11##x,y,z,c)), \ - (I[475] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[505] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[535] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[565] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[595] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[625] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[655] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[685] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[715] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[745] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[775] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[805] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[835] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[865] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[895] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[26] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[56] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[86] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[116] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[146] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[176] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[206] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[236] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[266] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[296] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[326] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[356] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[386] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[416] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[446] = (T)(img)(_n12##x,y,z,c)), \ - (I[476] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[506] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[536] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[566] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[596] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[626] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[656] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[686] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[716] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[746] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[776] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[806] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[836] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[866] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[896] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[27] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[57] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[87] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[117] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[147] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[177] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[207] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[237] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[267] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[297] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[327] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[357] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[387] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[417] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[447] = (T)(img)(_n13##x,y,z,c)), \ - (I[477] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[507] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[537] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[567] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[597] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[627] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[657] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[687] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[717] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[747] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[777] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[807] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[837] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[867] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[897] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[28] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[58] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[88] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[118] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[148] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[178] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[208] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[238] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[268] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[298] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[328] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[358] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[388] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[418] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[448] = (T)(img)(_n14##x,y,z,c)), \ - (I[478] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[508] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[538] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[568] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[598] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[628] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[658] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[688] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[718] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[748] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[778] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[808] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[838] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[868] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[898] = (T)(img)(_n14##x,_n15##y,z,c)), \ - x+15>=(img).width()?(img).width()-1:x+15); \ - x<=(int)(x1) && ((_n15##x<(img).width() && ( \ - (I[29] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[59] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[89] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[119] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[149] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[179] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[209] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[239] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[269] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[299] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[329] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[359] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[389] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[419] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[449] = (T)(img)(_n15##x,y,z,c)), \ - (I[479] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[509] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[539] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[569] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[599] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[629] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[659] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[689] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[719] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[749] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[779] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[809] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[839] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[869] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[899] = (T)(img)(_n15##x,_n15##y,z,c)),1)) || \ - _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], \ - I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], \ - I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], \ - I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], \ - I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], \ - I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], \ - I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], \ - I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], \ - I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], \ - I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], \ - I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], \ - I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], \ - I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], \ - I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], \ - I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], \ - I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], \ - I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], \ - I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], \ - I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], I[863] = I[864], I[864] = I[865], I[865] = I[866], I[866] = I[867], I[867] = I[868], I[868] = I[869], \ - I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], I[895] = I[896], I[896] = I[897], I[897] = I[898], I[898] = I[899], \ - _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x) - -#define cimg_get30x30(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p14##x,_p14##y,z,c), I[1] = (T)(img)(_p13##x,_p14##y,z,c), I[2] = (T)(img)(_p12##x,_p14##y,z,c), I[3] = (T)(img)(_p11##x,_p14##y,z,c), I[4] = (T)(img)(_p10##x,_p14##y,z,c), I[5] = (T)(img)(_p9##x,_p14##y,z,c), I[6] = (T)(img)(_p8##x,_p14##y,z,c), I[7] = (T)(img)(_p7##x,_p14##y,z,c), I[8] = (T)(img)(_p6##x,_p14##y,z,c), I[9] = (T)(img)(_p5##x,_p14##y,z,c), I[10] = (T)(img)(_p4##x,_p14##y,z,c), I[11] = (T)(img)(_p3##x,_p14##y,z,c), I[12] = (T)(img)(_p2##x,_p14##y,z,c), I[13] = (T)(img)(_p1##x,_p14##y,z,c), I[14] = (T)(img)(x,_p14##y,z,c), I[15] = (T)(img)(_n1##x,_p14##y,z,c), I[16] = (T)(img)(_n2##x,_p14##y,z,c), I[17] = (T)(img)(_n3##x,_p14##y,z,c), I[18] = (T)(img)(_n4##x,_p14##y,z,c), I[19] = (T)(img)(_n5##x,_p14##y,z,c), I[20] = (T)(img)(_n6##x,_p14##y,z,c), I[21] = (T)(img)(_n7##x,_p14##y,z,c), I[22] = (T)(img)(_n8##x,_p14##y,z,c), I[23] = (T)(img)(_n9##x,_p14##y,z,c), I[24] = (T)(img)(_n10##x,_p14##y,z,c), I[25] = (T)(img)(_n11##x,_p14##y,z,c), I[26] = (T)(img)(_n12##x,_p14##y,z,c), I[27] = (T)(img)(_n13##x,_p14##y,z,c), I[28] = (T)(img)(_n14##x,_p14##y,z,c), I[29] = (T)(img)(_n15##x,_p14##y,z,c), \ - I[30] = (T)(img)(_p14##x,_p13##y,z,c), I[31] = (T)(img)(_p13##x,_p13##y,z,c), I[32] = (T)(img)(_p12##x,_p13##y,z,c), I[33] = (T)(img)(_p11##x,_p13##y,z,c), I[34] = (T)(img)(_p10##x,_p13##y,z,c), I[35] = (T)(img)(_p9##x,_p13##y,z,c), I[36] = (T)(img)(_p8##x,_p13##y,z,c), I[37] = (T)(img)(_p7##x,_p13##y,z,c), I[38] = (T)(img)(_p6##x,_p13##y,z,c), I[39] = (T)(img)(_p5##x,_p13##y,z,c), I[40] = (T)(img)(_p4##x,_p13##y,z,c), I[41] = (T)(img)(_p3##x,_p13##y,z,c), I[42] = (T)(img)(_p2##x,_p13##y,z,c), I[43] = (T)(img)(_p1##x,_p13##y,z,c), I[44] = (T)(img)(x,_p13##y,z,c), I[45] = (T)(img)(_n1##x,_p13##y,z,c), I[46] = (T)(img)(_n2##x,_p13##y,z,c), I[47] = (T)(img)(_n3##x,_p13##y,z,c), I[48] = (T)(img)(_n4##x,_p13##y,z,c), I[49] = (T)(img)(_n5##x,_p13##y,z,c), I[50] = (T)(img)(_n6##x,_p13##y,z,c), I[51] = (T)(img)(_n7##x,_p13##y,z,c), I[52] = (T)(img)(_n8##x,_p13##y,z,c), I[53] = (T)(img)(_n9##x,_p13##y,z,c), I[54] = (T)(img)(_n10##x,_p13##y,z,c), I[55] = (T)(img)(_n11##x,_p13##y,z,c), I[56] = (T)(img)(_n12##x,_p13##y,z,c), I[57] = (T)(img)(_n13##x,_p13##y,z,c), I[58] = (T)(img)(_n14##x,_p13##y,z,c), I[59] = (T)(img)(_n15##x,_p13##y,z,c), \ - I[60] = (T)(img)(_p14##x,_p12##y,z,c), I[61] = (T)(img)(_p13##x,_p12##y,z,c), I[62] = (T)(img)(_p12##x,_p12##y,z,c), I[63] = (T)(img)(_p11##x,_p12##y,z,c), I[64] = (T)(img)(_p10##x,_p12##y,z,c), I[65] = (T)(img)(_p9##x,_p12##y,z,c), I[66] = (T)(img)(_p8##x,_p12##y,z,c), I[67] = (T)(img)(_p7##x,_p12##y,z,c), I[68] = (T)(img)(_p6##x,_p12##y,z,c), I[69] = (T)(img)(_p5##x,_p12##y,z,c), I[70] = (T)(img)(_p4##x,_p12##y,z,c), I[71] = (T)(img)(_p3##x,_p12##y,z,c), I[72] = (T)(img)(_p2##x,_p12##y,z,c), I[73] = (T)(img)(_p1##x,_p12##y,z,c), I[74] = (T)(img)(x,_p12##y,z,c), I[75] = (T)(img)(_n1##x,_p12##y,z,c), I[76] = (T)(img)(_n2##x,_p12##y,z,c), I[77] = (T)(img)(_n3##x,_p12##y,z,c), I[78] = (T)(img)(_n4##x,_p12##y,z,c), I[79] = (T)(img)(_n5##x,_p12##y,z,c), I[80] = (T)(img)(_n6##x,_p12##y,z,c), I[81] = (T)(img)(_n7##x,_p12##y,z,c), I[82] = (T)(img)(_n8##x,_p12##y,z,c), I[83] = (T)(img)(_n9##x,_p12##y,z,c), I[84] = (T)(img)(_n10##x,_p12##y,z,c), I[85] = (T)(img)(_n11##x,_p12##y,z,c), I[86] = (T)(img)(_n12##x,_p12##y,z,c), I[87] = (T)(img)(_n13##x,_p12##y,z,c), I[88] = (T)(img)(_n14##x,_p12##y,z,c), I[89] = (T)(img)(_n15##x,_p12##y,z,c), \ - I[90] = (T)(img)(_p14##x,_p11##y,z,c), I[91] = (T)(img)(_p13##x,_p11##y,z,c), I[92] = (T)(img)(_p12##x,_p11##y,z,c), I[93] = (T)(img)(_p11##x,_p11##y,z,c), I[94] = (T)(img)(_p10##x,_p11##y,z,c), I[95] = (T)(img)(_p9##x,_p11##y,z,c), I[96] = (T)(img)(_p8##x,_p11##y,z,c), I[97] = (T)(img)(_p7##x,_p11##y,z,c), I[98] = (T)(img)(_p6##x,_p11##y,z,c), I[99] = (T)(img)(_p5##x,_p11##y,z,c), I[100] = (T)(img)(_p4##x,_p11##y,z,c), I[101] = (T)(img)(_p3##x,_p11##y,z,c), I[102] = (T)(img)(_p2##x,_p11##y,z,c), I[103] = (T)(img)(_p1##x,_p11##y,z,c), I[104] = (T)(img)(x,_p11##y,z,c), I[105] = (T)(img)(_n1##x,_p11##y,z,c), I[106] = (T)(img)(_n2##x,_p11##y,z,c), I[107] = (T)(img)(_n3##x,_p11##y,z,c), I[108] = (T)(img)(_n4##x,_p11##y,z,c), I[109] = (T)(img)(_n5##x,_p11##y,z,c), I[110] = (T)(img)(_n6##x,_p11##y,z,c), I[111] = (T)(img)(_n7##x,_p11##y,z,c), I[112] = (T)(img)(_n8##x,_p11##y,z,c), I[113] = (T)(img)(_n9##x,_p11##y,z,c), I[114] = (T)(img)(_n10##x,_p11##y,z,c), I[115] = (T)(img)(_n11##x,_p11##y,z,c), I[116] = (T)(img)(_n12##x,_p11##y,z,c), I[117] = (T)(img)(_n13##x,_p11##y,z,c), I[118] = (T)(img)(_n14##x,_p11##y,z,c), I[119] = (T)(img)(_n15##x,_p11##y,z,c), \ - I[120] = (T)(img)(_p14##x,_p10##y,z,c), I[121] = (T)(img)(_p13##x,_p10##y,z,c), I[122] = (T)(img)(_p12##x,_p10##y,z,c), I[123] = (T)(img)(_p11##x,_p10##y,z,c), I[124] = (T)(img)(_p10##x,_p10##y,z,c), I[125] = (T)(img)(_p9##x,_p10##y,z,c), I[126] = (T)(img)(_p8##x,_p10##y,z,c), I[127] = (T)(img)(_p7##x,_p10##y,z,c), I[128] = (T)(img)(_p6##x,_p10##y,z,c), I[129] = (T)(img)(_p5##x,_p10##y,z,c), I[130] = (T)(img)(_p4##x,_p10##y,z,c), I[131] = (T)(img)(_p3##x,_p10##y,z,c), I[132] = (T)(img)(_p2##x,_p10##y,z,c), I[133] = (T)(img)(_p1##x,_p10##y,z,c), I[134] = (T)(img)(x,_p10##y,z,c), I[135] = (T)(img)(_n1##x,_p10##y,z,c), I[136] = (T)(img)(_n2##x,_p10##y,z,c), I[137] = (T)(img)(_n3##x,_p10##y,z,c), I[138] = (T)(img)(_n4##x,_p10##y,z,c), I[139] = (T)(img)(_n5##x,_p10##y,z,c), I[140] = (T)(img)(_n6##x,_p10##y,z,c), I[141] = (T)(img)(_n7##x,_p10##y,z,c), I[142] = (T)(img)(_n8##x,_p10##y,z,c), I[143] = (T)(img)(_n9##x,_p10##y,z,c), I[144] = (T)(img)(_n10##x,_p10##y,z,c), I[145] = (T)(img)(_n11##x,_p10##y,z,c), I[146] = (T)(img)(_n12##x,_p10##y,z,c), I[147] = (T)(img)(_n13##x,_p10##y,z,c), I[148] = (T)(img)(_n14##x,_p10##y,z,c), I[149] = (T)(img)(_n15##x,_p10##y,z,c), \ - I[150] = (T)(img)(_p14##x,_p9##y,z,c), I[151] = (T)(img)(_p13##x,_p9##y,z,c), I[152] = (T)(img)(_p12##x,_p9##y,z,c), I[153] = (T)(img)(_p11##x,_p9##y,z,c), I[154] = (T)(img)(_p10##x,_p9##y,z,c), I[155] = (T)(img)(_p9##x,_p9##y,z,c), I[156] = (T)(img)(_p8##x,_p9##y,z,c), I[157] = (T)(img)(_p7##x,_p9##y,z,c), I[158] = (T)(img)(_p6##x,_p9##y,z,c), I[159] = (T)(img)(_p5##x,_p9##y,z,c), I[160] = (T)(img)(_p4##x,_p9##y,z,c), I[161] = (T)(img)(_p3##x,_p9##y,z,c), I[162] = (T)(img)(_p2##x,_p9##y,z,c), I[163] = (T)(img)(_p1##x,_p9##y,z,c), I[164] = (T)(img)(x,_p9##y,z,c), I[165] = (T)(img)(_n1##x,_p9##y,z,c), I[166] = (T)(img)(_n2##x,_p9##y,z,c), I[167] = (T)(img)(_n3##x,_p9##y,z,c), I[168] = (T)(img)(_n4##x,_p9##y,z,c), I[169] = (T)(img)(_n5##x,_p9##y,z,c), I[170] = (T)(img)(_n6##x,_p9##y,z,c), I[171] = (T)(img)(_n7##x,_p9##y,z,c), I[172] = (T)(img)(_n8##x,_p9##y,z,c), I[173] = (T)(img)(_n9##x,_p9##y,z,c), I[174] = (T)(img)(_n10##x,_p9##y,z,c), I[175] = (T)(img)(_n11##x,_p9##y,z,c), I[176] = (T)(img)(_n12##x,_p9##y,z,c), I[177] = (T)(img)(_n13##x,_p9##y,z,c), I[178] = (T)(img)(_n14##x,_p9##y,z,c), I[179] = (T)(img)(_n15##x,_p9##y,z,c), \ - I[180] = (T)(img)(_p14##x,_p8##y,z,c), I[181] = (T)(img)(_p13##x,_p8##y,z,c), I[182] = (T)(img)(_p12##x,_p8##y,z,c), I[183] = (T)(img)(_p11##x,_p8##y,z,c), I[184] = (T)(img)(_p10##x,_p8##y,z,c), I[185] = (T)(img)(_p9##x,_p8##y,z,c), I[186] = (T)(img)(_p8##x,_p8##y,z,c), I[187] = (T)(img)(_p7##x,_p8##y,z,c), I[188] = (T)(img)(_p6##x,_p8##y,z,c), I[189] = (T)(img)(_p5##x,_p8##y,z,c), I[190] = (T)(img)(_p4##x,_p8##y,z,c), I[191] = (T)(img)(_p3##x,_p8##y,z,c), I[192] = (T)(img)(_p2##x,_p8##y,z,c), I[193] = (T)(img)(_p1##x,_p8##y,z,c), I[194] = (T)(img)(x,_p8##y,z,c), I[195] = (T)(img)(_n1##x,_p8##y,z,c), I[196] = (T)(img)(_n2##x,_p8##y,z,c), I[197] = (T)(img)(_n3##x,_p8##y,z,c), I[198] = (T)(img)(_n4##x,_p8##y,z,c), I[199] = (T)(img)(_n5##x,_p8##y,z,c), I[200] = (T)(img)(_n6##x,_p8##y,z,c), I[201] = (T)(img)(_n7##x,_p8##y,z,c), I[202] = (T)(img)(_n8##x,_p8##y,z,c), I[203] = (T)(img)(_n9##x,_p8##y,z,c), I[204] = (T)(img)(_n10##x,_p8##y,z,c), I[205] = (T)(img)(_n11##x,_p8##y,z,c), I[206] = (T)(img)(_n12##x,_p8##y,z,c), I[207] = (T)(img)(_n13##x,_p8##y,z,c), I[208] = (T)(img)(_n14##x,_p8##y,z,c), I[209] = (T)(img)(_n15##x,_p8##y,z,c), \ - I[210] = (T)(img)(_p14##x,_p7##y,z,c), I[211] = (T)(img)(_p13##x,_p7##y,z,c), I[212] = (T)(img)(_p12##x,_p7##y,z,c), I[213] = (T)(img)(_p11##x,_p7##y,z,c), I[214] = (T)(img)(_p10##x,_p7##y,z,c), I[215] = (T)(img)(_p9##x,_p7##y,z,c), I[216] = (T)(img)(_p8##x,_p7##y,z,c), I[217] = (T)(img)(_p7##x,_p7##y,z,c), I[218] = (T)(img)(_p6##x,_p7##y,z,c), I[219] = (T)(img)(_p5##x,_p7##y,z,c), I[220] = (T)(img)(_p4##x,_p7##y,z,c), I[221] = (T)(img)(_p3##x,_p7##y,z,c), I[222] = (T)(img)(_p2##x,_p7##y,z,c), I[223] = (T)(img)(_p1##x,_p7##y,z,c), I[224] = (T)(img)(x,_p7##y,z,c), I[225] = (T)(img)(_n1##x,_p7##y,z,c), I[226] = (T)(img)(_n2##x,_p7##y,z,c), I[227] = (T)(img)(_n3##x,_p7##y,z,c), I[228] = (T)(img)(_n4##x,_p7##y,z,c), I[229] = (T)(img)(_n5##x,_p7##y,z,c), I[230] = (T)(img)(_n6##x,_p7##y,z,c), I[231] = (T)(img)(_n7##x,_p7##y,z,c), I[232] = (T)(img)(_n8##x,_p7##y,z,c), I[233] = (T)(img)(_n9##x,_p7##y,z,c), I[234] = (T)(img)(_n10##x,_p7##y,z,c), I[235] = (T)(img)(_n11##x,_p7##y,z,c), I[236] = (T)(img)(_n12##x,_p7##y,z,c), I[237] = (T)(img)(_n13##x,_p7##y,z,c), I[238] = (T)(img)(_n14##x,_p7##y,z,c), I[239] = (T)(img)(_n15##x,_p7##y,z,c), \ - I[240] = (T)(img)(_p14##x,_p6##y,z,c), I[241] = (T)(img)(_p13##x,_p6##y,z,c), I[242] = (T)(img)(_p12##x,_p6##y,z,c), I[243] = (T)(img)(_p11##x,_p6##y,z,c), I[244] = (T)(img)(_p10##x,_p6##y,z,c), I[245] = (T)(img)(_p9##x,_p6##y,z,c), I[246] = (T)(img)(_p8##x,_p6##y,z,c), I[247] = (T)(img)(_p7##x,_p6##y,z,c), I[248] = (T)(img)(_p6##x,_p6##y,z,c), I[249] = (T)(img)(_p5##x,_p6##y,z,c), I[250] = (T)(img)(_p4##x,_p6##y,z,c), I[251] = (T)(img)(_p3##x,_p6##y,z,c), I[252] = (T)(img)(_p2##x,_p6##y,z,c), I[253] = (T)(img)(_p1##x,_p6##y,z,c), I[254] = (T)(img)(x,_p6##y,z,c), I[255] = (T)(img)(_n1##x,_p6##y,z,c), I[256] = (T)(img)(_n2##x,_p6##y,z,c), I[257] = (T)(img)(_n3##x,_p6##y,z,c), I[258] = (T)(img)(_n4##x,_p6##y,z,c), I[259] = (T)(img)(_n5##x,_p6##y,z,c), I[260] = (T)(img)(_n6##x,_p6##y,z,c), I[261] = (T)(img)(_n7##x,_p6##y,z,c), I[262] = (T)(img)(_n8##x,_p6##y,z,c), I[263] = (T)(img)(_n9##x,_p6##y,z,c), I[264] = (T)(img)(_n10##x,_p6##y,z,c), I[265] = (T)(img)(_n11##x,_p6##y,z,c), I[266] = (T)(img)(_n12##x,_p6##y,z,c), I[267] = (T)(img)(_n13##x,_p6##y,z,c), I[268] = (T)(img)(_n14##x,_p6##y,z,c), I[269] = (T)(img)(_n15##x,_p6##y,z,c), \ - I[270] = (T)(img)(_p14##x,_p5##y,z,c), I[271] = (T)(img)(_p13##x,_p5##y,z,c), I[272] = (T)(img)(_p12##x,_p5##y,z,c), I[273] = (T)(img)(_p11##x,_p5##y,z,c), I[274] = (T)(img)(_p10##x,_p5##y,z,c), I[275] = (T)(img)(_p9##x,_p5##y,z,c), I[276] = (T)(img)(_p8##x,_p5##y,z,c), I[277] = (T)(img)(_p7##x,_p5##y,z,c), I[278] = (T)(img)(_p6##x,_p5##y,z,c), I[279] = (T)(img)(_p5##x,_p5##y,z,c), I[280] = (T)(img)(_p4##x,_p5##y,z,c), I[281] = (T)(img)(_p3##x,_p5##y,z,c), I[282] = (T)(img)(_p2##x,_p5##y,z,c), I[283] = (T)(img)(_p1##x,_p5##y,z,c), I[284] = (T)(img)(x,_p5##y,z,c), I[285] = (T)(img)(_n1##x,_p5##y,z,c), I[286] = (T)(img)(_n2##x,_p5##y,z,c), I[287] = (T)(img)(_n3##x,_p5##y,z,c), I[288] = (T)(img)(_n4##x,_p5##y,z,c), I[289] = (T)(img)(_n5##x,_p5##y,z,c), I[290] = (T)(img)(_n6##x,_p5##y,z,c), I[291] = (T)(img)(_n7##x,_p5##y,z,c), I[292] = (T)(img)(_n8##x,_p5##y,z,c), I[293] = (T)(img)(_n9##x,_p5##y,z,c), I[294] = (T)(img)(_n10##x,_p5##y,z,c), I[295] = (T)(img)(_n11##x,_p5##y,z,c), I[296] = (T)(img)(_n12##x,_p5##y,z,c), I[297] = (T)(img)(_n13##x,_p5##y,z,c), I[298] = (T)(img)(_n14##x,_p5##y,z,c), I[299] = (T)(img)(_n15##x,_p5##y,z,c), \ - I[300] = (T)(img)(_p14##x,_p4##y,z,c), I[301] = (T)(img)(_p13##x,_p4##y,z,c), I[302] = (T)(img)(_p12##x,_p4##y,z,c), I[303] = (T)(img)(_p11##x,_p4##y,z,c), I[304] = (T)(img)(_p10##x,_p4##y,z,c), I[305] = (T)(img)(_p9##x,_p4##y,z,c), I[306] = (T)(img)(_p8##x,_p4##y,z,c), I[307] = (T)(img)(_p7##x,_p4##y,z,c), I[308] = (T)(img)(_p6##x,_p4##y,z,c), I[309] = (T)(img)(_p5##x,_p4##y,z,c), I[310] = (T)(img)(_p4##x,_p4##y,z,c), I[311] = (T)(img)(_p3##x,_p4##y,z,c), I[312] = (T)(img)(_p2##x,_p4##y,z,c), I[313] = (T)(img)(_p1##x,_p4##y,z,c), I[314] = (T)(img)(x,_p4##y,z,c), I[315] = (T)(img)(_n1##x,_p4##y,z,c), I[316] = (T)(img)(_n2##x,_p4##y,z,c), I[317] = (T)(img)(_n3##x,_p4##y,z,c), I[318] = (T)(img)(_n4##x,_p4##y,z,c), I[319] = (T)(img)(_n5##x,_p4##y,z,c), I[320] = (T)(img)(_n6##x,_p4##y,z,c), I[321] = (T)(img)(_n7##x,_p4##y,z,c), I[322] = (T)(img)(_n8##x,_p4##y,z,c), I[323] = (T)(img)(_n9##x,_p4##y,z,c), I[324] = (T)(img)(_n10##x,_p4##y,z,c), I[325] = (T)(img)(_n11##x,_p4##y,z,c), I[326] = (T)(img)(_n12##x,_p4##y,z,c), I[327] = (T)(img)(_n13##x,_p4##y,z,c), I[328] = (T)(img)(_n14##x,_p4##y,z,c), I[329] = (T)(img)(_n15##x,_p4##y,z,c), \ - I[330] = (T)(img)(_p14##x,_p3##y,z,c), I[331] = (T)(img)(_p13##x,_p3##y,z,c), I[332] = (T)(img)(_p12##x,_p3##y,z,c), I[333] = (T)(img)(_p11##x,_p3##y,z,c), I[334] = (T)(img)(_p10##x,_p3##y,z,c), I[335] = (T)(img)(_p9##x,_p3##y,z,c), I[336] = (T)(img)(_p8##x,_p3##y,z,c), I[337] = (T)(img)(_p7##x,_p3##y,z,c), I[338] = (T)(img)(_p6##x,_p3##y,z,c), I[339] = (T)(img)(_p5##x,_p3##y,z,c), I[340] = (T)(img)(_p4##x,_p3##y,z,c), I[341] = (T)(img)(_p3##x,_p3##y,z,c), I[342] = (T)(img)(_p2##x,_p3##y,z,c), I[343] = (T)(img)(_p1##x,_p3##y,z,c), I[344] = (T)(img)(x,_p3##y,z,c), I[345] = (T)(img)(_n1##x,_p3##y,z,c), I[346] = (T)(img)(_n2##x,_p3##y,z,c), I[347] = (T)(img)(_n3##x,_p3##y,z,c), I[348] = (T)(img)(_n4##x,_p3##y,z,c), I[349] = (T)(img)(_n5##x,_p3##y,z,c), I[350] = (T)(img)(_n6##x,_p3##y,z,c), I[351] = (T)(img)(_n7##x,_p3##y,z,c), I[352] = (T)(img)(_n8##x,_p3##y,z,c), I[353] = (T)(img)(_n9##x,_p3##y,z,c), I[354] = (T)(img)(_n10##x,_p3##y,z,c), I[355] = (T)(img)(_n11##x,_p3##y,z,c), I[356] = (T)(img)(_n12##x,_p3##y,z,c), I[357] = (T)(img)(_n13##x,_p3##y,z,c), I[358] = (T)(img)(_n14##x,_p3##y,z,c), I[359] = (T)(img)(_n15##x,_p3##y,z,c), \ - I[360] = (T)(img)(_p14##x,_p2##y,z,c), I[361] = (T)(img)(_p13##x,_p2##y,z,c), I[362] = (T)(img)(_p12##x,_p2##y,z,c), I[363] = (T)(img)(_p11##x,_p2##y,z,c), I[364] = (T)(img)(_p10##x,_p2##y,z,c), I[365] = (T)(img)(_p9##x,_p2##y,z,c), I[366] = (T)(img)(_p8##x,_p2##y,z,c), I[367] = (T)(img)(_p7##x,_p2##y,z,c), I[368] = (T)(img)(_p6##x,_p2##y,z,c), I[369] = (T)(img)(_p5##x,_p2##y,z,c), I[370] = (T)(img)(_p4##x,_p2##y,z,c), I[371] = (T)(img)(_p3##x,_p2##y,z,c), I[372] = (T)(img)(_p2##x,_p2##y,z,c), I[373] = (T)(img)(_p1##x,_p2##y,z,c), I[374] = (T)(img)(x,_p2##y,z,c), I[375] = (T)(img)(_n1##x,_p2##y,z,c), I[376] = (T)(img)(_n2##x,_p2##y,z,c), I[377] = (T)(img)(_n3##x,_p2##y,z,c), I[378] = (T)(img)(_n4##x,_p2##y,z,c), I[379] = (T)(img)(_n5##x,_p2##y,z,c), I[380] = (T)(img)(_n6##x,_p2##y,z,c), I[381] = (T)(img)(_n7##x,_p2##y,z,c), I[382] = (T)(img)(_n8##x,_p2##y,z,c), I[383] = (T)(img)(_n9##x,_p2##y,z,c), I[384] = (T)(img)(_n10##x,_p2##y,z,c), I[385] = (T)(img)(_n11##x,_p2##y,z,c), I[386] = (T)(img)(_n12##x,_p2##y,z,c), I[387] = (T)(img)(_n13##x,_p2##y,z,c), I[388] = (T)(img)(_n14##x,_p2##y,z,c), I[389] = (T)(img)(_n15##x,_p2##y,z,c), \ - I[390] = (T)(img)(_p14##x,_p1##y,z,c), I[391] = (T)(img)(_p13##x,_p1##y,z,c), I[392] = (T)(img)(_p12##x,_p1##y,z,c), I[393] = (T)(img)(_p11##x,_p1##y,z,c), I[394] = (T)(img)(_p10##x,_p1##y,z,c), I[395] = (T)(img)(_p9##x,_p1##y,z,c), I[396] = (T)(img)(_p8##x,_p1##y,z,c), I[397] = (T)(img)(_p7##x,_p1##y,z,c), I[398] = (T)(img)(_p6##x,_p1##y,z,c), I[399] = (T)(img)(_p5##x,_p1##y,z,c), I[400] = (T)(img)(_p4##x,_p1##y,z,c), I[401] = (T)(img)(_p3##x,_p1##y,z,c), I[402] = (T)(img)(_p2##x,_p1##y,z,c), I[403] = (T)(img)(_p1##x,_p1##y,z,c), I[404] = (T)(img)(x,_p1##y,z,c), I[405] = (T)(img)(_n1##x,_p1##y,z,c), I[406] = (T)(img)(_n2##x,_p1##y,z,c), I[407] = (T)(img)(_n3##x,_p1##y,z,c), I[408] = (T)(img)(_n4##x,_p1##y,z,c), I[409] = (T)(img)(_n5##x,_p1##y,z,c), I[410] = (T)(img)(_n6##x,_p1##y,z,c), I[411] = (T)(img)(_n7##x,_p1##y,z,c), I[412] = (T)(img)(_n8##x,_p1##y,z,c), I[413] = (T)(img)(_n9##x,_p1##y,z,c), I[414] = (T)(img)(_n10##x,_p1##y,z,c), I[415] = (T)(img)(_n11##x,_p1##y,z,c), I[416] = (T)(img)(_n12##x,_p1##y,z,c), I[417] = (T)(img)(_n13##x,_p1##y,z,c), I[418] = (T)(img)(_n14##x,_p1##y,z,c), I[419] = (T)(img)(_n15##x,_p1##y,z,c), \ - I[420] = (T)(img)(_p14##x,y,z,c), I[421] = (T)(img)(_p13##x,y,z,c), I[422] = (T)(img)(_p12##x,y,z,c), I[423] = (T)(img)(_p11##x,y,z,c), I[424] = (T)(img)(_p10##x,y,z,c), I[425] = (T)(img)(_p9##x,y,z,c), I[426] = (T)(img)(_p8##x,y,z,c), I[427] = (T)(img)(_p7##x,y,z,c), I[428] = (T)(img)(_p6##x,y,z,c), I[429] = (T)(img)(_p5##x,y,z,c), I[430] = (T)(img)(_p4##x,y,z,c), I[431] = (T)(img)(_p3##x,y,z,c), I[432] = (T)(img)(_p2##x,y,z,c), I[433] = (T)(img)(_p1##x,y,z,c), I[434] = (T)(img)(x,y,z,c), I[435] = (T)(img)(_n1##x,y,z,c), I[436] = (T)(img)(_n2##x,y,z,c), I[437] = (T)(img)(_n3##x,y,z,c), I[438] = (T)(img)(_n4##x,y,z,c), I[439] = (T)(img)(_n5##x,y,z,c), I[440] = (T)(img)(_n6##x,y,z,c), I[441] = (T)(img)(_n7##x,y,z,c), I[442] = (T)(img)(_n8##x,y,z,c), I[443] = (T)(img)(_n9##x,y,z,c), I[444] = (T)(img)(_n10##x,y,z,c), I[445] = (T)(img)(_n11##x,y,z,c), I[446] = (T)(img)(_n12##x,y,z,c), I[447] = (T)(img)(_n13##x,y,z,c), I[448] = (T)(img)(_n14##x,y,z,c), I[449] = (T)(img)(_n15##x,y,z,c), \ - I[450] = (T)(img)(_p14##x,_n1##y,z,c), I[451] = (T)(img)(_p13##x,_n1##y,z,c), I[452] = (T)(img)(_p12##x,_n1##y,z,c), I[453] = (T)(img)(_p11##x,_n1##y,z,c), I[454] = (T)(img)(_p10##x,_n1##y,z,c), I[455] = (T)(img)(_p9##x,_n1##y,z,c), I[456] = (T)(img)(_p8##x,_n1##y,z,c), I[457] = (T)(img)(_p7##x,_n1##y,z,c), I[458] = (T)(img)(_p6##x,_n1##y,z,c), I[459] = (T)(img)(_p5##x,_n1##y,z,c), I[460] = (T)(img)(_p4##x,_n1##y,z,c), I[461] = (T)(img)(_p3##x,_n1##y,z,c), I[462] = (T)(img)(_p2##x,_n1##y,z,c), I[463] = (T)(img)(_p1##x,_n1##y,z,c), I[464] = (T)(img)(x,_n1##y,z,c), I[465] = (T)(img)(_n1##x,_n1##y,z,c), I[466] = (T)(img)(_n2##x,_n1##y,z,c), I[467] = (T)(img)(_n3##x,_n1##y,z,c), I[468] = (T)(img)(_n4##x,_n1##y,z,c), I[469] = (T)(img)(_n5##x,_n1##y,z,c), I[470] = (T)(img)(_n6##x,_n1##y,z,c), I[471] = (T)(img)(_n7##x,_n1##y,z,c), I[472] = (T)(img)(_n8##x,_n1##y,z,c), I[473] = (T)(img)(_n9##x,_n1##y,z,c), I[474] = (T)(img)(_n10##x,_n1##y,z,c), I[475] = (T)(img)(_n11##x,_n1##y,z,c), I[476] = (T)(img)(_n12##x,_n1##y,z,c), I[477] = (T)(img)(_n13##x,_n1##y,z,c), I[478] = (T)(img)(_n14##x,_n1##y,z,c), I[479] = (T)(img)(_n15##x,_n1##y,z,c), \ - I[480] = (T)(img)(_p14##x,_n2##y,z,c), I[481] = (T)(img)(_p13##x,_n2##y,z,c), I[482] = (T)(img)(_p12##x,_n2##y,z,c), I[483] = (T)(img)(_p11##x,_n2##y,z,c), I[484] = (T)(img)(_p10##x,_n2##y,z,c), I[485] = (T)(img)(_p9##x,_n2##y,z,c), I[486] = (T)(img)(_p8##x,_n2##y,z,c), I[487] = (T)(img)(_p7##x,_n2##y,z,c), I[488] = (T)(img)(_p6##x,_n2##y,z,c), I[489] = (T)(img)(_p5##x,_n2##y,z,c), I[490] = (T)(img)(_p4##x,_n2##y,z,c), I[491] = (T)(img)(_p3##x,_n2##y,z,c), I[492] = (T)(img)(_p2##x,_n2##y,z,c), I[493] = (T)(img)(_p1##x,_n2##y,z,c), I[494] = (T)(img)(x,_n2##y,z,c), I[495] = (T)(img)(_n1##x,_n2##y,z,c), I[496] = (T)(img)(_n2##x,_n2##y,z,c), I[497] = (T)(img)(_n3##x,_n2##y,z,c), I[498] = (T)(img)(_n4##x,_n2##y,z,c), I[499] = (T)(img)(_n5##x,_n2##y,z,c), I[500] = (T)(img)(_n6##x,_n2##y,z,c), I[501] = (T)(img)(_n7##x,_n2##y,z,c), I[502] = (T)(img)(_n8##x,_n2##y,z,c), I[503] = (T)(img)(_n9##x,_n2##y,z,c), I[504] = (T)(img)(_n10##x,_n2##y,z,c), I[505] = (T)(img)(_n11##x,_n2##y,z,c), I[506] = (T)(img)(_n12##x,_n2##y,z,c), I[507] = (T)(img)(_n13##x,_n2##y,z,c), I[508] = (T)(img)(_n14##x,_n2##y,z,c), I[509] = (T)(img)(_n15##x,_n2##y,z,c), \ - I[510] = (T)(img)(_p14##x,_n3##y,z,c), I[511] = (T)(img)(_p13##x,_n3##y,z,c), I[512] = (T)(img)(_p12##x,_n3##y,z,c), I[513] = (T)(img)(_p11##x,_n3##y,z,c), I[514] = (T)(img)(_p10##x,_n3##y,z,c), I[515] = (T)(img)(_p9##x,_n3##y,z,c), I[516] = (T)(img)(_p8##x,_n3##y,z,c), I[517] = (T)(img)(_p7##x,_n3##y,z,c), I[518] = (T)(img)(_p6##x,_n3##y,z,c), I[519] = (T)(img)(_p5##x,_n3##y,z,c), I[520] = (T)(img)(_p4##x,_n3##y,z,c), I[521] = (T)(img)(_p3##x,_n3##y,z,c), I[522] = (T)(img)(_p2##x,_n3##y,z,c), I[523] = (T)(img)(_p1##x,_n3##y,z,c), I[524] = (T)(img)(x,_n3##y,z,c), I[525] = (T)(img)(_n1##x,_n3##y,z,c), I[526] = (T)(img)(_n2##x,_n3##y,z,c), I[527] = (T)(img)(_n3##x,_n3##y,z,c), I[528] = (T)(img)(_n4##x,_n3##y,z,c), I[529] = (T)(img)(_n5##x,_n3##y,z,c), I[530] = (T)(img)(_n6##x,_n3##y,z,c), I[531] = (T)(img)(_n7##x,_n3##y,z,c), I[532] = (T)(img)(_n8##x,_n3##y,z,c), I[533] = (T)(img)(_n9##x,_n3##y,z,c), I[534] = (T)(img)(_n10##x,_n3##y,z,c), I[535] = (T)(img)(_n11##x,_n3##y,z,c), I[536] = (T)(img)(_n12##x,_n3##y,z,c), I[537] = (T)(img)(_n13##x,_n3##y,z,c), I[538] = (T)(img)(_n14##x,_n3##y,z,c), I[539] = (T)(img)(_n15##x,_n3##y,z,c), \ - I[540] = (T)(img)(_p14##x,_n4##y,z,c), I[541] = (T)(img)(_p13##x,_n4##y,z,c), I[542] = (T)(img)(_p12##x,_n4##y,z,c), I[543] = (T)(img)(_p11##x,_n4##y,z,c), I[544] = (T)(img)(_p10##x,_n4##y,z,c), I[545] = (T)(img)(_p9##x,_n4##y,z,c), I[546] = (T)(img)(_p8##x,_n4##y,z,c), I[547] = (T)(img)(_p7##x,_n4##y,z,c), I[548] = (T)(img)(_p6##x,_n4##y,z,c), I[549] = (T)(img)(_p5##x,_n4##y,z,c), I[550] = (T)(img)(_p4##x,_n4##y,z,c), I[551] = (T)(img)(_p3##x,_n4##y,z,c), I[552] = (T)(img)(_p2##x,_n4##y,z,c), I[553] = (T)(img)(_p1##x,_n4##y,z,c), I[554] = (T)(img)(x,_n4##y,z,c), I[555] = (T)(img)(_n1##x,_n4##y,z,c), I[556] = (T)(img)(_n2##x,_n4##y,z,c), I[557] = (T)(img)(_n3##x,_n4##y,z,c), I[558] = (T)(img)(_n4##x,_n4##y,z,c), I[559] = (T)(img)(_n5##x,_n4##y,z,c), I[560] = (T)(img)(_n6##x,_n4##y,z,c), I[561] = (T)(img)(_n7##x,_n4##y,z,c), I[562] = (T)(img)(_n8##x,_n4##y,z,c), I[563] = (T)(img)(_n9##x,_n4##y,z,c), I[564] = (T)(img)(_n10##x,_n4##y,z,c), I[565] = (T)(img)(_n11##x,_n4##y,z,c), I[566] = (T)(img)(_n12##x,_n4##y,z,c), I[567] = (T)(img)(_n13##x,_n4##y,z,c), I[568] = (T)(img)(_n14##x,_n4##y,z,c), I[569] = (T)(img)(_n15##x,_n4##y,z,c), \ - I[570] = (T)(img)(_p14##x,_n5##y,z,c), I[571] = (T)(img)(_p13##x,_n5##y,z,c), I[572] = (T)(img)(_p12##x,_n5##y,z,c), I[573] = (T)(img)(_p11##x,_n5##y,z,c), I[574] = (T)(img)(_p10##x,_n5##y,z,c), I[575] = (T)(img)(_p9##x,_n5##y,z,c), I[576] = (T)(img)(_p8##x,_n5##y,z,c), I[577] = (T)(img)(_p7##x,_n5##y,z,c), I[578] = (T)(img)(_p6##x,_n5##y,z,c), I[579] = (T)(img)(_p5##x,_n5##y,z,c), I[580] = (T)(img)(_p4##x,_n5##y,z,c), I[581] = (T)(img)(_p3##x,_n5##y,z,c), I[582] = (T)(img)(_p2##x,_n5##y,z,c), I[583] = (T)(img)(_p1##x,_n5##y,z,c), I[584] = (T)(img)(x,_n5##y,z,c), I[585] = (T)(img)(_n1##x,_n5##y,z,c), I[586] = (T)(img)(_n2##x,_n5##y,z,c), I[587] = (T)(img)(_n3##x,_n5##y,z,c), I[588] = (T)(img)(_n4##x,_n5##y,z,c), I[589] = (T)(img)(_n5##x,_n5##y,z,c), I[590] = (T)(img)(_n6##x,_n5##y,z,c), I[591] = (T)(img)(_n7##x,_n5##y,z,c), I[592] = (T)(img)(_n8##x,_n5##y,z,c), I[593] = (T)(img)(_n9##x,_n5##y,z,c), I[594] = (T)(img)(_n10##x,_n5##y,z,c), I[595] = (T)(img)(_n11##x,_n5##y,z,c), I[596] = (T)(img)(_n12##x,_n5##y,z,c), I[597] = (T)(img)(_n13##x,_n5##y,z,c), I[598] = (T)(img)(_n14##x,_n5##y,z,c), I[599] = (T)(img)(_n15##x,_n5##y,z,c), \ - I[600] = (T)(img)(_p14##x,_n6##y,z,c), I[601] = (T)(img)(_p13##x,_n6##y,z,c), I[602] = (T)(img)(_p12##x,_n6##y,z,c), I[603] = (T)(img)(_p11##x,_n6##y,z,c), I[604] = (T)(img)(_p10##x,_n6##y,z,c), I[605] = (T)(img)(_p9##x,_n6##y,z,c), I[606] = (T)(img)(_p8##x,_n6##y,z,c), I[607] = (T)(img)(_p7##x,_n6##y,z,c), I[608] = (T)(img)(_p6##x,_n6##y,z,c), I[609] = (T)(img)(_p5##x,_n6##y,z,c), I[610] = (T)(img)(_p4##x,_n6##y,z,c), I[611] = (T)(img)(_p3##x,_n6##y,z,c), I[612] = (T)(img)(_p2##x,_n6##y,z,c), I[613] = (T)(img)(_p1##x,_n6##y,z,c), I[614] = (T)(img)(x,_n6##y,z,c), I[615] = (T)(img)(_n1##x,_n6##y,z,c), I[616] = (T)(img)(_n2##x,_n6##y,z,c), I[617] = (T)(img)(_n3##x,_n6##y,z,c), I[618] = (T)(img)(_n4##x,_n6##y,z,c), I[619] = (T)(img)(_n5##x,_n6##y,z,c), I[620] = (T)(img)(_n6##x,_n6##y,z,c), I[621] = (T)(img)(_n7##x,_n6##y,z,c), I[622] = (T)(img)(_n8##x,_n6##y,z,c), I[623] = (T)(img)(_n9##x,_n6##y,z,c), I[624] = (T)(img)(_n10##x,_n6##y,z,c), I[625] = (T)(img)(_n11##x,_n6##y,z,c), I[626] = (T)(img)(_n12##x,_n6##y,z,c), I[627] = (T)(img)(_n13##x,_n6##y,z,c), I[628] = (T)(img)(_n14##x,_n6##y,z,c), I[629] = (T)(img)(_n15##x,_n6##y,z,c), \ - I[630] = (T)(img)(_p14##x,_n7##y,z,c), I[631] = (T)(img)(_p13##x,_n7##y,z,c), I[632] = (T)(img)(_p12##x,_n7##y,z,c), I[633] = (T)(img)(_p11##x,_n7##y,z,c), I[634] = (T)(img)(_p10##x,_n7##y,z,c), I[635] = (T)(img)(_p9##x,_n7##y,z,c), I[636] = (T)(img)(_p8##x,_n7##y,z,c), I[637] = (T)(img)(_p7##x,_n7##y,z,c), I[638] = (T)(img)(_p6##x,_n7##y,z,c), I[639] = (T)(img)(_p5##x,_n7##y,z,c), I[640] = (T)(img)(_p4##x,_n7##y,z,c), I[641] = (T)(img)(_p3##x,_n7##y,z,c), I[642] = (T)(img)(_p2##x,_n7##y,z,c), I[643] = (T)(img)(_p1##x,_n7##y,z,c), I[644] = (T)(img)(x,_n7##y,z,c), I[645] = (T)(img)(_n1##x,_n7##y,z,c), I[646] = (T)(img)(_n2##x,_n7##y,z,c), I[647] = (T)(img)(_n3##x,_n7##y,z,c), I[648] = (T)(img)(_n4##x,_n7##y,z,c), I[649] = (T)(img)(_n5##x,_n7##y,z,c), I[650] = (T)(img)(_n6##x,_n7##y,z,c), I[651] = (T)(img)(_n7##x,_n7##y,z,c), I[652] = (T)(img)(_n8##x,_n7##y,z,c), I[653] = (T)(img)(_n9##x,_n7##y,z,c), I[654] = (T)(img)(_n10##x,_n7##y,z,c), I[655] = (T)(img)(_n11##x,_n7##y,z,c), I[656] = (T)(img)(_n12##x,_n7##y,z,c), I[657] = (T)(img)(_n13##x,_n7##y,z,c), I[658] = (T)(img)(_n14##x,_n7##y,z,c), I[659] = (T)(img)(_n15##x,_n7##y,z,c), \ - I[660] = (T)(img)(_p14##x,_n8##y,z,c), I[661] = (T)(img)(_p13##x,_n8##y,z,c), I[662] = (T)(img)(_p12##x,_n8##y,z,c), I[663] = (T)(img)(_p11##x,_n8##y,z,c), I[664] = (T)(img)(_p10##x,_n8##y,z,c), I[665] = (T)(img)(_p9##x,_n8##y,z,c), I[666] = (T)(img)(_p8##x,_n8##y,z,c), I[667] = (T)(img)(_p7##x,_n8##y,z,c), I[668] = (T)(img)(_p6##x,_n8##y,z,c), I[669] = (T)(img)(_p5##x,_n8##y,z,c), I[670] = (T)(img)(_p4##x,_n8##y,z,c), I[671] = (T)(img)(_p3##x,_n8##y,z,c), I[672] = (T)(img)(_p2##x,_n8##y,z,c), I[673] = (T)(img)(_p1##x,_n8##y,z,c), I[674] = (T)(img)(x,_n8##y,z,c), I[675] = (T)(img)(_n1##x,_n8##y,z,c), I[676] = (T)(img)(_n2##x,_n8##y,z,c), I[677] = (T)(img)(_n3##x,_n8##y,z,c), I[678] = (T)(img)(_n4##x,_n8##y,z,c), I[679] = (T)(img)(_n5##x,_n8##y,z,c), I[680] = (T)(img)(_n6##x,_n8##y,z,c), I[681] = (T)(img)(_n7##x,_n8##y,z,c), I[682] = (T)(img)(_n8##x,_n8##y,z,c), I[683] = (T)(img)(_n9##x,_n8##y,z,c), I[684] = (T)(img)(_n10##x,_n8##y,z,c), I[685] = (T)(img)(_n11##x,_n8##y,z,c), I[686] = (T)(img)(_n12##x,_n8##y,z,c), I[687] = (T)(img)(_n13##x,_n8##y,z,c), I[688] = (T)(img)(_n14##x,_n8##y,z,c), I[689] = (T)(img)(_n15##x,_n8##y,z,c), \ - I[690] = (T)(img)(_p14##x,_n9##y,z,c), I[691] = (T)(img)(_p13##x,_n9##y,z,c), I[692] = (T)(img)(_p12##x,_n9##y,z,c), I[693] = (T)(img)(_p11##x,_n9##y,z,c), I[694] = (T)(img)(_p10##x,_n9##y,z,c), I[695] = (T)(img)(_p9##x,_n9##y,z,c), I[696] = (T)(img)(_p8##x,_n9##y,z,c), I[697] = (T)(img)(_p7##x,_n9##y,z,c), I[698] = (T)(img)(_p6##x,_n9##y,z,c), I[699] = (T)(img)(_p5##x,_n9##y,z,c), I[700] = (T)(img)(_p4##x,_n9##y,z,c), I[701] = (T)(img)(_p3##x,_n9##y,z,c), I[702] = (T)(img)(_p2##x,_n9##y,z,c), I[703] = (T)(img)(_p1##x,_n9##y,z,c), I[704] = (T)(img)(x,_n9##y,z,c), I[705] = (T)(img)(_n1##x,_n9##y,z,c), I[706] = (T)(img)(_n2##x,_n9##y,z,c), I[707] = (T)(img)(_n3##x,_n9##y,z,c), I[708] = (T)(img)(_n4##x,_n9##y,z,c), I[709] = (T)(img)(_n5##x,_n9##y,z,c), I[710] = (T)(img)(_n6##x,_n9##y,z,c), I[711] = (T)(img)(_n7##x,_n9##y,z,c), I[712] = (T)(img)(_n8##x,_n9##y,z,c), I[713] = (T)(img)(_n9##x,_n9##y,z,c), I[714] = (T)(img)(_n10##x,_n9##y,z,c), I[715] = (T)(img)(_n11##x,_n9##y,z,c), I[716] = (T)(img)(_n12##x,_n9##y,z,c), I[717] = (T)(img)(_n13##x,_n9##y,z,c), I[718] = (T)(img)(_n14##x,_n9##y,z,c), I[719] = (T)(img)(_n15##x,_n9##y,z,c), \ - I[720] = (T)(img)(_p14##x,_n10##y,z,c), I[721] = (T)(img)(_p13##x,_n10##y,z,c), I[722] = (T)(img)(_p12##x,_n10##y,z,c), I[723] = (T)(img)(_p11##x,_n10##y,z,c), I[724] = (T)(img)(_p10##x,_n10##y,z,c), I[725] = (T)(img)(_p9##x,_n10##y,z,c), I[726] = (T)(img)(_p8##x,_n10##y,z,c), I[727] = (T)(img)(_p7##x,_n10##y,z,c), I[728] = (T)(img)(_p6##x,_n10##y,z,c), I[729] = (T)(img)(_p5##x,_n10##y,z,c), I[730] = (T)(img)(_p4##x,_n10##y,z,c), I[731] = (T)(img)(_p3##x,_n10##y,z,c), I[732] = (T)(img)(_p2##x,_n10##y,z,c), I[733] = (T)(img)(_p1##x,_n10##y,z,c), I[734] = (T)(img)(x,_n10##y,z,c), I[735] = (T)(img)(_n1##x,_n10##y,z,c), I[736] = (T)(img)(_n2##x,_n10##y,z,c), I[737] = (T)(img)(_n3##x,_n10##y,z,c), I[738] = (T)(img)(_n4##x,_n10##y,z,c), I[739] = (T)(img)(_n5##x,_n10##y,z,c), I[740] = (T)(img)(_n6##x,_n10##y,z,c), I[741] = (T)(img)(_n7##x,_n10##y,z,c), I[742] = (T)(img)(_n8##x,_n10##y,z,c), I[743] = (T)(img)(_n9##x,_n10##y,z,c), I[744] = (T)(img)(_n10##x,_n10##y,z,c), I[745] = (T)(img)(_n11##x,_n10##y,z,c), I[746] = (T)(img)(_n12##x,_n10##y,z,c), I[747] = (T)(img)(_n13##x,_n10##y,z,c), I[748] = (T)(img)(_n14##x,_n10##y,z,c), I[749] = (T)(img)(_n15##x,_n10##y,z,c), \ - I[750] = (T)(img)(_p14##x,_n11##y,z,c), I[751] = (T)(img)(_p13##x,_n11##y,z,c), I[752] = (T)(img)(_p12##x,_n11##y,z,c), I[753] = (T)(img)(_p11##x,_n11##y,z,c), I[754] = (T)(img)(_p10##x,_n11##y,z,c), I[755] = (T)(img)(_p9##x,_n11##y,z,c), I[756] = (T)(img)(_p8##x,_n11##y,z,c), I[757] = (T)(img)(_p7##x,_n11##y,z,c), I[758] = (T)(img)(_p6##x,_n11##y,z,c), I[759] = (T)(img)(_p5##x,_n11##y,z,c), I[760] = (T)(img)(_p4##x,_n11##y,z,c), I[761] = (T)(img)(_p3##x,_n11##y,z,c), I[762] = (T)(img)(_p2##x,_n11##y,z,c), I[763] = (T)(img)(_p1##x,_n11##y,z,c), I[764] = (T)(img)(x,_n11##y,z,c), I[765] = (T)(img)(_n1##x,_n11##y,z,c), I[766] = (T)(img)(_n2##x,_n11##y,z,c), I[767] = (T)(img)(_n3##x,_n11##y,z,c), I[768] = (T)(img)(_n4##x,_n11##y,z,c), I[769] = (T)(img)(_n5##x,_n11##y,z,c), I[770] = (T)(img)(_n6##x,_n11##y,z,c), I[771] = (T)(img)(_n7##x,_n11##y,z,c), I[772] = (T)(img)(_n8##x,_n11##y,z,c), I[773] = (T)(img)(_n9##x,_n11##y,z,c), I[774] = (T)(img)(_n10##x,_n11##y,z,c), I[775] = (T)(img)(_n11##x,_n11##y,z,c), I[776] = (T)(img)(_n12##x,_n11##y,z,c), I[777] = (T)(img)(_n13##x,_n11##y,z,c), I[778] = (T)(img)(_n14##x,_n11##y,z,c), I[779] = (T)(img)(_n15##x,_n11##y,z,c), \ - I[780] = (T)(img)(_p14##x,_n12##y,z,c), I[781] = (T)(img)(_p13##x,_n12##y,z,c), I[782] = (T)(img)(_p12##x,_n12##y,z,c), I[783] = (T)(img)(_p11##x,_n12##y,z,c), I[784] = (T)(img)(_p10##x,_n12##y,z,c), I[785] = (T)(img)(_p9##x,_n12##y,z,c), I[786] = (T)(img)(_p8##x,_n12##y,z,c), I[787] = (T)(img)(_p7##x,_n12##y,z,c), I[788] = (T)(img)(_p6##x,_n12##y,z,c), I[789] = (T)(img)(_p5##x,_n12##y,z,c), I[790] = (T)(img)(_p4##x,_n12##y,z,c), I[791] = (T)(img)(_p3##x,_n12##y,z,c), I[792] = (T)(img)(_p2##x,_n12##y,z,c), I[793] = (T)(img)(_p1##x,_n12##y,z,c), I[794] = (T)(img)(x,_n12##y,z,c), I[795] = (T)(img)(_n1##x,_n12##y,z,c), I[796] = (T)(img)(_n2##x,_n12##y,z,c), I[797] = (T)(img)(_n3##x,_n12##y,z,c), I[798] = (T)(img)(_n4##x,_n12##y,z,c), I[799] = (T)(img)(_n5##x,_n12##y,z,c), I[800] = (T)(img)(_n6##x,_n12##y,z,c), I[801] = (T)(img)(_n7##x,_n12##y,z,c), I[802] = (T)(img)(_n8##x,_n12##y,z,c), I[803] = (T)(img)(_n9##x,_n12##y,z,c), I[804] = (T)(img)(_n10##x,_n12##y,z,c), I[805] = (T)(img)(_n11##x,_n12##y,z,c), I[806] = (T)(img)(_n12##x,_n12##y,z,c), I[807] = (T)(img)(_n13##x,_n12##y,z,c), I[808] = (T)(img)(_n14##x,_n12##y,z,c), I[809] = (T)(img)(_n15##x,_n12##y,z,c), \ - I[810] = (T)(img)(_p14##x,_n13##y,z,c), I[811] = (T)(img)(_p13##x,_n13##y,z,c), I[812] = (T)(img)(_p12##x,_n13##y,z,c), I[813] = (T)(img)(_p11##x,_n13##y,z,c), I[814] = (T)(img)(_p10##x,_n13##y,z,c), I[815] = (T)(img)(_p9##x,_n13##y,z,c), I[816] = (T)(img)(_p8##x,_n13##y,z,c), I[817] = (T)(img)(_p7##x,_n13##y,z,c), I[818] = (T)(img)(_p6##x,_n13##y,z,c), I[819] = (T)(img)(_p5##x,_n13##y,z,c), I[820] = (T)(img)(_p4##x,_n13##y,z,c), I[821] = (T)(img)(_p3##x,_n13##y,z,c), I[822] = (T)(img)(_p2##x,_n13##y,z,c), I[823] = (T)(img)(_p1##x,_n13##y,z,c), I[824] = (T)(img)(x,_n13##y,z,c), I[825] = (T)(img)(_n1##x,_n13##y,z,c), I[826] = (T)(img)(_n2##x,_n13##y,z,c), I[827] = (T)(img)(_n3##x,_n13##y,z,c), I[828] = (T)(img)(_n4##x,_n13##y,z,c), I[829] = (T)(img)(_n5##x,_n13##y,z,c), I[830] = (T)(img)(_n6##x,_n13##y,z,c), I[831] = (T)(img)(_n7##x,_n13##y,z,c), I[832] = (T)(img)(_n8##x,_n13##y,z,c), I[833] = (T)(img)(_n9##x,_n13##y,z,c), I[834] = (T)(img)(_n10##x,_n13##y,z,c), I[835] = (T)(img)(_n11##x,_n13##y,z,c), I[836] = (T)(img)(_n12##x,_n13##y,z,c), I[837] = (T)(img)(_n13##x,_n13##y,z,c), I[838] = (T)(img)(_n14##x,_n13##y,z,c), I[839] = (T)(img)(_n15##x,_n13##y,z,c), \ - I[840] = (T)(img)(_p14##x,_n14##y,z,c), I[841] = (T)(img)(_p13##x,_n14##y,z,c), I[842] = (T)(img)(_p12##x,_n14##y,z,c), I[843] = (T)(img)(_p11##x,_n14##y,z,c), I[844] = (T)(img)(_p10##x,_n14##y,z,c), I[845] = (T)(img)(_p9##x,_n14##y,z,c), I[846] = (T)(img)(_p8##x,_n14##y,z,c), I[847] = (T)(img)(_p7##x,_n14##y,z,c), I[848] = (T)(img)(_p6##x,_n14##y,z,c), I[849] = (T)(img)(_p5##x,_n14##y,z,c), I[850] = (T)(img)(_p4##x,_n14##y,z,c), I[851] = (T)(img)(_p3##x,_n14##y,z,c), I[852] = (T)(img)(_p2##x,_n14##y,z,c), I[853] = (T)(img)(_p1##x,_n14##y,z,c), I[854] = (T)(img)(x,_n14##y,z,c), I[855] = (T)(img)(_n1##x,_n14##y,z,c), I[856] = (T)(img)(_n2##x,_n14##y,z,c), I[857] = (T)(img)(_n3##x,_n14##y,z,c), I[858] = (T)(img)(_n4##x,_n14##y,z,c), I[859] = (T)(img)(_n5##x,_n14##y,z,c), I[860] = (T)(img)(_n6##x,_n14##y,z,c), I[861] = (T)(img)(_n7##x,_n14##y,z,c), I[862] = (T)(img)(_n8##x,_n14##y,z,c), I[863] = (T)(img)(_n9##x,_n14##y,z,c), I[864] = (T)(img)(_n10##x,_n14##y,z,c), I[865] = (T)(img)(_n11##x,_n14##y,z,c), I[866] = (T)(img)(_n12##x,_n14##y,z,c), I[867] = (T)(img)(_n13##x,_n14##y,z,c), I[868] = (T)(img)(_n14##x,_n14##y,z,c), I[869] = (T)(img)(_n15##x,_n14##y,z,c), \ - I[870] = (T)(img)(_p14##x,_n15##y,z,c), I[871] = (T)(img)(_p13##x,_n15##y,z,c), I[872] = (T)(img)(_p12##x,_n15##y,z,c), I[873] = (T)(img)(_p11##x,_n15##y,z,c), I[874] = (T)(img)(_p10##x,_n15##y,z,c), I[875] = (T)(img)(_p9##x,_n15##y,z,c), I[876] = (T)(img)(_p8##x,_n15##y,z,c), I[877] = (T)(img)(_p7##x,_n15##y,z,c), I[878] = (T)(img)(_p6##x,_n15##y,z,c), I[879] = (T)(img)(_p5##x,_n15##y,z,c), I[880] = (T)(img)(_p4##x,_n15##y,z,c), I[881] = (T)(img)(_p3##x,_n15##y,z,c), I[882] = (T)(img)(_p2##x,_n15##y,z,c), I[883] = (T)(img)(_p1##x,_n15##y,z,c), I[884] = (T)(img)(x,_n15##y,z,c), I[885] = (T)(img)(_n1##x,_n15##y,z,c), I[886] = (T)(img)(_n2##x,_n15##y,z,c), I[887] = (T)(img)(_n3##x,_n15##y,z,c), I[888] = (T)(img)(_n4##x,_n15##y,z,c), I[889] = (T)(img)(_n5##x,_n15##y,z,c), I[890] = (T)(img)(_n6##x,_n15##y,z,c), I[891] = (T)(img)(_n7##x,_n15##y,z,c), I[892] = (T)(img)(_n8##x,_n15##y,z,c), I[893] = (T)(img)(_n9##x,_n15##y,z,c), I[894] = (T)(img)(_n10##x,_n15##y,z,c), I[895] = (T)(img)(_n11##x,_n15##y,z,c), I[896] = (T)(img)(_n12##x,_n15##y,z,c), I[897] = (T)(img)(_n13##x,_n15##y,z,c), I[898] = (T)(img)(_n14##x,_n15##y,z,c), I[899] = (T)(img)(_n15##x,_n15##y,z,c); - -// Define 31x31 loop macros -//------------------------- -#define cimg_for31(bound,i) for (int i = 0, \ - _p15##i = 0, _p14##i = 0, _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13, \ - _n14##i = 14>=(int)(bound)?(int)(bound)-1:14, \ - _n15##i = 15>=(int)(bound)?(int)(bound)-1:15; \ - _n15##i<(int)(bound) || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p15##i = _p14##i, _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i) - -#define cimg_for31X(img,x) cimg_for31((img)._width,x) -#define cimg_for31Y(img,y) cimg_for31((img)._height,y) -#define cimg_for31Z(img,z) cimg_for31((img)._depth,z) -#define cimg_for31C(img,c) cimg_for31((img)._spectrum,c) -#define cimg_for31XY(img,x,y) cimg_for31Y(img,y) cimg_for31X(img,x) -#define cimg_for31XZ(img,x,z) cimg_for31Z(img,z) cimg_for31X(img,x) -#define cimg_for31XC(img,x,c) cimg_for31C(img,c) cimg_for31X(img,x) -#define cimg_for31YZ(img,y,z) cimg_for31Z(img,z) cimg_for31Y(img,y) -#define cimg_for31YC(img,y,c) cimg_for31C(img,c) cimg_for31Y(img,y) -#define cimg_for31ZC(img,z,c) cimg_for31C(img,c) cimg_for31Z(img,z) -#define cimg_for31XYZ(img,x,y,z) cimg_for31Z(img,z) cimg_for31XY(img,x,y) -#define cimg_for31XZC(img,x,z,c) cimg_for31C(img,c) cimg_for31XZ(img,x,z) -#define cimg_for31YZC(img,y,z,c) cimg_for31C(img,c) cimg_for31YZ(img,y,z) -#define cimg_for31XYZC(img,x,y,z,c) cimg_for31C(img,c) cimg_for31XYZ(img,x,y,z) - -#define cimg_for_in31(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p15##i = i-15<0?0:i-15, \ - _p14##i = i-14<0?0:i-14, \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13, \ - _n14##i = i+14>=(int)(bound)?(int)(bound)-1:i+14, \ - _n15##i = i+15>=(int)(bound)?(int)(bound)-1:i+15; \ - i<=(int)(i1) && (_n15##i<(int)(bound) || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p15##i = _p14##i, _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i) - -#define cimg_for_in31X(img,x0,x1,x) cimg_for_in31((img)._width,x0,x1,x) -#define cimg_for_in31Y(img,y0,y1,y) cimg_for_in31((img)._height,y0,y1,y) -#define cimg_for_in31Z(img,z0,z1,z) cimg_for_in31((img)._depth,z0,z1,z) -#define cimg_for_in31C(img,c0,c1,c) cimg_for_in31((img)._spectrum,c0,c1,c) -#define cimg_for_in31XY(img,x0,y0,x1,y1,x,y) cimg_for_in31Y(img,y0,y1,y) cimg_for_in31X(img,x0,x1,x) -#define cimg_for_in31XZ(img,x0,z0,x1,z1,x,z) cimg_for_in31Z(img,z0,z1,z) cimg_for_in31X(img,x0,x1,x) -#define cimg_for_in31XC(img,x0,c0,x1,c1,x,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31X(img,x0,x1,x) -#define cimg_for_in31YZ(img,y0,z0,y1,z1,y,z) cimg_for_in31Z(img,z0,z1,z) cimg_for_in31Y(img,y0,y1,y) -#define cimg_for_in31YC(img,y0,c0,y1,c1,y,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31Y(img,y0,y1,y) -#define cimg_for_in31ZC(img,z0,c0,z1,c1,z,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31Z(img,z0,z1,z) -#define cimg_for_in31XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in31Z(img,z0,z1,z) cimg_for_in31XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in31XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in31YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in31XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in31C(img,c0,c1,c) cimg_for_in31XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for31x31(img,x,y,z,c,I,T) \ - cimg_for31((img)._height,y) for (int x = 0, \ - _p15##x = 0, _p14##x = 0, _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = 13>=((img)._width)?(img).width()-1:13, \ - _n14##x = 14>=((img)._width)?(img).width()-1:14, \ - _n15##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = I[14] = I[15] = (T)(img)(0,_p15##y,z,c)), \ - (I[31] = I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = I[45] = I[46] = (T)(img)(0,_p14##y,z,c)), \ - (I[62] = I[63] = I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = (T)(img)(0,_p13##y,z,c)), \ - (I[93] = I[94] = I[95] = I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = I[108] = (T)(img)(0,_p12##y,z,c)), \ - (I[124] = I[125] = I[126] = I[127] = I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = I[138] = I[139] = (T)(img)(0,_p11##y,z,c)), \ - (I[155] = I[156] = I[157] = I[158] = I[159] = I[160] = I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = (T)(img)(0,_p10##y,z,c)), \ - (I[186] = I[187] = I[188] = I[189] = I[190] = I[191] = I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = (T)(img)(0,_p9##y,z,c)), \ - (I[217] = I[218] = I[219] = I[220] = I[221] = I[222] = I[223] = I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = I[231] = I[232] = (T)(img)(0,_p8##y,z,c)), \ - (I[248] = I[249] = I[250] = I[251] = I[252] = I[253] = I[254] = I[255] = I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = I[263] = (T)(img)(0,_p7##y,z,c)), \ - (I[279] = I[280] = I[281] = I[282] = I[283] = I[284] = I[285] = I[286] = I[287] = I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = (T)(img)(0,_p6##y,z,c)), \ - (I[310] = I[311] = I[312] = I[313] = I[314] = I[315] = I[316] = I[317] = I[318] = I[319] = I[320] = I[321] = I[322] = I[323] = I[324] = I[325] = (T)(img)(0,_p5##y,z,c)), \ - (I[341] = I[342] = I[343] = I[344] = I[345] = I[346] = I[347] = I[348] = I[349] = I[350] = I[351] = I[352] = I[353] = I[354] = I[355] = I[356] = (T)(img)(0,_p4##y,z,c)), \ - (I[372] = I[373] = I[374] = I[375] = I[376] = I[377] = I[378] = I[379] = I[380] = I[381] = I[382] = I[383] = I[384] = I[385] = I[386] = I[387] = (T)(img)(0,_p3##y,z,c)), \ - (I[403] = I[404] = I[405] = I[406] = I[407] = I[408] = I[409] = I[410] = I[411] = I[412] = I[413] = I[414] = I[415] = I[416] = I[417] = I[418] = (T)(img)(0,_p2##y,z,c)), \ - (I[434] = I[435] = I[436] = I[437] = I[438] = I[439] = I[440] = I[441] = I[442] = I[443] = I[444] = I[445] = I[446] = I[447] = I[448] = I[449] = (T)(img)(0,_p1##y,z,c)), \ - (I[465] = I[466] = I[467] = I[468] = I[469] = I[470] = I[471] = I[472] = I[473] = I[474] = I[475] = I[476] = I[477] = I[478] = I[479] = I[480] = (T)(img)(0,y,z,c)), \ - (I[496] = I[497] = I[498] = I[499] = I[500] = I[501] = I[502] = I[503] = I[504] = I[505] = I[506] = I[507] = I[508] = I[509] = I[510] = I[511] = (T)(img)(0,_n1##y,z,c)), \ - (I[527] = I[528] = I[529] = I[530] = I[531] = I[532] = I[533] = I[534] = I[535] = I[536] = I[537] = I[538] = I[539] = I[540] = I[541] = I[542] = (T)(img)(0,_n2##y,z,c)), \ - (I[558] = I[559] = I[560] = I[561] = I[562] = I[563] = I[564] = I[565] = I[566] = I[567] = I[568] = I[569] = I[570] = I[571] = I[572] = I[573] = (T)(img)(0,_n3##y,z,c)), \ - (I[589] = I[590] = I[591] = I[592] = I[593] = I[594] = I[595] = I[596] = I[597] = I[598] = I[599] = I[600] = I[601] = I[602] = I[603] = I[604] = (T)(img)(0,_n4##y,z,c)), \ - (I[620] = I[621] = I[622] = I[623] = I[624] = I[625] = I[626] = I[627] = I[628] = I[629] = I[630] = I[631] = I[632] = I[633] = I[634] = I[635] = (T)(img)(0,_n5##y,z,c)), \ - (I[651] = I[652] = I[653] = I[654] = I[655] = I[656] = I[657] = I[658] = I[659] = I[660] = I[661] = I[662] = I[663] = I[664] = I[665] = I[666] = (T)(img)(0,_n6##y,z,c)), \ - (I[682] = I[683] = I[684] = I[685] = I[686] = I[687] = I[688] = I[689] = I[690] = I[691] = I[692] = I[693] = I[694] = I[695] = I[696] = I[697] = (T)(img)(0,_n7##y,z,c)), \ - (I[713] = I[714] = I[715] = I[716] = I[717] = I[718] = I[719] = I[720] = I[721] = I[722] = I[723] = I[724] = I[725] = I[726] = I[727] = I[728] = (T)(img)(0,_n8##y,z,c)), \ - (I[744] = I[745] = I[746] = I[747] = I[748] = I[749] = I[750] = I[751] = I[752] = I[753] = I[754] = I[755] = I[756] = I[757] = I[758] = I[759] = (T)(img)(0,_n9##y,z,c)), \ - (I[775] = I[776] = I[777] = I[778] = I[779] = I[780] = I[781] = I[782] = I[783] = I[784] = I[785] = I[786] = I[787] = I[788] = I[789] = I[790] = (T)(img)(0,_n10##y,z,c)), \ - (I[806] = I[807] = I[808] = I[809] = I[810] = I[811] = I[812] = I[813] = I[814] = I[815] = I[816] = I[817] = I[818] = I[819] = I[820] = I[821] = (T)(img)(0,_n11##y,z,c)), \ - (I[837] = I[838] = I[839] = I[840] = I[841] = I[842] = I[843] = I[844] = I[845] = I[846] = I[847] = I[848] = I[849] = I[850] = I[851] = I[852] = (T)(img)(0,_n12##y,z,c)), \ - (I[868] = I[869] = I[870] = I[871] = I[872] = I[873] = I[874] = I[875] = I[876] = I[877] = I[878] = I[879] = I[880] = I[881] = I[882] = I[883] = (T)(img)(0,_n13##y,z,c)), \ - (I[899] = I[900] = I[901] = I[902] = I[903] = I[904] = I[905] = I[906] = I[907] = I[908] = I[909] = I[910] = I[911] = I[912] = I[913] = I[914] = (T)(img)(0,_n14##y,z,c)), \ - (I[930] = I[931] = I[932] = I[933] = I[934] = I[935] = I[936] = I[937] = I[938] = I[939] = I[940] = I[941] = I[942] = I[943] = I[944] = I[945] = (T)(img)(0,_n15##y,z,c)), \ - (I[16] = (T)(img)(_n1##x,_p15##y,z,c)), \ - (I[47] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[109] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[140] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[171] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[202] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[233] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[264] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[295] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[326] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[357] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[388] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[419] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[450] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[481] = (T)(img)(_n1##x,y,z,c)), \ - (I[512] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[543] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[574] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[605] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[636] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[667] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[698] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[729] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[760] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[791] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[822] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[853] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[884] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[915] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[946] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[17] = (T)(img)(_n2##x,_p15##y,z,c)), \ - (I[48] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[110] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[141] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[172] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[203] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[234] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[265] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[296] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[327] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[358] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[389] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[420] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[451] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[482] = (T)(img)(_n2##x,y,z,c)), \ - (I[513] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[544] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[575] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[606] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[637] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[668] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[699] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[730] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[761] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[792] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[823] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[854] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[885] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[916] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[947] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[18] = (T)(img)(_n3##x,_p15##y,z,c)), \ - (I[49] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[80] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[111] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[142] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[173] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[204] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[235] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[266] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[297] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[328] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[359] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[390] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[421] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[452] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[483] = (T)(img)(_n3##x,y,z,c)), \ - (I[514] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[545] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[576] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[607] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[638] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[669] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[700] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[731] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[762] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[793] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[824] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[855] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[886] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[917] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[948] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[19] = (T)(img)(_n4##x,_p15##y,z,c)), \ - (I[50] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[81] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[112] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[143] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[174] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[205] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[236] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[267] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[298] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[329] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[360] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[391] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[422] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[453] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[484] = (T)(img)(_n4##x,y,z,c)), \ - (I[515] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[546] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[577] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[608] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[639] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[670] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[701] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[732] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[763] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[794] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[825] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[856] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[887] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[918] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[949] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[20] = (T)(img)(_n5##x,_p15##y,z,c)), \ - (I[51] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[82] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[113] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[144] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[175] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[206] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[237] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[268] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[299] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[330] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[361] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[392] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[423] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[454] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[485] = (T)(img)(_n5##x,y,z,c)), \ - (I[516] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[547] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[578] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[609] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[640] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[671] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[702] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[733] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[764] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[795] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[826] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[857] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[888] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[919] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[950] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[21] = (T)(img)(_n6##x,_p15##y,z,c)), \ - (I[52] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[83] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[114] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[145] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[176] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[207] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[238] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[269] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[300] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[331] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[362] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[393] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[424] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[455] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[486] = (T)(img)(_n6##x,y,z,c)), \ - (I[517] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[548] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[579] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[610] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[641] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[672] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[703] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[734] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[765] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[796] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[827] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[858] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[889] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[920] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[951] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[22] = (T)(img)(_n7##x,_p15##y,z,c)), \ - (I[53] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[84] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[115] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[146] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[177] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[208] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[239] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[270] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[301] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[332] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[363] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[394] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[425] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[456] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[487] = (T)(img)(_n7##x,y,z,c)), \ - (I[518] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[549] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[580] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[611] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[642] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[673] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[704] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[735] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[766] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[797] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[828] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[859] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[890] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[921] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[952] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[23] = (T)(img)(_n8##x,_p15##y,z,c)), \ - (I[54] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[85] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[116] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[147] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[178] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[209] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[240] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[271] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[302] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[333] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[364] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[395] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[426] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[457] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[488] = (T)(img)(_n8##x,y,z,c)), \ - (I[519] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[550] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[581] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[612] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[643] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[674] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[705] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[736] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[767] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[798] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[829] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[860] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[891] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[922] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[953] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[24] = (T)(img)(_n9##x,_p15##y,z,c)), \ - (I[55] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[86] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[117] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[148] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[179] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[210] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[241] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[272] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[303] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[334] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[365] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[396] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[427] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[458] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[489] = (T)(img)(_n9##x,y,z,c)), \ - (I[520] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[551] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[582] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[613] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[644] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[675] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[706] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[737] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[768] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[799] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[830] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[861] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[892] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[923] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[954] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[25] = (T)(img)(_n10##x,_p15##y,z,c)), \ - (I[56] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[87] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[118] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[149] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[180] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[211] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[242] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[273] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[304] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[335] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[366] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[397] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[428] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[459] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[490] = (T)(img)(_n10##x,y,z,c)), \ - (I[521] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[552] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[583] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[614] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[645] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[676] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[707] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[738] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[769] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[800] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[831] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[862] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[893] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[924] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[955] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[26] = (T)(img)(_n11##x,_p15##y,z,c)), \ - (I[57] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[88] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[119] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[150] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[181] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[212] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[243] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[274] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[305] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[336] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[367] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[398] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[429] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[460] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[491] = (T)(img)(_n11##x,y,z,c)), \ - (I[522] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[553] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[584] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[615] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[646] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[677] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[708] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[739] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[770] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[801] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[832] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[863] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[894] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[925] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[956] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[27] = (T)(img)(_n12##x,_p15##y,z,c)), \ - (I[58] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[89] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[120] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[151] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[182] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[213] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[244] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[275] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[306] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[337] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[368] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[399] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[430] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[461] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[492] = (T)(img)(_n12##x,y,z,c)), \ - (I[523] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[554] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[585] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[616] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[647] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[678] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[709] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[740] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[771] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[802] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[833] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[864] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[895] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[926] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[957] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[28] = (T)(img)(_n13##x,_p15##y,z,c)), \ - (I[59] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[90] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[121] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[152] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[183] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[214] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[245] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[276] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[307] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[338] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[369] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[400] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[431] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[462] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[493] = (T)(img)(_n13##x,y,z,c)), \ - (I[524] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[555] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[586] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[617] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[648] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[679] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[710] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[741] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[772] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[803] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[834] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[865] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[896] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[927] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[958] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[29] = (T)(img)(_n14##x,_p15##y,z,c)), \ - (I[60] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[91] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[122] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[153] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[184] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[215] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[246] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[277] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[308] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[339] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[370] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[401] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[432] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[463] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[494] = (T)(img)(_n14##x,y,z,c)), \ - (I[525] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[556] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[587] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[618] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[649] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[680] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[711] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[742] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[773] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[804] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[835] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[866] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[897] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[928] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[959] = (T)(img)(_n14##x,_n15##y,z,c)), \ - 15>=((img)._width)?(img).width()-1:15); \ - (_n15##x<(img).width() && ( \ - (I[30] = (T)(img)(_n15##x,_p15##y,z,c)), \ - (I[61] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[92] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[123] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[154] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[185] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[216] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[247] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[278] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[309] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[340] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[371] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[402] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[433] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[464] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[495] = (T)(img)(_n15##x,y,z,c)), \ - (I[526] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[557] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[588] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[619] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[650] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[681] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[712] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[743] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[774] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[805] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[836] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[867] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[898] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[929] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[960] = (T)(img)(_n15##x,_n15##y,z,c)),1)) || \ - _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], \ - I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], \ - I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], \ - I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], \ - I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], \ - I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], \ - I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], \ - I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], \ - I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], \ - I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], \ - I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], \ - I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], \ - I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], \ - I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], \ - I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], \ - I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], \ - I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], \ - I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], \ - I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], \ - I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], \ - I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], \ - I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], \ - I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], \ - I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], \ - I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], \ - I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], \ - I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], \ - I[837] = I[838], I[838] = I[839], I[839] = I[840], I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], I[863] = I[864], I[864] = I[865], I[865] = I[866], I[866] = I[867], \ - I[868] = I[869], I[869] = I[870], I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], I[895] = I[896], I[896] = I[897], I[897] = I[898], \ - I[899] = I[900], I[900] = I[901], I[901] = I[902], I[902] = I[903], I[903] = I[904], I[904] = I[905], I[905] = I[906], I[906] = I[907], I[907] = I[908], I[908] = I[909], I[909] = I[910], I[910] = I[911], I[911] = I[912], I[912] = I[913], I[913] = I[914], I[914] = I[915], I[915] = I[916], I[916] = I[917], I[917] = I[918], I[918] = I[919], I[919] = I[920], I[920] = I[921], I[921] = I[922], I[922] = I[923], I[923] = I[924], I[924] = I[925], I[925] = I[926], I[926] = I[927], I[927] = I[928], I[928] = I[929], \ - I[930] = I[931], I[931] = I[932], I[932] = I[933], I[933] = I[934], I[934] = I[935], I[935] = I[936], I[936] = I[937], I[937] = I[938], I[938] = I[939], I[939] = I[940], I[940] = I[941], I[941] = I[942], I[942] = I[943], I[943] = I[944], I[944] = I[945], I[945] = I[946], I[946] = I[947], I[947] = I[948], I[948] = I[949], I[949] = I[950], I[950] = I[951], I[951] = I[952], I[952] = I[953], I[953] = I[954], I[954] = I[955], I[955] = I[956], I[956] = I[957], I[957] = I[958], I[958] = I[959], I[959] = I[960], \ - _p15##x = _p14##x, _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x) - -#define cimg_for_in31x31(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in31((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p15##x = x-15<0?0:x-15, \ - _p14##x = x-14<0?0:x-14, \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = x+13>=(img).width()?(img).width()-1:x+13, \ - _n14##x = x+14>=(img).width()?(img).width()-1:x+14, \ - _n15##x = (int)( \ - (I[0] = (T)(img)(_p15##x,_p15##y,z,c)), \ - (I[31] = (T)(img)(_p15##x,_p14##y,z,c)), \ - (I[62] = (T)(img)(_p15##x,_p13##y,z,c)), \ - (I[93] = (T)(img)(_p15##x,_p12##y,z,c)), \ - (I[124] = (T)(img)(_p15##x,_p11##y,z,c)), \ - (I[155] = (T)(img)(_p15##x,_p10##y,z,c)), \ - (I[186] = (T)(img)(_p15##x,_p9##y,z,c)), \ - (I[217] = (T)(img)(_p15##x,_p8##y,z,c)), \ - (I[248] = (T)(img)(_p15##x,_p7##y,z,c)), \ - (I[279] = (T)(img)(_p15##x,_p6##y,z,c)), \ - (I[310] = (T)(img)(_p15##x,_p5##y,z,c)), \ - (I[341] = (T)(img)(_p15##x,_p4##y,z,c)), \ - (I[372] = (T)(img)(_p15##x,_p3##y,z,c)), \ - (I[403] = (T)(img)(_p15##x,_p2##y,z,c)), \ - (I[434] = (T)(img)(_p15##x,_p1##y,z,c)), \ - (I[465] = (T)(img)(_p15##x,y,z,c)), \ - (I[496] = (T)(img)(_p15##x,_n1##y,z,c)), \ - (I[527] = (T)(img)(_p15##x,_n2##y,z,c)), \ - (I[558] = (T)(img)(_p15##x,_n3##y,z,c)), \ - (I[589] = (T)(img)(_p15##x,_n4##y,z,c)), \ - (I[620] = (T)(img)(_p15##x,_n5##y,z,c)), \ - (I[651] = (T)(img)(_p15##x,_n6##y,z,c)), \ - (I[682] = (T)(img)(_p15##x,_n7##y,z,c)), \ - (I[713] = (T)(img)(_p15##x,_n8##y,z,c)), \ - (I[744] = (T)(img)(_p15##x,_n9##y,z,c)), \ - (I[775] = (T)(img)(_p15##x,_n10##y,z,c)), \ - (I[806] = (T)(img)(_p15##x,_n11##y,z,c)), \ - (I[837] = (T)(img)(_p15##x,_n12##y,z,c)), \ - (I[868] = (T)(img)(_p15##x,_n13##y,z,c)), \ - (I[899] = (T)(img)(_p15##x,_n14##y,z,c)), \ - (I[930] = (T)(img)(_p15##x,_n15##y,z,c)), \ - (I[1] = (T)(img)(_p14##x,_p15##y,z,c)), \ - (I[32] = (T)(img)(_p14##x,_p14##y,z,c)), \ - (I[63] = (T)(img)(_p14##x,_p13##y,z,c)), \ - (I[94] = (T)(img)(_p14##x,_p12##y,z,c)), \ - (I[125] = (T)(img)(_p14##x,_p11##y,z,c)), \ - (I[156] = (T)(img)(_p14##x,_p10##y,z,c)), \ - (I[187] = (T)(img)(_p14##x,_p9##y,z,c)), \ - (I[218] = (T)(img)(_p14##x,_p8##y,z,c)), \ - (I[249] = (T)(img)(_p14##x,_p7##y,z,c)), \ - (I[280] = (T)(img)(_p14##x,_p6##y,z,c)), \ - (I[311] = (T)(img)(_p14##x,_p5##y,z,c)), \ - (I[342] = (T)(img)(_p14##x,_p4##y,z,c)), \ - (I[373] = (T)(img)(_p14##x,_p3##y,z,c)), \ - (I[404] = (T)(img)(_p14##x,_p2##y,z,c)), \ - (I[435] = (T)(img)(_p14##x,_p1##y,z,c)), \ - (I[466] = (T)(img)(_p14##x,y,z,c)), \ - (I[497] = (T)(img)(_p14##x,_n1##y,z,c)), \ - (I[528] = (T)(img)(_p14##x,_n2##y,z,c)), \ - (I[559] = (T)(img)(_p14##x,_n3##y,z,c)), \ - (I[590] = (T)(img)(_p14##x,_n4##y,z,c)), \ - (I[621] = (T)(img)(_p14##x,_n5##y,z,c)), \ - (I[652] = (T)(img)(_p14##x,_n6##y,z,c)), \ - (I[683] = (T)(img)(_p14##x,_n7##y,z,c)), \ - (I[714] = (T)(img)(_p14##x,_n8##y,z,c)), \ - (I[745] = (T)(img)(_p14##x,_n9##y,z,c)), \ - (I[776] = (T)(img)(_p14##x,_n10##y,z,c)), \ - (I[807] = (T)(img)(_p14##x,_n11##y,z,c)), \ - (I[838] = (T)(img)(_p14##x,_n12##y,z,c)), \ - (I[869] = (T)(img)(_p14##x,_n13##y,z,c)), \ - (I[900] = (T)(img)(_p14##x,_n14##y,z,c)), \ - (I[931] = (T)(img)(_p14##x,_n15##y,z,c)), \ - (I[2] = (T)(img)(_p13##x,_p15##y,z,c)), \ - (I[33] = (T)(img)(_p13##x,_p14##y,z,c)), \ - (I[64] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[95] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[126] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[157] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[188] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[219] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[250] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[281] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[312] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[343] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[374] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[405] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[436] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[467] = (T)(img)(_p13##x,y,z,c)), \ - (I[498] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[529] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[560] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[591] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[622] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[653] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[684] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[715] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[746] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[777] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[808] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[839] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[870] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[901] = (T)(img)(_p13##x,_n14##y,z,c)), \ - (I[932] = (T)(img)(_p13##x,_n15##y,z,c)), \ - (I[3] = (T)(img)(_p12##x,_p15##y,z,c)), \ - (I[34] = (T)(img)(_p12##x,_p14##y,z,c)), \ - (I[65] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[96] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[127] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[158] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[189] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[220] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[251] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[282] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[313] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[344] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[375] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[406] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[437] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[468] = (T)(img)(_p12##x,y,z,c)), \ - (I[499] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[530] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[561] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[592] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[623] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[654] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[685] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[716] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[747] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[778] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[809] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[840] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[871] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[902] = (T)(img)(_p12##x,_n14##y,z,c)), \ - (I[933] = (T)(img)(_p12##x,_n15##y,z,c)), \ - (I[4] = (T)(img)(_p11##x,_p15##y,z,c)), \ - (I[35] = (T)(img)(_p11##x,_p14##y,z,c)), \ - (I[66] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[97] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[128] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[159] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[190] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[221] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[252] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[283] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[314] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[345] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[376] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[407] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[438] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[469] = (T)(img)(_p11##x,y,z,c)), \ - (I[500] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[531] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[562] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[593] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[624] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[655] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[686] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[717] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[748] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[779] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[810] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[841] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[872] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[903] = (T)(img)(_p11##x,_n14##y,z,c)), \ - (I[934] = (T)(img)(_p11##x,_n15##y,z,c)), \ - (I[5] = (T)(img)(_p10##x,_p15##y,z,c)), \ - (I[36] = (T)(img)(_p10##x,_p14##y,z,c)), \ - (I[67] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[98] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[129] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[160] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[191] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[222] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[253] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[284] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[315] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[346] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[377] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[408] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[439] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[470] = (T)(img)(_p10##x,y,z,c)), \ - (I[501] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[532] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[563] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[594] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[625] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[656] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[687] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[718] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[749] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[780] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[811] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[842] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[873] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[904] = (T)(img)(_p10##x,_n14##y,z,c)), \ - (I[935] = (T)(img)(_p10##x,_n15##y,z,c)), \ - (I[6] = (T)(img)(_p9##x,_p15##y,z,c)), \ - (I[37] = (T)(img)(_p9##x,_p14##y,z,c)), \ - (I[68] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[99] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[130] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[161] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[192] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[223] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[254] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[285] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[316] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[347] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[378] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[409] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[440] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[471] = (T)(img)(_p9##x,y,z,c)), \ - (I[502] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[533] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[564] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[595] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[626] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[657] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[688] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[719] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[750] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[781] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[812] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[843] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[874] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[905] = (T)(img)(_p9##x,_n14##y,z,c)), \ - (I[936] = (T)(img)(_p9##x,_n15##y,z,c)), \ - (I[7] = (T)(img)(_p8##x,_p15##y,z,c)), \ - (I[38] = (T)(img)(_p8##x,_p14##y,z,c)), \ - (I[69] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[100] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[131] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[162] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[193] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[224] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[255] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[286] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[317] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[348] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[379] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[410] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[441] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[472] = (T)(img)(_p8##x,y,z,c)), \ - (I[503] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[534] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[565] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[596] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[627] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[658] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[689] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[720] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[751] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[782] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[813] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[844] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[875] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[906] = (T)(img)(_p8##x,_n14##y,z,c)), \ - (I[937] = (T)(img)(_p8##x,_n15##y,z,c)), \ - (I[8] = (T)(img)(_p7##x,_p15##y,z,c)), \ - (I[39] = (T)(img)(_p7##x,_p14##y,z,c)), \ - (I[70] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[101] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[132] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[163] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[194] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[225] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[256] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[287] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[318] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[349] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[380] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[411] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[442] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[473] = (T)(img)(_p7##x,y,z,c)), \ - (I[504] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[535] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[566] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[597] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[628] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[659] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[690] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[721] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[752] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[783] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[814] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[845] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[876] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[907] = (T)(img)(_p7##x,_n14##y,z,c)), \ - (I[938] = (T)(img)(_p7##x,_n15##y,z,c)), \ - (I[9] = (T)(img)(_p6##x,_p15##y,z,c)), \ - (I[40] = (T)(img)(_p6##x,_p14##y,z,c)), \ - (I[71] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[102] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[133] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[164] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[195] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[226] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[257] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[288] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[319] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[350] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[381] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[412] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[443] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[474] = (T)(img)(_p6##x,y,z,c)), \ - (I[505] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[536] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[567] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[598] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[629] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[660] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[691] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[722] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[753] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[784] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[815] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[846] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[877] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[908] = (T)(img)(_p6##x,_n14##y,z,c)), \ - (I[939] = (T)(img)(_p6##x,_n15##y,z,c)), \ - (I[10] = (T)(img)(_p5##x,_p15##y,z,c)), \ - (I[41] = (T)(img)(_p5##x,_p14##y,z,c)), \ - (I[72] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[103] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[134] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[165] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[196] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[227] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[258] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[289] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[320] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[351] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[382] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[413] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[444] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[475] = (T)(img)(_p5##x,y,z,c)), \ - (I[506] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[537] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[568] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[599] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[630] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[661] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[692] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[723] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[754] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[785] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[816] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[847] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[878] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[909] = (T)(img)(_p5##x,_n14##y,z,c)), \ - (I[940] = (T)(img)(_p5##x,_n15##y,z,c)), \ - (I[11] = (T)(img)(_p4##x,_p15##y,z,c)), \ - (I[42] = (T)(img)(_p4##x,_p14##y,z,c)), \ - (I[73] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[104] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[135] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[166] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[197] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[228] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[259] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[290] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[321] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[352] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[383] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[414] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[445] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[476] = (T)(img)(_p4##x,y,z,c)), \ - (I[507] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[538] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[569] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[600] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[631] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[662] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[693] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[724] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[755] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[786] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[817] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[848] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[879] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[910] = (T)(img)(_p4##x,_n14##y,z,c)), \ - (I[941] = (T)(img)(_p4##x,_n15##y,z,c)), \ - (I[12] = (T)(img)(_p3##x,_p15##y,z,c)), \ - (I[43] = (T)(img)(_p3##x,_p14##y,z,c)), \ - (I[74] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[105] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[136] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[167] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[198] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[229] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[260] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[291] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[322] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[353] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[384] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[415] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[446] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[477] = (T)(img)(_p3##x,y,z,c)), \ - (I[508] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[539] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[570] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[601] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[632] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[663] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[694] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[725] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[756] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[787] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[818] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[849] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[880] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[911] = (T)(img)(_p3##x,_n14##y,z,c)), \ - (I[942] = (T)(img)(_p3##x,_n15##y,z,c)), \ - (I[13] = (T)(img)(_p2##x,_p15##y,z,c)), \ - (I[44] = (T)(img)(_p2##x,_p14##y,z,c)), \ - (I[75] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[106] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[137] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[168] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[199] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[230] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[261] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[292] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[323] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[354] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[385] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[416] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[447] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[478] = (T)(img)(_p2##x,y,z,c)), \ - (I[509] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[540] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[571] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[602] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[633] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[664] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[695] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[726] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[757] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[788] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[819] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[850] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[881] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[912] = (T)(img)(_p2##x,_n14##y,z,c)), \ - (I[943] = (T)(img)(_p2##x,_n15##y,z,c)), \ - (I[14] = (T)(img)(_p1##x,_p15##y,z,c)), \ - (I[45] = (T)(img)(_p1##x,_p14##y,z,c)), \ - (I[76] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[107] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[138] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[169] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[200] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[231] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[262] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[293] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[324] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[355] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[386] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[417] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[448] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[479] = (T)(img)(_p1##x,y,z,c)), \ - (I[510] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[541] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[572] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[603] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[634] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[665] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[696] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[727] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[758] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[789] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[820] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[851] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[882] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[913] = (T)(img)(_p1##x,_n14##y,z,c)), \ - (I[944] = (T)(img)(_p1##x,_n15##y,z,c)), \ - (I[15] = (T)(img)(x,_p15##y,z,c)), \ - (I[46] = (T)(img)(x,_p14##y,z,c)), \ - (I[77] = (T)(img)(x,_p13##y,z,c)), \ - (I[108] = (T)(img)(x,_p12##y,z,c)), \ - (I[139] = (T)(img)(x,_p11##y,z,c)), \ - (I[170] = (T)(img)(x,_p10##y,z,c)), \ - (I[201] = (T)(img)(x,_p9##y,z,c)), \ - (I[232] = (T)(img)(x,_p8##y,z,c)), \ - (I[263] = (T)(img)(x,_p7##y,z,c)), \ - (I[294] = (T)(img)(x,_p6##y,z,c)), \ - (I[325] = (T)(img)(x,_p5##y,z,c)), \ - (I[356] = (T)(img)(x,_p4##y,z,c)), \ - (I[387] = (T)(img)(x,_p3##y,z,c)), \ - (I[418] = (T)(img)(x,_p2##y,z,c)), \ - (I[449] = (T)(img)(x,_p1##y,z,c)), \ - (I[480] = (T)(img)(x,y,z,c)), \ - (I[511] = (T)(img)(x,_n1##y,z,c)), \ - (I[542] = (T)(img)(x,_n2##y,z,c)), \ - (I[573] = (T)(img)(x,_n3##y,z,c)), \ - (I[604] = (T)(img)(x,_n4##y,z,c)), \ - (I[635] = (T)(img)(x,_n5##y,z,c)), \ - (I[666] = (T)(img)(x,_n6##y,z,c)), \ - (I[697] = (T)(img)(x,_n7##y,z,c)), \ - (I[728] = (T)(img)(x,_n8##y,z,c)), \ - (I[759] = (T)(img)(x,_n9##y,z,c)), \ - (I[790] = (T)(img)(x,_n10##y,z,c)), \ - (I[821] = (T)(img)(x,_n11##y,z,c)), \ - (I[852] = (T)(img)(x,_n12##y,z,c)), \ - (I[883] = (T)(img)(x,_n13##y,z,c)), \ - (I[914] = (T)(img)(x,_n14##y,z,c)), \ - (I[945] = (T)(img)(x,_n15##y,z,c)), \ - (I[16] = (T)(img)(_n1##x,_p15##y,z,c)), \ - (I[47] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[109] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[140] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[171] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[202] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[233] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[264] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[295] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[326] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[357] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[388] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[419] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[450] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[481] = (T)(img)(_n1##x,y,z,c)), \ - (I[512] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[543] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[574] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[605] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[636] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[667] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[698] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[729] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[760] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[791] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[822] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[853] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[884] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[915] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[946] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[17] = (T)(img)(_n2##x,_p15##y,z,c)), \ - (I[48] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[110] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[141] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[172] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[203] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[234] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[265] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[296] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[327] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[358] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[389] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[420] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[451] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[482] = (T)(img)(_n2##x,y,z,c)), \ - (I[513] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[544] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[575] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[606] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[637] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[668] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[699] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[730] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[761] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[792] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[823] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[854] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[885] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[916] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[947] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[18] = (T)(img)(_n3##x,_p15##y,z,c)), \ - (I[49] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[80] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[111] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[142] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[173] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[204] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[235] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[266] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[297] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[328] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[359] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[390] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[421] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[452] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[483] = (T)(img)(_n3##x,y,z,c)), \ - (I[514] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[545] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[576] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[607] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[638] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[669] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[700] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[731] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[762] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[793] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[824] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[855] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[886] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[917] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[948] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[19] = (T)(img)(_n4##x,_p15##y,z,c)), \ - (I[50] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[81] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[112] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[143] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[174] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[205] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[236] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[267] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[298] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[329] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[360] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[391] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[422] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[453] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[484] = (T)(img)(_n4##x,y,z,c)), \ - (I[515] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[546] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[577] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[608] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[639] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[670] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[701] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[732] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[763] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[794] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[825] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[856] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[887] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[918] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[949] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[20] = (T)(img)(_n5##x,_p15##y,z,c)), \ - (I[51] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[82] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[113] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[144] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[175] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[206] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[237] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[268] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[299] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[330] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[361] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[392] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[423] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[454] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[485] = (T)(img)(_n5##x,y,z,c)), \ - (I[516] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[547] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[578] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[609] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[640] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[671] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[702] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[733] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[764] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[795] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[826] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[857] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[888] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[919] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[950] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[21] = (T)(img)(_n6##x,_p15##y,z,c)), \ - (I[52] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[83] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[114] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[145] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[176] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[207] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[238] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[269] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[300] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[331] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[362] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[393] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[424] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[455] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[486] = (T)(img)(_n6##x,y,z,c)), \ - (I[517] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[548] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[579] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[610] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[641] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[672] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[703] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[734] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[765] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[796] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[827] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[858] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[889] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[920] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[951] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[22] = (T)(img)(_n7##x,_p15##y,z,c)), \ - (I[53] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[84] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[115] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[146] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[177] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[208] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[239] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[270] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[301] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[332] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[363] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[394] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[425] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[456] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[487] = (T)(img)(_n7##x,y,z,c)), \ - (I[518] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[549] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[580] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[611] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[642] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[673] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[704] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[735] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[766] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[797] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[828] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[859] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[890] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[921] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[952] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[23] = (T)(img)(_n8##x,_p15##y,z,c)), \ - (I[54] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[85] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[116] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[147] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[178] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[209] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[240] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[271] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[302] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[333] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[364] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[395] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[426] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[457] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[488] = (T)(img)(_n8##x,y,z,c)), \ - (I[519] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[550] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[581] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[612] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[643] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[674] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[705] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[736] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[767] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[798] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[829] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[860] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[891] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[922] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[953] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[24] = (T)(img)(_n9##x,_p15##y,z,c)), \ - (I[55] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[86] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[117] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[148] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[179] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[210] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[241] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[272] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[303] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[334] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[365] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[396] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[427] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[458] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[489] = (T)(img)(_n9##x,y,z,c)), \ - (I[520] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[551] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[582] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[613] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[644] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[675] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[706] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[737] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[768] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[799] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[830] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[861] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[892] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[923] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[954] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[25] = (T)(img)(_n10##x,_p15##y,z,c)), \ - (I[56] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[87] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[118] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[149] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[180] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[211] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[242] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[273] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[304] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[335] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[366] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[397] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[428] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[459] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[490] = (T)(img)(_n10##x,y,z,c)), \ - (I[521] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[552] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[583] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[614] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[645] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[676] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[707] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[738] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[769] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[800] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[831] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[862] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[893] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[924] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[955] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[26] = (T)(img)(_n11##x,_p15##y,z,c)), \ - (I[57] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[88] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[119] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[150] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[181] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[212] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[243] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[274] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[305] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[336] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[367] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[398] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[429] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[460] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[491] = (T)(img)(_n11##x,y,z,c)), \ - (I[522] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[553] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[584] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[615] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[646] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[677] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[708] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[739] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[770] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[801] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[832] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[863] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[894] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[925] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[956] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[27] = (T)(img)(_n12##x,_p15##y,z,c)), \ - (I[58] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[89] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[120] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[151] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[182] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[213] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[244] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[275] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[306] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[337] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[368] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[399] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[430] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[461] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[492] = (T)(img)(_n12##x,y,z,c)), \ - (I[523] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[554] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[585] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[616] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[647] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[678] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[709] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[740] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[771] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[802] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[833] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[864] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[895] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[926] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[957] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[28] = (T)(img)(_n13##x,_p15##y,z,c)), \ - (I[59] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[90] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[121] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[152] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[183] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[214] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[245] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[276] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[307] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[338] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[369] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[400] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[431] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[462] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[493] = (T)(img)(_n13##x,y,z,c)), \ - (I[524] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[555] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[586] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[617] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[648] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[679] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[710] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[741] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[772] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[803] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[834] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[865] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[896] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[927] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[958] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[29] = (T)(img)(_n14##x,_p15##y,z,c)), \ - (I[60] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[91] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[122] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[153] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[184] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[215] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[246] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[277] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[308] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[339] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[370] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[401] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[432] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[463] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[494] = (T)(img)(_n14##x,y,z,c)), \ - (I[525] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[556] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[587] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[618] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[649] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[680] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[711] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[742] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[773] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[804] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[835] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[866] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[897] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[928] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[959] = (T)(img)(_n14##x,_n15##y,z,c)), \ - x+15>=(img).width()?(img).width()-1:x+15); \ - x<=(int)(x1) && ((_n15##x<(img).width() && ( \ - (I[30] = (T)(img)(_n15##x,_p15##y,z,c)), \ - (I[61] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[92] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[123] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[154] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[185] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[216] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[247] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[278] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[309] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[340] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[371] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[402] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[433] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[464] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[495] = (T)(img)(_n15##x,y,z,c)), \ - (I[526] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[557] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[588] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[619] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[650] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[681] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[712] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[743] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[774] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[805] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[836] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[867] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[898] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[929] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[960] = (T)(img)(_n15##x,_n15##y,z,c)),1)) || \ - _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], \ - I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], \ - I[62] = I[63], I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], \ - I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], \ - I[124] = I[125], I[125] = I[126], I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], \ - I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], \ - I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], \ - I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], I[223] = I[224], I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], \ - I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], \ - I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], \ - I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], \ - I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], I[351] = I[352], I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], \ - I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], I[383] = I[384], I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], \ - I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], I[415] = I[416], I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], \ - I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], I[447] = I[448], I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], \ - I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], I[479] = I[480], I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], \ - I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], I[511] = I[512], I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], \ - I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], I[543] = I[544], I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], \ - I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], I[575] = I[576], I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], \ - I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], I[607] = I[608], I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], \ - I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], I[639] = I[640], I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], \ - I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], I[671] = I[672], I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], \ - I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], I[703] = I[704], I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], \ - I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], I[735] = I[736], I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], \ - I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], I[767] = I[768], I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], \ - I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], I[799] = I[800], I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], \ - I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], I[831] = I[832], I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], \ - I[837] = I[838], I[838] = I[839], I[839] = I[840], I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], I[863] = I[864], I[864] = I[865], I[865] = I[866], I[866] = I[867], \ - I[868] = I[869], I[869] = I[870], I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], I[895] = I[896], I[896] = I[897], I[897] = I[898], \ - I[899] = I[900], I[900] = I[901], I[901] = I[902], I[902] = I[903], I[903] = I[904], I[904] = I[905], I[905] = I[906], I[906] = I[907], I[907] = I[908], I[908] = I[909], I[909] = I[910], I[910] = I[911], I[911] = I[912], I[912] = I[913], I[913] = I[914], I[914] = I[915], I[915] = I[916], I[916] = I[917], I[917] = I[918], I[918] = I[919], I[919] = I[920], I[920] = I[921], I[921] = I[922], I[922] = I[923], I[923] = I[924], I[924] = I[925], I[925] = I[926], I[926] = I[927], I[927] = I[928], I[928] = I[929], \ - I[930] = I[931], I[931] = I[932], I[932] = I[933], I[933] = I[934], I[934] = I[935], I[935] = I[936], I[936] = I[937], I[937] = I[938], I[938] = I[939], I[939] = I[940], I[940] = I[941], I[941] = I[942], I[942] = I[943], I[943] = I[944], I[944] = I[945], I[945] = I[946], I[946] = I[947], I[947] = I[948], I[948] = I[949], I[949] = I[950], I[950] = I[951], I[951] = I[952], I[952] = I[953], I[953] = I[954], I[954] = I[955], I[955] = I[956], I[956] = I[957], I[957] = I[958], I[958] = I[959], I[959] = I[960], \ - _p15##x = _p14##x, _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x) - -#define cimg_get31x31(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p15##x,_p15##y,z,c), I[1] = (T)(img)(_p14##x,_p15##y,z,c), I[2] = (T)(img)(_p13##x,_p15##y,z,c), I[3] = (T)(img)(_p12##x,_p15##y,z,c), I[4] = (T)(img)(_p11##x,_p15##y,z,c), I[5] = (T)(img)(_p10##x,_p15##y,z,c), I[6] = (T)(img)(_p9##x,_p15##y,z,c), I[7] = (T)(img)(_p8##x,_p15##y,z,c), I[8] = (T)(img)(_p7##x,_p15##y,z,c), I[9] = (T)(img)(_p6##x,_p15##y,z,c), I[10] = (T)(img)(_p5##x,_p15##y,z,c), I[11] = (T)(img)(_p4##x,_p15##y,z,c), I[12] = (T)(img)(_p3##x,_p15##y,z,c), I[13] = (T)(img)(_p2##x,_p15##y,z,c), I[14] = (T)(img)(_p1##x,_p15##y,z,c), I[15] = (T)(img)(x,_p15##y,z,c), I[16] = (T)(img)(_n1##x,_p15##y,z,c), I[17] = (T)(img)(_n2##x,_p15##y,z,c), I[18] = (T)(img)(_n3##x,_p15##y,z,c), I[19] = (T)(img)(_n4##x,_p15##y,z,c), I[20] = (T)(img)(_n5##x,_p15##y,z,c), I[21] = (T)(img)(_n6##x,_p15##y,z,c), I[22] = (T)(img)(_n7##x,_p15##y,z,c), I[23] = (T)(img)(_n8##x,_p15##y,z,c), I[24] = (T)(img)(_n9##x,_p15##y,z,c), I[25] = (T)(img)(_n10##x,_p15##y,z,c), I[26] = (T)(img)(_n11##x,_p15##y,z,c), I[27] = (T)(img)(_n12##x,_p15##y,z,c), I[28] = (T)(img)(_n13##x,_p15##y,z,c), I[29] = (T)(img)(_n14##x,_p15##y,z,c), I[30] = (T)(img)(_n15##x,_p15##y,z,c), \ - I[31] = (T)(img)(_p15##x,_p14##y,z,c), I[32] = (T)(img)(_p14##x,_p14##y,z,c), I[33] = (T)(img)(_p13##x,_p14##y,z,c), I[34] = (T)(img)(_p12##x,_p14##y,z,c), I[35] = (T)(img)(_p11##x,_p14##y,z,c), I[36] = (T)(img)(_p10##x,_p14##y,z,c), I[37] = (T)(img)(_p9##x,_p14##y,z,c), I[38] = (T)(img)(_p8##x,_p14##y,z,c), I[39] = (T)(img)(_p7##x,_p14##y,z,c), I[40] = (T)(img)(_p6##x,_p14##y,z,c), I[41] = (T)(img)(_p5##x,_p14##y,z,c), I[42] = (T)(img)(_p4##x,_p14##y,z,c), I[43] = (T)(img)(_p3##x,_p14##y,z,c), I[44] = (T)(img)(_p2##x,_p14##y,z,c), I[45] = (T)(img)(_p1##x,_p14##y,z,c), I[46] = (T)(img)(x,_p14##y,z,c), I[47] = (T)(img)(_n1##x,_p14##y,z,c), I[48] = (T)(img)(_n2##x,_p14##y,z,c), I[49] = (T)(img)(_n3##x,_p14##y,z,c), I[50] = (T)(img)(_n4##x,_p14##y,z,c), I[51] = (T)(img)(_n5##x,_p14##y,z,c), I[52] = (T)(img)(_n6##x,_p14##y,z,c), I[53] = (T)(img)(_n7##x,_p14##y,z,c), I[54] = (T)(img)(_n8##x,_p14##y,z,c), I[55] = (T)(img)(_n9##x,_p14##y,z,c), I[56] = (T)(img)(_n10##x,_p14##y,z,c), I[57] = (T)(img)(_n11##x,_p14##y,z,c), I[58] = (T)(img)(_n12##x,_p14##y,z,c), I[59] = (T)(img)(_n13##x,_p14##y,z,c), I[60] = (T)(img)(_n14##x,_p14##y,z,c), I[61] = (T)(img)(_n15##x,_p14##y,z,c), \ - I[62] = (T)(img)(_p15##x,_p13##y,z,c), I[63] = (T)(img)(_p14##x,_p13##y,z,c), I[64] = (T)(img)(_p13##x,_p13##y,z,c), I[65] = (T)(img)(_p12##x,_p13##y,z,c), I[66] = (T)(img)(_p11##x,_p13##y,z,c), I[67] = (T)(img)(_p10##x,_p13##y,z,c), I[68] = (T)(img)(_p9##x,_p13##y,z,c), I[69] = (T)(img)(_p8##x,_p13##y,z,c), I[70] = (T)(img)(_p7##x,_p13##y,z,c), I[71] = (T)(img)(_p6##x,_p13##y,z,c), I[72] = (T)(img)(_p5##x,_p13##y,z,c), I[73] = (T)(img)(_p4##x,_p13##y,z,c), I[74] = (T)(img)(_p3##x,_p13##y,z,c), I[75] = (T)(img)(_p2##x,_p13##y,z,c), I[76] = (T)(img)(_p1##x,_p13##y,z,c), I[77] = (T)(img)(x,_p13##y,z,c), I[78] = (T)(img)(_n1##x,_p13##y,z,c), I[79] = (T)(img)(_n2##x,_p13##y,z,c), I[80] = (T)(img)(_n3##x,_p13##y,z,c), I[81] = (T)(img)(_n4##x,_p13##y,z,c), I[82] = (T)(img)(_n5##x,_p13##y,z,c), I[83] = (T)(img)(_n6##x,_p13##y,z,c), I[84] = (T)(img)(_n7##x,_p13##y,z,c), I[85] = (T)(img)(_n8##x,_p13##y,z,c), I[86] = (T)(img)(_n9##x,_p13##y,z,c), I[87] = (T)(img)(_n10##x,_p13##y,z,c), I[88] = (T)(img)(_n11##x,_p13##y,z,c), I[89] = (T)(img)(_n12##x,_p13##y,z,c), I[90] = (T)(img)(_n13##x,_p13##y,z,c), I[91] = (T)(img)(_n14##x,_p13##y,z,c), I[92] = (T)(img)(_n15##x,_p13##y,z,c), \ - I[93] = (T)(img)(_p15##x,_p12##y,z,c), I[94] = (T)(img)(_p14##x,_p12##y,z,c), I[95] = (T)(img)(_p13##x,_p12##y,z,c), I[96] = (T)(img)(_p12##x,_p12##y,z,c), I[97] = (T)(img)(_p11##x,_p12##y,z,c), I[98] = (T)(img)(_p10##x,_p12##y,z,c), I[99] = (T)(img)(_p9##x,_p12##y,z,c), I[100] = (T)(img)(_p8##x,_p12##y,z,c), I[101] = (T)(img)(_p7##x,_p12##y,z,c), I[102] = (T)(img)(_p6##x,_p12##y,z,c), I[103] = (T)(img)(_p5##x,_p12##y,z,c), I[104] = (T)(img)(_p4##x,_p12##y,z,c), I[105] = (T)(img)(_p3##x,_p12##y,z,c), I[106] = (T)(img)(_p2##x,_p12##y,z,c), I[107] = (T)(img)(_p1##x,_p12##y,z,c), I[108] = (T)(img)(x,_p12##y,z,c), I[109] = (T)(img)(_n1##x,_p12##y,z,c), I[110] = (T)(img)(_n2##x,_p12##y,z,c), I[111] = (T)(img)(_n3##x,_p12##y,z,c), I[112] = (T)(img)(_n4##x,_p12##y,z,c), I[113] = (T)(img)(_n5##x,_p12##y,z,c), I[114] = (T)(img)(_n6##x,_p12##y,z,c), I[115] = (T)(img)(_n7##x,_p12##y,z,c), I[116] = (T)(img)(_n8##x,_p12##y,z,c), I[117] = (T)(img)(_n9##x,_p12##y,z,c), I[118] = (T)(img)(_n10##x,_p12##y,z,c), I[119] = (T)(img)(_n11##x,_p12##y,z,c), I[120] = (T)(img)(_n12##x,_p12##y,z,c), I[121] = (T)(img)(_n13##x,_p12##y,z,c), I[122] = (T)(img)(_n14##x,_p12##y,z,c), I[123] = (T)(img)(_n15##x,_p12##y,z,c), \ - I[124] = (T)(img)(_p15##x,_p11##y,z,c), I[125] = (T)(img)(_p14##x,_p11##y,z,c), I[126] = (T)(img)(_p13##x,_p11##y,z,c), I[127] = (T)(img)(_p12##x,_p11##y,z,c), I[128] = (T)(img)(_p11##x,_p11##y,z,c), I[129] = (T)(img)(_p10##x,_p11##y,z,c), I[130] = (T)(img)(_p9##x,_p11##y,z,c), I[131] = (T)(img)(_p8##x,_p11##y,z,c), I[132] = (T)(img)(_p7##x,_p11##y,z,c), I[133] = (T)(img)(_p6##x,_p11##y,z,c), I[134] = (T)(img)(_p5##x,_p11##y,z,c), I[135] = (T)(img)(_p4##x,_p11##y,z,c), I[136] = (T)(img)(_p3##x,_p11##y,z,c), I[137] = (T)(img)(_p2##x,_p11##y,z,c), I[138] = (T)(img)(_p1##x,_p11##y,z,c), I[139] = (T)(img)(x,_p11##y,z,c), I[140] = (T)(img)(_n1##x,_p11##y,z,c), I[141] = (T)(img)(_n2##x,_p11##y,z,c), I[142] = (T)(img)(_n3##x,_p11##y,z,c), I[143] = (T)(img)(_n4##x,_p11##y,z,c), I[144] = (T)(img)(_n5##x,_p11##y,z,c), I[145] = (T)(img)(_n6##x,_p11##y,z,c), I[146] = (T)(img)(_n7##x,_p11##y,z,c), I[147] = (T)(img)(_n8##x,_p11##y,z,c), I[148] = (T)(img)(_n9##x,_p11##y,z,c), I[149] = (T)(img)(_n10##x,_p11##y,z,c), I[150] = (T)(img)(_n11##x,_p11##y,z,c), I[151] = (T)(img)(_n12##x,_p11##y,z,c), I[152] = (T)(img)(_n13##x,_p11##y,z,c), I[153] = (T)(img)(_n14##x,_p11##y,z,c), I[154] = (T)(img)(_n15##x,_p11##y,z,c), \ - I[155] = (T)(img)(_p15##x,_p10##y,z,c), I[156] = (T)(img)(_p14##x,_p10##y,z,c), I[157] = (T)(img)(_p13##x,_p10##y,z,c), I[158] = (T)(img)(_p12##x,_p10##y,z,c), I[159] = (T)(img)(_p11##x,_p10##y,z,c), I[160] = (T)(img)(_p10##x,_p10##y,z,c), I[161] = (T)(img)(_p9##x,_p10##y,z,c), I[162] = (T)(img)(_p8##x,_p10##y,z,c), I[163] = (T)(img)(_p7##x,_p10##y,z,c), I[164] = (T)(img)(_p6##x,_p10##y,z,c), I[165] = (T)(img)(_p5##x,_p10##y,z,c), I[166] = (T)(img)(_p4##x,_p10##y,z,c), I[167] = (T)(img)(_p3##x,_p10##y,z,c), I[168] = (T)(img)(_p2##x,_p10##y,z,c), I[169] = (T)(img)(_p1##x,_p10##y,z,c), I[170] = (T)(img)(x,_p10##y,z,c), I[171] = (T)(img)(_n1##x,_p10##y,z,c), I[172] = (T)(img)(_n2##x,_p10##y,z,c), I[173] = (T)(img)(_n3##x,_p10##y,z,c), I[174] = (T)(img)(_n4##x,_p10##y,z,c), I[175] = (T)(img)(_n5##x,_p10##y,z,c), I[176] = (T)(img)(_n6##x,_p10##y,z,c), I[177] = (T)(img)(_n7##x,_p10##y,z,c), I[178] = (T)(img)(_n8##x,_p10##y,z,c), I[179] = (T)(img)(_n9##x,_p10##y,z,c), I[180] = (T)(img)(_n10##x,_p10##y,z,c), I[181] = (T)(img)(_n11##x,_p10##y,z,c), I[182] = (T)(img)(_n12##x,_p10##y,z,c), I[183] = (T)(img)(_n13##x,_p10##y,z,c), I[184] = (T)(img)(_n14##x,_p10##y,z,c), I[185] = (T)(img)(_n15##x,_p10##y,z,c), \ - I[186] = (T)(img)(_p15##x,_p9##y,z,c), I[187] = (T)(img)(_p14##x,_p9##y,z,c), I[188] = (T)(img)(_p13##x,_p9##y,z,c), I[189] = (T)(img)(_p12##x,_p9##y,z,c), I[190] = (T)(img)(_p11##x,_p9##y,z,c), I[191] = (T)(img)(_p10##x,_p9##y,z,c), I[192] = (T)(img)(_p9##x,_p9##y,z,c), I[193] = (T)(img)(_p8##x,_p9##y,z,c), I[194] = (T)(img)(_p7##x,_p9##y,z,c), I[195] = (T)(img)(_p6##x,_p9##y,z,c), I[196] = (T)(img)(_p5##x,_p9##y,z,c), I[197] = (T)(img)(_p4##x,_p9##y,z,c), I[198] = (T)(img)(_p3##x,_p9##y,z,c), I[199] = (T)(img)(_p2##x,_p9##y,z,c), I[200] = (T)(img)(_p1##x,_p9##y,z,c), I[201] = (T)(img)(x,_p9##y,z,c), I[202] = (T)(img)(_n1##x,_p9##y,z,c), I[203] = (T)(img)(_n2##x,_p9##y,z,c), I[204] = (T)(img)(_n3##x,_p9##y,z,c), I[205] = (T)(img)(_n4##x,_p9##y,z,c), I[206] = (T)(img)(_n5##x,_p9##y,z,c), I[207] = (T)(img)(_n6##x,_p9##y,z,c), I[208] = (T)(img)(_n7##x,_p9##y,z,c), I[209] = (T)(img)(_n8##x,_p9##y,z,c), I[210] = (T)(img)(_n9##x,_p9##y,z,c), I[211] = (T)(img)(_n10##x,_p9##y,z,c), I[212] = (T)(img)(_n11##x,_p9##y,z,c), I[213] = (T)(img)(_n12##x,_p9##y,z,c), I[214] = (T)(img)(_n13##x,_p9##y,z,c), I[215] = (T)(img)(_n14##x,_p9##y,z,c), I[216] = (T)(img)(_n15##x,_p9##y,z,c), \ - I[217] = (T)(img)(_p15##x,_p8##y,z,c), I[218] = (T)(img)(_p14##x,_p8##y,z,c), I[219] = (T)(img)(_p13##x,_p8##y,z,c), I[220] = (T)(img)(_p12##x,_p8##y,z,c), I[221] = (T)(img)(_p11##x,_p8##y,z,c), I[222] = (T)(img)(_p10##x,_p8##y,z,c), I[223] = (T)(img)(_p9##x,_p8##y,z,c), I[224] = (T)(img)(_p8##x,_p8##y,z,c), I[225] = (T)(img)(_p7##x,_p8##y,z,c), I[226] = (T)(img)(_p6##x,_p8##y,z,c), I[227] = (T)(img)(_p5##x,_p8##y,z,c), I[228] = (T)(img)(_p4##x,_p8##y,z,c), I[229] = (T)(img)(_p3##x,_p8##y,z,c), I[230] = (T)(img)(_p2##x,_p8##y,z,c), I[231] = (T)(img)(_p1##x,_p8##y,z,c), I[232] = (T)(img)(x,_p8##y,z,c), I[233] = (T)(img)(_n1##x,_p8##y,z,c), I[234] = (T)(img)(_n2##x,_p8##y,z,c), I[235] = (T)(img)(_n3##x,_p8##y,z,c), I[236] = (T)(img)(_n4##x,_p8##y,z,c), I[237] = (T)(img)(_n5##x,_p8##y,z,c), I[238] = (T)(img)(_n6##x,_p8##y,z,c), I[239] = (T)(img)(_n7##x,_p8##y,z,c), I[240] = (T)(img)(_n8##x,_p8##y,z,c), I[241] = (T)(img)(_n9##x,_p8##y,z,c), I[242] = (T)(img)(_n10##x,_p8##y,z,c), I[243] = (T)(img)(_n11##x,_p8##y,z,c), I[244] = (T)(img)(_n12##x,_p8##y,z,c), I[245] = (T)(img)(_n13##x,_p8##y,z,c), I[246] = (T)(img)(_n14##x,_p8##y,z,c), I[247] = (T)(img)(_n15##x,_p8##y,z,c), \ - I[248] = (T)(img)(_p15##x,_p7##y,z,c), I[249] = (T)(img)(_p14##x,_p7##y,z,c), I[250] = (T)(img)(_p13##x,_p7##y,z,c), I[251] = (T)(img)(_p12##x,_p7##y,z,c), I[252] = (T)(img)(_p11##x,_p7##y,z,c), I[253] = (T)(img)(_p10##x,_p7##y,z,c), I[254] = (T)(img)(_p9##x,_p7##y,z,c), I[255] = (T)(img)(_p8##x,_p7##y,z,c), I[256] = (T)(img)(_p7##x,_p7##y,z,c), I[257] = (T)(img)(_p6##x,_p7##y,z,c), I[258] = (T)(img)(_p5##x,_p7##y,z,c), I[259] = (T)(img)(_p4##x,_p7##y,z,c), I[260] = (T)(img)(_p3##x,_p7##y,z,c), I[261] = (T)(img)(_p2##x,_p7##y,z,c), I[262] = (T)(img)(_p1##x,_p7##y,z,c), I[263] = (T)(img)(x,_p7##y,z,c), I[264] = (T)(img)(_n1##x,_p7##y,z,c), I[265] = (T)(img)(_n2##x,_p7##y,z,c), I[266] = (T)(img)(_n3##x,_p7##y,z,c), I[267] = (T)(img)(_n4##x,_p7##y,z,c), I[268] = (T)(img)(_n5##x,_p7##y,z,c), I[269] = (T)(img)(_n6##x,_p7##y,z,c), I[270] = (T)(img)(_n7##x,_p7##y,z,c), I[271] = (T)(img)(_n8##x,_p7##y,z,c), I[272] = (T)(img)(_n9##x,_p7##y,z,c), I[273] = (T)(img)(_n10##x,_p7##y,z,c), I[274] = (T)(img)(_n11##x,_p7##y,z,c), I[275] = (T)(img)(_n12##x,_p7##y,z,c), I[276] = (T)(img)(_n13##x,_p7##y,z,c), I[277] = (T)(img)(_n14##x,_p7##y,z,c), I[278] = (T)(img)(_n15##x,_p7##y,z,c), \ - I[279] = (T)(img)(_p15##x,_p6##y,z,c), I[280] = (T)(img)(_p14##x,_p6##y,z,c), I[281] = (T)(img)(_p13##x,_p6##y,z,c), I[282] = (T)(img)(_p12##x,_p6##y,z,c), I[283] = (T)(img)(_p11##x,_p6##y,z,c), I[284] = (T)(img)(_p10##x,_p6##y,z,c), I[285] = (T)(img)(_p9##x,_p6##y,z,c), I[286] = (T)(img)(_p8##x,_p6##y,z,c), I[287] = (T)(img)(_p7##x,_p6##y,z,c), I[288] = (T)(img)(_p6##x,_p6##y,z,c), I[289] = (T)(img)(_p5##x,_p6##y,z,c), I[290] = (T)(img)(_p4##x,_p6##y,z,c), I[291] = (T)(img)(_p3##x,_p6##y,z,c), I[292] = (T)(img)(_p2##x,_p6##y,z,c), I[293] = (T)(img)(_p1##x,_p6##y,z,c), I[294] = (T)(img)(x,_p6##y,z,c), I[295] = (T)(img)(_n1##x,_p6##y,z,c), I[296] = (T)(img)(_n2##x,_p6##y,z,c), I[297] = (T)(img)(_n3##x,_p6##y,z,c), I[298] = (T)(img)(_n4##x,_p6##y,z,c), I[299] = (T)(img)(_n5##x,_p6##y,z,c), I[300] = (T)(img)(_n6##x,_p6##y,z,c), I[301] = (T)(img)(_n7##x,_p6##y,z,c), I[302] = (T)(img)(_n8##x,_p6##y,z,c), I[303] = (T)(img)(_n9##x,_p6##y,z,c), I[304] = (T)(img)(_n10##x,_p6##y,z,c), I[305] = (T)(img)(_n11##x,_p6##y,z,c), I[306] = (T)(img)(_n12##x,_p6##y,z,c), I[307] = (T)(img)(_n13##x,_p6##y,z,c), I[308] = (T)(img)(_n14##x,_p6##y,z,c), I[309] = (T)(img)(_n15##x,_p6##y,z,c), \ - I[310] = (T)(img)(_p15##x,_p5##y,z,c), I[311] = (T)(img)(_p14##x,_p5##y,z,c), I[312] = (T)(img)(_p13##x,_p5##y,z,c), I[313] = (T)(img)(_p12##x,_p5##y,z,c), I[314] = (T)(img)(_p11##x,_p5##y,z,c), I[315] = (T)(img)(_p10##x,_p5##y,z,c), I[316] = (T)(img)(_p9##x,_p5##y,z,c), I[317] = (T)(img)(_p8##x,_p5##y,z,c), I[318] = (T)(img)(_p7##x,_p5##y,z,c), I[319] = (T)(img)(_p6##x,_p5##y,z,c), I[320] = (T)(img)(_p5##x,_p5##y,z,c), I[321] = (T)(img)(_p4##x,_p5##y,z,c), I[322] = (T)(img)(_p3##x,_p5##y,z,c), I[323] = (T)(img)(_p2##x,_p5##y,z,c), I[324] = (T)(img)(_p1##x,_p5##y,z,c), I[325] = (T)(img)(x,_p5##y,z,c), I[326] = (T)(img)(_n1##x,_p5##y,z,c), I[327] = (T)(img)(_n2##x,_p5##y,z,c), I[328] = (T)(img)(_n3##x,_p5##y,z,c), I[329] = (T)(img)(_n4##x,_p5##y,z,c), I[330] = (T)(img)(_n5##x,_p5##y,z,c), I[331] = (T)(img)(_n6##x,_p5##y,z,c), I[332] = (T)(img)(_n7##x,_p5##y,z,c), I[333] = (T)(img)(_n8##x,_p5##y,z,c), I[334] = (T)(img)(_n9##x,_p5##y,z,c), I[335] = (T)(img)(_n10##x,_p5##y,z,c), I[336] = (T)(img)(_n11##x,_p5##y,z,c), I[337] = (T)(img)(_n12##x,_p5##y,z,c), I[338] = (T)(img)(_n13##x,_p5##y,z,c), I[339] = (T)(img)(_n14##x,_p5##y,z,c), I[340] = (T)(img)(_n15##x,_p5##y,z,c), \ - I[341] = (T)(img)(_p15##x,_p4##y,z,c), I[342] = (T)(img)(_p14##x,_p4##y,z,c), I[343] = (T)(img)(_p13##x,_p4##y,z,c), I[344] = (T)(img)(_p12##x,_p4##y,z,c), I[345] = (T)(img)(_p11##x,_p4##y,z,c), I[346] = (T)(img)(_p10##x,_p4##y,z,c), I[347] = (T)(img)(_p9##x,_p4##y,z,c), I[348] = (T)(img)(_p8##x,_p4##y,z,c), I[349] = (T)(img)(_p7##x,_p4##y,z,c), I[350] = (T)(img)(_p6##x,_p4##y,z,c), I[351] = (T)(img)(_p5##x,_p4##y,z,c), I[352] = (T)(img)(_p4##x,_p4##y,z,c), I[353] = (T)(img)(_p3##x,_p4##y,z,c), I[354] = (T)(img)(_p2##x,_p4##y,z,c), I[355] = (T)(img)(_p1##x,_p4##y,z,c), I[356] = (T)(img)(x,_p4##y,z,c), I[357] = (T)(img)(_n1##x,_p4##y,z,c), I[358] = (T)(img)(_n2##x,_p4##y,z,c), I[359] = (T)(img)(_n3##x,_p4##y,z,c), I[360] = (T)(img)(_n4##x,_p4##y,z,c), I[361] = (T)(img)(_n5##x,_p4##y,z,c), I[362] = (T)(img)(_n6##x,_p4##y,z,c), I[363] = (T)(img)(_n7##x,_p4##y,z,c), I[364] = (T)(img)(_n8##x,_p4##y,z,c), I[365] = (T)(img)(_n9##x,_p4##y,z,c), I[366] = (T)(img)(_n10##x,_p4##y,z,c), I[367] = (T)(img)(_n11##x,_p4##y,z,c), I[368] = (T)(img)(_n12##x,_p4##y,z,c), I[369] = (T)(img)(_n13##x,_p4##y,z,c), I[370] = (T)(img)(_n14##x,_p4##y,z,c), I[371] = (T)(img)(_n15##x,_p4##y,z,c), \ - I[372] = (T)(img)(_p15##x,_p3##y,z,c), I[373] = (T)(img)(_p14##x,_p3##y,z,c), I[374] = (T)(img)(_p13##x,_p3##y,z,c), I[375] = (T)(img)(_p12##x,_p3##y,z,c), I[376] = (T)(img)(_p11##x,_p3##y,z,c), I[377] = (T)(img)(_p10##x,_p3##y,z,c), I[378] = (T)(img)(_p9##x,_p3##y,z,c), I[379] = (T)(img)(_p8##x,_p3##y,z,c), I[380] = (T)(img)(_p7##x,_p3##y,z,c), I[381] = (T)(img)(_p6##x,_p3##y,z,c), I[382] = (T)(img)(_p5##x,_p3##y,z,c), I[383] = (T)(img)(_p4##x,_p3##y,z,c), I[384] = (T)(img)(_p3##x,_p3##y,z,c), I[385] = (T)(img)(_p2##x,_p3##y,z,c), I[386] = (T)(img)(_p1##x,_p3##y,z,c), I[387] = (T)(img)(x,_p3##y,z,c), I[388] = (T)(img)(_n1##x,_p3##y,z,c), I[389] = (T)(img)(_n2##x,_p3##y,z,c), I[390] = (T)(img)(_n3##x,_p3##y,z,c), I[391] = (T)(img)(_n4##x,_p3##y,z,c), I[392] = (T)(img)(_n5##x,_p3##y,z,c), I[393] = (T)(img)(_n6##x,_p3##y,z,c), I[394] = (T)(img)(_n7##x,_p3##y,z,c), I[395] = (T)(img)(_n8##x,_p3##y,z,c), I[396] = (T)(img)(_n9##x,_p3##y,z,c), I[397] = (T)(img)(_n10##x,_p3##y,z,c), I[398] = (T)(img)(_n11##x,_p3##y,z,c), I[399] = (T)(img)(_n12##x,_p3##y,z,c), I[400] = (T)(img)(_n13##x,_p3##y,z,c), I[401] = (T)(img)(_n14##x,_p3##y,z,c), I[402] = (T)(img)(_n15##x,_p3##y,z,c), \ - I[403] = (T)(img)(_p15##x,_p2##y,z,c), I[404] = (T)(img)(_p14##x,_p2##y,z,c), I[405] = (T)(img)(_p13##x,_p2##y,z,c), I[406] = (T)(img)(_p12##x,_p2##y,z,c), I[407] = (T)(img)(_p11##x,_p2##y,z,c), I[408] = (T)(img)(_p10##x,_p2##y,z,c), I[409] = (T)(img)(_p9##x,_p2##y,z,c), I[410] = (T)(img)(_p8##x,_p2##y,z,c), I[411] = (T)(img)(_p7##x,_p2##y,z,c), I[412] = (T)(img)(_p6##x,_p2##y,z,c), I[413] = (T)(img)(_p5##x,_p2##y,z,c), I[414] = (T)(img)(_p4##x,_p2##y,z,c), I[415] = (T)(img)(_p3##x,_p2##y,z,c), I[416] = (T)(img)(_p2##x,_p2##y,z,c), I[417] = (T)(img)(_p1##x,_p2##y,z,c), I[418] = (T)(img)(x,_p2##y,z,c), I[419] = (T)(img)(_n1##x,_p2##y,z,c), I[420] = (T)(img)(_n2##x,_p2##y,z,c), I[421] = (T)(img)(_n3##x,_p2##y,z,c), I[422] = (T)(img)(_n4##x,_p2##y,z,c), I[423] = (T)(img)(_n5##x,_p2##y,z,c), I[424] = (T)(img)(_n6##x,_p2##y,z,c), I[425] = (T)(img)(_n7##x,_p2##y,z,c), I[426] = (T)(img)(_n8##x,_p2##y,z,c), I[427] = (T)(img)(_n9##x,_p2##y,z,c), I[428] = (T)(img)(_n10##x,_p2##y,z,c), I[429] = (T)(img)(_n11##x,_p2##y,z,c), I[430] = (T)(img)(_n12##x,_p2##y,z,c), I[431] = (T)(img)(_n13##x,_p2##y,z,c), I[432] = (T)(img)(_n14##x,_p2##y,z,c), I[433] = (T)(img)(_n15##x,_p2##y,z,c), \ - I[434] = (T)(img)(_p15##x,_p1##y,z,c), I[435] = (T)(img)(_p14##x,_p1##y,z,c), I[436] = (T)(img)(_p13##x,_p1##y,z,c), I[437] = (T)(img)(_p12##x,_p1##y,z,c), I[438] = (T)(img)(_p11##x,_p1##y,z,c), I[439] = (T)(img)(_p10##x,_p1##y,z,c), I[440] = (T)(img)(_p9##x,_p1##y,z,c), I[441] = (T)(img)(_p8##x,_p1##y,z,c), I[442] = (T)(img)(_p7##x,_p1##y,z,c), I[443] = (T)(img)(_p6##x,_p1##y,z,c), I[444] = (T)(img)(_p5##x,_p1##y,z,c), I[445] = (T)(img)(_p4##x,_p1##y,z,c), I[446] = (T)(img)(_p3##x,_p1##y,z,c), I[447] = (T)(img)(_p2##x,_p1##y,z,c), I[448] = (T)(img)(_p1##x,_p1##y,z,c), I[449] = (T)(img)(x,_p1##y,z,c), I[450] = (T)(img)(_n1##x,_p1##y,z,c), I[451] = (T)(img)(_n2##x,_p1##y,z,c), I[452] = (T)(img)(_n3##x,_p1##y,z,c), I[453] = (T)(img)(_n4##x,_p1##y,z,c), I[454] = (T)(img)(_n5##x,_p1##y,z,c), I[455] = (T)(img)(_n6##x,_p1##y,z,c), I[456] = (T)(img)(_n7##x,_p1##y,z,c), I[457] = (T)(img)(_n8##x,_p1##y,z,c), I[458] = (T)(img)(_n9##x,_p1##y,z,c), I[459] = (T)(img)(_n10##x,_p1##y,z,c), I[460] = (T)(img)(_n11##x,_p1##y,z,c), I[461] = (T)(img)(_n12##x,_p1##y,z,c), I[462] = (T)(img)(_n13##x,_p1##y,z,c), I[463] = (T)(img)(_n14##x,_p1##y,z,c), I[464] = (T)(img)(_n15##x,_p1##y,z,c), \ - I[465] = (T)(img)(_p15##x,y,z,c), I[466] = (T)(img)(_p14##x,y,z,c), I[467] = (T)(img)(_p13##x,y,z,c), I[468] = (T)(img)(_p12##x,y,z,c), I[469] = (T)(img)(_p11##x,y,z,c), I[470] = (T)(img)(_p10##x,y,z,c), I[471] = (T)(img)(_p9##x,y,z,c), I[472] = (T)(img)(_p8##x,y,z,c), I[473] = (T)(img)(_p7##x,y,z,c), I[474] = (T)(img)(_p6##x,y,z,c), I[475] = (T)(img)(_p5##x,y,z,c), I[476] = (T)(img)(_p4##x,y,z,c), I[477] = (T)(img)(_p3##x,y,z,c), I[478] = (T)(img)(_p2##x,y,z,c), I[479] = (T)(img)(_p1##x,y,z,c), I[480] = (T)(img)(x,y,z,c), I[481] = (T)(img)(_n1##x,y,z,c), I[482] = (T)(img)(_n2##x,y,z,c), I[483] = (T)(img)(_n3##x,y,z,c), I[484] = (T)(img)(_n4##x,y,z,c), I[485] = (T)(img)(_n5##x,y,z,c), I[486] = (T)(img)(_n6##x,y,z,c), I[487] = (T)(img)(_n7##x,y,z,c), I[488] = (T)(img)(_n8##x,y,z,c), I[489] = (T)(img)(_n9##x,y,z,c), I[490] = (T)(img)(_n10##x,y,z,c), I[491] = (T)(img)(_n11##x,y,z,c), I[492] = (T)(img)(_n12##x,y,z,c), I[493] = (T)(img)(_n13##x,y,z,c), I[494] = (T)(img)(_n14##x,y,z,c), I[495] = (T)(img)(_n15##x,y,z,c), \ - I[496] = (T)(img)(_p15##x,_n1##y,z,c), I[497] = (T)(img)(_p14##x,_n1##y,z,c), I[498] = (T)(img)(_p13##x,_n1##y,z,c), I[499] = (T)(img)(_p12##x,_n1##y,z,c), I[500] = (T)(img)(_p11##x,_n1##y,z,c), I[501] = (T)(img)(_p10##x,_n1##y,z,c), I[502] = (T)(img)(_p9##x,_n1##y,z,c), I[503] = (T)(img)(_p8##x,_n1##y,z,c), I[504] = (T)(img)(_p7##x,_n1##y,z,c), I[505] = (T)(img)(_p6##x,_n1##y,z,c), I[506] = (T)(img)(_p5##x,_n1##y,z,c), I[507] = (T)(img)(_p4##x,_n1##y,z,c), I[508] = (T)(img)(_p3##x,_n1##y,z,c), I[509] = (T)(img)(_p2##x,_n1##y,z,c), I[510] = (T)(img)(_p1##x,_n1##y,z,c), I[511] = (T)(img)(x,_n1##y,z,c), I[512] = (T)(img)(_n1##x,_n1##y,z,c), I[513] = (T)(img)(_n2##x,_n1##y,z,c), I[514] = (T)(img)(_n3##x,_n1##y,z,c), I[515] = (T)(img)(_n4##x,_n1##y,z,c), I[516] = (T)(img)(_n5##x,_n1##y,z,c), I[517] = (T)(img)(_n6##x,_n1##y,z,c), I[518] = (T)(img)(_n7##x,_n1##y,z,c), I[519] = (T)(img)(_n8##x,_n1##y,z,c), I[520] = (T)(img)(_n9##x,_n1##y,z,c), I[521] = (T)(img)(_n10##x,_n1##y,z,c), I[522] = (T)(img)(_n11##x,_n1##y,z,c), I[523] = (T)(img)(_n12##x,_n1##y,z,c), I[524] = (T)(img)(_n13##x,_n1##y,z,c), I[525] = (T)(img)(_n14##x,_n1##y,z,c), I[526] = (T)(img)(_n15##x,_n1##y,z,c), \ - I[527] = (T)(img)(_p15##x,_n2##y,z,c), I[528] = (T)(img)(_p14##x,_n2##y,z,c), I[529] = (T)(img)(_p13##x,_n2##y,z,c), I[530] = (T)(img)(_p12##x,_n2##y,z,c), I[531] = (T)(img)(_p11##x,_n2##y,z,c), I[532] = (T)(img)(_p10##x,_n2##y,z,c), I[533] = (T)(img)(_p9##x,_n2##y,z,c), I[534] = (T)(img)(_p8##x,_n2##y,z,c), I[535] = (T)(img)(_p7##x,_n2##y,z,c), I[536] = (T)(img)(_p6##x,_n2##y,z,c), I[537] = (T)(img)(_p5##x,_n2##y,z,c), I[538] = (T)(img)(_p4##x,_n2##y,z,c), I[539] = (T)(img)(_p3##x,_n2##y,z,c), I[540] = (T)(img)(_p2##x,_n2##y,z,c), I[541] = (T)(img)(_p1##x,_n2##y,z,c), I[542] = (T)(img)(x,_n2##y,z,c), I[543] = (T)(img)(_n1##x,_n2##y,z,c), I[544] = (T)(img)(_n2##x,_n2##y,z,c), I[545] = (T)(img)(_n3##x,_n2##y,z,c), I[546] = (T)(img)(_n4##x,_n2##y,z,c), I[547] = (T)(img)(_n5##x,_n2##y,z,c), I[548] = (T)(img)(_n6##x,_n2##y,z,c), I[549] = (T)(img)(_n7##x,_n2##y,z,c), I[550] = (T)(img)(_n8##x,_n2##y,z,c), I[551] = (T)(img)(_n9##x,_n2##y,z,c), I[552] = (T)(img)(_n10##x,_n2##y,z,c), I[553] = (T)(img)(_n11##x,_n2##y,z,c), I[554] = (T)(img)(_n12##x,_n2##y,z,c), I[555] = (T)(img)(_n13##x,_n2##y,z,c), I[556] = (T)(img)(_n14##x,_n2##y,z,c), I[557] = (T)(img)(_n15##x,_n2##y,z,c), \ - I[558] = (T)(img)(_p15##x,_n3##y,z,c), I[559] = (T)(img)(_p14##x,_n3##y,z,c), I[560] = (T)(img)(_p13##x,_n3##y,z,c), I[561] = (T)(img)(_p12##x,_n3##y,z,c), I[562] = (T)(img)(_p11##x,_n3##y,z,c), I[563] = (T)(img)(_p10##x,_n3##y,z,c), I[564] = (T)(img)(_p9##x,_n3##y,z,c), I[565] = (T)(img)(_p8##x,_n3##y,z,c), I[566] = (T)(img)(_p7##x,_n3##y,z,c), I[567] = (T)(img)(_p6##x,_n3##y,z,c), I[568] = (T)(img)(_p5##x,_n3##y,z,c), I[569] = (T)(img)(_p4##x,_n3##y,z,c), I[570] = (T)(img)(_p3##x,_n3##y,z,c), I[571] = (T)(img)(_p2##x,_n3##y,z,c), I[572] = (T)(img)(_p1##x,_n3##y,z,c), I[573] = (T)(img)(x,_n3##y,z,c), I[574] = (T)(img)(_n1##x,_n3##y,z,c), I[575] = (T)(img)(_n2##x,_n3##y,z,c), I[576] = (T)(img)(_n3##x,_n3##y,z,c), I[577] = (T)(img)(_n4##x,_n3##y,z,c), I[578] = (T)(img)(_n5##x,_n3##y,z,c), I[579] = (T)(img)(_n6##x,_n3##y,z,c), I[580] = (T)(img)(_n7##x,_n3##y,z,c), I[581] = (T)(img)(_n8##x,_n3##y,z,c), I[582] = (T)(img)(_n9##x,_n3##y,z,c), I[583] = (T)(img)(_n10##x,_n3##y,z,c), I[584] = (T)(img)(_n11##x,_n3##y,z,c), I[585] = (T)(img)(_n12##x,_n3##y,z,c), I[586] = (T)(img)(_n13##x,_n3##y,z,c), I[587] = (T)(img)(_n14##x,_n3##y,z,c), I[588] = (T)(img)(_n15##x,_n3##y,z,c), \ - I[589] = (T)(img)(_p15##x,_n4##y,z,c), I[590] = (T)(img)(_p14##x,_n4##y,z,c), I[591] = (T)(img)(_p13##x,_n4##y,z,c), I[592] = (T)(img)(_p12##x,_n4##y,z,c), I[593] = (T)(img)(_p11##x,_n4##y,z,c), I[594] = (T)(img)(_p10##x,_n4##y,z,c), I[595] = (T)(img)(_p9##x,_n4##y,z,c), I[596] = (T)(img)(_p8##x,_n4##y,z,c), I[597] = (T)(img)(_p7##x,_n4##y,z,c), I[598] = (T)(img)(_p6##x,_n4##y,z,c), I[599] = (T)(img)(_p5##x,_n4##y,z,c), I[600] = (T)(img)(_p4##x,_n4##y,z,c), I[601] = (T)(img)(_p3##x,_n4##y,z,c), I[602] = (T)(img)(_p2##x,_n4##y,z,c), I[603] = (T)(img)(_p1##x,_n4##y,z,c), I[604] = (T)(img)(x,_n4##y,z,c), I[605] = (T)(img)(_n1##x,_n4##y,z,c), I[606] = (T)(img)(_n2##x,_n4##y,z,c), I[607] = (T)(img)(_n3##x,_n4##y,z,c), I[608] = (T)(img)(_n4##x,_n4##y,z,c), I[609] = (T)(img)(_n5##x,_n4##y,z,c), I[610] = (T)(img)(_n6##x,_n4##y,z,c), I[611] = (T)(img)(_n7##x,_n4##y,z,c), I[612] = (T)(img)(_n8##x,_n4##y,z,c), I[613] = (T)(img)(_n9##x,_n4##y,z,c), I[614] = (T)(img)(_n10##x,_n4##y,z,c), I[615] = (T)(img)(_n11##x,_n4##y,z,c), I[616] = (T)(img)(_n12##x,_n4##y,z,c), I[617] = (T)(img)(_n13##x,_n4##y,z,c), I[618] = (T)(img)(_n14##x,_n4##y,z,c), I[619] = (T)(img)(_n15##x,_n4##y,z,c), \ - I[620] = (T)(img)(_p15##x,_n5##y,z,c), I[621] = (T)(img)(_p14##x,_n5##y,z,c), I[622] = (T)(img)(_p13##x,_n5##y,z,c), I[623] = (T)(img)(_p12##x,_n5##y,z,c), I[624] = (T)(img)(_p11##x,_n5##y,z,c), I[625] = (T)(img)(_p10##x,_n5##y,z,c), I[626] = (T)(img)(_p9##x,_n5##y,z,c), I[627] = (T)(img)(_p8##x,_n5##y,z,c), I[628] = (T)(img)(_p7##x,_n5##y,z,c), I[629] = (T)(img)(_p6##x,_n5##y,z,c), I[630] = (T)(img)(_p5##x,_n5##y,z,c), I[631] = (T)(img)(_p4##x,_n5##y,z,c), I[632] = (T)(img)(_p3##x,_n5##y,z,c), I[633] = (T)(img)(_p2##x,_n5##y,z,c), I[634] = (T)(img)(_p1##x,_n5##y,z,c), I[635] = (T)(img)(x,_n5##y,z,c), I[636] = (T)(img)(_n1##x,_n5##y,z,c), I[637] = (T)(img)(_n2##x,_n5##y,z,c), I[638] = (T)(img)(_n3##x,_n5##y,z,c), I[639] = (T)(img)(_n4##x,_n5##y,z,c), I[640] = (T)(img)(_n5##x,_n5##y,z,c), I[641] = (T)(img)(_n6##x,_n5##y,z,c), I[642] = (T)(img)(_n7##x,_n5##y,z,c), I[643] = (T)(img)(_n8##x,_n5##y,z,c), I[644] = (T)(img)(_n9##x,_n5##y,z,c), I[645] = (T)(img)(_n10##x,_n5##y,z,c), I[646] = (T)(img)(_n11##x,_n5##y,z,c), I[647] = (T)(img)(_n12##x,_n5##y,z,c), I[648] = (T)(img)(_n13##x,_n5##y,z,c), I[649] = (T)(img)(_n14##x,_n5##y,z,c), I[650] = (T)(img)(_n15##x,_n5##y,z,c), \ - I[651] = (T)(img)(_p15##x,_n6##y,z,c), I[652] = (T)(img)(_p14##x,_n6##y,z,c), I[653] = (T)(img)(_p13##x,_n6##y,z,c), I[654] = (T)(img)(_p12##x,_n6##y,z,c), I[655] = (T)(img)(_p11##x,_n6##y,z,c), I[656] = (T)(img)(_p10##x,_n6##y,z,c), I[657] = (T)(img)(_p9##x,_n6##y,z,c), I[658] = (T)(img)(_p8##x,_n6##y,z,c), I[659] = (T)(img)(_p7##x,_n6##y,z,c), I[660] = (T)(img)(_p6##x,_n6##y,z,c), I[661] = (T)(img)(_p5##x,_n6##y,z,c), I[662] = (T)(img)(_p4##x,_n6##y,z,c), I[663] = (T)(img)(_p3##x,_n6##y,z,c), I[664] = (T)(img)(_p2##x,_n6##y,z,c), I[665] = (T)(img)(_p1##x,_n6##y,z,c), I[666] = (T)(img)(x,_n6##y,z,c), I[667] = (T)(img)(_n1##x,_n6##y,z,c), I[668] = (T)(img)(_n2##x,_n6##y,z,c), I[669] = (T)(img)(_n3##x,_n6##y,z,c), I[670] = (T)(img)(_n4##x,_n6##y,z,c), I[671] = (T)(img)(_n5##x,_n6##y,z,c), I[672] = (T)(img)(_n6##x,_n6##y,z,c), I[673] = (T)(img)(_n7##x,_n6##y,z,c), I[674] = (T)(img)(_n8##x,_n6##y,z,c), I[675] = (T)(img)(_n9##x,_n6##y,z,c), I[676] = (T)(img)(_n10##x,_n6##y,z,c), I[677] = (T)(img)(_n11##x,_n6##y,z,c), I[678] = (T)(img)(_n12##x,_n6##y,z,c), I[679] = (T)(img)(_n13##x,_n6##y,z,c), I[680] = (T)(img)(_n14##x,_n6##y,z,c), I[681] = (T)(img)(_n15##x,_n6##y,z,c), \ - I[682] = (T)(img)(_p15##x,_n7##y,z,c), I[683] = (T)(img)(_p14##x,_n7##y,z,c), I[684] = (T)(img)(_p13##x,_n7##y,z,c), I[685] = (T)(img)(_p12##x,_n7##y,z,c), I[686] = (T)(img)(_p11##x,_n7##y,z,c), I[687] = (T)(img)(_p10##x,_n7##y,z,c), I[688] = (T)(img)(_p9##x,_n7##y,z,c), I[689] = (T)(img)(_p8##x,_n7##y,z,c), I[690] = (T)(img)(_p7##x,_n7##y,z,c), I[691] = (T)(img)(_p6##x,_n7##y,z,c), I[692] = (T)(img)(_p5##x,_n7##y,z,c), I[693] = (T)(img)(_p4##x,_n7##y,z,c), I[694] = (T)(img)(_p3##x,_n7##y,z,c), I[695] = (T)(img)(_p2##x,_n7##y,z,c), I[696] = (T)(img)(_p1##x,_n7##y,z,c), I[697] = (T)(img)(x,_n7##y,z,c), I[698] = (T)(img)(_n1##x,_n7##y,z,c), I[699] = (T)(img)(_n2##x,_n7##y,z,c), I[700] = (T)(img)(_n3##x,_n7##y,z,c), I[701] = (T)(img)(_n4##x,_n7##y,z,c), I[702] = (T)(img)(_n5##x,_n7##y,z,c), I[703] = (T)(img)(_n6##x,_n7##y,z,c), I[704] = (T)(img)(_n7##x,_n7##y,z,c), I[705] = (T)(img)(_n8##x,_n7##y,z,c), I[706] = (T)(img)(_n9##x,_n7##y,z,c), I[707] = (T)(img)(_n10##x,_n7##y,z,c), I[708] = (T)(img)(_n11##x,_n7##y,z,c), I[709] = (T)(img)(_n12##x,_n7##y,z,c), I[710] = (T)(img)(_n13##x,_n7##y,z,c), I[711] = (T)(img)(_n14##x,_n7##y,z,c), I[712] = (T)(img)(_n15##x,_n7##y,z,c), \ - I[713] = (T)(img)(_p15##x,_n8##y,z,c), I[714] = (T)(img)(_p14##x,_n8##y,z,c), I[715] = (T)(img)(_p13##x,_n8##y,z,c), I[716] = (T)(img)(_p12##x,_n8##y,z,c), I[717] = (T)(img)(_p11##x,_n8##y,z,c), I[718] = (T)(img)(_p10##x,_n8##y,z,c), I[719] = (T)(img)(_p9##x,_n8##y,z,c), I[720] = (T)(img)(_p8##x,_n8##y,z,c), I[721] = (T)(img)(_p7##x,_n8##y,z,c), I[722] = (T)(img)(_p6##x,_n8##y,z,c), I[723] = (T)(img)(_p5##x,_n8##y,z,c), I[724] = (T)(img)(_p4##x,_n8##y,z,c), I[725] = (T)(img)(_p3##x,_n8##y,z,c), I[726] = (T)(img)(_p2##x,_n8##y,z,c), I[727] = (T)(img)(_p1##x,_n8##y,z,c), I[728] = (T)(img)(x,_n8##y,z,c), I[729] = (T)(img)(_n1##x,_n8##y,z,c), I[730] = (T)(img)(_n2##x,_n8##y,z,c), I[731] = (T)(img)(_n3##x,_n8##y,z,c), I[732] = (T)(img)(_n4##x,_n8##y,z,c), I[733] = (T)(img)(_n5##x,_n8##y,z,c), I[734] = (T)(img)(_n6##x,_n8##y,z,c), I[735] = (T)(img)(_n7##x,_n8##y,z,c), I[736] = (T)(img)(_n8##x,_n8##y,z,c), I[737] = (T)(img)(_n9##x,_n8##y,z,c), I[738] = (T)(img)(_n10##x,_n8##y,z,c), I[739] = (T)(img)(_n11##x,_n8##y,z,c), I[740] = (T)(img)(_n12##x,_n8##y,z,c), I[741] = (T)(img)(_n13##x,_n8##y,z,c), I[742] = (T)(img)(_n14##x,_n8##y,z,c), I[743] = (T)(img)(_n15##x,_n8##y,z,c), \ - I[744] = (T)(img)(_p15##x,_n9##y,z,c), I[745] = (T)(img)(_p14##x,_n9##y,z,c), I[746] = (T)(img)(_p13##x,_n9##y,z,c), I[747] = (T)(img)(_p12##x,_n9##y,z,c), I[748] = (T)(img)(_p11##x,_n9##y,z,c), I[749] = (T)(img)(_p10##x,_n9##y,z,c), I[750] = (T)(img)(_p9##x,_n9##y,z,c), I[751] = (T)(img)(_p8##x,_n9##y,z,c), I[752] = (T)(img)(_p7##x,_n9##y,z,c), I[753] = (T)(img)(_p6##x,_n9##y,z,c), I[754] = (T)(img)(_p5##x,_n9##y,z,c), I[755] = (T)(img)(_p4##x,_n9##y,z,c), I[756] = (T)(img)(_p3##x,_n9##y,z,c), I[757] = (T)(img)(_p2##x,_n9##y,z,c), I[758] = (T)(img)(_p1##x,_n9##y,z,c), I[759] = (T)(img)(x,_n9##y,z,c), I[760] = (T)(img)(_n1##x,_n9##y,z,c), I[761] = (T)(img)(_n2##x,_n9##y,z,c), I[762] = (T)(img)(_n3##x,_n9##y,z,c), I[763] = (T)(img)(_n4##x,_n9##y,z,c), I[764] = (T)(img)(_n5##x,_n9##y,z,c), I[765] = (T)(img)(_n6##x,_n9##y,z,c), I[766] = (T)(img)(_n7##x,_n9##y,z,c), I[767] = (T)(img)(_n8##x,_n9##y,z,c), I[768] = (T)(img)(_n9##x,_n9##y,z,c), I[769] = (T)(img)(_n10##x,_n9##y,z,c), I[770] = (T)(img)(_n11##x,_n9##y,z,c), I[771] = (T)(img)(_n12##x,_n9##y,z,c), I[772] = (T)(img)(_n13##x,_n9##y,z,c), I[773] = (T)(img)(_n14##x,_n9##y,z,c), I[774] = (T)(img)(_n15##x,_n9##y,z,c), \ - I[775] = (T)(img)(_p15##x,_n10##y,z,c), I[776] = (T)(img)(_p14##x,_n10##y,z,c), I[777] = (T)(img)(_p13##x,_n10##y,z,c), I[778] = (T)(img)(_p12##x,_n10##y,z,c), I[779] = (T)(img)(_p11##x,_n10##y,z,c), I[780] = (T)(img)(_p10##x,_n10##y,z,c), I[781] = (T)(img)(_p9##x,_n10##y,z,c), I[782] = (T)(img)(_p8##x,_n10##y,z,c), I[783] = (T)(img)(_p7##x,_n10##y,z,c), I[784] = (T)(img)(_p6##x,_n10##y,z,c), I[785] = (T)(img)(_p5##x,_n10##y,z,c), I[786] = (T)(img)(_p4##x,_n10##y,z,c), I[787] = (T)(img)(_p3##x,_n10##y,z,c), I[788] = (T)(img)(_p2##x,_n10##y,z,c), I[789] = (T)(img)(_p1##x,_n10##y,z,c), I[790] = (T)(img)(x,_n10##y,z,c), I[791] = (T)(img)(_n1##x,_n10##y,z,c), I[792] = (T)(img)(_n2##x,_n10##y,z,c), I[793] = (T)(img)(_n3##x,_n10##y,z,c), I[794] = (T)(img)(_n4##x,_n10##y,z,c), I[795] = (T)(img)(_n5##x,_n10##y,z,c), I[796] = (T)(img)(_n6##x,_n10##y,z,c), I[797] = (T)(img)(_n7##x,_n10##y,z,c), I[798] = (T)(img)(_n8##x,_n10##y,z,c), I[799] = (T)(img)(_n9##x,_n10##y,z,c), I[800] = (T)(img)(_n10##x,_n10##y,z,c), I[801] = (T)(img)(_n11##x,_n10##y,z,c), I[802] = (T)(img)(_n12##x,_n10##y,z,c), I[803] = (T)(img)(_n13##x,_n10##y,z,c), I[804] = (T)(img)(_n14##x,_n10##y,z,c), I[805] = (T)(img)(_n15##x,_n10##y,z,c), \ - I[806] = (T)(img)(_p15##x,_n11##y,z,c), I[807] = (T)(img)(_p14##x,_n11##y,z,c), I[808] = (T)(img)(_p13##x,_n11##y,z,c), I[809] = (T)(img)(_p12##x,_n11##y,z,c), I[810] = (T)(img)(_p11##x,_n11##y,z,c), I[811] = (T)(img)(_p10##x,_n11##y,z,c), I[812] = (T)(img)(_p9##x,_n11##y,z,c), I[813] = (T)(img)(_p8##x,_n11##y,z,c), I[814] = (T)(img)(_p7##x,_n11##y,z,c), I[815] = (T)(img)(_p6##x,_n11##y,z,c), I[816] = (T)(img)(_p5##x,_n11##y,z,c), I[817] = (T)(img)(_p4##x,_n11##y,z,c), I[818] = (T)(img)(_p3##x,_n11##y,z,c), I[819] = (T)(img)(_p2##x,_n11##y,z,c), I[820] = (T)(img)(_p1##x,_n11##y,z,c), I[821] = (T)(img)(x,_n11##y,z,c), I[822] = (T)(img)(_n1##x,_n11##y,z,c), I[823] = (T)(img)(_n2##x,_n11##y,z,c), I[824] = (T)(img)(_n3##x,_n11##y,z,c), I[825] = (T)(img)(_n4##x,_n11##y,z,c), I[826] = (T)(img)(_n5##x,_n11##y,z,c), I[827] = (T)(img)(_n6##x,_n11##y,z,c), I[828] = (T)(img)(_n7##x,_n11##y,z,c), I[829] = (T)(img)(_n8##x,_n11##y,z,c), I[830] = (T)(img)(_n9##x,_n11##y,z,c), I[831] = (T)(img)(_n10##x,_n11##y,z,c), I[832] = (T)(img)(_n11##x,_n11##y,z,c), I[833] = (T)(img)(_n12##x,_n11##y,z,c), I[834] = (T)(img)(_n13##x,_n11##y,z,c), I[835] = (T)(img)(_n14##x,_n11##y,z,c), I[836] = (T)(img)(_n15##x,_n11##y,z,c), \ - I[837] = (T)(img)(_p15##x,_n12##y,z,c), I[838] = (T)(img)(_p14##x,_n12##y,z,c), I[839] = (T)(img)(_p13##x,_n12##y,z,c), I[840] = (T)(img)(_p12##x,_n12##y,z,c), I[841] = (T)(img)(_p11##x,_n12##y,z,c), I[842] = (T)(img)(_p10##x,_n12##y,z,c), I[843] = (T)(img)(_p9##x,_n12##y,z,c), I[844] = (T)(img)(_p8##x,_n12##y,z,c), I[845] = (T)(img)(_p7##x,_n12##y,z,c), I[846] = (T)(img)(_p6##x,_n12##y,z,c), I[847] = (T)(img)(_p5##x,_n12##y,z,c), I[848] = (T)(img)(_p4##x,_n12##y,z,c), I[849] = (T)(img)(_p3##x,_n12##y,z,c), I[850] = (T)(img)(_p2##x,_n12##y,z,c), I[851] = (T)(img)(_p1##x,_n12##y,z,c), I[852] = (T)(img)(x,_n12##y,z,c), I[853] = (T)(img)(_n1##x,_n12##y,z,c), I[854] = (T)(img)(_n2##x,_n12##y,z,c), I[855] = (T)(img)(_n3##x,_n12##y,z,c), I[856] = (T)(img)(_n4##x,_n12##y,z,c), I[857] = (T)(img)(_n5##x,_n12##y,z,c), I[858] = (T)(img)(_n6##x,_n12##y,z,c), I[859] = (T)(img)(_n7##x,_n12##y,z,c), I[860] = (T)(img)(_n8##x,_n12##y,z,c), I[861] = (T)(img)(_n9##x,_n12##y,z,c), I[862] = (T)(img)(_n10##x,_n12##y,z,c), I[863] = (T)(img)(_n11##x,_n12##y,z,c), I[864] = (T)(img)(_n12##x,_n12##y,z,c), I[865] = (T)(img)(_n13##x,_n12##y,z,c), I[866] = (T)(img)(_n14##x,_n12##y,z,c), I[867] = (T)(img)(_n15##x,_n12##y,z,c), \ - I[868] = (T)(img)(_p15##x,_n13##y,z,c), I[869] = (T)(img)(_p14##x,_n13##y,z,c), I[870] = (T)(img)(_p13##x,_n13##y,z,c), I[871] = (T)(img)(_p12##x,_n13##y,z,c), I[872] = (T)(img)(_p11##x,_n13##y,z,c), I[873] = (T)(img)(_p10##x,_n13##y,z,c), I[874] = (T)(img)(_p9##x,_n13##y,z,c), I[875] = (T)(img)(_p8##x,_n13##y,z,c), I[876] = (T)(img)(_p7##x,_n13##y,z,c), I[877] = (T)(img)(_p6##x,_n13##y,z,c), I[878] = (T)(img)(_p5##x,_n13##y,z,c), I[879] = (T)(img)(_p4##x,_n13##y,z,c), I[880] = (T)(img)(_p3##x,_n13##y,z,c), I[881] = (T)(img)(_p2##x,_n13##y,z,c), I[882] = (T)(img)(_p1##x,_n13##y,z,c), I[883] = (T)(img)(x,_n13##y,z,c), I[884] = (T)(img)(_n1##x,_n13##y,z,c), I[885] = (T)(img)(_n2##x,_n13##y,z,c), I[886] = (T)(img)(_n3##x,_n13##y,z,c), I[887] = (T)(img)(_n4##x,_n13##y,z,c), I[888] = (T)(img)(_n5##x,_n13##y,z,c), I[889] = (T)(img)(_n6##x,_n13##y,z,c), I[890] = (T)(img)(_n7##x,_n13##y,z,c), I[891] = (T)(img)(_n8##x,_n13##y,z,c), I[892] = (T)(img)(_n9##x,_n13##y,z,c), I[893] = (T)(img)(_n10##x,_n13##y,z,c), I[894] = (T)(img)(_n11##x,_n13##y,z,c), I[895] = (T)(img)(_n12##x,_n13##y,z,c), I[896] = (T)(img)(_n13##x,_n13##y,z,c), I[897] = (T)(img)(_n14##x,_n13##y,z,c), I[898] = (T)(img)(_n15##x,_n13##y,z,c), \ - I[899] = (T)(img)(_p15##x,_n14##y,z,c), I[900] = (T)(img)(_p14##x,_n14##y,z,c), I[901] = (T)(img)(_p13##x,_n14##y,z,c), I[902] = (T)(img)(_p12##x,_n14##y,z,c), I[903] = (T)(img)(_p11##x,_n14##y,z,c), I[904] = (T)(img)(_p10##x,_n14##y,z,c), I[905] = (T)(img)(_p9##x,_n14##y,z,c), I[906] = (T)(img)(_p8##x,_n14##y,z,c), I[907] = (T)(img)(_p7##x,_n14##y,z,c), I[908] = (T)(img)(_p6##x,_n14##y,z,c), I[909] = (T)(img)(_p5##x,_n14##y,z,c), I[910] = (T)(img)(_p4##x,_n14##y,z,c), I[911] = (T)(img)(_p3##x,_n14##y,z,c), I[912] = (T)(img)(_p2##x,_n14##y,z,c), I[913] = (T)(img)(_p1##x,_n14##y,z,c), I[914] = (T)(img)(x,_n14##y,z,c), I[915] = (T)(img)(_n1##x,_n14##y,z,c), I[916] = (T)(img)(_n2##x,_n14##y,z,c), I[917] = (T)(img)(_n3##x,_n14##y,z,c), I[918] = (T)(img)(_n4##x,_n14##y,z,c), I[919] = (T)(img)(_n5##x,_n14##y,z,c), I[920] = (T)(img)(_n6##x,_n14##y,z,c), I[921] = (T)(img)(_n7##x,_n14##y,z,c), I[922] = (T)(img)(_n8##x,_n14##y,z,c), I[923] = (T)(img)(_n9##x,_n14##y,z,c), I[924] = (T)(img)(_n10##x,_n14##y,z,c), I[925] = (T)(img)(_n11##x,_n14##y,z,c), I[926] = (T)(img)(_n12##x,_n14##y,z,c), I[927] = (T)(img)(_n13##x,_n14##y,z,c), I[928] = (T)(img)(_n14##x,_n14##y,z,c), I[929] = (T)(img)(_n15##x,_n14##y,z,c), \ - I[930] = (T)(img)(_p15##x,_n15##y,z,c), I[931] = (T)(img)(_p14##x,_n15##y,z,c), I[932] = (T)(img)(_p13##x,_n15##y,z,c), I[933] = (T)(img)(_p12##x,_n15##y,z,c), I[934] = (T)(img)(_p11##x,_n15##y,z,c), I[935] = (T)(img)(_p10##x,_n15##y,z,c), I[936] = (T)(img)(_p9##x,_n15##y,z,c), I[937] = (T)(img)(_p8##x,_n15##y,z,c), I[938] = (T)(img)(_p7##x,_n15##y,z,c), I[939] = (T)(img)(_p6##x,_n15##y,z,c), I[940] = (T)(img)(_p5##x,_n15##y,z,c), I[941] = (T)(img)(_p4##x,_n15##y,z,c), I[942] = (T)(img)(_p3##x,_n15##y,z,c), I[943] = (T)(img)(_p2##x,_n15##y,z,c), I[944] = (T)(img)(_p1##x,_n15##y,z,c), I[945] = (T)(img)(x,_n15##y,z,c), I[946] = (T)(img)(_n1##x,_n15##y,z,c), I[947] = (T)(img)(_n2##x,_n15##y,z,c), I[948] = (T)(img)(_n3##x,_n15##y,z,c), I[949] = (T)(img)(_n4##x,_n15##y,z,c), I[950] = (T)(img)(_n5##x,_n15##y,z,c), I[951] = (T)(img)(_n6##x,_n15##y,z,c), I[952] = (T)(img)(_n7##x,_n15##y,z,c), I[953] = (T)(img)(_n8##x,_n15##y,z,c), I[954] = (T)(img)(_n9##x,_n15##y,z,c), I[955] = (T)(img)(_n10##x,_n15##y,z,c), I[956] = (T)(img)(_n11##x,_n15##y,z,c), I[957] = (T)(img)(_n12##x,_n15##y,z,c), I[958] = (T)(img)(_n13##x,_n15##y,z,c), I[959] = (T)(img)(_n14##x,_n15##y,z,c), I[960] = (T)(img)(_n15##x,_n15##y,z,c); - -// Define 32x32 loop macros -//------------------------- -#define cimg_for32(bound,i) for (int i = 0, \ - _p15##i = 0, _p14##i = 0, _p13##i = 0, _p12##i = 0, _p11##i = 0, _p10##i = 0, _p9##i = 0, _p8##i = 0, _p7##i = 0, _p6##i = 0, _p5##i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4, \ - _n5##i = 5>=(int)(bound)?(int)(bound)-1:5, \ - _n6##i = 6>=(int)(bound)?(int)(bound)-1:6, \ - _n7##i = 7>=(int)(bound)?(int)(bound)-1:7, \ - _n8##i = 8>=(int)(bound)?(int)(bound)-1:8, \ - _n9##i = 9>=(int)(bound)?(int)(bound)-1:9, \ - _n10##i = 10>=(int)(bound)?(int)(bound)-1:10, \ - _n11##i = 11>=(int)(bound)?(int)(bound)-1:11, \ - _n12##i = 12>=(int)(bound)?(int)(bound)-1:12, \ - _n13##i = 13>=(int)(bound)?(int)(bound)-1:13, \ - _n14##i = 14>=(int)(bound)?(int)(bound)-1:14, \ - _n15##i = 15>=(int)(bound)?(int)(bound)-1:15, \ - _n16##i = 16>=(int)(bound)?(int)(bound)-1:16; \ - _n16##i<(int)(bound) || _n15##i==--_n16##i || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n16##i = _n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i); \ - _p15##i = _p14##i, _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i, ++_n16##i) - -#define cimg_for32X(img,x) cimg_for32((img)._width,x) -#define cimg_for32Y(img,y) cimg_for32((img)._height,y) -#define cimg_for32Z(img,z) cimg_for32((img)._depth,z) -#define cimg_for32C(img,c) cimg_for32((img)._spectrum,c) -#define cimg_for32XY(img,x,y) cimg_for32Y(img,y) cimg_for32X(img,x) -#define cimg_for32XZ(img,x,z) cimg_for32Z(img,z) cimg_for32X(img,x) -#define cimg_for32XC(img,x,c) cimg_for32C(img,c) cimg_for32X(img,x) -#define cimg_for32YZ(img,y,z) cimg_for32Z(img,z) cimg_for32Y(img,y) -#define cimg_for32YC(img,y,c) cimg_for32C(img,c) cimg_for32Y(img,y) -#define cimg_for32ZC(img,z,c) cimg_for32C(img,c) cimg_for32Z(img,z) -#define cimg_for32XYZ(img,x,y,z) cimg_for32Z(img,z) cimg_for32XY(img,x,y) -#define cimg_for32XZC(img,x,z,c) cimg_for32C(img,c) cimg_for32XZ(img,x,z) -#define cimg_for32YZC(img,y,z,c) cimg_for32C(img,c) cimg_for32YZ(img,y,z) -#define cimg_for32XYZC(img,x,y,z,c) cimg_for32C(img,c) cimg_for32XYZ(img,x,y,z) - -#define cimg_for_in32(bound,i0,i1,i) for (int i = (int)(i0)<0?0:(int)(i0), \ - _p15##i = i-15<0?0:i-15, \ - _p14##i = i-14<0?0:i-14, \ - _p13##i = i-13<0?0:i-13, \ - _p12##i = i-12<0?0:i-12, \ - _p11##i = i-11<0?0:i-11, \ - _p10##i = i-10<0?0:i-10, \ - _p9##i = i-9<0?0:i-9, \ - _p8##i = i-8<0?0:i-8, \ - _p7##i = i-7<0?0:i-7, \ - _p6##i = i-6<0?0:i-6, \ - _p5##i = i-5<0?0:i-5, \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4, \ - _n5##i = i+5>=(int)(bound)?(int)(bound)-1:i+5, \ - _n6##i = i+6>=(int)(bound)?(int)(bound)-1:i+6, \ - _n7##i = i+7>=(int)(bound)?(int)(bound)-1:i+7, \ - _n8##i = i+8>=(int)(bound)?(int)(bound)-1:i+8, \ - _n9##i = i+9>=(int)(bound)?(int)(bound)-1:i+9, \ - _n10##i = i+10>=(int)(bound)?(int)(bound)-1:i+10, \ - _n11##i = i+11>=(int)(bound)?(int)(bound)-1:i+11, \ - _n12##i = i+12>=(int)(bound)?(int)(bound)-1:i+12, \ - _n13##i = i+13>=(int)(bound)?(int)(bound)-1:i+13, \ - _n14##i = i+14>=(int)(bound)?(int)(bound)-1:i+14, \ - _n15##i = i+15>=(int)(bound)?(int)(bound)-1:i+15, \ - _n16##i = i+16>=(int)(bound)?(int)(bound)-1:i+16; \ - i<=(int)(i1) && (_n16##i<(int)(bound) || _n15##i==--_n16##i || _n14##i==--_n15##i || _n13##i==--_n14##i || _n12##i==--_n13##i || _n11##i==--_n12##i || _n10##i==--_n11##i || _n9##i==--_n10##i || _n8##i==--_n9##i || _n7##i==--_n8##i || _n6##i==--_n7##i || _n5##i==--_n6##i || _n4##i==--_n5##i || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ - i==(_n16##i = _n15##i = _n14##i = _n13##i = _n12##i = _n11##i = _n10##i = _n9##i = _n8##i = _n7##i = _n6##i = _n5##i = _n4##i = _n3##i = _n2##i = --_n1##i)); \ - _p15##i = _p14##i, _p14##i = _p13##i, _p13##i = _p12##i, _p12##i = _p11##i, _p11##i = _p10##i, _p10##i = _p9##i, _p9##i = _p8##i, _p8##i = _p7##i, _p7##i = _p6##i, _p6##i = _p5##i, _p5##i = _p4##i, _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, \ - ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i, ++_n5##i, ++_n6##i, ++_n7##i, ++_n8##i, ++_n9##i, ++_n10##i, ++_n11##i, ++_n12##i, ++_n13##i, ++_n14##i, ++_n15##i, ++_n16##i) - -#define cimg_for_in32X(img,x0,x1,x) cimg_for_in32((img)._width,x0,x1,x) -#define cimg_for_in32Y(img,y0,y1,y) cimg_for_in32((img)._height,y0,y1,y) -#define cimg_for_in32Z(img,z0,z1,z) cimg_for_in32((img)._depth,z0,z1,z) -#define cimg_for_in32C(img,c0,c1,c) cimg_for_in32((img)._spectrum,c0,c1,c) -#define cimg_for_in32XY(img,x0,y0,x1,y1,x,y) cimg_for_in32Y(img,y0,y1,y) cimg_for_in32X(img,x0,x1,x) -#define cimg_for_in32XZ(img,x0,z0,x1,z1,x,z) cimg_for_in32Z(img,z0,z1,z) cimg_for_in32X(img,x0,x1,x) -#define cimg_for_in32XC(img,x0,c0,x1,c1,x,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32X(img,x0,x1,x) -#define cimg_for_in32YZ(img,y0,z0,y1,z1,y,z) cimg_for_in32Z(img,z0,z1,z) cimg_for_in32Y(img,y0,y1,y) -#define cimg_for_in32YC(img,y0,c0,y1,c1,y,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32Y(img,y0,y1,y) -#define cimg_for_in32ZC(img,z0,c0,z1,c1,z,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32Z(img,z0,z1,z) -#define cimg_for_in32XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in32Z(img,z0,z1,z) cimg_for_in32XY(img,x0,y0,x1,y1,x,y) -#define cimg_for_in32XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32XZ(img,x0,y0,x1,y1,x,z) -#define cimg_for_in32YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32YZ(img,y0,z0,y1,z1,y,z) -#define cimg_for_in32XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) cimg_for_in32C(img,c0,c1,c) cimg_for_in32XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) - -#define cimg_for32x32(img,x,y,z,c,I,T) \ - cimg_for32((img)._height,y) for (int x = 0, \ - _p15##x = 0, _p14##x = 0, _p13##x = 0, _p12##x = 0, _p11##x = 0, _p10##x = 0, _p9##x = 0, _p8##x = 0, _p7##x = 0, _p6##x = 0, _p5##x = 0, _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = 4>=((img)._width)?(img).width()-1:4, \ - _n5##x = 5>=((img)._width)?(img).width()-1:5, \ - _n6##x = 6>=((img)._width)?(img).width()-1:6, \ - _n7##x = 7>=((img)._width)?(img).width()-1:7, \ - _n8##x = 8>=((img)._width)?(img).width()-1:8, \ - _n9##x = 9>=((img)._width)?(img).width()-1:9, \ - _n10##x = 10>=((img)._width)?(img).width()-1:10, \ - _n11##x = 11>=((img)._width)?(img).width()-1:11, \ - _n12##x = 12>=((img)._width)?(img).width()-1:12, \ - _n13##x = 13>=((img)._width)?(img).width()-1:13, \ - _n14##x = 14>=((img)._width)?(img).width()-1:14, \ - _n15##x = 15>=((img)._width)?(img).width()-1:15, \ - _n16##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = I[4] = I[5] = I[6] = I[7] = I[8] = I[9] = I[10] = I[11] = I[12] = I[13] = I[14] = I[15] = (T)(img)(0,_p15##y,z,c)), \ - (I[32] = I[33] = I[34] = I[35] = I[36] = I[37] = I[38] = I[39] = I[40] = I[41] = I[42] = I[43] = I[44] = I[45] = I[46] = I[47] = (T)(img)(0,_p14##y,z,c)), \ - (I[64] = I[65] = I[66] = I[67] = I[68] = I[69] = I[70] = I[71] = I[72] = I[73] = I[74] = I[75] = I[76] = I[77] = I[78] = I[79] = (T)(img)(0,_p13##y,z,c)), \ - (I[96] = I[97] = I[98] = I[99] = I[100] = I[101] = I[102] = I[103] = I[104] = I[105] = I[106] = I[107] = I[108] = I[109] = I[110] = I[111] = (T)(img)(0,_p12##y,z,c)), \ - (I[128] = I[129] = I[130] = I[131] = I[132] = I[133] = I[134] = I[135] = I[136] = I[137] = I[138] = I[139] = I[140] = I[141] = I[142] = I[143] = (T)(img)(0,_p11##y,z,c)), \ - (I[160] = I[161] = I[162] = I[163] = I[164] = I[165] = I[166] = I[167] = I[168] = I[169] = I[170] = I[171] = I[172] = I[173] = I[174] = I[175] = (T)(img)(0,_p10##y,z,c)), \ - (I[192] = I[193] = I[194] = I[195] = I[196] = I[197] = I[198] = I[199] = I[200] = I[201] = I[202] = I[203] = I[204] = I[205] = I[206] = I[207] = (T)(img)(0,_p9##y,z,c)), \ - (I[224] = I[225] = I[226] = I[227] = I[228] = I[229] = I[230] = I[231] = I[232] = I[233] = I[234] = I[235] = I[236] = I[237] = I[238] = I[239] = (T)(img)(0,_p8##y,z,c)), \ - (I[256] = I[257] = I[258] = I[259] = I[260] = I[261] = I[262] = I[263] = I[264] = I[265] = I[266] = I[267] = I[268] = I[269] = I[270] = I[271] = (T)(img)(0,_p7##y,z,c)), \ - (I[288] = I[289] = I[290] = I[291] = I[292] = I[293] = I[294] = I[295] = I[296] = I[297] = I[298] = I[299] = I[300] = I[301] = I[302] = I[303] = (T)(img)(0,_p6##y,z,c)), \ - (I[320] = I[321] = I[322] = I[323] = I[324] = I[325] = I[326] = I[327] = I[328] = I[329] = I[330] = I[331] = I[332] = I[333] = I[334] = I[335] = (T)(img)(0,_p5##y,z,c)), \ - (I[352] = I[353] = I[354] = I[355] = I[356] = I[357] = I[358] = I[359] = I[360] = I[361] = I[362] = I[363] = I[364] = I[365] = I[366] = I[367] = (T)(img)(0,_p4##y,z,c)), \ - (I[384] = I[385] = I[386] = I[387] = I[388] = I[389] = I[390] = I[391] = I[392] = I[393] = I[394] = I[395] = I[396] = I[397] = I[398] = I[399] = (T)(img)(0,_p3##y,z,c)), \ - (I[416] = I[417] = I[418] = I[419] = I[420] = I[421] = I[422] = I[423] = I[424] = I[425] = I[426] = I[427] = I[428] = I[429] = I[430] = I[431] = (T)(img)(0,_p2##y,z,c)), \ - (I[448] = I[449] = I[450] = I[451] = I[452] = I[453] = I[454] = I[455] = I[456] = I[457] = I[458] = I[459] = I[460] = I[461] = I[462] = I[463] = (T)(img)(0,_p1##y,z,c)), \ - (I[480] = I[481] = I[482] = I[483] = I[484] = I[485] = I[486] = I[487] = I[488] = I[489] = I[490] = I[491] = I[492] = I[493] = I[494] = I[495] = (T)(img)(0,y,z,c)), \ - (I[512] = I[513] = I[514] = I[515] = I[516] = I[517] = I[518] = I[519] = I[520] = I[521] = I[522] = I[523] = I[524] = I[525] = I[526] = I[527] = (T)(img)(0,_n1##y,z,c)), \ - (I[544] = I[545] = I[546] = I[547] = I[548] = I[549] = I[550] = I[551] = I[552] = I[553] = I[554] = I[555] = I[556] = I[557] = I[558] = I[559] = (T)(img)(0,_n2##y,z,c)), \ - (I[576] = I[577] = I[578] = I[579] = I[580] = I[581] = I[582] = I[583] = I[584] = I[585] = I[586] = I[587] = I[588] = I[589] = I[590] = I[591] = (T)(img)(0,_n3##y,z,c)), \ - (I[608] = I[609] = I[610] = I[611] = I[612] = I[613] = I[614] = I[615] = I[616] = I[617] = I[618] = I[619] = I[620] = I[621] = I[622] = I[623] = (T)(img)(0,_n4##y,z,c)), \ - (I[640] = I[641] = I[642] = I[643] = I[644] = I[645] = I[646] = I[647] = I[648] = I[649] = I[650] = I[651] = I[652] = I[653] = I[654] = I[655] = (T)(img)(0,_n5##y,z,c)), \ - (I[672] = I[673] = I[674] = I[675] = I[676] = I[677] = I[678] = I[679] = I[680] = I[681] = I[682] = I[683] = I[684] = I[685] = I[686] = I[687] = (T)(img)(0,_n6##y,z,c)), \ - (I[704] = I[705] = I[706] = I[707] = I[708] = I[709] = I[710] = I[711] = I[712] = I[713] = I[714] = I[715] = I[716] = I[717] = I[718] = I[719] = (T)(img)(0,_n7##y,z,c)), \ - (I[736] = I[737] = I[738] = I[739] = I[740] = I[741] = I[742] = I[743] = I[744] = I[745] = I[746] = I[747] = I[748] = I[749] = I[750] = I[751] = (T)(img)(0,_n8##y,z,c)), \ - (I[768] = I[769] = I[770] = I[771] = I[772] = I[773] = I[774] = I[775] = I[776] = I[777] = I[778] = I[779] = I[780] = I[781] = I[782] = I[783] = (T)(img)(0,_n9##y,z,c)), \ - (I[800] = I[801] = I[802] = I[803] = I[804] = I[805] = I[806] = I[807] = I[808] = I[809] = I[810] = I[811] = I[812] = I[813] = I[814] = I[815] = (T)(img)(0,_n10##y,z,c)), \ - (I[832] = I[833] = I[834] = I[835] = I[836] = I[837] = I[838] = I[839] = I[840] = I[841] = I[842] = I[843] = I[844] = I[845] = I[846] = I[847] = (T)(img)(0,_n11##y,z,c)), \ - (I[864] = I[865] = I[866] = I[867] = I[868] = I[869] = I[870] = I[871] = I[872] = I[873] = I[874] = I[875] = I[876] = I[877] = I[878] = I[879] = (T)(img)(0,_n12##y,z,c)), \ - (I[896] = I[897] = I[898] = I[899] = I[900] = I[901] = I[902] = I[903] = I[904] = I[905] = I[906] = I[907] = I[908] = I[909] = I[910] = I[911] = (T)(img)(0,_n13##y,z,c)), \ - (I[928] = I[929] = I[930] = I[931] = I[932] = I[933] = I[934] = I[935] = I[936] = I[937] = I[938] = I[939] = I[940] = I[941] = I[942] = I[943] = (T)(img)(0,_n14##y,z,c)), \ - (I[960] = I[961] = I[962] = I[963] = I[964] = I[965] = I[966] = I[967] = I[968] = I[969] = I[970] = I[971] = I[972] = I[973] = I[974] = I[975] = (T)(img)(0,_n15##y,z,c)), \ - (I[992] = I[993] = I[994] = I[995] = I[996] = I[997] = I[998] = I[999] = I[1000] = I[1001] = I[1002] = I[1003] = I[1004] = I[1005] = I[1006] = I[1007] = (T)(img)(0,_n16##y,z,c)), \ - (I[16] = (T)(img)(_n1##x,_p15##y,z,c)), \ - (I[48] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[80] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[112] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[144] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[176] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[208] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[240] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[272] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[304] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[336] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[368] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[400] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[432] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[464] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[496] = (T)(img)(_n1##x,y,z,c)), \ - (I[528] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[560] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[592] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[624] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[656] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[688] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[720] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[752] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[784] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[816] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[848] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[880] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[912] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[944] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[976] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[1008] = (T)(img)(_n1##x,_n16##y,z,c)), \ - (I[17] = (T)(img)(_n2##x,_p15##y,z,c)), \ - (I[49] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[81] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[113] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[145] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[177] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[209] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[241] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[273] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[305] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[337] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[369] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[401] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[433] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[465] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[497] = (T)(img)(_n2##x,y,z,c)), \ - (I[529] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[561] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[593] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[625] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[657] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[689] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[721] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[753] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[785] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[817] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[849] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[881] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[913] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[945] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[977] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[1009] = (T)(img)(_n2##x,_n16##y,z,c)), \ - (I[18] = (T)(img)(_n3##x,_p15##y,z,c)), \ - (I[50] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[82] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[114] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[146] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[178] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[210] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[242] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[274] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[306] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[338] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[370] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[402] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[434] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[466] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[498] = (T)(img)(_n3##x,y,z,c)), \ - (I[530] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[562] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[594] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[626] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[658] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[690] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[722] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[754] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[786] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[818] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[850] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[882] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[914] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[946] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[978] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[1010] = (T)(img)(_n3##x,_n16##y,z,c)), \ - (I[19] = (T)(img)(_n4##x,_p15##y,z,c)), \ - (I[51] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[83] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[115] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[147] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[179] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[211] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[243] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[275] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[307] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[339] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[371] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[403] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[435] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[467] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[499] = (T)(img)(_n4##x,y,z,c)), \ - (I[531] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[563] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[595] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[627] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[659] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[691] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[723] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[755] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[787] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[819] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[851] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[883] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[915] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[947] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[979] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[1011] = (T)(img)(_n4##x,_n16##y,z,c)), \ - (I[20] = (T)(img)(_n5##x,_p15##y,z,c)), \ - (I[52] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[84] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[116] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[148] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[180] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[212] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[244] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[276] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[308] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[340] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[372] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[404] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[436] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[468] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[500] = (T)(img)(_n5##x,y,z,c)), \ - (I[532] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[564] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[596] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[628] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[660] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[692] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[724] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[756] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[788] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[820] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[852] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[884] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[916] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[948] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[980] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[1012] = (T)(img)(_n5##x,_n16##y,z,c)), \ - (I[21] = (T)(img)(_n6##x,_p15##y,z,c)), \ - (I[53] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[85] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[117] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[149] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[181] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[213] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[245] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[277] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[309] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[341] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[373] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[405] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[437] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[469] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[501] = (T)(img)(_n6##x,y,z,c)), \ - (I[533] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[565] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[597] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[629] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[661] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[693] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[725] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[757] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[789] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[821] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[853] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[885] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[917] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[949] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[981] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[1013] = (T)(img)(_n6##x,_n16##y,z,c)), \ - (I[22] = (T)(img)(_n7##x,_p15##y,z,c)), \ - (I[54] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[86] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[118] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[150] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[182] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[214] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[246] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[278] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[310] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[342] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[374] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[406] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[438] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[470] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[502] = (T)(img)(_n7##x,y,z,c)), \ - (I[534] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[566] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[598] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[630] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[662] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[694] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[726] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[758] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[790] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[822] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[854] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[886] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[918] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[950] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[982] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[1014] = (T)(img)(_n7##x,_n16##y,z,c)), \ - (I[23] = (T)(img)(_n8##x,_p15##y,z,c)), \ - (I[55] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[87] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[119] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[151] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[183] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[215] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[247] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[279] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[311] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[343] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[375] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[407] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[439] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[471] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[503] = (T)(img)(_n8##x,y,z,c)), \ - (I[535] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[567] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[599] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[631] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[663] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[695] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[727] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[759] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[791] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[823] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[855] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[887] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[919] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[951] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[983] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[1015] = (T)(img)(_n8##x,_n16##y,z,c)), \ - (I[24] = (T)(img)(_n9##x,_p15##y,z,c)), \ - (I[56] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[88] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[120] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[152] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[184] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[216] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[248] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[280] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[312] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[344] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[376] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[408] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[440] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[472] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[504] = (T)(img)(_n9##x,y,z,c)), \ - (I[536] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[568] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[600] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[632] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[664] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[696] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[728] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[760] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[792] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[824] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[856] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[888] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[920] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[952] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[984] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[1016] = (T)(img)(_n9##x,_n16##y,z,c)), \ - (I[25] = (T)(img)(_n10##x,_p15##y,z,c)), \ - (I[57] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[89] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[121] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[153] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[185] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[217] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[249] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[281] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[313] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[345] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[377] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[409] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[441] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[473] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[505] = (T)(img)(_n10##x,y,z,c)), \ - (I[537] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[569] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[601] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[633] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[665] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[697] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[729] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[761] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[793] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[825] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[857] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[889] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[921] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[953] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[985] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[1017] = (T)(img)(_n10##x,_n16##y,z,c)), \ - (I[26] = (T)(img)(_n11##x,_p15##y,z,c)), \ - (I[58] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[90] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[122] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[154] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[186] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[218] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[250] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[282] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[314] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[346] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[378] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[410] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[442] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[474] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[506] = (T)(img)(_n11##x,y,z,c)), \ - (I[538] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[570] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[602] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[634] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[666] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[698] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[730] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[762] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[794] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[826] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[858] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[890] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[922] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[954] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[986] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[1018] = (T)(img)(_n11##x,_n16##y,z,c)), \ - (I[27] = (T)(img)(_n12##x,_p15##y,z,c)), \ - (I[59] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[91] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[123] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[155] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[187] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[219] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[251] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[283] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[315] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[347] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[379] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[411] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[443] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[475] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[507] = (T)(img)(_n12##x,y,z,c)), \ - (I[539] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[571] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[603] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[635] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[667] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[699] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[731] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[763] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[795] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[827] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[859] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[891] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[923] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[955] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[987] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[1019] = (T)(img)(_n12##x,_n16##y,z,c)), \ - (I[28] = (T)(img)(_n13##x,_p15##y,z,c)), \ - (I[60] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[92] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[124] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[156] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[188] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[220] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[252] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[284] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[316] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[348] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[380] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[412] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[444] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[476] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[508] = (T)(img)(_n13##x,y,z,c)), \ - (I[540] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[572] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[604] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[636] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[668] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[700] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[732] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[764] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[796] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[828] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[860] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[892] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[924] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[956] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[988] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[1020] = (T)(img)(_n13##x,_n16##y,z,c)), \ - (I[29] = (T)(img)(_n14##x,_p15##y,z,c)), \ - (I[61] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[93] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[125] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[157] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[189] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[221] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[253] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[285] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[317] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[349] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[381] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[413] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[445] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[477] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[509] = (T)(img)(_n14##x,y,z,c)), \ - (I[541] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[573] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[605] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[637] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[669] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[701] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[733] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[765] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[797] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[829] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[861] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[893] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[925] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[957] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[989] = (T)(img)(_n14##x,_n15##y,z,c)), \ - (I[1021] = (T)(img)(_n14##x,_n16##y,z,c)), \ - (I[30] = (T)(img)(_n15##x,_p15##y,z,c)), \ - (I[62] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[94] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[126] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[158] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[190] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[222] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[254] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[286] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[318] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[350] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[382] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[414] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[446] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[478] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[510] = (T)(img)(_n15##x,y,z,c)), \ - (I[542] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[574] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[606] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[638] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[670] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[702] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[734] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[766] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[798] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[830] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[862] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[894] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[926] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[958] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[990] = (T)(img)(_n15##x,_n15##y,z,c)), \ - (I[1022] = (T)(img)(_n15##x,_n16##y,z,c)), \ - 16>=((img)._width)?(img).width()-1:16); \ - (_n16##x<(img).width() && ( \ - (I[31] = (T)(img)(_n16##x,_p15##y,z,c)), \ - (I[63] = (T)(img)(_n16##x,_p14##y,z,c)), \ - (I[95] = (T)(img)(_n16##x,_p13##y,z,c)), \ - (I[127] = (T)(img)(_n16##x,_p12##y,z,c)), \ - (I[159] = (T)(img)(_n16##x,_p11##y,z,c)), \ - (I[191] = (T)(img)(_n16##x,_p10##y,z,c)), \ - (I[223] = (T)(img)(_n16##x,_p9##y,z,c)), \ - (I[255] = (T)(img)(_n16##x,_p8##y,z,c)), \ - (I[287] = (T)(img)(_n16##x,_p7##y,z,c)), \ - (I[319] = (T)(img)(_n16##x,_p6##y,z,c)), \ - (I[351] = (T)(img)(_n16##x,_p5##y,z,c)), \ - (I[383] = (T)(img)(_n16##x,_p4##y,z,c)), \ - (I[415] = (T)(img)(_n16##x,_p3##y,z,c)), \ - (I[447] = (T)(img)(_n16##x,_p2##y,z,c)), \ - (I[479] = (T)(img)(_n16##x,_p1##y,z,c)), \ - (I[511] = (T)(img)(_n16##x,y,z,c)), \ - (I[543] = (T)(img)(_n16##x,_n1##y,z,c)), \ - (I[575] = (T)(img)(_n16##x,_n2##y,z,c)), \ - (I[607] = (T)(img)(_n16##x,_n3##y,z,c)), \ - (I[639] = (T)(img)(_n16##x,_n4##y,z,c)), \ - (I[671] = (T)(img)(_n16##x,_n5##y,z,c)), \ - (I[703] = (T)(img)(_n16##x,_n6##y,z,c)), \ - (I[735] = (T)(img)(_n16##x,_n7##y,z,c)), \ - (I[767] = (T)(img)(_n16##x,_n8##y,z,c)), \ - (I[799] = (T)(img)(_n16##x,_n9##y,z,c)), \ - (I[831] = (T)(img)(_n16##x,_n10##y,z,c)), \ - (I[863] = (T)(img)(_n16##x,_n11##y,z,c)), \ - (I[895] = (T)(img)(_n16##x,_n12##y,z,c)), \ - (I[927] = (T)(img)(_n16##x,_n13##y,z,c)), \ - (I[959] = (T)(img)(_n16##x,_n14##y,z,c)), \ - (I[991] = (T)(img)(_n16##x,_n15##y,z,c)), \ - (I[1023] = (T)(img)(_n16##x,_n16##y,z,c)),1)) || \ - _n15##x==--_n16##x || _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n16##x = _n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], \ - I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], \ - I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], \ - I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], \ - I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], \ - I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], \ - I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], \ - I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], \ - I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], \ - I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], \ - I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], \ - I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], I[839] = I[840], I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], \ - I[864] = I[865], I[865] = I[866], I[866] = I[867], I[867] = I[868], I[868] = I[869], I[869] = I[870], I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], \ - I[896] = I[897], I[897] = I[898], I[898] = I[899], I[899] = I[900], I[900] = I[901], I[901] = I[902], I[902] = I[903], I[903] = I[904], I[904] = I[905], I[905] = I[906], I[906] = I[907], I[907] = I[908], I[908] = I[909], I[909] = I[910], I[910] = I[911], I[911] = I[912], I[912] = I[913], I[913] = I[914], I[914] = I[915], I[915] = I[916], I[916] = I[917], I[917] = I[918], I[918] = I[919], I[919] = I[920], I[920] = I[921], I[921] = I[922], I[922] = I[923], I[923] = I[924], I[924] = I[925], I[925] = I[926], I[926] = I[927], \ - I[928] = I[929], I[929] = I[930], I[930] = I[931], I[931] = I[932], I[932] = I[933], I[933] = I[934], I[934] = I[935], I[935] = I[936], I[936] = I[937], I[937] = I[938], I[938] = I[939], I[939] = I[940], I[940] = I[941], I[941] = I[942], I[942] = I[943], I[943] = I[944], I[944] = I[945], I[945] = I[946], I[946] = I[947], I[947] = I[948], I[948] = I[949], I[949] = I[950], I[950] = I[951], I[951] = I[952], I[952] = I[953], I[953] = I[954], I[954] = I[955], I[955] = I[956], I[956] = I[957], I[957] = I[958], I[958] = I[959], \ - I[960] = I[961], I[961] = I[962], I[962] = I[963], I[963] = I[964], I[964] = I[965], I[965] = I[966], I[966] = I[967], I[967] = I[968], I[968] = I[969], I[969] = I[970], I[970] = I[971], I[971] = I[972], I[972] = I[973], I[973] = I[974], I[974] = I[975], I[975] = I[976], I[976] = I[977], I[977] = I[978], I[978] = I[979], I[979] = I[980], I[980] = I[981], I[981] = I[982], I[982] = I[983], I[983] = I[984], I[984] = I[985], I[985] = I[986], I[986] = I[987], I[987] = I[988], I[988] = I[989], I[989] = I[990], I[990] = I[991], \ - I[992] = I[993], I[993] = I[994], I[994] = I[995], I[995] = I[996], I[996] = I[997], I[997] = I[998], I[998] = I[999], I[999] = I[1000], I[1000] = I[1001], I[1001] = I[1002], I[1002] = I[1003], I[1003] = I[1004], I[1004] = I[1005], I[1005] = I[1006], I[1006] = I[1007], I[1007] = I[1008], I[1008] = I[1009], I[1009] = I[1010], I[1010] = I[1011], I[1011] = I[1012], I[1012] = I[1013], I[1013] = I[1014], I[1014] = I[1015], I[1015] = I[1016], I[1016] = I[1017], I[1017] = I[1018], I[1018] = I[1019], I[1019] = I[1020], I[1020] = I[1021], I[1021] = I[1022], I[1022] = I[1023], \ - _p15##x = _p14##x, _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x, ++_n16##x) - -#define cimg_for_in32x32(img,x0,y0,x1,y1,x,y,z,c,I,T) \ - cimg_for_in32((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p15##x = x-15<0?0:x-15, \ - _p14##x = x-14<0?0:x-14, \ - _p13##x = x-13<0?0:x-13, \ - _p12##x = x-12<0?0:x-12, \ - _p11##x = x-11<0?0:x-11, \ - _p10##x = x-10<0?0:x-10, \ - _p9##x = x-9<0?0:x-9, \ - _p8##x = x-8<0?0:x-8, \ - _p7##x = x-7<0?0:x-7, \ - _p6##x = x-6<0?0:x-6, \ - _p5##x = x-5<0?0:x-5, \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = x+4>=(img).width()?(img).width()-1:x+4, \ - _n5##x = x+5>=(img).width()?(img).width()-1:x+5, \ - _n6##x = x+6>=(img).width()?(img).width()-1:x+6, \ - _n7##x = x+7>=(img).width()?(img).width()-1:x+7, \ - _n8##x = x+8>=(img).width()?(img).width()-1:x+8, \ - _n9##x = x+9>=(img).width()?(img).width()-1:x+9, \ - _n10##x = x+10>=(img).width()?(img).width()-1:x+10, \ - _n11##x = x+11>=(img).width()?(img).width()-1:x+11, \ - _n12##x = x+12>=(img).width()?(img).width()-1:x+12, \ - _n13##x = x+13>=(img).width()?(img).width()-1:x+13, \ - _n14##x = x+14>=(img).width()?(img).width()-1:x+14, \ - _n15##x = x+15>=(img).width()?(img).width()-1:x+15, \ - _n16##x = (int)( \ - (I[0] = (T)(img)(_p15##x,_p15##y,z,c)), \ - (I[32] = (T)(img)(_p15##x,_p14##y,z,c)), \ - (I[64] = (T)(img)(_p15##x,_p13##y,z,c)), \ - (I[96] = (T)(img)(_p15##x,_p12##y,z,c)), \ - (I[128] = (T)(img)(_p15##x,_p11##y,z,c)), \ - (I[160] = (T)(img)(_p15##x,_p10##y,z,c)), \ - (I[192] = (T)(img)(_p15##x,_p9##y,z,c)), \ - (I[224] = (T)(img)(_p15##x,_p8##y,z,c)), \ - (I[256] = (T)(img)(_p15##x,_p7##y,z,c)), \ - (I[288] = (T)(img)(_p15##x,_p6##y,z,c)), \ - (I[320] = (T)(img)(_p15##x,_p5##y,z,c)), \ - (I[352] = (T)(img)(_p15##x,_p4##y,z,c)), \ - (I[384] = (T)(img)(_p15##x,_p3##y,z,c)), \ - (I[416] = (T)(img)(_p15##x,_p2##y,z,c)), \ - (I[448] = (T)(img)(_p15##x,_p1##y,z,c)), \ - (I[480] = (T)(img)(_p15##x,y,z,c)), \ - (I[512] = (T)(img)(_p15##x,_n1##y,z,c)), \ - (I[544] = (T)(img)(_p15##x,_n2##y,z,c)), \ - (I[576] = (T)(img)(_p15##x,_n3##y,z,c)), \ - (I[608] = (T)(img)(_p15##x,_n4##y,z,c)), \ - (I[640] = (T)(img)(_p15##x,_n5##y,z,c)), \ - (I[672] = (T)(img)(_p15##x,_n6##y,z,c)), \ - (I[704] = (T)(img)(_p15##x,_n7##y,z,c)), \ - (I[736] = (T)(img)(_p15##x,_n8##y,z,c)), \ - (I[768] = (T)(img)(_p15##x,_n9##y,z,c)), \ - (I[800] = (T)(img)(_p15##x,_n10##y,z,c)), \ - (I[832] = (T)(img)(_p15##x,_n11##y,z,c)), \ - (I[864] = (T)(img)(_p15##x,_n12##y,z,c)), \ - (I[896] = (T)(img)(_p15##x,_n13##y,z,c)), \ - (I[928] = (T)(img)(_p15##x,_n14##y,z,c)), \ - (I[960] = (T)(img)(_p15##x,_n15##y,z,c)), \ - (I[992] = (T)(img)(_p15##x,_n16##y,z,c)), \ - (I[1] = (T)(img)(_p14##x,_p15##y,z,c)), \ - (I[33] = (T)(img)(_p14##x,_p14##y,z,c)), \ - (I[65] = (T)(img)(_p14##x,_p13##y,z,c)), \ - (I[97] = (T)(img)(_p14##x,_p12##y,z,c)), \ - (I[129] = (T)(img)(_p14##x,_p11##y,z,c)), \ - (I[161] = (T)(img)(_p14##x,_p10##y,z,c)), \ - (I[193] = (T)(img)(_p14##x,_p9##y,z,c)), \ - (I[225] = (T)(img)(_p14##x,_p8##y,z,c)), \ - (I[257] = (T)(img)(_p14##x,_p7##y,z,c)), \ - (I[289] = (T)(img)(_p14##x,_p6##y,z,c)), \ - (I[321] = (T)(img)(_p14##x,_p5##y,z,c)), \ - (I[353] = (T)(img)(_p14##x,_p4##y,z,c)), \ - (I[385] = (T)(img)(_p14##x,_p3##y,z,c)), \ - (I[417] = (T)(img)(_p14##x,_p2##y,z,c)), \ - (I[449] = (T)(img)(_p14##x,_p1##y,z,c)), \ - (I[481] = (T)(img)(_p14##x,y,z,c)), \ - (I[513] = (T)(img)(_p14##x,_n1##y,z,c)), \ - (I[545] = (T)(img)(_p14##x,_n2##y,z,c)), \ - (I[577] = (T)(img)(_p14##x,_n3##y,z,c)), \ - (I[609] = (T)(img)(_p14##x,_n4##y,z,c)), \ - (I[641] = (T)(img)(_p14##x,_n5##y,z,c)), \ - (I[673] = (T)(img)(_p14##x,_n6##y,z,c)), \ - (I[705] = (T)(img)(_p14##x,_n7##y,z,c)), \ - (I[737] = (T)(img)(_p14##x,_n8##y,z,c)), \ - (I[769] = (T)(img)(_p14##x,_n9##y,z,c)), \ - (I[801] = (T)(img)(_p14##x,_n10##y,z,c)), \ - (I[833] = (T)(img)(_p14##x,_n11##y,z,c)), \ - (I[865] = (T)(img)(_p14##x,_n12##y,z,c)), \ - (I[897] = (T)(img)(_p14##x,_n13##y,z,c)), \ - (I[929] = (T)(img)(_p14##x,_n14##y,z,c)), \ - (I[961] = (T)(img)(_p14##x,_n15##y,z,c)), \ - (I[993] = (T)(img)(_p14##x,_n16##y,z,c)), \ - (I[2] = (T)(img)(_p13##x,_p15##y,z,c)), \ - (I[34] = (T)(img)(_p13##x,_p14##y,z,c)), \ - (I[66] = (T)(img)(_p13##x,_p13##y,z,c)), \ - (I[98] = (T)(img)(_p13##x,_p12##y,z,c)), \ - (I[130] = (T)(img)(_p13##x,_p11##y,z,c)), \ - (I[162] = (T)(img)(_p13##x,_p10##y,z,c)), \ - (I[194] = (T)(img)(_p13##x,_p9##y,z,c)), \ - (I[226] = (T)(img)(_p13##x,_p8##y,z,c)), \ - (I[258] = (T)(img)(_p13##x,_p7##y,z,c)), \ - (I[290] = (T)(img)(_p13##x,_p6##y,z,c)), \ - (I[322] = (T)(img)(_p13##x,_p5##y,z,c)), \ - (I[354] = (T)(img)(_p13##x,_p4##y,z,c)), \ - (I[386] = (T)(img)(_p13##x,_p3##y,z,c)), \ - (I[418] = (T)(img)(_p13##x,_p2##y,z,c)), \ - (I[450] = (T)(img)(_p13##x,_p1##y,z,c)), \ - (I[482] = (T)(img)(_p13##x,y,z,c)), \ - (I[514] = (T)(img)(_p13##x,_n1##y,z,c)), \ - (I[546] = (T)(img)(_p13##x,_n2##y,z,c)), \ - (I[578] = (T)(img)(_p13##x,_n3##y,z,c)), \ - (I[610] = (T)(img)(_p13##x,_n4##y,z,c)), \ - (I[642] = (T)(img)(_p13##x,_n5##y,z,c)), \ - (I[674] = (T)(img)(_p13##x,_n6##y,z,c)), \ - (I[706] = (T)(img)(_p13##x,_n7##y,z,c)), \ - (I[738] = (T)(img)(_p13##x,_n8##y,z,c)), \ - (I[770] = (T)(img)(_p13##x,_n9##y,z,c)), \ - (I[802] = (T)(img)(_p13##x,_n10##y,z,c)), \ - (I[834] = (T)(img)(_p13##x,_n11##y,z,c)), \ - (I[866] = (T)(img)(_p13##x,_n12##y,z,c)), \ - (I[898] = (T)(img)(_p13##x,_n13##y,z,c)), \ - (I[930] = (T)(img)(_p13##x,_n14##y,z,c)), \ - (I[962] = (T)(img)(_p13##x,_n15##y,z,c)), \ - (I[994] = (T)(img)(_p13##x,_n16##y,z,c)), \ - (I[3] = (T)(img)(_p12##x,_p15##y,z,c)), \ - (I[35] = (T)(img)(_p12##x,_p14##y,z,c)), \ - (I[67] = (T)(img)(_p12##x,_p13##y,z,c)), \ - (I[99] = (T)(img)(_p12##x,_p12##y,z,c)), \ - (I[131] = (T)(img)(_p12##x,_p11##y,z,c)), \ - (I[163] = (T)(img)(_p12##x,_p10##y,z,c)), \ - (I[195] = (T)(img)(_p12##x,_p9##y,z,c)), \ - (I[227] = (T)(img)(_p12##x,_p8##y,z,c)), \ - (I[259] = (T)(img)(_p12##x,_p7##y,z,c)), \ - (I[291] = (T)(img)(_p12##x,_p6##y,z,c)), \ - (I[323] = (T)(img)(_p12##x,_p5##y,z,c)), \ - (I[355] = (T)(img)(_p12##x,_p4##y,z,c)), \ - (I[387] = (T)(img)(_p12##x,_p3##y,z,c)), \ - (I[419] = (T)(img)(_p12##x,_p2##y,z,c)), \ - (I[451] = (T)(img)(_p12##x,_p1##y,z,c)), \ - (I[483] = (T)(img)(_p12##x,y,z,c)), \ - (I[515] = (T)(img)(_p12##x,_n1##y,z,c)), \ - (I[547] = (T)(img)(_p12##x,_n2##y,z,c)), \ - (I[579] = (T)(img)(_p12##x,_n3##y,z,c)), \ - (I[611] = (T)(img)(_p12##x,_n4##y,z,c)), \ - (I[643] = (T)(img)(_p12##x,_n5##y,z,c)), \ - (I[675] = (T)(img)(_p12##x,_n6##y,z,c)), \ - (I[707] = (T)(img)(_p12##x,_n7##y,z,c)), \ - (I[739] = (T)(img)(_p12##x,_n8##y,z,c)), \ - (I[771] = (T)(img)(_p12##x,_n9##y,z,c)), \ - (I[803] = (T)(img)(_p12##x,_n10##y,z,c)), \ - (I[835] = (T)(img)(_p12##x,_n11##y,z,c)), \ - (I[867] = (T)(img)(_p12##x,_n12##y,z,c)), \ - (I[899] = (T)(img)(_p12##x,_n13##y,z,c)), \ - (I[931] = (T)(img)(_p12##x,_n14##y,z,c)), \ - (I[963] = (T)(img)(_p12##x,_n15##y,z,c)), \ - (I[995] = (T)(img)(_p12##x,_n16##y,z,c)), \ - (I[4] = (T)(img)(_p11##x,_p15##y,z,c)), \ - (I[36] = (T)(img)(_p11##x,_p14##y,z,c)), \ - (I[68] = (T)(img)(_p11##x,_p13##y,z,c)), \ - (I[100] = (T)(img)(_p11##x,_p12##y,z,c)), \ - (I[132] = (T)(img)(_p11##x,_p11##y,z,c)), \ - (I[164] = (T)(img)(_p11##x,_p10##y,z,c)), \ - (I[196] = (T)(img)(_p11##x,_p9##y,z,c)), \ - (I[228] = (T)(img)(_p11##x,_p8##y,z,c)), \ - (I[260] = (T)(img)(_p11##x,_p7##y,z,c)), \ - (I[292] = (T)(img)(_p11##x,_p6##y,z,c)), \ - (I[324] = (T)(img)(_p11##x,_p5##y,z,c)), \ - (I[356] = (T)(img)(_p11##x,_p4##y,z,c)), \ - (I[388] = (T)(img)(_p11##x,_p3##y,z,c)), \ - (I[420] = (T)(img)(_p11##x,_p2##y,z,c)), \ - (I[452] = (T)(img)(_p11##x,_p1##y,z,c)), \ - (I[484] = (T)(img)(_p11##x,y,z,c)), \ - (I[516] = (T)(img)(_p11##x,_n1##y,z,c)), \ - (I[548] = (T)(img)(_p11##x,_n2##y,z,c)), \ - (I[580] = (T)(img)(_p11##x,_n3##y,z,c)), \ - (I[612] = (T)(img)(_p11##x,_n4##y,z,c)), \ - (I[644] = (T)(img)(_p11##x,_n5##y,z,c)), \ - (I[676] = (T)(img)(_p11##x,_n6##y,z,c)), \ - (I[708] = (T)(img)(_p11##x,_n7##y,z,c)), \ - (I[740] = (T)(img)(_p11##x,_n8##y,z,c)), \ - (I[772] = (T)(img)(_p11##x,_n9##y,z,c)), \ - (I[804] = (T)(img)(_p11##x,_n10##y,z,c)), \ - (I[836] = (T)(img)(_p11##x,_n11##y,z,c)), \ - (I[868] = (T)(img)(_p11##x,_n12##y,z,c)), \ - (I[900] = (T)(img)(_p11##x,_n13##y,z,c)), \ - (I[932] = (T)(img)(_p11##x,_n14##y,z,c)), \ - (I[964] = (T)(img)(_p11##x,_n15##y,z,c)), \ - (I[996] = (T)(img)(_p11##x,_n16##y,z,c)), \ - (I[5] = (T)(img)(_p10##x,_p15##y,z,c)), \ - (I[37] = (T)(img)(_p10##x,_p14##y,z,c)), \ - (I[69] = (T)(img)(_p10##x,_p13##y,z,c)), \ - (I[101] = (T)(img)(_p10##x,_p12##y,z,c)), \ - (I[133] = (T)(img)(_p10##x,_p11##y,z,c)), \ - (I[165] = (T)(img)(_p10##x,_p10##y,z,c)), \ - (I[197] = (T)(img)(_p10##x,_p9##y,z,c)), \ - (I[229] = (T)(img)(_p10##x,_p8##y,z,c)), \ - (I[261] = (T)(img)(_p10##x,_p7##y,z,c)), \ - (I[293] = (T)(img)(_p10##x,_p6##y,z,c)), \ - (I[325] = (T)(img)(_p10##x,_p5##y,z,c)), \ - (I[357] = (T)(img)(_p10##x,_p4##y,z,c)), \ - (I[389] = (T)(img)(_p10##x,_p3##y,z,c)), \ - (I[421] = (T)(img)(_p10##x,_p2##y,z,c)), \ - (I[453] = (T)(img)(_p10##x,_p1##y,z,c)), \ - (I[485] = (T)(img)(_p10##x,y,z,c)), \ - (I[517] = (T)(img)(_p10##x,_n1##y,z,c)), \ - (I[549] = (T)(img)(_p10##x,_n2##y,z,c)), \ - (I[581] = (T)(img)(_p10##x,_n3##y,z,c)), \ - (I[613] = (T)(img)(_p10##x,_n4##y,z,c)), \ - (I[645] = (T)(img)(_p10##x,_n5##y,z,c)), \ - (I[677] = (T)(img)(_p10##x,_n6##y,z,c)), \ - (I[709] = (T)(img)(_p10##x,_n7##y,z,c)), \ - (I[741] = (T)(img)(_p10##x,_n8##y,z,c)), \ - (I[773] = (T)(img)(_p10##x,_n9##y,z,c)), \ - (I[805] = (T)(img)(_p10##x,_n10##y,z,c)), \ - (I[837] = (T)(img)(_p10##x,_n11##y,z,c)), \ - (I[869] = (T)(img)(_p10##x,_n12##y,z,c)), \ - (I[901] = (T)(img)(_p10##x,_n13##y,z,c)), \ - (I[933] = (T)(img)(_p10##x,_n14##y,z,c)), \ - (I[965] = (T)(img)(_p10##x,_n15##y,z,c)), \ - (I[997] = (T)(img)(_p10##x,_n16##y,z,c)), \ - (I[6] = (T)(img)(_p9##x,_p15##y,z,c)), \ - (I[38] = (T)(img)(_p9##x,_p14##y,z,c)), \ - (I[70] = (T)(img)(_p9##x,_p13##y,z,c)), \ - (I[102] = (T)(img)(_p9##x,_p12##y,z,c)), \ - (I[134] = (T)(img)(_p9##x,_p11##y,z,c)), \ - (I[166] = (T)(img)(_p9##x,_p10##y,z,c)), \ - (I[198] = (T)(img)(_p9##x,_p9##y,z,c)), \ - (I[230] = (T)(img)(_p9##x,_p8##y,z,c)), \ - (I[262] = (T)(img)(_p9##x,_p7##y,z,c)), \ - (I[294] = (T)(img)(_p9##x,_p6##y,z,c)), \ - (I[326] = (T)(img)(_p9##x,_p5##y,z,c)), \ - (I[358] = (T)(img)(_p9##x,_p4##y,z,c)), \ - (I[390] = (T)(img)(_p9##x,_p3##y,z,c)), \ - (I[422] = (T)(img)(_p9##x,_p2##y,z,c)), \ - (I[454] = (T)(img)(_p9##x,_p1##y,z,c)), \ - (I[486] = (T)(img)(_p9##x,y,z,c)), \ - (I[518] = (T)(img)(_p9##x,_n1##y,z,c)), \ - (I[550] = (T)(img)(_p9##x,_n2##y,z,c)), \ - (I[582] = (T)(img)(_p9##x,_n3##y,z,c)), \ - (I[614] = (T)(img)(_p9##x,_n4##y,z,c)), \ - (I[646] = (T)(img)(_p9##x,_n5##y,z,c)), \ - (I[678] = (T)(img)(_p9##x,_n6##y,z,c)), \ - (I[710] = (T)(img)(_p9##x,_n7##y,z,c)), \ - (I[742] = (T)(img)(_p9##x,_n8##y,z,c)), \ - (I[774] = (T)(img)(_p9##x,_n9##y,z,c)), \ - (I[806] = (T)(img)(_p9##x,_n10##y,z,c)), \ - (I[838] = (T)(img)(_p9##x,_n11##y,z,c)), \ - (I[870] = (T)(img)(_p9##x,_n12##y,z,c)), \ - (I[902] = (T)(img)(_p9##x,_n13##y,z,c)), \ - (I[934] = (T)(img)(_p9##x,_n14##y,z,c)), \ - (I[966] = (T)(img)(_p9##x,_n15##y,z,c)), \ - (I[998] = (T)(img)(_p9##x,_n16##y,z,c)), \ - (I[7] = (T)(img)(_p8##x,_p15##y,z,c)), \ - (I[39] = (T)(img)(_p8##x,_p14##y,z,c)), \ - (I[71] = (T)(img)(_p8##x,_p13##y,z,c)), \ - (I[103] = (T)(img)(_p8##x,_p12##y,z,c)), \ - (I[135] = (T)(img)(_p8##x,_p11##y,z,c)), \ - (I[167] = (T)(img)(_p8##x,_p10##y,z,c)), \ - (I[199] = (T)(img)(_p8##x,_p9##y,z,c)), \ - (I[231] = (T)(img)(_p8##x,_p8##y,z,c)), \ - (I[263] = (T)(img)(_p8##x,_p7##y,z,c)), \ - (I[295] = (T)(img)(_p8##x,_p6##y,z,c)), \ - (I[327] = (T)(img)(_p8##x,_p5##y,z,c)), \ - (I[359] = (T)(img)(_p8##x,_p4##y,z,c)), \ - (I[391] = (T)(img)(_p8##x,_p3##y,z,c)), \ - (I[423] = (T)(img)(_p8##x,_p2##y,z,c)), \ - (I[455] = (T)(img)(_p8##x,_p1##y,z,c)), \ - (I[487] = (T)(img)(_p8##x,y,z,c)), \ - (I[519] = (T)(img)(_p8##x,_n1##y,z,c)), \ - (I[551] = (T)(img)(_p8##x,_n2##y,z,c)), \ - (I[583] = (T)(img)(_p8##x,_n3##y,z,c)), \ - (I[615] = (T)(img)(_p8##x,_n4##y,z,c)), \ - (I[647] = (T)(img)(_p8##x,_n5##y,z,c)), \ - (I[679] = (T)(img)(_p8##x,_n6##y,z,c)), \ - (I[711] = (T)(img)(_p8##x,_n7##y,z,c)), \ - (I[743] = (T)(img)(_p8##x,_n8##y,z,c)), \ - (I[775] = (T)(img)(_p8##x,_n9##y,z,c)), \ - (I[807] = (T)(img)(_p8##x,_n10##y,z,c)), \ - (I[839] = (T)(img)(_p8##x,_n11##y,z,c)), \ - (I[871] = (T)(img)(_p8##x,_n12##y,z,c)), \ - (I[903] = (T)(img)(_p8##x,_n13##y,z,c)), \ - (I[935] = (T)(img)(_p8##x,_n14##y,z,c)), \ - (I[967] = (T)(img)(_p8##x,_n15##y,z,c)), \ - (I[999] = (T)(img)(_p8##x,_n16##y,z,c)), \ - (I[8] = (T)(img)(_p7##x,_p15##y,z,c)), \ - (I[40] = (T)(img)(_p7##x,_p14##y,z,c)), \ - (I[72] = (T)(img)(_p7##x,_p13##y,z,c)), \ - (I[104] = (T)(img)(_p7##x,_p12##y,z,c)), \ - (I[136] = (T)(img)(_p7##x,_p11##y,z,c)), \ - (I[168] = (T)(img)(_p7##x,_p10##y,z,c)), \ - (I[200] = (T)(img)(_p7##x,_p9##y,z,c)), \ - (I[232] = (T)(img)(_p7##x,_p8##y,z,c)), \ - (I[264] = (T)(img)(_p7##x,_p7##y,z,c)), \ - (I[296] = (T)(img)(_p7##x,_p6##y,z,c)), \ - (I[328] = (T)(img)(_p7##x,_p5##y,z,c)), \ - (I[360] = (T)(img)(_p7##x,_p4##y,z,c)), \ - (I[392] = (T)(img)(_p7##x,_p3##y,z,c)), \ - (I[424] = (T)(img)(_p7##x,_p2##y,z,c)), \ - (I[456] = (T)(img)(_p7##x,_p1##y,z,c)), \ - (I[488] = (T)(img)(_p7##x,y,z,c)), \ - (I[520] = (T)(img)(_p7##x,_n1##y,z,c)), \ - (I[552] = (T)(img)(_p7##x,_n2##y,z,c)), \ - (I[584] = (T)(img)(_p7##x,_n3##y,z,c)), \ - (I[616] = (T)(img)(_p7##x,_n4##y,z,c)), \ - (I[648] = (T)(img)(_p7##x,_n5##y,z,c)), \ - (I[680] = (T)(img)(_p7##x,_n6##y,z,c)), \ - (I[712] = (T)(img)(_p7##x,_n7##y,z,c)), \ - (I[744] = (T)(img)(_p7##x,_n8##y,z,c)), \ - (I[776] = (T)(img)(_p7##x,_n9##y,z,c)), \ - (I[808] = (T)(img)(_p7##x,_n10##y,z,c)), \ - (I[840] = (T)(img)(_p7##x,_n11##y,z,c)), \ - (I[872] = (T)(img)(_p7##x,_n12##y,z,c)), \ - (I[904] = (T)(img)(_p7##x,_n13##y,z,c)), \ - (I[936] = (T)(img)(_p7##x,_n14##y,z,c)), \ - (I[968] = (T)(img)(_p7##x,_n15##y,z,c)), \ - (I[1000] = (T)(img)(_p7##x,_n16##y,z,c)), \ - (I[9] = (T)(img)(_p6##x,_p15##y,z,c)), \ - (I[41] = (T)(img)(_p6##x,_p14##y,z,c)), \ - (I[73] = (T)(img)(_p6##x,_p13##y,z,c)), \ - (I[105] = (T)(img)(_p6##x,_p12##y,z,c)), \ - (I[137] = (T)(img)(_p6##x,_p11##y,z,c)), \ - (I[169] = (T)(img)(_p6##x,_p10##y,z,c)), \ - (I[201] = (T)(img)(_p6##x,_p9##y,z,c)), \ - (I[233] = (T)(img)(_p6##x,_p8##y,z,c)), \ - (I[265] = (T)(img)(_p6##x,_p7##y,z,c)), \ - (I[297] = (T)(img)(_p6##x,_p6##y,z,c)), \ - (I[329] = (T)(img)(_p6##x,_p5##y,z,c)), \ - (I[361] = (T)(img)(_p6##x,_p4##y,z,c)), \ - (I[393] = (T)(img)(_p6##x,_p3##y,z,c)), \ - (I[425] = (T)(img)(_p6##x,_p2##y,z,c)), \ - (I[457] = (T)(img)(_p6##x,_p1##y,z,c)), \ - (I[489] = (T)(img)(_p6##x,y,z,c)), \ - (I[521] = (T)(img)(_p6##x,_n1##y,z,c)), \ - (I[553] = (T)(img)(_p6##x,_n2##y,z,c)), \ - (I[585] = (T)(img)(_p6##x,_n3##y,z,c)), \ - (I[617] = (T)(img)(_p6##x,_n4##y,z,c)), \ - (I[649] = (T)(img)(_p6##x,_n5##y,z,c)), \ - (I[681] = (T)(img)(_p6##x,_n6##y,z,c)), \ - (I[713] = (T)(img)(_p6##x,_n7##y,z,c)), \ - (I[745] = (T)(img)(_p6##x,_n8##y,z,c)), \ - (I[777] = (T)(img)(_p6##x,_n9##y,z,c)), \ - (I[809] = (T)(img)(_p6##x,_n10##y,z,c)), \ - (I[841] = (T)(img)(_p6##x,_n11##y,z,c)), \ - (I[873] = (T)(img)(_p6##x,_n12##y,z,c)), \ - (I[905] = (T)(img)(_p6##x,_n13##y,z,c)), \ - (I[937] = (T)(img)(_p6##x,_n14##y,z,c)), \ - (I[969] = (T)(img)(_p6##x,_n15##y,z,c)), \ - (I[1001] = (T)(img)(_p6##x,_n16##y,z,c)), \ - (I[10] = (T)(img)(_p5##x,_p15##y,z,c)), \ - (I[42] = (T)(img)(_p5##x,_p14##y,z,c)), \ - (I[74] = (T)(img)(_p5##x,_p13##y,z,c)), \ - (I[106] = (T)(img)(_p5##x,_p12##y,z,c)), \ - (I[138] = (T)(img)(_p5##x,_p11##y,z,c)), \ - (I[170] = (T)(img)(_p5##x,_p10##y,z,c)), \ - (I[202] = (T)(img)(_p5##x,_p9##y,z,c)), \ - (I[234] = (T)(img)(_p5##x,_p8##y,z,c)), \ - (I[266] = (T)(img)(_p5##x,_p7##y,z,c)), \ - (I[298] = (T)(img)(_p5##x,_p6##y,z,c)), \ - (I[330] = (T)(img)(_p5##x,_p5##y,z,c)), \ - (I[362] = (T)(img)(_p5##x,_p4##y,z,c)), \ - (I[394] = (T)(img)(_p5##x,_p3##y,z,c)), \ - (I[426] = (T)(img)(_p5##x,_p2##y,z,c)), \ - (I[458] = (T)(img)(_p5##x,_p1##y,z,c)), \ - (I[490] = (T)(img)(_p5##x,y,z,c)), \ - (I[522] = (T)(img)(_p5##x,_n1##y,z,c)), \ - (I[554] = (T)(img)(_p5##x,_n2##y,z,c)), \ - (I[586] = (T)(img)(_p5##x,_n3##y,z,c)), \ - (I[618] = (T)(img)(_p5##x,_n4##y,z,c)), \ - (I[650] = (T)(img)(_p5##x,_n5##y,z,c)), \ - (I[682] = (T)(img)(_p5##x,_n6##y,z,c)), \ - (I[714] = (T)(img)(_p5##x,_n7##y,z,c)), \ - (I[746] = (T)(img)(_p5##x,_n8##y,z,c)), \ - (I[778] = (T)(img)(_p5##x,_n9##y,z,c)), \ - (I[810] = (T)(img)(_p5##x,_n10##y,z,c)), \ - (I[842] = (T)(img)(_p5##x,_n11##y,z,c)), \ - (I[874] = (T)(img)(_p5##x,_n12##y,z,c)), \ - (I[906] = (T)(img)(_p5##x,_n13##y,z,c)), \ - (I[938] = (T)(img)(_p5##x,_n14##y,z,c)), \ - (I[970] = (T)(img)(_p5##x,_n15##y,z,c)), \ - (I[1002] = (T)(img)(_p5##x,_n16##y,z,c)), \ - (I[11] = (T)(img)(_p4##x,_p15##y,z,c)), \ - (I[43] = (T)(img)(_p4##x,_p14##y,z,c)), \ - (I[75] = (T)(img)(_p4##x,_p13##y,z,c)), \ - (I[107] = (T)(img)(_p4##x,_p12##y,z,c)), \ - (I[139] = (T)(img)(_p4##x,_p11##y,z,c)), \ - (I[171] = (T)(img)(_p4##x,_p10##y,z,c)), \ - (I[203] = (T)(img)(_p4##x,_p9##y,z,c)), \ - (I[235] = (T)(img)(_p4##x,_p8##y,z,c)), \ - (I[267] = (T)(img)(_p4##x,_p7##y,z,c)), \ - (I[299] = (T)(img)(_p4##x,_p6##y,z,c)), \ - (I[331] = (T)(img)(_p4##x,_p5##y,z,c)), \ - (I[363] = (T)(img)(_p4##x,_p4##y,z,c)), \ - (I[395] = (T)(img)(_p4##x,_p3##y,z,c)), \ - (I[427] = (T)(img)(_p4##x,_p2##y,z,c)), \ - (I[459] = (T)(img)(_p4##x,_p1##y,z,c)), \ - (I[491] = (T)(img)(_p4##x,y,z,c)), \ - (I[523] = (T)(img)(_p4##x,_n1##y,z,c)), \ - (I[555] = (T)(img)(_p4##x,_n2##y,z,c)), \ - (I[587] = (T)(img)(_p4##x,_n3##y,z,c)), \ - (I[619] = (T)(img)(_p4##x,_n4##y,z,c)), \ - (I[651] = (T)(img)(_p4##x,_n5##y,z,c)), \ - (I[683] = (T)(img)(_p4##x,_n6##y,z,c)), \ - (I[715] = (T)(img)(_p4##x,_n7##y,z,c)), \ - (I[747] = (T)(img)(_p4##x,_n8##y,z,c)), \ - (I[779] = (T)(img)(_p4##x,_n9##y,z,c)), \ - (I[811] = (T)(img)(_p4##x,_n10##y,z,c)), \ - (I[843] = (T)(img)(_p4##x,_n11##y,z,c)), \ - (I[875] = (T)(img)(_p4##x,_n12##y,z,c)), \ - (I[907] = (T)(img)(_p4##x,_n13##y,z,c)), \ - (I[939] = (T)(img)(_p4##x,_n14##y,z,c)), \ - (I[971] = (T)(img)(_p4##x,_n15##y,z,c)), \ - (I[1003] = (T)(img)(_p4##x,_n16##y,z,c)), \ - (I[12] = (T)(img)(_p3##x,_p15##y,z,c)), \ - (I[44] = (T)(img)(_p3##x,_p14##y,z,c)), \ - (I[76] = (T)(img)(_p3##x,_p13##y,z,c)), \ - (I[108] = (T)(img)(_p3##x,_p12##y,z,c)), \ - (I[140] = (T)(img)(_p3##x,_p11##y,z,c)), \ - (I[172] = (T)(img)(_p3##x,_p10##y,z,c)), \ - (I[204] = (T)(img)(_p3##x,_p9##y,z,c)), \ - (I[236] = (T)(img)(_p3##x,_p8##y,z,c)), \ - (I[268] = (T)(img)(_p3##x,_p7##y,z,c)), \ - (I[300] = (T)(img)(_p3##x,_p6##y,z,c)), \ - (I[332] = (T)(img)(_p3##x,_p5##y,z,c)), \ - (I[364] = (T)(img)(_p3##x,_p4##y,z,c)), \ - (I[396] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[428] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[460] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[492] = (T)(img)(_p3##x,y,z,c)), \ - (I[524] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[556] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[588] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[620] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[652] = (T)(img)(_p3##x,_n5##y,z,c)), \ - (I[684] = (T)(img)(_p3##x,_n6##y,z,c)), \ - (I[716] = (T)(img)(_p3##x,_n7##y,z,c)), \ - (I[748] = (T)(img)(_p3##x,_n8##y,z,c)), \ - (I[780] = (T)(img)(_p3##x,_n9##y,z,c)), \ - (I[812] = (T)(img)(_p3##x,_n10##y,z,c)), \ - (I[844] = (T)(img)(_p3##x,_n11##y,z,c)), \ - (I[876] = (T)(img)(_p3##x,_n12##y,z,c)), \ - (I[908] = (T)(img)(_p3##x,_n13##y,z,c)), \ - (I[940] = (T)(img)(_p3##x,_n14##y,z,c)), \ - (I[972] = (T)(img)(_p3##x,_n15##y,z,c)), \ - (I[1004] = (T)(img)(_p3##x,_n16##y,z,c)), \ - (I[13] = (T)(img)(_p2##x,_p15##y,z,c)), \ - (I[45] = (T)(img)(_p2##x,_p14##y,z,c)), \ - (I[77] = (T)(img)(_p2##x,_p13##y,z,c)), \ - (I[109] = (T)(img)(_p2##x,_p12##y,z,c)), \ - (I[141] = (T)(img)(_p2##x,_p11##y,z,c)), \ - (I[173] = (T)(img)(_p2##x,_p10##y,z,c)), \ - (I[205] = (T)(img)(_p2##x,_p9##y,z,c)), \ - (I[237] = (T)(img)(_p2##x,_p8##y,z,c)), \ - (I[269] = (T)(img)(_p2##x,_p7##y,z,c)), \ - (I[301] = (T)(img)(_p2##x,_p6##y,z,c)), \ - (I[333] = (T)(img)(_p2##x,_p5##y,z,c)), \ - (I[365] = (T)(img)(_p2##x,_p4##y,z,c)), \ - (I[397] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[429] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[461] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[493] = (T)(img)(_p2##x,y,z,c)), \ - (I[525] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[557] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[589] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[621] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[653] = (T)(img)(_p2##x,_n5##y,z,c)), \ - (I[685] = (T)(img)(_p2##x,_n6##y,z,c)), \ - (I[717] = (T)(img)(_p2##x,_n7##y,z,c)), \ - (I[749] = (T)(img)(_p2##x,_n8##y,z,c)), \ - (I[781] = (T)(img)(_p2##x,_n9##y,z,c)), \ - (I[813] = (T)(img)(_p2##x,_n10##y,z,c)), \ - (I[845] = (T)(img)(_p2##x,_n11##y,z,c)), \ - (I[877] = (T)(img)(_p2##x,_n12##y,z,c)), \ - (I[909] = (T)(img)(_p2##x,_n13##y,z,c)), \ - (I[941] = (T)(img)(_p2##x,_n14##y,z,c)), \ - (I[973] = (T)(img)(_p2##x,_n15##y,z,c)), \ - (I[1005] = (T)(img)(_p2##x,_n16##y,z,c)), \ - (I[14] = (T)(img)(_p1##x,_p15##y,z,c)), \ - (I[46] = (T)(img)(_p1##x,_p14##y,z,c)), \ - (I[78] = (T)(img)(_p1##x,_p13##y,z,c)), \ - (I[110] = (T)(img)(_p1##x,_p12##y,z,c)), \ - (I[142] = (T)(img)(_p1##x,_p11##y,z,c)), \ - (I[174] = (T)(img)(_p1##x,_p10##y,z,c)), \ - (I[206] = (T)(img)(_p1##x,_p9##y,z,c)), \ - (I[238] = (T)(img)(_p1##x,_p8##y,z,c)), \ - (I[270] = (T)(img)(_p1##x,_p7##y,z,c)), \ - (I[302] = (T)(img)(_p1##x,_p6##y,z,c)), \ - (I[334] = (T)(img)(_p1##x,_p5##y,z,c)), \ - (I[366] = (T)(img)(_p1##x,_p4##y,z,c)), \ - (I[398] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[430] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[462] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[494] = (T)(img)(_p1##x,y,z,c)), \ - (I[526] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[558] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[590] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[622] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[654] = (T)(img)(_p1##x,_n5##y,z,c)), \ - (I[686] = (T)(img)(_p1##x,_n6##y,z,c)), \ - (I[718] = (T)(img)(_p1##x,_n7##y,z,c)), \ - (I[750] = (T)(img)(_p1##x,_n8##y,z,c)), \ - (I[782] = (T)(img)(_p1##x,_n9##y,z,c)), \ - (I[814] = (T)(img)(_p1##x,_n10##y,z,c)), \ - (I[846] = (T)(img)(_p1##x,_n11##y,z,c)), \ - (I[878] = (T)(img)(_p1##x,_n12##y,z,c)), \ - (I[910] = (T)(img)(_p1##x,_n13##y,z,c)), \ - (I[942] = (T)(img)(_p1##x,_n14##y,z,c)), \ - (I[974] = (T)(img)(_p1##x,_n15##y,z,c)), \ - (I[1006] = (T)(img)(_p1##x,_n16##y,z,c)), \ - (I[15] = (T)(img)(x,_p15##y,z,c)), \ - (I[47] = (T)(img)(x,_p14##y,z,c)), \ - (I[79] = (T)(img)(x,_p13##y,z,c)), \ - (I[111] = (T)(img)(x,_p12##y,z,c)), \ - (I[143] = (T)(img)(x,_p11##y,z,c)), \ - (I[175] = (T)(img)(x,_p10##y,z,c)), \ - (I[207] = (T)(img)(x,_p9##y,z,c)), \ - (I[239] = (T)(img)(x,_p8##y,z,c)), \ - (I[271] = (T)(img)(x,_p7##y,z,c)), \ - (I[303] = (T)(img)(x,_p6##y,z,c)), \ - (I[335] = (T)(img)(x,_p5##y,z,c)), \ - (I[367] = (T)(img)(x,_p4##y,z,c)), \ - (I[399] = (T)(img)(x,_p3##y,z,c)), \ - (I[431] = (T)(img)(x,_p2##y,z,c)), \ - (I[463] = (T)(img)(x,_p1##y,z,c)), \ - (I[495] = (T)(img)(x,y,z,c)), \ - (I[527] = (T)(img)(x,_n1##y,z,c)), \ - (I[559] = (T)(img)(x,_n2##y,z,c)), \ - (I[591] = (T)(img)(x,_n3##y,z,c)), \ - (I[623] = (T)(img)(x,_n4##y,z,c)), \ - (I[655] = (T)(img)(x,_n5##y,z,c)), \ - (I[687] = (T)(img)(x,_n6##y,z,c)), \ - (I[719] = (T)(img)(x,_n7##y,z,c)), \ - (I[751] = (T)(img)(x,_n8##y,z,c)), \ - (I[783] = (T)(img)(x,_n9##y,z,c)), \ - (I[815] = (T)(img)(x,_n10##y,z,c)), \ - (I[847] = (T)(img)(x,_n11##y,z,c)), \ - (I[879] = (T)(img)(x,_n12##y,z,c)), \ - (I[911] = (T)(img)(x,_n13##y,z,c)), \ - (I[943] = (T)(img)(x,_n14##y,z,c)), \ - (I[975] = (T)(img)(x,_n15##y,z,c)), \ - (I[1007] = (T)(img)(x,_n16##y,z,c)), \ - (I[16] = (T)(img)(_n1##x,_p15##y,z,c)), \ - (I[48] = (T)(img)(_n1##x,_p14##y,z,c)), \ - (I[80] = (T)(img)(_n1##x,_p13##y,z,c)), \ - (I[112] = (T)(img)(_n1##x,_p12##y,z,c)), \ - (I[144] = (T)(img)(_n1##x,_p11##y,z,c)), \ - (I[176] = (T)(img)(_n1##x,_p10##y,z,c)), \ - (I[208] = (T)(img)(_n1##x,_p9##y,z,c)), \ - (I[240] = (T)(img)(_n1##x,_p8##y,z,c)), \ - (I[272] = (T)(img)(_n1##x,_p7##y,z,c)), \ - (I[304] = (T)(img)(_n1##x,_p6##y,z,c)), \ - (I[336] = (T)(img)(_n1##x,_p5##y,z,c)), \ - (I[368] = (T)(img)(_n1##x,_p4##y,z,c)), \ - (I[400] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[432] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[464] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[496] = (T)(img)(_n1##x,y,z,c)), \ - (I[528] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[560] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[592] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[624] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[656] = (T)(img)(_n1##x,_n5##y,z,c)), \ - (I[688] = (T)(img)(_n1##x,_n6##y,z,c)), \ - (I[720] = (T)(img)(_n1##x,_n7##y,z,c)), \ - (I[752] = (T)(img)(_n1##x,_n8##y,z,c)), \ - (I[784] = (T)(img)(_n1##x,_n9##y,z,c)), \ - (I[816] = (T)(img)(_n1##x,_n10##y,z,c)), \ - (I[848] = (T)(img)(_n1##x,_n11##y,z,c)), \ - (I[880] = (T)(img)(_n1##x,_n12##y,z,c)), \ - (I[912] = (T)(img)(_n1##x,_n13##y,z,c)), \ - (I[944] = (T)(img)(_n1##x,_n14##y,z,c)), \ - (I[976] = (T)(img)(_n1##x,_n15##y,z,c)), \ - (I[1008] = (T)(img)(_n1##x,_n16##y,z,c)), \ - (I[17] = (T)(img)(_n2##x,_p15##y,z,c)), \ - (I[49] = (T)(img)(_n2##x,_p14##y,z,c)), \ - (I[81] = (T)(img)(_n2##x,_p13##y,z,c)), \ - (I[113] = (T)(img)(_n2##x,_p12##y,z,c)), \ - (I[145] = (T)(img)(_n2##x,_p11##y,z,c)), \ - (I[177] = (T)(img)(_n2##x,_p10##y,z,c)), \ - (I[209] = (T)(img)(_n2##x,_p9##y,z,c)), \ - (I[241] = (T)(img)(_n2##x,_p8##y,z,c)), \ - (I[273] = (T)(img)(_n2##x,_p7##y,z,c)), \ - (I[305] = (T)(img)(_n2##x,_p6##y,z,c)), \ - (I[337] = (T)(img)(_n2##x,_p5##y,z,c)), \ - (I[369] = (T)(img)(_n2##x,_p4##y,z,c)), \ - (I[401] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[433] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[465] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[497] = (T)(img)(_n2##x,y,z,c)), \ - (I[529] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[561] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[593] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[625] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[657] = (T)(img)(_n2##x,_n5##y,z,c)), \ - (I[689] = (T)(img)(_n2##x,_n6##y,z,c)), \ - (I[721] = (T)(img)(_n2##x,_n7##y,z,c)), \ - (I[753] = (T)(img)(_n2##x,_n8##y,z,c)), \ - (I[785] = (T)(img)(_n2##x,_n9##y,z,c)), \ - (I[817] = (T)(img)(_n2##x,_n10##y,z,c)), \ - (I[849] = (T)(img)(_n2##x,_n11##y,z,c)), \ - (I[881] = (T)(img)(_n2##x,_n12##y,z,c)), \ - (I[913] = (T)(img)(_n2##x,_n13##y,z,c)), \ - (I[945] = (T)(img)(_n2##x,_n14##y,z,c)), \ - (I[977] = (T)(img)(_n2##x,_n15##y,z,c)), \ - (I[1009] = (T)(img)(_n2##x,_n16##y,z,c)), \ - (I[18] = (T)(img)(_n3##x,_p15##y,z,c)), \ - (I[50] = (T)(img)(_n3##x,_p14##y,z,c)), \ - (I[82] = (T)(img)(_n3##x,_p13##y,z,c)), \ - (I[114] = (T)(img)(_n3##x,_p12##y,z,c)), \ - (I[146] = (T)(img)(_n3##x,_p11##y,z,c)), \ - (I[178] = (T)(img)(_n3##x,_p10##y,z,c)), \ - (I[210] = (T)(img)(_n3##x,_p9##y,z,c)), \ - (I[242] = (T)(img)(_n3##x,_p8##y,z,c)), \ - (I[274] = (T)(img)(_n3##x,_p7##y,z,c)), \ - (I[306] = (T)(img)(_n3##x,_p6##y,z,c)), \ - (I[338] = (T)(img)(_n3##x,_p5##y,z,c)), \ - (I[370] = (T)(img)(_n3##x,_p4##y,z,c)), \ - (I[402] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[434] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[466] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[498] = (T)(img)(_n3##x,y,z,c)), \ - (I[530] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[562] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[594] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[626] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[658] = (T)(img)(_n3##x,_n5##y,z,c)), \ - (I[690] = (T)(img)(_n3##x,_n6##y,z,c)), \ - (I[722] = (T)(img)(_n3##x,_n7##y,z,c)), \ - (I[754] = (T)(img)(_n3##x,_n8##y,z,c)), \ - (I[786] = (T)(img)(_n3##x,_n9##y,z,c)), \ - (I[818] = (T)(img)(_n3##x,_n10##y,z,c)), \ - (I[850] = (T)(img)(_n3##x,_n11##y,z,c)), \ - (I[882] = (T)(img)(_n3##x,_n12##y,z,c)), \ - (I[914] = (T)(img)(_n3##x,_n13##y,z,c)), \ - (I[946] = (T)(img)(_n3##x,_n14##y,z,c)), \ - (I[978] = (T)(img)(_n3##x,_n15##y,z,c)), \ - (I[1010] = (T)(img)(_n3##x,_n16##y,z,c)), \ - (I[19] = (T)(img)(_n4##x,_p15##y,z,c)), \ - (I[51] = (T)(img)(_n4##x,_p14##y,z,c)), \ - (I[83] = (T)(img)(_n4##x,_p13##y,z,c)), \ - (I[115] = (T)(img)(_n4##x,_p12##y,z,c)), \ - (I[147] = (T)(img)(_n4##x,_p11##y,z,c)), \ - (I[179] = (T)(img)(_n4##x,_p10##y,z,c)), \ - (I[211] = (T)(img)(_n4##x,_p9##y,z,c)), \ - (I[243] = (T)(img)(_n4##x,_p8##y,z,c)), \ - (I[275] = (T)(img)(_n4##x,_p7##y,z,c)), \ - (I[307] = (T)(img)(_n4##x,_p6##y,z,c)), \ - (I[339] = (T)(img)(_n4##x,_p5##y,z,c)), \ - (I[371] = (T)(img)(_n4##x,_p4##y,z,c)), \ - (I[403] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[435] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[467] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[499] = (T)(img)(_n4##x,y,z,c)), \ - (I[531] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[563] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[595] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[627] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[659] = (T)(img)(_n4##x,_n5##y,z,c)), \ - (I[691] = (T)(img)(_n4##x,_n6##y,z,c)), \ - (I[723] = (T)(img)(_n4##x,_n7##y,z,c)), \ - (I[755] = (T)(img)(_n4##x,_n8##y,z,c)), \ - (I[787] = (T)(img)(_n4##x,_n9##y,z,c)), \ - (I[819] = (T)(img)(_n4##x,_n10##y,z,c)), \ - (I[851] = (T)(img)(_n4##x,_n11##y,z,c)), \ - (I[883] = (T)(img)(_n4##x,_n12##y,z,c)), \ - (I[915] = (T)(img)(_n4##x,_n13##y,z,c)), \ - (I[947] = (T)(img)(_n4##x,_n14##y,z,c)), \ - (I[979] = (T)(img)(_n4##x,_n15##y,z,c)), \ - (I[1011] = (T)(img)(_n4##x,_n16##y,z,c)), \ - (I[20] = (T)(img)(_n5##x,_p15##y,z,c)), \ - (I[52] = (T)(img)(_n5##x,_p14##y,z,c)), \ - (I[84] = (T)(img)(_n5##x,_p13##y,z,c)), \ - (I[116] = (T)(img)(_n5##x,_p12##y,z,c)), \ - (I[148] = (T)(img)(_n5##x,_p11##y,z,c)), \ - (I[180] = (T)(img)(_n5##x,_p10##y,z,c)), \ - (I[212] = (T)(img)(_n5##x,_p9##y,z,c)), \ - (I[244] = (T)(img)(_n5##x,_p8##y,z,c)), \ - (I[276] = (T)(img)(_n5##x,_p7##y,z,c)), \ - (I[308] = (T)(img)(_n5##x,_p6##y,z,c)), \ - (I[340] = (T)(img)(_n5##x,_p5##y,z,c)), \ - (I[372] = (T)(img)(_n5##x,_p4##y,z,c)), \ - (I[404] = (T)(img)(_n5##x,_p3##y,z,c)), \ - (I[436] = (T)(img)(_n5##x,_p2##y,z,c)), \ - (I[468] = (T)(img)(_n5##x,_p1##y,z,c)), \ - (I[500] = (T)(img)(_n5##x,y,z,c)), \ - (I[532] = (T)(img)(_n5##x,_n1##y,z,c)), \ - (I[564] = (T)(img)(_n5##x,_n2##y,z,c)), \ - (I[596] = (T)(img)(_n5##x,_n3##y,z,c)), \ - (I[628] = (T)(img)(_n5##x,_n4##y,z,c)), \ - (I[660] = (T)(img)(_n5##x,_n5##y,z,c)), \ - (I[692] = (T)(img)(_n5##x,_n6##y,z,c)), \ - (I[724] = (T)(img)(_n5##x,_n7##y,z,c)), \ - (I[756] = (T)(img)(_n5##x,_n8##y,z,c)), \ - (I[788] = (T)(img)(_n5##x,_n9##y,z,c)), \ - (I[820] = (T)(img)(_n5##x,_n10##y,z,c)), \ - (I[852] = (T)(img)(_n5##x,_n11##y,z,c)), \ - (I[884] = (T)(img)(_n5##x,_n12##y,z,c)), \ - (I[916] = (T)(img)(_n5##x,_n13##y,z,c)), \ - (I[948] = (T)(img)(_n5##x,_n14##y,z,c)), \ - (I[980] = (T)(img)(_n5##x,_n15##y,z,c)), \ - (I[1012] = (T)(img)(_n5##x,_n16##y,z,c)), \ - (I[21] = (T)(img)(_n6##x,_p15##y,z,c)), \ - (I[53] = (T)(img)(_n6##x,_p14##y,z,c)), \ - (I[85] = (T)(img)(_n6##x,_p13##y,z,c)), \ - (I[117] = (T)(img)(_n6##x,_p12##y,z,c)), \ - (I[149] = (T)(img)(_n6##x,_p11##y,z,c)), \ - (I[181] = (T)(img)(_n6##x,_p10##y,z,c)), \ - (I[213] = (T)(img)(_n6##x,_p9##y,z,c)), \ - (I[245] = (T)(img)(_n6##x,_p8##y,z,c)), \ - (I[277] = (T)(img)(_n6##x,_p7##y,z,c)), \ - (I[309] = (T)(img)(_n6##x,_p6##y,z,c)), \ - (I[341] = (T)(img)(_n6##x,_p5##y,z,c)), \ - (I[373] = (T)(img)(_n6##x,_p4##y,z,c)), \ - (I[405] = (T)(img)(_n6##x,_p3##y,z,c)), \ - (I[437] = (T)(img)(_n6##x,_p2##y,z,c)), \ - (I[469] = (T)(img)(_n6##x,_p1##y,z,c)), \ - (I[501] = (T)(img)(_n6##x,y,z,c)), \ - (I[533] = (T)(img)(_n6##x,_n1##y,z,c)), \ - (I[565] = (T)(img)(_n6##x,_n2##y,z,c)), \ - (I[597] = (T)(img)(_n6##x,_n3##y,z,c)), \ - (I[629] = (T)(img)(_n6##x,_n4##y,z,c)), \ - (I[661] = (T)(img)(_n6##x,_n5##y,z,c)), \ - (I[693] = (T)(img)(_n6##x,_n6##y,z,c)), \ - (I[725] = (T)(img)(_n6##x,_n7##y,z,c)), \ - (I[757] = (T)(img)(_n6##x,_n8##y,z,c)), \ - (I[789] = (T)(img)(_n6##x,_n9##y,z,c)), \ - (I[821] = (T)(img)(_n6##x,_n10##y,z,c)), \ - (I[853] = (T)(img)(_n6##x,_n11##y,z,c)), \ - (I[885] = (T)(img)(_n6##x,_n12##y,z,c)), \ - (I[917] = (T)(img)(_n6##x,_n13##y,z,c)), \ - (I[949] = (T)(img)(_n6##x,_n14##y,z,c)), \ - (I[981] = (T)(img)(_n6##x,_n15##y,z,c)), \ - (I[1013] = (T)(img)(_n6##x,_n16##y,z,c)), \ - (I[22] = (T)(img)(_n7##x,_p15##y,z,c)), \ - (I[54] = (T)(img)(_n7##x,_p14##y,z,c)), \ - (I[86] = (T)(img)(_n7##x,_p13##y,z,c)), \ - (I[118] = (T)(img)(_n7##x,_p12##y,z,c)), \ - (I[150] = (T)(img)(_n7##x,_p11##y,z,c)), \ - (I[182] = (T)(img)(_n7##x,_p10##y,z,c)), \ - (I[214] = (T)(img)(_n7##x,_p9##y,z,c)), \ - (I[246] = (T)(img)(_n7##x,_p8##y,z,c)), \ - (I[278] = (T)(img)(_n7##x,_p7##y,z,c)), \ - (I[310] = (T)(img)(_n7##x,_p6##y,z,c)), \ - (I[342] = (T)(img)(_n7##x,_p5##y,z,c)), \ - (I[374] = (T)(img)(_n7##x,_p4##y,z,c)), \ - (I[406] = (T)(img)(_n7##x,_p3##y,z,c)), \ - (I[438] = (T)(img)(_n7##x,_p2##y,z,c)), \ - (I[470] = (T)(img)(_n7##x,_p1##y,z,c)), \ - (I[502] = (T)(img)(_n7##x,y,z,c)), \ - (I[534] = (T)(img)(_n7##x,_n1##y,z,c)), \ - (I[566] = (T)(img)(_n7##x,_n2##y,z,c)), \ - (I[598] = (T)(img)(_n7##x,_n3##y,z,c)), \ - (I[630] = (T)(img)(_n7##x,_n4##y,z,c)), \ - (I[662] = (T)(img)(_n7##x,_n5##y,z,c)), \ - (I[694] = (T)(img)(_n7##x,_n6##y,z,c)), \ - (I[726] = (T)(img)(_n7##x,_n7##y,z,c)), \ - (I[758] = (T)(img)(_n7##x,_n8##y,z,c)), \ - (I[790] = (T)(img)(_n7##x,_n9##y,z,c)), \ - (I[822] = (T)(img)(_n7##x,_n10##y,z,c)), \ - (I[854] = (T)(img)(_n7##x,_n11##y,z,c)), \ - (I[886] = (T)(img)(_n7##x,_n12##y,z,c)), \ - (I[918] = (T)(img)(_n7##x,_n13##y,z,c)), \ - (I[950] = (T)(img)(_n7##x,_n14##y,z,c)), \ - (I[982] = (T)(img)(_n7##x,_n15##y,z,c)), \ - (I[1014] = (T)(img)(_n7##x,_n16##y,z,c)), \ - (I[23] = (T)(img)(_n8##x,_p15##y,z,c)), \ - (I[55] = (T)(img)(_n8##x,_p14##y,z,c)), \ - (I[87] = (T)(img)(_n8##x,_p13##y,z,c)), \ - (I[119] = (T)(img)(_n8##x,_p12##y,z,c)), \ - (I[151] = (T)(img)(_n8##x,_p11##y,z,c)), \ - (I[183] = (T)(img)(_n8##x,_p10##y,z,c)), \ - (I[215] = (T)(img)(_n8##x,_p9##y,z,c)), \ - (I[247] = (T)(img)(_n8##x,_p8##y,z,c)), \ - (I[279] = (T)(img)(_n8##x,_p7##y,z,c)), \ - (I[311] = (T)(img)(_n8##x,_p6##y,z,c)), \ - (I[343] = (T)(img)(_n8##x,_p5##y,z,c)), \ - (I[375] = (T)(img)(_n8##x,_p4##y,z,c)), \ - (I[407] = (T)(img)(_n8##x,_p3##y,z,c)), \ - (I[439] = (T)(img)(_n8##x,_p2##y,z,c)), \ - (I[471] = (T)(img)(_n8##x,_p1##y,z,c)), \ - (I[503] = (T)(img)(_n8##x,y,z,c)), \ - (I[535] = (T)(img)(_n8##x,_n1##y,z,c)), \ - (I[567] = (T)(img)(_n8##x,_n2##y,z,c)), \ - (I[599] = (T)(img)(_n8##x,_n3##y,z,c)), \ - (I[631] = (T)(img)(_n8##x,_n4##y,z,c)), \ - (I[663] = (T)(img)(_n8##x,_n5##y,z,c)), \ - (I[695] = (T)(img)(_n8##x,_n6##y,z,c)), \ - (I[727] = (T)(img)(_n8##x,_n7##y,z,c)), \ - (I[759] = (T)(img)(_n8##x,_n8##y,z,c)), \ - (I[791] = (T)(img)(_n8##x,_n9##y,z,c)), \ - (I[823] = (T)(img)(_n8##x,_n10##y,z,c)), \ - (I[855] = (T)(img)(_n8##x,_n11##y,z,c)), \ - (I[887] = (T)(img)(_n8##x,_n12##y,z,c)), \ - (I[919] = (T)(img)(_n8##x,_n13##y,z,c)), \ - (I[951] = (T)(img)(_n8##x,_n14##y,z,c)), \ - (I[983] = (T)(img)(_n8##x,_n15##y,z,c)), \ - (I[1015] = (T)(img)(_n8##x,_n16##y,z,c)), \ - (I[24] = (T)(img)(_n9##x,_p15##y,z,c)), \ - (I[56] = (T)(img)(_n9##x,_p14##y,z,c)), \ - (I[88] = (T)(img)(_n9##x,_p13##y,z,c)), \ - (I[120] = (T)(img)(_n9##x,_p12##y,z,c)), \ - (I[152] = (T)(img)(_n9##x,_p11##y,z,c)), \ - (I[184] = (T)(img)(_n9##x,_p10##y,z,c)), \ - (I[216] = (T)(img)(_n9##x,_p9##y,z,c)), \ - (I[248] = (T)(img)(_n9##x,_p8##y,z,c)), \ - (I[280] = (T)(img)(_n9##x,_p7##y,z,c)), \ - (I[312] = (T)(img)(_n9##x,_p6##y,z,c)), \ - (I[344] = (T)(img)(_n9##x,_p5##y,z,c)), \ - (I[376] = (T)(img)(_n9##x,_p4##y,z,c)), \ - (I[408] = (T)(img)(_n9##x,_p3##y,z,c)), \ - (I[440] = (T)(img)(_n9##x,_p2##y,z,c)), \ - (I[472] = (T)(img)(_n9##x,_p1##y,z,c)), \ - (I[504] = (T)(img)(_n9##x,y,z,c)), \ - (I[536] = (T)(img)(_n9##x,_n1##y,z,c)), \ - (I[568] = (T)(img)(_n9##x,_n2##y,z,c)), \ - (I[600] = (T)(img)(_n9##x,_n3##y,z,c)), \ - (I[632] = (T)(img)(_n9##x,_n4##y,z,c)), \ - (I[664] = (T)(img)(_n9##x,_n5##y,z,c)), \ - (I[696] = (T)(img)(_n9##x,_n6##y,z,c)), \ - (I[728] = (T)(img)(_n9##x,_n7##y,z,c)), \ - (I[760] = (T)(img)(_n9##x,_n8##y,z,c)), \ - (I[792] = (T)(img)(_n9##x,_n9##y,z,c)), \ - (I[824] = (T)(img)(_n9##x,_n10##y,z,c)), \ - (I[856] = (T)(img)(_n9##x,_n11##y,z,c)), \ - (I[888] = (T)(img)(_n9##x,_n12##y,z,c)), \ - (I[920] = (T)(img)(_n9##x,_n13##y,z,c)), \ - (I[952] = (T)(img)(_n9##x,_n14##y,z,c)), \ - (I[984] = (T)(img)(_n9##x,_n15##y,z,c)), \ - (I[1016] = (T)(img)(_n9##x,_n16##y,z,c)), \ - (I[25] = (T)(img)(_n10##x,_p15##y,z,c)), \ - (I[57] = (T)(img)(_n10##x,_p14##y,z,c)), \ - (I[89] = (T)(img)(_n10##x,_p13##y,z,c)), \ - (I[121] = (T)(img)(_n10##x,_p12##y,z,c)), \ - (I[153] = (T)(img)(_n10##x,_p11##y,z,c)), \ - (I[185] = (T)(img)(_n10##x,_p10##y,z,c)), \ - (I[217] = (T)(img)(_n10##x,_p9##y,z,c)), \ - (I[249] = (T)(img)(_n10##x,_p8##y,z,c)), \ - (I[281] = (T)(img)(_n10##x,_p7##y,z,c)), \ - (I[313] = (T)(img)(_n10##x,_p6##y,z,c)), \ - (I[345] = (T)(img)(_n10##x,_p5##y,z,c)), \ - (I[377] = (T)(img)(_n10##x,_p4##y,z,c)), \ - (I[409] = (T)(img)(_n10##x,_p3##y,z,c)), \ - (I[441] = (T)(img)(_n10##x,_p2##y,z,c)), \ - (I[473] = (T)(img)(_n10##x,_p1##y,z,c)), \ - (I[505] = (T)(img)(_n10##x,y,z,c)), \ - (I[537] = (T)(img)(_n10##x,_n1##y,z,c)), \ - (I[569] = (T)(img)(_n10##x,_n2##y,z,c)), \ - (I[601] = (T)(img)(_n10##x,_n3##y,z,c)), \ - (I[633] = (T)(img)(_n10##x,_n4##y,z,c)), \ - (I[665] = (T)(img)(_n10##x,_n5##y,z,c)), \ - (I[697] = (T)(img)(_n10##x,_n6##y,z,c)), \ - (I[729] = (T)(img)(_n10##x,_n7##y,z,c)), \ - (I[761] = (T)(img)(_n10##x,_n8##y,z,c)), \ - (I[793] = (T)(img)(_n10##x,_n9##y,z,c)), \ - (I[825] = (T)(img)(_n10##x,_n10##y,z,c)), \ - (I[857] = (T)(img)(_n10##x,_n11##y,z,c)), \ - (I[889] = (T)(img)(_n10##x,_n12##y,z,c)), \ - (I[921] = (T)(img)(_n10##x,_n13##y,z,c)), \ - (I[953] = (T)(img)(_n10##x,_n14##y,z,c)), \ - (I[985] = (T)(img)(_n10##x,_n15##y,z,c)), \ - (I[1017] = (T)(img)(_n10##x,_n16##y,z,c)), \ - (I[26] = (T)(img)(_n11##x,_p15##y,z,c)), \ - (I[58] = (T)(img)(_n11##x,_p14##y,z,c)), \ - (I[90] = (T)(img)(_n11##x,_p13##y,z,c)), \ - (I[122] = (T)(img)(_n11##x,_p12##y,z,c)), \ - (I[154] = (T)(img)(_n11##x,_p11##y,z,c)), \ - (I[186] = (T)(img)(_n11##x,_p10##y,z,c)), \ - (I[218] = (T)(img)(_n11##x,_p9##y,z,c)), \ - (I[250] = (T)(img)(_n11##x,_p8##y,z,c)), \ - (I[282] = (T)(img)(_n11##x,_p7##y,z,c)), \ - (I[314] = (T)(img)(_n11##x,_p6##y,z,c)), \ - (I[346] = (T)(img)(_n11##x,_p5##y,z,c)), \ - (I[378] = (T)(img)(_n11##x,_p4##y,z,c)), \ - (I[410] = (T)(img)(_n11##x,_p3##y,z,c)), \ - (I[442] = (T)(img)(_n11##x,_p2##y,z,c)), \ - (I[474] = (T)(img)(_n11##x,_p1##y,z,c)), \ - (I[506] = (T)(img)(_n11##x,y,z,c)), \ - (I[538] = (T)(img)(_n11##x,_n1##y,z,c)), \ - (I[570] = (T)(img)(_n11##x,_n2##y,z,c)), \ - (I[602] = (T)(img)(_n11##x,_n3##y,z,c)), \ - (I[634] = (T)(img)(_n11##x,_n4##y,z,c)), \ - (I[666] = (T)(img)(_n11##x,_n5##y,z,c)), \ - (I[698] = (T)(img)(_n11##x,_n6##y,z,c)), \ - (I[730] = (T)(img)(_n11##x,_n7##y,z,c)), \ - (I[762] = (T)(img)(_n11##x,_n8##y,z,c)), \ - (I[794] = (T)(img)(_n11##x,_n9##y,z,c)), \ - (I[826] = (T)(img)(_n11##x,_n10##y,z,c)), \ - (I[858] = (T)(img)(_n11##x,_n11##y,z,c)), \ - (I[890] = (T)(img)(_n11##x,_n12##y,z,c)), \ - (I[922] = (T)(img)(_n11##x,_n13##y,z,c)), \ - (I[954] = (T)(img)(_n11##x,_n14##y,z,c)), \ - (I[986] = (T)(img)(_n11##x,_n15##y,z,c)), \ - (I[1018] = (T)(img)(_n11##x,_n16##y,z,c)), \ - (I[27] = (T)(img)(_n12##x,_p15##y,z,c)), \ - (I[59] = (T)(img)(_n12##x,_p14##y,z,c)), \ - (I[91] = (T)(img)(_n12##x,_p13##y,z,c)), \ - (I[123] = (T)(img)(_n12##x,_p12##y,z,c)), \ - (I[155] = (T)(img)(_n12##x,_p11##y,z,c)), \ - (I[187] = (T)(img)(_n12##x,_p10##y,z,c)), \ - (I[219] = (T)(img)(_n12##x,_p9##y,z,c)), \ - (I[251] = (T)(img)(_n12##x,_p8##y,z,c)), \ - (I[283] = (T)(img)(_n12##x,_p7##y,z,c)), \ - (I[315] = (T)(img)(_n12##x,_p6##y,z,c)), \ - (I[347] = (T)(img)(_n12##x,_p5##y,z,c)), \ - (I[379] = (T)(img)(_n12##x,_p4##y,z,c)), \ - (I[411] = (T)(img)(_n12##x,_p3##y,z,c)), \ - (I[443] = (T)(img)(_n12##x,_p2##y,z,c)), \ - (I[475] = (T)(img)(_n12##x,_p1##y,z,c)), \ - (I[507] = (T)(img)(_n12##x,y,z,c)), \ - (I[539] = (T)(img)(_n12##x,_n1##y,z,c)), \ - (I[571] = (T)(img)(_n12##x,_n2##y,z,c)), \ - (I[603] = (T)(img)(_n12##x,_n3##y,z,c)), \ - (I[635] = (T)(img)(_n12##x,_n4##y,z,c)), \ - (I[667] = (T)(img)(_n12##x,_n5##y,z,c)), \ - (I[699] = (T)(img)(_n12##x,_n6##y,z,c)), \ - (I[731] = (T)(img)(_n12##x,_n7##y,z,c)), \ - (I[763] = (T)(img)(_n12##x,_n8##y,z,c)), \ - (I[795] = (T)(img)(_n12##x,_n9##y,z,c)), \ - (I[827] = (T)(img)(_n12##x,_n10##y,z,c)), \ - (I[859] = (T)(img)(_n12##x,_n11##y,z,c)), \ - (I[891] = (T)(img)(_n12##x,_n12##y,z,c)), \ - (I[923] = (T)(img)(_n12##x,_n13##y,z,c)), \ - (I[955] = (T)(img)(_n12##x,_n14##y,z,c)), \ - (I[987] = (T)(img)(_n12##x,_n15##y,z,c)), \ - (I[1019] = (T)(img)(_n12##x,_n16##y,z,c)), \ - (I[28] = (T)(img)(_n13##x,_p15##y,z,c)), \ - (I[60] = (T)(img)(_n13##x,_p14##y,z,c)), \ - (I[92] = (T)(img)(_n13##x,_p13##y,z,c)), \ - (I[124] = (T)(img)(_n13##x,_p12##y,z,c)), \ - (I[156] = (T)(img)(_n13##x,_p11##y,z,c)), \ - (I[188] = (T)(img)(_n13##x,_p10##y,z,c)), \ - (I[220] = (T)(img)(_n13##x,_p9##y,z,c)), \ - (I[252] = (T)(img)(_n13##x,_p8##y,z,c)), \ - (I[284] = (T)(img)(_n13##x,_p7##y,z,c)), \ - (I[316] = (T)(img)(_n13##x,_p6##y,z,c)), \ - (I[348] = (T)(img)(_n13##x,_p5##y,z,c)), \ - (I[380] = (T)(img)(_n13##x,_p4##y,z,c)), \ - (I[412] = (T)(img)(_n13##x,_p3##y,z,c)), \ - (I[444] = (T)(img)(_n13##x,_p2##y,z,c)), \ - (I[476] = (T)(img)(_n13##x,_p1##y,z,c)), \ - (I[508] = (T)(img)(_n13##x,y,z,c)), \ - (I[540] = (T)(img)(_n13##x,_n1##y,z,c)), \ - (I[572] = (T)(img)(_n13##x,_n2##y,z,c)), \ - (I[604] = (T)(img)(_n13##x,_n3##y,z,c)), \ - (I[636] = (T)(img)(_n13##x,_n4##y,z,c)), \ - (I[668] = (T)(img)(_n13##x,_n5##y,z,c)), \ - (I[700] = (T)(img)(_n13##x,_n6##y,z,c)), \ - (I[732] = (T)(img)(_n13##x,_n7##y,z,c)), \ - (I[764] = (T)(img)(_n13##x,_n8##y,z,c)), \ - (I[796] = (T)(img)(_n13##x,_n9##y,z,c)), \ - (I[828] = (T)(img)(_n13##x,_n10##y,z,c)), \ - (I[860] = (T)(img)(_n13##x,_n11##y,z,c)), \ - (I[892] = (T)(img)(_n13##x,_n12##y,z,c)), \ - (I[924] = (T)(img)(_n13##x,_n13##y,z,c)), \ - (I[956] = (T)(img)(_n13##x,_n14##y,z,c)), \ - (I[988] = (T)(img)(_n13##x,_n15##y,z,c)), \ - (I[1020] = (T)(img)(_n13##x,_n16##y,z,c)), \ - (I[29] = (T)(img)(_n14##x,_p15##y,z,c)), \ - (I[61] = (T)(img)(_n14##x,_p14##y,z,c)), \ - (I[93] = (T)(img)(_n14##x,_p13##y,z,c)), \ - (I[125] = (T)(img)(_n14##x,_p12##y,z,c)), \ - (I[157] = (T)(img)(_n14##x,_p11##y,z,c)), \ - (I[189] = (T)(img)(_n14##x,_p10##y,z,c)), \ - (I[221] = (T)(img)(_n14##x,_p9##y,z,c)), \ - (I[253] = (T)(img)(_n14##x,_p8##y,z,c)), \ - (I[285] = (T)(img)(_n14##x,_p7##y,z,c)), \ - (I[317] = (T)(img)(_n14##x,_p6##y,z,c)), \ - (I[349] = (T)(img)(_n14##x,_p5##y,z,c)), \ - (I[381] = (T)(img)(_n14##x,_p4##y,z,c)), \ - (I[413] = (T)(img)(_n14##x,_p3##y,z,c)), \ - (I[445] = (T)(img)(_n14##x,_p2##y,z,c)), \ - (I[477] = (T)(img)(_n14##x,_p1##y,z,c)), \ - (I[509] = (T)(img)(_n14##x,y,z,c)), \ - (I[541] = (T)(img)(_n14##x,_n1##y,z,c)), \ - (I[573] = (T)(img)(_n14##x,_n2##y,z,c)), \ - (I[605] = (T)(img)(_n14##x,_n3##y,z,c)), \ - (I[637] = (T)(img)(_n14##x,_n4##y,z,c)), \ - (I[669] = (T)(img)(_n14##x,_n5##y,z,c)), \ - (I[701] = (T)(img)(_n14##x,_n6##y,z,c)), \ - (I[733] = (T)(img)(_n14##x,_n7##y,z,c)), \ - (I[765] = (T)(img)(_n14##x,_n8##y,z,c)), \ - (I[797] = (T)(img)(_n14##x,_n9##y,z,c)), \ - (I[829] = (T)(img)(_n14##x,_n10##y,z,c)), \ - (I[861] = (T)(img)(_n14##x,_n11##y,z,c)), \ - (I[893] = (T)(img)(_n14##x,_n12##y,z,c)), \ - (I[925] = (T)(img)(_n14##x,_n13##y,z,c)), \ - (I[957] = (T)(img)(_n14##x,_n14##y,z,c)), \ - (I[989] = (T)(img)(_n14##x,_n15##y,z,c)), \ - (I[1021] = (T)(img)(_n14##x,_n16##y,z,c)), \ - (I[30] = (T)(img)(_n15##x,_p15##y,z,c)), \ - (I[62] = (T)(img)(_n15##x,_p14##y,z,c)), \ - (I[94] = (T)(img)(_n15##x,_p13##y,z,c)), \ - (I[126] = (T)(img)(_n15##x,_p12##y,z,c)), \ - (I[158] = (T)(img)(_n15##x,_p11##y,z,c)), \ - (I[190] = (T)(img)(_n15##x,_p10##y,z,c)), \ - (I[222] = (T)(img)(_n15##x,_p9##y,z,c)), \ - (I[254] = (T)(img)(_n15##x,_p8##y,z,c)), \ - (I[286] = (T)(img)(_n15##x,_p7##y,z,c)), \ - (I[318] = (T)(img)(_n15##x,_p6##y,z,c)), \ - (I[350] = (T)(img)(_n15##x,_p5##y,z,c)), \ - (I[382] = (T)(img)(_n15##x,_p4##y,z,c)), \ - (I[414] = (T)(img)(_n15##x,_p3##y,z,c)), \ - (I[446] = (T)(img)(_n15##x,_p2##y,z,c)), \ - (I[478] = (T)(img)(_n15##x,_p1##y,z,c)), \ - (I[510] = (T)(img)(_n15##x,y,z,c)), \ - (I[542] = (T)(img)(_n15##x,_n1##y,z,c)), \ - (I[574] = (T)(img)(_n15##x,_n2##y,z,c)), \ - (I[606] = (T)(img)(_n15##x,_n3##y,z,c)), \ - (I[638] = (T)(img)(_n15##x,_n4##y,z,c)), \ - (I[670] = (T)(img)(_n15##x,_n5##y,z,c)), \ - (I[702] = (T)(img)(_n15##x,_n6##y,z,c)), \ - (I[734] = (T)(img)(_n15##x,_n7##y,z,c)), \ - (I[766] = (T)(img)(_n15##x,_n8##y,z,c)), \ - (I[798] = (T)(img)(_n15##x,_n9##y,z,c)), \ - (I[830] = (T)(img)(_n15##x,_n10##y,z,c)), \ - (I[862] = (T)(img)(_n15##x,_n11##y,z,c)), \ - (I[894] = (T)(img)(_n15##x,_n12##y,z,c)), \ - (I[926] = (T)(img)(_n15##x,_n13##y,z,c)), \ - (I[958] = (T)(img)(_n15##x,_n14##y,z,c)), \ - (I[990] = (T)(img)(_n15##x,_n15##y,z,c)), \ - (I[1022] = (T)(img)(_n15##x,_n16##y,z,c)), \ - x+16>=(img).width()?(img).width()-1:x+16); \ - x<=(int)(x1) && ((_n16##x<(img).width() && ( \ - (I[31] = (T)(img)(_n16##x,_p15##y,z,c)), \ - (I[63] = (T)(img)(_n16##x,_p14##y,z,c)), \ - (I[95] = (T)(img)(_n16##x,_p13##y,z,c)), \ - (I[127] = (T)(img)(_n16##x,_p12##y,z,c)), \ - (I[159] = (T)(img)(_n16##x,_p11##y,z,c)), \ - (I[191] = (T)(img)(_n16##x,_p10##y,z,c)), \ - (I[223] = (T)(img)(_n16##x,_p9##y,z,c)), \ - (I[255] = (T)(img)(_n16##x,_p8##y,z,c)), \ - (I[287] = (T)(img)(_n16##x,_p7##y,z,c)), \ - (I[319] = (T)(img)(_n16##x,_p6##y,z,c)), \ - (I[351] = (T)(img)(_n16##x,_p5##y,z,c)), \ - (I[383] = (T)(img)(_n16##x,_p4##y,z,c)), \ - (I[415] = (T)(img)(_n16##x,_p3##y,z,c)), \ - (I[447] = (T)(img)(_n16##x,_p2##y,z,c)), \ - (I[479] = (T)(img)(_n16##x,_p1##y,z,c)), \ - (I[511] = (T)(img)(_n16##x,y,z,c)), \ - (I[543] = (T)(img)(_n16##x,_n1##y,z,c)), \ - (I[575] = (T)(img)(_n16##x,_n2##y,z,c)), \ - (I[607] = (T)(img)(_n16##x,_n3##y,z,c)), \ - (I[639] = (T)(img)(_n16##x,_n4##y,z,c)), \ - (I[671] = (T)(img)(_n16##x,_n5##y,z,c)), \ - (I[703] = (T)(img)(_n16##x,_n6##y,z,c)), \ - (I[735] = (T)(img)(_n16##x,_n7##y,z,c)), \ - (I[767] = (T)(img)(_n16##x,_n8##y,z,c)), \ - (I[799] = (T)(img)(_n16##x,_n9##y,z,c)), \ - (I[831] = (T)(img)(_n16##x,_n10##y,z,c)), \ - (I[863] = (T)(img)(_n16##x,_n11##y,z,c)), \ - (I[895] = (T)(img)(_n16##x,_n12##y,z,c)), \ - (I[927] = (T)(img)(_n16##x,_n13##y,z,c)), \ - (I[959] = (T)(img)(_n16##x,_n14##y,z,c)), \ - (I[991] = (T)(img)(_n16##x,_n15##y,z,c)), \ - (I[1023] = (T)(img)(_n16##x,_n16##y,z,c)),1)) || \ - _n15##x==--_n16##x || _n14##x==--_n15##x || _n13##x==--_n14##x || _n12##x==--_n13##x || _n11##x==--_n12##x || _n10##x==--_n11##x || _n9##x==--_n10##x || _n8##x==--_n9##x || _n7##x==--_n8##x || _n6##x==--_n7##x || _n5##x==--_n6##x || _n4##x==--_n5##x || _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n16##x = _n15##x = _n14##x = _n13##x = _n12##x = _n11##x = _n10##x = _n9##x = _n8##x = _n7##x = _n6##x = _n5##x = _n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], I[167] = I[168], I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], I[279] = I[280], I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], I[335] = I[336], I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], I[343] = I[344], I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], I[359] = I[360], I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], I[367] = I[368], I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], I[375] = I[376], I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], I[391] = I[392], I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], I[399] = I[400], I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], I[407] = I[408], I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], I[423] = I[424], I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], I[431] = I[432], I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], I[439] = I[440], I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], I[455] = I[456], I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], I[463] = I[464], I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], I[471] = I[472], I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], I[487] = I[488], I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], I[495] = I[496], I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], I[503] = I[504], I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], \ - I[512] = I[513], I[513] = I[514], I[514] = I[515], I[515] = I[516], I[516] = I[517], I[517] = I[518], I[518] = I[519], I[519] = I[520], I[520] = I[521], I[521] = I[522], I[522] = I[523], I[523] = I[524], I[524] = I[525], I[525] = I[526], I[526] = I[527], I[527] = I[528], I[528] = I[529], I[529] = I[530], I[530] = I[531], I[531] = I[532], I[532] = I[533], I[533] = I[534], I[534] = I[535], I[535] = I[536], I[536] = I[537], I[537] = I[538], I[538] = I[539], I[539] = I[540], I[540] = I[541], I[541] = I[542], I[542] = I[543], \ - I[544] = I[545], I[545] = I[546], I[546] = I[547], I[547] = I[548], I[548] = I[549], I[549] = I[550], I[550] = I[551], I[551] = I[552], I[552] = I[553], I[553] = I[554], I[554] = I[555], I[555] = I[556], I[556] = I[557], I[557] = I[558], I[558] = I[559], I[559] = I[560], I[560] = I[561], I[561] = I[562], I[562] = I[563], I[563] = I[564], I[564] = I[565], I[565] = I[566], I[566] = I[567], I[567] = I[568], I[568] = I[569], I[569] = I[570], I[570] = I[571], I[571] = I[572], I[572] = I[573], I[573] = I[574], I[574] = I[575], \ - I[576] = I[577], I[577] = I[578], I[578] = I[579], I[579] = I[580], I[580] = I[581], I[581] = I[582], I[582] = I[583], I[583] = I[584], I[584] = I[585], I[585] = I[586], I[586] = I[587], I[587] = I[588], I[588] = I[589], I[589] = I[590], I[590] = I[591], I[591] = I[592], I[592] = I[593], I[593] = I[594], I[594] = I[595], I[595] = I[596], I[596] = I[597], I[597] = I[598], I[598] = I[599], I[599] = I[600], I[600] = I[601], I[601] = I[602], I[602] = I[603], I[603] = I[604], I[604] = I[605], I[605] = I[606], I[606] = I[607], \ - I[608] = I[609], I[609] = I[610], I[610] = I[611], I[611] = I[612], I[612] = I[613], I[613] = I[614], I[614] = I[615], I[615] = I[616], I[616] = I[617], I[617] = I[618], I[618] = I[619], I[619] = I[620], I[620] = I[621], I[621] = I[622], I[622] = I[623], I[623] = I[624], I[624] = I[625], I[625] = I[626], I[626] = I[627], I[627] = I[628], I[628] = I[629], I[629] = I[630], I[630] = I[631], I[631] = I[632], I[632] = I[633], I[633] = I[634], I[634] = I[635], I[635] = I[636], I[636] = I[637], I[637] = I[638], I[638] = I[639], \ - I[640] = I[641], I[641] = I[642], I[642] = I[643], I[643] = I[644], I[644] = I[645], I[645] = I[646], I[646] = I[647], I[647] = I[648], I[648] = I[649], I[649] = I[650], I[650] = I[651], I[651] = I[652], I[652] = I[653], I[653] = I[654], I[654] = I[655], I[655] = I[656], I[656] = I[657], I[657] = I[658], I[658] = I[659], I[659] = I[660], I[660] = I[661], I[661] = I[662], I[662] = I[663], I[663] = I[664], I[664] = I[665], I[665] = I[666], I[666] = I[667], I[667] = I[668], I[668] = I[669], I[669] = I[670], I[670] = I[671], \ - I[672] = I[673], I[673] = I[674], I[674] = I[675], I[675] = I[676], I[676] = I[677], I[677] = I[678], I[678] = I[679], I[679] = I[680], I[680] = I[681], I[681] = I[682], I[682] = I[683], I[683] = I[684], I[684] = I[685], I[685] = I[686], I[686] = I[687], I[687] = I[688], I[688] = I[689], I[689] = I[690], I[690] = I[691], I[691] = I[692], I[692] = I[693], I[693] = I[694], I[694] = I[695], I[695] = I[696], I[696] = I[697], I[697] = I[698], I[698] = I[699], I[699] = I[700], I[700] = I[701], I[701] = I[702], I[702] = I[703], \ - I[704] = I[705], I[705] = I[706], I[706] = I[707], I[707] = I[708], I[708] = I[709], I[709] = I[710], I[710] = I[711], I[711] = I[712], I[712] = I[713], I[713] = I[714], I[714] = I[715], I[715] = I[716], I[716] = I[717], I[717] = I[718], I[718] = I[719], I[719] = I[720], I[720] = I[721], I[721] = I[722], I[722] = I[723], I[723] = I[724], I[724] = I[725], I[725] = I[726], I[726] = I[727], I[727] = I[728], I[728] = I[729], I[729] = I[730], I[730] = I[731], I[731] = I[732], I[732] = I[733], I[733] = I[734], I[734] = I[735], \ - I[736] = I[737], I[737] = I[738], I[738] = I[739], I[739] = I[740], I[740] = I[741], I[741] = I[742], I[742] = I[743], I[743] = I[744], I[744] = I[745], I[745] = I[746], I[746] = I[747], I[747] = I[748], I[748] = I[749], I[749] = I[750], I[750] = I[751], I[751] = I[752], I[752] = I[753], I[753] = I[754], I[754] = I[755], I[755] = I[756], I[756] = I[757], I[757] = I[758], I[758] = I[759], I[759] = I[760], I[760] = I[761], I[761] = I[762], I[762] = I[763], I[763] = I[764], I[764] = I[765], I[765] = I[766], I[766] = I[767], \ - I[768] = I[769], I[769] = I[770], I[770] = I[771], I[771] = I[772], I[772] = I[773], I[773] = I[774], I[774] = I[775], I[775] = I[776], I[776] = I[777], I[777] = I[778], I[778] = I[779], I[779] = I[780], I[780] = I[781], I[781] = I[782], I[782] = I[783], I[783] = I[784], I[784] = I[785], I[785] = I[786], I[786] = I[787], I[787] = I[788], I[788] = I[789], I[789] = I[790], I[790] = I[791], I[791] = I[792], I[792] = I[793], I[793] = I[794], I[794] = I[795], I[795] = I[796], I[796] = I[797], I[797] = I[798], I[798] = I[799], \ - I[800] = I[801], I[801] = I[802], I[802] = I[803], I[803] = I[804], I[804] = I[805], I[805] = I[806], I[806] = I[807], I[807] = I[808], I[808] = I[809], I[809] = I[810], I[810] = I[811], I[811] = I[812], I[812] = I[813], I[813] = I[814], I[814] = I[815], I[815] = I[816], I[816] = I[817], I[817] = I[818], I[818] = I[819], I[819] = I[820], I[820] = I[821], I[821] = I[822], I[822] = I[823], I[823] = I[824], I[824] = I[825], I[825] = I[826], I[826] = I[827], I[827] = I[828], I[828] = I[829], I[829] = I[830], I[830] = I[831], \ - I[832] = I[833], I[833] = I[834], I[834] = I[835], I[835] = I[836], I[836] = I[837], I[837] = I[838], I[838] = I[839], I[839] = I[840], I[840] = I[841], I[841] = I[842], I[842] = I[843], I[843] = I[844], I[844] = I[845], I[845] = I[846], I[846] = I[847], I[847] = I[848], I[848] = I[849], I[849] = I[850], I[850] = I[851], I[851] = I[852], I[852] = I[853], I[853] = I[854], I[854] = I[855], I[855] = I[856], I[856] = I[857], I[857] = I[858], I[858] = I[859], I[859] = I[860], I[860] = I[861], I[861] = I[862], I[862] = I[863], \ - I[864] = I[865], I[865] = I[866], I[866] = I[867], I[867] = I[868], I[868] = I[869], I[869] = I[870], I[870] = I[871], I[871] = I[872], I[872] = I[873], I[873] = I[874], I[874] = I[875], I[875] = I[876], I[876] = I[877], I[877] = I[878], I[878] = I[879], I[879] = I[880], I[880] = I[881], I[881] = I[882], I[882] = I[883], I[883] = I[884], I[884] = I[885], I[885] = I[886], I[886] = I[887], I[887] = I[888], I[888] = I[889], I[889] = I[890], I[890] = I[891], I[891] = I[892], I[892] = I[893], I[893] = I[894], I[894] = I[895], \ - I[896] = I[897], I[897] = I[898], I[898] = I[899], I[899] = I[900], I[900] = I[901], I[901] = I[902], I[902] = I[903], I[903] = I[904], I[904] = I[905], I[905] = I[906], I[906] = I[907], I[907] = I[908], I[908] = I[909], I[909] = I[910], I[910] = I[911], I[911] = I[912], I[912] = I[913], I[913] = I[914], I[914] = I[915], I[915] = I[916], I[916] = I[917], I[917] = I[918], I[918] = I[919], I[919] = I[920], I[920] = I[921], I[921] = I[922], I[922] = I[923], I[923] = I[924], I[924] = I[925], I[925] = I[926], I[926] = I[927], \ - I[928] = I[929], I[929] = I[930], I[930] = I[931], I[931] = I[932], I[932] = I[933], I[933] = I[934], I[934] = I[935], I[935] = I[936], I[936] = I[937], I[937] = I[938], I[938] = I[939], I[939] = I[940], I[940] = I[941], I[941] = I[942], I[942] = I[943], I[943] = I[944], I[944] = I[945], I[945] = I[946], I[946] = I[947], I[947] = I[948], I[948] = I[949], I[949] = I[950], I[950] = I[951], I[951] = I[952], I[952] = I[953], I[953] = I[954], I[954] = I[955], I[955] = I[956], I[956] = I[957], I[957] = I[958], I[958] = I[959], \ - I[960] = I[961], I[961] = I[962], I[962] = I[963], I[963] = I[964], I[964] = I[965], I[965] = I[966], I[966] = I[967], I[967] = I[968], I[968] = I[969], I[969] = I[970], I[970] = I[971], I[971] = I[972], I[972] = I[973], I[973] = I[974], I[974] = I[975], I[975] = I[976], I[976] = I[977], I[977] = I[978], I[978] = I[979], I[979] = I[980], I[980] = I[981], I[981] = I[982], I[982] = I[983], I[983] = I[984], I[984] = I[985], I[985] = I[986], I[986] = I[987], I[987] = I[988], I[988] = I[989], I[989] = I[990], I[990] = I[991], \ - I[992] = I[993], I[993] = I[994], I[994] = I[995], I[995] = I[996], I[996] = I[997], I[997] = I[998], I[998] = I[999], I[999] = I[1000], I[1000] = I[1001], I[1001] = I[1002], I[1002] = I[1003], I[1003] = I[1004], I[1004] = I[1005], I[1005] = I[1006], I[1006] = I[1007], I[1007] = I[1008], I[1008] = I[1009], I[1009] = I[1010], I[1010] = I[1011], I[1011] = I[1012], I[1012] = I[1013], I[1013] = I[1014], I[1014] = I[1015], I[1015] = I[1016], I[1016] = I[1017], I[1017] = I[1018], I[1018] = I[1019], I[1019] = I[1020], I[1020] = I[1021], I[1021] = I[1022], I[1022] = I[1023], \ - _p15##x = _p14##x, _p14##x = _p13##x, _p13##x = _p12##x, _p12##x = _p11##x, _p11##x = _p10##x, _p10##x = _p9##x, _p9##x = _p8##x, _p8##x = _p7##x, _p7##x = _p6##x, _p6##x = _p5##x, _p5##x = _p4##x, _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x, ++_n5##x, ++_n6##x, ++_n7##x, ++_n8##x, ++_n9##x, ++_n10##x, ++_n11##x, ++_n12##x, ++_n13##x, ++_n14##x, ++_n15##x, ++_n16##x) - -#define cimg_get32x32(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p15##x,_p15##y,z,c), I[1] = (T)(img)(_p14##x,_p15##y,z,c), I[2] = (T)(img)(_p13##x,_p15##y,z,c), I[3] = (T)(img)(_p12##x,_p15##y,z,c), I[4] = (T)(img)(_p11##x,_p15##y,z,c), I[5] = (T)(img)(_p10##x,_p15##y,z,c), I[6] = (T)(img)(_p9##x,_p15##y,z,c), I[7] = (T)(img)(_p8##x,_p15##y,z,c), I[8] = (T)(img)(_p7##x,_p15##y,z,c), I[9] = (T)(img)(_p6##x,_p15##y,z,c), I[10] = (T)(img)(_p5##x,_p15##y,z,c), I[11] = (T)(img)(_p4##x,_p15##y,z,c), I[12] = (T)(img)(_p3##x,_p15##y,z,c), I[13] = (T)(img)(_p2##x,_p15##y,z,c), I[14] = (T)(img)(_p1##x,_p15##y,z,c), I[15] = (T)(img)(x,_p15##y,z,c), I[16] = (T)(img)(_n1##x,_p15##y,z,c), I[17] = (T)(img)(_n2##x,_p15##y,z,c), I[18] = (T)(img)(_n3##x,_p15##y,z,c), I[19] = (T)(img)(_n4##x,_p15##y,z,c), I[20] = (T)(img)(_n5##x,_p15##y,z,c), I[21] = (T)(img)(_n6##x,_p15##y,z,c), I[22] = (T)(img)(_n7##x,_p15##y,z,c), I[23] = (T)(img)(_n8##x,_p15##y,z,c), I[24] = (T)(img)(_n9##x,_p15##y,z,c), I[25] = (T)(img)(_n10##x,_p15##y,z,c), I[26] = (T)(img)(_n11##x,_p15##y,z,c), I[27] = (T)(img)(_n12##x,_p15##y,z,c), I[28] = (T)(img)(_n13##x,_p15##y,z,c), I[29] = (T)(img)(_n14##x,_p15##y,z,c), I[30] = (T)(img)(_n15##x,_p15##y,z,c), I[31] = (T)(img)(_n16##x,_p15##y,z,c), \ - I[32] = (T)(img)(_p15##x,_p14##y,z,c), I[33] = (T)(img)(_p14##x,_p14##y,z,c), I[34] = (T)(img)(_p13##x,_p14##y,z,c), I[35] = (T)(img)(_p12##x,_p14##y,z,c), I[36] = (T)(img)(_p11##x,_p14##y,z,c), I[37] = (T)(img)(_p10##x,_p14##y,z,c), I[38] = (T)(img)(_p9##x,_p14##y,z,c), I[39] = (T)(img)(_p8##x,_p14##y,z,c), I[40] = (T)(img)(_p7##x,_p14##y,z,c), I[41] = (T)(img)(_p6##x,_p14##y,z,c), I[42] = (T)(img)(_p5##x,_p14##y,z,c), I[43] = (T)(img)(_p4##x,_p14##y,z,c), I[44] = (T)(img)(_p3##x,_p14##y,z,c), I[45] = (T)(img)(_p2##x,_p14##y,z,c), I[46] = (T)(img)(_p1##x,_p14##y,z,c), I[47] = (T)(img)(x,_p14##y,z,c), I[48] = (T)(img)(_n1##x,_p14##y,z,c), I[49] = (T)(img)(_n2##x,_p14##y,z,c), I[50] = (T)(img)(_n3##x,_p14##y,z,c), I[51] = (T)(img)(_n4##x,_p14##y,z,c), I[52] = (T)(img)(_n5##x,_p14##y,z,c), I[53] = (T)(img)(_n6##x,_p14##y,z,c), I[54] = (T)(img)(_n7##x,_p14##y,z,c), I[55] = (T)(img)(_n8##x,_p14##y,z,c), I[56] = (T)(img)(_n9##x,_p14##y,z,c), I[57] = (T)(img)(_n10##x,_p14##y,z,c), I[58] = (T)(img)(_n11##x,_p14##y,z,c), I[59] = (T)(img)(_n12##x,_p14##y,z,c), I[60] = (T)(img)(_n13##x,_p14##y,z,c), I[61] = (T)(img)(_n14##x,_p14##y,z,c), I[62] = (T)(img)(_n15##x,_p14##y,z,c), I[63] = (T)(img)(_n16##x,_p14##y,z,c), \ - I[64] = (T)(img)(_p15##x,_p13##y,z,c), I[65] = (T)(img)(_p14##x,_p13##y,z,c), I[66] = (T)(img)(_p13##x,_p13##y,z,c), I[67] = (T)(img)(_p12##x,_p13##y,z,c), I[68] = (T)(img)(_p11##x,_p13##y,z,c), I[69] = (T)(img)(_p10##x,_p13##y,z,c), I[70] = (T)(img)(_p9##x,_p13##y,z,c), I[71] = (T)(img)(_p8##x,_p13##y,z,c), I[72] = (T)(img)(_p7##x,_p13##y,z,c), I[73] = (T)(img)(_p6##x,_p13##y,z,c), I[74] = (T)(img)(_p5##x,_p13##y,z,c), I[75] = (T)(img)(_p4##x,_p13##y,z,c), I[76] = (T)(img)(_p3##x,_p13##y,z,c), I[77] = (T)(img)(_p2##x,_p13##y,z,c), I[78] = (T)(img)(_p1##x,_p13##y,z,c), I[79] = (T)(img)(x,_p13##y,z,c), I[80] = (T)(img)(_n1##x,_p13##y,z,c), I[81] = (T)(img)(_n2##x,_p13##y,z,c), I[82] = (T)(img)(_n3##x,_p13##y,z,c), I[83] = (T)(img)(_n4##x,_p13##y,z,c), I[84] = (T)(img)(_n5##x,_p13##y,z,c), I[85] = (T)(img)(_n6##x,_p13##y,z,c), I[86] = (T)(img)(_n7##x,_p13##y,z,c), I[87] = (T)(img)(_n8##x,_p13##y,z,c), I[88] = (T)(img)(_n9##x,_p13##y,z,c), I[89] = (T)(img)(_n10##x,_p13##y,z,c), I[90] = (T)(img)(_n11##x,_p13##y,z,c), I[91] = (T)(img)(_n12##x,_p13##y,z,c), I[92] = (T)(img)(_n13##x,_p13##y,z,c), I[93] = (T)(img)(_n14##x,_p13##y,z,c), I[94] = (T)(img)(_n15##x,_p13##y,z,c), I[95] = (T)(img)(_n16##x,_p13##y,z,c), \ - I[96] = (T)(img)(_p15##x,_p12##y,z,c), I[97] = (T)(img)(_p14##x,_p12##y,z,c), I[98] = (T)(img)(_p13##x,_p12##y,z,c), I[99] = (T)(img)(_p12##x,_p12##y,z,c), I[100] = (T)(img)(_p11##x,_p12##y,z,c), I[101] = (T)(img)(_p10##x,_p12##y,z,c), I[102] = (T)(img)(_p9##x,_p12##y,z,c), I[103] = (T)(img)(_p8##x,_p12##y,z,c), I[104] = (T)(img)(_p7##x,_p12##y,z,c), I[105] = (T)(img)(_p6##x,_p12##y,z,c), I[106] = (T)(img)(_p5##x,_p12##y,z,c), I[107] = (T)(img)(_p4##x,_p12##y,z,c), I[108] = (T)(img)(_p3##x,_p12##y,z,c), I[109] = (T)(img)(_p2##x,_p12##y,z,c), I[110] = (T)(img)(_p1##x,_p12##y,z,c), I[111] = (T)(img)(x,_p12##y,z,c), I[112] = (T)(img)(_n1##x,_p12##y,z,c), I[113] = (T)(img)(_n2##x,_p12##y,z,c), I[114] = (T)(img)(_n3##x,_p12##y,z,c), I[115] = (T)(img)(_n4##x,_p12##y,z,c), I[116] = (T)(img)(_n5##x,_p12##y,z,c), I[117] = (T)(img)(_n6##x,_p12##y,z,c), I[118] = (T)(img)(_n7##x,_p12##y,z,c), I[119] = (T)(img)(_n8##x,_p12##y,z,c), I[120] = (T)(img)(_n9##x,_p12##y,z,c), I[121] = (T)(img)(_n10##x,_p12##y,z,c), I[122] = (T)(img)(_n11##x,_p12##y,z,c), I[123] = (T)(img)(_n12##x,_p12##y,z,c), I[124] = (T)(img)(_n13##x,_p12##y,z,c), I[125] = (T)(img)(_n14##x,_p12##y,z,c), I[126] = (T)(img)(_n15##x,_p12##y,z,c), I[127] = (T)(img)(_n16##x,_p12##y,z,c), \ - I[128] = (T)(img)(_p15##x,_p11##y,z,c), I[129] = (T)(img)(_p14##x,_p11##y,z,c), I[130] = (T)(img)(_p13##x,_p11##y,z,c), I[131] = (T)(img)(_p12##x,_p11##y,z,c), I[132] = (T)(img)(_p11##x,_p11##y,z,c), I[133] = (T)(img)(_p10##x,_p11##y,z,c), I[134] = (T)(img)(_p9##x,_p11##y,z,c), I[135] = (T)(img)(_p8##x,_p11##y,z,c), I[136] = (T)(img)(_p7##x,_p11##y,z,c), I[137] = (T)(img)(_p6##x,_p11##y,z,c), I[138] = (T)(img)(_p5##x,_p11##y,z,c), I[139] = (T)(img)(_p4##x,_p11##y,z,c), I[140] = (T)(img)(_p3##x,_p11##y,z,c), I[141] = (T)(img)(_p2##x,_p11##y,z,c), I[142] = (T)(img)(_p1##x,_p11##y,z,c), I[143] = (T)(img)(x,_p11##y,z,c), I[144] = (T)(img)(_n1##x,_p11##y,z,c), I[145] = (T)(img)(_n2##x,_p11##y,z,c), I[146] = (T)(img)(_n3##x,_p11##y,z,c), I[147] = (T)(img)(_n4##x,_p11##y,z,c), I[148] = (T)(img)(_n5##x,_p11##y,z,c), I[149] = (T)(img)(_n6##x,_p11##y,z,c), I[150] = (T)(img)(_n7##x,_p11##y,z,c), I[151] = (T)(img)(_n8##x,_p11##y,z,c), I[152] = (T)(img)(_n9##x,_p11##y,z,c), I[153] = (T)(img)(_n10##x,_p11##y,z,c), I[154] = (T)(img)(_n11##x,_p11##y,z,c), I[155] = (T)(img)(_n12##x,_p11##y,z,c), I[156] = (T)(img)(_n13##x,_p11##y,z,c), I[157] = (T)(img)(_n14##x,_p11##y,z,c), I[158] = (T)(img)(_n15##x,_p11##y,z,c), I[159] = (T)(img)(_n16##x,_p11##y,z,c), \ - I[160] = (T)(img)(_p15##x,_p10##y,z,c), I[161] = (T)(img)(_p14##x,_p10##y,z,c), I[162] = (T)(img)(_p13##x,_p10##y,z,c), I[163] = (T)(img)(_p12##x,_p10##y,z,c), I[164] = (T)(img)(_p11##x,_p10##y,z,c), I[165] = (T)(img)(_p10##x,_p10##y,z,c), I[166] = (T)(img)(_p9##x,_p10##y,z,c), I[167] = (T)(img)(_p8##x,_p10##y,z,c), I[168] = (T)(img)(_p7##x,_p10##y,z,c), I[169] = (T)(img)(_p6##x,_p10##y,z,c), I[170] = (T)(img)(_p5##x,_p10##y,z,c), I[171] = (T)(img)(_p4##x,_p10##y,z,c), I[172] = (T)(img)(_p3##x,_p10##y,z,c), I[173] = (T)(img)(_p2##x,_p10##y,z,c), I[174] = (T)(img)(_p1##x,_p10##y,z,c), I[175] = (T)(img)(x,_p10##y,z,c), I[176] = (T)(img)(_n1##x,_p10##y,z,c), I[177] = (T)(img)(_n2##x,_p10##y,z,c), I[178] = (T)(img)(_n3##x,_p10##y,z,c), I[179] = (T)(img)(_n4##x,_p10##y,z,c), I[180] = (T)(img)(_n5##x,_p10##y,z,c), I[181] = (T)(img)(_n6##x,_p10##y,z,c), I[182] = (T)(img)(_n7##x,_p10##y,z,c), I[183] = (T)(img)(_n8##x,_p10##y,z,c), I[184] = (T)(img)(_n9##x,_p10##y,z,c), I[185] = (T)(img)(_n10##x,_p10##y,z,c), I[186] = (T)(img)(_n11##x,_p10##y,z,c), I[187] = (T)(img)(_n12##x,_p10##y,z,c), I[188] = (T)(img)(_n13##x,_p10##y,z,c), I[189] = (T)(img)(_n14##x,_p10##y,z,c), I[190] = (T)(img)(_n15##x,_p10##y,z,c), I[191] = (T)(img)(_n16##x,_p10##y,z,c), \ - I[192] = (T)(img)(_p15##x,_p9##y,z,c), I[193] = (T)(img)(_p14##x,_p9##y,z,c), I[194] = (T)(img)(_p13##x,_p9##y,z,c), I[195] = (T)(img)(_p12##x,_p9##y,z,c), I[196] = (T)(img)(_p11##x,_p9##y,z,c), I[197] = (T)(img)(_p10##x,_p9##y,z,c), I[198] = (T)(img)(_p9##x,_p9##y,z,c), I[199] = (T)(img)(_p8##x,_p9##y,z,c), I[200] = (T)(img)(_p7##x,_p9##y,z,c), I[201] = (T)(img)(_p6##x,_p9##y,z,c), I[202] = (T)(img)(_p5##x,_p9##y,z,c), I[203] = (T)(img)(_p4##x,_p9##y,z,c), I[204] = (T)(img)(_p3##x,_p9##y,z,c), I[205] = (T)(img)(_p2##x,_p9##y,z,c), I[206] = (T)(img)(_p1##x,_p9##y,z,c), I[207] = (T)(img)(x,_p9##y,z,c), I[208] = (T)(img)(_n1##x,_p9##y,z,c), I[209] = (T)(img)(_n2##x,_p9##y,z,c), I[210] = (T)(img)(_n3##x,_p9##y,z,c), I[211] = (T)(img)(_n4##x,_p9##y,z,c), I[212] = (T)(img)(_n5##x,_p9##y,z,c), I[213] = (T)(img)(_n6##x,_p9##y,z,c), I[214] = (T)(img)(_n7##x,_p9##y,z,c), I[215] = (T)(img)(_n8##x,_p9##y,z,c), I[216] = (T)(img)(_n9##x,_p9##y,z,c), I[217] = (T)(img)(_n10##x,_p9##y,z,c), I[218] = (T)(img)(_n11##x,_p9##y,z,c), I[219] = (T)(img)(_n12##x,_p9##y,z,c), I[220] = (T)(img)(_n13##x,_p9##y,z,c), I[221] = (T)(img)(_n14##x,_p9##y,z,c), I[222] = (T)(img)(_n15##x,_p9##y,z,c), I[223] = (T)(img)(_n16##x,_p9##y,z,c), \ - I[224] = (T)(img)(_p15##x,_p8##y,z,c), I[225] = (T)(img)(_p14##x,_p8##y,z,c), I[226] = (T)(img)(_p13##x,_p8##y,z,c), I[227] = (T)(img)(_p12##x,_p8##y,z,c), I[228] = (T)(img)(_p11##x,_p8##y,z,c), I[229] = (T)(img)(_p10##x,_p8##y,z,c), I[230] = (T)(img)(_p9##x,_p8##y,z,c), I[231] = (T)(img)(_p8##x,_p8##y,z,c), I[232] = (T)(img)(_p7##x,_p8##y,z,c), I[233] = (T)(img)(_p6##x,_p8##y,z,c), I[234] = (T)(img)(_p5##x,_p8##y,z,c), I[235] = (T)(img)(_p4##x,_p8##y,z,c), I[236] = (T)(img)(_p3##x,_p8##y,z,c), I[237] = (T)(img)(_p2##x,_p8##y,z,c), I[238] = (T)(img)(_p1##x,_p8##y,z,c), I[239] = (T)(img)(x,_p8##y,z,c), I[240] = (T)(img)(_n1##x,_p8##y,z,c), I[241] = (T)(img)(_n2##x,_p8##y,z,c), I[242] = (T)(img)(_n3##x,_p8##y,z,c), I[243] = (T)(img)(_n4##x,_p8##y,z,c), I[244] = (T)(img)(_n5##x,_p8##y,z,c), I[245] = (T)(img)(_n6##x,_p8##y,z,c), I[246] = (T)(img)(_n7##x,_p8##y,z,c), I[247] = (T)(img)(_n8##x,_p8##y,z,c), I[248] = (T)(img)(_n9##x,_p8##y,z,c), I[249] = (T)(img)(_n10##x,_p8##y,z,c), I[250] = (T)(img)(_n11##x,_p8##y,z,c), I[251] = (T)(img)(_n12##x,_p8##y,z,c), I[252] = (T)(img)(_n13##x,_p8##y,z,c), I[253] = (T)(img)(_n14##x,_p8##y,z,c), I[254] = (T)(img)(_n15##x,_p8##y,z,c), I[255] = (T)(img)(_n16##x,_p8##y,z,c), \ - I[256] = (T)(img)(_p15##x,_p7##y,z,c), I[257] = (T)(img)(_p14##x,_p7##y,z,c), I[258] = (T)(img)(_p13##x,_p7##y,z,c), I[259] = (T)(img)(_p12##x,_p7##y,z,c), I[260] = (T)(img)(_p11##x,_p7##y,z,c), I[261] = (T)(img)(_p10##x,_p7##y,z,c), I[262] = (T)(img)(_p9##x,_p7##y,z,c), I[263] = (T)(img)(_p8##x,_p7##y,z,c), I[264] = (T)(img)(_p7##x,_p7##y,z,c), I[265] = (T)(img)(_p6##x,_p7##y,z,c), I[266] = (T)(img)(_p5##x,_p7##y,z,c), I[267] = (T)(img)(_p4##x,_p7##y,z,c), I[268] = (T)(img)(_p3##x,_p7##y,z,c), I[269] = (T)(img)(_p2##x,_p7##y,z,c), I[270] = (T)(img)(_p1##x,_p7##y,z,c), I[271] = (T)(img)(x,_p7##y,z,c), I[272] = (T)(img)(_n1##x,_p7##y,z,c), I[273] = (T)(img)(_n2##x,_p7##y,z,c), I[274] = (T)(img)(_n3##x,_p7##y,z,c), I[275] = (T)(img)(_n4##x,_p7##y,z,c), I[276] = (T)(img)(_n5##x,_p7##y,z,c), I[277] = (T)(img)(_n6##x,_p7##y,z,c), I[278] = (T)(img)(_n7##x,_p7##y,z,c), I[279] = (T)(img)(_n8##x,_p7##y,z,c), I[280] = (T)(img)(_n9##x,_p7##y,z,c), I[281] = (T)(img)(_n10##x,_p7##y,z,c), I[282] = (T)(img)(_n11##x,_p7##y,z,c), I[283] = (T)(img)(_n12##x,_p7##y,z,c), I[284] = (T)(img)(_n13##x,_p7##y,z,c), I[285] = (T)(img)(_n14##x,_p7##y,z,c), I[286] = (T)(img)(_n15##x,_p7##y,z,c), I[287] = (T)(img)(_n16##x,_p7##y,z,c), \ - I[288] = (T)(img)(_p15##x,_p6##y,z,c), I[289] = (T)(img)(_p14##x,_p6##y,z,c), I[290] = (T)(img)(_p13##x,_p6##y,z,c), I[291] = (T)(img)(_p12##x,_p6##y,z,c), I[292] = (T)(img)(_p11##x,_p6##y,z,c), I[293] = (T)(img)(_p10##x,_p6##y,z,c), I[294] = (T)(img)(_p9##x,_p6##y,z,c), I[295] = (T)(img)(_p8##x,_p6##y,z,c), I[296] = (T)(img)(_p7##x,_p6##y,z,c), I[297] = (T)(img)(_p6##x,_p6##y,z,c), I[298] = (T)(img)(_p5##x,_p6##y,z,c), I[299] = (T)(img)(_p4##x,_p6##y,z,c), I[300] = (T)(img)(_p3##x,_p6##y,z,c), I[301] = (T)(img)(_p2##x,_p6##y,z,c), I[302] = (T)(img)(_p1##x,_p6##y,z,c), I[303] = (T)(img)(x,_p6##y,z,c), I[304] = (T)(img)(_n1##x,_p6##y,z,c), I[305] = (T)(img)(_n2##x,_p6##y,z,c), I[306] = (T)(img)(_n3##x,_p6##y,z,c), I[307] = (T)(img)(_n4##x,_p6##y,z,c), I[308] = (T)(img)(_n5##x,_p6##y,z,c), I[309] = (T)(img)(_n6##x,_p6##y,z,c), I[310] = (T)(img)(_n7##x,_p6##y,z,c), I[311] = (T)(img)(_n8##x,_p6##y,z,c), I[312] = (T)(img)(_n9##x,_p6##y,z,c), I[313] = (T)(img)(_n10##x,_p6##y,z,c), I[314] = (T)(img)(_n11##x,_p6##y,z,c), I[315] = (T)(img)(_n12##x,_p6##y,z,c), I[316] = (T)(img)(_n13##x,_p6##y,z,c), I[317] = (T)(img)(_n14##x,_p6##y,z,c), I[318] = (T)(img)(_n15##x,_p6##y,z,c), I[319] = (T)(img)(_n16##x,_p6##y,z,c), \ - I[320] = (T)(img)(_p15##x,_p5##y,z,c), I[321] = (T)(img)(_p14##x,_p5##y,z,c), I[322] = (T)(img)(_p13##x,_p5##y,z,c), I[323] = (T)(img)(_p12##x,_p5##y,z,c), I[324] = (T)(img)(_p11##x,_p5##y,z,c), I[325] = (T)(img)(_p10##x,_p5##y,z,c), I[326] = (T)(img)(_p9##x,_p5##y,z,c), I[327] = (T)(img)(_p8##x,_p5##y,z,c), I[328] = (T)(img)(_p7##x,_p5##y,z,c), I[329] = (T)(img)(_p6##x,_p5##y,z,c), I[330] = (T)(img)(_p5##x,_p5##y,z,c), I[331] = (T)(img)(_p4##x,_p5##y,z,c), I[332] = (T)(img)(_p3##x,_p5##y,z,c), I[333] = (T)(img)(_p2##x,_p5##y,z,c), I[334] = (T)(img)(_p1##x,_p5##y,z,c), I[335] = (T)(img)(x,_p5##y,z,c), I[336] = (T)(img)(_n1##x,_p5##y,z,c), I[337] = (T)(img)(_n2##x,_p5##y,z,c), I[338] = (T)(img)(_n3##x,_p5##y,z,c), I[339] = (T)(img)(_n4##x,_p5##y,z,c), I[340] = (T)(img)(_n5##x,_p5##y,z,c), I[341] = (T)(img)(_n6##x,_p5##y,z,c), I[342] = (T)(img)(_n7##x,_p5##y,z,c), I[343] = (T)(img)(_n8##x,_p5##y,z,c), I[344] = (T)(img)(_n9##x,_p5##y,z,c), I[345] = (T)(img)(_n10##x,_p5##y,z,c), I[346] = (T)(img)(_n11##x,_p5##y,z,c), I[347] = (T)(img)(_n12##x,_p5##y,z,c), I[348] = (T)(img)(_n13##x,_p5##y,z,c), I[349] = (T)(img)(_n14##x,_p5##y,z,c), I[350] = (T)(img)(_n15##x,_p5##y,z,c), I[351] = (T)(img)(_n16##x,_p5##y,z,c), \ - I[352] = (T)(img)(_p15##x,_p4##y,z,c), I[353] = (T)(img)(_p14##x,_p4##y,z,c), I[354] = (T)(img)(_p13##x,_p4##y,z,c), I[355] = (T)(img)(_p12##x,_p4##y,z,c), I[356] = (T)(img)(_p11##x,_p4##y,z,c), I[357] = (T)(img)(_p10##x,_p4##y,z,c), I[358] = (T)(img)(_p9##x,_p4##y,z,c), I[359] = (T)(img)(_p8##x,_p4##y,z,c), I[360] = (T)(img)(_p7##x,_p4##y,z,c), I[361] = (T)(img)(_p6##x,_p4##y,z,c), I[362] = (T)(img)(_p5##x,_p4##y,z,c), I[363] = (T)(img)(_p4##x,_p4##y,z,c), I[364] = (T)(img)(_p3##x,_p4##y,z,c), I[365] = (T)(img)(_p2##x,_p4##y,z,c), I[366] = (T)(img)(_p1##x,_p4##y,z,c), I[367] = (T)(img)(x,_p4##y,z,c), I[368] = (T)(img)(_n1##x,_p4##y,z,c), I[369] = (T)(img)(_n2##x,_p4##y,z,c), I[370] = (T)(img)(_n3##x,_p4##y,z,c), I[371] = (T)(img)(_n4##x,_p4##y,z,c), I[372] = (T)(img)(_n5##x,_p4##y,z,c), I[373] = (T)(img)(_n6##x,_p4##y,z,c), I[374] = (T)(img)(_n7##x,_p4##y,z,c), I[375] = (T)(img)(_n8##x,_p4##y,z,c), I[376] = (T)(img)(_n9##x,_p4##y,z,c), I[377] = (T)(img)(_n10##x,_p4##y,z,c), I[378] = (T)(img)(_n11##x,_p4##y,z,c), I[379] = (T)(img)(_n12##x,_p4##y,z,c), I[380] = (T)(img)(_n13##x,_p4##y,z,c), I[381] = (T)(img)(_n14##x,_p4##y,z,c), I[382] = (T)(img)(_n15##x,_p4##y,z,c), I[383] = (T)(img)(_n16##x,_p4##y,z,c), \ - I[384] = (T)(img)(_p15##x,_p3##y,z,c), I[385] = (T)(img)(_p14##x,_p3##y,z,c), I[386] = (T)(img)(_p13##x,_p3##y,z,c), I[387] = (T)(img)(_p12##x,_p3##y,z,c), I[388] = (T)(img)(_p11##x,_p3##y,z,c), I[389] = (T)(img)(_p10##x,_p3##y,z,c), I[390] = (T)(img)(_p9##x,_p3##y,z,c), I[391] = (T)(img)(_p8##x,_p3##y,z,c), I[392] = (T)(img)(_p7##x,_p3##y,z,c), I[393] = (T)(img)(_p6##x,_p3##y,z,c), I[394] = (T)(img)(_p5##x,_p3##y,z,c), I[395] = (T)(img)(_p4##x,_p3##y,z,c), I[396] = (T)(img)(_p3##x,_p3##y,z,c), I[397] = (T)(img)(_p2##x,_p3##y,z,c), I[398] = (T)(img)(_p1##x,_p3##y,z,c), I[399] = (T)(img)(x,_p3##y,z,c), I[400] = (T)(img)(_n1##x,_p3##y,z,c), I[401] = (T)(img)(_n2##x,_p3##y,z,c), I[402] = (T)(img)(_n3##x,_p3##y,z,c), I[403] = (T)(img)(_n4##x,_p3##y,z,c), I[404] = (T)(img)(_n5##x,_p3##y,z,c), I[405] = (T)(img)(_n6##x,_p3##y,z,c), I[406] = (T)(img)(_n7##x,_p3##y,z,c), I[407] = (T)(img)(_n8##x,_p3##y,z,c), I[408] = (T)(img)(_n9##x,_p3##y,z,c), I[409] = (T)(img)(_n10##x,_p3##y,z,c), I[410] = (T)(img)(_n11##x,_p3##y,z,c), I[411] = (T)(img)(_n12##x,_p3##y,z,c), I[412] = (T)(img)(_n13##x,_p3##y,z,c), I[413] = (T)(img)(_n14##x,_p3##y,z,c), I[414] = (T)(img)(_n15##x,_p3##y,z,c), I[415] = (T)(img)(_n16##x,_p3##y,z,c), \ - I[416] = (T)(img)(_p15##x,_p2##y,z,c), I[417] = (T)(img)(_p14##x,_p2##y,z,c), I[418] = (T)(img)(_p13##x,_p2##y,z,c), I[419] = (T)(img)(_p12##x,_p2##y,z,c), I[420] = (T)(img)(_p11##x,_p2##y,z,c), I[421] = (T)(img)(_p10##x,_p2##y,z,c), I[422] = (T)(img)(_p9##x,_p2##y,z,c), I[423] = (T)(img)(_p8##x,_p2##y,z,c), I[424] = (T)(img)(_p7##x,_p2##y,z,c), I[425] = (T)(img)(_p6##x,_p2##y,z,c), I[426] = (T)(img)(_p5##x,_p2##y,z,c), I[427] = (T)(img)(_p4##x,_p2##y,z,c), I[428] = (T)(img)(_p3##x,_p2##y,z,c), I[429] = (T)(img)(_p2##x,_p2##y,z,c), I[430] = (T)(img)(_p1##x,_p2##y,z,c), I[431] = (T)(img)(x,_p2##y,z,c), I[432] = (T)(img)(_n1##x,_p2##y,z,c), I[433] = (T)(img)(_n2##x,_p2##y,z,c), I[434] = (T)(img)(_n3##x,_p2##y,z,c), I[435] = (T)(img)(_n4##x,_p2##y,z,c), I[436] = (T)(img)(_n5##x,_p2##y,z,c), I[437] = (T)(img)(_n6##x,_p2##y,z,c), I[438] = (T)(img)(_n7##x,_p2##y,z,c), I[439] = (T)(img)(_n8##x,_p2##y,z,c), I[440] = (T)(img)(_n9##x,_p2##y,z,c), I[441] = (T)(img)(_n10##x,_p2##y,z,c), I[442] = (T)(img)(_n11##x,_p2##y,z,c), I[443] = (T)(img)(_n12##x,_p2##y,z,c), I[444] = (T)(img)(_n13##x,_p2##y,z,c), I[445] = (T)(img)(_n14##x,_p2##y,z,c), I[446] = (T)(img)(_n15##x,_p2##y,z,c), I[447] = (T)(img)(_n16##x,_p2##y,z,c), \ - I[448] = (T)(img)(_p15##x,_p1##y,z,c), I[449] = (T)(img)(_p14##x,_p1##y,z,c), I[450] = (T)(img)(_p13##x,_p1##y,z,c), I[451] = (T)(img)(_p12##x,_p1##y,z,c), I[452] = (T)(img)(_p11##x,_p1##y,z,c), I[453] = (T)(img)(_p10##x,_p1##y,z,c), I[454] = (T)(img)(_p9##x,_p1##y,z,c), I[455] = (T)(img)(_p8##x,_p1##y,z,c), I[456] = (T)(img)(_p7##x,_p1##y,z,c), I[457] = (T)(img)(_p6##x,_p1##y,z,c), I[458] = (T)(img)(_p5##x,_p1##y,z,c), I[459] = (T)(img)(_p4##x,_p1##y,z,c), I[460] = (T)(img)(_p3##x,_p1##y,z,c), I[461] = (T)(img)(_p2##x,_p1##y,z,c), I[462] = (T)(img)(_p1##x,_p1##y,z,c), I[463] = (T)(img)(x,_p1##y,z,c), I[464] = (T)(img)(_n1##x,_p1##y,z,c), I[465] = (T)(img)(_n2##x,_p1##y,z,c), I[466] = (T)(img)(_n3##x,_p1##y,z,c), I[467] = (T)(img)(_n4##x,_p1##y,z,c), I[468] = (T)(img)(_n5##x,_p1##y,z,c), I[469] = (T)(img)(_n6##x,_p1##y,z,c), I[470] = (T)(img)(_n7##x,_p1##y,z,c), I[471] = (T)(img)(_n8##x,_p1##y,z,c), I[472] = (T)(img)(_n9##x,_p1##y,z,c), I[473] = (T)(img)(_n10##x,_p1##y,z,c), I[474] = (T)(img)(_n11##x,_p1##y,z,c), I[475] = (T)(img)(_n12##x,_p1##y,z,c), I[476] = (T)(img)(_n13##x,_p1##y,z,c), I[477] = (T)(img)(_n14##x,_p1##y,z,c), I[478] = (T)(img)(_n15##x,_p1##y,z,c), I[479] = (T)(img)(_n16##x,_p1##y,z,c), \ - I[480] = (T)(img)(_p15##x,y,z,c), I[481] = (T)(img)(_p14##x,y,z,c), I[482] = (T)(img)(_p13##x,y,z,c), I[483] = (T)(img)(_p12##x,y,z,c), I[484] = (T)(img)(_p11##x,y,z,c), I[485] = (T)(img)(_p10##x,y,z,c), I[486] = (T)(img)(_p9##x,y,z,c), I[487] = (T)(img)(_p8##x,y,z,c), I[488] = (T)(img)(_p7##x,y,z,c), I[489] = (T)(img)(_p6##x,y,z,c), I[490] = (T)(img)(_p5##x,y,z,c), I[491] = (T)(img)(_p4##x,y,z,c), I[492] = (T)(img)(_p3##x,y,z,c), I[493] = (T)(img)(_p2##x,y,z,c), I[494] = (T)(img)(_p1##x,y,z,c), I[495] = (T)(img)(x,y,z,c), I[496] = (T)(img)(_n1##x,y,z,c), I[497] = (T)(img)(_n2##x,y,z,c), I[498] = (T)(img)(_n3##x,y,z,c), I[499] = (T)(img)(_n4##x,y,z,c), I[500] = (T)(img)(_n5##x,y,z,c), I[501] = (T)(img)(_n6##x,y,z,c), I[502] = (T)(img)(_n7##x,y,z,c), I[503] = (T)(img)(_n8##x,y,z,c), I[504] = (T)(img)(_n9##x,y,z,c), I[505] = (T)(img)(_n10##x,y,z,c), I[506] = (T)(img)(_n11##x,y,z,c), I[507] = (T)(img)(_n12##x,y,z,c), I[508] = (T)(img)(_n13##x,y,z,c), I[509] = (T)(img)(_n14##x,y,z,c), I[510] = (T)(img)(_n15##x,y,z,c), I[511] = (T)(img)(_n16##x,y,z,c), \ - I[512] = (T)(img)(_p15##x,_n1##y,z,c), I[513] = (T)(img)(_p14##x,_n1##y,z,c), I[514] = (T)(img)(_p13##x,_n1##y,z,c), I[515] = (T)(img)(_p12##x,_n1##y,z,c), I[516] = (T)(img)(_p11##x,_n1##y,z,c), I[517] = (T)(img)(_p10##x,_n1##y,z,c), I[518] = (T)(img)(_p9##x,_n1##y,z,c), I[519] = (T)(img)(_p8##x,_n1##y,z,c), I[520] = (T)(img)(_p7##x,_n1##y,z,c), I[521] = (T)(img)(_p6##x,_n1##y,z,c), I[522] = (T)(img)(_p5##x,_n1##y,z,c), I[523] = (T)(img)(_p4##x,_n1##y,z,c), I[524] = (T)(img)(_p3##x,_n1##y,z,c), I[525] = (T)(img)(_p2##x,_n1##y,z,c), I[526] = (T)(img)(_p1##x,_n1##y,z,c), I[527] = (T)(img)(x,_n1##y,z,c), I[528] = (T)(img)(_n1##x,_n1##y,z,c), I[529] = (T)(img)(_n2##x,_n1##y,z,c), I[530] = (T)(img)(_n3##x,_n1##y,z,c), I[531] = (T)(img)(_n4##x,_n1##y,z,c), I[532] = (T)(img)(_n5##x,_n1##y,z,c), I[533] = (T)(img)(_n6##x,_n1##y,z,c), I[534] = (T)(img)(_n7##x,_n1##y,z,c), I[535] = (T)(img)(_n8##x,_n1##y,z,c), I[536] = (T)(img)(_n9##x,_n1##y,z,c), I[537] = (T)(img)(_n10##x,_n1##y,z,c), I[538] = (T)(img)(_n11##x,_n1##y,z,c), I[539] = (T)(img)(_n12##x,_n1##y,z,c), I[540] = (T)(img)(_n13##x,_n1##y,z,c), I[541] = (T)(img)(_n14##x,_n1##y,z,c), I[542] = (T)(img)(_n15##x,_n1##y,z,c), I[543] = (T)(img)(_n16##x,_n1##y,z,c), \ - I[544] = (T)(img)(_p15##x,_n2##y,z,c), I[545] = (T)(img)(_p14##x,_n2##y,z,c), I[546] = (T)(img)(_p13##x,_n2##y,z,c), I[547] = (T)(img)(_p12##x,_n2##y,z,c), I[548] = (T)(img)(_p11##x,_n2##y,z,c), I[549] = (T)(img)(_p10##x,_n2##y,z,c), I[550] = (T)(img)(_p9##x,_n2##y,z,c), I[551] = (T)(img)(_p8##x,_n2##y,z,c), I[552] = (T)(img)(_p7##x,_n2##y,z,c), I[553] = (T)(img)(_p6##x,_n2##y,z,c), I[554] = (T)(img)(_p5##x,_n2##y,z,c), I[555] = (T)(img)(_p4##x,_n2##y,z,c), I[556] = (T)(img)(_p3##x,_n2##y,z,c), I[557] = (T)(img)(_p2##x,_n2##y,z,c), I[558] = (T)(img)(_p1##x,_n2##y,z,c), I[559] = (T)(img)(x,_n2##y,z,c), I[560] = (T)(img)(_n1##x,_n2##y,z,c), I[561] = (T)(img)(_n2##x,_n2##y,z,c), I[562] = (T)(img)(_n3##x,_n2##y,z,c), I[563] = (T)(img)(_n4##x,_n2##y,z,c), I[564] = (T)(img)(_n5##x,_n2##y,z,c), I[565] = (T)(img)(_n6##x,_n2##y,z,c), I[566] = (T)(img)(_n7##x,_n2##y,z,c), I[567] = (T)(img)(_n8##x,_n2##y,z,c), I[568] = (T)(img)(_n9##x,_n2##y,z,c), I[569] = (T)(img)(_n10##x,_n2##y,z,c), I[570] = (T)(img)(_n11##x,_n2##y,z,c), I[571] = (T)(img)(_n12##x,_n2##y,z,c), I[572] = (T)(img)(_n13##x,_n2##y,z,c), I[573] = (T)(img)(_n14##x,_n2##y,z,c), I[574] = (T)(img)(_n15##x,_n2##y,z,c), I[575] = (T)(img)(_n16##x,_n2##y,z,c), \ - I[576] = (T)(img)(_p15##x,_n3##y,z,c), I[577] = (T)(img)(_p14##x,_n3##y,z,c), I[578] = (T)(img)(_p13##x,_n3##y,z,c), I[579] = (T)(img)(_p12##x,_n3##y,z,c), I[580] = (T)(img)(_p11##x,_n3##y,z,c), I[581] = (T)(img)(_p10##x,_n3##y,z,c), I[582] = (T)(img)(_p9##x,_n3##y,z,c), I[583] = (T)(img)(_p8##x,_n3##y,z,c), I[584] = (T)(img)(_p7##x,_n3##y,z,c), I[585] = (T)(img)(_p6##x,_n3##y,z,c), I[586] = (T)(img)(_p5##x,_n3##y,z,c), I[587] = (T)(img)(_p4##x,_n3##y,z,c), I[588] = (T)(img)(_p3##x,_n3##y,z,c), I[589] = (T)(img)(_p2##x,_n3##y,z,c), I[590] = (T)(img)(_p1##x,_n3##y,z,c), I[591] = (T)(img)(x,_n3##y,z,c), I[592] = (T)(img)(_n1##x,_n3##y,z,c), I[593] = (T)(img)(_n2##x,_n3##y,z,c), I[594] = (T)(img)(_n3##x,_n3##y,z,c), I[595] = (T)(img)(_n4##x,_n3##y,z,c), I[596] = (T)(img)(_n5##x,_n3##y,z,c), I[597] = (T)(img)(_n6##x,_n3##y,z,c), I[598] = (T)(img)(_n7##x,_n3##y,z,c), I[599] = (T)(img)(_n8##x,_n3##y,z,c), I[600] = (T)(img)(_n9##x,_n3##y,z,c), I[601] = (T)(img)(_n10##x,_n3##y,z,c), I[602] = (T)(img)(_n11##x,_n3##y,z,c), I[603] = (T)(img)(_n12##x,_n3##y,z,c), I[604] = (T)(img)(_n13##x,_n3##y,z,c), I[605] = (T)(img)(_n14##x,_n3##y,z,c), I[606] = (T)(img)(_n15##x,_n3##y,z,c), I[607] = (T)(img)(_n16##x,_n3##y,z,c), \ - I[608] = (T)(img)(_p15##x,_n4##y,z,c), I[609] = (T)(img)(_p14##x,_n4##y,z,c), I[610] = (T)(img)(_p13##x,_n4##y,z,c), I[611] = (T)(img)(_p12##x,_n4##y,z,c), I[612] = (T)(img)(_p11##x,_n4##y,z,c), I[613] = (T)(img)(_p10##x,_n4##y,z,c), I[614] = (T)(img)(_p9##x,_n4##y,z,c), I[615] = (T)(img)(_p8##x,_n4##y,z,c), I[616] = (T)(img)(_p7##x,_n4##y,z,c), I[617] = (T)(img)(_p6##x,_n4##y,z,c), I[618] = (T)(img)(_p5##x,_n4##y,z,c), I[619] = (T)(img)(_p4##x,_n4##y,z,c), I[620] = (T)(img)(_p3##x,_n4##y,z,c), I[621] = (T)(img)(_p2##x,_n4##y,z,c), I[622] = (T)(img)(_p1##x,_n4##y,z,c), I[623] = (T)(img)(x,_n4##y,z,c), I[624] = (T)(img)(_n1##x,_n4##y,z,c), I[625] = (T)(img)(_n2##x,_n4##y,z,c), I[626] = (T)(img)(_n3##x,_n4##y,z,c), I[627] = (T)(img)(_n4##x,_n4##y,z,c), I[628] = (T)(img)(_n5##x,_n4##y,z,c), I[629] = (T)(img)(_n6##x,_n4##y,z,c), I[630] = (T)(img)(_n7##x,_n4##y,z,c), I[631] = (T)(img)(_n8##x,_n4##y,z,c), I[632] = (T)(img)(_n9##x,_n4##y,z,c), I[633] = (T)(img)(_n10##x,_n4##y,z,c), I[634] = (T)(img)(_n11##x,_n4##y,z,c), I[635] = (T)(img)(_n12##x,_n4##y,z,c), I[636] = (T)(img)(_n13##x,_n4##y,z,c), I[637] = (T)(img)(_n14##x,_n4##y,z,c), I[638] = (T)(img)(_n15##x,_n4##y,z,c), I[639] = (T)(img)(_n16##x,_n4##y,z,c), \ - I[640] = (T)(img)(_p15##x,_n5##y,z,c), I[641] = (T)(img)(_p14##x,_n5##y,z,c), I[642] = (T)(img)(_p13##x,_n5##y,z,c), I[643] = (T)(img)(_p12##x,_n5##y,z,c), I[644] = (T)(img)(_p11##x,_n5##y,z,c), I[645] = (T)(img)(_p10##x,_n5##y,z,c), I[646] = (T)(img)(_p9##x,_n5##y,z,c), I[647] = (T)(img)(_p8##x,_n5##y,z,c), I[648] = (T)(img)(_p7##x,_n5##y,z,c), I[649] = (T)(img)(_p6##x,_n5##y,z,c), I[650] = (T)(img)(_p5##x,_n5##y,z,c), I[651] = (T)(img)(_p4##x,_n5##y,z,c), I[652] = (T)(img)(_p3##x,_n5##y,z,c), I[653] = (T)(img)(_p2##x,_n5##y,z,c), I[654] = (T)(img)(_p1##x,_n5##y,z,c), I[655] = (T)(img)(x,_n5##y,z,c), I[656] = (T)(img)(_n1##x,_n5##y,z,c), I[657] = (T)(img)(_n2##x,_n5##y,z,c), I[658] = (T)(img)(_n3##x,_n5##y,z,c), I[659] = (T)(img)(_n4##x,_n5##y,z,c), I[660] = (T)(img)(_n5##x,_n5##y,z,c), I[661] = (T)(img)(_n6##x,_n5##y,z,c), I[662] = (T)(img)(_n7##x,_n5##y,z,c), I[663] = (T)(img)(_n8##x,_n5##y,z,c), I[664] = (T)(img)(_n9##x,_n5##y,z,c), I[665] = (T)(img)(_n10##x,_n5##y,z,c), I[666] = (T)(img)(_n11##x,_n5##y,z,c), I[667] = (T)(img)(_n12##x,_n5##y,z,c), I[668] = (T)(img)(_n13##x,_n5##y,z,c), I[669] = (T)(img)(_n14##x,_n5##y,z,c), I[670] = (T)(img)(_n15##x,_n5##y,z,c), I[671] = (T)(img)(_n16##x,_n5##y,z,c), \ - I[672] = (T)(img)(_p15##x,_n6##y,z,c), I[673] = (T)(img)(_p14##x,_n6##y,z,c), I[674] = (T)(img)(_p13##x,_n6##y,z,c), I[675] = (T)(img)(_p12##x,_n6##y,z,c), I[676] = (T)(img)(_p11##x,_n6##y,z,c), I[677] = (T)(img)(_p10##x,_n6##y,z,c), I[678] = (T)(img)(_p9##x,_n6##y,z,c), I[679] = (T)(img)(_p8##x,_n6##y,z,c), I[680] = (T)(img)(_p7##x,_n6##y,z,c), I[681] = (T)(img)(_p6##x,_n6##y,z,c), I[682] = (T)(img)(_p5##x,_n6##y,z,c), I[683] = (T)(img)(_p4##x,_n6##y,z,c), I[684] = (T)(img)(_p3##x,_n6##y,z,c), I[685] = (T)(img)(_p2##x,_n6##y,z,c), I[686] = (T)(img)(_p1##x,_n6##y,z,c), I[687] = (T)(img)(x,_n6##y,z,c), I[688] = (T)(img)(_n1##x,_n6##y,z,c), I[689] = (T)(img)(_n2##x,_n6##y,z,c), I[690] = (T)(img)(_n3##x,_n6##y,z,c), I[691] = (T)(img)(_n4##x,_n6##y,z,c), I[692] = (T)(img)(_n5##x,_n6##y,z,c), I[693] = (T)(img)(_n6##x,_n6##y,z,c), I[694] = (T)(img)(_n7##x,_n6##y,z,c), I[695] = (T)(img)(_n8##x,_n6##y,z,c), I[696] = (T)(img)(_n9##x,_n6##y,z,c), I[697] = (T)(img)(_n10##x,_n6##y,z,c), I[698] = (T)(img)(_n11##x,_n6##y,z,c), I[699] = (T)(img)(_n12##x,_n6##y,z,c), I[700] = (T)(img)(_n13##x,_n6##y,z,c), I[701] = (T)(img)(_n14##x,_n6##y,z,c), I[702] = (T)(img)(_n15##x,_n6##y,z,c), I[703] = (T)(img)(_n16##x,_n6##y,z,c), \ - I[704] = (T)(img)(_p15##x,_n7##y,z,c), I[705] = (T)(img)(_p14##x,_n7##y,z,c), I[706] = (T)(img)(_p13##x,_n7##y,z,c), I[707] = (T)(img)(_p12##x,_n7##y,z,c), I[708] = (T)(img)(_p11##x,_n7##y,z,c), I[709] = (T)(img)(_p10##x,_n7##y,z,c), I[710] = (T)(img)(_p9##x,_n7##y,z,c), I[711] = (T)(img)(_p8##x,_n7##y,z,c), I[712] = (T)(img)(_p7##x,_n7##y,z,c), I[713] = (T)(img)(_p6##x,_n7##y,z,c), I[714] = (T)(img)(_p5##x,_n7##y,z,c), I[715] = (T)(img)(_p4##x,_n7##y,z,c), I[716] = (T)(img)(_p3##x,_n7##y,z,c), I[717] = (T)(img)(_p2##x,_n7##y,z,c), I[718] = (T)(img)(_p1##x,_n7##y,z,c), I[719] = (T)(img)(x,_n7##y,z,c), I[720] = (T)(img)(_n1##x,_n7##y,z,c), I[721] = (T)(img)(_n2##x,_n7##y,z,c), I[722] = (T)(img)(_n3##x,_n7##y,z,c), I[723] = (T)(img)(_n4##x,_n7##y,z,c), I[724] = (T)(img)(_n5##x,_n7##y,z,c), I[725] = (T)(img)(_n6##x,_n7##y,z,c), I[726] = (T)(img)(_n7##x,_n7##y,z,c), I[727] = (T)(img)(_n8##x,_n7##y,z,c), I[728] = (T)(img)(_n9##x,_n7##y,z,c), I[729] = (T)(img)(_n10##x,_n7##y,z,c), I[730] = (T)(img)(_n11##x,_n7##y,z,c), I[731] = (T)(img)(_n12##x,_n7##y,z,c), I[732] = (T)(img)(_n13##x,_n7##y,z,c), I[733] = (T)(img)(_n14##x,_n7##y,z,c), I[734] = (T)(img)(_n15##x,_n7##y,z,c), I[735] = (T)(img)(_n16##x,_n7##y,z,c), \ - I[736] = (T)(img)(_p15##x,_n8##y,z,c), I[737] = (T)(img)(_p14##x,_n8##y,z,c), I[738] = (T)(img)(_p13##x,_n8##y,z,c), I[739] = (T)(img)(_p12##x,_n8##y,z,c), I[740] = (T)(img)(_p11##x,_n8##y,z,c), I[741] = (T)(img)(_p10##x,_n8##y,z,c), I[742] = (T)(img)(_p9##x,_n8##y,z,c), I[743] = (T)(img)(_p8##x,_n8##y,z,c), I[744] = (T)(img)(_p7##x,_n8##y,z,c), I[745] = (T)(img)(_p6##x,_n8##y,z,c), I[746] = (T)(img)(_p5##x,_n8##y,z,c), I[747] = (T)(img)(_p4##x,_n8##y,z,c), I[748] = (T)(img)(_p3##x,_n8##y,z,c), I[749] = (T)(img)(_p2##x,_n8##y,z,c), I[750] = (T)(img)(_p1##x,_n8##y,z,c), I[751] = (T)(img)(x,_n8##y,z,c), I[752] = (T)(img)(_n1##x,_n8##y,z,c), I[753] = (T)(img)(_n2##x,_n8##y,z,c), I[754] = (T)(img)(_n3##x,_n8##y,z,c), I[755] = (T)(img)(_n4##x,_n8##y,z,c), I[756] = (T)(img)(_n5##x,_n8##y,z,c), I[757] = (T)(img)(_n6##x,_n8##y,z,c), I[758] = (T)(img)(_n7##x,_n8##y,z,c), I[759] = (T)(img)(_n8##x,_n8##y,z,c), I[760] = (T)(img)(_n9##x,_n8##y,z,c), I[761] = (T)(img)(_n10##x,_n8##y,z,c), I[762] = (T)(img)(_n11##x,_n8##y,z,c), I[763] = (T)(img)(_n12##x,_n8##y,z,c), I[764] = (T)(img)(_n13##x,_n8##y,z,c), I[765] = (T)(img)(_n14##x,_n8##y,z,c), I[766] = (T)(img)(_n15##x,_n8##y,z,c), I[767] = (T)(img)(_n16##x,_n8##y,z,c), \ - I[768] = (T)(img)(_p15##x,_n9##y,z,c), I[769] = (T)(img)(_p14##x,_n9##y,z,c), I[770] = (T)(img)(_p13##x,_n9##y,z,c), I[771] = (T)(img)(_p12##x,_n9##y,z,c), I[772] = (T)(img)(_p11##x,_n9##y,z,c), I[773] = (T)(img)(_p10##x,_n9##y,z,c), I[774] = (T)(img)(_p9##x,_n9##y,z,c), I[775] = (T)(img)(_p8##x,_n9##y,z,c), I[776] = (T)(img)(_p7##x,_n9##y,z,c), I[777] = (T)(img)(_p6##x,_n9##y,z,c), I[778] = (T)(img)(_p5##x,_n9##y,z,c), I[779] = (T)(img)(_p4##x,_n9##y,z,c), I[780] = (T)(img)(_p3##x,_n9##y,z,c), I[781] = (T)(img)(_p2##x,_n9##y,z,c), I[782] = (T)(img)(_p1##x,_n9##y,z,c), I[783] = (T)(img)(x,_n9##y,z,c), I[784] = (T)(img)(_n1##x,_n9##y,z,c), I[785] = (T)(img)(_n2##x,_n9##y,z,c), I[786] = (T)(img)(_n3##x,_n9##y,z,c), I[787] = (T)(img)(_n4##x,_n9##y,z,c), I[788] = (T)(img)(_n5##x,_n9##y,z,c), I[789] = (T)(img)(_n6##x,_n9##y,z,c), I[790] = (T)(img)(_n7##x,_n9##y,z,c), I[791] = (T)(img)(_n8##x,_n9##y,z,c), I[792] = (T)(img)(_n9##x,_n9##y,z,c), I[793] = (T)(img)(_n10##x,_n9##y,z,c), I[794] = (T)(img)(_n11##x,_n9##y,z,c), I[795] = (T)(img)(_n12##x,_n9##y,z,c), I[796] = (T)(img)(_n13##x,_n9##y,z,c), I[797] = (T)(img)(_n14##x,_n9##y,z,c), I[798] = (T)(img)(_n15##x,_n9##y,z,c), I[799] = (T)(img)(_n16##x,_n9##y,z,c), \ - I[800] = (T)(img)(_p15##x,_n10##y,z,c), I[801] = (T)(img)(_p14##x,_n10##y,z,c), I[802] = (T)(img)(_p13##x,_n10##y,z,c), I[803] = (T)(img)(_p12##x,_n10##y,z,c), I[804] = (T)(img)(_p11##x,_n10##y,z,c), I[805] = (T)(img)(_p10##x,_n10##y,z,c), I[806] = (T)(img)(_p9##x,_n10##y,z,c), I[807] = (T)(img)(_p8##x,_n10##y,z,c), I[808] = (T)(img)(_p7##x,_n10##y,z,c), I[809] = (T)(img)(_p6##x,_n10##y,z,c), I[810] = (T)(img)(_p5##x,_n10##y,z,c), I[811] = (T)(img)(_p4##x,_n10##y,z,c), I[812] = (T)(img)(_p3##x,_n10##y,z,c), I[813] = (T)(img)(_p2##x,_n10##y,z,c), I[814] = (T)(img)(_p1##x,_n10##y,z,c), I[815] = (T)(img)(x,_n10##y,z,c), I[816] = (T)(img)(_n1##x,_n10##y,z,c), I[817] = (T)(img)(_n2##x,_n10##y,z,c), I[818] = (T)(img)(_n3##x,_n10##y,z,c), I[819] = (T)(img)(_n4##x,_n10##y,z,c), I[820] = (T)(img)(_n5##x,_n10##y,z,c), I[821] = (T)(img)(_n6##x,_n10##y,z,c), I[822] = (T)(img)(_n7##x,_n10##y,z,c), I[823] = (T)(img)(_n8##x,_n10##y,z,c), I[824] = (T)(img)(_n9##x,_n10##y,z,c), I[825] = (T)(img)(_n10##x,_n10##y,z,c), I[826] = (T)(img)(_n11##x,_n10##y,z,c), I[827] = (T)(img)(_n12##x,_n10##y,z,c), I[828] = (T)(img)(_n13##x,_n10##y,z,c), I[829] = (T)(img)(_n14##x,_n10##y,z,c), I[830] = (T)(img)(_n15##x,_n10##y,z,c), I[831] = (T)(img)(_n16##x,_n10##y,z,c), \ - I[832] = (T)(img)(_p15##x,_n11##y,z,c), I[833] = (T)(img)(_p14##x,_n11##y,z,c), I[834] = (T)(img)(_p13##x,_n11##y,z,c), I[835] = (T)(img)(_p12##x,_n11##y,z,c), I[836] = (T)(img)(_p11##x,_n11##y,z,c), I[837] = (T)(img)(_p10##x,_n11##y,z,c), I[838] = (T)(img)(_p9##x,_n11##y,z,c), I[839] = (T)(img)(_p8##x,_n11##y,z,c), I[840] = (T)(img)(_p7##x,_n11##y,z,c), I[841] = (T)(img)(_p6##x,_n11##y,z,c), I[842] = (T)(img)(_p5##x,_n11##y,z,c), I[843] = (T)(img)(_p4##x,_n11##y,z,c), I[844] = (T)(img)(_p3##x,_n11##y,z,c), I[845] = (T)(img)(_p2##x,_n11##y,z,c), I[846] = (T)(img)(_p1##x,_n11##y,z,c), I[847] = (T)(img)(x,_n11##y,z,c), I[848] = (T)(img)(_n1##x,_n11##y,z,c), I[849] = (T)(img)(_n2##x,_n11##y,z,c), I[850] = (T)(img)(_n3##x,_n11##y,z,c), I[851] = (T)(img)(_n4##x,_n11##y,z,c), I[852] = (T)(img)(_n5##x,_n11##y,z,c), I[853] = (T)(img)(_n6##x,_n11##y,z,c), I[854] = (T)(img)(_n7##x,_n11##y,z,c), I[855] = (T)(img)(_n8##x,_n11##y,z,c), I[856] = (T)(img)(_n9##x,_n11##y,z,c), I[857] = (T)(img)(_n10##x,_n11##y,z,c), I[858] = (T)(img)(_n11##x,_n11##y,z,c), I[859] = (T)(img)(_n12##x,_n11##y,z,c), I[860] = (T)(img)(_n13##x,_n11##y,z,c), I[861] = (T)(img)(_n14##x,_n11##y,z,c), I[862] = (T)(img)(_n15##x,_n11##y,z,c), I[863] = (T)(img)(_n16##x,_n11##y,z,c), \ - I[864] = (T)(img)(_p15##x,_n12##y,z,c), I[865] = (T)(img)(_p14##x,_n12##y,z,c), I[866] = (T)(img)(_p13##x,_n12##y,z,c), I[867] = (T)(img)(_p12##x,_n12##y,z,c), I[868] = (T)(img)(_p11##x,_n12##y,z,c), I[869] = (T)(img)(_p10##x,_n12##y,z,c), I[870] = (T)(img)(_p9##x,_n12##y,z,c), I[871] = (T)(img)(_p8##x,_n12##y,z,c), I[872] = (T)(img)(_p7##x,_n12##y,z,c), I[873] = (T)(img)(_p6##x,_n12##y,z,c), I[874] = (T)(img)(_p5##x,_n12##y,z,c), I[875] = (T)(img)(_p4##x,_n12##y,z,c), I[876] = (T)(img)(_p3##x,_n12##y,z,c), I[877] = (T)(img)(_p2##x,_n12##y,z,c), I[878] = (T)(img)(_p1##x,_n12##y,z,c), I[879] = (T)(img)(x,_n12##y,z,c), I[880] = (T)(img)(_n1##x,_n12##y,z,c), I[881] = (T)(img)(_n2##x,_n12##y,z,c), I[882] = (T)(img)(_n3##x,_n12##y,z,c), I[883] = (T)(img)(_n4##x,_n12##y,z,c), I[884] = (T)(img)(_n5##x,_n12##y,z,c), I[885] = (T)(img)(_n6##x,_n12##y,z,c), I[886] = (T)(img)(_n7##x,_n12##y,z,c), I[887] = (T)(img)(_n8##x,_n12##y,z,c), I[888] = (T)(img)(_n9##x,_n12##y,z,c), I[889] = (T)(img)(_n10##x,_n12##y,z,c), I[890] = (T)(img)(_n11##x,_n12##y,z,c), I[891] = (T)(img)(_n12##x,_n12##y,z,c), I[892] = (T)(img)(_n13##x,_n12##y,z,c), I[893] = (T)(img)(_n14##x,_n12##y,z,c), I[894] = (T)(img)(_n15##x,_n12##y,z,c), I[895] = (T)(img)(_n16##x,_n12##y,z,c), \ - I[896] = (T)(img)(_p15##x,_n13##y,z,c), I[897] = (T)(img)(_p14##x,_n13##y,z,c), I[898] = (T)(img)(_p13##x,_n13##y,z,c), I[899] = (T)(img)(_p12##x,_n13##y,z,c), I[900] = (T)(img)(_p11##x,_n13##y,z,c), I[901] = (T)(img)(_p10##x,_n13##y,z,c), I[902] = (T)(img)(_p9##x,_n13##y,z,c), I[903] = (T)(img)(_p8##x,_n13##y,z,c), I[904] = (T)(img)(_p7##x,_n13##y,z,c), I[905] = (T)(img)(_p6##x,_n13##y,z,c), I[906] = (T)(img)(_p5##x,_n13##y,z,c), I[907] = (T)(img)(_p4##x,_n13##y,z,c), I[908] = (T)(img)(_p3##x,_n13##y,z,c), I[909] = (T)(img)(_p2##x,_n13##y,z,c), I[910] = (T)(img)(_p1##x,_n13##y,z,c), I[911] = (T)(img)(x,_n13##y,z,c), I[912] = (T)(img)(_n1##x,_n13##y,z,c), I[913] = (T)(img)(_n2##x,_n13##y,z,c), I[914] = (T)(img)(_n3##x,_n13##y,z,c), I[915] = (T)(img)(_n4##x,_n13##y,z,c), I[916] = (T)(img)(_n5##x,_n13##y,z,c), I[917] = (T)(img)(_n6##x,_n13##y,z,c), I[918] = (T)(img)(_n7##x,_n13##y,z,c), I[919] = (T)(img)(_n8##x,_n13##y,z,c), I[920] = (T)(img)(_n9##x,_n13##y,z,c), I[921] = (T)(img)(_n10##x,_n13##y,z,c), I[922] = (T)(img)(_n11##x,_n13##y,z,c), I[923] = (T)(img)(_n12##x,_n13##y,z,c), I[924] = (T)(img)(_n13##x,_n13##y,z,c), I[925] = (T)(img)(_n14##x,_n13##y,z,c), I[926] = (T)(img)(_n15##x,_n13##y,z,c), I[927] = (T)(img)(_n16##x,_n13##y,z,c), \ - I[928] = (T)(img)(_p15##x,_n14##y,z,c), I[929] = (T)(img)(_p14##x,_n14##y,z,c), I[930] = (T)(img)(_p13##x,_n14##y,z,c), I[931] = (T)(img)(_p12##x,_n14##y,z,c), I[932] = (T)(img)(_p11##x,_n14##y,z,c), I[933] = (T)(img)(_p10##x,_n14##y,z,c), I[934] = (T)(img)(_p9##x,_n14##y,z,c), I[935] = (T)(img)(_p8##x,_n14##y,z,c), I[936] = (T)(img)(_p7##x,_n14##y,z,c), I[937] = (T)(img)(_p6##x,_n14##y,z,c), I[938] = (T)(img)(_p5##x,_n14##y,z,c), I[939] = (T)(img)(_p4##x,_n14##y,z,c), I[940] = (T)(img)(_p3##x,_n14##y,z,c), I[941] = (T)(img)(_p2##x,_n14##y,z,c), I[942] = (T)(img)(_p1##x,_n14##y,z,c), I[943] = (T)(img)(x,_n14##y,z,c), I[944] = (T)(img)(_n1##x,_n14##y,z,c), I[945] = (T)(img)(_n2##x,_n14##y,z,c), I[946] = (T)(img)(_n3##x,_n14##y,z,c), I[947] = (T)(img)(_n4##x,_n14##y,z,c), I[948] = (T)(img)(_n5##x,_n14##y,z,c), I[949] = (T)(img)(_n6##x,_n14##y,z,c), I[950] = (T)(img)(_n7##x,_n14##y,z,c), I[951] = (T)(img)(_n8##x,_n14##y,z,c), I[952] = (T)(img)(_n9##x,_n14##y,z,c), I[953] = (T)(img)(_n10##x,_n14##y,z,c), I[954] = (T)(img)(_n11##x,_n14##y,z,c), I[955] = (T)(img)(_n12##x,_n14##y,z,c), I[956] = (T)(img)(_n13##x,_n14##y,z,c), I[957] = (T)(img)(_n14##x,_n14##y,z,c), I[958] = (T)(img)(_n15##x,_n14##y,z,c), I[959] = (T)(img)(_n16##x,_n14##y,z,c), \ - I[960] = (T)(img)(_p15##x,_n15##y,z,c), I[961] = (T)(img)(_p14##x,_n15##y,z,c), I[962] = (T)(img)(_p13##x,_n15##y,z,c), I[963] = (T)(img)(_p12##x,_n15##y,z,c), I[964] = (T)(img)(_p11##x,_n15##y,z,c), I[965] = (T)(img)(_p10##x,_n15##y,z,c), I[966] = (T)(img)(_p9##x,_n15##y,z,c), I[967] = (T)(img)(_p8##x,_n15##y,z,c), I[968] = (T)(img)(_p7##x,_n15##y,z,c), I[969] = (T)(img)(_p6##x,_n15##y,z,c), I[970] = (T)(img)(_p5##x,_n15##y,z,c), I[971] = (T)(img)(_p4##x,_n15##y,z,c), I[972] = (T)(img)(_p3##x,_n15##y,z,c), I[973] = (T)(img)(_p2##x,_n15##y,z,c), I[974] = (T)(img)(_p1##x,_n15##y,z,c), I[975] = (T)(img)(x,_n15##y,z,c), I[976] = (T)(img)(_n1##x,_n15##y,z,c), I[977] = (T)(img)(_n2##x,_n15##y,z,c), I[978] = (T)(img)(_n3##x,_n15##y,z,c), I[979] = (T)(img)(_n4##x,_n15##y,z,c), I[980] = (T)(img)(_n5##x,_n15##y,z,c), I[981] = (T)(img)(_n6##x,_n15##y,z,c), I[982] = (T)(img)(_n7##x,_n15##y,z,c), I[983] = (T)(img)(_n8##x,_n15##y,z,c), I[984] = (T)(img)(_n9##x,_n15##y,z,c), I[985] = (T)(img)(_n10##x,_n15##y,z,c), I[986] = (T)(img)(_n11##x,_n15##y,z,c), I[987] = (T)(img)(_n12##x,_n15##y,z,c), I[988] = (T)(img)(_n13##x,_n15##y,z,c), I[989] = (T)(img)(_n14##x,_n15##y,z,c), I[990] = (T)(img)(_n15##x,_n15##y,z,c), I[991] = (T)(img)(_n16##x,_n15##y,z,c), \ - I[992] = (T)(img)(_p15##x,_n16##y,z,c), I[993] = (T)(img)(_p14##x,_n16##y,z,c), I[994] = (T)(img)(_p13##x,_n16##y,z,c), I[995] = (T)(img)(_p12##x,_n16##y,z,c), I[996] = (T)(img)(_p11##x,_n16##y,z,c), I[997] = (T)(img)(_p10##x,_n16##y,z,c), I[998] = (T)(img)(_p9##x,_n16##y,z,c), I[999] = (T)(img)(_p8##x,_n16##y,z,c), I[1000] = (T)(img)(_p7##x,_n16##y,z,c), I[1001] = (T)(img)(_p6##x,_n16##y,z,c), I[1002] = (T)(img)(_p5##x,_n16##y,z,c), I[1003] = (T)(img)(_p4##x,_n16##y,z,c), I[1004] = (T)(img)(_p3##x,_n16##y,z,c), I[1005] = (T)(img)(_p2##x,_n16##y,z,c), I[1006] = (T)(img)(_p1##x,_n16##y,z,c), I[1007] = (T)(img)(x,_n16##y,z,c), I[1008] = (T)(img)(_n1##x,_n16##y,z,c), I[1009] = (T)(img)(_n2##x,_n16##y,z,c), I[1010] = (T)(img)(_n3##x,_n16##y,z,c), I[1011] = (T)(img)(_n4##x,_n16##y,z,c), I[1012] = (T)(img)(_n5##x,_n16##y,z,c), I[1013] = (T)(img)(_n6##x,_n16##y,z,c), I[1014] = (T)(img)(_n7##x,_n16##y,z,c), I[1015] = (T)(img)(_n8##x,_n16##y,z,c), I[1016] = (T)(img)(_n9##x,_n16##y,z,c), I[1017] = (T)(img)(_n10##x,_n16##y,z,c), I[1018] = (T)(img)(_n11##x,_n16##y,z,c), I[1019] = (T)(img)(_n12##x,_n16##y,z,c), I[1020] = (T)(img)(_n13##x,_n16##y,z,c), I[1021] = (T)(img)(_n14##x,_n16##y,z,c), I[1022] = (T)(img)(_n15##x,_n16##y,z,c), I[1023] = (T)(img)(_n16##x,_n16##y,z,c); - -// Define 4x4x4 loop macros -//---------------------------- -#define cimg_for4x4x4(img,x,y,z,c,I,T) \ - cimg_for4((img)._depth,z) cimg_for4((img)._height,y) for (int x = 0, \ - _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = (int)( \ - (I[0] = I[1] = (T)(img)(0,_p1##y,_p1##z,c)), \ - (I[4] = I[5] = (T)(img)(0,y,_p1##z,c)), \ - (I[8] = I[9] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[12] = I[13] = (T)(img)(0,_n2##y,_p1##z,c)), \ - (I[16] = I[17] = (T)(img)(0,_p1##y,z,c)), \ - (I[20] = I[21] = (T)(img)(0,y,z,c)), \ - (I[24] = I[25] = (T)(img)(0,_n1##y,z,c)), \ - (I[28] = I[29] = (T)(img)(0,_n2##y,z,c)), \ - (I[32] = I[33] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[36] = I[37] = (T)(img)(0,y,_n1##z,c)), \ - (I[40] = I[41] = (T)(img)(0,_n1##y,_n1##z,c)), \ - (I[44] = I[45] = (T)(img)(0,_n2##y,_n1##z,c)), \ - (I[48] = I[49] = (T)(img)(0,_p1##y,_n2##z,c)), \ - (I[52] = I[53] = (T)(img)(0,y,_n2##z,c)), \ - (I[56] = I[57] = (T)(img)(0,_n1##y,_n2##z,c)), \ - (I[60] = I[61] = (T)(img)(0,_n2##y,_n2##z,c)), \ - (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[6] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[10] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[14] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[22] = (T)(img)(_n1##x,y,z,c)), \ - (I[26] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[34] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[38] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[42] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[46] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[50] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[54] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[58] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[62] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - 2>=((img)._width)?(img).width()-1:2); \ - (_n2##x<(img).width() && ( \ - (I[3] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[7] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[11] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[15] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[23] = (T)(img)(_n2##x,y,z,c)), \ - (I[27] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[35] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[39] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[43] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[47] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[51] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[55] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[59] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[63] = (T)(img)(_n2##x,_n2##y,_n2##z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], \ - I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for_in4x4x4(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in4((img)._depth,z0,z1,z) cimg_for_in4((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = (int)( \ - (I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[4] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[8] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[12] = (T)(img)(_p1##x,_n2##y,_p1##z,c)), \ - (I[16] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[20] = (T)(img)(_p1##x,y,z,c)), \ - (I[24] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[28] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[32] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[36] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[40] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[44] = (T)(img)(_p1##x,_n2##y,_n1##z,c)), \ - (I[48] = (T)(img)(_p1##x,_p1##y,_n2##z,c)), \ - (I[52] = (T)(img)(_p1##x,y,_n2##z,c)), \ - (I[56] = (T)(img)(_p1##x,_n1##y,_n2##z,c)), \ - (I[60] = (T)(img)(_p1##x,_n2##y,_n2##z,c)), \ - (I[1] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[5] = (T)(img)(x,y,_p1##z,c)), \ - (I[9] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[13] = (T)(img)(x,_n2##y,_p1##z,c)), \ - (I[17] = (T)(img)(x,_p1##y,z,c)), \ - (I[21] = (T)(img)(x,y,z,c)), \ - (I[25] = (T)(img)(x,_n1##y,z,c)), \ - (I[29] = (T)(img)(x,_n2##y,z,c)), \ - (I[33] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[37] = (T)(img)(x,y,_n1##z,c)), \ - (I[41] = (T)(img)(x,_n1##y,_n1##z,c)), \ - (I[45] = (T)(img)(x,_n2##y,_n1##z,c)), \ - (I[49] = (T)(img)(x,_p1##y,_n2##z,c)), \ - (I[53] = (T)(img)(x,y,_n2##z,c)), \ - (I[57] = (T)(img)(x,_n1##y,_n2##z,c)), \ - (I[61] = (T)(img)(x,_n2##y,_n2##z,c)), \ - (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[6] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[10] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[14] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[22] = (T)(img)(_n1##x,y,z,c)), \ - (I[26] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[30] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[34] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[38] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[42] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[46] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[50] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[54] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[58] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[62] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - x+2>=(img).width()?(img).width()-1:x+2); \ - x<=(int)(x1) && ((_n2##x<(img).width() && ( \ - (I[3] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[7] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[11] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[15] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[23] = (T)(img)(_n2##x,y,z,c)), \ - (I[27] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[31] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[35] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[39] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[43] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[47] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[51] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[55] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[59] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[63] = (T)(img)(_n2##x,_n2##y,_n2##z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], \ - I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], \ - I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], \ - I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_get4x4x4(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[1] = (T)(img)(x,_p1##y,_p1##z,c), I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[3] = (T)(img)(_n2##x,_p1##y,_p1##z,c), \ - I[4] = (T)(img)(_p1##x,y,_p1##z,c), I[5] = (T)(img)(x,y,_p1##z,c), I[6] = (T)(img)(_n1##x,y,_p1##z,c), I[7] = (T)(img)(_n2##x,y,_p1##z,c), \ - I[8] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[9] = (T)(img)(x,_n1##y,_p1##z,c), I[10] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[11] = (T)(img)(_n2##x,_n1##y,_p1##z,c), \ - I[12] = (T)(img)(_p1##x,_n2##y,_p1##z,c), I[13] = (T)(img)(x,_n2##y,_p1##z,c), I[14] = (T)(img)(_n1##x,_n2##y,_p1##z,c), I[15] = (T)(img)(_n2##x,_n2##y,_p1##z,c), \ - I[16] = (T)(img)(_p1##x,_p1##y,z,c), I[17] = (T)(img)(x,_p1##y,z,c), I[18] = (T)(img)(_n1##x,_p1##y,z,c), I[19] = (T)(img)(_n2##x,_p1##y,z,c), \ - I[20] = (T)(img)(_p1##x,y,z,c), I[21] = (T)(img)(x,y,z,c), I[22] = (T)(img)(_n1##x,y,z,c), I[23] = (T)(img)(_n2##x,y,z,c), \ - I[24] = (T)(img)(_p1##x,_n1##y,z,c), I[25] = (T)(img)(x,_n1##y,z,c), I[26] = (T)(img)(_n1##x,_n1##y,z,c), I[27] = (T)(img)(_n2##x,_n1##y,z,c), \ - I[28] = (T)(img)(_p1##x,_n2##y,z,c), I[29] = (T)(img)(x,_n2##y,z,c), I[30] = (T)(img)(_n1##x,_n2##y,z,c), I[31] = (T)(img)(_n2##x,_n2##y,z,c), \ - I[32] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[33] = (T)(img)(x,_p1##y,_n1##z,c), I[34] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[35] = (T)(img)(_n2##x,_p1##y,_n1##z,c), \ - I[36] = (T)(img)(_p1##x,y,_n1##z,c), I[37] = (T)(img)(x,y,_n1##z,c), I[38] = (T)(img)(_n1##x,y,_n1##z,c), I[39] = (T)(img)(_n2##x,y,_n1##z,c), \ - I[40] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[41] = (T)(img)(x,_n1##y,_n1##z,c), I[42] = (T)(img)(_n1##x,_n1##y,_n1##z,c), I[43] = (T)(img)(_n2##x,_n1##y,_n1##z,c), \ - I[44] = (T)(img)(_p1##x,_n2##y,_n1##z,c), I[45] = (T)(img)(x,_n2##y,_n1##z,c), I[46] = (T)(img)(_n1##x,_n2##y,_n1##z,c), I[47] = (T)(img)(_n2##x,_n2##y,_n1##z,c), \ - I[48] = (T)(img)(_p1##x,_p1##y,_n2##z,c), I[49] = (T)(img)(x,_p1##y,_n2##z,c), I[50] = (T)(img)(_n1##x,_p1##y,_n2##z,c), I[51] = (T)(img)(_n2##x,_p1##y,_n2##z,c), \ - I[52] = (T)(img)(_p1##x,y,_n2##z,c), I[53] = (T)(img)(x,y,_n2##z,c), I[54] = (T)(img)(_n1##x,y,_n2##z,c), I[55] = (T)(img)(_n2##x,y,_n2##z,c), \ - I[56] = (T)(img)(_p1##x,_n1##y,_n2##z,c), I[57] = (T)(img)(x,_n1##y,_n2##z,c), I[58] = (T)(img)(_n1##x,_n1##y,_n2##z,c), I[59] = (T)(img)(_n2##x,_n1##y,_n2##z,c), \ - I[60] = (T)(img)(_p1##x,_n2##y,_n2##z,c), I[61] = (T)(img)(x,_n2##y,_n2##z,c), I[62] = (T)(img)(_n1##x,_n2##y,_n2##z,c), I[63] = (T)(img)(_n2##x,_n2##y,_n2##z,c); - -// Define 5x5x5 loop macros -//---------------------------- -#define cimg_for5x5x5(img,x,y,z,c,I,T) \ - cimg_for5((img)._depth,z) cimg_for5((img)._height,y) for (int x = 0, \ - _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = (int)( \ - (I[0] = I[1] = I[2] = (T)(img)(0,_p2##y,_p2##z,c)), \ - (I[5] = I[6] = I[7] = (T)(img)(0,_p1##y,_p2##z,c)), \ - (I[10] = I[11] = I[12] = (T)(img)(0,y,_p2##z,c)), \ - (I[15] = I[16] = I[17] = (T)(img)(0,_n1##y,_p2##z,c)), \ - (I[20] = I[21] = I[22] = (T)(img)(0,_n2##y,_p2##z,c)), \ - (I[25] = I[26] = I[27] = (T)(img)(0,_p2##y,_p1##z,c)), \ - (I[30] = I[31] = I[32] = (T)(img)(0,_p1##y,_p1##z,c)), \ - (I[35] = I[36] = I[37] = (T)(img)(0,y,_p1##z,c)), \ - (I[40] = I[41] = I[42] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[45] = I[46] = I[47] = (T)(img)(0,_n2##y,_p1##z,c)), \ - (I[50] = I[51] = I[52] = (T)(img)(0,_p2##y,z,c)), \ - (I[55] = I[56] = I[57] = (T)(img)(0,_p1##y,z,c)), \ - (I[60] = I[61] = I[62] = (T)(img)(0,y,z,c)), \ - (I[65] = I[66] = I[67] = (T)(img)(0,_n1##y,z,c)), \ - (I[70] = I[71] = I[72] = (T)(img)(0,_n2##y,z,c)), \ - (I[75] = I[76] = I[77] = (T)(img)(0,_p2##y,_n1##z,c)), \ - (I[80] = I[81] = I[82] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[85] = I[86] = I[87] = (T)(img)(0,y,_n1##z,c)), \ - (I[90] = I[91] = I[92] = (T)(img)(0,_n1##y,_n1##z,c)), \ - (I[95] = I[96] = I[97] = (T)(img)(0,_n2##y,_n1##z,c)), \ - (I[100] = I[101] = I[102] = (T)(img)(0,_p2##y,_n2##z,c)), \ - (I[105] = I[106] = I[107] = (T)(img)(0,_p1##y,_n2##z,c)), \ - (I[110] = I[111] = I[112] = (T)(img)(0,y,_n2##z,c)), \ - (I[115] = I[116] = I[117] = (T)(img)(0,_n1##y,_n2##z,c)), \ - (I[120] = I[121] = I[122] = (T)(img)(0,_n2##y,_n2##z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[8] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[13] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[18] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[23] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[28] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[33] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[38] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[43] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[48] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[53] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[58] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[73] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[83] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[88] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[93] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[98] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[103] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[108] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[113] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[118] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[123] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - 2>=((img)._width)?(img).width()-1:2); \ - (_n2##x<(img).width() && ( \ - (I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[9] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[14] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[19] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[24] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[29] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[34] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[39] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[44] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[49] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[54] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[59] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[74] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[84] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[89] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[94] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[99] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[104] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[109] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[114] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[119] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[124] = (T)(img)(_n2##x,_n2##y,_n2##z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ - I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], \ - I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], \ - I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], \ - I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], \ - I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], \ - I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_for_in5x5x5(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in5((img)._depth,z0,z1,z) cimg_for_in5((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = (int)( \ - (I[0] = (T)(img)(_p2##x,_p2##y,_p2##z,c)), \ - (I[5] = (T)(img)(_p2##x,_p1##y,_p2##z,c)), \ - (I[10] = (T)(img)(_p2##x,y,_p2##z,c)), \ - (I[15] = (T)(img)(_p2##x,_n1##y,_p2##z,c)), \ - (I[20] = (T)(img)(_p2##x,_n2##y,_p2##z,c)), \ - (I[25] = (T)(img)(_p2##x,_p2##y,_p1##z,c)), \ - (I[30] = (T)(img)(_p2##x,_p1##y,_p1##z,c)), \ - (I[35] = (T)(img)(_p2##x,y,_p1##z,c)), \ - (I[40] = (T)(img)(_p2##x,_n1##y,_p1##z,c)), \ - (I[45] = (T)(img)(_p2##x,_n2##y,_p1##z,c)), \ - (I[50] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[55] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[60] = (T)(img)(_p2##x,y,z,c)), \ - (I[65] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[70] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[75] = (T)(img)(_p2##x,_p2##y,_n1##z,c)), \ - (I[80] = (T)(img)(_p2##x,_p1##y,_n1##z,c)), \ - (I[85] = (T)(img)(_p2##x,y,_n1##z,c)), \ - (I[90] = (T)(img)(_p2##x,_n1##y,_n1##z,c)), \ - (I[95] = (T)(img)(_p2##x,_n2##y,_n1##z,c)), \ - (I[100] = (T)(img)(_p2##x,_p2##y,_n2##z,c)), \ - (I[105] = (T)(img)(_p2##x,_p1##y,_n2##z,c)), \ - (I[110] = (T)(img)(_p2##x,y,_n2##z,c)), \ - (I[115] = (T)(img)(_p2##x,_n1##y,_n2##z,c)), \ - (I[120] = (T)(img)(_p2##x,_n2##y,_n2##z,c)), \ - (I[1] = (T)(img)(_p1##x,_p2##y,_p2##z,c)), \ - (I[6] = (T)(img)(_p1##x,_p1##y,_p2##z,c)), \ - (I[11] = (T)(img)(_p1##x,y,_p2##z,c)), \ - (I[16] = (T)(img)(_p1##x,_n1##y,_p2##z,c)), \ - (I[21] = (T)(img)(_p1##x,_n2##y,_p2##z,c)), \ - (I[26] = (T)(img)(_p1##x,_p2##y,_p1##z,c)), \ - (I[31] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[36] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[41] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[46] = (T)(img)(_p1##x,_n2##y,_p1##z,c)), \ - (I[51] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[56] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[61] = (T)(img)(_p1##x,y,z,c)), \ - (I[66] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[71] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[76] = (T)(img)(_p1##x,_p2##y,_n1##z,c)), \ - (I[81] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[86] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[91] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[96] = (T)(img)(_p1##x,_n2##y,_n1##z,c)), \ - (I[101] = (T)(img)(_p1##x,_p2##y,_n2##z,c)), \ - (I[106] = (T)(img)(_p1##x,_p1##y,_n2##z,c)), \ - (I[111] = (T)(img)(_p1##x,y,_n2##z,c)), \ - (I[116] = (T)(img)(_p1##x,_n1##y,_n2##z,c)), \ - (I[121] = (T)(img)(_p1##x,_n2##y,_n2##z,c)), \ - (I[2] = (T)(img)(x,_p2##y,_p2##z,c)), \ - (I[7] = (T)(img)(x,_p1##y,_p2##z,c)), \ - (I[12] = (T)(img)(x,y,_p2##z,c)), \ - (I[17] = (T)(img)(x,_n1##y,_p2##z,c)), \ - (I[22] = (T)(img)(x,_n2##y,_p2##z,c)), \ - (I[27] = (T)(img)(x,_p2##y,_p1##z,c)), \ - (I[32] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[37] = (T)(img)(x,y,_p1##z,c)), \ - (I[42] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[47] = (T)(img)(x,_n2##y,_p1##z,c)), \ - (I[52] = (T)(img)(x,_p2##y,z,c)), \ - (I[57] = (T)(img)(x,_p1##y,z,c)), \ - (I[62] = (T)(img)(x,y,z,c)), \ - (I[67] = (T)(img)(x,_n1##y,z,c)), \ - (I[72] = (T)(img)(x,_n2##y,z,c)), \ - (I[77] = (T)(img)(x,_p2##y,_n1##z,c)), \ - (I[82] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[87] = (T)(img)(x,y,_n1##z,c)), \ - (I[92] = (T)(img)(x,_n1##y,_n1##z,c)), \ - (I[97] = (T)(img)(x,_n2##y,_n1##z,c)), \ - (I[102] = (T)(img)(x,_p2##y,_n2##z,c)), \ - (I[107] = (T)(img)(x,_p1##y,_n2##z,c)), \ - (I[112] = (T)(img)(x,y,_n2##z,c)), \ - (I[117] = (T)(img)(x,_n1##y,_n2##z,c)), \ - (I[122] = (T)(img)(x,_n2##y,_n2##z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[8] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[13] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[18] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[23] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[28] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[33] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[38] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[43] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[48] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[53] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[58] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[63] = (T)(img)(_n1##x,y,z,c)), \ - (I[68] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[73] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[78] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[83] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[88] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[93] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[98] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[103] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[108] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[113] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[118] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[123] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - x+2>=(img).width()?(img).width()-1:x+2); \ - x<=(int)(x1) && ((_n2##x<(img).width() && ( \ - (I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[9] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[14] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[19] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[24] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[29] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[34] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[39] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[44] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[49] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[54] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[59] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[64] = (T)(img)(_n2##x,y,z,c)), \ - (I[69] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[74] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[79] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[84] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[89] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[94] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[99] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[104] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[109] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[114] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[119] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[124] = (T)(img)(_n2##x,_n2##y,_n2##z,c)),1)) || \ - _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ - I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ - I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ - I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ - I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ - I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \ - I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], \ - I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], \ - I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], \ - I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], \ - I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], \ - I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], \ - I[95] = I[96], I[96] = I[97], I[97] = I[98], I[98] = I[99], \ - I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], \ - I[110] = I[111], I[111] = I[112], I[112] = I[113], I[113] = I[114], \ - I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) - -#define cimg_get5x5x5(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p2##x,_p2##y,_p2##z,c), I[1] = (T)(img)(_p1##x,_p2##y,_p2##z,c), I[2] = (T)(img)(x,_p2##y,_p2##z,c), I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c), I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c), \ - I[5] = (T)(img)(_p2##x,_p1##y,_p2##z,c), I[6] = (T)(img)(_p1##x,_p1##y,_p2##z,c), I[7] = (T)(img)(x,_p1##y,_p2##z,c), I[8] = (T)(img)(_n1##x,_p1##y,_p2##z,c), I[9] = (T)(img)(_n2##x,_p1##y,_p2##z,c), \ - I[10] = (T)(img)(_p2##x,y,_p2##z,c), I[11] = (T)(img)(_p1##x,y,_p2##z,c), I[12] = (T)(img)(x,y,_p2##z,c), I[13] = (T)(img)(_n1##x,y,_p2##z,c), I[14] = (T)(img)(_n2##x,y,_p2##z,c), \ - I[15] = (T)(img)(_p2##x,_n1##y,_p2##z,c), I[16] = (T)(img)(_p1##x,_n1##y,_p2##z,c), I[17] = (T)(img)(x,_n1##y,_p2##z,c), I[18] = (T)(img)(_n1##x,_n1##y,_p2##z,c), I[19] = (T)(img)(_n2##x,_n1##y,_p2##z,c), \ - I[20] = (T)(img)(_p2##x,_n2##y,_p2##z,c), I[21] = (T)(img)(_p1##x,_n2##y,_p2##z,c), I[22] = (T)(img)(x,_n2##y,_p2##z,c), I[23] = (T)(img)(_n1##x,_n2##y,_p2##z,c), I[24] = (T)(img)(_n2##x,_n2##y,_p2##z,c), \ - I[25] = (T)(img)(_p2##x,_p2##y,_p1##z,c), I[26] = (T)(img)(_p1##x,_p2##y,_p1##z,c), I[27] = (T)(img)(x,_p2##y,_p1##z,c), I[28] = (T)(img)(_n1##x,_p2##y,_p1##z,c), I[29] = (T)(img)(_n2##x,_p2##y,_p1##z,c), \ - I[30] = (T)(img)(_p2##x,_p1##y,_p1##z,c), I[31] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[32] = (T)(img)(x,_p1##y,_p1##z,c), I[33] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[34] = (T)(img)(_n2##x,_p1##y,_p1##z,c), \ - I[35] = (T)(img)(_p2##x,y,_p1##z,c), I[36] = (T)(img)(_p1##x,y,_p1##z,c), I[37] = (T)(img)(x,y,_p1##z,c), I[38] = (T)(img)(_n1##x,y,_p1##z,c), I[39] = (T)(img)(_n2##x,y,_p1##z,c), \ - I[40] = (T)(img)(_p2##x,_n1##y,_p1##z,c), I[41] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[42] = (T)(img)(x,_n1##y,_p1##z,c), I[43] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[44] = (T)(img)(_n2##x,_n1##y,_p1##z,c), \ - I[45] = (T)(img)(_p2##x,_n2##y,_p1##z,c), I[46] = (T)(img)(_p1##x,_n2##y,_p1##z,c), I[47] = (T)(img)(x,_n2##y,_p1##z,c), I[48] = (T)(img)(_n1##x,_n2##y,_p1##z,c), I[49] = (T)(img)(_n2##x,_n2##y,_p1##z,c), \ - I[50] = (T)(img)(_p2##x,_p2##y,z,c), I[51] = (T)(img)(_p1##x,_p2##y,z,c), I[52] = (T)(img)(x,_p2##y,z,c), I[53] = (T)(img)(_n1##x,_p2##y,z,c), I[54] = (T)(img)(_n2##x,_p2##y,z,c), \ - I[55] = (T)(img)(_p2##x,_p1##y,z,c), I[56] = (T)(img)(_p1##x,_p1##y,z,c), I[57] = (T)(img)(x,_p1##y,z,c), I[58] = (T)(img)(_n1##x,_p1##y,z,c), I[59] = (T)(img)(_n2##x,_p1##y,z,c), \ - I[60] = (T)(img)(_p2##x,y,z,c), I[61] = (T)(img)(_p1##x,y,z,c), I[62] = (T)(img)(x,y,z,c), I[63] = (T)(img)(_n1##x,y,z,c), I[64] = (T)(img)(_n2##x,y,z,c), \ - I[65] = (T)(img)(_p2##x,_n1##y,z,c), I[66] = (T)(img)(_p1##x,_n1##y,z,c), I[67] = (T)(img)(x,_n1##y,z,c), I[68] = (T)(img)(_n1##x,_n1##y,z,c), I[69] = (T)(img)(_n2##x,_n1##y,z,c), \ - I[70] = (T)(img)(_p2##x,_n2##y,z,c), I[71] = (T)(img)(_p1##x,_n2##y,z,c), I[72] = (T)(img)(x,_n2##y,z,c), I[73] = (T)(img)(_n1##x,_n2##y,z,c), I[74] = (T)(img)(_n2##x,_n2##y,z,c), \ - I[75] = (T)(img)(_p2##x,_p2##y,_n1##z,c), I[76] = (T)(img)(_p1##x,_p2##y,_n1##z,c), I[77] = (T)(img)(x,_p2##y,_n1##z,c), I[78] = (T)(img)(_n1##x,_p2##y,_n1##z,c), I[79] = (T)(img)(_n2##x,_p2##y,_n1##z,c), \ - I[80] = (T)(img)(_p2##x,_p1##y,_n1##z,c), I[81] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[82] = (T)(img)(x,_p1##y,_n1##z,c), I[83] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[84] = (T)(img)(_n2##x,_p1##y,_n1##z,c), \ - I[85] = (T)(img)(_p2##x,y,_n1##z,c), I[86] = (T)(img)(_p1##x,y,_n1##z,c), I[87] = (T)(img)(x,y,_n1##z,c), I[88] = (T)(img)(_n1##x,y,_n1##z,c), I[89] = (T)(img)(_n2##x,y,_n1##z,c), \ - I[90] = (T)(img)(_p2##x,_n1##y,_n1##z,c), I[91] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[92] = (T)(img)(x,_n1##y,_n1##z,c), I[93] = (T)(img)(_n1##x,_n1##y,_n1##z,c), I[94] = (T)(img)(_n2##x,_n1##y,_n1##z,c), \ - I[95] = (T)(img)(_p2##x,_n2##y,_n1##z,c), I[96] = (T)(img)(_p1##x,_n2##y,_n1##z,c), I[97] = (T)(img)(x,_n2##y,_n1##z,c), I[98] = (T)(img)(_n1##x,_n2##y,_n1##z,c), I[99] = (T)(img)(_n2##x,_n2##y,_n1##z,c), \ - I[100] = (T)(img)(_p2##x,_p2##y,_n2##z,c), I[101] = (T)(img)(_p1##x,_p2##y,_n2##z,c), I[102] = (T)(img)(x,_p2##y,_n2##z,c), I[103] = (T)(img)(_n1##x,_p2##y,_n2##z,c), I[104] = (T)(img)(_n2##x,_p2##y,_n2##z,c), \ - I[105] = (T)(img)(_p2##x,_p1##y,_n2##z,c), I[106] = (T)(img)(_p1##x,_p1##y,_n2##z,c), I[107] = (T)(img)(x,_p1##y,_n2##z,c), I[108] = (T)(img)(_n1##x,_p1##y,_n2##z,c), I[109] = (T)(img)(_n2##x,_p1##y,_n2##z,c), \ - I[110] = (T)(img)(_p2##x,y,_n2##z,c), I[111] = (T)(img)(_p1##x,y,_n2##z,c), I[112] = (T)(img)(x,y,_n2##z,c), I[113] = (T)(img)(_n1##x,y,_n2##z,c), I[114] = (T)(img)(_n2##x,y,_n2##z,c), \ - I[115] = (T)(img)(_p2##x,_n1##y,_n2##z,c), I[116] = (T)(img)(_p1##x,_n1##y,_n2##z,c), I[117] = (T)(img)(x,_n1##y,_n2##z,c), I[118] = (T)(img)(_n1##x,_n1##y,_n2##z,c), I[119] = (T)(img)(_n2##x,_n1##y,_n2##z,c), \ - I[120] = (T)(img)(_p2##x,_n2##y,_n2##z,c), I[121] = (T)(img)(_p1##x,_n2##y,_n2##z,c), I[122] = (T)(img)(x,_n2##y,_n2##z,c), I[123] = (T)(img)(_n1##x,_n2##y,_n2##z,c), I[124] = (T)(img)(_n2##x,_n2##y,_n2##z,c); - -// Define 6x6x6 loop macros -//---------------------------- -#define cimg_for6x6x6(img,x,y,z,c,I,T) \ - cimg_for6((img)._depth,z) cimg_for6((img)._height,y) for (int x = 0, \ - _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = (int)( \ - (I[0] = I[1] = I[2] = (T)(img)(0,_p2##y,_p2##z,c)), \ - (I[6] = I[7] = I[8] = (T)(img)(0,_p1##y,_p2##z,c)), \ - (I[12] = I[13] = I[14] = (T)(img)(0,y,_p2##z,c)), \ - (I[18] = I[19] = I[20] = (T)(img)(0,_n1##y,_p2##z,c)), \ - (I[24] = I[25] = I[26] = (T)(img)(0,_n2##y,_p2##z,c)), \ - (I[30] = I[31] = I[32] = (T)(img)(0,_n3##y,_p2##z,c)), \ - (I[36] = I[37] = I[38] = (T)(img)(0,_p2##y,_p1##z,c)), \ - (I[42] = I[43] = I[44] = (T)(img)(0,_p1##y,_p1##z,c)), \ - (I[48] = I[49] = I[50] = (T)(img)(0,y,_p1##z,c)), \ - (I[54] = I[55] = I[56] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[60] = I[61] = I[62] = (T)(img)(0,_n2##y,_p1##z,c)), \ - (I[66] = I[67] = I[68] = (T)(img)(0,_n3##y,_p1##z,c)), \ - (I[72] = I[73] = I[74] = (T)(img)(0,_p2##y,z,c)), \ - (I[78] = I[79] = I[80] = (T)(img)(0,_p1##y,z,c)), \ - (I[84] = I[85] = I[86] = (T)(img)(0,y,z,c)), \ - (I[90] = I[91] = I[92] = (T)(img)(0,_n1##y,z,c)), \ - (I[96] = I[97] = I[98] = (T)(img)(0,_n2##y,z,c)), \ - (I[102] = I[103] = I[104] = (T)(img)(0,_n3##y,z,c)), \ - (I[108] = I[109] = I[110] = (T)(img)(0,_p2##y,_n1##z,c)), \ - (I[114] = I[115] = I[116] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[120] = I[121] = I[122] = (T)(img)(0,y,_n1##z,c)), \ - (I[126] = I[127] = I[128] = (T)(img)(0,_n1##y,_n1##z,c)), \ - (I[132] = I[133] = I[134] = (T)(img)(0,_n2##y,_n1##z,c)), \ - (I[138] = I[139] = I[140] = (T)(img)(0,_n3##y,_n1##z,c)), \ - (I[144] = I[145] = I[146] = (T)(img)(0,_p2##y,_n2##z,c)), \ - (I[150] = I[151] = I[152] = (T)(img)(0,_p1##y,_n2##z,c)), \ - (I[156] = I[157] = I[158] = (T)(img)(0,y,_n2##z,c)), \ - (I[162] = I[163] = I[164] = (T)(img)(0,_n1##y,_n2##z,c)), \ - (I[168] = I[169] = I[170] = (T)(img)(0,_n2##y,_n2##z,c)), \ - (I[174] = I[175] = I[176] = (T)(img)(0,_n3##y,_n2##z,c)), \ - (I[180] = I[181] = I[182] = (T)(img)(0,_p2##y,_n3##z,c)), \ - (I[186] = I[187] = I[188] = (T)(img)(0,_p1##y,_n3##z,c)), \ - (I[192] = I[193] = I[194] = (T)(img)(0,y,_n3##z,c)), \ - (I[198] = I[199] = I[200] = (T)(img)(0,_n1##y,_n3##z,c)), \ - (I[204] = I[205] = I[206] = (T)(img)(0,_n2##y,_n3##z,c)), \ - (I[210] = I[211] = I[212] = (T)(img)(0,_n3##y,_n3##z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[9] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[15] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[21] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[27] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[33] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[39] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[45] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[51] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[57] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[63] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[69] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[75] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[87] = (T)(img)(_n1##x,y,z,c)), \ - (I[93] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[117] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[123] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[129] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[135] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[141] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[147] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[153] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[159] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[165] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[171] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[177] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[183] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[189] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[195] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[201] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[207] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[213] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[10] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[16] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[22] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[28] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[34] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[40] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[46] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[52] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[58] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[64] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[70] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[76] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[88] = (T)(img)(_n2##x,y,z,c)), \ - (I[94] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[118] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[124] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[130] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[136] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[142] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[148] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[154] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[160] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[166] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[172] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[178] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[184] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[190] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[196] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[202] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[208] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[214] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - 3>=((img)._width)?(img).width()-1:3); \ - (_n3##x<(img).width() && ( \ - (I[5] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[11] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[17] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[23] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[29] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[35] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[41] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[47] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[53] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[59] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[65] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[71] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[77] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[89] = (T)(img)(_n3##x,y,z,c)), \ - (I[95] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[119] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[125] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[131] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[137] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[143] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[149] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[155] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[161] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[167] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[173] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[179] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[185] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[191] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[197] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[203] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[209] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[215] = (T)(img)(_n3##x,_n3##y,_n3##z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], \ - I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], \ - I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], \ - I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], \ - I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], \ - I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], \ - I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for_in6x6x6(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in6((img)._depth,z0,z1,z) cimg_for_in6((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = (int)( \ - (I[0] = (T)(img)(_p2##x,_p2##y,_p2##z,c)), \ - (I[6] = (T)(img)(_p2##x,_p1##y,_p2##z,c)), \ - (I[12] = (T)(img)(_p2##x,y,_p2##z,c)), \ - (I[18] = (T)(img)(_p2##x,_n1##y,_p2##z,c)), \ - (I[24] = (T)(img)(_p2##x,_n2##y,_p2##z,c)), \ - (I[30] = (T)(img)(_p2##x,_n3##y,_p2##z,c)), \ - (I[36] = (T)(img)(_p2##x,_p2##y,_p1##z,c)), \ - (I[42] = (T)(img)(_p2##x,_p1##y,_p1##z,c)), \ - (I[48] = (T)(img)(_p2##x,y,_p1##z,c)), \ - (I[54] = (T)(img)(_p2##x,_n1##y,_p1##z,c)), \ - (I[60] = (T)(img)(_p2##x,_n2##y,_p1##z,c)), \ - (I[66] = (T)(img)(_p2##x,_n3##y,_p1##z,c)), \ - (I[72] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[78] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[84] = (T)(img)(_p2##x,y,z,c)), \ - (I[90] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[96] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[102] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[108] = (T)(img)(_p2##x,_p2##y,_n1##z,c)), \ - (I[114] = (T)(img)(_p2##x,_p1##y,_n1##z,c)), \ - (I[120] = (T)(img)(_p2##x,y,_n1##z,c)), \ - (I[126] = (T)(img)(_p2##x,_n1##y,_n1##z,c)), \ - (I[132] = (T)(img)(_p2##x,_n2##y,_n1##z,c)), \ - (I[138] = (T)(img)(_p2##x,_n3##y,_n1##z,c)), \ - (I[144] = (T)(img)(_p2##x,_p2##y,_n2##z,c)), \ - (I[150] = (T)(img)(_p2##x,_p1##y,_n2##z,c)), \ - (I[156] = (T)(img)(_p2##x,y,_n2##z,c)), \ - (I[162] = (T)(img)(_p2##x,_n1##y,_n2##z,c)), \ - (I[168] = (T)(img)(_p2##x,_n2##y,_n2##z,c)), \ - (I[174] = (T)(img)(_p2##x,_n3##y,_n2##z,c)), \ - (I[180] = (T)(img)(_p2##x,_p2##y,_n3##z,c)), \ - (I[186] = (T)(img)(_p2##x,_p1##y,_n3##z,c)), \ - (I[192] = (T)(img)(_p2##x,y,_n3##z,c)), \ - (I[198] = (T)(img)(_p2##x,_n1##y,_n3##z,c)), \ - (I[204] = (T)(img)(_p2##x,_n2##y,_n3##z,c)), \ - (I[210] = (T)(img)(_p2##x,_n3##y,_n3##z,c)), \ - (I[1] = (T)(img)(_p1##x,_p2##y,_p2##z,c)), \ - (I[7] = (T)(img)(_p1##x,_p1##y,_p2##z,c)), \ - (I[13] = (T)(img)(_p1##x,y,_p2##z,c)), \ - (I[19] = (T)(img)(_p1##x,_n1##y,_p2##z,c)), \ - (I[25] = (T)(img)(_p1##x,_n2##y,_p2##z,c)), \ - (I[31] = (T)(img)(_p1##x,_n3##y,_p2##z,c)), \ - (I[37] = (T)(img)(_p1##x,_p2##y,_p1##z,c)), \ - (I[43] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[49] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[55] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[61] = (T)(img)(_p1##x,_n2##y,_p1##z,c)), \ - (I[67] = (T)(img)(_p1##x,_n3##y,_p1##z,c)), \ - (I[73] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[79] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[85] = (T)(img)(_p1##x,y,z,c)), \ - (I[91] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[97] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[103] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[109] = (T)(img)(_p1##x,_p2##y,_n1##z,c)), \ - (I[115] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[121] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[127] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[133] = (T)(img)(_p1##x,_n2##y,_n1##z,c)), \ - (I[139] = (T)(img)(_p1##x,_n3##y,_n1##z,c)), \ - (I[145] = (T)(img)(_p1##x,_p2##y,_n2##z,c)), \ - (I[151] = (T)(img)(_p1##x,_p1##y,_n2##z,c)), \ - (I[157] = (T)(img)(_p1##x,y,_n2##z,c)), \ - (I[163] = (T)(img)(_p1##x,_n1##y,_n2##z,c)), \ - (I[169] = (T)(img)(_p1##x,_n2##y,_n2##z,c)), \ - (I[175] = (T)(img)(_p1##x,_n3##y,_n2##z,c)), \ - (I[181] = (T)(img)(_p1##x,_p2##y,_n3##z,c)), \ - (I[187] = (T)(img)(_p1##x,_p1##y,_n3##z,c)), \ - (I[193] = (T)(img)(_p1##x,y,_n3##z,c)), \ - (I[199] = (T)(img)(_p1##x,_n1##y,_n3##z,c)), \ - (I[205] = (T)(img)(_p1##x,_n2##y,_n3##z,c)), \ - (I[211] = (T)(img)(_p1##x,_n3##y,_n3##z,c)), \ - (I[2] = (T)(img)(x,_p2##y,_p2##z,c)), \ - (I[8] = (T)(img)(x,_p1##y,_p2##z,c)), \ - (I[14] = (T)(img)(x,y,_p2##z,c)), \ - (I[20] = (T)(img)(x,_n1##y,_p2##z,c)), \ - (I[26] = (T)(img)(x,_n2##y,_p2##z,c)), \ - (I[32] = (T)(img)(x,_n3##y,_p2##z,c)), \ - (I[38] = (T)(img)(x,_p2##y,_p1##z,c)), \ - (I[44] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[50] = (T)(img)(x,y,_p1##z,c)), \ - (I[56] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[62] = (T)(img)(x,_n2##y,_p1##z,c)), \ - (I[68] = (T)(img)(x,_n3##y,_p1##z,c)), \ - (I[74] = (T)(img)(x,_p2##y,z,c)), \ - (I[80] = (T)(img)(x,_p1##y,z,c)), \ - (I[86] = (T)(img)(x,y,z,c)), \ - (I[92] = (T)(img)(x,_n1##y,z,c)), \ - (I[98] = (T)(img)(x,_n2##y,z,c)), \ - (I[104] = (T)(img)(x,_n3##y,z,c)), \ - (I[110] = (T)(img)(x,_p2##y,_n1##z,c)), \ - (I[116] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[122] = (T)(img)(x,y,_n1##z,c)), \ - (I[128] = (T)(img)(x,_n1##y,_n1##z,c)), \ - (I[134] = (T)(img)(x,_n2##y,_n1##z,c)), \ - (I[140] = (T)(img)(x,_n3##y,_n1##z,c)), \ - (I[146] = (T)(img)(x,_p2##y,_n2##z,c)), \ - (I[152] = (T)(img)(x,_p1##y,_n2##z,c)), \ - (I[158] = (T)(img)(x,y,_n2##z,c)), \ - (I[164] = (T)(img)(x,_n1##y,_n2##z,c)), \ - (I[170] = (T)(img)(x,_n2##y,_n2##z,c)), \ - (I[176] = (T)(img)(x,_n3##y,_n2##z,c)), \ - (I[182] = (T)(img)(x,_p2##y,_n3##z,c)), \ - (I[188] = (T)(img)(x,_p1##y,_n3##z,c)), \ - (I[194] = (T)(img)(x,y,_n3##z,c)), \ - (I[200] = (T)(img)(x,_n1##y,_n3##z,c)), \ - (I[206] = (T)(img)(x,_n2##y,_n3##z,c)), \ - (I[212] = (T)(img)(x,_n3##y,_n3##z,c)), \ - (I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[9] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[15] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[21] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[27] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[33] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[39] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[45] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[51] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[57] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[63] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[69] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[75] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[81] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[87] = (T)(img)(_n1##x,y,z,c)), \ - (I[93] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[99] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[105] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[111] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[117] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[123] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[129] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[135] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[141] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[147] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[153] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[159] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[165] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[171] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[177] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[183] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[189] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[195] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[201] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[207] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[213] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[10] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[16] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[22] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[28] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[34] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[40] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[46] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[52] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[58] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[64] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[70] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[76] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[82] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[88] = (T)(img)(_n2##x,y,z,c)), \ - (I[94] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[100] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[106] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[112] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[118] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[124] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[130] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[136] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[142] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[148] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[154] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[160] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[166] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[172] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[178] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[184] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[190] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[196] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[202] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[208] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[214] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - x+3>=(img).width()?(img).width()-1:x+3); \ - x<=(int)(x1) && ((_n3##x<(img).width() && ( \ - (I[5] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[11] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[17] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[23] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[29] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[35] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[41] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[47] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[53] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[59] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[65] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[71] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[77] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[83] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[89] = (T)(img)(_n3##x,y,z,c)), \ - (I[95] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[101] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[107] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[113] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[119] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[125] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[131] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[137] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[143] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[149] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[155] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[161] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[167] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[173] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[179] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[185] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[191] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[197] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[203] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[209] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[215] = (T)(img)(_n3##x,_n3##y,_n3##z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ - I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ - I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ - I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ - I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ - I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \ - I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], \ - I[60] = I[61], I[61] = I[62], I[62] = I[63], I[63] = I[64], I[64] = I[65], \ - I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], \ - I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], \ - I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], \ - I[102] = I[103], I[103] = I[104], I[104] = I[105], I[105] = I[106], I[106] = I[107], \ - I[108] = I[109], I[109] = I[110], I[110] = I[111], I[111] = I[112], I[112] = I[113], \ - I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], \ - I[132] = I[133], I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], \ - I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], \ - I[150] = I[151], I[151] = I[152], I[152] = I[153], I[153] = I[154], I[154] = I[155], \ - I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], I[160] = I[161], \ - I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], \ - I[174] = I[175], I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], \ - I[180] = I[181], I[181] = I[182], I[182] = I[183], I[183] = I[184], I[184] = I[185], \ - I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], \ - I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], I[202] = I[203], \ - I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_get6x6x6(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p2##x,_p2##y,_p2##z,c), I[1] = (T)(img)(_p1##x,_p2##y,_p2##z,c), I[2] = (T)(img)(x,_p2##y,_p2##z,c), I[3] = (T)(img)(_n1##x,_p2##y,_p2##z,c), I[4] = (T)(img)(_n2##x,_p2##y,_p2##z,c), I[5] = (T)(img)(_n3##x,_p2##y,_p2##z,c), \ - I[6] = (T)(img)(_p2##x,_p1##y,_p2##z,c), I[7] = (T)(img)(_p1##x,_p1##y,_p2##z,c), I[8] = (T)(img)(x,_p1##y,_p2##z,c), I[9] = (T)(img)(_n1##x,_p1##y,_p2##z,c), I[10] = (T)(img)(_n2##x,_p1##y,_p2##z,c), I[11] = (T)(img)(_n3##x,_p1##y,_p2##z,c), \ - I[12] = (T)(img)(_p2##x,y,_p2##z,c), I[13] = (T)(img)(_p1##x,y,_p2##z,c), I[14] = (T)(img)(x,y,_p2##z,c), I[15] = (T)(img)(_n1##x,y,_p2##z,c), I[16] = (T)(img)(_n2##x,y,_p2##z,c), I[17] = (T)(img)(_n3##x,y,_p2##z,c), \ - I[18] = (T)(img)(_p2##x,_n1##y,_p2##z,c), I[19] = (T)(img)(_p1##x,_n1##y,_p2##z,c), I[20] = (T)(img)(x,_n1##y,_p2##z,c), I[21] = (T)(img)(_n1##x,_n1##y,_p2##z,c), I[22] = (T)(img)(_n2##x,_n1##y,_p2##z,c), I[23] = (T)(img)(_n3##x,_n1##y,_p2##z,c), \ - I[24] = (T)(img)(_p2##x,_n2##y,_p2##z,c), I[25] = (T)(img)(_p1##x,_n2##y,_p2##z,c), I[26] = (T)(img)(x,_n2##y,_p2##z,c), I[27] = (T)(img)(_n1##x,_n2##y,_p2##z,c), I[28] = (T)(img)(_n2##x,_n2##y,_p2##z,c), I[29] = (T)(img)(_n3##x,_n2##y,_p2##z,c), \ - I[30] = (T)(img)(_p2##x,_n3##y,_p2##z,c), I[31] = (T)(img)(_p1##x,_n3##y,_p2##z,c), I[32] = (T)(img)(x,_n3##y,_p2##z,c), I[33] = (T)(img)(_n1##x,_n3##y,_p2##z,c), I[34] = (T)(img)(_n2##x,_n3##y,_p2##z,c), I[35] = (T)(img)(_n3##x,_n3##y,_p2##z,c), \ - I[36] = (T)(img)(_p2##x,_p2##y,_p1##z,c), I[37] = (T)(img)(_p1##x,_p2##y,_p1##z,c), I[38] = (T)(img)(x,_p2##y,_p1##z,c), I[39] = (T)(img)(_n1##x,_p2##y,_p1##z,c), I[40] = (T)(img)(_n2##x,_p2##y,_p1##z,c), I[41] = (T)(img)(_n3##x,_p2##y,_p1##z,c), \ - I[42] = (T)(img)(_p2##x,_p1##y,_p1##z,c), I[43] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[44] = (T)(img)(x,_p1##y,_p1##z,c), I[45] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[46] = (T)(img)(_n2##x,_p1##y,_p1##z,c), I[47] = (T)(img)(_n3##x,_p1##y,_p1##z,c), \ - I[48] = (T)(img)(_p2##x,y,_p1##z,c), I[49] = (T)(img)(_p1##x,y,_p1##z,c), I[50] = (T)(img)(x,y,_p1##z,c), I[51] = (T)(img)(_n1##x,y,_p1##z,c), I[52] = (T)(img)(_n2##x,y,_p1##z,c), I[53] = (T)(img)(_n3##x,y,_p1##z,c), \ - I[54] = (T)(img)(_p2##x,_n1##y,_p1##z,c), I[55] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[56] = (T)(img)(x,_n1##y,_p1##z,c), I[57] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[58] = (T)(img)(_n2##x,_n1##y,_p1##z,c), I[59] = (T)(img)(_n3##x,_n1##y,_p1##z,c), \ - I[60] = (T)(img)(_p2##x,_n2##y,_p1##z,c), I[61] = (T)(img)(_p1##x,_n2##y,_p1##z,c), I[62] = (T)(img)(x,_n2##y,_p1##z,c), I[63] = (T)(img)(_n1##x,_n2##y,_p1##z,c), I[64] = (T)(img)(_n2##x,_n2##y,_p1##z,c), I[65] = (T)(img)(_n3##x,_n2##y,_p1##z,c), \ - I[66] = (T)(img)(_p2##x,_n3##y,_p1##z,c), I[67] = (T)(img)(_p1##x,_n3##y,_p1##z,c), I[68] = (T)(img)(x,_n3##y,_p1##z,c), I[69] = (T)(img)(_n1##x,_n3##y,_p1##z,c), I[70] = (T)(img)(_n2##x,_n3##y,_p1##z,c), I[71] = (T)(img)(_n3##x,_n3##y,_p1##z,c), \ - I[72] = (T)(img)(_p2##x,_p2##y,z,c), I[73] = (T)(img)(_p1##x,_p2##y,z,c), I[74] = (T)(img)(x,_p2##y,z,c), I[75] = (T)(img)(_n1##x,_p2##y,z,c), I[76] = (T)(img)(_n2##x,_p2##y,z,c), I[77] = (T)(img)(_n3##x,_p2##y,z,c), \ - I[78] = (T)(img)(_p2##x,_p1##y,z,c), I[79] = (T)(img)(_p1##x,_p1##y,z,c), I[80] = (T)(img)(x,_p1##y,z,c), I[81] = (T)(img)(_n1##x,_p1##y,z,c), I[82] = (T)(img)(_n2##x,_p1##y,z,c), I[83] = (T)(img)(_n3##x,_p1##y,z,c), \ - I[84] = (T)(img)(_p2##x,y,z,c), I[85] = (T)(img)(_p1##x,y,z,c), I[86] = (T)(img)(x,y,z,c), I[87] = (T)(img)(_n1##x,y,z,c), I[88] = (T)(img)(_n2##x,y,z,c), I[89] = (T)(img)(_n3##x,y,z,c), \ - I[90] = (T)(img)(_p2##x,_n1##y,z,c), I[91] = (T)(img)(_p1##x,_n1##y,z,c), I[92] = (T)(img)(x,_n1##y,z,c), I[93] = (T)(img)(_n1##x,_n1##y,z,c), I[94] = (T)(img)(_n2##x,_n1##y,z,c), I[95] = (T)(img)(_n3##x,_n1##y,z,c), \ - I[96] = (T)(img)(_p2##x,_n2##y,z,c), I[97] = (T)(img)(_p1##x,_n2##y,z,c), I[98] = (T)(img)(x,_n2##y,z,c), I[99] = (T)(img)(_n1##x,_n2##y,z,c), I[100] = (T)(img)(_n2##x,_n2##y,z,c), I[101] = (T)(img)(_n3##x,_n2##y,z,c), \ - I[102] = (T)(img)(_p2##x,_n3##y,z,c), I[103] = (T)(img)(_p1##x,_n3##y,z,c), I[104] = (T)(img)(x,_n3##y,z,c), I[105] = (T)(img)(_n1##x,_n3##y,z,c), I[106] = (T)(img)(_n2##x,_n3##y,z,c), I[107] = (T)(img)(_n3##x,_n3##y,z,c), \ - I[108] = (T)(img)(_p2##x,_p2##y,_n1##z,c), I[109] = (T)(img)(_p1##x,_p2##y,_n1##z,c), I[110] = (T)(img)(x,_p2##y,_n1##z,c), I[111] = (T)(img)(_n1##x,_p2##y,_n1##z,c), I[112] = (T)(img)(_n2##x,_p2##y,_n1##z,c), I[113] = (T)(img)(_n3##x,_p2##y,_n1##z,c), \ - I[114] = (T)(img)(_p2##x,_p1##y,_n1##z,c), I[115] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[116] = (T)(img)(x,_p1##y,_n1##z,c), I[117] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[118] = (T)(img)(_n2##x,_p1##y,_n1##z,c), I[119] = (T)(img)(_n3##x,_p1##y,_n1##z,c), \ - I[120] = (T)(img)(_p2##x,y,_n1##z,c), I[121] = (T)(img)(_p1##x,y,_n1##z,c), I[122] = (T)(img)(x,y,_n1##z,c), I[123] = (T)(img)(_n1##x,y,_n1##z,c), I[124] = (T)(img)(_n2##x,y,_n1##z,c), I[125] = (T)(img)(_n3##x,y,_n1##z,c), \ - I[126] = (T)(img)(_p2##x,_n1##y,_n1##z,c), I[127] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[128] = (T)(img)(x,_n1##y,_n1##z,c), I[129] = (T)(img)(_n1##x,_n1##y,_n1##z,c), I[130] = (T)(img)(_n2##x,_n1##y,_n1##z,c), I[131] = (T)(img)(_n3##x,_n1##y,_n1##z,c), \ - I[132] = (T)(img)(_p2##x,_n2##y,_n1##z,c), I[133] = (T)(img)(_p1##x,_n2##y,_n1##z,c), I[134] = (T)(img)(x,_n2##y,_n1##z,c), I[135] = (T)(img)(_n1##x,_n2##y,_n1##z,c), I[136] = (T)(img)(_n2##x,_n2##y,_n1##z,c), I[137] = (T)(img)(_n3##x,_n2##y,_n1##z,c), \ - I[138] = (T)(img)(_p2##x,_n3##y,_n1##z,c), I[139] = (T)(img)(_p1##x,_n3##y,_n1##z,c), I[140] = (T)(img)(x,_n3##y,_n1##z,c), I[141] = (T)(img)(_n1##x,_n3##y,_n1##z,c), I[142] = (T)(img)(_n2##x,_n3##y,_n1##z,c), I[143] = (T)(img)(_n3##x,_n3##y,_n1##z,c), \ - I[144] = (T)(img)(_p2##x,_p2##y,_n2##z,c), I[145] = (T)(img)(_p1##x,_p2##y,_n2##z,c), I[146] = (T)(img)(x,_p2##y,_n2##z,c), I[147] = (T)(img)(_n1##x,_p2##y,_n2##z,c), I[148] = (T)(img)(_n2##x,_p2##y,_n2##z,c), I[149] = (T)(img)(_n3##x,_p2##y,_n2##z,c), \ - I[150] = (T)(img)(_p2##x,_p1##y,_n2##z,c), I[151] = (T)(img)(_p1##x,_p1##y,_n2##z,c), I[152] = (T)(img)(x,_p1##y,_n2##z,c), I[153] = (T)(img)(_n1##x,_p1##y,_n2##z,c), I[154] = (T)(img)(_n2##x,_p1##y,_n2##z,c), I[155] = (T)(img)(_n3##x,_p1##y,_n2##z,c), \ - I[156] = (T)(img)(_p2##x,y,_n2##z,c), I[157] = (T)(img)(_p1##x,y,_n2##z,c), I[158] = (T)(img)(x,y,_n2##z,c), I[159] = (T)(img)(_n1##x,y,_n2##z,c), I[160] = (T)(img)(_n2##x,y,_n2##z,c), I[161] = (T)(img)(_n3##x,y,_n2##z,c), \ - I[162] = (T)(img)(_p2##x,_n1##y,_n2##z,c), I[163] = (T)(img)(_p1##x,_n1##y,_n2##z,c), I[164] = (T)(img)(x,_n1##y,_n2##z,c), I[165] = (T)(img)(_n1##x,_n1##y,_n2##z,c), I[166] = (T)(img)(_n2##x,_n1##y,_n2##z,c), I[167] = (T)(img)(_n3##x,_n1##y,_n2##z,c), \ - I[168] = (T)(img)(_p2##x,_n2##y,_n2##z,c), I[169] = (T)(img)(_p1##x,_n2##y,_n2##z,c), I[170] = (T)(img)(x,_n2##y,_n2##z,c), I[171] = (T)(img)(_n1##x,_n2##y,_n2##z,c), I[172] = (T)(img)(_n2##x,_n2##y,_n2##z,c), I[173] = (T)(img)(_n3##x,_n2##y,_n2##z,c), \ - I[174] = (T)(img)(_p2##x,_n3##y,_n2##z,c), I[175] = (T)(img)(_p1##x,_n3##y,_n2##z,c), I[176] = (T)(img)(x,_n3##y,_n2##z,c), I[177] = (T)(img)(_n1##x,_n3##y,_n2##z,c), I[178] = (T)(img)(_n2##x,_n3##y,_n2##z,c), I[179] = (T)(img)(_n3##x,_n3##y,_n2##z,c), \ - I[180] = (T)(img)(_p2##x,_p2##y,_n3##z,c), I[181] = (T)(img)(_p1##x,_p2##y,_n3##z,c), I[182] = (T)(img)(x,_p2##y,_n3##z,c), I[183] = (T)(img)(_n1##x,_p2##y,_n3##z,c), I[184] = (T)(img)(_n2##x,_p2##y,_n3##z,c), I[185] = (T)(img)(_n3##x,_p2##y,_n3##z,c), \ - I[186] = (T)(img)(_p2##x,_p1##y,_n3##z,c), I[187] = (T)(img)(_p1##x,_p1##y,_n3##z,c), I[188] = (T)(img)(x,_p1##y,_n3##z,c), I[189] = (T)(img)(_n1##x,_p1##y,_n3##z,c), I[190] = (T)(img)(_n2##x,_p1##y,_n3##z,c), I[191] = (T)(img)(_n3##x,_p1##y,_n3##z,c), \ - I[192] = (T)(img)(_p2##x,y,_n3##z,c), I[193] = (T)(img)(_p1##x,y,_n3##z,c), I[194] = (T)(img)(x,y,_n3##z,c), I[195] = (T)(img)(_n1##x,y,_n3##z,c), I[196] = (T)(img)(_n2##x,y,_n3##z,c), I[197] = (T)(img)(_n3##x,y,_n3##z,c), \ - I[198] = (T)(img)(_p2##x,_n1##y,_n3##z,c), I[199] = (T)(img)(_p1##x,_n1##y,_n3##z,c), I[200] = (T)(img)(x,_n1##y,_n3##z,c), I[201] = (T)(img)(_n1##x,_n1##y,_n3##z,c), I[202] = (T)(img)(_n2##x,_n1##y,_n3##z,c), I[203] = (T)(img)(_n3##x,_n1##y,_n3##z,c), \ - I[204] = (T)(img)(_p2##x,_n2##y,_n3##z,c), I[205] = (T)(img)(_p1##x,_n2##y,_n3##z,c), I[206] = (T)(img)(x,_n2##y,_n3##z,c), I[207] = (T)(img)(_n1##x,_n2##y,_n3##z,c), I[208] = (T)(img)(_n2##x,_n2##y,_n3##z,c), I[209] = (T)(img)(_n3##x,_n2##y,_n3##z,c), \ - I[210] = (T)(img)(_p2##x,_n3##y,_n3##z,c), I[211] = (T)(img)(_p1##x,_n3##y,_n3##z,c), I[212] = (T)(img)(x,_n3##y,_n3##z,c), I[213] = (T)(img)(_n1##x,_n3##y,_n3##z,c), I[214] = (T)(img)(_n2##x,_n3##y,_n3##z,c), I[215] = (T)(img)(_n3##x,_n3##y,_n3##z,c); - -// Define 7x7x7 loop macros -//---------------------------- -#define cimg_for7x7x7(img,x,y,z,c,I,T) \ - cimg_for7((img)._depth,z) cimg_for7((img)._height,y) for (int x = 0, \ - _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = (T)(img)(0,_p3##y,_p3##z,c)), \ - (I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p2##y,_p3##z,c)), \ - (I[14] = I[15] = I[16] = I[17] = (T)(img)(0,_p1##y,_p3##z,c)), \ - (I[21] = I[22] = I[23] = I[24] = (T)(img)(0,y,_p3##z,c)), \ - (I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_n1##y,_p3##z,c)), \ - (I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_n2##y,_p3##z,c)), \ - (I[42] = I[43] = I[44] = I[45] = (T)(img)(0,_n3##y,_p3##z,c)), \ - (I[49] = I[50] = I[51] = I[52] = (T)(img)(0,_p3##y,_p2##z,c)), \ - (I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_p2##y,_p2##z,c)), \ - (I[63] = I[64] = I[65] = I[66] = (T)(img)(0,_p1##y,_p2##z,c)), \ - (I[70] = I[71] = I[72] = I[73] = (T)(img)(0,y,_p2##z,c)), \ - (I[77] = I[78] = I[79] = I[80] = (T)(img)(0,_n1##y,_p2##z,c)), \ - (I[84] = I[85] = I[86] = I[87] = (T)(img)(0,_n2##y,_p2##z,c)), \ - (I[91] = I[92] = I[93] = I[94] = (T)(img)(0,_n3##y,_p2##z,c)), \ - (I[98] = I[99] = I[100] = I[101] = (T)(img)(0,_p3##y,_p1##z,c)), \ - (I[105] = I[106] = I[107] = I[108] = (T)(img)(0,_p2##y,_p1##z,c)), \ - (I[112] = I[113] = I[114] = I[115] = (T)(img)(0,_p1##y,_p1##z,c)), \ - (I[119] = I[120] = I[121] = I[122] = (T)(img)(0,y,_p1##z,c)), \ - (I[126] = I[127] = I[128] = I[129] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[133] = I[134] = I[135] = I[136] = (T)(img)(0,_n2##y,_p1##z,c)), \ - (I[140] = I[141] = I[142] = I[143] = (T)(img)(0,_n3##y,_p1##z,c)), \ - (I[147] = I[148] = I[149] = I[150] = (T)(img)(0,_p3##y,z,c)), \ - (I[154] = I[155] = I[156] = I[157] = (T)(img)(0,_p2##y,z,c)), \ - (I[161] = I[162] = I[163] = I[164] = (T)(img)(0,_p1##y,z,c)), \ - (I[168] = I[169] = I[170] = I[171] = (T)(img)(0,y,z,c)), \ - (I[175] = I[176] = I[177] = I[178] = (T)(img)(0,_n1##y,z,c)), \ - (I[182] = I[183] = I[184] = I[185] = (T)(img)(0,_n2##y,z,c)), \ - (I[189] = I[190] = I[191] = I[192] = (T)(img)(0,_n3##y,z,c)), \ - (I[196] = I[197] = I[198] = I[199] = (T)(img)(0,_p3##y,_n1##z,c)), \ - (I[203] = I[204] = I[205] = I[206] = (T)(img)(0,_p2##y,_n1##z,c)), \ - (I[210] = I[211] = I[212] = I[213] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[217] = I[218] = I[219] = I[220] = (T)(img)(0,y,_n1##z,c)), \ - (I[224] = I[225] = I[226] = I[227] = (T)(img)(0,_n1##y,_n1##z,c)), \ - (I[231] = I[232] = I[233] = I[234] = (T)(img)(0,_n2##y,_n1##z,c)), \ - (I[238] = I[239] = I[240] = I[241] = (T)(img)(0,_n3##y,_n1##z,c)), \ - (I[245] = I[246] = I[247] = I[248] = (T)(img)(0,_p3##y,_n2##z,c)), \ - (I[252] = I[253] = I[254] = I[255] = (T)(img)(0,_p2##y,_n2##z,c)), \ - (I[259] = I[260] = I[261] = I[262] = (T)(img)(0,_p1##y,_n2##z,c)), \ - (I[266] = I[267] = I[268] = I[269] = (T)(img)(0,y,_n2##z,c)), \ - (I[273] = I[274] = I[275] = I[276] = (T)(img)(0,_n1##y,_n2##z,c)), \ - (I[280] = I[281] = I[282] = I[283] = (T)(img)(0,_n2##y,_n2##z,c)), \ - (I[287] = I[288] = I[289] = I[290] = (T)(img)(0,_n3##y,_n2##z,c)), \ - (I[294] = I[295] = I[296] = I[297] = (T)(img)(0,_p3##y,_n3##z,c)), \ - (I[301] = I[302] = I[303] = I[304] = (T)(img)(0,_p2##y,_n3##z,c)), \ - (I[308] = I[309] = I[310] = I[311] = (T)(img)(0,_p1##y,_n3##z,c)), \ - (I[315] = I[316] = I[317] = I[318] = (T)(img)(0,y,_n3##z,c)), \ - (I[322] = I[323] = I[324] = I[325] = (T)(img)(0,_n1##y,_n3##z,c)), \ - (I[329] = I[330] = I[331] = I[332] = (T)(img)(0,_n2##y,_n3##z,c)), \ - (I[336] = I[337] = I[338] = I[339] = (T)(img)(0,_n3##y,_n3##z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c)), \ - (I[11] = (T)(img)(_n1##x,_p2##y,_p3##z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,_p3##z,c)), \ - (I[25] = (T)(img)(_n1##x,y,_p3##z,c)), \ - (I[32] = (T)(img)(_n1##x,_n1##y,_p3##z,c)), \ - (I[39] = (T)(img)(_n1##x,_n2##y,_p3##z,c)), \ - (I[46] = (T)(img)(_n1##x,_n3##y,_p3##z,c)), \ - (I[53] = (T)(img)(_n1##x,_p3##y,_p2##z,c)), \ - (I[60] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[67] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[74] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[81] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[88] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[95] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[102] = (T)(img)(_n1##x,_p3##y,_p1##z,c)), \ - (I[109] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[116] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[123] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[130] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[137] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[144] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[151] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[172] = (T)(img)(_n1##x,y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[186] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[193] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_p3##y,_n1##z,c)), \ - (I[207] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[214] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[221] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[228] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[235] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[242] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[249] = (T)(img)(_n1##x,_p3##y,_n2##z,c)), \ - (I[256] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[263] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[270] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[277] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[284] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[291] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[298] = (T)(img)(_n1##x,_p3##y,_n3##z,c)), \ - (I[305] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[312] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[319] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[326] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[333] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[340] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c)), \ - (I[12] = (T)(img)(_n2##x,_p2##y,_p3##z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,_p3##z,c)), \ - (I[26] = (T)(img)(_n2##x,y,_p3##z,c)), \ - (I[33] = (T)(img)(_n2##x,_n1##y,_p3##z,c)), \ - (I[40] = (T)(img)(_n2##x,_n2##y,_p3##z,c)), \ - (I[47] = (T)(img)(_n2##x,_n3##y,_p3##z,c)), \ - (I[54] = (T)(img)(_n2##x,_p3##y,_p2##z,c)), \ - (I[61] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[68] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[75] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[82] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[89] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[96] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[103] = (T)(img)(_n2##x,_p3##y,_p1##z,c)), \ - (I[110] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[117] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[124] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[131] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[138] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[145] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[152] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[173] = (T)(img)(_n2##x,y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[187] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[194] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_p3##y,_n1##z,c)), \ - (I[208] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[215] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[222] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[229] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[236] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[243] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[250] = (T)(img)(_n2##x,_p3##y,_n2##z,c)), \ - (I[257] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[264] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[271] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[278] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[285] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[292] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[299] = (T)(img)(_n2##x,_p3##y,_n3##z,c)), \ - (I[306] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[313] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[320] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[327] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[334] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[341] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - 3>=((img)._width)?(img).width()-1:3); \ - (_n3##x<(img).width() && ( \ - (I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c)), \ - (I[13] = (T)(img)(_n3##x,_p2##y,_p3##z,c)), \ - (I[20] = (T)(img)(_n3##x,_p1##y,_p3##z,c)), \ - (I[27] = (T)(img)(_n3##x,y,_p3##z,c)), \ - (I[34] = (T)(img)(_n3##x,_n1##y,_p3##z,c)), \ - (I[41] = (T)(img)(_n3##x,_n2##y,_p3##z,c)), \ - (I[48] = (T)(img)(_n3##x,_n3##y,_p3##z,c)), \ - (I[55] = (T)(img)(_n3##x,_p3##y,_p2##z,c)), \ - (I[62] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[69] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[76] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[83] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[90] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[97] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[104] = (T)(img)(_n3##x,_p3##y,_p1##z,c)), \ - (I[111] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[118] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[125] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[132] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[139] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[146] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[153] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[174] = (T)(img)(_n3##x,y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[188] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[195] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_p3##y,_n1##z,c)), \ - (I[209] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[216] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[223] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[230] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[237] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[244] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[251] = (T)(img)(_n3##x,_p3##y,_n2##z,c)), \ - (I[258] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[265] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[272] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[279] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[286] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[293] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[300] = (T)(img)(_n3##x,_p3##y,_n3##z,c)), \ - (I[307] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[314] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[321] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[328] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[335] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[342] = (T)(img)(_n3##x,_n3##y,_n3##z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ - I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ - I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], \ - I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], \ - I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], \ - I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], \ - I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], \ - I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], \ - I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], \ - I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], \ - I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], \ - I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], \ - I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], \ - I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], \ - I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], \ - I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], \ - I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], \ - I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], \ - I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], \ - I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], \ - I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], \ - I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], \ - I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], \ - I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], \ - I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_for_in7x7x7(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in7((img)._depth,z0,z1,z) cimg_for_in7((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = (int)( \ - (I[0] = (T)(img)(_p3##x,_p3##y,_p3##z,c)), \ - (I[7] = (T)(img)(_p3##x,_p2##y,_p3##z,c)), \ - (I[14] = (T)(img)(_p3##x,_p1##y,_p3##z,c)), \ - (I[21] = (T)(img)(_p3##x,y,_p3##z,c)), \ - (I[28] = (T)(img)(_p3##x,_n1##y,_p3##z,c)), \ - (I[35] = (T)(img)(_p3##x,_n2##y,_p3##z,c)), \ - (I[42] = (T)(img)(_p3##x,_n3##y,_p3##z,c)), \ - (I[49] = (T)(img)(_p3##x,_p3##y,_p2##z,c)), \ - (I[56] = (T)(img)(_p3##x,_p2##y,_p2##z,c)), \ - (I[63] = (T)(img)(_p3##x,_p1##y,_p2##z,c)), \ - (I[70] = (T)(img)(_p3##x,y,_p2##z,c)), \ - (I[77] = (T)(img)(_p3##x,_n1##y,_p2##z,c)), \ - (I[84] = (T)(img)(_p3##x,_n2##y,_p2##z,c)), \ - (I[91] = (T)(img)(_p3##x,_n3##y,_p2##z,c)), \ - (I[98] = (T)(img)(_p3##x,_p3##y,_p1##z,c)), \ - (I[105] = (T)(img)(_p3##x,_p2##y,_p1##z,c)), \ - (I[112] = (T)(img)(_p3##x,_p1##y,_p1##z,c)), \ - (I[119] = (T)(img)(_p3##x,y,_p1##z,c)), \ - (I[126] = (T)(img)(_p3##x,_n1##y,_p1##z,c)), \ - (I[133] = (T)(img)(_p3##x,_n2##y,_p1##z,c)), \ - (I[140] = (T)(img)(_p3##x,_n3##y,_p1##z,c)), \ - (I[147] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[154] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[161] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[168] = (T)(img)(_p3##x,y,z,c)), \ - (I[175] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[182] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[189] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[196] = (T)(img)(_p3##x,_p3##y,_n1##z,c)), \ - (I[203] = (T)(img)(_p3##x,_p2##y,_n1##z,c)), \ - (I[210] = (T)(img)(_p3##x,_p1##y,_n1##z,c)), \ - (I[217] = (T)(img)(_p3##x,y,_n1##z,c)), \ - (I[224] = (T)(img)(_p3##x,_n1##y,_n1##z,c)), \ - (I[231] = (T)(img)(_p3##x,_n2##y,_n1##z,c)), \ - (I[238] = (T)(img)(_p3##x,_n3##y,_n1##z,c)), \ - (I[245] = (T)(img)(_p3##x,_p3##y,_n2##z,c)), \ - (I[252] = (T)(img)(_p3##x,_p2##y,_n2##z,c)), \ - (I[259] = (T)(img)(_p3##x,_p1##y,_n2##z,c)), \ - (I[266] = (T)(img)(_p3##x,y,_n2##z,c)), \ - (I[273] = (T)(img)(_p3##x,_n1##y,_n2##z,c)), \ - (I[280] = (T)(img)(_p3##x,_n2##y,_n2##z,c)), \ - (I[287] = (T)(img)(_p3##x,_n3##y,_n2##z,c)), \ - (I[294] = (T)(img)(_p3##x,_p3##y,_n3##z,c)), \ - (I[301] = (T)(img)(_p3##x,_p2##y,_n3##z,c)), \ - (I[308] = (T)(img)(_p3##x,_p1##y,_n3##z,c)), \ - (I[315] = (T)(img)(_p3##x,y,_n3##z,c)), \ - (I[322] = (T)(img)(_p3##x,_n1##y,_n3##z,c)), \ - (I[329] = (T)(img)(_p3##x,_n2##y,_n3##z,c)), \ - (I[336] = (T)(img)(_p3##x,_n3##y,_n3##z,c)), \ - (I[1] = (T)(img)(_p2##x,_p3##y,_p3##z,c)), \ - (I[8] = (T)(img)(_p2##x,_p2##y,_p3##z,c)), \ - (I[15] = (T)(img)(_p2##x,_p1##y,_p3##z,c)), \ - (I[22] = (T)(img)(_p2##x,y,_p3##z,c)), \ - (I[29] = (T)(img)(_p2##x,_n1##y,_p3##z,c)), \ - (I[36] = (T)(img)(_p2##x,_n2##y,_p3##z,c)), \ - (I[43] = (T)(img)(_p2##x,_n3##y,_p3##z,c)), \ - (I[50] = (T)(img)(_p2##x,_p3##y,_p2##z,c)), \ - (I[57] = (T)(img)(_p2##x,_p2##y,_p2##z,c)), \ - (I[64] = (T)(img)(_p2##x,_p1##y,_p2##z,c)), \ - (I[71] = (T)(img)(_p2##x,y,_p2##z,c)), \ - (I[78] = (T)(img)(_p2##x,_n1##y,_p2##z,c)), \ - (I[85] = (T)(img)(_p2##x,_n2##y,_p2##z,c)), \ - (I[92] = (T)(img)(_p2##x,_n3##y,_p2##z,c)), \ - (I[99] = (T)(img)(_p2##x,_p3##y,_p1##z,c)), \ - (I[106] = (T)(img)(_p2##x,_p2##y,_p1##z,c)), \ - (I[113] = (T)(img)(_p2##x,_p1##y,_p1##z,c)), \ - (I[120] = (T)(img)(_p2##x,y,_p1##z,c)), \ - (I[127] = (T)(img)(_p2##x,_n1##y,_p1##z,c)), \ - (I[134] = (T)(img)(_p2##x,_n2##y,_p1##z,c)), \ - (I[141] = (T)(img)(_p2##x,_n3##y,_p1##z,c)), \ - (I[148] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[155] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[162] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[169] = (T)(img)(_p2##x,y,z,c)), \ - (I[176] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[183] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[190] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[197] = (T)(img)(_p2##x,_p3##y,_n1##z,c)), \ - (I[204] = (T)(img)(_p2##x,_p2##y,_n1##z,c)), \ - (I[211] = (T)(img)(_p2##x,_p1##y,_n1##z,c)), \ - (I[218] = (T)(img)(_p2##x,y,_n1##z,c)), \ - (I[225] = (T)(img)(_p2##x,_n1##y,_n1##z,c)), \ - (I[232] = (T)(img)(_p2##x,_n2##y,_n1##z,c)), \ - (I[239] = (T)(img)(_p2##x,_n3##y,_n1##z,c)), \ - (I[246] = (T)(img)(_p2##x,_p3##y,_n2##z,c)), \ - (I[253] = (T)(img)(_p2##x,_p2##y,_n2##z,c)), \ - (I[260] = (T)(img)(_p2##x,_p1##y,_n2##z,c)), \ - (I[267] = (T)(img)(_p2##x,y,_n2##z,c)), \ - (I[274] = (T)(img)(_p2##x,_n1##y,_n2##z,c)), \ - (I[281] = (T)(img)(_p2##x,_n2##y,_n2##z,c)), \ - (I[288] = (T)(img)(_p2##x,_n3##y,_n2##z,c)), \ - (I[295] = (T)(img)(_p2##x,_p3##y,_n3##z,c)), \ - (I[302] = (T)(img)(_p2##x,_p2##y,_n3##z,c)), \ - (I[309] = (T)(img)(_p2##x,_p1##y,_n3##z,c)), \ - (I[316] = (T)(img)(_p2##x,y,_n3##z,c)), \ - (I[323] = (T)(img)(_p2##x,_n1##y,_n3##z,c)), \ - (I[330] = (T)(img)(_p2##x,_n2##y,_n3##z,c)), \ - (I[337] = (T)(img)(_p2##x,_n3##y,_n3##z,c)), \ - (I[2] = (T)(img)(_p1##x,_p3##y,_p3##z,c)), \ - (I[9] = (T)(img)(_p1##x,_p2##y,_p3##z,c)), \ - (I[16] = (T)(img)(_p1##x,_p1##y,_p3##z,c)), \ - (I[23] = (T)(img)(_p1##x,y,_p3##z,c)), \ - (I[30] = (T)(img)(_p1##x,_n1##y,_p3##z,c)), \ - (I[37] = (T)(img)(_p1##x,_n2##y,_p3##z,c)), \ - (I[44] = (T)(img)(_p1##x,_n3##y,_p3##z,c)), \ - (I[51] = (T)(img)(_p1##x,_p3##y,_p2##z,c)), \ - (I[58] = (T)(img)(_p1##x,_p2##y,_p2##z,c)), \ - (I[65] = (T)(img)(_p1##x,_p1##y,_p2##z,c)), \ - (I[72] = (T)(img)(_p1##x,y,_p2##z,c)), \ - (I[79] = (T)(img)(_p1##x,_n1##y,_p2##z,c)), \ - (I[86] = (T)(img)(_p1##x,_n2##y,_p2##z,c)), \ - (I[93] = (T)(img)(_p1##x,_n3##y,_p2##z,c)), \ - (I[100] = (T)(img)(_p1##x,_p3##y,_p1##z,c)), \ - (I[107] = (T)(img)(_p1##x,_p2##y,_p1##z,c)), \ - (I[114] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[121] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[128] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[135] = (T)(img)(_p1##x,_n2##y,_p1##z,c)), \ - (I[142] = (T)(img)(_p1##x,_n3##y,_p1##z,c)), \ - (I[149] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[156] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[163] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[170] = (T)(img)(_p1##x,y,z,c)), \ - (I[177] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[184] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[191] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[198] = (T)(img)(_p1##x,_p3##y,_n1##z,c)), \ - (I[205] = (T)(img)(_p1##x,_p2##y,_n1##z,c)), \ - (I[212] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[219] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[226] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[233] = (T)(img)(_p1##x,_n2##y,_n1##z,c)), \ - (I[240] = (T)(img)(_p1##x,_n3##y,_n1##z,c)), \ - (I[247] = (T)(img)(_p1##x,_p3##y,_n2##z,c)), \ - (I[254] = (T)(img)(_p1##x,_p2##y,_n2##z,c)), \ - (I[261] = (T)(img)(_p1##x,_p1##y,_n2##z,c)), \ - (I[268] = (T)(img)(_p1##x,y,_n2##z,c)), \ - (I[275] = (T)(img)(_p1##x,_n1##y,_n2##z,c)), \ - (I[282] = (T)(img)(_p1##x,_n2##y,_n2##z,c)), \ - (I[289] = (T)(img)(_p1##x,_n3##y,_n2##z,c)), \ - (I[296] = (T)(img)(_p1##x,_p3##y,_n3##z,c)), \ - (I[303] = (T)(img)(_p1##x,_p2##y,_n3##z,c)), \ - (I[310] = (T)(img)(_p1##x,_p1##y,_n3##z,c)), \ - (I[317] = (T)(img)(_p1##x,y,_n3##z,c)), \ - (I[324] = (T)(img)(_p1##x,_n1##y,_n3##z,c)), \ - (I[331] = (T)(img)(_p1##x,_n2##y,_n3##z,c)), \ - (I[338] = (T)(img)(_p1##x,_n3##y,_n3##z,c)), \ - (I[3] = (T)(img)(x,_p3##y,_p3##z,c)), \ - (I[10] = (T)(img)(x,_p2##y,_p3##z,c)), \ - (I[17] = (T)(img)(x,_p1##y,_p3##z,c)), \ - (I[24] = (T)(img)(x,y,_p3##z,c)), \ - (I[31] = (T)(img)(x,_n1##y,_p3##z,c)), \ - (I[38] = (T)(img)(x,_n2##y,_p3##z,c)), \ - (I[45] = (T)(img)(x,_n3##y,_p3##z,c)), \ - (I[52] = (T)(img)(x,_p3##y,_p2##z,c)), \ - (I[59] = (T)(img)(x,_p2##y,_p2##z,c)), \ - (I[66] = (T)(img)(x,_p1##y,_p2##z,c)), \ - (I[73] = (T)(img)(x,y,_p2##z,c)), \ - (I[80] = (T)(img)(x,_n1##y,_p2##z,c)), \ - (I[87] = (T)(img)(x,_n2##y,_p2##z,c)), \ - (I[94] = (T)(img)(x,_n3##y,_p2##z,c)), \ - (I[101] = (T)(img)(x,_p3##y,_p1##z,c)), \ - (I[108] = (T)(img)(x,_p2##y,_p1##z,c)), \ - (I[115] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[122] = (T)(img)(x,y,_p1##z,c)), \ - (I[129] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[136] = (T)(img)(x,_n2##y,_p1##z,c)), \ - (I[143] = (T)(img)(x,_n3##y,_p1##z,c)), \ - (I[150] = (T)(img)(x,_p3##y,z,c)), \ - (I[157] = (T)(img)(x,_p2##y,z,c)), \ - (I[164] = (T)(img)(x,_p1##y,z,c)), \ - (I[171] = (T)(img)(x,y,z,c)), \ - (I[178] = (T)(img)(x,_n1##y,z,c)), \ - (I[185] = (T)(img)(x,_n2##y,z,c)), \ - (I[192] = (T)(img)(x,_n3##y,z,c)), \ - (I[199] = (T)(img)(x,_p3##y,_n1##z,c)), \ - (I[206] = (T)(img)(x,_p2##y,_n1##z,c)), \ - (I[213] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[220] = (T)(img)(x,y,_n1##z,c)), \ - (I[227] = (T)(img)(x,_n1##y,_n1##z,c)), \ - (I[234] = (T)(img)(x,_n2##y,_n1##z,c)), \ - (I[241] = (T)(img)(x,_n3##y,_n1##z,c)), \ - (I[248] = (T)(img)(x,_p3##y,_n2##z,c)), \ - (I[255] = (T)(img)(x,_p2##y,_n2##z,c)), \ - (I[262] = (T)(img)(x,_p1##y,_n2##z,c)), \ - (I[269] = (T)(img)(x,y,_n2##z,c)), \ - (I[276] = (T)(img)(x,_n1##y,_n2##z,c)), \ - (I[283] = (T)(img)(x,_n2##y,_n2##z,c)), \ - (I[290] = (T)(img)(x,_n3##y,_n2##z,c)), \ - (I[297] = (T)(img)(x,_p3##y,_n3##z,c)), \ - (I[304] = (T)(img)(x,_p2##y,_n3##z,c)), \ - (I[311] = (T)(img)(x,_p1##y,_n3##z,c)), \ - (I[318] = (T)(img)(x,y,_n3##z,c)), \ - (I[325] = (T)(img)(x,_n1##y,_n3##z,c)), \ - (I[332] = (T)(img)(x,_n2##y,_n3##z,c)), \ - (I[339] = (T)(img)(x,_n3##y,_n3##z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c)), \ - (I[11] = (T)(img)(_n1##x,_p2##y,_p3##z,c)), \ - (I[18] = (T)(img)(_n1##x,_p1##y,_p3##z,c)), \ - (I[25] = (T)(img)(_n1##x,y,_p3##z,c)), \ - (I[32] = (T)(img)(_n1##x,_n1##y,_p3##z,c)), \ - (I[39] = (T)(img)(_n1##x,_n2##y,_p3##z,c)), \ - (I[46] = (T)(img)(_n1##x,_n3##y,_p3##z,c)), \ - (I[53] = (T)(img)(_n1##x,_p3##y,_p2##z,c)), \ - (I[60] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[67] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[74] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[81] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[88] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[95] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[102] = (T)(img)(_n1##x,_p3##y,_p1##z,c)), \ - (I[109] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[116] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[123] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[130] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[137] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[144] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[151] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[158] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[165] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[172] = (T)(img)(_n1##x,y,z,c)), \ - (I[179] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[186] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[193] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[200] = (T)(img)(_n1##x,_p3##y,_n1##z,c)), \ - (I[207] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[214] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[221] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[228] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[235] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[242] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[249] = (T)(img)(_n1##x,_p3##y,_n2##z,c)), \ - (I[256] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[263] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[270] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[277] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[284] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[291] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[298] = (T)(img)(_n1##x,_p3##y,_n3##z,c)), \ - (I[305] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[312] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[319] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[326] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[333] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[340] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c)), \ - (I[12] = (T)(img)(_n2##x,_p2##y,_p3##z,c)), \ - (I[19] = (T)(img)(_n2##x,_p1##y,_p3##z,c)), \ - (I[26] = (T)(img)(_n2##x,y,_p3##z,c)), \ - (I[33] = (T)(img)(_n2##x,_n1##y,_p3##z,c)), \ - (I[40] = (T)(img)(_n2##x,_n2##y,_p3##z,c)), \ - (I[47] = (T)(img)(_n2##x,_n3##y,_p3##z,c)), \ - (I[54] = (T)(img)(_n2##x,_p3##y,_p2##z,c)), \ - (I[61] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[68] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[75] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[82] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[89] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[96] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[103] = (T)(img)(_n2##x,_p3##y,_p1##z,c)), \ - (I[110] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[117] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[124] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[131] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[138] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[145] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[152] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[159] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[166] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[173] = (T)(img)(_n2##x,y,z,c)), \ - (I[180] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[187] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[194] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[201] = (T)(img)(_n2##x,_p3##y,_n1##z,c)), \ - (I[208] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[215] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[222] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[229] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[236] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[243] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[250] = (T)(img)(_n2##x,_p3##y,_n2##z,c)), \ - (I[257] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[264] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[271] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[278] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[285] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[292] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[299] = (T)(img)(_n2##x,_p3##y,_n3##z,c)), \ - (I[306] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[313] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[320] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[327] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[334] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[341] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - x+3>=(img).width()?(img).width()-1:x+3); \ - x<=(int)(x1) && ((_n3##x<(img).width() && ( \ - (I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c)), \ - (I[13] = (T)(img)(_n3##x,_p2##y,_p3##z,c)), \ - (I[20] = (T)(img)(_n3##x,_p1##y,_p3##z,c)), \ - (I[27] = (T)(img)(_n3##x,y,_p3##z,c)), \ - (I[34] = (T)(img)(_n3##x,_n1##y,_p3##z,c)), \ - (I[41] = (T)(img)(_n3##x,_n2##y,_p3##z,c)), \ - (I[48] = (T)(img)(_n3##x,_n3##y,_p3##z,c)), \ - (I[55] = (T)(img)(_n3##x,_p3##y,_p2##z,c)), \ - (I[62] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[69] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[76] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[83] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[90] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[97] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[104] = (T)(img)(_n3##x,_p3##y,_p1##z,c)), \ - (I[111] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[118] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[125] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[132] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[139] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[146] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[153] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[160] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[167] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[174] = (T)(img)(_n3##x,y,z,c)), \ - (I[181] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[188] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[195] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[202] = (T)(img)(_n3##x,_p3##y,_n1##z,c)), \ - (I[209] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[216] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[223] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[230] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[237] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[244] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[251] = (T)(img)(_n3##x,_p3##y,_n2##z,c)), \ - (I[258] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[265] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[272] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[279] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[286] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[293] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[300] = (T)(img)(_n3##x,_p3##y,_n3##z,c)), \ - (I[307] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[314] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[321] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[328] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[335] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[342] = (T)(img)(_n3##x,_n3##y,_n3##z,c)),1)) || \ - _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ - I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ - I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ - I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ - I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ - I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ - I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ - I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \ - I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], \ - I[70] = I[71], I[71] = I[72], I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], \ - I[77] = I[78], I[78] = I[79], I[79] = I[80], I[80] = I[81], I[81] = I[82], I[82] = I[83], \ - I[84] = I[85], I[85] = I[86], I[86] = I[87], I[87] = I[88], I[88] = I[89], I[89] = I[90], \ - I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], I[95] = I[96], I[96] = I[97], \ - I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], I[103] = I[104], \ - I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], \ - I[119] = I[120], I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], \ - I[126] = I[127], I[127] = I[128], I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], \ - I[133] = I[134], I[134] = I[135], I[135] = I[136], I[136] = I[137], I[137] = I[138], I[138] = I[139], \ - I[140] = I[141], I[141] = I[142], I[142] = I[143], I[143] = I[144], I[144] = I[145], I[145] = I[146], \ - I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], I[151] = I[152], I[152] = I[153], \ - I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], I[159] = I[160], \ - I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], \ - I[175] = I[176], I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], \ - I[182] = I[183], I[183] = I[184], I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], \ - I[189] = I[190], I[190] = I[191], I[191] = I[192], I[192] = I[193], I[193] = I[194], I[194] = I[195], \ - I[196] = I[197], I[197] = I[198], I[198] = I[199], I[199] = I[200], I[200] = I[201], I[201] = I[202], \ - I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], I[207] = I[208], I[208] = I[209], \ - I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], I[215] = I[216], \ - I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], \ - I[231] = I[232], I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], \ - I[238] = I[239], I[239] = I[240], I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], \ - I[245] = I[246], I[246] = I[247], I[247] = I[248], I[248] = I[249], I[249] = I[250], I[250] = I[251], \ - I[252] = I[253], I[253] = I[254], I[254] = I[255], I[255] = I[256], I[256] = I[257], I[257] = I[258], \ - I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], I[263] = I[264], I[264] = I[265], \ - I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], I[271] = I[272], \ - I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], \ - I[287] = I[288], I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], \ - I[294] = I[295], I[295] = I[296], I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], \ - I[301] = I[302], I[302] = I[303], I[303] = I[304], I[304] = I[305], I[305] = I[306], I[306] = I[307], \ - I[308] = I[309], I[309] = I[310], I[310] = I[311], I[311] = I[312], I[312] = I[313], I[313] = I[314], \ - I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], I[319] = I[320], I[320] = I[321], \ - I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], I[327] = I[328], \ - I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) - -#define cimg_get7x7x7(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p3##x,_p3##y,_p3##z,c), I[1] = (T)(img)(_p2##x,_p3##y,_p3##z,c), I[2] = (T)(img)(_p1##x,_p3##y,_p3##z,c), I[3] = (T)(img)(x,_p3##y,_p3##z,c), I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c), I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c), I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c), \ - I[7] = (T)(img)(_p3##x,_p2##y,_p3##z,c), I[8] = (T)(img)(_p2##x,_p2##y,_p3##z,c), I[9] = (T)(img)(_p1##x,_p2##y,_p3##z,c), I[10] = (T)(img)(x,_p2##y,_p3##z,c), I[11] = (T)(img)(_n1##x,_p2##y,_p3##z,c), I[12] = (T)(img)(_n2##x,_p2##y,_p3##z,c), I[13] = (T)(img)(_n3##x,_p2##y,_p3##z,c), \ - I[14] = (T)(img)(_p3##x,_p1##y,_p3##z,c), I[15] = (T)(img)(_p2##x,_p1##y,_p3##z,c), I[16] = (T)(img)(_p1##x,_p1##y,_p3##z,c), I[17] = (T)(img)(x,_p1##y,_p3##z,c), I[18] = (T)(img)(_n1##x,_p1##y,_p3##z,c), I[19] = (T)(img)(_n2##x,_p1##y,_p3##z,c), I[20] = (T)(img)(_n3##x,_p1##y,_p3##z,c), \ - I[21] = (T)(img)(_p3##x,y,_p3##z,c), I[22] = (T)(img)(_p2##x,y,_p3##z,c), I[23] = (T)(img)(_p1##x,y,_p3##z,c), I[24] = (T)(img)(x,y,_p3##z,c), I[25] = (T)(img)(_n1##x,y,_p3##z,c), I[26] = (T)(img)(_n2##x,y,_p3##z,c), I[27] = (T)(img)(_n3##x,y,_p3##z,c), \ - I[28] = (T)(img)(_p3##x,_n1##y,_p3##z,c), I[29] = (T)(img)(_p2##x,_n1##y,_p3##z,c), I[30] = (T)(img)(_p1##x,_n1##y,_p3##z,c), I[31] = (T)(img)(x,_n1##y,_p3##z,c), I[32] = (T)(img)(_n1##x,_n1##y,_p3##z,c), I[33] = (T)(img)(_n2##x,_n1##y,_p3##z,c), I[34] = (T)(img)(_n3##x,_n1##y,_p3##z,c), \ - I[35] = (T)(img)(_p3##x,_n2##y,_p3##z,c), I[36] = (T)(img)(_p2##x,_n2##y,_p3##z,c), I[37] = (T)(img)(_p1##x,_n2##y,_p3##z,c), I[38] = (T)(img)(x,_n2##y,_p3##z,c), I[39] = (T)(img)(_n1##x,_n2##y,_p3##z,c), I[40] = (T)(img)(_n2##x,_n2##y,_p3##z,c), I[41] = (T)(img)(_n3##x,_n2##y,_p3##z,c), \ - I[42] = (T)(img)(_p3##x,_n3##y,_p3##z,c), I[43] = (T)(img)(_p2##x,_n3##y,_p3##z,c), I[44] = (T)(img)(_p1##x,_n3##y,_p3##z,c), I[45] = (T)(img)(x,_n3##y,_p3##z,c), I[46] = (T)(img)(_n1##x,_n3##y,_p3##z,c), I[47] = (T)(img)(_n2##x,_n3##y,_p3##z,c), I[48] = (T)(img)(_n3##x,_n3##y,_p3##z,c), \ - I[49] = (T)(img)(_p3##x,_p3##y,_p2##z,c), I[50] = (T)(img)(_p2##x,_p3##y,_p2##z,c), I[51] = (T)(img)(_p1##x,_p3##y,_p2##z,c), I[52] = (T)(img)(x,_p3##y,_p2##z,c), I[53] = (T)(img)(_n1##x,_p3##y,_p2##z,c), I[54] = (T)(img)(_n2##x,_p3##y,_p2##z,c), I[55] = (T)(img)(_n3##x,_p3##y,_p2##z,c), \ - I[56] = (T)(img)(_p3##x,_p2##y,_p2##z,c), I[57] = (T)(img)(_p2##x,_p2##y,_p2##z,c), I[58] = (T)(img)(_p1##x,_p2##y,_p2##z,c), I[59] = (T)(img)(x,_p2##y,_p2##z,c), I[60] = (T)(img)(_n1##x,_p2##y,_p2##z,c), I[61] = (T)(img)(_n2##x,_p2##y,_p2##z,c), I[62] = (T)(img)(_n3##x,_p2##y,_p2##z,c), \ - I[63] = (T)(img)(_p3##x,_p1##y,_p2##z,c), I[64] = (T)(img)(_p2##x,_p1##y,_p2##z,c), I[65] = (T)(img)(_p1##x,_p1##y,_p2##z,c), I[66] = (T)(img)(x,_p1##y,_p2##z,c), I[67] = (T)(img)(_n1##x,_p1##y,_p2##z,c), I[68] = (T)(img)(_n2##x,_p1##y,_p2##z,c), I[69] = (T)(img)(_n3##x,_p1##y,_p2##z,c), \ - I[70] = (T)(img)(_p3##x,y,_p2##z,c), I[71] = (T)(img)(_p2##x,y,_p2##z,c), I[72] = (T)(img)(_p1##x,y,_p2##z,c), I[73] = (T)(img)(x,y,_p2##z,c), I[74] = (T)(img)(_n1##x,y,_p2##z,c), I[75] = (T)(img)(_n2##x,y,_p2##z,c), I[76] = (T)(img)(_n3##x,y,_p2##z,c), \ - I[77] = (T)(img)(_p3##x,_n1##y,_p2##z,c), I[78] = (T)(img)(_p2##x,_n1##y,_p2##z,c), I[79] = (T)(img)(_p1##x,_n1##y,_p2##z,c), I[80] = (T)(img)(x,_n1##y,_p2##z,c), I[81] = (T)(img)(_n1##x,_n1##y,_p2##z,c), I[82] = (T)(img)(_n2##x,_n1##y,_p2##z,c), I[83] = (T)(img)(_n3##x,_n1##y,_p2##z,c), \ - I[84] = (T)(img)(_p3##x,_n2##y,_p2##z,c), I[85] = (T)(img)(_p2##x,_n2##y,_p2##z,c), I[86] = (T)(img)(_p1##x,_n2##y,_p2##z,c), I[87] = (T)(img)(x,_n2##y,_p2##z,c), I[88] = (T)(img)(_n1##x,_n2##y,_p2##z,c), I[89] = (T)(img)(_n2##x,_n2##y,_p2##z,c), I[90] = (T)(img)(_n3##x,_n2##y,_p2##z,c), \ - I[91] = (T)(img)(_p3##x,_n3##y,_p2##z,c), I[92] = (T)(img)(_p2##x,_n3##y,_p2##z,c), I[93] = (T)(img)(_p1##x,_n3##y,_p2##z,c), I[94] = (T)(img)(x,_n3##y,_p2##z,c), I[95] = (T)(img)(_n1##x,_n3##y,_p2##z,c), I[96] = (T)(img)(_n2##x,_n3##y,_p2##z,c), I[97] = (T)(img)(_n3##x,_n3##y,_p2##z,c), \ - I[98] = (T)(img)(_p3##x,_p3##y,_p1##z,c), I[99] = (T)(img)(_p2##x,_p3##y,_p1##z,c), I[100] = (T)(img)(_p1##x,_p3##y,_p1##z,c), I[101] = (T)(img)(x,_p3##y,_p1##z,c), I[102] = (T)(img)(_n1##x,_p3##y,_p1##z,c), I[103] = (T)(img)(_n2##x,_p3##y,_p1##z,c), I[104] = (T)(img)(_n3##x,_p3##y,_p1##z,c), \ - I[105] = (T)(img)(_p3##x,_p2##y,_p1##z,c), I[106] = (T)(img)(_p2##x,_p2##y,_p1##z,c), I[107] = (T)(img)(_p1##x,_p2##y,_p1##z,c), I[108] = (T)(img)(x,_p2##y,_p1##z,c), I[109] = (T)(img)(_n1##x,_p2##y,_p1##z,c), I[110] = (T)(img)(_n2##x,_p2##y,_p1##z,c), I[111] = (T)(img)(_n3##x,_p2##y,_p1##z,c), \ - I[112] = (T)(img)(_p3##x,_p1##y,_p1##z,c), I[113] = (T)(img)(_p2##x,_p1##y,_p1##z,c), I[114] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[115] = (T)(img)(x,_p1##y,_p1##z,c), I[116] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[117] = (T)(img)(_n2##x,_p1##y,_p1##z,c), I[118] = (T)(img)(_n3##x,_p1##y,_p1##z,c), \ - I[119] = (T)(img)(_p3##x,y,_p1##z,c), I[120] = (T)(img)(_p2##x,y,_p1##z,c), I[121] = (T)(img)(_p1##x,y,_p1##z,c), I[122] = (T)(img)(x,y,_p1##z,c), I[123] = (T)(img)(_n1##x,y,_p1##z,c), I[124] = (T)(img)(_n2##x,y,_p1##z,c), I[125] = (T)(img)(_n3##x,y,_p1##z,c), \ - I[126] = (T)(img)(_p3##x,_n1##y,_p1##z,c), I[127] = (T)(img)(_p2##x,_n1##y,_p1##z,c), I[128] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[129] = (T)(img)(x,_n1##y,_p1##z,c), I[130] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[131] = (T)(img)(_n2##x,_n1##y,_p1##z,c), I[132] = (T)(img)(_n3##x,_n1##y,_p1##z,c), \ - I[133] = (T)(img)(_p3##x,_n2##y,_p1##z,c), I[134] = (T)(img)(_p2##x,_n2##y,_p1##z,c), I[135] = (T)(img)(_p1##x,_n2##y,_p1##z,c), I[136] = (T)(img)(x,_n2##y,_p1##z,c), I[137] = (T)(img)(_n1##x,_n2##y,_p1##z,c), I[138] = (T)(img)(_n2##x,_n2##y,_p1##z,c), I[139] = (T)(img)(_n3##x,_n2##y,_p1##z,c), \ - I[140] = (T)(img)(_p3##x,_n3##y,_p1##z,c), I[141] = (T)(img)(_p2##x,_n3##y,_p1##z,c), I[142] = (T)(img)(_p1##x,_n3##y,_p1##z,c), I[143] = (T)(img)(x,_n3##y,_p1##z,c), I[144] = (T)(img)(_n1##x,_n3##y,_p1##z,c), I[145] = (T)(img)(_n2##x,_n3##y,_p1##z,c), I[146] = (T)(img)(_n3##x,_n3##y,_p1##z,c), \ - I[147] = (T)(img)(_p3##x,_p3##y,z,c), I[148] = (T)(img)(_p2##x,_p3##y,z,c), I[149] = (T)(img)(_p1##x,_p3##y,z,c), I[150] = (T)(img)(x,_p3##y,z,c), I[151] = (T)(img)(_n1##x,_p3##y,z,c), I[152] = (T)(img)(_n2##x,_p3##y,z,c), I[153] = (T)(img)(_n3##x,_p3##y,z,c), \ - I[154] = (T)(img)(_p3##x,_p2##y,z,c), I[155] = (T)(img)(_p2##x,_p2##y,z,c), I[156] = (T)(img)(_p1##x,_p2##y,z,c), I[157] = (T)(img)(x,_p2##y,z,c), I[158] = (T)(img)(_n1##x,_p2##y,z,c), I[159] = (T)(img)(_n2##x,_p2##y,z,c), I[160] = (T)(img)(_n3##x,_p2##y,z,c), \ - I[161] = (T)(img)(_p3##x,_p1##y,z,c), I[162] = (T)(img)(_p2##x,_p1##y,z,c), I[163] = (T)(img)(_p1##x,_p1##y,z,c), I[164] = (T)(img)(x,_p1##y,z,c), I[165] = (T)(img)(_n1##x,_p1##y,z,c), I[166] = (T)(img)(_n2##x,_p1##y,z,c), I[167] = (T)(img)(_n3##x,_p1##y,z,c), \ - I[168] = (T)(img)(_p3##x,y,z,c), I[169] = (T)(img)(_p2##x,y,z,c), I[170] = (T)(img)(_p1##x,y,z,c), I[171] = (T)(img)(x,y,z,c), I[172] = (T)(img)(_n1##x,y,z,c), I[173] = (T)(img)(_n2##x,y,z,c), I[174] = (T)(img)(_n3##x,y,z,c), \ - I[175] = (T)(img)(_p3##x,_n1##y,z,c), I[176] = (T)(img)(_p2##x,_n1##y,z,c), I[177] = (T)(img)(_p1##x,_n1##y,z,c), I[178] = (T)(img)(x,_n1##y,z,c), I[179] = (T)(img)(_n1##x,_n1##y,z,c), I[180] = (T)(img)(_n2##x,_n1##y,z,c), I[181] = (T)(img)(_n3##x,_n1##y,z,c), \ - I[182] = (T)(img)(_p3##x,_n2##y,z,c), I[183] = (T)(img)(_p2##x,_n2##y,z,c), I[184] = (T)(img)(_p1##x,_n2##y,z,c), I[185] = (T)(img)(x,_n2##y,z,c), I[186] = (T)(img)(_n1##x,_n2##y,z,c), I[187] = (T)(img)(_n2##x,_n2##y,z,c), I[188] = (T)(img)(_n3##x,_n2##y,z,c), \ - I[189] = (T)(img)(_p3##x,_n3##y,z,c), I[190] = (T)(img)(_p2##x,_n3##y,z,c), I[191] = (T)(img)(_p1##x,_n3##y,z,c), I[192] = (T)(img)(x,_n3##y,z,c), I[193] = (T)(img)(_n1##x,_n3##y,z,c), I[194] = (T)(img)(_n2##x,_n3##y,z,c), I[195] = (T)(img)(_n3##x,_n3##y,z,c), \ - I[196] = (T)(img)(_p3##x,_p3##y,_n1##z,c), I[197] = (T)(img)(_p2##x,_p3##y,_n1##z,c), I[198] = (T)(img)(_p1##x,_p3##y,_n1##z,c), I[199] = (T)(img)(x,_p3##y,_n1##z,c), I[200] = (T)(img)(_n1##x,_p3##y,_n1##z,c), I[201] = (T)(img)(_n2##x,_p3##y,_n1##z,c), I[202] = (T)(img)(_n3##x,_p3##y,_n1##z,c), \ - I[203] = (T)(img)(_p3##x,_p2##y,_n1##z,c), I[204] = (T)(img)(_p2##x,_p2##y,_n1##z,c), I[205] = (T)(img)(_p1##x,_p2##y,_n1##z,c), I[206] = (T)(img)(x,_p2##y,_n1##z,c), I[207] = (T)(img)(_n1##x,_p2##y,_n1##z,c), I[208] = (T)(img)(_n2##x,_p2##y,_n1##z,c), I[209] = (T)(img)(_n3##x,_p2##y,_n1##z,c), \ - I[210] = (T)(img)(_p3##x,_p1##y,_n1##z,c), I[211] = (T)(img)(_p2##x,_p1##y,_n1##z,c), I[212] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[213] = (T)(img)(x,_p1##y,_n1##z,c), I[214] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[215] = (T)(img)(_n2##x,_p1##y,_n1##z,c), I[216] = (T)(img)(_n3##x,_p1##y,_n1##z,c), \ - I[217] = (T)(img)(_p3##x,y,_n1##z,c), I[218] = (T)(img)(_p2##x,y,_n1##z,c), I[219] = (T)(img)(_p1##x,y,_n1##z,c), I[220] = (T)(img)(x,y,_n1##z,c), I[221] = (T)(img)(_n1##x,y,_n1##z,c), I[222] = (T)(img)(_n2##x,y,_n1##z,c), I[223] = (T)(img)(_n3##x,y,_n1##z,c), \ - I[224] = (T)(img)(_p3##x,_n1##y,_n1##z,c), I[225] = (T)(img)(_p2##x,_n1##y,_n1##z,c), I[226] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[227] = (T)(img)(x,_n1##y,_n1##z,c), I[228] = (T)(img)(_n1##x,_n1##y,_n1##z,c), I[229] = (T)(img)(_n2##x,_n1##y,_n1##z,c), I[230] = (T)(img)(_n3##x,_n1##y,_n1##z,c), \ - I[231] = (T)(img)(_p3##x,_n2##y,_n1##z,c), I[232] = (T)(img)(_p2##x,_n2##y,_n1##z,c), I[233] = (T)(img)(_p1##x,_n2##y,_n1##z,c), I[234] = (T)(img)(x,_n2##y,_n1##z,c), I[235] = (T)(img)(_n1##x,_n2##y,_n1##z,c), I[236] = (T)(img)(_n2##x,_n2##y,_n1##z,c), I[237] = (T)(img)(_n3##x,_n2##y,_n1##z,c), \ - I[238] = (T)(img)(_p3##x,_n3##y,_n1##z,c), I[239] = (T)(img)(_p2##x,_n3##y,_n1##z,c), I[240] = (T)(img)(_p1##x,_n3##y,_n1##z,c), I[241] = (T)(img)(x,_n3##y,_n1##z,c), I[242] = (T)(img)(_n1##x,_n3##y,_n1##z,c), I[243] = (T)(img)(_n2##x,_n3##y,_n1##z,c), I[244] = (T)(img)(_n3##x,_n3##y,_n1##z,c), \ - I[245] = (T)(img)(_p3##x,_p3##y,_n2##z,c), I[246] = (T)(img)(_p2##x,_p3##y,_n2##z,c), I[247] = (T)(img)(_p1##x,_p3##y,_n2##z,c), I[248] = (T)(img)(x,_p3##y,_n2##z,c), I[249] = (T)(img)(_n1##x,_p3##y,_n2##z,c), I[250] = (T)(img)(_n2##x,_p3##y,_n2##z,c), I[251] = (T)(img)(_n3##x,_p3##y,_n2##z,c), \ - I[252] = (T)(img)(_p3##x,_p2##y,_n2##z,c), I[253] = (T)(img)(_p2##x,_p2##y,_n2##z,c), I[254] = (T)(img)(_p1##x,_p2##y,_n2##z,c), I[255] = (T)(img)(x,_p2##y,_n2##z,c), I[256] = (T)(img)(_n1##x,_p2##y,_n2##z,c), I[257] = (T)(img)(_n2##x,_p2##y,_n2##z,c), I[258] = (T)(img)(_n3##x,_p2##y,_n2##z,c), \ - I[259] = (T)(img)(_p3##x,_p1##y,_n2##z,c), I[260] = (T)(img)(_p2##x,_p1##y,_n2##z,c), I[261] = (T)(img)(_p1##x,_p1##y,_n2##z,c), I[262] = (T)(img)(x,_p1##y,_n2##z,c), I[263] = (T)(img)(_n1##x,_p1##y,_n2##z,c), I[264] = (T)(img)(_n2##x,_p1##y,_n2##z,c), I[265] = (T)(img)(_n3##x,_p1##y,_n2##z,c), \ - I[266] = (T)(img)(_p3##x,y,_n2##z,c), I[267] = (T)(img)(_p2##x,y,_n2##z,c), I[268] = (T)(img)(_p1##x,y,_n2##z,c), I[269] = (T)(img)(x,y,_n2##z,c), I[270] = (T)(img)(_n1##x,y,_n2##z,c), I[271] = (T)(img)(_n2##x,y,_n2##z,c), I[272] = (T)(img)(_n3##x,y,_n2##z,c), \ - I[273] = (T)(img)(_p3##x,_n1##y,_n2##z,c), I[274] = (T)(img)(_p2##x,_n1##y,_n2##z,c), I[275] = (T)(img)(_p1##x,_n1##y,_n2##z,c), I[276] = (T)(img)(x,_n1##y,_n2##z,c), I[277] = (T)(img)(_n1##x,_n1##y,_n2##z,c), I[278] = (T)(img)(_n2##x,_n1##y,_n2##z,c), I[279] = (T)(img)(_n3##x,_n1##y,_n2##z,c), \ - I[280] = (T)(img)(_p3##x,_n2##y,_n2##z,c), I[281] = (T)(img)(_p2##x,_n2##y,_n2##z,c), I[282] = (T)(img)(_p1##x,_n2##y,_n2##z,c), I[283] = (T)(img)(x,_n2##y,_n2##z,c), I[284] = (T)(img)(_n1##x,_n2##y,_n2##z,c), I[285] = (T)(img)(_n2##x,_n2##y,_n2##z,c), I[286] = (T)(img)(_n3##x,_n2##y,_n2##z,c), \ - I[287] = (T)(img)(_p3##x,_n3##y,_n2##z,c), I[288] = (T)(img)(_p2##x,_n3##y,_n2##z,c), I[289] = (T)(img)(_p1##x,_n3##y,_n2##z,c), I[290] = (T)(img)(x,_n3##y,_n2##z,c), I[291] = (T)(img)(_n1##x,_n3##y,_n2##z,c), I[292] = (T)(img)(_n2##x,_n3##y,_n2##z,c), I[293] = (T)(img)(_n3##x,_n3##y,_n2##z,c), \ - I[294] = (T)(img)(_p3##x,_p3##y,_n3##z,c), I[295] = (T)(img)(_p2##x,_p3##y,_n3##z,c), I[296] = (T)(img)(_p1##x,_p3##y,_n3##z,c), I[297] = (T)(img)(x,_p3##y,_n3##z,c), I[298] = (T)(img)(_n1##x,_p3##y,_n3##z,c), I[299] = (T)(img)(_n2##x,_p3##y,_n3##z,c), I[300] = (T)(img)(_n3##x,_p3##y,_n3##z,c), \ - I[301] = (T)(img)(_p3##x,_p2##y,_n3##z,c), I[302] = (T)(img)(_p2##x,_p2##y,_n3##z,c), I[303] = (T)(img)(_p1##x,_p2##y,_n3##z,c), I[304] = (T)(img)(x,_p2##y,_n3##z,c), I[305] = (T)(img)(_n1##x,_p2##y,_n3##z,c), I[306] = (T)(img)(_n2##x,_p2##y,_n3##z,c), I[307] = (T)(img)(_n3##x,_p2##y,_n3##z,c), \ - I[308] = (T)(img)(_p3##x,_p1##y,_n3##z,c), I[309] = (T)(img)(_p2##x,_p1##y,_n3##z,c), I[310] = (T)(img)(_p1##x,_p1##y,_n3##z,c), I[311] = (T)(img)(x,_p1##y,_n3##z,c), I[312] = (T)(img)(_n1##x,_p1##y,_n3##z,c), I[313] = (T)(img)(_n2##x,_p1##y,_n3##z,c), I[314] = (T)(img)(_n3##x,_p1##y,_n3##z,c), \ - I[315] = (T)(img)(_p3##x,y,_n3##z,c), I[316] = (T)(img)(_p2##x,y,_n3##z,c), I[317] = (T)(img)(_p1##x,y,_n3##z,c), I[318] = (T)(img)(x,y,_n3##z,c), I[319] = (T)(img)(_n1##x,y,_n3##z,c), I[320] = (T)(img)(_n2##x,y,_n3##z,c), I[321] = (T)(img)(_n3##x,y,_n3##z,c), \ - I[322] = (T)(img)(_p3##x,_n1##y,_n3##z,c), I[323] = (T)(img)(_p2##x,_n1##y,_n3##z,c), I[324] = (T)(img)(_p1##x,_n1##y,_n3##z,c), I[325] = (T)(img)(x,_n1##y,_n3##z,c), I[326] = (T)(img)(_n1##x,_n1##y,_n3##z,c), I[327] = (T)(img)(_n2##x,_n1##y,_n3##z,c), I[328] = (T)(img)(_n3##x,_n1##y,_n3##z,c), \ - I[329] = (T)(img)(_p3##x,_n2##y,_n3##z,c), I[330] = (T)(img)(_p2##x,_n2##y,_n3##z,c), I[331] = (T)(img)(_p1##x,_n2##y,_n3##z,c), I[332] = (T)(img)(x,_n2##y,_n3##z,c), I[333] = (T)(img)(_n1##x,_n2##y,_n3##z,c), I[334] = (T)(img)(_n2##x,_n2##y,_n3##z,c), I[335] = (T)(img)(_n3##x,_n2##y,_n3##z,c), \ - I[336] = (T)(img)(_p3##x,_n3##y,_n3##z,c), I[337] = (T)(img)(_p2##x,_n3##y,_n3##z,c), I[338] = (T)(img)(_p1##x,_n3##y,_n3##z,c), I[339] = (T)(img)(x,_n3##y,_n3##z,c), I[340] = (T)(img)(_n1##x,_n3##y,_n3##z,c), I[341] = (T)(img)(_n2##x,_n3##y,_n3##z,c), I[342] = (T)(img)(_n3##x,_n3##y,_n3##z,c); - -// Define 8x8x8 loop macros -//---------------------------- -#define cimg_for8x8x8(img,x,y,z,c,I,T) \ - cimg_for8((img)._depth,z) cimg_for8((img)._height,y) for (int x = 0, \ - _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ - _n4##x = (int)( \ - (I[0] = I[1] = I[2] = I[3] = (T)(img)(0,_p3##y,_p3##z,c)), \ - (I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p2##y,_p3##z,c)), \ - (I[16] = I[17] = I[18] = I[19] = (T)(img)(0,_p1##y,_p3##z,c)), \ - (I[24] = I[25] = I[26] = I[27] = (T)(img)(0,y,_p3##z,c)), \ - (I[32] = I[33] = I[34] = I[35] = (T)(img)(0,_n1##y,_p3##z,c)), \ - (I[40] = I[41] = I[42] = I[43] = (T)(img)(0,_n2##y,_p3##z,c)), \ - (I[48] = I[49] = I[50] = I[51] = (T)(img)(0,_n3##y,_p3##z,c)), \ - (I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_n4##y,_p3##z,c)), \ - (I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_p3##y,_p2##z,c)), \ - (I[72] = I[73] = I[74] = I[75] = (T)(img)(0,_p2##y,_p2##z,c)), \ - (I[80] = I[81] = I[82] = I[83] = (T)(img)(0,_p1##y,_p2##z,c)), \ - (I[88] = I[89] = I[90] = I[91] = (T)(img)(0,y,_p2##z,c)), \ - (I[96] = I[97] = I[98] = I[99] = (T)(img)(0,_n1##y,_p2##z,c)), \ - (I[104] = I[105] = I[106] = I[107] = (T)(img)(0,_n2##y,_p2##z,c)), \ - (I[112] = I[113] = I[114] = I[115] = (T)(img)(0,_n3##y,_p2##z,c)), \ - (I[120] = I[121] = I[122] = I[123] = (T)(img)(0,_n4##y,_p2##z,c)), \ - (I[128] = I[129] = I[130] = I[131] = (T)(img)(0,_p3##y,_p1##z,c)), \ - (I[136] = I[137] = I[138] = I[139] = (T)(img)(0,_p2##y,_p1##z,c)), \ - (I[144] = I[145] = I[146] = I[147] = (T)(img)(0,_p1##y,_p1##z,c)), \ - (I[152] = I[153] = I[154] = I[155] = (T)(img)(0,y,_p1##z,c)), \ - (I[160] = I[161] = I[162] = I[163] = (T)(img)(0,_n1##y,_p1##z,c)), \ - (I[168] = I[169] = I[170] = I[171] = (T)(img)(0,_n2##y,_p1##z,c)), \ - (I[176] = I[177] = I[178] = I[179] = (T)(img)(0,_n3##y,_p1##z,c)), \ - (I[184] = I[185] = I[186] = I[187] = (T)(img)(0,_n4##y,_p1##z,c)), \ - (I[192] = I[193] = I[194] = I[195] = (T)(img)(0,_p3##y,z,c)), \ - (I[200] = I[201] = I[202] = I[203] = (T)(img)(0,_p2##y,z,c)), \ - (I[208] = I[209] = I[210] = I[211] = (T)(img)(0,_p1##y,z,c)), \ - (I[216] = I[217] = I[218] = I[219] = (T)(img)(0,y,z,c)), \ - (I[224] = I[225] = I[226] = I[227] = (T)(img)(0,_n1##y,z,c)), \ - (I[232] = I[233] = I[234] = I[235] = (T)(img)(0,_n2##y,z,c)), \ - (I[240] = I[241] = I[242] = I[243] = (T)(img)(0,_n3##y,z,c)), \ - (I[248] = I[249] = I[250] = I[251] = (T)(img)(0,_n4##y,z,c)), \ - (I[256] = I[257] = I[258] = I[259] = (T)(img)(0,_p3##y,_n1##z,c)), \ - (I[264] = I[265] = I[266] = I[267] = (T)(img)(0,_p2##y,_n1##z,c)), \ - (I[272] = I[273] = I[274] = I[275] = (T)(img)(0,_p1##y,_n1##z,c)), \ - (I[280] = I[281] = I[282] = I[283] = (T)(img)(0,y,_n1##z,c)), \ - (I[288] = I[289] = I[290] = I[291] = (T)(img)(0,_n1##y,_n1##z,c)), \ - (I[296] = I[297] = I[298] = I[299] = (T)(img)(0,_n2##y,_n1##z,c)), \ - (I[304] = I[305] = I[306] = I[307] = (T)(img)(0,_n3##y,_n1##z,c)), \ - (I[312] = I[313] = I[314] = I[315] = (T)(img)(0,_n4##y,_n1##z,c)), \ - (I[320] = I[321] = I[322] = I[323] = (T)(img)(0,_p3##y,_n2##z,c)), \ - (I[328] = I[329] = I[330] = I[331] = (T)(img)(0,_p2##y,_n2##z,c)), \ - (I[336] = I[337] = I[338] = I[339] = (T)(img)(0,_p1##y,_n2##z,c)), \ - (I[344] = I[345] = I[346] = I[347] = (T)(img)(0,y,_n2##z,c)), \ - (I[352] = I[353] = I[354] = I[355] = (T)(img)(0,_n1##y,_n2##z,c)), \ - (I[360] = I[361] = I[362] = I[363] = (T)(img)(0,_n2##y,_n2##z,c)), \ - (I[368] = I[369] = I[370] = I[371] = (T)(img)(0,_n3##y,_n2##z,c)), \ - (I[376] = I[377] = I[378] = I[379] = (T)(img)(0,_n4##y,_n2##z,c)), \ - (I[384] = I[385] = I[386] = I[387] = (T)(img)(0,_p3##y,_n3##z,c)), \ - (I[392] = I[393] = I[394] = I[395] = (T)(img)(0,_p2##y,_n3##z,c)), \ - (I[400] = I[401] = I[402] = I[403] = (T)(img)(0,_p1##y,_n3##z,c)), \ - (I[408] = I[409] = I[410] = I[411] = (T)(img)(0,y,_n3##z,c)), \ - (I[416] = I[417] = I[418] = I[419] = (T)(img)(0,_n1##y,_n3##z,c)), \ - (I[424] = I[425] = I[426] = I[427] = (T)(img)(0,_n2##y,_n3##z,c)), \ - (I[432] = I[433] = I[434] = I[435] = (T)(img)(0,_n3##y,_n3##z,c)), \ - (I[440] = I[441] = I[442] = I[443] = (T)(img)(0,_n4##y,_n3##z,c)), \ - (I[448] = I[449] = I[450] = I[451] = (T)(img)(0,_p3##y,_n4##z,c)), \ - (I[456] = I[457] = I[458] = I[459] = (T)(img)(0,_p2##y,_n4##z,c)), \ - (I[464] = I[465] = I[466] = I[467] = (T)(img)(0,_p1##y,_n4##z,c)), \ - (I[472] = I[473] = I[474] = I[475] = (T)(img)(0,y,_n4##z,c)), \ - (I[480] = I[481] = I[482] = I[483] = (T)(img)(0,_n1##y,_n4##z,c)), \ - (I[488] = I[489] = I[490] = I[491] = (T)(img)(0,_n2##y,_n4##z,c)), \ - (I[496] = I[497] = I[498] = I[499] = (T)(img)(0,_n3##y,_n4##z,c)), \ - (I[504] = I[505] = I[506] = I[507] = (T)(img)(0,_n4##y,_n4##z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c)), \ - (I[12] = (T)(img)(_n1##x,_p2##y,_p3##z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,_p3##z,c)), \ - (I[28] = (T)(img)(_n1##x,y,_p3##z,c)), \ - (I[36] = (T)(img)(_n1##x,_n1##y,_p3##z,c)), \ - (I[44] = (T)(img)(_n1##x,_n2##y,_p3##z,c)), \ - (I[52] = (T)(img)(_n1##x,_n3##y,_p3##z,c)), \ - (I[60] = (T)(img)(_n1##x,_n4##y,_p3##z,c)), \ - (I[68] = (T)(img)(_n1##x,_p3##y,_p2##z,c)), \ - (I[76] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[84] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[92] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[100] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[108] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[116] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[124] = (T)(img)(_n1##x,_n4##y,_p2##z,c)), \ - (I[132] = (T)(img)(_n1##x,_p3##y,_p1##z,c)), \ - (I[140] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[148] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[156] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[164] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[172] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[180] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[188] = (T)(img)(_n1##x,_n4##y,_p1##z,c)), \ - (I[196] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[204] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[212] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[220] = (T)(img)(_n1##x,y,z,c)), \ - (I[228] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[236] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[244] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[252] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[260] = (T)(img)(_n1##x,_p3##y,_n1##z,c)), \ - (I[268] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[276] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[284] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[292] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[300] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[308] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[316] = (T)(img)(_n1##x,_n4##y,_n1##z,c)), \ - (I[324] = (T)(img)(_n1##x,_p3##y,_n2##z,c)), \ - (I[332] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[340] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[348] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[356] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[364] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[372] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[380] = (T)(img)(_n1##x,_n4##y,_n2##z,c)), \ - (I[388] = (T)(img)(_n1##x,_p3##y,_n3##z,c)), \ - (I[396] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[404] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[412] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[420] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[428] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[436] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[444] = (T)(img)(_n1##x,_n4##y,_n3##z,c)), \ - (I[452] = (T)(img)(_n1##x,_p3##y,_n4##z,c)), \ - (I[460] = (T)(img)(_n1##x,_p2##y,_n4##z,c)), \ - (I[468] = (T)(img)(_n1##x,_p1##y,_n4##z,c)), \ - (I[476] = (T)(img)(_n1##x,y,_n4##z,c)), \ - (I[484] = (T)(img)(_n1##x,_n1##y,_n4##z,c)), \ - (I[492] = (T)(img)(_n1##x,_n2##y,_n4##z,c)), \ - (I[500] = (T)(img)(_n1##x,_n3##y,_n4##z,c)), \ - (I[508] = (T)(img)(_n1##x,_n4##y,_n4##z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c)), \ - (I[13] = (T)(img)(_n2##x,_p2##y,_p3##z,c)), \ - (I[21] = (T)(img)(_n2##x,_p1##y,_p3##z,c)), \ - (I[29] = (T)(img)(_n2##x,y,_p3##z,c)), \ - (I[37] = (T)(img)(_n2##x,_n1##y,_p3##z,c)), \ - (I[45] = (T)(img)(_n2##x,_n2##y,_p3##z,c)), \ - (I[53] = (T)(img)(_n2##x,_n3##y,_p3##z,c)), \ - (I[61] = (T)(img)(_n2##x,_n4##y,_p3##z,c)), \ - (I[69] = (T)(img)(_n2##x,_p3##y,_p2##z,c)), \ - (I[77] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[85] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[93] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[101] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[109] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[117] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[125] = (T)(img)(_n2##x,_n4##y,_p2##z,c)), \ - (I[133] = (T)(img)(_n2##x,_p3##y,_p1##z,c)), \ - (I[141] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[149] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[157] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[165] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[173] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[181] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[189] = (T)(img)(_n2##x,_n4##y,_p1##z,c)), \ - (I[197] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[205] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[213] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[221] = (T)(img)(_n2##x,y,z,c)), \ - (I[229] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[237] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[245] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[253] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[261] = (T)(img)(_n2##x,_p3##y,_n1##z,c)), \ - (I[269] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[277] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[285] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[293] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[301] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[309] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[317] = (T)(img)(_n2##x,_n4##y,_n1##z,c)), \ - (I[325] = (T)(img)(_n2##x,_p3##y,_n2##z,c)), \ - (I[333] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[341] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[349] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[357] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[365] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[373] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[381] = (T)(img)(_n2##x,_n4##y,_n2##z,c)), \ - (I[389] = (T)(img)(_n2##x,_p3##y,_n3##z,c)), \ - (I[397] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[405] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[413] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[421] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[429] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[437] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - (I[445] = (T)(img)(_n2##x,_n4##y,_n3##z,c)), \ - (I[453] = (T)(img)(_n2##x,_p3##y,_n4##z,c)), \ - (I[461] = (T)(img)(_n2##x,_p2##y,_n4##z,c)), \ - (I[469] = (T)(img)(_n2##x,_p1##y,_n4##z,c)), \ - (I[477] = (T)(img)(_n2##x,y,_n4##z,c)), \ - (I[485] = (T)(img)(_n2##x,_n1##y,_n4##z,c)), \ - (I[493] = (T)(img)(_n2##x,_n2##y,_n4##z,c)), \ - (I[501] = (T)(img)(_n2##x,_n3##y,_n4##z,c)), \ - (I[509] = (T)(img)(_n2##x,_n4##y,_n4##z,c)), \ - (I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c)), \ - (I[14] = (T)(img)(_n3##x,_p2##y,_p3##z,c)), \ - (I[22] = (T)(img)(_n3##x,_p1##y,_p3##z,c)), \ - (I[30] = (T)(img)(_n3##x,y,_p3##z,c)), \ - (I[38] = (T)(img)(_n3##x,_n1##y,_p3##z,c)), \ - (I[46] = (T)(img)(_n3##x,_n2##y,_p3##z,c)), \ - (I[54] = (T)(img)(_n3##x,_n3##y,_p3##z,c)), \ - (I[62] = (T)(img)(_n3##x,_n4##y,_p3##z,c)), \ - (I[70] = (T)(img)(_n3##x,_p3##y,_p2##z,c)), \ - (I[78] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[86] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[94] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[102] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[110] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[118] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[126] = (T)(img)(_n3##x,_n4##y,_p2##z,c)), \ - (I[134] = (T)(img)(_n3##x,_p3##y,_p1##z,c)), \ - (I[142] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[150] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[158] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[166] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[174] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[182] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[190] = (T)(img)(_n3##x,_n4##y,_p1##z,c)), \ - (I[198] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[206] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[214] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[222] = (T)(img)(_n3##x,y,z,c)), \ - (I[230] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[238] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[246] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[254] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[262] = (T)(img)(_n3##x,_p3##y,_n1##z,c)), \ - (I[270] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[278] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[286] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[294] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[302] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[310] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[318] = (T)(img)(_n3##x,_n4##y,_n1##z,c)), \ - (I[326] = (T)(img)(_n3##x,_p3##y,_n2##z,c)), \ - (I[334] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[342] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[350] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[358] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[366] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[374] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[382] = (T)(img)(_n3##x,_n4##y,_n2##z,c)), \ - (I[390] = (T)(img)(_n3##x,_p3##y,_n3##z,c)), \ - (I[398] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[406] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[414] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[422] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[430] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[438] = (T)(img)(_n3##x,_n3##y,_n3##z,c)), \ - (I[446] = (T)(img)(_n3##x,_n4##y,_n3##z,c)), \ - (I[454] = (T)(img)(_n3##x,_p3##y,_n4##z,c)), \ - (I[462] = (T)(img)(_n3##x,_p2##y,_n4##z,c)), \ - (I[470] = (T)(img)(_n3##x,_p1##y,_n4##z,c)), \ - (I[478] = (T)(img)(_n3##x,y,_n4##z,c)), \ - (I[486] = (T)(img)(_n3##x,_n1##y,_n4##z,c)), \ - (I[494] = (T)(img)(_n3##x,_n2##y,_n4##z,c)), \ - (I[502] = (T)(img)(_n3##x,_n3##y,_n4##z,c)), \ - (I[510] = (T)(img)(_n3##x,_n4##y,_n4##z,c)), \ - 4>=((img)._width)?(img).width()-1:4); \ - (_n4##x<(img).width() && ( \ - (I[7] = (T)(img)(_n4##x,_p3##y,_p3##z,c)), \ - (I[15] = (T)(img)(_n4##x,_p2##y,_p3##z,c)), \ - (I[23] = (T)(img)(_n4##x,_p1##y,_p3##z,c)), \ - (I[31] = (T)(img)(_n4##x,y,_p3##z,c)), \ - (I[39] = (T)(img)(_n4##x,_n1##y,_p3##z,c)), \ - (I[47] = (T)(img)(_n4##x,_n2##y,_p3##z,c)), \ - (I[55] = (T)(img)(_n4##x,_n3##y,_p3##z,c)), \ - (I[63] = (T)(img)(_n4##x,_n4##y,_p3##z,c)), \ - (I[71] = (T)(img)(_n4##x,_p3##y,_p2##z,c)), \ - (I[79] = (T)(img)(_n4##x,_p2##y,_p2##z,c)), \ - (I[87] = (T)(img)(_n4##x,_p1##y,_p2##z,c)), \ - (I[95] = (T)(img)(_n4##x,y,_p2##z,c)), \ - (I[103] = (T)(img)(_n4##x,_n1##y,_p2##z,c)), \ - (I[111] = (T)(img)(_n4##x,_n2##y,_p2##z,c)), \ - (I[119] = (T)(img)(_n4##x,_n3##y,_p2##z,c)), \ - (I[127] = (T)(img)(_n4##x,_n4##y,_p2##z,c)), \ - (I[135] = (T)(img)(_n4##x,_p3##y,_p1##z,c)), \ - (I[143] = (T)(img)(_n4##x,_p2##y,_p1##z,c)), \ - (I[151] = (T)(img)(_n4##x,_p1##y,_p1##z,c)), \ - (I[159] = (T)(img)(_n4##x,y,_p1##z,c)), \ - (I[167] = (T)(img)(_n4##x,_n1##y,_p1##z,c)), \ - (I[175] = (T)(img)(_n4##x,_n2##y,_p1##z,c)), \ - (I[183] = (T)(img)(_n4##x,_n3##y,_p1##z,c)), \ - (I[191] = (T)(img)(_n4##x,_n4##y,_p1##z,c)), \ - (I[199] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[207] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[215] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[223] = (T)(img)(_n4##x,y,z,c)), \ - (I[231] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[239] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[247] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[255] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[263] = (T)(img)(_n4##x,_p3##y,_n1##z,c)), \ - (I[271] = (T)(img)(_n4##x,_p2##y,_n1##z,c)), \ - (I[279] = (T)(img)(_n4##x,_p1##y,_n1##z,c)), \ - (I[287] = (T)(img)(_n4##x,y,_n1##z,c)), \ - (I[295] = (T)(img)(_n4##x,_n1##y,_n1##z,c)), \ - (I[303] = (T)(img)(_n4##x,_n2##y,_n1##z,c)), \ - (I[311] = (T)(img)(_n4##x,_n3##y,_n1##z,c)), \ - (I[319] = (T)(img)(_n4##x,_n4##y,_n1##z,c)), \ - (I[327] = (T)(img)(_n4##x,_p3##y,_n2##z,c)), \ - (I[335] = (T)(img)(_n4##x,_p2##y,_n2##z,c)), \ - (I[343] = (T)(img)(_n4##x,_p1##y,_n2##z,c)), \ - (I[351] = (T)(img)(_n4##x,y,_n2##z,c)), \ - (I[359] = (T)(img)(_n4##x,_n1##y,_n2##z,c)), \ - (I[367] = (T)(img)(_n4##x,_n2##y,_n2##z,c)), \ - (I[375] = (T)(img)(_n4##x,_n3##y,_n2##z,c)), \ - (I[383] = (T)(img)(_n4##x,_n4##y,_n2##z,c)), \ - (I[391] = (T)(img)(_n4##x,_p3##y,_n3##z,c)), \ - (I[399] = (T)(img)(_n4##x,_p2##y,_n3##z,c)), \ - (I[407] = (T)(img)(_n4##x,_p1##y,_n3##z,c)), \ - (I[415] = (T)(img)(_n4##x,y,_n3##z,c)), \ - (I[423] = (T)(img)(_n4##x,_n1##y,_n3##z,c)), \ - (I[431] = (T)(img)(_n4##x,_n2##y,_n3##z,c)), \ - (I[439] = (T)(img)(_n4##x,_n3##y,_n3##z,c)), \ - (I[447] = (T)(img)(_n4##x,_n4##y,_n3##z,c)), \ - (I[455] = (T)(img)(_n4##x,_p3##y,_n4##z,c)), \ - (I[463] = (T)(img)(_n4##x,_p2##y,_n4##z,c)), \ - (I[471] = (T)(img)(_n4##x,_p1##y,_n4##z,c)), \ - (I[479] = (T)(img)(_n4##x,y,_n4##z,c)), \ - (I[487] = (T)(img)(_n4##x,_n1##y,_n4##z,c)), \ - (I[495] = (T)(img)(_n4##x,_n2##y,_n4##z,c)), \ - (I[503] = (T)(img)(_n4##x,_n3##y,_n4##z,c)), \ - (I[511] = (T)(img)(_n4##x,_n4##y,_n4##z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], \ - I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], \ - I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], \ - I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], \ - I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], \ - I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], \ - I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], \ - I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], \ - I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], \ - I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], \ - I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], \ - I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], \ - I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], \ - I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], \ - I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], \ - I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], \ - I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], \ - I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], \ - I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], \ - I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], \ - I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], \ - I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_for_in8x8x8(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ - cimg_for_in8((img)._depth,z0,z1,z) cimg_for_in8((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ - _n4##x = (int)( \ - (I[0] = (T)(img)(_p3##x,_p3##y,_p3##z,c)), \ - (I[8] = (T)(img)(_p3##x,_p2##y,_p3##z,c)), \ - (I[16] = (T)(img)(_p3##x,_p1##y,_p3##z,c)), \ - (I[24] = (T)(img)(_p3##x,y,_p3##z,c)), \ - (I[32] = (T)(img)(_p3##x,_n1##y,_p3##z,c)), \ - (I[40] = (T)(img)(_p3##x,_n2##y,_p3##z,c)), \ - (I[48] = (T)(img)(_p3##x,_n3##y,_p3##z,c)), \ - (I[56] = (T)(img)(_p3##x,_n4##y,_p3##z,c)), \ - (I[64] = (T)(img)(_p3##x,_p3##y,_p2##z,c)), \ - (I[72] = (T)(img)(_p3##x,_p2##y,_p2##z,c)), \ - (I[80] = (T)(img)(_p3##x,_p1##y,_p2##z,c)), \ - (I[88] = (T)(img)(_p3##x,y,_p2##z,c)), \ - (I[96] = (T)(img)(_p3##x,_n1##y,_p2##z,c)), \ - (I[104] = (T)(img)(_p3##x,_n2##y,_p2##z,c)), \ - (I[112] = (T)(img)(_p3##x,_n3##y,_p2##z,c)), \ - (I[120] = (T)(img)(_p3##x,_n4##y,_p2##z,c)), \ - (I[128] = (T)(img)(_p3##x,_p3##y,_p1##z,c)), \ - (I[136] = (T)(img)(_p3##x,_p2##y,_p1##z,c)), \ - (I[144] = (T)(img)(_p3##x,_p1##y,_p1##z,c)), \ - (I[152] = (T)(img)(_p3##x,y,_p1##z,c)), \ - (I[160] = (T)(img)(_p3##x,_n1##y,_p1##z,c)), \ - (I[168] = (T)(img)(_p3##x,_n2##y,_p1##z,c)), \ - (I[176] = (T)(img)(_p3##x,_n3##y,_p1##z,c)), \ - (I[184] = (T)(img)(_p3##x,_n4##y,_p1##z,c)), \ - (I[192] = (T)(img)(_p3##x,_p3##y,z,c)), \ - (I[200] = (T)(img)(_p3##x,_p2##y,z,c)), \ - (I[208] = (T)(img)(_p3##x,_p1##y,z,c)), \ - (I[216] = (T)(img)(_p3##x,y,z,c)), \ - (I[224] = (T)(img)(_p3##x,_n1##y,z,c)), \ - (I[232] = (T)(img)(_p3##x,_n2##y,z,c)), \ - (I[240] = (T)(img)(_p3##x,_n3##y,z,c)), \ - (I[248] = (T)(img)(_p3##x,_n4##y,z,c)), \ - (I[256] = (T)(img)(_p3##x,_p3##y,_n1##z,c)), \ - (I[264] = (T)(img)(_p3##x,_p2##y,_n1##z,c)), \ - (I[272] = (T)(img)(_p3##x,_p1##y,_n1##z,c)), \ - (I[280] = (T)(img)(_p3##x,y,_n1##z,c)), \ - (I[288] = (T)(img)(_p3##x,_n1##y,_n1##z,c)), \ - (I[296] = (T)(img)(_p3##x,_n2##y,_n1##z,c)), \ - (I[304] = (T)(img)(_p3##x,_n3##y,_n1##z,c)), \ - (I[312] = (T)(img)(_p3##x,_n4##y,_n1##z,c)), \ - (I[320] = (T)(img)(_p3##x,_p3##y,_n2##z,c)), \ - (I[328] = (T)(img)(_p3##x,_p2##y,_n2##z,c)), \ - (I[336] = (T)(img)(_p3##x,_p1##y,_n2##z,c)), \ - (I[344] = (T)(img)(_p3##x,y,_n2##z,c)), \ - (I[352] = (T)(img)(_p3##x,_n1##y,_n2##z,c)), \ - (I[360] = (T)(img)(_p3##x,_n2##y,_n2##z,c)), \ - (I[368] = (T)(img)(_p3##x,_n3##y,_n2##z,c)), \ - (I[376] = (T)(img)(_p3##x,_n4##y,_n2##z,c)), \ - (I[384] = (T)(img)(_p3##x,_p3##y,_n3##z,c)), \ - (I[392] = (T)(img)(_p3##x,_p2##y,_n3##z,c)), \ - (I[400] = (T)(img)(_p3##x,_p1##y,_n3##z,c)), \ - (I[408] = (T)(img)(_p3##x,y,_n3##z,c)), \ - (I[416] = (T)(img)(_p3##x,_n1##y,_n3##z,c)), \ - (I[424] = (T)(img)(_p3##x,_n2##y,_n3##z,c)), \ - (I[432] = (T)(img)(_p3##x,_n3##y,_n3##z,c)), \ - (I[440] = (T)(img)(_p3##x,_n4##y,_n3##z,c)), \ - (I[448] = (T)(img)(_p3##x,_p3##y,_n4##z,c)), \ - (I[456] = (T)(img)(_p3##x,_p2##y,_n4##z,c)), \ - (I[464] = (T)(img)(_p3##x,_p1##y,_n4##z,c)), \ - (I[472] = (T)(img)(_p3##x,y,_n4##z,c)), \ - (I[480] = (T)(img)(_p3##x,_n1##y,_n4##z,c)), \ - (I[488] = (T)(img)(_p3##x,_n2##y,_n4##z,c)), \ - (I[496] = (T)(img)(_p3##x,_n3##y,_n4##z,c)), \ - (I[504] = (T)(img)(_p3##x,_n4##y,_n4##z,c)), \ - (I[1] = (T)(img)(_p2##x,_p3##y,_p3##z,c)), \ - (I[9] = (T)(img)(_p2##x,_p2##y,_p3##z,c)), \ - (I[17] = (T)(img)(_p2##x,_p1##y,_p3##z,c)), \ - (I[25] = (T)(img)(_p2##x,y,_p3##z,c)), \ - (I[33] = (T)(img)(_p2##x,_n1##y,_p3##z,c)), \ - (I[41] = (T)(img)(_p2##x,_n2##y,_p3##z,c)), \ - (I[49] = (T)(img)(_p2##x,_n3##y,_p3##z,c)), \ - (I[57] = (T)(img)(_p2##x,_n4##y,_p3##z,c)), \ - (I[65] = (T)(img)(_p2##x,_p3##y,_p2##z,c)), \ - (I[73] = (T)(img)(_p2##x,_p2##y,_p2##z,c)), \ - (I[81] = (T)(img)(_p2##x,_p1##y,_p2##z,c)), \ - (I[89] = (T)(img)(_p2##x,y,_p2##z,c)), \ - (I[97] = (T)(img)(_p2##x,_n1##y,_p2##z,c)), \ - (I[105] = (T)(img)(_p2##x,_n2##y,_p2##z,c)), \ - (I[113] = (T)(img)(_p2##x,_n3##y,_p2##z,c)), \ - (I[121] = (T)(img)(_p2##x,_n4##y,_p2##z,c)), \ - (I[129] = (T)(img)(_p2##x,_p3##y,_p1##z,c)), \ - (I[137] = (T)(img)(_p2##x,_p2##y,_p1##z,c)), \ - (I[145] = (T)(img)(_p2##x,_p1##y,_p1##z,c)), \ - (I[153] = (T)(img)(_p2##x,y,_p1##z,c)), \ - (I[161] = (T)(img)(_p2##x,_n1##y,_p1##z,c)), \ - (I[169] = (T)(img)(_p2##x,_n2##y,_p1##z,c)), \ - (I[177] = (T)(img)(_p2##x,_n3##y,_p1##z,c)), \ - (I[185] = (T)(img)(_p2##x,_n4##y,_p1##z,c)), \ - (I[193] = (T)(img)(_p2##x,_p3##y,z,c)), \ - (I[201] = (T)(img)(_p2##x,_p2##y,z,c)), \ - (I[209] = (T)(img)(_p2##x,_p1##y,z,c)), \ - (I[217] = (T)(img)(_p2##x,y,z,c)), \ - (I[225] = (T)(img)(_p2##x,_n1##y,z,c)), \ - (I[233] = (T)(img)(_p2##x,_n2##y,z,c)), \ - (I[241] = (T)(img)(_p2##x,_n3##y,z,c)), \ - (I[249] = (T)(img)(_p2##x,_n4##y,z,c)), \ - (I[257] = (T)(img)(_p2##x,_p3##y,_n1##z,c)), \ - (I[265] = (T)(img)(_p2##x,_p2##y,_n1##z,c)), \ - (I[273] = (T)(img)(_p2##x,_p1##y,_n1##z,c)), \ - (I[281] = (T)(img)(_p2##x,y,_n1##z,c)), \ - (I[289] = (T)(img)(_p2##x,_n1##y,_n1##z,c)), \ - (I[297] = (T)(img)(_p2##x,_n2##y,_n1##z,c)), \ - (I[305] = (T)(img)(_p2##x,_n3##y,_n1##z,c)), \ - (I[313] = (T)(img)(_p2##x,_n4##y,_n1##z,c)), \ - (I[321] = (T)(img)(_p2##x,_p3##y,_n2##z,c)), \ - (I[329] = (T)(img)(_p2##x,_p2##y,_n2##z,c)), \ - (I[337] = (T)(img)(_p2##x,_p1##y,_n2##z,c)), \ - (I[345] = (T)(img)(_p2##x,y,_n2##z,c)), \ - (I[353] = (T)(img)(_p2##x,_n1##y,_n2##z,c)), \ - (I[361] = (T)(img)(_p2##x,_n2##y,_n2##z,c)), \ - (I[369] = (T)(img)(_p2##x,_n3##y,_n2##z,c)), \ - (I[377] = (T)(img)(_p2##x,_n4##y,_n2##z,c)), \ - (I[385] = (T)(img)(_p2##x,_p3##y,_n3##z,c)), \ - (I[393] = (T)(img)(_p2##x,_p2##y,_n3##z,c)), \ - (I[401] = (T)(img)(_p2##x,_p1##y,_n3##z,c)), \ - (I[409] = (T)(img)(_p2##x,y,_n3##z,c)), \ - (I[417] = (T)(img)(_p2##x,_n1##y,_n3##z,c)), \ - (I[425] = (T)(img)(_p2##x,_n2##y,_n3##z,c)), \ - (I[433] = (T)(img)(_p2##x,_n3##y,_n3##z,c)), \ - (I[441] = (T)(img)(_p2##x,_n4##y,_n3##z,c)), \ - (I[449] = (T)(img)(_p2##x,_p3##y,_n4##z,c)), \ - (I[457] = (T)(img)(_p2##x,_p2##y,_n4##z,c)), \ - (I[465] = (T)(img)(_p2##x,_p1##y,_n4##z,c)), \ - (I[473] = (T)(img)(_p2##x,y,_n4##z,c)), \ - (I[481] = (T)(img)(_p2##x,_n1##y,_n4##z,c)), \ - (I[489] = (T)(img)(_p2##x,_n2##y,_n4##z,c)), \ - (I[497] = (T)(img)(_p2##x,_n3##y,_n4##z,c)), \ - (I[505] = (T)(img)(_p2##x,_n4##y,_n4##z,c)), \ - (I[2] = (T)(img)(_p1##x,_p3##y,_p3##z,c)), \ - (I[10] = (T)(img)(_p1##x,_p2##y,_p3##z,c)), \ - (I[18] = (T)(img)(_p1##x,_p1##y,_p3##z,c)), \ - (I[26] = (T)(img)(_p1##x,y,_p3##z,c)), \ - (I[34] = (T)(img)(_p1##x,_n1##y,_p3##z,c)), \ - (I[42] = (T)(img)(_p1##x,_n2##y,_p3##z,c)), \ - (I[50] = (T)(img)(_p1##x,_n3##y,_p3##z,c)), \ - (I[58] = (T)(img)(_p1##x,_n4##y,_p3##z,c)), \ - (I[66] = (T)(img)(_p1##x,_p3##y,_p2##z,c)), \ - (I[74] = (T)(img)(_p1##x,_p2##y,_p2##z,c)), \ - (I[82] = (T)(img)(_p1##x,_p1##y,_p2##z,c)), \ - (I[90] = (T)(img)(_p1##x,y,_p2##z,c)), \ - (I[98] = (T)(img)(_p1##x,_n1##y,_p2##z,c)), \ - (I[106] = (T)(img)(_p1##x,_n2##y,_p2##z,c)), \ - (I[114] = (T)(img)(_p1##x,_n3##y,_p2##z,c)), \ - (I[122] = (T)(img)(_p1##x,_n4##y,_p2##z,c)), \ - (I[130] = (T)(img)(_p1##x,_p3##y,_p1##z,c)), \ - (I[138] = (T)(img)(_p1##x,_p2##y,_p1##z,c)), \ - (I[146] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ - (I[154] = (T)(img)(_p1##x,y,_p1##z,c)), \ - (I[162] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ - (I[170] = (T)(img)(_p1##x,_n2##y,_p1##z,c)), \ - (I[178] = (T)(img)(_p1##x,_n3##y,_p1##z,c)), \ - (I[186] = (T)(img)(_p1##x,_n4##y,_p1##z,c)), \ - (I[194] = (T)(img)(_p1##x,_p3##y,z,c)), \ - (I[202] = (T)(img)(_p1##x,_p2##y,z,c)), \ - (I[210] = (T)(img)(_p1##x,_p1##y,z,c)), \ - (I[218] = (T)(img)(_p1##x,y,z,c)), \ - (I[226] = (T)(img)(_p1##x,_n1##y,z,c)), \ - (I[234] = (T)(img)(_p1##x,_n2##y,z,c)), \ - (I[242] = (T)(img)(_p1##x,_n3##y,z,c)), \ - (I[250] = (T)(img)(_p1##x,_n4##y,z,c)), \ - (I[258] = (T)(img)(_p1##x,_p3##y,_n1##z,c)), \ - (I[266] = (T)(img)(_p1##x,_p2##y,_n1##z,c)), \ - (I[274] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ - (I[282] = (T)(img)(_p1##x,y,_n1##z,c)), \ - (I[290] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ - (I[298] = (T)(img)(_p1##x,_n2##y,_n1##z,c)), \ - (I[306] = (T)(img)(_p1##x,_n3##y,_n1##z,c)), \ - (I[314] = (T)(img)(_p1##x,_n4##y,_n1##z,c)), \ - (I[322] = (T)(img)(_p1##x,_p3##y,_n2##z,c)), \ - (I[330] = (T)(img)(_p1##x,_p2##y,_n2##z,c)), \ - (I[338] = (T)(img)(_p1##x,_p1##y,_n2##z,c)), \ - (I[346] = (T)(img)(_p1##x,y,_n2##z,c)), \ - (I[354] = (T)(img)(_p1##x,_n1##y,_n2##z,c)), \ - (I[362] = (T)(img)(_p1##x,_n2##y,_n2##z,c)), \ - (I[370] = (T)(img)(_p1##x,_n3##y,_n2##z,c)), \ - (I[378] = (T)(img)(_p1##x,_n4##y,_n2##z,c)), \ - (I[386] = (T)(img)(_p1##x,_p3##y,_n3##z,c)), \ - (I[394] = (T)(img)(_p1##x,_p2##y,_n3##z,c)), \ - (I[402] = (T)(img)(_p1##x,_p1##y,_n3##z,c)), \ - (I[410] = (T)(img)(_p1##x,y,_n3##z,c)), \ - (I[418] = (T)(img)(_p1##x,_n1##y,_n3##z,c)), \ - (I[426] = (T)(img)(_p1##x,_n2##y,_n3##z,c)), \ - (I[434] = (T)(img)(_p1##x,_n3##y,_n3##z,c)), \ - (I[442] = (T)(img)(_p1##x,_n4##y,_n3##z,c)), \ - (I[450] = (T)(img)(_p1##x,_p3##y,_n4##z,c)), \ - (I[458] = (T)(img)(_p1##x,_p2##y,_n4##z,c)), \ - (I[466] = (T)(img)(_p1##x,_p1##y,_n4##z,c)), \ - (I[474] = (T)(img)(_p1##x,y,_n4##z,c)), \ - (I[482] = (T)(img)(_p1##x,_n1##y,_n4##z,c)), \ - (I[490] = (T)(img)(_p1##x,_n2##y,_n4##z,c)), \ - (I[498] = (T)(img)(_p1##x,_n3##y,_n4##z,c)), \ - (I[506] = (T)(img)(_p1##x,_n4##y,_n4##z,c)), \ - (I[3] = (T)(img)(x,_p3##y,_p3##z,c)), \ - (I[11] = (T)(img)(x,_p2##y,_p3##z,c)), \ - (I[19] = (T)(img)(x,_p1##y,_p3##z,c)), \ - (I[27] = (T)(img)(x,y,_p3##z,c)), \ - (I[35] = (T)(img)(x,_n1##y,_p3##z,c)), \ - (I[43] = (T)(img)(x,_n2##y,_p3##z,c)), \ - (I[51] = (T)(img)(x,_n3##y,_p3##z,c)), \ - (I[59] = (T)(img)(x,_n4##y,_p3##z,c)), \ - (I[67] = (T)(img)(x,_p3##y,_p2##z,c)), \ - (I[75] = (T)(img)(x,_p2##y,_p2##z,c)), \ - (I[83] = (T)(img)(x,_p1##y,_p2##z,c)), \ - (I[91] = (T)(img)(x,y,_p2##z,c)), \ - (I[99] = (T)(img)(x,_n1##y,_p2##z,c)), \ - (I[107] = (T)(img)(x,_n2##y,_p2##z,c)), \ - (I[115] = (T)(img)(x,_n3##y,_p2##z,c)), \ - (I[123] = (T)(img)(x,_n4##y,_p2##z,c)), \ - (I[131] = (T)(img)(x,_p3##y,_p1##z,c)), \ - (I[139] = (T)(img)(x,_p2##y,_p1##z,c)), \ - (I[147] = (T)(img)(x,_p1##y,_p1##z,c)), \ - (I[155] = (T)(img)(x,y,_p1##z,c)), \ - (I[163] = (T)(img)(x,_n1##y,_p1##z,c)), \ - (I[171] = (T)(img)(x,_n2##y,_p1##z,c)), \ - (I[179] = (T)(img)(x,_n3##y,_p1##z,c)), \ - (I[187] = (T)(img)(x,_n4##y,_p1##z,c)), \ - (I[195] = (T)(img)(x,_p3##y,z,c)), \ - (I[203] = (T)(img)(x,_p2##y,z,c)), \ - (I[211] = (T)(img)(x,_p1##y,z,c)), \ - (I[219] = (T)(img)(x,y,z,c)), \ - (I[227] = (T)(img)(x,_n1##y,z,c)), \ - (I[235] = (T)(img)(x,_n2##y,z,c)), \ - (I[243] = (T)(img)(x,_n3##y,z,c)), \ - (I[251] = (T)(img)(x,_n4##y,z,c)), \ - (I[259] = (T)(img)(x,_p3##y,_n1##z,c)), \ - (I[267] = (T)(img)(x,_p2##y,_n1##z,c)), \ - (I[275] = (T)(img)(x,_p1##y,_n1##z,c)), \ - (I[283] = (T)(img)(x,y,_n1##z,c)), \ - (I[291] = (T)(img)(x,_n1##y,_n1##z,c)), \ - (I[299] = (T)(img)(x,_n2##y,_n1##z,c)), \ - (I[307] = (T)(img)(x,_n3##y,_n1##z,c)), \ - (I[315] = (T)(img)(x,_n4##y,_n1##z,c)), \ - (I[323] = (T)(img)(x,_p3##y,_n2##z,c)), \ - (I[331] = (T)(img)(x,_p2##y,_n2##z,c)), \ - (I[339] = (T)(img)(x,_p1##y,_n2##z,c)), \ - (I[347] = (T)(img)(x,y,_n2##z,c)), \ - (I[355] = (T)(img)(x,_n1##y,_n2##z,c)), \ - (I[363] = (T)(img)(x,_n2##y,_n2##z,c)), \ - (I[371] = (T)(img)(x,_n3##y,_n2##z,c)), \ - (I[379] = (T)(img)(x,_n4##y,_n2##z,c)), \ - (I[387] = (T)(img)(x,_p3##y,_n3##z,c)), \ - (I[395] = (T)(img)(x,_p2##y,_n3##z,c)), \ - (I[403] = (T)(img)(x,_p1##y,_n3##z,c)), \ - (I[411] = (T)(img)(x,y,_n3##z,c)), \ - (I[419] = (T)(img)(x,_n1##y,_n3##z,c)), \ - (I[427] = (T)(img)(x,_n2##y,_n3##z,c)), \ - (I[435] = (T)(img)(x,_n3##y,_n3##z,c)), \ - (I[443] = (T)(img)(x,_n4##y,_n3##z,c)), \ - (I[451] = (T)(img)(x,_p3##y,_n4##z,c)), \ - (I[459] = (T)(img)(x,_p2##y,_n4##z,c)), \ - (I[467] = (T)(img)(x,_p1##y,_n4##z,c)), \ - (I[475] = (T)(img)(x,y,_n4##z,c)), \ - (I[483] = (T)(img)(x,_n1##y,_n4##z,c)), \ - (I[491] = (T)(img)(x,_n2##y,_n4##z,c)), \ - (I[499] = (T)(img)(x,_n3##y,_n4##z,c)), \ - (I[507] = (T)(img)(x,_n4##y,_n4##z,c)), \ - (I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c)), \ - (I[12] = (T)(img)(_n1##x,_p2##y,_p3##z,c)), \ - (I[20] = (T)(img)(_n1##x,_p1##y,_p3##z,c)), \ - (I[28] = (T)(img)(_n1##x,y,_p3##z,c)), \ - (I[36] = (T)(img)(_n1##x,_n1##y,_p3##z,c)), \ - (I[44] = (T)(img)(_n1##x,_n2##y,_p3##z,c)), \ - (I[52] = (T)(img)(_n1##x,_n3##y,_p3##z,c)), \ - (I[60] = (T)(img)(_n1##x,_n4##y,_p3##z,c)), \ - (I[68] = (T)(img)(_n1##x,_p3##y,_p2##z,c)), \ - (I[76] = (T)(img)(_n1##x,_p2##y,_p2##z,c)), \ - (I[84] = (T)(img)(_n1##x,_p1##y,_p2##z,c)), \ - (I[92] = (T)(img)(_n1##x,y,_p2##z,c)), \ - (I[100] = (T)(img)(_n1##x,_n1##y,_p2##z,c)), \ - (I[108] = (T)(img)(_n1##x,_n2##y,_p2##z,c)), \ - (I[116] = (T)(img)(_n1##x,_n3##y,_p2##z,c)), \ - (I[124] = (T)(img)(_n1##x,_n4##y,_p2##z,c)), \ - (I[132] = (T)(img)(_n1##x,_p3##y,_p1##z,c)), \ - (I[140] = (T)(img)(_n1##x,_p2##y,_p1##z,c)), \ - (I[148] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ - (I[156] = (T)(img)(_n1##x,y,_p1##z,c)), \ - (I[164] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ - (I[172] = (T)(img)(_n1##x,_n2##y,_p1##z,c)), \ - (I[180] = (T)(img)(_n1##x,_n3##y,_p1##z,c)), \ - (I[188] = (T)(img)(_n1##x,_n4##y,_p1##z,c)), \ - (I[196] = (T)(img)(_n1##x,_p3##y,z,c)), \ - (I[204] = (T)(img)(_n1##x,_p2##y,z,c)), \ - (I[212] = (T)(img)(_n1##x,_p1##y,z,c)), \ - (I[220] = (T)(img)(_n1##x,y,z,c)), \ - (I[228] = (T)(img)(_n1##x,_n1##y,z,c)), \ - (I[236] = (T)(img)(_n1##x,_n2##y,z,c)), \ - (I[244] = (T)(img)(_n1##x,_n3##y,z,c)), \ - (I[252] = (T)(img)(_n1##x,_n4##y,z,c)), \ - (I[260] = (T)(img)(_n1##x,_p3##y,_n1##z,c)), \ - (I[268] = (T)(img)(_n1##x,_p2##y,_n1##z,c)), \ - (I[276] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ - (I[284] = (T)(img)(_n1##x,y,_n1##z,c)), \ - (I[292] = (T)(img)(_n1##x,_n1##y,_n1##z,c)), \ - (I[300] = (T)(img)(_n1##x,_n2##y,_n1##z,c)), \ - (I[308] = (T)(img)(_n1##x,_n3##y,_n1##z,c)), \ - (I[316] = (T)(img)(_n1##x,_n4##y,_n1##z,c)), \ - (I[324] = (T)(img)(_n1##x,_p3##y,_n2##z,c)), \ - (I[332] = (T)(img)(_n1##x,_p2##y,_n2##z,c)), \ - (I[340] = (T)(img)(_n1##x,_p1##y,_n2##z,c)), \ - (I[348] = (T)(img)(_n1##x,y,_n2##z,c)), \ - (I[356] = (T)(img)(_n1##x,_n1##y,_n2##z,c)), \ - (I[364] = (T)(img)(_n1##x,_n2##y,_n2##z,c)), \ - (I[372] = (T)(img)(_n1##x,_n3##y,_n2##z,c)), \ - (I[380] = (T)(img)(_n1##x,_n4##y,_n2##z,c)), \ - (I[388] = (T)(img)(_n1##x,_p3##y,_n3##z,c)), \ - (I[396] = (T)(img)(_n1##x,_p2##y,_n3##z,c)), \ - (I[404] = (T)(img)(_n1##x,_p1##y,_n3##z,c)), \ - (I[412] = (T)(img)(_n1##x,y,_n3##z,c)), \ - (I[420] = (T)(img)(_n1##x,_n1##y,_n3##z,c)), \ - (I[428] = (T)(img)(_n1##x,_n2##y,_n3##z,c)), \ - (I[436] = (T)(img)(_n1##x,_n3##y,_n3##z,c)), \ - (I[444] = (T)(img)(_n1##x,_n4##y,_n3##z,c)), \ - (I[452] = (T)(img)(_n1##x,_p3##y,_n4##z,c)), \ - (I[460] = (T)(img)(_n1##x,_p2##y,_n4##z,c)), \ - (I[468] = (T)(img)(_n1##x,_p1##y,_n4##z,c)), \ - (I[476] = (T)(img)(_n1##x,y,_n4##z,c)), \ - (I[484] = (T)(img)(_n1##x,_n1##y,_n4##z,c)), \ - (I[492] = (T)(img)(_n1##x,_n2##y,_n4##z,c)), \ - (I[500] = (T)(img)(_n1##x,_n3##y,_n4##z,c)), \ - (I[508] = (T)(img)(_n1##x,_n4##y,_n4##z,c)), \ - (I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c)), \ - (I[13] = (T)(img)(_n2##x,_p2##y,_p3##z,c)), \ - (I[21] = (T)(img)(_n2##x,_p1##y,_p3##z,c)), \ - (I[29] = (T)(img)(_n2##x,y,_p3##z,c)), \ - (I[37] = (T)(img)(_n2##x,_n1##y,_p3##z,c)), \ - (I[45] = (T)(img)(_n2##x,_n2##y,_p3##z,c)), \ - (I[53] = (T)(img)(_n2##x,_n3##y,_p3##z,c)), \ - (I[61] = (T)(img)(_n2##x,_n4##y,_p3##z,c)), \ - (I[69] = (T)(img)(_n2##x,_p3##y,_p2##z,c)), \ - (I[77] = (T)(img)(_n2##x,_p2##y,_p2##z,c)), \ - (I[85] = (T)(img)(_n2##x,_p1##y,_p2##z,c)), \ - (I[93] = (T)(img)(_n2##x,y,_p2##z,c)), \ - (I[101] = (T)(img)(_n2##x,_n1##y,_p2##z,c)), \ - (I[109] = (T)(img)(_n2##x,_n2##y,_p2##z,c)), \ - (I[117] = (T)(img)(_n2##x,_n3##y,_p2##z,c)), \ - (I[125] = (T)(img)(_n2##x,_n4##y,_p2##z,c)), \ - (I[133] = (T)(img)(_n2##x,_p3##y,_p1##z,c)), \ - (I[141] = (T)(img)(_n2##x,_p2##y,_p1##z,c)), \ - (I[149] = (T)(img)(_n2##x,_p1##y,_p1##z,c)), \ - (I[157] = (T)(img)(_n2##x,y,_p1##z,c)), \ - (I[165] = (T)(img)(_n2##x,_n1##y,_p1##z,c)), \ - (I[173] = (T)(img)(_n2##x,_n2##y,_p1##z,c)), \ - (I[181] = (T)(img)(_n2##x,_n3##y,_p1##z,c)), \ - (I[189] = (T)(img)(_n2##x,_n4##y,_p1##z,c)), \ - (I[197] = (T)(img)(_n2##x,_p3##y,z,c)), \ - (I[205] = (T)(img)(_n2##x,_p2##y,z,c)), \ - (I[213] = (T)(img)(_n2##x,_p1##y,z,c)), \ - (I[221] = (T)(img)(_n2##x,y,z,c)), \ - (I[229] = (T)(img)(_n2##x,_n1##y,z,c)), \ - (I[237] = (T)(img)(_n2##x,_n2##y,z,c)), \ - (I[245] = (T)(img)(_n2##x,_n3##y,z,c)), \ - (I[253] = (T)(img)(_n2##x,_n4##y,z,c)), \ - (I[261] = (T)(img)(_n2##x,_p3##y,_n1##z,c)), \ - (I[269] = (T)(img)(_n2##x,_p2##y,_n1##z,c)), \ - (I[277] = (T)(img)(_n2##x,_p1##y,_n1##z,c)), \ - (I[285] = (T)(img)(_n2##x,y,_n1##z,c)), \ - (I[293] = (T)(img)(_n2##x,_n1##y,_n1##z,c)), \ - (I[301] = (T)(img)(_n2##x,_n2##y,_n1##z,c)), \ - (I[309] = (T)(img)(_n2##x,_n3##y,_n1##z,c)), \ - (I[317] = (T)(img)(_n2##x,_n4##y,_n1##z,c)), \ - (I[325] = (T)(img)(_n2##x,_p3##y,_n2##z,c)), \ - (I[333] = (T)(img)(_n2##x,_p2##y,_n2##z,c)), \ - (I[341] = (T)(img)(_n2##x,_p1##y,_n2##z,c)), \ - (I[349] = (T)(img)(_n2##x,y,_n2##z,c)), \ - (I[357] = (T)(img)(_n2##x,_n1##y,_n2##z,c)), \ - (I[365] = (T)(img)(_n2##x,_n2##y,_n2##z,c)), \ - (I[373] = (T)(img)(_n2##x,_n3##y,_n2##z,c)), \ - (I[381] = (T)(img)(_n2##x,_n4##y,_n2##z,c)), \ - (I[389] = (T)(img)(_n2##x,_p3##y,_n3##z,c)), \ - (I[397] = (T)(img)(_n2##x,_p2##y,_n3##z,c)), \ - (I[405] = (T)(img)(_n2##x,_p1##y,_n3##z,c)), \ - (I[413] = (T)(img)(_n2##x,y,_n3##z,c)), \ - (I[421] = (T)(img)(_n2##x,_n1##y,_n3##z,c)), \ - (I[429] = (T)(img)(_n2##x,_n2##y,_n3##z,c)), \ - (I[437] = (T)(img)(_n2##x,_n3##y,_n3##z,c)), \ - (I[445] = (T)(img)(_n2##x,_n4##y,_n3##z,c)), \ - (I[453] = (T)(img)(_n2##x,_p3##y,_n4##z,c)), \ - (I[461] = (T)(img)(_n2##x,_p2##y,_n4##z,c)), \ - (I[469] = (T)(img)(_n2##x,_p1##y,_n4##z,c)), \ - (I[477] = (T)(img)(_n2##x,y,_n4##z,c)), \ - (I[485] = (T)(img)(_n2##x,_n1##y,_n4##z,c)), \ - (I[493] = (T)(img)(_n2##x,_n2##y,_n4##z,c)), \ - (I[501] = (T)(img)(_n2##x,_n3##y,_n4##z,c)), \ - (I[509] = (T)(img)(_n2##x,_n4##y,_n4##z,c)), \ - (I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c)), \ - (I[14] = (T)(img)(_n3##x,_p2##y,_p3##z,c)), \ - (I[22] = (T)(img)(_n3##x,_p1##y,_p3##z,c)), \ - (I[30] = (T)(img)(_n3##x,y,_p3##z,c)), \ - (I[38] = (T)(img)(_n3##x,_n1##y,_p3##z,c)), \ - (I[46] = (T)(img)(_n3##x,_n2##y,_p3##z,c)), \ - (I[54] = (T)(img)(_n3##x,_n3##y,_p3##z,c)), \ - (I[62] = (T)(img)(_n3##x,_n4##y,_p3##z,c)), \ - (I[70] = (T)(img)(_n3##x,_p3##y,_p2##z,c)), \ - (I[78] = (T)(img)(_n3##x,_p2##y,_p2##z,c)), \ - (I[86] = (T)(img)(_n3##x,_p1##y,_p2##z,c)), \ - (I[94] = (T)(img)(_n3##x,y,_p2##z,c)), \ - (I[102] = (T)(img)(_n3##x,_n1##y,_p2##z,c)), \ - (I[110] = (T)(img)(_n3##x,_n2##y,_p2##z,c)), \ - (I[118] = (T)(img)(_n3##x,_n3##y,_p2##z,c)), \ - (I[126] = (T)(img)(_n3##x,_n4##y,_p2##z,c)), \ - (I[134] = (T)(img)(_n3##x,_p3##y,_p1##z,c)), \ - (I[142] = (T)(img)(_n3##x,_p2##y,_p1##z,c)), \ - (I[150] = (T)(img)(_n3##x,_p1##y,_p1##z,c)), \ - (I[158] = (T)(img)(_n3##x,y,_p1##z,c)), \ - (I[166] = (T)(img)(_n3##x,_n1##y,_p1##z,c)), \ - (I[174] = (T)(img)(_n3##x,_n2##y,_p1##z,c)), \ - (I[182] = (T)(img)(_n3##x,_n3##y,_p1##z,c)), \ - (I[190] = (T)(img)(_n3##x,_n4##y,_p1##z,c)), \ - (I[198] = (T)(img)(_n3##x,_p3##y,z,c)), \ - (I[206] = (T)(img)(_n3##x,_p2##y,z,c)), \ - (I[214] = (T)(img)(_n3##x,_p1##y,z,c)), \ - (I[222] = (T)(img)(_n3##x,y,z,c)), \ - (I[230] = (T)(img)(_n3##x,_n1##y,z,c)), \ - (I[238] = (T)(img)(_n3##x,_n2##y,z,c)), \ - (I[246] = (T)(img)(_n3##x,_n3##y,z,c)), \ - (I[254] = (T)(img)(_n3##x,_n4##y,z,c)), \ - (I[262] = (T)(img)(_n3##x,_p3##y,_n1##z,c)), \ - (I[270] = (T)(img)(_n3##x,_p2##y,_n1##z,c)), \ - (I[278] = (T)(img)(_n3##x,_p1##y,_n1##z,c)), \ - (I[286] = (T)(img)(_n3##x,y,_n1##z,c)), \ - (I[294] = (T)(img)(_n3##x,_n1##y,_n1##z,c)), \ - (I[302] = (T)(img)(_n3##x,_n2##y,_n1##z,c)), \ - (I[310] = (T)(img)(_n3##x,_n3##y,_n1##z,c)), \ - (I[318] = (T)(img)(_n3##x,_n4##y,_n1##z,c)), \ - (I[326] = (T)(img)(_n3##x,_p3##y,_n2##z,c)), \ - (I[334] = (T)(img)(_n3##x,_p2##y,_n2##z,c)), \ - (I[342] = (T)(img)(_n3##x,_p1##y,_n2##z,c)), \ - (I[350] = (T)(img)(_n3##x,y,_n2##z,c)), \ - (I[358] = (T)(img)(_n3##x,_n1##y,_n2##z,c)), \ - (I[366] = (T)(img)(_n3##x,_n2##y,_n2##z,c)), \ - (I[374] = (T)(img)(_n3##x,_n3##y,_n2##z,c)), \ - (I[382] = (T)(img)(_n3##x,_n4##y,_n2##z,c)), \ - (I[390] = (T)(img)(_n3##x,_p3##y,_n3##z,c)), \ - (I[398] = (T)(img)(_n3##x,_p2##y,_n3##z,c)), \ - (I[406] = (T)(img)(_n3##x,_p1##y,_n3##z,c)), \ - (I[414] = (T)(img)(_n3##x,y,_n3##z,c)), \ - (I[422] = (T)(img)(_n3##x,_n1##y,_n3##z,c)), \ - (I[430] = (T)(img)(_n3##x,_n2##y,_n3##z,c)), \ - (I[438] = (T)(img)(_n3##x,_n3##y,_n3##z,c)), \ - (I[446] = (T)(img)(_n3##x,_n4##y,_n3##z,c)), \ - (I[454] = (T)(img)(_n3##x,_p3##y,_n4##z,c)), \ - (I[462] = (T)(img)(_n3##x,_p2##y,_n4##z,c)), \ - (I[470] = (T)(img)(_n3##x,_p1##y,_n4##z,c)), \ - (I[478] = (T)(img)(_n3##x,y,_n4##z,c)), \ - (I[486] = (T)(img)(_n3##x,_n1##y,_n4##z,c)), \ - (I[494] = (T)(img)(_n3##x,_n2##y,_n4##z,c)), \ - (I[502] = (T)(img)(_n3##x,_n3##y,_n4##z,c)), \ - (I[510] = (T)(img)(_n3##x,_n4##y,_n4##z,c)), \ - x+4>=(img).width()?(img).width()-1:x+4); \ - x<=(int)(x1) && ((_n4##x<(img).width() && ( \ - (I[7] = (T)(img)(_n4##x,_p3##y,_p3##z,c)), \ - (I[15] = (T)(img)(_n4##x,_p2##y,_p3##z,c)), \ - (I[23] = (T)(img)(_n4##x,_p1##y,_p3##z,c)), \ - (I[31] = (T)(img)(_n4##x,y,_p3##z,c)), \ - (I[39] = (T)(img)(_n4##x,_n1##y,_p3##z,c)), \ - (I[47] = (T)(img)(_n4##x,_n2##y,_p3##z,c)), \ - (I[55] = (T)(img)(_n4##x,_n3##y,_p3##z,c)), \ - (I[63] = (T)(img)(_n4##x,_n4##y,_p3##z,c)), \ - (I[71] = (T)(img)(_n4##x,_p3##y,_p2##z,c)), \ - (I[79] = (T)(img)(_n4##x,_p2##y,_p2##z,c)), \ - (I[87] = (T)(img)(_n4##x,_p1##y,_p2##z,c)), \ - (I[95] = (T)(img)(_n4##x,y,_p2##z,c)), \ - (I[103] = (T)(img)(_n4##x,_n1##y,_p2##z,c)), \ - (I[111] = (T)(img)(_n4##x,_n2##y,_p2##z,c)), \ - (I[119] = (T)(img)(_n4##x,_n3##y,_p2##z,c)), \ - (I[127] = (T)(img)(_n4##x,_n4##y,_p2##z,c)), \ - (I[135] = (T)(img)(_n4##x,_p3##y,_p1##z,c)), \ - (I[143] = (T)(img)(_n4##x,_p2##y,_p1##z,c)), \ - (I[151] = (T)(img)(_n4##x,_p1##y,_p1##z,c)), \ - (I[159] = (T)(img)(_n4##x,y,_p1##z,c)), \ - (I[167] = (T)(img)(_n4##x,_n1##y,_p1##z,c)), \ - (I[175] = (T)(img)(_n4##x,_n2##y,_p1##z,c)), \ - (I[183] = (T)(img)(_n4##x,_n3##y,_p1##z,c)), \ - (I[191] = (T)(img)(_n4##x,_n4##y,_p1##z,c)), \ - (I[199] = (T)(img)(_n4##x,_p3##y,z,c)), \ - (I[207] = (T)(img)(_n4##x,_p2##y,z,c)), \ - (I[215] = (T)(img)(_n4##x,_p1##y,z,c)), \ - (I[223] = (T)(img)(_n4##x,y,z,c)), \ - (I[231] = (T)(img)(_n4##x,_n1##y,z,c)), \ - (I[239] = (T)(img)(_n4##x,_n2##y,z,c)), \ - (I[247] = (T)(img)(_n4##x,_n3##y,z,c)), \ - (I[255] = (T)(img)(_n4##x,_n4##y,z,c)), \ - (I[263] = (T)(img)(_n4##x,_p3##y,_n1##z,c)), \ - (I[271] = (T)(img)(_n4##x,_p2##y,_n1##z,c)), \ - (I[279] = (T)(img)(_n4##x,_p1##y,_n1##z,c)), \ - (I[287] = (T)(img)(_n4##x,y,_n1##z,c)), \ - (I[295] = (T)(img)(_n4##x,_n1##y,_n1##z,c)), \ - (I[303] = (T)(img)(_n4##x,_n2##y,_n1##z,c)), \ - (I[311] = (T)(img)(_n4##x,_n3##y,_n1##z,c)), \ - (I[319] = (T)(img)(_n4##x,_n4##y,_n1##z,c)), \ - (I[327] = (T)(img)(_n4##x,_p3##y,_n2##z,c)), \ - (I[335] = (T)(img)(_n4##x,_p2##y,_n2##z,c)), \ - (I[343] = (T)(img)(_n4##x,_p1##y,_n2##z,c)), \ - (I[351] = (T)(img)(_n4##x,y,_n2##z,c)), \ - (I[359] = (T)(img)(_n4##x,_n1##y,_n2##z,c)), \ - (I[367] = (T)(img)(_n4##x,_n2##y,_n2##z,c)), \ - (I[375] = (T)(img)(_n4##x,_n3##y,_n2##z,c)), \ - (I[383] = (T)(img)(_n4##x,_n4##y,_n2##z,c)), \ - (I[391] = (T)(img)(_n4##x,_p3##y,_n3##z,c)), \ - (I[399] = (T)(img)(_n4##x,_p2##y,_n3##z,c)), \ - (I[407] = (T)(img)(_n4##x,_p1##y,_n3##z,c)), \ - (I[415] = (T)(img)(_n4##x,y,_n3##z,c)), \ - (I[423] = (T)(img)(_n4##x,_n1##y,_n3##z,c)), \ - (I[431] = (T)(img)(_n4##x,_n2##y,_n3##z,c)), \ - (I[439] = (T)(img)(_n4##x,_n3##y,_n3##z,c)), \ - (I[447] = (T)(img)(_n4##x,_n4##y,_n3##z,c)), \ - (I[455] = (T)(img)(_n4##x,_p3##y,_n4##z,c)), \ - (I[463] = (T)(img)(_n4##x,_p2##y,_n4##z,c)), \ - (I[471] = (T)(img)(_n4##x,_p1##y,_n4##z,c)), \ - (I[479] = (T)(img)(_n4##x,y,_n4##z,c)), \ - (I[487] = (T)(img)(_n4##x,_n1##y,_n4##z,c)), \ - (I[495] = (T)(img)(_n4##x,_n2##y,_n4##z,c)), \ - (I[503] = (T)(img)(_n4##x,_n3##y,_n4##z,c)), \ - (I[511] = (T)(img)(_n4##x,_n4##y,_n4##z,c)),1)) || \ - _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \ - I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ - I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ - I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ - I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ - I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ - I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ - I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ - I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ - I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ - I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ - I[80] = I[81], I[81] = I[82], I[82] = I[83], I[83] = I[84], I[84] = I[85], I[85] = I[86], I[86] = I[87], \ - I[88] = I[89], I[89] = I[90], I[90] = I[91], I[91] = I[92], I[92] = I[93], I[93] = I[94], I[94] = I[95], \ - I[96] = I[97], I[97] = I[98], I[98] = I[99], I[99] = I[100], I[100] = I[101], I[101] = I[102], I[102] = I[103], \ - I[104] = I[105], I[105] = I[106], I[106] = I[107], I[107] = I[108], I[108] = I[109], I[109] = I[110], I[110] = I[111], \ - I[112] = I[113], I[113] = I[114], I[114] = I[115], I[115] = I[116], I[116] = I[117], I[117] = I[118], I[118] = I[119], \ - I[120] = I[121], I[121] = I[122], I[122] = I[123], I[123] = I[124], I[124] = I[125], I[125] = I[126], I[126] = I[127], \ - I[128] = I[129], I[129] = I[130], I[130] = I[131], I[131] = I[132], I[132] = I[133], I[133] = I[134], I[134] = I[135], \ - I[136] = I[137], I[137] = I[138], I[138] = I[139], I[139] = I[140], I[140] = I[141], I[141] = I[142], I[142] = I[143], \ - I[144] = I[145], I[145] = I[146], I[146] = I[147], I[147] = I[148], I[148] = I[149], I[149] = I[150], I[150] = I[151], \ - I[152] = I[153], I[153] = I[154], I[154] = I[155], I[155] = I[156], I[156] = I[157], I[157] = I[158], I[158] = I[159], \ - I[160] = I[161], I[161] = I[162], I[162] = I[163], I[163] = I[164], I[164] = I[165], I[165] = I[166], I[166] = I[167], \ - I[168] = I[169], I[169] = I[170], I[170] = I[171], I[171] = I[172], I[172] = I[173], I[173] = I[174], I[174] = I[175], \ - I[176] = I[177], I[177] = I[178], I[178] = I[179], I[179] = I[180], I[180] = I[181], I[181] = I[182], I[182] = I[183], \ - I[184] = I[185], I[185] = I[186], I[186] = I[187], I[187] = I[188], I[188] = I[189], I[189] = I[190], I[190] = I[191], \ - I[192] = I[193], I[193] = I[194], I[194] = I[195], I[195] = I[196], I[196] = I[197], I[197] = I[198], I[198] = I[199], \ - I[200] = I[201], I[201] = I[202], I[202] = I[203], I[203] = I[204], I[204] = I[205], I[205] = I[206], I[206] = I[207], \ - I[208] = I[209], I[209] = I[210], I[210] = I[211], I[211] = I[212], I[212] = I[213], I[213] = I[214], I[214] = I[215], \ - I[216] = I[217], I[217] = I[218], I[218] = I[219], I[219] = I[220], I[220] = I[221], I[221] = I[222], I[222] = I[223], \ - I[224] = I[225], I[225] = I[226], I[226] = I[227], I[227] = I[228], I[228] = I[229], I[229] = I[230], I[230] = I[231], \ - I[232] = I[233], I[233] = I[234], I[234] = I[235], I[235] = I[236], I[236] = I[237], I[237] = I[238], I[238] = I[239], \ - I[240] = I[241], I[241] = I[242], I[242] = I[243], I[243] = I[244], I[244] = I[245], I[245] = I[246], I[246] = I[247], \ - I[248] = I[249], I[249] = I[250], I[250] = I[251], I[251] = I[252], I[252] = I[253], I[253] = I[254], I[254] = I[255], \ - I[256] = I[257], I[257] = I[258], I[258] = I[259], I[259] = I[260], I[260] = I[261], I[261] = I[262], I[262] = I[263], \ - I[264] = I[265], I[265] = I[266], I[266] = I[267], I[267] = I[268], I[268] = I[269], I[269] = I[270], I[270] = I[271], \ - I[272] = I[273], I[273] = I[274], I[274] = I[275], I[275] = I[276], I[276] = I[277], I[277] = I[278], I[278] = I[279], \ - I[280] = I[281], I[281] = I[282], I[282] = I[283], I[283] = I[284], I[284] = I[285], I[285] = I[286], I[286] = I[287], \ - I[288] = I[289], I[289] = I[290], I[290] = I[291], I[291] = I[292], I[292] = I[293], I[293] = I[294], I[294] = I[295], \ - I[296] = I[297], I[297] = I[298], I[298] = I[299], I[299] = I[300], I[300] = I[301], I[301] = I[302], I[302] = I[303], \ - I[304] = I[305], I[305] = I[306], I[306] = I[307], I[307] = I[308], I[308] = I[309], I[309] = I[310], I[310] = I[311], \ - I[312] = I[313], I[313] = I[314], I[314] = I[315], I[315] = I[316], I[316] = I[317], I[317] = I[318], I[318] = I[319], \ - I[320] = I[321], I[321] = I[322], I[322] = I[323], I[323] = I[324], I[324] = I[325], I[325] = I[326], I[326] = I[327], \ - I[328] = I[329], I[329] = I[330], I[330] = I[331], I[331] = I[332], I[332] = I[333], I[333] = I[334], I[334] = I[335], \ - I[336] = I[337], I[337] = I[338], I[338] = I[339], I[339] = I[340], I[340] = I[341], I[341] = I[342], I[342] = I[343], \ - I[344] = I[345], I[345] = I[346], I[346] = I[347], I[347] = I[348], I[348] = I[349], I[349] = I[350], I[350] = I[351], \ - I[352] = I[353], I[353] = I[354], I[354] = I[355], I[355] = I[356], I[356] = I[357], I[357] = I[358], I[358] = I[359], \ - I[360] = I[361], I[361] = I[362], I[362] = I[363], I[363] = I[364], I[364] = I[365], I[365] = I[366], I[366] = I[367], \ - I[368] = I[369], I[369] = I[370], I[370] = I[371], I[371] = I[372], I[372] = I[373], I[373] = I[374], I[374] = I[375], \ - I[376] = I[377], I[377] = I[378], I[378] = I[379], I[379] = I[380], I[380] = I[381], I[381] = I[382], I[382] = I[383], \ - I[384] = I[385], I[385] = I[386], I[386] = I[387], I[387] = I[388], I[388] = I[389], I[389] = I[390], I[390] = I[391], \ - I[392] = I[393], I[393] = I[394], I[394] = I[395], I[395] = I[396], I[396] = I[397], I[397] = I[398], I[398] = I[399], \ - I[400] = I[401], I[401] = I[402], I[402] = I[403], I[403] = I[404], I[404] = I[405], I[405] = I[406], I[406] = I[407], \ - I[408] = I[409], I[409] = I[410], I[410] = I[411], I[411] = I[412], I[412] = I[413], I[413] = I[414], I[414] = I[415], \ - I[416] = I[417], I[417] = I[418], I[418] = I[419], I[419] = I[420], I[420] = I[421], I[421] = I[422], I[422] = I[423], \ - I[424] = I[425], I[425] = I[426], I[426] = I[427], I[427] = I[428], I[428] = I[429], I[429] = I[430], I[430] = I[431], \ - I[432] = I[433], I[433] = I[434], I[434] = I[435], I[435] = I[436], I[436] = I[437], I[437] = I[438], I[438] = I[439], \ - I[440] = I[441], I[441] = I[442], I[442] = I[443], I[443] = I[444], I[444] = I[445], I[445] = I[446], I[446] = I[447], \ - I[448] = I[449], I[449] = I[450], I[450] = I[451], I[451] = I[452], I[452] = I[453], I[453] = I[454], I[454] = I[455], \ - I[456] = I[457], I[457] = I[458], I[458] = I[459], I[459] = I[460], I[460] = I[461], I[461] = I[462], I[462] = I[463], \ - I[464] = I[465], I[465] = I[466], I[466] = I[467], I[467] = I[468], I[468] = I[469], I[469] = I[470], I[470] = I[471], \ - I[472] = I[473], I[473] = I[474], I[474] = I[475], I[475] = I[476], I[476] = I[477], I[477] = I[478], I[478] = I[479], \ - I[480] = I[481], I[481] = I[482], I[482] = I[483], I[483] = I[484], I[484] = I[485], I[485] = I[486], I[486] = I[487], \ - I[488] = I[489], I[489] = I[490], I[490] = I[491], I[491] = I[492], I[492] = I[493], I[493] = I[494], I[494] = I[495], \ - I[496] = I[497], I[497] = I[498], I[498] = I[499], I[499] = I[500], I[500] = I[501], I[501] = I[502], I[502] = I[503], \ - I[504] = I[505], I[505] = I[506], I[506] = I[507], I[507] = I[508], I[508] = I[509], I[509] = I[510], I[510] = I[511], \ - _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) - -#define cimg_get8x8x8(img,x,y,z,c,I,T) \ - I[0] = (T)(img)(_p3##x,_p3##y,_p3##z,c), I[1] = (T)(img)(_p2##x,_p3##y,_p3##z,c), I[2] = (T)(img)(_p1##x,_p3##y,_p3##z,c), I[3] = (T)(img)(x,_p3##y,_p3##z,c), I[4] = (T)(img)(_n1##x,_p3##y,_p3##z,c), I[5] = (T)(img)(_n2##x,_p3##y,_p3##z,c), I[6] = (T)(img)(_n3##x,_p3##y,_p3##z,c), I[7] = (T)(img)(_n4##x,_p3##y,_p3##z,c), \ - I[8] = (T)(img)(_p3##x,_p2##y,_p3##z,c), I[9] = (T)(img)(_p2##x,_p2##y,_p3##z,c), I[10] = (T)(img)(_p1##x,_p2##y,_p3##z,c), I[11] = (T)(img)(x,_p2##y,_p3##z,c), I[12] = (T)(img)(_n1##x,_p2##y,_p3##z,c), I[13] = (T)(img)(_n2##x,_p2##y,_p3##z,c), I[14] = (T)(img)(_n3##x,_p2##y,_p3##z,c), I[15] = (T)(img)(_n4##x,_p2##y,_p3##z,c), \ - I[16] = (T)(img)(_p3##x,_p1##y,_p3##z,c), I[17] = (T)(img)(_p2##x,_p1##y,_p3##z,c), I[18] = (T)(img)(_p1##x,_p1##y,_p3##z,c), I[19] = (T)(img)(x,_p1##y,_p3##z,c), I[20] = (T)(img)(_n1##x,_p1##y,_p3##z,c), I[21] = (T)(img)(_n2##x,_p1##y,_p3##z,c), I[22] = (T)(img)(_n3##x,_p1##y,_p3##z,c), I[23] = (T)(img)(_n4##x,_p1##y,_p3##z,c), \ - I[24] = (T)(img)(_p3##x,y,_p3##z,c), I[25] = (T)(img)(_p2##x,y,_p3##z,c), I[26] = (T)(img)(_p1##x,y,_p3##z,c), I[27] = (T)(img)(x,y,_p3##z,c), I[28] = (T)(img)(_n1##x,y,_p3##z,c), I[29] = (T)(img)(_n2##x,y,_p3##z,c), I[30] = (T)(img)(_n3##x,y,_p3##z,c), I[31] = (T)(img)(_n4##x,y,_p3##z,c), \ - I[32] = (T)(img)(_p3##x,_n1##y,_p3##z,c), I[33] = (T)(img)(_p2##x,_n1##y,_p3##z,c), I[34] = (T)(img)(_p1##x,_n1##y,_p3##z,c), I[35] = (T)(img)(x,_n1##y,_p3##z,c), I[36] = (T)(img)(_n1##x,_n1##y,_p3##z,c), I[37] = (T)(img)(_n2##x,_n1##y,_p3##z,c), I[38] = (T)(img)(_n3##x,_n1##y,_p3##z,c), I[39] = (T)(img)(_n4##x,_n1##y,_p3##z,c), \ - I[40] = (T)(img)(_p3##x,_n2##y,_p3##z,c), I[41] = (T)(img)(_p2##x,_n2##y,_p3##z,c), I[42] = (T)(img)(_p1##x,_n2##y,_p3##z,c), I[43] = (T)(img)(x,_n2##y,_p3##z,c), I[44] = (T)(img)(_n1##x,_n2##y,_p3##z,c), I[45] = (T)(img)(_n2##x,_n2##y,_p3##z,c), I[46] = (T)(img)(_n3##x,_n2##y,_p3##z,c), I[47] = (T)(img)(_n4##x,_n2##y,_p3##z,c), \ - I[48] = (T)(img)(_p3##x,_n3##y,_p3##z,c), I[49] = (T)(img)(_p2##x,_n3##y,_p3##z,c), I[50] = (T)(img)(_p1##x,_n3##y,_p3##z,c), I[51] = (T)(img)(x,_n3##y,_p3##z,c), I[52] = (T)(img)(_n1##x,_n3##y,_p3##z,c), I[53] = (T)(img)(_n2##x,_n3##y,_p3##z,c), I[54] = (T)(img)(_n3##x,_n3##y,_p3##z,c), I[55] = (T)(img)(_n4##x,_n3##y,_p3##z,c), \ - I[56] = (T)(img)(_p3##x,_n4##y,_p3##z,c), I[57] = (T)(img)(_p2##x,_n4##y,_p3##z,c), I[58] = (T)(img)(_p1##x,_n4##y,_p3##z,c), I[59] = (T)(img)(x,_n4##y,_p3##z,c), I[60] = (T)(img)(_n1##x,_n4##y,_p3##z,c), I[61] = (T)(img)(_n2##x,_n4##y,_p3##z,c), I[62] = (T)(img)(_n3##x,_n4##y,_p3##z,c), I[63] = (T)(img)(_n4##x,_n4##y,_p3##z,c), \ - I[64] = (T)(img)(_p3##x,_p3##y,_p2##z,c), I[65] = (T)(img)(_p2##x,_p3##y,_p2##z,c), I[66] = (T)(img)(_p1##x,_p3##y,_p2##z,c), I[67] = (T)(img)(x,_p3##y,_p2##z,c), I[68] = (T)(img)(_n1##x,_p3##y,_p2##z,c), I[69] = (T)(img)(_n2##x,_p3##y,_p2##z,c), I[70] = (T)(img)(_n3##x,_p3##y,_p2##z,c), I[71] = (T)(img)(_n4##x,_p3##y,_p2##z,c), \ - I[72] = (T)(img)(_p3##x,_p2##y,_p2##z,c), I[73] = (T)(img)(_p2##x,_p2##y,_p2##z,c), I[74] = (T)(img)(_p1##x,_p2##y,_p2##z,c), I[75] = (T)(img)(x,_p2##y,_p2##z,c), I[76] = (T)(img)(_n1##x,_p2##y,_p2##z,c), I[77] = (T)(img)(_n2##x,_p2##y,_p2##z,c), I[78] = (T)(img)(_n3##x,_p2##y,_p2##z,c), I[79] = (T)(img)(_n4##x,_p2##y,_p2##z,c), \ - I[80] = (T)(img)(_p3##x,_p1##y,_p2##z,c), I[81] = (T)(img)(_p2##x,_p1##y,_p2##z,c), I[82] = (T)(img)(_p1##x,_p1##y,_p2##z,c), I[83] = (T)(img)(x,_p1##y,_p2##z,c), I[84] = (T)(img)(_n1##x,_p1##y,_p2##z,c), I[85] = (T)(img)(_n2##x,_p1##y,_p2##z,c), I[86] = (T)(img)(_n3##x,_p1##y,_p2##z,c), I[87] = (T)(img)(_n4##x,_p1##y,_p2##z,c), \ - I[88] = (T)(img)(_p3##x,y,_p2##z,c), I[89] = (T)(img)(_p2##x,y,_p2##z,c), I[90] = (T)(img)(_p1##x,y,_p2##z,c), I[91] = (T)(img)(x,y,_p2##z,c), I[92] = (T)(img)(_n1##x,y,_p2##z,c), I[93] = (T)(img)(_n2##x,y,_p2##z,c), I[94] = (T)(img)(_n3##x,y,_p2##z,c), I[95] = (T)(img)(_n4##x,y,_p2##z,c), \ - I[96] = (T)(img)(_p3##x,_n1##y,_p2##z,c), I[97] = (T)(img)(_p2##x,_n1##y,_p2##z,c), I[98] = (T)(img)(_p1##x,_n1##y,_p2##z,c), I[99] = (T)(img)(x,_n1##y,_p2##z,c), I[100] = (T)(img)(_n1##x,_n1##y,_p2##z,c), I[101] = (T)(img)(_n2##x,_n1##y,_p2##z,c), I[102] = (T)(img)(_n3##x,_n1##y,_p2##z,c), I[103] = (T)(img)(_n4##x,_n1##y,_p2##z,c), \ - I[104] = (T)(img)(_p3##x,_n2##y,_p2##z,c), I[105] = (T)(img)(_p2##x,_n2##y,_p2##z,c), I[106] = (T)(img)(_p1##x,_n2##y,_p2##z,c), I[107] = (T)(img)(x,_n2##y,_p2##z,c), I[108] = (T)(img)(_n1##x,_n2##y,_p2##z,c), I[109] = (T)(img)(_n2##x,_n2##y,_p2##z,c), I[110] = (T)(img)(_n3##x,_n2##y,_p2##z,c), I[111] = (T)(img)(_n4##x,_n2##y,_p2##z,c), \ - I[112] = (T)(img)(_p3##x,_n3##y,_p2##z,c), I[113] = (T)(img)(_p2##x,_n3##y,_p2##z,c), I[114] = (T)(img)(_p1##x,_n3##y,_p2##z,c), I[115] = (T)(img)(x,_n3##y,_p2##z,c), I[116] = (T)(img)(_n1##x,_n3##y,_p2##z,c), I[117] = (T)(img)(_n2##x,_n3##y,_p2##z,c), I[118] = (T)(img)(_n3##x,_n3##y,_p2##z,c), I[119] = (T)(img)(_n4##x,_n3##y,_p2##z,c), \ - I[120] = (T)(img)(_p3##x,_n4##y,_p2##z,c), I[121] = (T)(img)(_p2##x,_n4##y,_p2##z,c), I[122] = (T)(img)(_p1##x,_n4##y,_p2##z,c), I[123] = (T)(img)(x,_n4##y,_p2##z,c), I[124] = (T)(img)(_n1##x,_n4##y,_p2##z,c), I[125] = (T)(img)(_n2##x,_n4##y,_p2##z,c), I[126] = (T)(img)(_n3##x,_n4##y,_p2##z,c), I[127] = (T)(img)(_n4##x,_n4##y,_p2##z,c), \ - I[128] = (T)(img)(_p3##x,_p3##y,_p1##z,c), I[129] = (T)(img)(_p2##x,_p3##y,_p1##z,c), I[130] = (T)(img)(_p1##x,_p3##y,_p1##z,c), I[131] = (T)(img)(x,_p3##y,_p1##z,c), I[132] = (T)(img)(_n1##x,_p3##y,_p1##z,c), I[133] = (T)(img)(_n2##x,_p3##y,_p1##z,c), I[134] = (T)(img)(_n3##x,_p3##y,_p1##z,c), I[135] = (T)(img)(_n4##x,_p3##y,_p1##z,c), \ - I[136] = (T)(img)(_p3##x,_p2##y,_p1##z,c), I[137] = (T)(img)(_p2##x,_p2##y,_p1##z,c), I[138] = (T)(img)(_p1##x,_p2##y,_p1##z,c), I[139] = (T)(img)(x,_p2##y,_p1##z,c), I[140] = (T)(img)(_n1##x,_p2##y,_p1##z,c), I[141] = (T)(img)(_n2##x,_p2##y,_p1##z,c), I[142] = (T)(img)(_n3##x,_p2##y,_p1##z,c), I[143] = (T)(img)(_n4##x,_p2##y,_p1##z,c), \ - I[144] = (T)(img)(_p3##x,_p1##y,_p1##z,c), I[145] = (T)(img)(_p2##x,_p1##y,_p1##z,c), I[146] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[147] = (T)(img)(x,_p1##y,_p1##z,c), I[148] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[149] = (T)(img)(_n2##x,_p1##y,_p1##z,c), I[150] = (T)(img)(_n3##x,_p1##y,_p1##z,c), I[151] = (T)(img)(_n4##x,_p1##y,_p1##z,c), \ - I[152] = (T)(img)(_p3##x,y,_p1##z,c), I[153] = (T)(img)(_p2##x,y,_p1##z,c), I[154] = (T)(img)(_p1##x,y,_p1##z,c), I[155] = (T)(img)(x,y,_p1##z,c), I[156] = (T)(img)(_n1##x,y,_p1##z,c), I[157] = (T)(img)(_n2##x,y,_p1##z,c), I[158] = (T)(img)(_n3##x,y,_p1##z,c), I[159] = (T)(img)(_n4##x,y,_p1##z,c), \ - I[160] = (T)(img)(_p3##x,_n1##y,_p1##z,c), I[161] = (T)(img)(_p2##x,_n1##y,_p1##z,c), I[162] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[163] = (T)(img)(x,_n1##y,_p1##z,c), I[164] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[165] = (T)(img)(_n2##x,_n1##y,_p1##z,c), I[166] = (T)(img)(_n3##x,_n1##y,_p1##z,c), I[167] = (T)(img)(_n4##x,_n1##y,_p1##z,c), \ - I[168] = (T)(img)(_p3##x,_n2##y,_p1##z,c), I[169] = (T)(img)(_p2##x,_n2##y,_p1##z,c), I[170] = (T)(img)(_p1##x,_n2##y,_p1##z,c), I[171] = (T)(img)(x,_n2##y,_p1##z,c), I[172] = (T)(img)(_n1##x,_n2##y,_p1##z,c), I[173] = (T)(img)(_n2##x,_n2##y,_p1##z,c), I[174] = (T)(img)(_n3##x,_n2##y,_p1##z,c), I[175] = (T)(img)(_n4##x,_n2##y,_p1##z,c), \ - I[176] = (T)(img)(_p3##x,_n3##y,_p1##z,c), I[177] = (T)(img)(_p2##x,_n3##y,_p1##z,c), I[178] = (T)(img)(_p1##x,_n3##y,_p1##z,c), I[179] = (T)(img)(x,_n3##y,_p1##z,c), I[180] = (T)(img)(_n1##x,_n3##y,_p1##z,c), I[181] = (T)(img)(_n2##x,_n3##y,_p1##z,c), I[182] = (T)(img)(_n3##x,_n3##y,_p1##z,c), I[183] = (T)(img)(_n4##x,_n3##y,_p1##z,c), \ - I[184] = (T)(img)(_p3##x,_n4##y,_p1##z,c), I[185] = (T)(img)(_p2##x,_n4##y,_p1##z,c), I[186] = (T)(img)(_p1##x,_n4##y,_p1##z,c), I[187] = (T)(img)(x,_n4##y,_p1##z,c), I[188] = (T)(img)(_n1##x,_n4##y,_p1##z,c), I[189] = (T)(img)(_n2##x,_n4##y,_p1##z,c), I[190] = (T)(img)(_n3##x,_n4##y,_p1##z,c), I[191] = (T)(img)(_n4##x,_n4##y,_p1##z,c), \ - I[192] = (T)(img)(_p3##x,_p3##y,z,c), I[193] = (T)(img)(_p2##x,_p3##y,z,c), I[194] = (T)(img)(_p1##x,_p3##y,z,c), I[195] = (T)(img)(x,_p3##y,z,c), I[196] = (T)(img)(_n1##x,_p3##y,z,c), I[197] = (T)(img)(_n2##x,_p3##y,z,c), I[198] = (T)(img)(_n3##x,_p3##y,z,c), I[199] = (T)(img)(_n4##x,_p3##y,z,c), \ - I[200] = (T)(img)(_p3##x,_p2##y,z,c), I[201] = (T)(img)(_p2##x,_p2##y,z,c), I[202] = (T)(img)(_p1##x,_p2##y,z,c), I[203] = (T)(img)(x,_p2##y,z,c), I[204] = (T)(img)(_n1##x,_p2##y,z,c), I[205] = (T)(img)(_n2##x,_p2##y,z,c), I[206] = (T)(img)(_n3##x,_p2##y,z,c), I[207] = (T)(img)(_n4##x,_p2##y,z,c), \ - I[208] = (T)(img)(_p3##x,_p1##y,z,c), I[209] = (T)(img)(_p2##x,_p1##y,z,c), I[210] = (T)(img)(_p1##x,_p1##y,z,c), I[211] = (T)(img)(x,_p1##y,z,c), I[212] = (T)(img)(_n1##x,_p1##y,z,c), I[213] = (T)(img)(_n2##x,_p1##y,z,c), I[214] = (T)(img)(_n3##x,_p1##y,z,c), I[215] = (T)(img)(_n4##x,_p1##y,z,c), \ - I[216] = (T)(img)(_p3##x,y,z,c), I[217] = (T)(img)(_p2##x,y,z,c), I[218] = (T)(img)(_p1##x,y,z,c), I[219] = (T)(img)(x,y,z,c), I[220] = (T)(img)(_n1##x,y,z,c), I[221] = (T)(img)(_n2##x,y,z,c), I[222] = (T)(img)(_n3##x,y,z,c), I[223] = (T)(img)(_n4##x,y,z,c), \ - I[224] = (T)(img)(_p3##x,_n1##y,z,c), I[225] = (T)(img)(_p2##x,_n1##y,z,c), I[226] = (T)(img)(_p1##x,_n1##y,z,c), I[227] = (T)(img)(x,_n1##y,z,c), I[228] = (T)(img)(_n1##x,_n1##y,z,c), I[229] = (T)(img)(_n2##x,_n1##y,z,c), I[230] = (T)(img)(_n3##x,_n1##y,z,c), I[231] = (T)(img)(_n4##x,_n1##y,z,c), \ - I[232] = (T)(img)(_p3##x,_n2##y,z,c), I[233] = (T)(img)(_p2##x,_n2##y,z,c), I[234] = (T)(img)(_p1##x,_n2##y,z,c), I[235] = (T)(img)(x,_n2##y,z,c), I[236] = (T)(img)(_n1##x,_n2##y,z,c), I[237] = (T)(img)(_n2##x,_n2##y,z,c), I[238] = (T)(img)(_n3##x,_n2##y,z,c), I[239] = (T)(img)(_n4##x,_n2##y,z,c), \ - I[240] = (T)(img)(_p3##x,_n3##y,z,c), I[241] = (T)(img)(_p2##x,_n3##y,z,c), I[242] = (T)(img)(_p1##x,_n3##y,z,c), I[243] = (T)(img)(x,_n3##y,z,c), I[244] = (T)(img)(_n1##x,_n3##y,z,c), I[245] = (T)(img)(_n2##x,_n3##y,z,c), I[246] = (T)(img)(_n3##x,_n3##y,z,c), I[247] = (T)(img)(_n4##x,_n3##y,z,c), \ - I[248] = (T)(img)(_p3##x,_n4##y,z,c), I[249] = (T)(img)(_p2##x,_n4##y,z,c), I[250] = (T)(img)(_p1##x,_n4##y,z,c), I[251] = (T)(img)(x,_n4##y,z,c), I[252] = (T)(img)(_n1##x,_n4##y,z,c), I[253] = (T)(img)(_n2##x,_n4##y,z,c), I[254] = (T)(img)(_n3##x,_n4##y,z,c), I[255] = (T)(img)(_n4##x,_n4##y,z,c), \ - I[256] = (T)(img)(_p3##x,_p3##y,_n1##z,c), I[257] = (T)(img)(_p2##x,_p3##y,_n1##z,c), I[258] = (T)(img)(_p1##x,_p3##y,_n1##z,c), I[259] = (T)(img)(x,_p3##y,_n1##z,c), I[260] = (T)(img)(_n1##x,_p3##y,_n1##z,c), I[261] = (T)(img)(_n2##x,_p3##y,_n1##z,c), I[262] = (T)(img)(_n3##x,_p3##y,_n1##z,c), I[263] = (T)(img)(_n4##x,_p3##y,_n1##z,c), \ - I[264] = (T)(img)(_p3##x,_p2##y,_n1##z,c), I[265] = (T)(img)(_p2##x,_p2##y,_n1##z,c), I[266] = (T)(img)(_p1##x,_p2##y,_n1##z,c), I[267] = (T)(img)(x,_p2##y,_n1##z,c), I[268] = (T)(img)(_n1##x,_p2##y,_n1##z,c), I[269] = (T)(img)(_n2##x,_p2##y,_n1##z,c), I[270] = (T)(img)(_n3##x,_p2##y,_n1##z,c), I[271] = (T)(img)(_n4##x,_p2##y,_n1##z,c), \ - I[272] = (T)(img)(_p3##x,_p1##y,_n1##z,c), I[273] = (T)(img)(_p2##x,_p1##y,_n1##z,c), I[274] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[275] = (T)(img)(x,_p1##y,_n1##z,c), I[276] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[277] = (T)(img)(_n2##x,_p1##y,_n1##z,c), I[278] = (T)(img)(_n3##x,_p1##y,_n1##z,c), I[279] = (T)(img)(_n4##x,_p1##y,_n1##z,c), \ - I[280] = (T)(img)(_p3##x,y,_n1##z,c), I[281] = (T)(img)(_p2##x,y,_n1##z,c), I[282] = (T)(img)(_p1##x,y,_n1##z,c), I[283] = (T)(img)(x,y,_n1##z,c), I[284] = (T)(img)(_n1##x,y,_n1##z,c), I[285] = (T)(img)(_n2##x,y,_n1##z,c), I[286] = (T)(img)(_n3##x,y,_n1##z,c), I[287] = (T)(img)(_n4##x,y,_n1##z,c), \ - I[288] = (T)(img)(_p3##x,_n1##y,_n1##z,c), I[289] = (T)(img)(_p2##x,_n1##y,_n1##z,c), I[290] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[291] = (T)(img)(x,_n1##y,_n1##z,c), I[292] = (T)(img)(_n1##x,_n1##y,_n1##z,c), I[293] = (T)(img)(_n2##x,_n1##y,_n1##z,c), I[294] = (T)(img)(_n3##x,_n1##y,_n1##z,c), I[295] = (T)(img)(_n4##x,_n1##y,_n1##z,c), \ - I[296] = (T)(img)(_p3##x,_n2##y,_n1##z,c), I[297] = (T)(img)(_p2##x,_n2##y,_n1##z,c), I[298] = (T)(img)(_p1##x,_n2##y,_n1##z,c), I[299] = (T)(img)(x,_n2##y,_n1##z,c), I[300] = (T)(img)(_n1##x,_n2##y,_n1##z,c), I[301] = (T)(img)(_n2##x,_n2##y,_n1##z,c), I[302] = (T)(img)(_n3##x,_n2##y,_n1##z,c), I[303] = (T)(img)(_n4##x,_n2##y,_n1##z,c), \ - I[304] = (T)(img)(_p3##x,_n3##y,_n1##z,c), I[305] = (T)(img)(_p2##x,_n3##y,_n1##z,c), I[306] = (T)(img)(_p1##x,_n3##y,_n1##z,c), I[307] = (T)(img)(x,_n3##y,_n1##z,c), I[308] = (T)(img)(_n1##x,_n3##y,_n1##z,c), I[309] = (T)(img)(_n2##x,_n3##y,_n1##z,c), I[310] = (T)(img)(_n3##x,_n3##y,_n1##z,c), I[311] = (T)(img)(_n4##x,_n3##y,_n1##z,c), \ - I[312] = (T)(img)(_p3##x,_n4##y,_n1##z,c), I[313] = (T)(img)(_p2##x,_n4##y,_n1##z,c), I[314] = (T)(img)(_p1##x,_n4##y,_n1##z,c), I[315] = (T)(img)(x,_n4##y,_n1##z,c), I[316] = (T)(img)(_n1##x,_n4##y,_n1##z,c), I[317] = (T)(img)(_n2##x,_n4##y,_n1##z,c), I[318] = (T)(img)(_n3##x,_n4##y,_n1##z,c), I[319] = (T)(img)(_n4##x,_n4##y,_n1##z,c), \ - I[320] = (T)(img)(_p3##x,_p3##y,_n2##z,c), I[321] = (T)(img)(_p2##x,_p3##y,_n2##z,c), I[322] = (T)(img)(_p1##x,_p3##y,_n2##z,c), I[323] = (T)(img)(x,_p3##y,_n2##z,c), I[324] = (T)(img)(_n1##x,_p3##y,_n2##z,c), I[325] = (T)(img)(_n2##x,_p3##y,_n2##z,c), I[326] = (T)(img)(_n3##x,_p3##y,_n2##z,c), I[327] = (T)(img)(_n4##x,_p3##y,_n2##z,c), \ - I[328] = (T)(img)(_p3##x,_p2##y,_n2##z,c), I[329] = (T)(img)(_p2##x,_p2##y,_n2##z,c), I[330] = (T)(img)(_p1##x,_p2##y,_n2##z,c), I[331] = (T)(img)(x,_p2##y,_n2##z,c), I[332] = (T)(img)(_n1##x,_p2##y,_n2##z,c), I[333] = (T)(img)(_n2##x,_p2##y,_n2##z,c), I[334] = (T)(img)(_n3##x,_p2##y,_n2##z,c), I[335] = (T)(img)(_n4##x,_p2##y,_n2##z,c), \ - I[336] = (T)(img)(_p3##x,_p1##y,_n2##z,c), I[337] = (T)(img)(_p2##x,_p1##y,_n2##z,c), I[338] = (T)(img)(_p1##x,_p1##y,_n2##z,c), I[339] = (T)(img)(x,_p1##y,_n2##z,c), I[340] = (T)(img)(_n1##x,_p1##y,_n2##z,c), I[341] = (T)(img)(_n2##x,_p1##y,_n2##z,c), I[342] = (T)(img)(_n3##x,_p1##y,_n2##z,c), I[343] = (T)(img)(_n4##x,_p1##y,_n2##z,c), \ - I[344] = (T)(img)(_p3##x,y,_n2##z,c), I[345] = (T)(img)(_p2##x,y,_n2##z,c), I[346] = (T)(img)(_p1##x,y,_n2##z,c), I[347] = (T)(img)(x,y,_n2##z,c), I[348] = (T)(img)(_n1##x,y,_n2##z,c), I[349] = (T)(img)(_n2##x,y,_n2##z,c), I[350] = (T)(img)(_n3##x,y,_n2##z,c), I[351] = (T)(img)(_n4##x,y,_n2##z,c), \ - I[352] = (T)(img)(_p3##x,_n1##y,_n2##z,c), I[353] = (T)(img)(_p2##x,_n1##y,_n2##z,c), I[354] = (T)(img)(_p1##x,_n1##y,_n2##z,c), I[355] = (T)(img)(x,_n1##y,_n2##z,c), I[356] = (T)(img)(_n1##x,_n1##y,_n2##z,c), I[357] = (T)(img)(_n2##x,_n1##y,_n2##z,c), I[358] = (T)(img)(_n3##x,_n1##y,_n2##z,c), I[359] = (T)(img)(_n4##x,_n1##y,_n2##z,c), \ - I[360] = (T)(img)(_p3##x,_n2##y,_n2##z,c), I[361] = (T)(img)(_p2##x,_n2##y,_n2##z,c), I[362] = (T)(img)(_p1##x,_n2##y,_n2##z,c), I[363] = (T)(img)(x,_n2##y,_n2##z,c), I[364] = (T)(img)(_n1##x,_n2##y,_n2##z,c), I[365] = (T)(img)(_n2##x,_n2##y,_n2##z,c), I[366] = (T)(img)(_n3##x,_n2##y,_n2##z,c), I[367] = (T)(img)(_n4##x,_n2##y,_n2##z,c), \ - I[368] = (T)(img)(_p3##x,_n3##y,_n2##z,c), I[369] = (T)(img)(_p2##x,_n3##y,_n2##z,c), I[370] = (T)(img)(_p1##x,_n3##y,_n2##z,c), I[371] = (T)(img)(x,_n3##y,_n2##z,c), I[372] = (T)(img)(_n1##x,_n3##y,_n2##z,c), I[373] = (T)(img)(_n2##x,_n3##y,_n2##z,c), I[374] = (T)(img)(_n3##x,_n3##y,_n2##z,c), I[375] = (T)(img)(_n4##x,_n3##y,_n2##z,c), \ - I[376] = (T)(img)(_p3##x,_n4##y,_n2##z,c), I[377] = (T)(img)(_p2##x,_n4##y,_n2##z,c), I[378] = (T)(img)(_p1##x,_n4##y,_n2##z,c), I[379] = (T)(img)(x,_n4##y,_n2##z,c), I[380] = (T)(img)(_n1##x,_n4##y,_n2##z,c), I[381] = (T)(img)(_n2##x,_n4##y,_n2##z,c), I[382] = (T)(img)(_n3##x,_n4##y,_n2##z,c), I[383] = (T)(img)(_n4##x,_n4##y,_n2##z,c), \ - I[384] = (T)(img)(_p3##x,_p3##y,_n3##z,c), I[385] = (T)(img)(_p2##x,_p3##y,_n3##z,c), I[386] = (T)(img)(_p1##x,_p3##y,_n3##z,c), I[387] = (T)(img)(x,_p3##y,_n3##z,c), I[388] = (T)(img)(_n1##x,_p3##y,_n3##z,c), I[389] = (T)(img)(_n2##x,_p3##y,_n3##z,c), I[390] = (T)(img)(_n3##x,_p3##y,_n3##z,c), I[391] = (T)(img)(_n4##x,_p3##y,_n3##z,c), \ - I[392] = (T)(img)(_p3##x,_p2##y,_n3##z,c), I[393] = (T)(img)(_p2##x,_p2##y,_n3##z,c), I[394] = (T)(img)(_p1##x,_p2##y,_n3##z,c), I[395] = (T)(img)(x,_p2##y,_n3##z,c), I[396] = (T)(img)(_n1##x,_p2##y,_n3##z,c), I[397] = (T)(img)(_n2##x,_p2##y,_n3##z,c), I[398] = (T)(img)(_n3##x,_p2##y,_n3##z,c), I[399] = (T)(img)(_n4##x,_p2##y,_n3##z,c), \ - I[400] = (T)(img)(_p3##x,_p1##y,_n3##z,c), I[401] = (T)(img)(_p2##x,_p1##y,_n3##z,c), I[402] = (T)(img)(_p1##x,_p1##y,_n3##z,c), I[403] = (T)(img)(x,_p1##y,_n3##z,c), I[404] = (T)(img)(_n1##x,_p1##y,_n3##z,c), I[405] = (T)(img)(_n2##x,_p1##y,_n3##z,c), I[406] = (T)(img)(_n3##x,_p1##y,_n3##z,c), I[407] = (T)(img)(_n4##x,_p1##y,_n3##z,c), \ - I[408] = (T)(img)(_p3##x,y,_n3##z,c), I[409] = (T)(img)(_p2##x,y,_n3##z,c), I[410] = (T)(img)(_p1##x,y,_n3##z,c), I[411] = (T)(img)(x,y,_n3##z,c), I[412] = (T)(img)(_n1##x,y,_n3##z,c), I[413] = (T)(img)(_n2##x,y,_n3##z,c), I[414] = (T)(img)(_n3##x,y,_n3##z,c), I[415] = (T)(img)(_n4##x,y,_n3##z,c), \ - I[416] = (T)(img)(_p3##x,_n1##y,_n3##z,c), I[417] = (T)(img)(_p2##x,_n1##y,_n3##z,c), I[418] = (T)(img)(_p1##x,_n1##y,_n3##z,c), I[419] = (T)(img)(x,_n1##y,_n3##z,c), I[420] = (T)(img)(_n1##x,_n1##y,_n3##z,c), I[421] = (T)(img)(_n2##x,_n1##y,_n3##z,c), I[422] = (T)(img)(_n3##x,_n1##y,_n3##z,c), I[423] = (T)(img)(_n4##x,_n1##y,_n3##z,c), \ - I[424] = (T)(img)(_p3##x,_n2##y,_n3##z,c), I[425] = (T)(img)(_p2##x,_n2##y,_n3##z,c), I[426] = (T)(img)(_p1##x,_n2##y,_n3##z,c), I[427] = (T)(img)(x,_n2##y,_n3##z,c), I[428] = (T)(img)(_n1##x,_n2##y,_n3##z,c), I[429] = (T)(img)(_n2##x,_n2##y,_n3##z,c), I[430] = (T)(img)(_n3##x,_n2##y,_n3##z,c), I[431] = (T)(img)(_n4##x,_n2##y,_n3##z,c), \ - I[432] = (T)(img)(_p3##x,_n3##y,_n3##z,c), I[433] = (T)(img)(_p2##x,_n3##y,_n3##z,c), I[434] = (T)(img)(_p1##x,_n3##y,_n3##z,c), I[435] = (T)(img)(x,_n3##y,_n3##z,c), I[436] = (T)(img)(_n1##x,_n3##y,_n3##z,c), I[437] = (T)(img)(_n2##x,_n3##y,_n3##z,c), I[438] = (T)(img)(_n3##x,_n3##y,_n3##z,c), I[439] = (T)(img)(_n4##x,_n3##y,_n3##z,c), \ - I[440] = (T)(img)(_p3##x,_n4##y,_n3##z,c), I[441] = (T)(img)(_p2##x,_n4##y,_n3##z,c), I[442] = (T)(img)(_p1##x,_n4##y,_n3##z,c), I[443] = (T)(img)(x,_n4##y,_n3##z,c), I[444] = (T)(img)(_n1##x,_n4##y,_n3##z,c), I[445] = (T)(img)(_n2##x,_n4##y,_n3##z,c), I[446] = (T)(img)(_n3##x,_n4##y,_n3##z,c), I[447] = (T)(img)(_n4##x,_n4##y,_n3##z,c), \ - I[448] = (T)(img)(_p3##x,_p3##y,_n4##z,c), I[449] = (T)(img)(_p2##x,_p3##y,_n4##z,c), I[450] = (T)(img)(_p1##x,_p3##y,_n4##z,c), I[451] = (T)(img)(x,_p3##y,_n4##z,c), I[452] = (T)(img)(_n1##x,_p3##y,_n4##z,c), I[453] = (T)(img)(_n2##x,_p3##y,_n4##z,c), I[454] = (T)(img)(_n3##x,_p3##y,_n4##z,c), I[455] = (T)(img)(_n4##x,_p3##y,_n4##z,c), \ - I[456] = (T)(img)(_p3##x,_p2##y,_n4##z,c), I[457] = (T)(img)(_p2##x,_p2##y,_n4##z,c), I[458] = (T)(img)(_p1##x,_p2##y,_n4##z,c), I[459] = (T)(img)(x,_p2##y,_n4##z,c), I[460] = (T)(img)(_n1##x,_p2##y,_n4##z,c), I[461] = (T)(img)(_n2##x,_p2##y,_n4##z,c), I[462] = (T)(img)(_n3##x,_p2##y,_n4##z,c), I[463] = (T)(img)(_n4##x,_p2##y,_n4##z,c), \ - I[464] = (T)(img)(_p3##x,_p1##y,_n4##z,c), I[465] = (T)(img)(_p2##x,_p1##y,_n4##z,c), I[466] = (T)(img)(_p1##x,_p1##y,_n4##z,c), I[467] = (T)(img)(x,_p1##y,_n4##z,c), I[468] = (T)(img)(_n1##x,_p1##y,_n4##z,c), I[469] = (T)(img)(_n2##x,_p1##y,_n4##z,c), I[470] = (T)(img)(_n3##x,_p1##y,_n4##z,c), I[471] = (T)(img)(_n4##x,_p1##y,_n4##z,c), \ - I[472] = (T)(img)(_p3##x,y,_n4##z,c), I[473] = (T)(img)(_p2##x,y,_n4##z,c), I[474] = (T)(img)(_p1##x,y,_n4##z,c), I[475] = (T)(img)(x,y,_n4##z,c), I[476] = (T)(img)(_n1##x,y,_n4##z,c), I[477] = (T)(img)(_n2##x,y,_n4##z,c), I[478] = (T)(img)(_n3##x,y,_n4##z,c), I[479] = (T)(img)(_n4##x,y,_n4##z,c), \ - I[480] = (T)(img)(_p3##x,_n1##y,_n4##z,c), I[481] = (T)(img)(_p2##x,_n1##y,_n4##z,c), I[482] = (T)(img)(_p1##x,_n1##y,_n4##z,c), I[483] = (T)(img)(x,_n1##y,_n4##z,c), I[484] = (T)(img)(_n1##x,_n1##y,_n4##z,c), I[485] = (T)(img)(_n2##x,_n1##y,_n4##z,c), I[486] = (T)(img)(_n3##x,_n1##y,_n4##z,c), I[487] = (T)(img)(_n4##x,_n1##y,_n4##z,c), \ - I[488] = (T)(img)(_p3##x,_n2##y,_n4##z,c), I[489] = (T)(img)(_p2##x,_n2##y,_n4##z,c), I[490] = (T)(img)(_p1##x,_n2##y,_n4##z,c), I[491] = (T)(img)(x,_n2##y,_n4##z,c), I[492] = (T)(img)(_n1##x,_n2##y,_n4##z,c), I[493] = (T)(img)(_n2##x,_n2##y,_n4##z,c), I[494] = (T)(img)(_n3##x,_n2##y,_n4##z,c), I[495] = (T)(img)(_n4##x,_n2##y,_n4##z,c), \ - I[496] = (T)(img)(_p3##x,_n3##y,_n4##z,c), I[497] = (T)(img)(_p2##x,_n3##y,_n4##z,c), I[498] = (T)(img)(_p1##x,_n3##y,_n4##z,c), I[499] = (T)(img)(x,_n3##y,_n4##z,c), I[500] = (T)(img)(_n1##x,_n3##y,_n4##z,c), I[501] = (T)(img)(_n2##x,_n3##y,_n4##z,c), I[502] = (T)(img)(_n3##x,_n3##y,_n4##z,c), I[503] = (T)(img)(_n4##x,_n3##y,_n4##z,c), \ - I[504] = (T)(img)(_p3##x,_n4##y,_n4##z,c), I[505] = (T)(img)(_p2##x,_n4##y,_n4##z,c), I[506] = (T)(img)(_p1##x,_n4##y,_n4##z,c), I[507] = (T)(img)(x,_n4##y,_n4##z,c), I[508] = (T)(img)(_n1##x,_n4##y,_n4##z,c), I[509] = (T)(img)(_n2##x,_n4##y,_n4##z,c), I[510] = (T)(img)(_n3##x,_n4##y,_n4##z,c), I[511] = (T)(img)(_n4##x,_n4##y,_n4##z,c); - -// End of the plug-in -#endif diff --git a/deps/CImg/plugins/nlmeans.h b/deps/CImg/plugins/nlmeans.h deleted file mode 100644 index 158a613..0000000 --- a/deps/CImg/plugins/nlmeans.h +++ /dev/null @@ -1,240 +0,0 @@ -/* - # - # File : nlmeans.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plugin that implements the non-local mean filter. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # [1] Buades, A.; Coll, B.; Morel, J.-M.: A non-local algorithm for image denoising - # IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2005. CVPR 2005. - # Volume 2, 20-25 June 2005 Page(s):60 - 65 vol. 2 - # - # [2] Buades, A. Coll, B. and Morel, J.: A review of image denoising algorithms, with a new one. - # Multiscale Modeling and Simulation: A SIAM Interdisciplinary Journal 4 (2004) 490-530 - # - # [3] Gasser, T. Sroka,L. Jennen Steinmetz,C. Residual variance and residual pattern nonlinear regression. - # Biometrika 73 (1986) 625-659 - # - # Copyright : Jerome Boulanger - # ( http://www.irisa.fr/vista/Equipe/People/Jerome.Boulanger.html ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin_nlmeans -#define cimg_plugin_nlmeans - -//! NL-Means denoising algorithm. -/** - This is the in-place version of get_nlmean(). -**/ -CImg& nlmeans(int patch_size=1, double lambda=-1, double alpha=3, double sigma=-1, int sampling=1){ - if (!is_empty()){ - if (sigma<0) sigma = std::sqrt(variance_noise()); // noise variance estimation - const double np = (2*patch_size+1)*(2*patch_size+1)*spectrum()/(double)sampling; - if (lambda<0) {// Bandwidth estimation - if (np<100) - lambda =(((((( 1.1785e-12*np -5.1827e-10)*np+ 9.5946e-08)*np -9.7798e-06)*np+ 6.0756e-04)*np -0.0248)*np+ 1.9203)*np +7.9599; - else - lambda = (-7.2611e-04*np+ 1.3213)*np+ 15.2726; - } -#if cimg_debug>=1 - std::fprintf(stderr,"Size of the patch : %dx%d \n", - 2*patch_size+1,2*patch_size+1); - std::fprintf(stderr,"Size of window where similar patch are looked for : %dx%d \n", - (int)(alpha*(2*patch_size+1)),(int)(alpha*(2*patch_size+1))); - std::fprintf(stderr,"Bandwidth of the kernel : %fx%f^2 \n", - lambda,sigma); - std::fprintf(stderr,"Noise standard deviation estimated to : %f \n", - sigma); -#endif - - CImg dest(width(),height(),depth(),spectrum(),0); - double *uhat = new double[spectrum()]; - const double h2 = -.5/(lambda*sigma*sigma); // [Kervrann] notations - if (depth()!=1){ // 3D case - const CImg<> P = (*this).get_blur(1); // inspired from Mahmoudi&Sapiro SPletter dec 05 - const int n_simu = 64; - CImg<> tmp(n_simu,n_simu,n_simu); - const double sig = std::sqrt(tmp.fill(0.f).noise(sigma).blur(1).pow(2.).sum()/(n_simu*n_simu*n_simu)); - const int - patch_size_z = 0, - pxi = (int)(alpha*patch_size), - pyi = (int)(alpha*patch_size), - pzi = 2; //Define the size of the neighborhood in z - for (int zi = 0; zi=1 - std::fprintf(stderr,"\rProcessing : %3d %%",(int)((float)zi/(float)depth()*100.));fflush(stdout); -#endif - for (int yi = 0; yi=0 && zj_=0 && zi_=0 && yj_=0 && yi_=0 && xj_=0 && xi_wmax?w:wmax; - cimg_forC(*this,v) uhat[v]+=w*(*this)(xj,yj,zj,v); - sw+=w; - } - } - // add the central pixel - cimg_forC(*this,v) uhat[v]+=wmax*(*this)(xi,yi,zi,v); - sw+=wmax; - if (sw) cimg_forC(*this,v) dest(xi,yi,zi,v) = (T)(uhat[v]/=sw); - else cimg_forC(*this,v) dest(xi,yi,zi,v) = (*this)(xi,yi,zi,v); - } - } - } - else { // 2D case - const CImg<> P = (*this).get_blur(1); // inspired from Mahmoudi&Sapiro SPletter dec 05 - const int n_simu = 512; - CImg<> tmp(n_simu,n_simu); - const double sig = std::sqrt(tmp.fill(0.f).noise(sigma).blur(1).pow(2.).sum()/(n_simu*n_simu)); - const int - pxi = (int)(alpha*patch_size), - pyi = (int)(alpha*patch_size); //Define the size of the neighborhood - for (int yi = 0; yi=1 - std::fprintf(stderr,"\rProcessing : %3d %%",(int)((float)yi/(float)height()*100.));fflush(stdout); -#endif - for (int xi = 0; xi=0 && yj_=0 && yi_=0 && xj_=0 && xi_wmax?w:wmax; // Store the maximum of the weights - sw+=w; // Compute the sum of the weights - } - } - // add the central pixel with the maximum weight - cimg_forC(*this,v) uhat[v]+=wmax*(*this)(xi,yi,v); - sw+=wmax; - - // Compute the estimate for the current pixel - if (sw) cimg_forC(*this,v) dest(xi,yi,v) = (T)(uhat[v]/=sw); - else cimg_forC(*this,v) dest(xi,yi,v) = (*this)(xi,yi,v); - } - } // main loop - } // 2d - delete [] uhat; - dest.move_to(*this); -#if cimg_debug>=1 - std::fprintf(stderr,"\n"); // make a new line -#endif - } // is empty - return *this; -} - -//! Get the result of the NL-Means denoising algorithm. -/** - \param patch_size = radius of the patch (1=3x3 by default) - \param lambda = bandwidth ( -1 by default : automatic selection) - \param alpha = size of the region where similar patch are searched (3 x patch_size = 9x9 by default) - \param sigma = noise standard deviation (-1 = estimation) - \param sampling = sampling of the patch (1 = uses all point, 2 = uses one point on 4, etc) - If the image has three dimensions then the patch is only in 2D and the neighborhood extent in time is only 5. - If the image has several channel (color images), the distance between the two patch is computed using - all the channels. - The greater the patch is the best is the result. - Lambda parameter is function of the size of the patch size. The automatic Lambda parameter is taken - in the Chi2 table at a significiance level of 0.01. This diffear from the original paper [1]. The weighted average becomes then: - \f$$ \hat{f}(x,y) = \sum_{x',y'} \frac{1}{Z} exp(\frac{P(x,y)-P(x',y')}{2 \lambda \sigma^2}) f(x',y') $$\f - where \f$ P(x,y) $\f denotes the patch in (x,y) location. - - An a priori is also used to increase the speed of the algorithm in the spirit of Sapiro et al. SPletter dec 05 - - This very basic version of the Non-Local Means algorithm provides an output image which contains - some residual noise with a relatively small variance (\f$\sigma<5$\f). - - [1] A non-local algorithm for image denoising - Buades, A.; Coll, B.; Morel, J.-M.; - Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on - Volume 2, 20-25 June 2005 Page(s):60 - 65 vol. 2 -**/ -CImg get_nlmeans( int patch_size=1, double lambda=-1, double alpha=3 ,double sigma=-1, int sampling=1) const { - return CImg(*this).nlmeans(patch_size,lambda,alpha,sigma,sampling); -} - -#endif diff --git a/deps/CImg/plugins/opencv.h b/deps/CImg/plugins/opencv.h deleted file mode 100644 index 75e8c4b..0000000 --- a/deps/CImg/plugins/opencv.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - # - # File : opencv.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plugin that provides OpenCV-based function to perform various stuffs. - # - # IMPORTANT WARNING : You must include STL's and before plugin inclusion to make it working ! - # - # Copyright : Antonio Albiol - # ( http://personales.upv.es/~aalbiol/ ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ -#ifndef cimg_plugin_opencv -#define cimg_plugin_opencv - -//! Load image from a video file, using OpenCV. -/** - \param filename - \param skip_frames Number of frames to skip before the capture. - \param release_video Request to close the video. - \return an empty image if error or the end of file is reached -**/ -CImg& load_video(const std::string& filename, const unsigned int skip_frames=0, const bool release_video=false) { -#ifdef cimg_use_opencv - - static std::map namesTable; - - cv::VideoCapture * capture; - int c = namesTable.count( filename ); - if (! c ) { //File not open. Create Capture object to start using it - capture = new cv::VideoCapture (filename); - if (capture->isOpened()) - namesTable.insert( std::pair< std::string , cv::VideoCapture * > (filename, capture)); - else {//Invalid video filename - throw CImgIOException(_cimg_instance - "load_video(): Failed to initialize video %s.", - cimg_instance, - filename.c_str() ); - return *this; - } - } - else - capture = namesTable.find(filename)->second; - - //From here, capture points to a valid capture - - if (release_video) { - if (capture) delete capture; - namesTable.erase(filename); - return *this; - } - - cv::Mat img; - for (unsigned int i = 0; i> img; - (*capture) >> img; - if (!img.empty() ) { - const int step = (int)(img.step[0] - 3 * img.cols); - assign(img.cols,img.rows,1,3); - const unsigned char * ptrs = img.data; - T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); - if (step>0) cimg_forY(*this,y) { - cimg_forX(*this,x) { *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); } - ptrs+=step; - } else for (unsigned long siz = (unsigned long)img.cols*img.rows; siz; --siz) { - *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); - } - } - else { - assign(); //Return an empty image to indicate EOF - } -#else - throw CImgIOException(_cimg_instance - "load_video(): This function requires the OpenCV library to run " - "(macro 'cimg_use_opencv' must be defined).", - cimg_instance); -#endif - return *this; -} - -//! Load image from a camera stream, using OpenCV \newinstance. -static CImg get_load_video(const std::string& filename, const unsigned int skip_frames=0, const bool release_video=false) { - return CImg().load_video(filename,skip_frames,release_video); -} - -#endif diff --git a/deps/CImg/plugins/skeleton.h b/deps/CImg/plugins/skeleton.h deleted file mode 100644 index 17bb0dd..0000000 --- a/deps/CImg/plugins/skeleton.h +++ /dev/null @@ -1,580 +0,0 @@ -/* - # - # File : skeleton.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plugin that implements the computation of the Hamilton-Jacobi skeletons - # using Siddiqi algorithm with the correction proposed by Torsello, - # as described in : - # - # [SBTZ02] K. Siddiqi, S. Bouix, A. Tannenbaum and S.W. Zucker. Hamilton-Jacobi Skeletons - # International Journal of Computer Vision, 48(3):215-231, 2002 - # - # [TH03] A. Torsello and E. R. Hancock. Curvature Correction of the Hamilton-Jacobi Skeleton - # IEEE Computer Vision and Pattern Recognition, 2003 - # - # [BST05] S. Bouix, K. Siddiqi and A. Tannenbaum. Flux driven automatic centerline - # extraction. Medical Image Analysis, 9:209-221, 2005 - # - # IMPORTANT WARNING : You must include STL's before plugin inclusion to make it working ! - # - # Copyright : Francois-Xavier Dupe - # ( http://www.greyc.ensicaen.fr/~fdupe/ ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ -#ifndef cimg_plugin_skeleton -#define cimg_plugin_skeleton - -/** - * Compute the flux of the gradient - * @param grad the gradient of the distance function - * @param sY the sampling size in Y - * @param sZ the sampling size in Z - * @return the flux - */ -CImg get_flux(const CImgList & grad, - const float sY=1.0f, const float sZ=1.0f) const { - - int stop = 0; // Stop flag - float f = 0; // The current flux - int count = 0; // Counter - CImg flux(width(),height(),depth(),1,0); - - cimg_forXYZ((*this),x,y,z) { - if (!(*this)(x,y,z)) continue; // If the point is the background - - // Look at the neigthboorhound and compute the flux - stop = 0; - f = 0; - count = 0; - - for (int k = -1; k<=1; ++k) - for (int l = -1; l<= 1; ++l) - for (int m = -1; m<= 1; ++m) { - if (stop==1) continue; - - // Protection - if ((x+k<0) || (x+k>=width()) || (y+l<0) || (y+l>=height()) || - (z+m<0) || (z+m>=depth()) || (k==0 && l==0 && m==0)) continue; - ++count; - - // Test if the point is in the interior - if ((*this)(x+k,y+l,z+m)==0) { stop = 1; continue; } - - // Compute the flux - f+=(grad(0,x+k,y+l,z+m)*k + grad(1,x+k,y+l,z+m)*l/sY + grad(2,x+k,y+l,z+m)*m/sZ)/std::sqrt((float)(k*k+l*l+m*m)); - } - - // Update - if (stop==1 || count==0) flux(x,y,z) = 0; - else flux(x,y,z) = f/count; - } - - return flux; -} - -/** - * Definition of a point with his flux value - */ -struct _PointFlux { - int pos [3]; - float flux; - float dist; -}; - -/** - * Class for the priority queue - */ -class _compare_point { - /** - * Create medial curves - */ - bool curve; - - public: - _compare_point(const bool curve=false) { this->curve = curve; } - - bool operator()(const _PointFlux & p1, const _PointFlux & p2) const { - if (curve) { - if (p1.dist>p2.dist) return true; - else if (p1.dist==p2.dist && p1.fluxp2.dist) return true; - } - return false; - } -}; - -/** - * Compute the log-density using the algorithm from Torsello - * @param dist the distance map - * @param grad the gradient of the distance map, e.g. the flux - * @param flux the divergence map - * @param delta the threshold for the division - * @return the logdensity \rho - */ -CImg get_logdensity(const CImg & dist, - const CImgList & grad, - const CImg & flux, float delta = 0.1) const { - std::priority_queue< _PointFlux, std::vector<_PointFlux>, _compare_point > pqueue(true); - CImg logdensity(width(),height(),depth(),1,0); - - // 1 - Put all the pixel inside the priority queue - cimg_forXYZ(dist,x,y,z) if (dist(x,y,z)!=0) { - _PointFlux p; - p.pos[0] = x; - p.pos[1] = y; - p.pos[2] = z; - p.flux = 0; - p.dist = dist(x,y,z); - pqueue.push(p); - } - - // 2 - Compute the logdensity - while (!pqueue.empty()) { - _PointFlux p = pqueue.top(); - pqueue.pop(); - - const float - Fx = grad(0,p.pos[0],p.pos[1],p.pos[2]), - Fy = grad(1,p.pos[0],p.pos[1],p.pos[2]), - Fz = grad(2,p.pos[0],p.pos[1],p.pos[2]); - - logdensity(p.pos[0],p.pos[1],p.pos[2]) = logdensity.linear_atXYZ(p.pos[0]-Fx,p.pos[1]-Fy,p.pos[2]-Fz) - - 0.5f * (flux(p.pos[0],p.pos[1],p.pos[2])+flux.linear_atXYZ(p.pos[0]-Fx,p.pos[1]-Fy,p.pos[2]-Fz)); - - const float tmp = 1.0f - (1.0f-fabs(Fx)) * (1.0f-fabs(Fy)) * (1.0f-fabs(Fz)); - if (tmp>delta) logdensity(p.pos[0],p.pos[1],p.pos[2])/=tmp; - else if (delta<1) logdensity(p.pos[0],p.pos[1],p.pos[2]) = 0; - } - - return logdensity; -} - -/** - * Computed the corrected divergence map using Torsello formula and idea - * @param logdensity the log density map - * @param grad the gradient of the distance map - * @param flux the flux using siddiqi formula - * @param delta the discrete step - * @return the corrected divergence map - */ -CImg get_corrected_flux(const CImg & logdensity, - const CImgList & grad, - const CImg & flux, - float delta = 1.0) const { - - CImg corr_map(width(),height(),depth(),1,0); - cimg_forXYZ(corr_map,x,y,z) { - const float - Fx = grad(0,x,y,z), - Fy = grad(1,x,y,z), - Fz = grad(2,x,y,z); - corr_map(x,y,z) = (logdensity(x,y,z) - logdensity.linear_atXYZ(x-Fx,y-Fy,z-Fz)) * expf(logdensity(x,y,z) - 0.5f * delta) + - 0.5f * ( flux.linear_atXYZ(x-Fx,y-Fy,z-Fz)*expf(logdensity.linear_atXYZ(x-Fx,y-Fy,z-Fz)) + flux(x,y,z)*expf(logdensity(x,y,z))); - } - - return corr_map; -} - -/** - * Test if a point is simple using Euler number for 2D case - * or using Malandain criterion for 3D case - * @param img the image - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return true if simple - */ -bool _isSimple (const CImg & img, int x, int y, int z ) const { - if (img.depth()==1) { // 2D case - int V = 0, E = 0; // Number of vertices and edges - - for (int k = -1; k<=1; ++k) - for (int l = -1; l<=1; ++l) { - // Protection - if (x+k<0 || x+k>=img.width() || y+l<0 || y+l>=img.height()) continue; - - // Count the number of vertices - if (img(x+k,y+l)!=0 && !(k==0 && l==0)) { - ++V; - - // Count the number of edges - for (int k1 = -1; k1<=1; ++k1) - for (int l1 = -1; l1<=1; ++l1) { - // Protection - if (x+k+k1<0 || x+k+k1>=img.width() || y+l+l1<0 || y+l+l1>=img.height()) continue; - - if (!(k1==0 && l1==0) && img(x+k+k1,y+l+l1)!=0 && k+k1>-2 && l+l1>-2 && - k+k1<2 && l+l1<2 && !(k+k1==0 && l+l1==0)) - ++E; - } - } - } - - // Remove the corner if exists - if (x-1>=0 && y-1>=0 && img(x-1,y-1)!=0 && img(x,y-1)!=0 && img(x-1,y)!=0) E-=2; - if (x-1>=0 && y+1=0 && img(x+1,y-1)!=0 && img(x,y-1)!=0 && img(x+1,y)!=0) E-=2; - if (x+1 visit(3,3,3,1,0); // Visitor table - int C_asterix = 0, C_bar = 0, count = 0; - visit(1,1,1) = -1; - - // Compute C^* - - // Seeking for a component - for (int k = -1; k<=1; ++k) - for (int l = -1; l<=1; ++l) - for (int m = -1; m<=1; ++m) { - int label = 0; - - // Protection - if (x+k<0 || x+k>=img.width() || - y+l<0 || y+l>=img.height() || - z+m<0 || z+m>=img.depth() || - (k==0 && l==0 && m==0)) continue; - - if (visit(1+k,1+l,1+m)==0 && img(x+k,y+l,z+m)!=0) { - // Look after the neightbor - for (int k1 = -1; k1<=1; ++k1) - for (int l1 = -1; l1<=1; ++l1) - for (int m1 = -1; m1<=1; ++m1) { - // Protection - if (x+k+k1<0 || x+k+k1>=img.width() || - y+l+l1<0 || y+l+l1>=img.height() || - z+m+m1<0 || z+m+m1>=img.depth() || - k+k1>1 || k+k1<-1 || - l+l1>1 || l+l1<-1 || - m+m1>1 || m+m1<-1 ) continue; - - // Search for a already knew component - if (visit(1+k+k1,1+l+l1,1+m+m1)>0 && - img(x+k+k1,y+l+l1,z+m+m1)!=0) { - if (label==0) label = visit(1+k+k1,1+l+l1,1+m+m1); - else if (label!=visit(1+k+k1,1+l+l1,1+m+m1)) { - // Meld component - --C_asterix; - - int C = visit(1+k+k1,1+l+l1,1+m+m1); - cimg_forXYZ(visit,a,b,c) if (visit(a,b,c)==C) visit(a,b,c) = label; - } - } - } - - // Label the point - if (label==0) { - // Find a new component - ++C_asterix; - ++count; - visit(1+k,1+l,1+m) = count; - } else visit(1+k,1+l,1+m) = label; - } - } - - if (C_asterix!=1) return false; - - // Compute \bar{C} - - // Reinit visit - visit.fill(0); - visit(1,1,1) = -1; - - // Seeking for a component - - // Look at X-axis - for (int k = -1; k<=1; ++k) { - if (x+k<0 || x+k>=img.width()) continue; - - if (img(x+k,y,z)==0 && visit(1+k,1,1)==0) { - ++C_bar; - ++count; - visit(1+k,1,1) = count; - - // Follow component - for (int l = -1; l<=1; ++l) { - if (y+l=0 && img(x+k,y+l,z)==0 && visit(1+k,1+l,1)==0) - visit(1+k,1+l,1) = count; - if (z+l=0 && img(x+k,y,z+l)==0 && visit(1+k,1,1+l)==0) - visit(1+k,1,1+l) = count; - } - } - } - - // Look at Y-axis - for (int k = -1; k<=1; ++k) { - if (y+k<0 || y+k>=img.height()) continue; - - if (img(x,y+k,z)==0 && visit(1,1+k,1)==0) { - int label = 0; - ++C_bar; - ++count; - visit(1,1+k,1) = count; - label = count; - - // Follow component - for (int l = -1; l<=1; ++l) { - if (l==0) continue; - - if (x+l=0 && img(x+l,y+k,z)==0) { - if (visit(1+l,1+k,1)!=0) { - if (label!=visit(1+l,1+k,1)) { - // Meld component - --C_bar; - - int C = visit(1+l,1+k,1); - cimg_forXYZ(visit,a,b,c) - if (visit(a,b,c)==C) visit(a,b,c) = label; - } - } else visit(1+l,1+k,1) = label; - } - - if (z+l=0 && img(x,y+k,z+l)==0) { - if (visit(1,1+k,1+l)!=0) { - if (label!=visit(1,1+k,1+l)) { - // Meld component - --C_bar; - - int C = visit(1,1+k,1+l); - cimg_forXYZ(visit,a,b,c) - if (visit(a,b,c)==C) visit(a,b,c) = label; - } - } else visit(1,1+k,1+l) = label; - } - } - } - } - - // Look at Z-axis - for (int k = -1; k<=1; ++k) { - if (z+k<0 || z+k>=img.depth()) continue; - - if (img(x,y,z+k)==0 && visit(1,1,1+k)==0) { - int label = 0; - ++C_bar; - ++count; - visit(1,1,1+k) = count; - label = count; - - // Follow component - for (int l = -1; l<=1; ++l) { - if (l==0) continue; - - if (x+l=0 && img(x+l,y,z+k)==0) { - if (visit(1+l,1,1+k)!=0) { - if (label!=visit(1+l,1,1+k)) { - // Meld component - --C_bar; - - int C = visit(1+l,1,1+k); - cimg_forXYZ(visit,a,b,c) - if (visit(a,b,c)==C) visit(a,b,c) = label; - } - } else visit(1+l,1,1+k) = label; - } - - if (y+l=0 && img(x,y+l,z+k)==0) { - if (visit(1,1+l,1+k)!=0) { - if (label!=visit(1,1+l,1+k)) { - // Meld component - --C_bar; - - int C = visit(1,1+l,1+k); - cimg_forXYZ(visit,a,b,c) - if (visit(a,b,c)==C) visit(a,b,c) = label; - } - } else visit(1,1+l,1+k) = label; - } - } - } - } - if (C_bar==1) return true; - } - - return false; -} - -/** - * Test if a point is a end point - * @param img the image - * @param label the table of labels - * @param curve set it to true for having medial curve - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return true if simple - */ -bool _isEndPoint(const CImg & img, const CImg & label, - const bool curve, const int x, const int y, const int z) const { - if (label(x,y,z)==1) return true; - - if ((!curve) && (img.depth()!=1)) { // 3D case with medial surface - // Use Pudney specification with the 9 plans - const int plan9 [9][8][3] = { { {-1,0,-1}, {0,0,-1}, {1,0,-1}, {-1,0,0}, {1,0,0}, {-1,0,1}, {0,0,1}, {1,0,1} }, // Plan 1 - { {-1,1,0}, {0,1,0}, {1,1,0}, {-1,0,0}, {1,0,0}, {-1,-1,0}, {0,-1,0}, {1,-1,0} }, // Plan 2 - { {0,-1,-1}, {0,0,-1}, {0,1,-1}, {0,-1,0}, {0,1,0}, {0,-1,1}, {0,0,1}, {0,1,1} }, // Plan 3 - { {1,1,1}, {0,1,0}, {-1,1,-1}, {1,0,1}, {-1,0,-1}, {-1,-1,-1}, {0,-1,0}, {1,-1,1} }, // Plan 4 - { {-1,1,1}, {0,1,0}, {1,1,-1}, {-1,0,1}, {1,0,-1}, {-1,-1,1}, {0,-1,0}, {1,-1,-1} }, // Plan 5 - { {-1,1,1}, {0,1,1}, {1,1,1}, {-1,0,0}, {1,0,0}, {-1,-1,-1}, {0,-1,-1}, {1,-1,-1} }, // Plan 6 - { {-1,1,-1}, {0,1,-1}, {1,1,-1}, {-1,0,0}, {1,0,0}, {-1,-1,1}, {0,-1,1}, {1,-1,1} }, // Plan 7 - { {-1,1,-1}, {-1,1,0}, {-1,1,1}, {0,0,-1}, {0,0,1}, {1,-1,-1}, {1,-1,0}, {1,-1,1} }, // Plan 8 - { {1,1,-1}, {1,1,0}, {1,1,1}, {0,0,-1}, {0,0,1}, {-1,-1,-1}, {-1,-1,0}, {-1,-1,1} } // Plan 9 - }; - - // Count the number of neighbors on each plan - for (int k = 0; k<9; ++k) { - int count = 0; - - for (int l = 0; l<8; ++l) { - if (x+plan9[k][l][0]<0 || x+plan9[k][l][0]>=img.width() || - y+plan9[k][l][1]<0 || y+plan9[k][l][1]>=img.height() || - z+plan9[k][l][2]<0 || z+plan9[k][l][2]>=img.depth()) continue; - - if (img(x+plan9[k][l][0],y+plan9[k][l][1],z+plan9[k][l][2])!=0) ++count; - } - - if (count<2) return true; - } - } else { // 2D or 3D case with medial curve - int isb = 0; - - for (int k = -1; k<=1; ++k) - for (int l = -1; l<=1; ++l) - for (int m = -1; m<=1; ++m) { - // Protection - if (x+k<0 || x+k>=img.width() || y+l<0 || y+l>=img.height() || - z+m<0 || z+m>=img.depth()) continue; - - if (img(x+k,y+l,z+m)!=0) ++isb; - } - - if (isb==2) return true; // The pixel with one neighbor - } - - // Else it's not... - return false; -} - -/** - * Compute the skeleton of the shape using Hamilton-Jacobi scheme - * @param flux the flux of the distance gradient - * @param dist the euclidean distance of the object - * @param curve create or not medial curve - * @param thres the threshold on the flux - * @return the skeleton - */ -CImg get_skeleton (const CImg & flux, - const CImg & dist, const bool curve, const float thres) const { - CImg - skeleton(*this), // The skeleton - label(width(),height(),depth(),1,0), // Save label - count(width(),height(),depth(),1,0); // A counter for the queue - std::priority_queue< _PointFlux, std::vector<_PointFlux>, _compare_point > pqueue(curve); - int isb = 0; - - // 1 - Init get the bound points - cimg_forXYZ(*this,x,y,z) { - if (skeleton(x,y,z)==0) continue; - - // Test bound condition - isb = 0; - for (int k = -1; k<=1; ++k) - for (int l = -1; l<=1; ++l) - for (int m = -1; m<=1; ++m) { - // Protection - if (x+k<0 || x+k>=width() || y+l<0 || y+l>=height() || - z+m<0 || z+m>=depth()) continue; - if (skeleton(x+k,y+l,z+m)==0) isb = 1; - } - - if (isb==1 && _isSimple(skeleton,x,y,z)) { - _PointFlux p; - p.pos[0] = x; - p.pos[1] = y; - p.pos[2] = z; - p.flux = flux(x,y,z); - p.dist = dist(x,y,z); - pqueue.push(p); - count(x,y,z) = 1; - } - } - - // 2 - Compute the skeleton - while (!pqueue.empty()) { - _PointFlux p = pqueue.top(); // Get the point with the max flux - pqueue.pop(); // Remove the point from the queue - count(p.pos[0],p.pos[1],p.pos[2]) = 0; // Reinit counter - - // Test if the point is simple - if (_isSimple(skeleton,p.pos[0],p.pos[1],p.pos[2])) { - if ((! _isEndPoint(skeleton,label,curve,p.pos[0],p.pos[1],p.pos[2])) || p.flux>thres) { - skeleton(p.pos[0],p.pos[1],p.pos[2]) = 0; // Remove the point - - for (int k = -1; k<=1; ++k) - for (int l = -1; l<=1; ++l) - for (int m = -1; m<=1; ++m) { - // Protection - if (p.pos[0]+k < 0 || p.pos[0]+k >= width() || - p.pos[1]+l < 0 || p.pos[1]+l >= height() || - p.pos[2]+m < 0 || p.pos[2]+m >= depth()) continue; - if (skeleton(p.pos[0]+k,p.pos[1]+l,p.pos[2]+m)!=0 && - count(p.pos[0]+k,p.pos[1]+l,p.pos[2]+m)<1 && - _isSimple(skeleton,p.pos[0]+k,p.pos[1]+l,p.pos[2]+m)) { - _PointFlux p1; - p1.pos[0] = p.pos[0]+k; - p1.pos[1] = p.pos[1]+l; - p1.pos[2] = p.pos[2]+m; - p1.flux = flux(p.pos[0]+k,p.pos[1]+l,p.pos[2]+m); - p1.dist = dist(p.pos[0]+k,p.pos[1]+l,p.pos[2]+m); - pqueue.push(p1); - count(p.pos[0]+k,p.pos[1]+l,p.pos[2]+m) = 1; - } - } - } else label(p.pos[0],p.pos[1],p.pos[2]) = 1; // Mark the point as skeletal - } - } - - return skeleton; -} - -/** - * In place version of get_skeleton - */ -CImg skeleton(const CImg & flux, - const CImg & dist, bool curve ,float thres) { - return get_skeleton(flux,dist,curve,thres).move_to(*this); -} - -#endif /* cimg_skeleton_plugin */ diff --git a/deps/CImg/plugins/tiff_stream.h b/deps/CImg/plugins/tiff_stream.h deleted file mode 100644 index 0786e50..0000000 --- a/deps/CImg/plugins/tiff_stream.h +++ /dev/null @@ -1,188 +0,0 @@ -/* -# -# File : tiff_stream.h -# ( C++ header file - CImg plug-in ) -# -# Description : This CImg plug-in provide functions to load and save tiff images -# from std::istream/ to std::ostream -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Copyright : Wolf Blecher -# ( Wolf.Blecher(at)sirona.com ) -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# -*/ - -/*----------------------------------------------------------------------------------- - -IMPORTANT NOTE : - -You *need* to include the following lines in your own code to use this plugin: - -#include "tiffio.h" -#include "tiffio.hxx" - -You *need* to link your code with the libtiff and libtiffxx libraries as well. - -------------------------------------------------------------------------------------*/ - -#ifndef cimg_use_tiff -error cimg_use_tiff not defined -#endif - -#ifndef cimg_plugin_tiff_stream -#define cimg_plugin_tiff_stream - -#include - -///////////////////////////////////////////////////////////////// -// -// Define main CImg plugin functions. -// (you should use these functions only in your own code) -// -///////////////////////////////////////////////////////////////// - -//! Save image as a TIFF file. -/** - \param tiffOutStream std::ostream, where to write the image to - \param compression_type Type of data compression. Can be { 1=None | 2=CCITTRLE | 3=CCITTFAX3 | 4=CCITTFAX4 | 5=LZW | 6=JPEG }. - \note - - libtiff support is enabled by defining the precompilation - directive \c cimg_use_tiff. - - When libtiff is enabled, 2D and 3D (multipage) several - channel per pixel are supported for - char,uchar,short,ushort,float and \c double pixel types. -**/ -const CImg& save_tiff(std::ostream *tiffOutStream, const unsigned int compression_type=0) const { - if (!tiffOutStream->good()) - { - throw CImgArgumentException(_cimg_instance - "save_tiff(): tiffstream is not good!", - cimg_instance); - } - - if (is_empty()) - { - throw CImgArgumentException(_cimg_instance - "Not allowed to write empty images to stream", - cimg_instance - ); - } - - TIFF *tif = TIFFStreamOpen("MemTiff", tiffOutStream); - if (tif) - { - cimg_forZ(*this,z) get_slice(z)._save_tiff(tif,z,compression_type); - tiffOutStream->flush(); - TIFFClose(tif); - } - else - { - throw CImgIOException(_cimg_instance - "save_tiff(): Failed to stream for writing.", - cimg_instance); - } - - return *this; -} - -//! Load images from a TIFF file. -/** - \param tiffInStream std::istream to read data from. - \param first_frame Index of first image frame to read. - \param last_frame Index of last image frame to read. - \param step_frame Step applied between each frame. -**/ -CImg& load_tiff(std::istream* tiffInStream, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) -{ - const unsigned int - nfirst_frame = first_frame=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) - { - cimg::warn("load_tiff(): Invalid specified frame range is [%u,%u] (step %u) since stream contains %u image(s).", - nfirst_frame,nlast_frame,nstep_frame,nb_images); - } - - if (nfirst_frame>=nb_images) - { - return assign(); - } - - if (nlast_frame>=nb_images) - { - nlast_frame = nb_images-1; - } - TIFFSetDirectory(tif,0); - CImg frame; - for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { - frame._load_tiff(tif,l); - if (l==nfirst_frame) assign(frame._width,frame._height,1+(nlast_frame-nfirst_frame)/nstep_frame,frame._spectrum); - if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) - resize(cimg::max(frame._width,_width),cimg::max(frame._height,_height),-100,cimg::max(frame._spectrum,_spectrum),0); - draw_image(0,0,(l-nfirst_frame)/nstep_frame,frame); - } - TIFFClose(tif); - } - else - { - throw CImgIOException(_cimg_instance - "load_tiff(): Failed to read data from stream", - cimg_instance); - } - - return *this; -} - -//! Load a multi-page TIFF file \newinstance. -static CImg get_load_tiff(std::istream* tiffInStream, - const unsigned int first_frame=0, const unsigned int last_frame=~0U, - const unsigned int step_frame=1) -{ - return CImg().load_tiff(tiffInStream,first_frame,last_frame,step_frame); -} - -// End of the plug-in -//------------------- -#endif diff --git a/deps/CImg/plugins/vrml.h b/deps/CImg/plugins/vrml.h deleted file mode 100644 index 93f5054..0000000 --- a/deps/CImg/plugins/vrml.h +++ /dev/null @@ -1,788 +0,0 @@ -/* - # - # File : vrml.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plugin that provide functions to load/save VRML files. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Greg Rami - # ( greg.rami36 (at) gmail.com ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -/*----------------------------------------------------------------------------------- - - IMPORTANT NOTE : - - You *need* to include the following lines in your own code to use this plugin : - - #include - #include - #include - #include - -------------------------------------------------------------------------------------*/ - -#ifndef cimg_plugin_vrml -#define cimg_plugin_vrml - -//! Load a 3d object from a .VRML file. -template -CImg& load_vrml(const char *const filename, CImgList& primitives, CImgList& colors) { - return _load_vrml(0,filename,primitives,colors); -} - -//! Load a 3d object from a .VRML file. -template -static CImg get_load_vrml(const char *const filename, CImgList& primitives, CImgList& colors) { - return CImg().load_vrml(filename,primitives,colors); -} - -//! Load a 3d object from a .VRML file. -template -CImg& load_vrml(std::FILE *const file, CImgList& primitives, CImgList& colors) { - return _load_vrml(file,0,primitives,colors); -} - -//! Load a 3d object from a .VRML file. -template -static CImg get_load_vrml(std::FILE *const file, CImgList& primitives, CImgList& colors) { - return CImg().load_vrml(file,primitives,colors); -} - -//! Load a 3d object from a .VRML file (internal). -template -CImg& _load_vrml(std::FILE *const file, const char *const filename,CImgList& primitives, CImgList& colors) { - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "load_vrml() : Specified filename is (null).", - cimg_instance); - std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); - - char line[1024] = { 0 }; - int err; - - // Skip comments, and read the first node. - do { err = std::fscanf(nfile,"%65535[^\n] ",line); } while (!err || (err==1 && *line=='#')); - - // Check for a first valid vrml valid node. - if (cimg::strncasecmp(line,"Shape",5) && - cimg::strncasecmp(line,"Transform",9) && - cimg::strncasecmp(line,"NavigationInfo",14) && - cimg::strncasecmp(line,"Billboard",9)) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_vrml() : VRML nodes not found in file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - } - - // Look for the Shape node (as we do not manage the treatment for the other nodes yet). - if (cimg::strncasecmp(line,"Shape",5)) { - while (cimg::strncasecmp(line,"Shape",5) && !std::feof(nfile)) err = std::fscanf(nfile,"%1023[^\n] ",line); - if (std::feof(nfile)) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_vrml() : Shape node not found in file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - } - } - - // Look for either geometry or appearance node. - while (cimg::strncasecmp(line,"geometry",8) && cimg::strncasecmp(line,"appearance",10) && !std::feof(nfile)) err = std::fscanf(nfile,"%1023[^\n] ",line); - if (std::feof(nfile)) { // If none of these nodes are defined. - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_vrml() : Geometry and appearance nodes not found in file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - } - - std::vector listePoints; // Intermediate list containing the points of the whole object. - primitives.assign(); - colors.assign(); - int nbPointsTotal = 0, nbPrimitives = 0; // Count the number of points of the whole object and the number of primitives. - float r = 0.78f, g = 0.78f, b = 0.78f; // RGB level of the object, the object is gray by default. - bool colorDefined = true, multipleColors = false, textureTest = false; // Boolean used to know if a color is defined for an object, if this object has multiple colors or if the object has a texture - char textureFile[1024] = { 0 }; // Variable containing the name of the image used as a texture - - while (!std::feof(nfile)) { - char type[1024] = { 0 }, textureFileTemp[1024] = { 0 }; - colorDefined = true; - if (!cimg::strncasecmp(line,"geometry",8)) { // We are at the geometry node - std::sscanf(line,"geometry %s",type); // We are looking for the type of geometry to draw - const CImg coords = CImg::empty(); // CImg used for the texturization of an object - CImgList colorsTextured; // CImgList used for the texturization of the color of an object - CImgList primitivesTemp; // Intermediate CImgList used to update the primitives of the whole object - - if (!cimg::strncasecmp(type,"Box",3)) { // If the object to draw is a box - while (cimg::strncasecmp(line,"size",4) && !std::feof(nfile)) // We are looking for the size of the box - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if (std::feof(nfile)) { // If no size is specified - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_vrml() : size of box not defined in file '%s'.", - cimg_instance, filename?filename:"(FILE*)"); - } - - float X = 0, Y = 0, Z = 0; // The width, height and depth of the box - if ((err = std::sscanf(line,"size %f %f %f[^\n] ",&X,&Y,&Z))!=3 && (err = std::sscanf(line,"size %f,%f,%f[^\n] ",&X,&Y,&Z))!=3) { - if (!file) cimg::fclose(nfile); - throw CImgIOException(_cimg_instance - "load_vrml() : Failed to read box size in file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - } - const CImg pointsTemp = CImg::box3d(primitivesTemp,(T)X,(T)Y,(T)Z); // We generate the primitives and the points of the box - - nbPrimitives = primitivesTemp.size(); // We save the number of primitives of the object - - if (textureTest) { // If the object has a texture - const CImg texture(textureFile); // We put the image used as a texture into a CImg object - colorsTextured.insert(primitivesTemp.size(),CImg::vector(0,50,250)); // We initialize the colorsTextured list - pointsTemp.texturize_object3d(primitivesTemp,colorsTextured,texture,coords); // We texturize the object - nbPrimitives = 0; - } - - if(nbPointsTotal) { // If there are already some objects in the scene - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<4;i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; // We shift the indices in the primitives to designate the right points - } - } - primitives.push_back(primitivesTemp); // We add the primitives of the box to the general primitives variable - for(int i=0;i<(int)pointsTemp.size()/3;++i) { // We add the points into the temporary list in the right order - listePoints.push_back((T)pointsTemp.at(i)); - listePoints.push_back((T)pointsTemp.at(i+8)); - listePoints.push_back((T)pointsTemp.at(i+16)); - } - nbPointsTotal += pointsTemp.size()/3; // We increase the number of points of the whole object - } - else if(!cimg::strncasecmp(type,"Sphere",6)) { // If the object to draw is a sphere - while(cimg::strncasecmp(line,"radius",6) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : radius of sphere not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - float R = 0; - if ((err = std::sscanf(line,"radius %f[^\n] ",&R))!=1) { // We get the radius of the sphere - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read sphere radius in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - const CImg pointsTemp = CImg::sphere3d(primitivesTemp,(T)R); // Compute the necessary points and primitives for a sphere of radius R - - nbPrimitives = primitivesTemp.size(); // We get the number of primitives to used on the attribution of a color, in case no specific color is defined - - if(textureTest) { // If the object has a texture - const CImg texture(textureFile); // We put the image used as a texture into a CImg object - colorsTextured.insert(primitivesTemp.size(),CImg::vector(0,50,250)); // We initialize the colorsTextured list - pointsTemp.texturize_object3d(primitivesTemp,colorsTextured,texture,coords); // We texturize the object - nbPrimitives = 0; // We set to 0 because there is no color to use - } - - if(nbPointsTotal) { // If there are already some objects in the scene - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<3;i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; - } - } - - primitives.push_back(primitivesTemp); - for(int i=0;i<(int)pointsTemp.size()/3;++i) { - listePoints.push_back((T)pointsTemp.at(i)); - listePoints.push_back((T)pointsTemp.at(i+pointsTemp.size()/3)); - listePoints.push_back((T)pointsTemp.at(i+2*pointsTemp.size()/3)); - } - nbPointsTotal += pointsTemp.size()/3; - } - else if(!cimg::strncasecmp(type,"Cone",4)) { // If the object to draw is a cone - while(cimg::strncasecmp(line,"bottomRadius",12) && !std::feof(nfile) && cimg::strncasecmp(line,"height",6)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - float R = 0, H = 0; - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bottom radius and height of cone not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - else if(!cimg::strncasecmp(line,"bottomRadius",12)) { // We find the bottom radius of the cone first - if ((err = std::sscanf(line,"bottomRadius %f[^\n] ",&R))!=1) { // We get the radius into the variable R - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cone bottomRadius in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - while(!std::feof(nfile) && cimg::strncasecmp(line,"height",6)) // We look for the height of the cone - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : height of cone not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - if ((err = std::sscanf(line,"height %f[^\n] ",&H))!=1) { // We get the height into the variable H - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cone height in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - } - else { // We find the height of the cone first - if ((err = std::sscanf(line,"height %f[^\n] ",&H))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cone height in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - while(!std::feof(nfile) && cimg::strncasecmp(line,"bottomRadius",12)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bottom radius of cone not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - if ((err = std::sscanf(line,"bottomRadius %f[^\n] ",&R))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cone bottom radius in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - } - const CImg pointsTemp = CImg::cone3d(primitivesTemp,(T)R,(T)H); // Compute the necessary points and primitives for a cone of radius R and height H - - nbPrimitives = primitivesTemp.size(); - - if(textureTest) { // If the object has a texture - const CImg texture(textureFile); // We put the image used as a texture into a CImg object - colorsTextured.insert(primitivesTemp.size(),CImg::vector(0,50,250)); // We initialize the colorsTextured list - pointsTemp.texturize_object3d(primitivesTemp,colorsTextured,texture,coords); // We texturize the object - nbPrimitives = 0; - } - - if(nbPointsTotal) { - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<3;i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; - } - } - - primitives.push_back(primitivesTemp); - for(int i=0;i<(int)pointsTemp.size()/3;++i) { - listePoints.push_back((T)pointsTemp.at(i)); - listePoints.push_back((T)pointsTemp.at(i+pointsTemp.size()/3)); - listePoints.push_back((T)pointsTemp.at(i+2*pointsTemp.size()/3)); - } - nbPointsTotal += pointsTemp.size()/3; - } - else if(!cimg::strncasecmp(type,"Cylinder",8)) { // If the object to draw is a cylinder - while(cimg::strncasecmp(line,"radius",6) && !std::feof(nfile) && cimg::strncasecmp(line,"height",6)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - float R = 0, H = 0; - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : radius or height of cylinder not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - else if(!cimg::strncasecmp(line,"radius",6)) { // If we find the radius first - if ((err = std::sscanf(line,"radius %f[^\n] ",&R))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cylinder radius in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - while(!std::feof(nfile) && cimg::strncasecmp(line,"height",6)) // We now look for the height of the cylinder - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : height of cylinder not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - if ((err = std::sscanf(line,"height %f[^\n] ",&H))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cylinder height in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - } - else { // If we find the height first - if ((err = std::sscanf(line,"height %f[^\n] ",&H))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cylinder height in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - while(!std::feof(nfile) && cimg::strncasecmp(line,"radius",6))// We now look for the radius of the cylinder - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : radius of cylinder not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - if ((err = std::sscanf(line,"radius %f[^\n] ",&R))!=1) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : Failed to read cylinder radius in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - } - const CImg pointsTemp = CImg::cylinder3d(primitivesTemp,(T)R,(T)H); // Compute the necessary points and primitives for a cylinder of radius R and height H - - if(textureTest) { // If the object has a texture - const CImg texture(textureFile); // We put the image used as a texture into a CImg object - colorsTextured.insert(primitivesTemp.size(),CImg::vector(0,50,250)); // We initialize the colorsTextured list - pointsTemp.texturize_object3d(primitivesTemp,colorsTextured,texture,coords); // We texturize the object - nbPrimitives = 0; - } - - nbPrimitives = primitivesTemp.size(); - - if(nbPointsTotal) { - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<3;i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; - } - } - - primitives.push_back(primitivesTemp); - for(int i=0;i<(int)pointsTemp.size()/3;++i) { - listePoints.push_back((T)pointsTemp.at(i)); - listePoints.push_back((T)pointsTemp.at(i+pointsTemp.size()/3)); - listePoints.push_back((T)pointsTemp.at(i+2*pointsTemp.size()/3)); - } - nbPointsTotal += pointsTemp.size()/3; - } - else if(!cimg::strncasecmp(type,"PointSet",8)) { // If the object to draw is a set of points - while(cimg::strncasecmp(line,"point [",7) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : points of pointSet node not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - err = std::fscanf(nfile,"%1023[^\n] ",line); - int nbPoints = 0; - - while(cimg::strncasecmp(line,"]",1) && !std::feof(nfile)) { // while we did not get all the points and while we are not at the end of the file - float X=0,Y=0,Z=0; - if ((err = std::sscanf(line,"%f %f %f,[^\n] ",&X,&Y,&Z))==3 || (err = std::sscanf(line,"%f,%f,%f,[^\n] ",&X,&Y,&Z))==3) { - // We get the coordinates of all the points and store them into a list of points - listePoints.push_back((T)X); - listePoints.push_back((T)Y); - listePoints.push_back((T)Z); - ++nbPoints; - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bad structure of pointSet node in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - primitivesTemp.assign(); - - for(int i=0;i temp(1,1,1,1,(tf)i); - primitivesTemp.push_back(temp); - } - - if(nbPointsTotal) { - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<(int)primitivesTemp(j).size();i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; - } - } - nbPrimitives = primitivesTemp.size(); - - primitives.push_back(primitivesTemp); - - nbPointsTotal += nbPoints; - } - else if(!cimg::strncasecmp(type,"IndexedLineSet",14) || !cimg::strncasecmp(type,"IndexedFaceSet",14)) { // If the object to draw is a set of lines or a set of faces - while(cimg::strncasecmp(line,"point [",7) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : points of IndexedSet node not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - err = std::fscanf(nfile,"%1023[^\n] ",line); - int nbPoints = 0; - while(cimg::strncasecmp(line,"]",1) && !std::feof(nfile)) { // As long as there are points defined we add them to the list - float X=0,Y=0,Z=0; - if ((err = std::sscanf(line,"%f %f %f,[^\n] ",&X,&Y,&Z))==3 || (err = std::sscanf(line,"%f,%f,%f,[^\n] ",&X,&Y,&Z))==3) { - // We get the coordinates of the points into a list of points - listePoints.push_back((T)X); - listePoints.push_back((T)Y); - listePoints.push_back((T)Z); - ++nbPoints; - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bad structure of point vector node in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - primitivesTemp.assign(); - - while(cimg::strncasecmp(line,"coordIndex [",12) && !std::feof(nfile)) // We are looking for the index of the points - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : coordIndex not furnished for IndexedSet node in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - err = std::fscanf(nfile,"%1023[^\n] ",line); - - while(cimg::strncasecmp(line,"]",1) && !std::feof(nfile)) { // As long as there are indices - if(*line!='#') { - std::vector primitiveComponents; - char * pch; - pch = std::strtok (line,","); - - while (pch != NULL && std::atof(pch)!=-1) { // We extract the list of indices and store them into a vector - if(!(int)count(primitiveComponents.begin(),primitiveComponents.end(),(tf)std::atof(pch))) - primitiveComponents.push_back((tf)std::atof(pch)); - pch = std::strtok (NULL, ","); - } - CImg temp(1,primitiveComponents.size(),1,1); - - for(int i=0;i<(int)primitiveComponents.size();++i) - temp(0,i) = primitiveComponents.at(i); - primitivesTemp.push_back(temp); - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bad structure of coordIndex in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - - if(nbPointsTotal) { - for (int j=0;j<(int)primitivesTemp.size();j++) { - for(int i=0;i<(int)primitivesTemp(j).size();i++) - primitivesTemp(j).at(i) += (tf)nbPointsTotal; - } - } - - nbPrimitives = primitivesTemp.size(); - primitives.push_back(primitivesTemp); - nbPointsTotal += nbPoints; - - while(cimg::strncasecmp(line,"color [",7) && cimg::strncasecmp(line,"}",1) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bad structure of coordIndex in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - else if(!cimg::strncasecmp(line,"color [",7)) { // If there are different colors defined for each faces - multipleColors = true; - std::vector > listColors; - err = std::fscanf(nfile,"%1023[^\n] ",line); - while(cimg::strncasecmp(line,"]",1) && !std::feof(nfile)) { // We add the list of all colors defined into the vector listColors - if(*line!='#') { - if ((err = std::sscanf(line,"%f %f %f[^\n] ",&r,&g,&b))!=3) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : wrong number of color furnished in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - CImg img(3,1,1,1,(tc)(r*255),(tc)(g*255),(tc)(b*255)); - listColors.push_back(img); - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : bad structure of color in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - else { - while(cimg::strncasecmp(line,"colorIndex [",12) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : colorIndex not furnished for Color node in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - while(cimg::strncasecmp(line,"]",1) && !std::feof(nfile)) { // We add the colors at the right index into the vector colors - if(*line!='#') { - char * pch; - pch = std::strtok (line," "); - while (pch != NULL) { - int indice = std::atoi(pch); - colors.insert(CImg::vector((tc)(listColors[indice])[0],(tc)(listColors[indice])[1],(tc)(listColors[indice])[2])); - pch = std::strtok (NULL, " "); - } - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - } - } - } - else // If none of the known type of shape is defined - cimg::warn(_cimg_instance "load_vrml() : Failed to read type of geometry to draw from file '%s'.", cimg_instance,filename?filename:"(FILE*)"); - - if(textureTest) { // If the object considered is texturized - colors.push_back(colorsTextured); - *textureFile = 0; - } - while(cimg::strncasecmp(line,"appearance",10) && cimg::strncasecmp(line,"Shape",5) && !std::feof(nfile)) // We look for the node appearance or for another shape - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - if(!cimg::strncasecmp(line,"appearance",10)) { // We are at the appearance node - while(cimg::strncasecmp(line,"texture ImageTexture",20) && cimg::strncasecmp(line,"diffuseColor",12) && !std::feof(nfile)) // We are looking for a valid appearance node - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(!cimg::strncasecmp(line,"diffuseColor",12)) { // If the object as a unique diffuse color - if ((err = std::sscanf(line,"diffuseColor %f,%f,%f[^\n] ",&r,&g,&b))!=3 && (err = std::sscanf(line,"diffuseColor %f %f %f[^\n] ",&r,&g,&b))!=3) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : wrong number of color furnished in file '%s'.",cimg_instance,filename?filename:"(FILE*)"); - } - } - else if(!cimg::strncasecmp(line,"texture ImageTexture",20)) { // If there is a texture defined in the VRML file - textureTest = true; - colorDefined = false; - while(cimg::strncasecmp(line,"url",3) && !std::feof(nfile)) - err = std::fscanf(nfile,"%1023[^\n] ",line); - if(std::feof(nfile)) { - if (!file) - cimg::fclose(nfile); - throw CImgIOException(_cimg_instance "load_vrml() : texture not defined in file '%s'.",cimg_instance, filename?filename:"(FILE*)"); - } - std::sscanf(line,"url [%s][^\n] ",textureFileTemp); // We temporary put the name of the texture image into textureFileTemp - - char * pch; - pch = std::strtok (textureFileTemp,"\""); - strcpy(textureFile,pch); // We put the url of the texture image into textureFile - } - } - else if(!cimg::strncasecmp(line,"Shape",5)) // We have another shape node - textureTest = false; // We reinitialize the texture boolean - - if(nbPrimitives && colorDefined && !multipleColors && !textureTest) { // If there is only one color defined we add it to the colors CImgList or if no color is defined for an object, we add the default color - CImgList colorsTemp; - colorsTemp.insert(nbPrimitives,CImg::vector((tc)(r*255),(tc)(g*255),(tc)(b*255))); - colors.push_back(colorsTemp); - nbPrimitives = 0; - r = 0.7f; - g = 0.7f; - b = 0.7f; - } - err = std::fscanf(nfile,"%1023[^\n] ",line); - } - - assign(listePoints.size()/3,3); - cimg_forX(*this,l) { // We add the points coordinates to the calling object - (*this)(l,0) = (T)(listePoints.at(l*3)); - (*this)(l,1) = (T)(listePoints.at(l*3+1)); - (*this)(l,2) = (T)(listePoints.at(l*3+2)); - } - - if (!file) - cimg::fclose(nfile); - - return *this; -} - -//! Save VRML files. -template -const CImg& save_vrml(const char *const filename,const CImgList& primitives, const CImgList& colors, const char *const texturefile = 0) const { - return _save_vrml(0,filename,primitives,colors,texturefile); -} - -//! Save VRML files. -template -const CImg& save_vrml(std::FILE *const file,const CImgList& primitives, const CImgList& colors, const char *const texturefile = 0) const { - return _save_vrml(file,0,primitives,colors,texturefile); -} - -// Save VRML files (internal). -template -const CImg& _save_vrml(std::FILE *const file, const char *const filename,const CImgList& primitives, const CImgList& colors, const char *const texturefile) const { - - // Check that the user furnished a file to save the object and that the object is not empty. - if (!file && !filename) - throw CImgArgumentException(_cimg_instance - "save_vrml() : Specified filename is (null).", - cimg_instance); - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "save_vrml() : Empty instance, for file '%s'.", - cimg_instance,filename?filename:"(FILE*)"); - - // Check that the object we want to save is a 3D object. - CImgList opacities; - char error_message[1024] = {0}; - if (!is_object3d(primitives,colors,opacities,true,error_message)) - throw CImgInstanceException(_cimg_instance "save_vrml() : Invalid specified 3d object, for file '%s' (%s).",cimg_instance,filename?filename:"(FILE*)",error_message); - const CImg default_color(1,3,1,1,200); - - // We open the file in which we will save the 3D object. - std::FILE * nfile; - if(file) nfile = file; - else nfile = cimg::fopen(filename,"w"); - - // We use the version 2.0 of VRML to represent the object in UTF8 - std::fprintf(nfile,"#VRML V2.0 utf8\n"); - - // We copy the coordinates of all the points - std::fprintf(nfile,"Shape {\n\tgeometry IndexedFaceSet {\n\t\tcoord Coordinate {\n\t\t\tpoint [\n"); - cimg_forX(*this,i) - std::fprintf(nfile,"\t\t\t\t%f %f %f,\n",(float)((*this)(i,0)),(float)((*this)(i,1)),(float)((*this)(i,2))); - std::fprintf(nfile,"\t\t\t]\n\t\t}\n\t\tcoordIndex [\n"); - bool sameColor = true; - - float r = colors[0][0]/255.0f; - float g = colors[0][1]/255.0f; - float b = colors[0][2]/255.0f; - - std::vector listColor; - std::string listColorPerFace(""); - for(int i=0;i<(int)colors.size();++i) {// Test if the object is composed of only one color - float valR = (colors[i][0])/255.0f; - float valG = (colors[i][1])/255.0f; - float valB = (colors[i][2])/255.0f; - - if (r!=valR || g!=valG || b!=valB) { // If the object has different colors - sameColor = false; - i = colors.size(); - } - } - - cimglist_for(primitives,l) { // For each primitive - const CImg& color = l 1) g = color[1]/255.0f; - else g = r/255.0f; - if (csiz > 2) b = color[2]/255.0f; - else b = g/255.0f; - - switch (psiz) { - case 1 : - std::fprintf(nfile,"\t\t\t%u,-1\n",(unsigned int)primitives(l,0)); - break; - case 2 : - std::fprintf(nfile,"\t\t\t%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1)); - break; - case 3 : - std::fprintf(nfile,"\t\t\t%u,%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2),(unsigned int)primitives(l,1)); - break; - case 4 : - std::fprintf(nfile,"\t\t\t%u,%u,%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3),(unsigned int)primitives(l,2),(unsigned int)primitives(l,1)); - break; - case 6 : { - const unsigned int xt = (unsigned int)primitives(l,2), yt = (unsigned int)primitives(l,3); - r = color.atXY(xt,yt,0)/255.0f; - g = (csiz>1?color.atXY(xt,yt,1):r)/255.0f; - b = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"\t\t\t%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1)); - } break; - case 9 : { - const unsigned int xt = (unsigned int)primitives(l,3), yt = (unsigned int)primitives(l,4); - r = color.atXY(xt,yt,0)/255.0f; - g = (csiz>1?color.atXY(xt,yt,1):r)/255.0f; - b = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"\t\t\t%u,%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2),(unsigned int)primitives(l,1)); - } break; - case 12 : { - const unsigned int xt = (unsigned int)primitives(l,4), yt = (unsigned int)primitives(l,5); - r = color.atXY(xt,yt,0)/255.0f; - g = (csiz>1?color.atXY(xt,yt,1):r)/255.0f; - b = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; - std::fprintf(nfile,"\t\t\t%u,%u,%u,%u,-1\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3),(unsigned int)primitives(l,2),(unsigned int)primitives(l,1)); - } break; - } - if (!sameColor) { // If there are different colors we store on every loop the RGB values into the vector listColor - std::ostringstream oss; - oss << r << " " << g << " " << b << "\n"; - if (listColor.size() == 0) { - listColor.push_back(oss.str()); - listColorPerFace += "0"; // We store the indice of the color - } - else { - std::vector::iterator it; - it = find (listColor.begin(), listColor.end(), oss.str()); - std::ostringstream oss2; - if(it==listColor.end()) { - oss2 << " " << listColor.size(); - listColorPerFace += oss2.str(); - listColor.push_back(oss.str()); - } - else { - int n = 0; - for (std::vector::iterator iter = listColor.begin(); iter != it; iter++) ++n; - oss2 << " " << n; - listColorPerFace += oss2.str(); - } - } - } - } - std::fprintf(nfile,"\t\t]\n"); - - if (texturefile) // If we have a texture instead of a color - std::fprintf(nfile,"\n\t}\n\tappearance DEF theTexture Appearance {\n\t\ttexture ImageTexture {\n\t\t\turl [\"%s\"]\n\t\t}\n\t}\n}", - texturefile); - else { - if(!sameColor) { // If there are different colors we add all of them - std::fprintf(nfile,"\tcolorPerVertex FALSE\n\tcolor Color {\n\t\tcolor [\n"); - while(!listColor.empty()) { - std::fprintf(nfile,"\t\t\t%s",(listColor.back()).c_str()); - listColor.pop_back(); - } - std::fprintf(nfile,"\t\t]\n\t}\n\tcolorIndex [\n\t\t"); - std::fprintf(nfile,"%s",listColorPerFace.c_str()); - std::fprintf(nfile,"\n\t]\n\t}\n}"); - } - else { // If there is only one color we add it with the Material node - std::fprintf(nfile,"\t}\n\tappearance Appearance {\n\t\tmaterial Material {\n\t\t\tdiffuseColor %f,%f,%f\n\t\t}\n\t}\n}", - colors[0][0]/255.0f,colors[0][1]/255.0f,colors[0][2]/255.0f); - } - } - if (!file) cimg::fclose(nfile); - return *this; -} - -#endif diff --git a/deps/CImg/plugins/vtk.h b/deps/CImg/plugins/vtk.h deleted file mode 100644 index b8d742e..0000000 --- a/deps/CImg/plugins/vtk.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - # - # File : vtk.h - # ( C++ header file - CImg plug-in ) - # - # Description : CImg plugin that implements a way to save 3d scene as TK legacy file format. - # This file is a part of the CImg Library project. - # ( http://cimg.sourceforge.net ) - # - # Copyright : Haz-Edine Assemlal - # ( http://www.cim.mcgill.ca/~assemlal/ ) - # - # License : CeCILL v2.0 - # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) - # - # This software is governed by the CeCILL license under French law and - # abiding by the rules of distribution of free software. You can use, - # modify and/ or redistribute the software under the terms of the CeCILL - # license as circulated by CEA, CNRS and INRIA at the following URL - # "http://www.cecill.info". - # - # As a counterpart to the access to the source code and rights to copy, - # modify and redistribute granted by the license, users are provided only - # with a limited warranty and the software's author, the holder of the - # economic rights, and the successive licensors have only limited - # liability. - # - # In this respect, the user's attention is drawn to the risks associated - # with loading, using, modifying and/or developing or reproducing the - # software by the user in light of its specific status of free software, - # that may mean that it is complicated to manipulate, and that also - # therefore means that it is reserved for developers and experienced - # professionals having in-depth computer knowledge. Users are therefore - # encouraged to load and test the software's suitability as regards their - # requirements in conditions enabling the security of their systems and/or - # data to be ensured and, more generally, to use and operate it in the - # same conditions as regards security. - # - # The fact that you are presently reading this means that you have had - # knowledge of the CeCILL license and that you accept its terms. - # -*/ - -#ifndef cimg_plugin_vtk -#define cimg_plugin_vtk - -// Save 3D scene in legacy VTK format -/* *this: CImgList of points - * faces: CImgList of faces - * colors: CImgList of colors, - * opacities: CImgList of opacities - */ -template - CImgList& save_vtk(const char* const filename, - const CImgList& faces, - const CImgList& colors, - const CImgList::max(); - cimglist_for(colors,t) - std::fprintf(nfile,"%f %f %f %f\n", - (float)colors[t](0)/tcmax, - (float)colors[t](1)/tcmax, - (float)colors[t](2)/tcmax, - opacities[t](0)); - std::fprintf(nfile,"\n"); - - // Close file - cimg::fclose(nfile); - - return *this; -} - -#endif diff --git a/deps/CImg/resources/CImg.pc b/deps/CImg/resources/CImg.pc deleted file mode 100644 index 5c55cbd..0000000 --- a/deps/CImg/resources/CImg.pc +++ /dev/null @@ -1,8 +0,0 @@ -prefix=/usr -exec_prefix=/usr -includedir=/usr/include/CImg - -Name: CImg -Description: C++ Template Image Processing Toolkit -Version: 1.5.0 -Cflags: -I${includedir} diff --git a/deps/CImg/resources/cimg_buildpackage b/deps/CImg/resources/cimg_buildpackage deleted file mode 100755 index cc5fa48..0000000 --- a/deps/CImg/resources/cimg_buildpackage +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/bash -# -# File : cimg_buildpackage -# ( Bash script ) -# -# Description : Build .zip package file of the CImg Library, from the current CImg/ -# directory. Must be run from ../CImg -# This file is a part of the CImg Library project. -# ( http://cimg.sourceforge.net ) -# -# Usage : ./cimg_buildpackage [final] -# -# Copyright : David Tschumperle -# ( http://tschumperle.users.greyc.fr/ ) -# -# License : CeCILL v2.0 -# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. -# - -# Define release number. -RELEASE0=`grep "#define cimg_version" CImg/CImg.h | tail -c 4` -RELEASE1=`echo $RELEASE0 | head -c 1` -RELEASE2=`echo $RELEASE0 | head -c 2 | tail -c 1` -RELEASE3=`echo $RELEASE0 | head -c 3 | tail -c 1` -RELEASE=$RELEASE1.$RELEASE2.$RELEASE3 - -# Read command line options. -if [ "$1" == "final" -o "$2" == "final" ]; then SUFFIX=""; else SUFFIX=_rolling`date +%y%m%d`; fi - -# Define the different paths and filenames used in this script. -BASE_DIR=`pwd` -SRC_DIR=${BASE_DIR}/CImg -DEST_DIR=/tmp/CImg-${RELEASE}${SUFFIX} -ZIP_FILE=CImg-${RELEASE}${SUFFIX}.zip -LOG_FILE=${BASE_DIR}/LOG_`basename $DEST_DIR`.txt -rm -rf $LOG_FILE - -echo -echo " - Release number : $RELEASE$SUFFIX" -echo " - Base directory : $BASE_DIR/" -echo " - Source directory : $SRC_DIR/" -echo " - Build directory : $DEST_DIR/" -echo " - ZIP package filename : $ZIP_FILE" -echo " - LOG file : $LOG_FILE" - -# Create clean archive structure. -echo " - Create package structure." -rm -rf $DEST_DIR -mkdir $DEST_DIR -cd $SRC_DIR -cp -f CImg.h Licence_CeCILL-C_V1-en.txt Licence_CeCILL_V2-en.txt $DEST_DIR -sed s\/_cimg_version\/$RELEASE$SUFFIX\/ README.txt > $DEST_DIR/README.txt - -mkdir $DEST_DIR/examples -cd $SRC_DIR/examples -cp -f *.cpp *.m CMakeLists.txt $DEST_DIR/examples/ -sed s\/_cimg_version\/$RELEASE$SUFFIX\/ Makefile > $DEST_DIR/examples/Makefile -mkdir $DEST_DIR/examples/img -cd $SRC_DIR/examples/img -cp -f *.pgm *.ppm *.bmp *.h $DEST_DIR/examples/img/ - -mkdir $DEST_DIR/html -cd $SRC_DIR/html -cp -f *.shtml *.html *.h favicon.* $DEST_DIR/html/ -sed s\/_cimg_version\/$RELEASE\/ CImg.doxygen > $DEST_DIR/html/CImg.doxygen -mkdir $DEST_DIR/html/img -cd $SRC_DIR/html/img -cp -f *.html *.jpg *.gif *.ppm $DEST_DIR/html/img/ -mkdir $DEST_DIR/html/img/reference -cd $SRC_DIR/html/img/reference -cp -f *.jpg $DEST_DIR/html/img/reference/ - -mkdir $DEST_DIR/plugins -cd $SRC_DIR/plugins -cp -f *.h $DEST_DIR/plugins/ - -mkdir $DEST_DIR/resources -cd $SRC_DIR/resources -cp -rf *.bat $DEST_DIR/resources/ - -cd $DEST_DIR -for i in CImg.h examples/*.cpp; do - sed -e 's/ *$//' $i >/tmp/cimg_buildpackage$$ && mv /tmp/cimg_buildpackage$$ $i -done -for i in `find . -name "\#*"`; do rm -rf $i; done -for i in `find . -name "*~"`; do rm -rf $i; done -for i in `find . -name "core*"`; do rm -rf $i; done -for i in `find . -name "CVS"`; do rm -rf $i; done -for i in `find . -name ".git"`; do rm -rf $i; done -for i in `find . -name "*.plg"`; do rm -rf $i; done -for i in `find . -name "*.ncb"`; do rm -rf $i; done -for i in `find . -name "*.layout"`; do rm -rf $i; done -for i in `find . -name "*.win"`; do rm -rf $i; done -for i in `find . -name "Debug"`; do rm -rf $i; done -for i in `find . -name "Release"`; do rm -rf $i; done -for i in `find . -name "*.h"`; do col -x <$i >tmp; mv tmp $i; done -for i in `find . -name "*.cpp"`; do col -x <$i >tmp; mv tmp $i; done -for i in `find . ! -type d`; do chmod a-x $i; done -for i in `find . -name "*.sh"`; do chmod a+x $i; done -for i in `find . -name "rules"`; do chmod a+x $i; done - -# Generate Documentation with doxygen -echo " - Generate reference documentation using Doxygen." -cd $DEST_DIR/html -echo -e "\n** Log generated by 'doxygen' **\n\n">>$LOG_FILE -doxygen CImg.doxygen>>$LOG_FILE 2>&1 - -echo " - Build reference documentation in PDF format." -cd $DEST_DIR/html/latex -echo -e "\n** Log generated by 'latex' **\n\n">>$LOG_FILE -make>>$LOG_FILE 2>&1 -cp -f refman.pdf ../CImg_reference.pdf -rm -rf ../latex - -# Commit changes on GIT repository -echo " - Commit on GIT repository." -cd $SRC_DIR -git commit -a -m "-">>$LOG_FILE 2>&1 -git push - -# Create ZIP archive -echo " - Build ZIP archive file '$ZIP_FILE'." -cd $DEST_DIR/.. -rm -f $ZIP_FILE -echo -e "\n** Log generated by 'zip' **\n\n">>$LOG_FILE -zip -r -9 $ZIP_FILE `basename $DEST_DIR`>>$LOG_FILE 2>&1 - -# Clean temporary files and directories -echo " - Clean temporary files and directories." -cd $DEST_DIR/.. -mv $ZIP_FILE $BASE_DIR - -# Copy files to sourceforge server. -cd $BASE_DIR -FORGE=ronounours,cimg@frs.sourceforge.net:/home/frs/project/c/ci/cimg/ -scp ${ZIP_FILE} $DEST_DIR/README.txt $FORGE -cd $DEST_DIR/html/ -scp -r * ronounours,cimg@frs.sourceforge.net:htdocs/ - -# End of build script -echo -e " - All done, you should look at the LOG file '$LOG_FILE'.\n" diff --git a/deps/CImg/resources/compile_win_icl.bat b/deps/CImg/resources/compile_win_icl.bat deleted file mode 100644 index 62d81da..0000000 --- a/deps/CImg/resources/compile_win_icl.bat +++ /dev/null @@ -1,12 +0,0 @@ -REM ---------------------------------------------------------------- -REM -REM Script to compile CImg examples, using Intel ICL C++ Compiler. -REM -REM ---------------------------------------------------------------- - -CD ..\examples\ -SET CPPFILE=CImg_demo captcha curve_editor2d dtmri_view3d edge_explorer2d fade_images gaussian_fit1d generate_loop_macros hough_transform2d image2ascii image_registration2d image_surface3d jawbreaker mcf_levelsets2d mcf_levelsets3d odykill pde_heatflow2d pde_TschumperleDeriche2d plotter1d radon_transform2d scene3d spherical_function3d tetris tron tutorial wavelet_atrous use_draw_gradient use_nlmeans use_RGBclass use_skeleton - -FOR %%F IN (%CPPFILE%) DO ( - icl /I.. /GX /Ox %%F.cpp gdi32.lib user32.lib -) diff --git a/deps/CImg/resources/compile_win_visualcpp.bat b/deps/CImg/resources/compile_win_visualcpp.bat deleted file mode 100644 index e7efa3a..0000000 --- a/deps/CImg/resources/compile_win_visualcpp.bat +++ /dev/null @@ -1,12 +0,0 @@ -REM ---------------------------------------------------------------- -REM -REM Script to compile CImg examples, using Microsoft Visual C++. -REM -REM ---------------------------------------------------------------- - -CD ..\examples\ -SET CPPFILE=CImg_demo captcha curve_editor2d dtmri_view3d edge_explorer2d fade_images gaussian_fit1d generate_loop_macros hough_transform2d image2ascii image_registration2d image_surface3d jawbreaker mcf_levelsets2d mcf_levelsets3d odykill pde_heatflow2d pde_TschumperleDeriche2d plotter1d radon_transform2d scene3d spherical_function3d tetris tron tutorial wavelet_atrous use_draw_gradient use_nlmeans use_RGBclass use_skeleton -FOR %%F IN (%CPPFILE%) DO ( - cl /W3 /Ox /Ob2 /Oi /Ot /c /EHsc /I"%SDKPATH%\Include" /I"..\\" %%F.cpp - link /LIBPATH:"%SDKPATH%\Lib" %%F.obj user32.lib gdi32.lib shell32.lib -) diff --git a/deps/CImg/resources/debian/changelog b/deps/CImg/resources/debian/changelog deleted file mode 100644 index f52bb47..0000000 --- a/deps/CImg/resources/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -cimg (_cimg_version) unstable; urgency=low - - * Initial release - - -- David Tschumperlé Fri, 07 Jul 2010 12:04:00 +0200 diff --git a/deps/CImg/resources/debian/cimg-dev.dirs b/deps/CImg/resources/debian/cimg-dev.dirs deleted file mode 100644 index 38bfa8e..0000000 --- a/deps/CImg/resources/debian/cimg-dev.dirs +++ /dev/null @@ -1,3 +0,0 @@ -usr/include/CImg -usr/include -usr/share/CImg diff --git a/deps/CImg/resources/debian/cimg-dev.install b/deps/CImg/resources/debian/cimg-dev.install deleted file mode 100644 index aceb7ba..0000000 --- a/deps/CImg/resources/debian/cimg-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -CImg.h resources html examples plugins CHANGES.txt README.txt usr/share/CImg -CImg.h plugins usr/include/CImg -README.txt usr/share/doc/cimg-dev diff --git a/deps/CImg/resources/debian/cimg-dev.links b/deps/CImg/resources/debian/cimg-dev.links deleted file mode 100644 index 1c675ab..0000000 --- a/deps/CImg/resources/debian/cimg-dev.links +++ /dev/null @@ -1,3 +0,0 @@ -usr/include/CImg/CImg.h usr/include/CImg.h -usr/share/CImg/html usr/share/doc/cimg-dev/html - diff --git a/deps/CImg/resources/debian/compat b/deps/CImg/resources/debian/compat deleted file mode 100644 index 7ed6ff8..0000000 --- a/deps/CImg/resources/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/deps/CImg/resources/debian/control b/deps/CImg/resources/debian/control deleted file mode 100644 index fa9bf02..0000000 --- a/deps/CImg/resources/debian/control +++ /dev/null @@ -1,22 +0,0 @@ -Source: cimg -Section: math -Priority: optional -Maintainer: Sam Hocevar (Debian packages) -Uploaders: Christophe Prud'homme , François-Xavier Dupé -Build-Depends-Indep: libx11-dev -Build-Depends: debhelper (>= 5.0) -Standards-Version: 3.8.4 - -Package: cimg-dev -Depends: make | build-essential, libx11-dev, libxrandr-dev, imagemagick | graphicsmagick -Suggests: xmedcon, lapack3-dev, libmagick++9-dev, fftw3-dev -Architecture: all -Description: C++ Template Image Processing Library - The CImg Library is an open-source C++ toolkit for image processing. - It consists in a single header file 'CImg.h' providing a minimal set of C++ - classes and methods that can be used in your own sources, to load/save, - process and display images. Very portable (Unix/X11,Windows, MacOS X, FreeBSD, .. ), - efficient, easy to use, it's a pleasant library for developping image processing - algorithms in C++. - . - http://cimg.sourceforge.net diff --git a/deps/CImg/resources/debian/copyright b/deps/CImg/resources/debian/copyright deleted file mode 100644 index 6d145a6..0000000 --- a/deps/CImg/resources/debian/copyright +++ /dev/null @@ -1,1035 +0,0 @@ -This package was debianized by François-Xavier Dupé on -Tue, 18 Apr 2007. - -It was downloaded from http://cimg.sourceforge.net/ - -Upstream Author: David Tschumperlé - -Copyright (c) David Tschumperlé - -The CImg Library is distributed under two distinct licenses : the library core itself is governed by -the CeCILL-C License (LGPL-like), while all other files of the package are distributed under the CeCILL -License (GPL-compatible). Both are open source licenses, the CeCILL-C being less restrictive than the -CeCILL one. -The CImg Library source code has been registered to the APP (French Agency for the Protection of Programs) -by the INRIA, under registration number IDDN.FR.001.040004.000.S.P.2004.000.21000. - -For more information GPL and LGPL can be found in the repertory -can be found in the file `/usr/share/common-licenses' on Debian systems. - -CeCill License: - - CeCILL FREE SOFTWARE LICENSE AGREEMENT - - - Notice - -This Agreement is a Free Software license agreement that is the result -of discussions between its authors in order to ensure compliance with -the two main principles guiding its drafting: - - * firstly, compliance with the principles governing the distribution - of Free Software: access to source code, broad rights granted to - users, - * secondly, the election of a governing law, French law, with which - it is conformant, both as regards the law of torts and - intellectual property law, and the protection that it offers to - both authors and holders of the economic rights over software. - -The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) -license are: - -Commissariat à l'Energie Atomique - CEA, a public scientific, technical -and industrial research establishment, having its principal place of -business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. - -Centre National de la Recherche Scientifique - CNRS, a public scientific -and technological research establishment, having its principal place of -business at 3 rue Michel-Ange, 75794 Paris cedex 16, France. - -Institut National de Recherche en Informatique et en Automatique - -INRIA, a public scientific and technological establishment, having its -principal place of business at Domaine de Voluceau, Rocquencourt, BP -105, 78153 Le Chesnay cedex, France. - - - Preamble - -The purpose of this Free Software license agreement is to grant users -the right to modify and redistribute the software governed by this -license within the framework of an open source distribution model. - -The exercising of these rights is conditional upon certain obligations -for users so as to preserve this status for all subsequent redistributions. - -In consideration of access to the source code and the rights to copy, -modify and redistribute granted by the license, users are provided only -with a limited warranty and the software's author, the holder of the -economic rights, and the successive licensors only have limited liability. - -In this respect, the risks associated with loading, using, modifying -and/or developing or reproducing the software by the user are brought to -the user's attention, given its Free Software status, which may make it -complicated to use, with the result that its use is reserved for -developers and experienced professionals having in-depth computer -knowledge. Users are therefore encouraged to load and test the suitability -of the software as regards their requirements in conditions enabling -the security of their systems and/or data to be ensured and, more -generally, to use and operate it in the same conditions of security. -This Agreement may be freely reproduced and published, provided it is not -altered, and that no provisions are either added or removed herefrom. - -This Agreement may apply to any or all software for which the holder of -the economic rights decides to submit the use thereof to its provisions. - - - Article 1 - DEFINITIONS - -For the purpose of this Agreement, when the following expressions -commence with a capital letter, they shall have the following meaning: - -Agreement: means this license agreement, and its possible subsequent -versions and annexes. - -Software: means the software in its Object Code and/or Source Code form -and, where applicable, its documentation, "as is" when the Licensee -accepts the Agreement. - -Initial Software: means the Software in its Source Code and possibly its -Object Code form and, where applicable, its documentation, "as is" when -it is first distributed under the terms and conditions of the Agreement. - -Modified Software: means the Software modified by at least one -Contribution. - -Source Code: means all the Software's instructions and program lines to -which access is required so as to modify the Software. - -Object Code: means the binary files originating from the compilation of -the Source Code. - -Holder: means the holder(s) of the economic rights over the Initial -Software. - -Licensee: means the Software user(s) having accepted the Agreement. - -Contributor: means a Licensee having made at least one Contribution. - -Licensor: means the Holder, or any other individual or legal entity, who -distributes the Software under the Agreement. - -Contribution: means any or all modifications, corrections, translations, -adaptations and/or new functions integrated into the Software by any or -all Contributors, as well as any or all Internal Modules. - -Module: means a set of sources files including their documentation that -enables supplementary functions or services in addition to those offered -by the Software. - -External Module: means any or all Modules, not derived from the -Software, so that this Module and the Software run in separate address -spaces, with one calling the other when they are run. - -Internal Module: means any or all Module, connected to the Software so -that they both execute in the same address space. - -GNU GPL: means the GNU General Public License version 2 or any -subsequent version, as published by the Free Software Foundation Inc. - -Parties: mean both the Licensee and the Licensor. - -These expressions may be used both in singular and plural form. - - - Article 2 - PURPOSE - -The purpose of the Agreement is the grant by the Licensor to the -Licensee of a non-exclusive, transferable and worldwide license for the -Software as set forth in Article 5 hereinafter for the whole term of the -protection granted by the rights over said Software. - - - Article 3 - ACCEPTANCE - -3.1 The Licensee shall be deemed as having accepted the terms and -conditions of this Agreement upon the occurrence of the first of the -following events: - - * (i) loading the Software by any or all means, notably, by - downloading from a remote server, or by loading from a physical - medium; - * (ii) the first time the Licensee exercises any of the rights - granted hereunder. - -3.2 One copy of the Agreement, containing a notice relating to the -characteristics of the Software, to the limited warranty, and to the -fact that its use is restricted to experienced users has been provided -to the Licensee prior to its acceptance as set forth in Article 3.1 -hereinabove, and the Licensee hereby acknowledges that it has read and -understood it. - - - Article 4 - EFFECTIVE DATE AND TERM - - - 4.1 EFFECTIVE DATE - -The Agreement shall become effective on the date when it is accepted by -the Licensee as set forth in Article 3.1. - - - 4.2 TERM - -The Agreement shall remain in force for the entire legal term of -protection of the economic rights over the Software. - - - Article 5 - SCOPE OF RIGHTS GRANTED - -The Licensor hereby grants to the Licensee, who accepts, the following -rights over the Software for any or all use, and for the term of the -Agreement, on the basis of the terms and conditions set forth hereinafter. - -Besides, if the Licensor owns or comes to own one or more patents -protecting all or part of the functions of the Software or of its -components, the Licensor undertakes not to enforce the rights granted by -these patents against successive Licensees using, exploiting or -modifying the Software. If these patents are transferred, the Licensor -undertakes to have the transferees subscribe to the obligations set -forth in this paragraph. - - - 5.1 RIGHT OF USE - -The Licensee is authorized to use the Software, without any limitation -as to its fields of application, with it being hereinafter specified -that this comprises: - - 1. permanent or temporary reproduction of all or part of the Software - by any or all means and in any or all form. - - 2. loading, displaying, running, or storing the Software on any or - all medium. - - 3. entitlement to observe, study or test its operation so as to - determine the ideas and principles behind any or all constituent - elements of said Software. This shall apply when the Licensee - carries out any or all loading, displaying, running, transmission - or storage operation as regards the Software, that it is entitled - to carry out hereunder. - - - 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS - -The right to make Contributions includes the right to translate, adapt, -arrange, or make any or all modifications to the Software, and the right -to reproduce the resulting software. - -The Licensee is authorized to make any or all Contributions to the -Software provided that it includes an explicit notice that it is the -author of said Contribution and indicates the date of the creation thereof. - - - 5.3 RIGHT OF DISTRIBUTION - -In particular, the right of distribution includes the right to publish, -transmit and communicate the Software to the general public on any or -all medium, and by any or all means, and the right to market, either in -consideration of a fee, or free of charge, one or more copies of the -Software by any means. - -The Licensee is further authorized to distribute copies of the modified -or unmodified Software to third parties according to the terms and -conditions set forth hereinafter. - - - 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION - -The Licensee is authorized to distribute true copies of the Software in -Source Code or Object Code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Software is -redistributed, the Licensee allows future Licensees unhindered access to -the full Source Code of the Software by indicating how to access it, it -being understood that the additional cost of acquiring the Source Code -shall not exceed the cost of transferring the data. - - - 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE - -When the Licensee makes a Contribution to the Software, the terms and -conditions for the distribution of the resulting Modified Software -become subject to all the provisions of this Agreement. - -The Licensee is authorized to distribute the Modified Software, in -source code or object code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Modified -Software is redistributed, the Licensee allows future Licensees -unhindered access to the full source code of the Modified Software by -indicating how to access it, it being understood that the additional -cost of acquiring the source code shall not exceed the cost of -transferring the data. - - - 5.3.3 DISTRIBUTION OF EXTERNAL MODULES - -When the Licensee has developed an External Module, the terms and -conditions of this Agreement do not apply to said External Module, that -may be distributed under a separate license agreement. - - - 5.3.4 COMPATIBILITY WITH THE GNU GPL - -The Licensee can include a code that is subject to the provisions of one -of the versions of the GNU GPL in the Modified or unmodified Software, -and distribute that entire code under the terms of the same version of -the GNU GPL. - -The Licensee can include the Modified or unmodified Software in a code -that is subject to the provisions of one of the versions of the GNU GPL, -and distribute that entire code under the terms of the same version of -the GNU GPL. - - - Article 6 - INTELLECTUAL PROPERTY - - - 6.1 OVER THE INITIAL SOFTWARE - -The Holder owns the economic rights over the Initial Software. Any or -all use of the Initial Software is subject to compliance with the terms -and conditions under which the Holder has elected to distribute its work -and no one shall be entitled to modify the terms and conditions for the -distribution of said Initial Software. - -The Holder undertakes that the Initial Software will remain ruled at -least by the current license, for the duration set forth in Article 4.2. - - - 6.2 OVER THE CONTRIBUTIONS - -A Licensee who develops a Contribution is the owner of the intellectual -property rights over this Contribution as defined by applicable law. - - - 6.3 OVER THE EXTERNAL MODULES - -A Licensee who develops an External Module is the owner of the -intellectual property rights over this External Module as defined by -applicable law and is free to choose the type of agreement that shall -govern its distribution. - - - 6.4 JOINT PROVISIONS - -The Licensee expressly undertakes: - - 1. not to remove, or modify, in any manner, the intellectual property - notices attached to the Software; - - 2. to reproduce said notices, in an identical manner, in the copies - of the Software modified or not. - -The Licensee undertakes not to directly or indirectly infringe the -intellectual property rights of the Holder and/or Contributors on the -Software and to take, where applicable, vis-à-vis its staff, any and all -measures required to ensure respect of said intellectual property rights -of the Holder and/or Contributors. - - - Article 7 - RELATED SERVICES - -7.1 Under no circumstances shall the Agreement oblige the Licensor to -provide technical assistance or maintenance services for the Software. - -However, the Licensor is entitled to offer this type of services. The -terms and conditions of such technical assistance, and/or such -maintenance, shall be set forth in a separate instrument. Only the -Licensor offering said maintenance and/or technical assistance services -shall incur liability therefor. - -7.2 Similarly, any Licensor is entitled to offer to its licensees, under -its sole responsibility, a warranty, that shall only be binding upon -itself, for the redistribution of the Software and/or the Modified -Software, under terms and conditions that it is free to decide. Said -warranty, and the financial terms and conditions of its application, -shall be subject of a separate instrument executed between the Licensor -and the Licensee. - - - Article 8 - LIABILITY - -8.1 Subject to the provisions of Article 8.2, the Licensee shall be -entitled to claim compensation for any direct loss it may have suffered -from the Software as a result of a fault on the part of the relevant -Licensor, subject to providing evidence thereof. - -8.2 The Licensor's liability is limited to the commitments made under -this Agreement and shall not be incurred as a result of in particular: -(i) loss due the Licensee's total or partial failure to fulfill its -obligations, (ii) direct or consequential loss that is suffered by the -Licensee due to the use or performance of the Software, and (iii) more -generally, any consequential loss. In particular the Parties expressly -agree that any or all pecuniary or business loss (i.e. loss of data, -loss of profits, operating loss, loss of customers or orders, -opportunity cost, any disturbance to business activities) or any or all -legal proceedings instituted against the Licensee by a third party, -shall constitute consequential loss and shall not provide entitlement to -any or all compensation from the Licensor. - - - Article 9 - WARRANTY - -9.1 The Licensee acknowledges that the scientific and technical -state-of-the-art when the Software was distributed did not enable all -possible uses to be tested and verified, nor for the presence of -possible defects to be detected. In this respect, the Licensee's -attention has been drawn to the risks associated with loading, using, -modifying and/or developing and reproducing the Software which are -reserved for experienced users. - -The Licensee shall be responsible for verifying, by any or all means, -the suitability of the product for its requirements, its good working order, -and for ensuring that it shall not cause damage to either persons or -properties. - -9.2 The Licensor hereby represents, in good faith, that it is entitled -to grant all the rights over the Software (including in particular the -rights set forth in Article 5). - -9.3 The Licensee acknowledges that the Software is supplied "as is" by -the Licensor without any other express or tacit warranty, other than -that provided for in Article 9.2 and, in particular, without any warranty -as to its commercial value, its secured, safe, innovative or relevant -nature. - -Specifically, the Licensor does not warrant that the Software is free -from any error, that it will operate without interruption, that it will -be compatible with the Licensee's own equipment and software -configuration, nor that it will meet the Licensee's requirements. - -9.4 The Licensor does not either expressly or tacitly warrant that the -Software does not infringe any third party intellectual property right -relating to a patent, software or any other property right. Therefore, -the Licensor disclaims any and all liability towards the Licensee -arising out of any or all proceedings for infringement that may be -instituted in respect of the use, modification and redistribution of the -Software. Nevertheless, should such proceedings be instituted against -the Licensee, the Licensor shall provide it with technical and legal -assistance for its defense. Such technical and legal assistance shall be -decided on a case-by-case basis between the relevant Licensor and the -Licensee pursuant to a memorandum of understanding. The Licensor -disclaims any and all liability as regards the Licensee's use of the -name of the Software. No warranty is given as regards the existence of -prior rights over the name of the Software or as regards the existence -of a trademark. - - - Article 10 - TERMINATION - -10.1 In the event of a breach by the Licensee of its obligations -hereunder, the Licensor may automatically terminate this Agreement -thirty (30) days after notice has been sent to the Licensee and has -remained ineffective. - -10.2 A Licensee whose Agreement is terminated shall no longer be -authorized to use, modify or distribute the Software. However, any -licenses that it may have granted prior to termination of the Agreement -shall remain valid subject to their having been granted in compliance -with the terms and conditions hereof. - - - Article 11 - MISCELLANEOUS - - - 11.1 EXCUSABLE EVENTS - -Neither Party shall be liable for any or all delay, or failure to -perform the Agreement, that may be attributable to an event of force -majeure, an act of God or an outside cause, such as defective -functioning or interruptions of the electricity or telecommunications -networks, network paralysis following a virus attack, intervention by -government authorities, natural disasters, water damage, earthquakes, -fire, explosions, strikes and labor unrest, war, etc. - -11.2 Any failure by either Party, on one or more occasions, to invoke -one or more of the provisions hereof, shall under no circumstances be -interpreted as being a waiver by the interested Party of its right to -invoke said provision(s) subsequently. - -11.3 The Agreement cancels and replaces any or all previous agreements, -whether written or oral, between the Parties and having the same -purpose, and constitutes the entirety of the agreement between said -Parties concerning said purpose. No supplement or modification to the -terms and conditions hereof shall be effective as between the Parties -unless it is made in writing and signed by their duly authorized -representatives. - -11.4 In the event that one or more of the provisions hereof were to -conflict with a current or future applicable act or legislative text, -said act or legislative text shall prevail, and the Parties shall make -the necessary amendments so as to comply with said act or legislative -text. All other provisions shall remain effective. Similarly, invalidity -of a provision of the Agreement, for any reason whatsoever, shall not -cause the Agreement as a whole to be invalid. - - - 11.5 LANGUAGE - -The Agreement is drafted in both French and English and both versions -are deemed authentic. - - - Article 12 - NEW VERSIONS OF THE AGREEMENT - -12.1 Any person is authorized to duplicate and distribute copies of this -Agreement. - -12.2 So as to ensure coherence, the wording of this Agreement is -protected and may only be modified by the authors of the License, who -reserve the right to periodically publish updates or new versions of the -Agreement, each with a separate number. These subsequent versions may -address new issues encountered by Free Software. - -12.3 Any Software distributed under a given version of the Agreement may -only be subsequently distributed under the same version of the Agreement -or a subsequent version, subject to the provisions of Article 5.3.4. - - - Article 13 - GOVERNING LAW AND JURISDICTION - -13.1 The Agreement is governed by French law. The Parties agree to -endeavor to seek an amicable solution to any disagreements or disputes -that may arise during the performance of the Agreement. - -13.2 Failing an amicable solution within two (2) months as from their -occurrence, and unless emergency proceedings are necessary, the -disagreements or disputes shall be referred to the Paris Courts having -jurisdiction, by the more diligent Party. - - -Version 2.0 dated 2006-07-12. - -CeCill-C license: - - - CeCILL-C FREE SOFTWARE LICENSE AGREEMENT - - - Notice - -This Agreement is a Free Software license agreement that is the result -of discussions between its authors in order to ensure compliance with -the two main principles guiding its drafting: - - * firstly, compliance with the principles governing the distribution - of Free Software: access to source code, broad rights granted to - users, - * secondly, the election of a governing law, French law, with which - it is conformant, both as regards the law of torts and - intellectual property law, and the protection that it offers to - both authors and holders of the economic rights over software. - -The authors of the CeCILL-C (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) -license are: - -Commissariat à l'Energie Atomique - CEA, a public scientific, technical -and industrial research establishment, having its principal place of -business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. - -Centre National de la Recherche Scientifique - CNRS, a public scientific -and technological establishment, having its principal place of business -at 3 rue Michel-Ange, 75794 Paris cedex 16, France. - -Institut National de Recherche en Informatique et en Automatique - -INRIA, a public scientific and technological establishment, having its -principal place of business at Domaine de Voluceau, Rocquencourt, BP -105, 78153 Le Chesnay cedex, France. - - - Preamble - -The purpose of this Free Software license agreement is to grant users the -right to modify and re-use the software governed by this license. - -The exercising of this right is conditional on the obligation to make -available to the community the modifications made to the source code of the -software so as to contribute to its evolution. - -In consideration of access to the source code and the rights to copy, -modify and redistribute granted by the license, users are provided only -with a limited warranty and the software's author, the holder of the -economic rights, and the successive licensors only have limited liability. - -In this respect, the risks associated with loading, using, modifying -and/or developing or reproducing the software by the user are brought to -the user's attention, given its Free Software status, which may make it -complicated to use, with the result that its use is reserved for -developers and experienced professionals having in-depth computer -knowledge. Users are therefore encouraged to load and test the suitability -of the software as regards their requirements in conditions enabling the -security of their systems and/or data to be ensured and, more generally, to -use and operate it in the same conditions of security. This Agreement may be -freely reproduced and published, provided it is not altered, and that no -provisions are either added or removed herefrom. - -This Agreement may apply to any or all software for which the holder of -the economic rights decides to submit the use thereof to its provisions. - - - Article 1 - DEFINITIONS - -For the purpose of this Agreement, when the following expressions -commence with a capital letter, they shall have the following meaning: - -Agreement: means this license agreement, and its possible subsequent -versions and annexes. - -Software: means the software in its Object Code and/or Source Code form -and, where applicable, its documentation, "as is" when the Licensee -accepts the Agreement. - -Initial Software: means the Software in its Source Code and possibly its -Object Code form and, where applicable, its documentation, "as is" when -it is first distributed under the terms and conditions of the Agreement. - -Modified Software: means the Software modified by at least one Integrated -Contribution. - -Source Code: means all the Software's instructions and program lines to -which access is required so as to modify the Software. - -Object Code: means the binary files originating from the compilation of -the Source Code. - -Holder: means the holder(s) of the economic rights over the Initial -Software. - -Licensee: means the Software user(s) having accepted the Agreement. - -Contributor: means a Licensee having made at least one Integrated -Contribution. - -Licensor: means the Holder, or any other individual or legal entity, who -distributes the Software under the Agreement. - -Integrated Contribution: means any or all modifications, corrections, -translations, adaptations and/or new functions integrated into the Source -Code by any or all Contributors. - -Related Module: means a set of sources files including their documentation -that, without modification to the Source Code, enables supplementary -functions or services in addition to those offered by the Software. - -Derivative Software: means any combination of the Software, modified or not, -and of a Related Module. - -Parties: mean both the Licensee and the Licensor. - -These expressions may be used both in singular and plural form. - - - Article 2 - PURPOSE - -The purpose of the Agreement is the grant by the Licensor to the -Licensee of a non-exclusive, transferable and worldwide license for the -Software as set forth in Article 5 hereinafter for the whole term of the -protection granted by the rights over said Software. - - - Article 3 - ACCEPTANCE - -3.1 The Licensee shall be deemed as having accepted the terms and -conditions of this Agreement upon the occurrence of the first of the -following events: - - * (i) loading the Software by any or all means, notably, by - downloading from a remote server, or by loading from a physical - medium; - * (ii) the first time the Licensee exercises any of the rights - granted hereunder. - -3.2 One copy of the Agreement, containing a notice relating to the -characteristics of the Software, to the limited warranty, and to the -fact that its use is restricted to experienced users has been provided -to the Licensee prior to its acceptance as set forth in Article 3.1 -hereinabove, and the Licensee hereby acknowledges that it has read and -understood it. - - - Article 4 - EFFECTIVE DATE AND TERM - - - 4.1 EFFECTIVE DATE - -The Agreement shall become effective on the date when it is accepted by -the Licensee as set forth in Article 3.1. - - - 4.2 TERM - -The Agreement shall remain in force for the entire legal term of -protection of the economic rights over the Software. - - - Article 5 - SCOPE OF RIGHTS GRANTED - -The Licensor hereby grants to the Licensee, who accepts, the following -rights over the Software for any or all use, and for the term of the -Agreement, on the basis of the terms and conditions set forth hereinafter. - -Besides, if the Licensor owns or comes to own one or more patents -protecting all or part of the functions of the Software or of its -components, the Licensor undertakes not to enforce the rights granted by -these patents against successive Licensees using, exploiting or -modifying the Software. If these patents are transferred, the Licensor -undertakes to have the transferees subscribe to the obligations set -forth in this paragraph. - - - 5.1 RIGHT OF USE - -The Licensee is authorized to use the Software, without any limitation -as to its fields of application, with it being hereinafter specified -that this comprises: - - 1. permanent or temporary reproduction of all or part of the Software - by any or all means and in any or all form. - 2. loading, displaying, running, or storing the Software on any or - all medium. - 3. entitlement to observe, study or test its operation so as to - determine the ideas and principles behind any or all constituent - elements of said Software. This shall apply when the Licensee - carries out any or all loading, displaying, running, transmission - or storage operation as regards the Software, that it is entitled - to carry out hereunder. - - - 5.2 RIGHT OF MODIFICATION - -The right of modification includes the right to translate, adapt, arrange, -or make any or all modifications to the Software, and the right to -reproduce the resulting Software. It includes, in particular, the right -to create a Derivative Software. - -The Licensee is authorized to make any or all modification to the -Software provided that it includes an explicit notice that it is the -author of said modification and indicates the date of the creation thereof. - - - 5.3 RIGHT OF DISTRIBUTION - -In particular, the right of distribution includes the right to publish, -transmit and communicate the Software to the general public on any or -all medium, and by any or all means, and the right to market, either in -consideration of a fee, or free of charge, one or more copies of the -Software by any means. - -The Licensee is further authorized to distribute copies of the modified -or unmodified Software to third parties according to the terms and -conditions set forth hereinafter. - - - 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION - -The Licensee is authorized to distribute true copies of the Software in -Source Code or Object Code form, provided that said distribution -complies with all the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - - 2. a notice relating to the limitation of both the Licensor's - warranty and liability as set forth in Articles 8 and 9, - -and that, in the event that only the Object Code of the Software is -redistributed, the Licensee allows effective access to the full Source Code -of the Software at a minimum during the entire period of its distribution -of the Software, it being understood that the additional cost of acquiring -the Source Code shall not exceed the cost of transferring the data. - - - 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE - -When the Licensee makes an Integrated Contribution to the Software, the terms -and conditions for the distribution of the resulting Modified Software become -subject to all the provisions of this Agreement. - -The Licensee is authorized to distribute the Modified Software, in source -code or object code form, provided that said distribution complies with all -the provisions of the Agreement and is accompanied by: - - 1. a copy of the Agreement, - 2. a notice relating to the limitation of both the Licensor's warranty and - liability as set forth in Articles 8 and 9, - -and that, in the event that only the object code of the Modified Software is -redistributed, the Licensee allows effective access to the full source code -of the Modified Software at a minimum during the entire period of its -distribution of the Modified Software, it being understood that the -additional cost of acquiring the source code shall not exceed the cost of -transferring the data. - - 5.3.3 DISTRIBUTION OF DERIVATIVE SOFTWARE - -When the Licensee creates Derivative Software, this Derivative Software may -be distributed under a license agreement other than this Agreement, subject -to compliance with the requirement to include a notice concerning the rights -over the Software as defined in Article 6.4. In the event the creation of the -Derivative Software required modification of the Source Code, the Licensee -undertakes that: - - 1. the resulting Modified Software will be governed by this Agreement, - 2. the Integrated Contributions in the resulting Modified Software will be - clearly identified and documented, - 3. the Licensee will allow effective access to the source code of the - Modified Software, at a minimum during the entire period of - distribution of the Derivative Software, such that such modifications - may be carried over in a subsequent version of the Software; it being - understood that the additional cost of purchasing the source code of - the Modified Software shall not exceed the cost of transferring the - data. - - - 5.3.4 COMPATIBILITY WITH THE CeCILL LICENSE - -When a Modified Software contains an Integrated Contribution subject to the -CeCill license agreement, or when a Derivative Software contains a Related -Module subject to the CeCill license agreement, the provisions set forth in -the third item of Article 6.4 are optional. - - - Article 6 - INTELLECTUAL PROPERTY - - - 6.1 OVER THE INITIAL SOFTWARE - -The Holder owns the economic rights over the Initial Software. Any or -all use of the Initial Software is subject to compliance with the terms -and conditions under which the Holder has elected to distribute its work -and no one shall be entitled to modify the terms and conditions for the -distribution of said Initial Software. - -The Holder undertakes that the Initial Software will remain ruled at -least by the current license, for the duration set forth in Article 4.2. - - - 6.2 OVER THE INTEGRATED CONTRIBUTIONS - -A Licensee who develops an Integrated Contribution is the owner of the -intellectual property rights over this Contribution as defined by -applicable law. - - - 6.3 OVER THE RELATED MODULES - -A Licensee who develops an Related Module is the owner of the -intellectual property rights over this Related Module as defined by -applicable law and is free to choose the type of agreement that shall -govern its distribution under the conditions defined in Article 5.3.3. - - - 6.4 NOTICE OF RIGHTS - -The Licensee expressly undertakes: - - 1. not to remove, or modify, in any manner, the intellectual property - notices attached to the Software; - 2. to reproduce said notices, in an identical manner, in the copies - of the Software modified or not; - 3. to ensure that use of the Software, its intellectual property - notices and the fact that it is governed by the Agreement is - indicated in a text that is easily accessible, specifically from - the interface of any Derivative Software. - -The Licensee undertakes not to directly or indirectly infringe the -intellectual property rights of the Holder and/or Contributors on the -Software and to take, where applicable, vis-à-vis its staff, any and all -measures required to ensure respect of said intellectual property rights -of the Holder and/or Contributors. - - - Article 7 - RELATED SERVICES - -7.1 Under no circumstances shall the Agreement oblige the Licensor to -provide technical assistance or maintenance services for the Software. - -However, the Licensor is entitled to offer this type of services. The -terms and conditions of such technical assistance, and/or such -maintenance, shall be set forth in a separate instrument. Only the -Licensor offering said maintenance and/or technical assistance services -shall incur liability therefor. - -7.2 Similarly, any Licensor is entitled to offer to its licensees, under -its sole responsibility, a warranty, that shall only be binding upon -itself, for the redistribution of the Software and/or the Modified -Software, under terms and conditions that it is free to decide. Said -warranty, and the financial terms and conditions of its application, -shall be subject of a separate instrument executed between the Licensor -and the Licensee. - - - Article 8 - LIABILITY - -8.1 Subject to the provisions of Article 8.2, the Licensee shall be -entitled to claim compensation for any direct loss it may have suffered -from the Software as a result of a fault on the part of the relevant -Licensor, subject to providing evidence thereof. - -8.2 The Licensor's liability is limited to the commitments made under -this Agreement and shall not be incurred as a result of in particular: -(i) loss due the Licensee's total or partial failure to fulfill its -obligations, (ii) direct or consequential loss that is suffered by the -Licensee due to the use or performance of the Software, and (iii) more -generally, any consequential loss. In particular the Parties expressly -agree that any or all pecuniary or business loss (i.e. loss of data, -loss of profits, operating loss, loss of customers or orders, -opportunity cost, any disturbance to business activities) or any or all -legal proceedings instituted against the Licensee by a third party, -shall constitute consequential loss and shall not provide entitlement to -any or all compensation from the Licensor. - - - Article 9 - WARRANTY - -9.1 The Licensee acknowledges that the scientific and technical -state-of-the-art when the Software was distributed did not enable all -possible uses to be tested and verified, nor for the presence of -possible defects to be detected. In this respect, the Licensee's -attention has been drawn to the risks associated with loading, using, -modifying and/or developing and reproducing the Software which are -reserved for experienced users. - -The Licensee shall be responsible for verifying, by any or all means, -the suitability of the product for its requirements, its good working order, -and for ensuring that it shall not cause damage to either persons or -properties. - -9.2 The Licensor hereby represents, in good faith, that it is entitled -to grant all the rights over the Software (including in particular the -rights set forth in Article 5). - -9.3 The Licensee acknowledges that the Software is supplied "as is" by -the Licensor without any other express or tacit warranty, other than -that provided for in Article 9.2 and, in particular, without any warranty -as to its commercial value, its secured, safe, innovative or relevant -nature. - -Specifically, the Licensor does not warrant that the Software is free -from any error, that it will operate without interruption, that it will -be compatible with the Licensee's own equipment and software -configuration, nor that it will meet the Licensee's requirements. - -9.4 The Licensor does not either expressly or tacitly warrant that the -Software does not infringe any third party intellectual property right -relating to a patent, software or any other property right. Therefore, -the Licensor disclaims any and all liability towards the Licensee -arising out of any or all proceedings for infringement that may be -instituted in respect of the use, modification and redistribution of the -Software. Nevertheless, should such proceedings be instituted against -the Licensee, the Licensor shall provide it with technical and legal -assistance for its defense. Such technical and legal assistance shall be -decided on a case-by-case basis between the relevant Licensor and the -Licensee pursuant to a memorandum of understanding. The Licensor -disclaims any and all liability as regards the Licensee's use of the -name of the Software. No warranty is given as regards the existence of -prior rights over the name of the Software or as regards the existence -of a trademark. - - - Article 10 - TERMINATION - -10.1 In the event of a breach by the Licensee of its obligations -hereunder, the Licensor may automatically terminate this Agreement -thirty (30) days after notice has been sent to the Licensee and has -remained ineffective. - -10.2 A Licensee whose Agreement is terminated shall no longer be -authorized to use, modify or distribute the Software. However, any -licenses that it may have granted prior to termination of the Agreement -shall remain valid subject to their having been granted in compliance -with the terms and conditions hereof. - - - Article 11 - MISCELLANEOUS - - - 11.1 EXCUSABLE EVENTS - -Neither Party shall be liable for any or all delay, or failure to -perform the Agreement, that may be attributable to an event of force -majeure, an act of God or an outside cause, such as defective -functioning or interruptions of the electricity or telecommunications -networks, network paralysis following a virus attack, intervention by -government authorities, natural disasters, water damage, earthquakes, -fire, explosions, strikes and labor unrest, war, etc. - -11.2 Any failure by either Party, on one or more occasions, to invoke -one or more of the provisions hereof, shall under no circumstances be -interpreted as being a waiver by the interested Party of its right to -invoke said provision(s) subsequently. - -11.3 The Agreement cancels and replaces any or all previous agreements, -whether written or oral, between the Parties and having the same -purpose, and constitutes the entirety of the agreement between said -Parties concerning said purpose. No supplement or modification to the -terms and conditions hereof shall be effective as between the Parties -unless it is made in writing and signed by their duly authorized -representatives. - -11.4 In the event that one or more of the provisions hereof were to -conflict with a current or future applicable act or legislative text, -said act or legislative text shall prevail, and the Parties shall make -the necessary amendments so as to comply with said act or legislative -text. All other provisions shall remain effective. Similarly, invalidity -of a provision of the Agreement, for any reason whatsoever, shall not -cause the Agreement as a whole to be invalid. - - - 11.5 LANGUAGE - -The Agreement is drafted in both French and English and both versions -are deemed authentic. - - - Article 12 - NEW VERSIONS OF THE AGREEMENT - -12.1 Any person is authorized to duplicate and distribute copies of this -Agreement. - -12.2 So as to ensure coherence, the wording of this Agreement is -protected and may only be modified by the authors of the License, who -reserve the right to periodically publish updates or new versions of the -Agreement, each with a separate number. These subsequent versions may -address new issues encountered by Free Software. - -12.3 Any Software distributed under a given version of the Agreement -may only be subsequently distributed under the same version of the -Agreement or a subsequent version. - - - Article 13 - GOVERNING LAW AND JURISDICTION - -13.1 The Agreement is governed by French law. The Parties agree to -endeavor to seek an amicable solution to any disagreements or disputes -that may arise during the performance of the Agreement. - -13.2 Failing an amicable solution within two (2) months as from their -occurrence, and unless emergency proceedings are necessary, the -disagreements or disputes shall be referred to the Paris Courts having -jurisdiction, by the more diligent Party. - - -Version 1.0 dated 2006-07-12. diff --git a/deps/CImg/resources/debian/docs b/deps/CImg/resources/debian/docs deleted file mode 100644 index 6d10dce..0000000 --- a/deps/CImg/resources/debian/docs +++ /dev/null @@ -1 +0,0 @@ -changelog diff --git a/deps/CImg/resources/debian/rules b/deps/CImg/resources/debian/rules deleted file mode 100755 index dc2d6dc..0000000 --- a/deps/CImg/resources/debian/rules +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# GNU copyright 1997 to 1999 by Joey Hess. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 -# -# Modified in order to update the package by François-Xavier Dupé 2007 - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O3 -endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) - INSTALL_PROGRAM += -s -endif - -build: build-indep-stamp -build-indep-stamp: - #cd examples && $(MAKE) "LDFLAGS=-lm -lpthread" - #cd examples && $(MAKE) clean - #$(MAKE) doc - touch build-indep-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-arch-stamp build-indep-stamp - dh_clean - -install: - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - dh_install - -binary-indep: build install - dh_testdir - dh_testroot - dh_installchangelogs - dh_installdocs - dh_compress -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_installinit -# dh_installcron -# dh_installinfo -# dh_installman - dh_link - dh_strip - dh_fixperms -# dh_perl -# dh_python - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -# Build architecture dependant packages using the common target. -binary-arch: build install - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch diff --git a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.sln b/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.sln deleted file mode 100644 index da834dc..0000000 --- a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "project_win_visualcpp", "project_win_visualcpp.vcproj", "{9A50ACD6-B1AB-4AAF-A85C-D5E388EF024B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9A50ACD6-B1AB-4AAF-A85C-D5E388EF024B}.Debug|Win32.ActiveCfg = Debug|Win32 - {9A50ACD6-B1AB-4AAF-A85C-D5E388EF024B}.Debug|Win32.Build.0 = Debug|Win32 - {9A50ACD6-B1AB-4AAF-A85C-D5E388EF024B}.Release|Win32.ActiveCfg = Release|Win32 - {9A50ACD6-B1AB-4AAF-A85C-D5E388EF024B}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.suo b/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.suo deleted file mode 100644 index 29e3faf..0000000 Binary files a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.suo and /dev/null differ diff --git a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.vcproj b/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.vcproj deleted file mode 100644 index 0c41a96..0000000 --- a/deps/CImg/resources/project_win_visualcpp/project_win_visualcpp.vcproj +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/convnet.cc b/src/convnet.cc index aeb7499..f95e183 100644 --- a/src/convnet.cc +++ b/src/convnet.cc @@ -211,6 +211,9 @@ void ConvNet::BuildNet() { if (image_size_y <= 0) image_size_y = model_.patch_size(); if (image_size_x <= 0) image_size_x = model_.patch_size(); if (image_size_t <= 0) image_size_t = 1; + image_size_y_ = image_size_y; + image_size_x_ = image_size_x; + image_size_t_ = image_size_t; } else { image_size_y = l->incoming_edge_[0]->GetNumModulesY(); image_size_x = l->incoming_edge_[0]->GetNumModulesX(); @@ -491,7 +494,7 @@ void ConvNet::SetupDataset(const string& train_data_config_file, train_dataset_ = new DataHandler(model_.train_dataset()); if (localizer_) { train_dataset_->SetFOV(fov_size_, fov_stride_, fov_pad1_, fov_pad2_, - model_.patch_size(), num_fov_x_, num_fov_y_); + image_size_x_, num_fov_x_, num_fov_y_); // TODO: image_size_y_? } SetBatchsize(train_dataset_->GetBatchSize()); int dataset_size = train_dataset_->GetDataSetSize(); @@ -501,7 +504,7 @@ void ConvNet::SetupDataset(const string& train_data_config_file, val_dataset_ = new DataHandler(model_.valid_dataset()); if (localizer_) { val_dataset_->SetFOV(fov_size_, fov_stride_, fov_pad1_, fov_pad2_, - model_.patch_size(), num_fov_x_, num_fov_y_); + image_size_x_, num_fov_x_, num_fov_y_); // TODO: image_size_y_? } dataset_size = val_dataset_->GetDataSetSize(); val_dataset_->AllocateMemory(); @@ -812,11 +815,9 @@ void ConvNet::TimestampModel() { } void ConvNet::SetupLocalizationDisplay() { - int image_size = model_.patch_size(); - localization_display_ = new ImageDisplayer(image_size, image_size, 3, false, - "localization"); + localization_display_ = new ImageDisplayer(image_size_x_, image_size_y_, 3, false, "localization"); localization_display_->SetFOV(fov_size_, fov_stride_, fov_pad1_, fov_pad2_, - image_size, num_fov_x_, num_fov_y_); + image_size_x_, num_fov_x_, num_fov_y_); // TODO: image_size_y_? } void ConvNet::DisplayLocalization() { diff --git a/src/convnet.h b/src/convnet.h index 8e839fc..c92622b 100644 --- a/src/convnet.h +++ b/src/convnet.h @@ -168,8 +168,8 @@ class ConvNet { int max_iter_, batch_size_, current_iter_, lr_reduce_counter_; DataHandler *train_dataset_, *val_dataset_; string checkpoint_dir_, output_file_, model_name_; - ImageDisplayer displayer_; string model_filename_, timestamp_, log_file_, val_log_file_; + int image_size_x_, image_size_y_, image_size_t_; // Field of view. int fov_size_, fov_stride_, fov_pad1_, fov_pad2_; diff --git a/src/util.cc b/src/util.cc index 9030d45..66be0fe 100644 --- a/src/util.cc +++ b/src/util.cc @@ -308,51 +308,69 @@ void AddVectors(vector& a, vector& b) { // ImageDisplayer // -void DrawRectange(CImg& img, int xmin, int ymin, int xmax, int ymax, const float* color, int thickness) { - for (int i = 0; i < thickness; i++) { - img.draw_rectangle(xmin-i, ymin-i, xmax+i, ymax+i, color, 1.0, ~0U); - } -} +#include +#include +#include -ImageDisplayer::ImageDisplayer(int width, int height, int num_colors, bool show_separate, const string& title) : - width_(width), height_(height), num_colors_(num_colors), - show_separate_(show_separate), title_(title) { - disp_.set_title(title_.c_str()); +using namespace cv; + +inline void resizeOCV(Mat &img, unsigned int width, unsigned int height) { + Mat out; + resize(img, out, Size(width, height), 0, 0, INTER_LINEAR); + img = out; } -ImageDisplayer::ImageDisplayer() : - width_(0), height_(0), num_colors_(3), show_separate_(false), title_("") { +Mat image, image1, image2; + +ImageDisplayer::ImageDisplayer(int width, int height, int num_colors, bool show_separate, const string& title) : + width_(width), + height_(height), + num_colors_(num_colors), + show_separate_(show_separate), + title_(title) { } void ImageDisplayer::DisplayImage(float* data, int num_images, int image_id) { - CImg img; - CreateImage(data, num_images, image_id, img); - disp_.set_title(title_.c_str()); - img.display(disp_); + CreateImage(data, num_images, image_id, image); + namedWindow(title_.c_str(), WINDOW_AUTOSIZE); + imshow(title_.c_str(), image); + waitKey(1); } -void ImageDisplayer::CreateImage(const float* data, int num_images, int image_id, CImg& img) { +void ImageDisplayer::CreateImage(const float* data, int num_images, int image_id, Mat &image) { int num_colors_width = (int)sqrt(num_colors_); int num_colors_height = (num_colors_ + num_colors_width - 1) / num_colors_width; - int display_width = show_separate_ ? width_ * num_colors_width: width_; - int display_height = show_separate_ ? height_ * num_colors_height: height_; - int display_colors = show_separate_ ? 1 : num_colors_; - - img.assign(display_width, display_height, 1, display_colors); - img.fill(0); - float val; - for (int k = 0; k < num_colors_; k++) { - for (int i = 0; i < height_; i++) { - for (int j = 0; j < width_; j++) { - val = data[image_id + num_images * (j + width_ * (i + k * height_))]; - if (show_separate_) { - img(j + (k % num_colors_width) * width_, i + (k / num_colors_width) * height_, 0, 0) = val; - } else { - img(j, i, 0, k) = val; - } + int display_width = show_separate_ ? width_ * num_colors_width : width_; + int display_height = show_separate_ ? height_ * num_colors_height : height_; + int display_colors_type = show_separate_ ? CV_32FC1 : CV_32FC3; + + image.create(display_width, display_height, display_colors_type); + for (int k=0; k(i + off_height); + + for (int j=0; j 0) ? 1 : 0); + int num_filters_h = num_filters / num_filters_w + (((num_filters % num_filters_w) > 0) ? 1 : 0); int data_pos, row, col; - CImg img(size * num_filters_w, size * num_filters_h, 1, 3); - img.fill(0); float norm = 0; if (yuv) YUVToRGB(data, data, num_filters * size * size); for (int f = 0; f < num_filters; f++) { @@ -395,6 +411,8 @@ void ImageDisplayer::DisplayWeights(float* data, int size, int num_filters, int data[i * num_filters + f] /= norm; } } + + image.create(size * num_filters_w, size * num_filters_h, CV_32FC3); for (int f = 0; f < num_filters; f++) { for (int k = 0; k < 3; k++) { for (int h = 0; h < size; h++) { @@ -402,22 +420,29 @@ void ImageDisplayer::DisplayWeights(float* data, int size, int num_filters, int data_pos = f + num_filters * (w + size * (h + size * k)); col = w + size * (f % num_filters_w); row = h + size * (f / num_filters_w); - img(col, row, 0, k) = data[data_pos]; + + float *im = image.ptr(row); + im[3*col+(2-k)] = data[data_pos]; } } } } - const unsigned char color[] = {0, 0, 0}; - img.resize(display_size, display_size); + normalize(image, image, 0, 1, NORM_MINMAX); + + const Scalar color(0, 0, 0); + resizeOCV(image, display_size, display_size); for (int i = 0; i < num_filters_w; i++) { - int pos = (i * img.width()) / num_filters_w; - img.draw_line(pos, 0, pos, img.height(), color); + int pos = (i * image.cols/3) / num_filters_w; + line(image, Point(pos, 0), Point(pos, image.rows), color); } for (int i = 0; i < num_filters_h; i++) { - int pos = (i * img.height()) / num_filters_h; - img.draw_line(0, pos, img.width(), pos, color); + int pos = (i * image.rows) / num_filters_h; + line(image, Point(0, pos), Point(image.cols/3, pos), color); } - img.display(disp_); + + namedWindow(title_.c_str(), WINDOW_AUTOSIZE); + imshow(title_.c_str(), image); + waitKey(1); } void ImageDisplayer::SetFOV(int size, int stride, int pad1, int pad2, @@ -434,16 +459,15 @@ void ImageDisplayer::DisplayLocalization(float* data, float* preds, float* gt, i int image_id = 0; int num_fovs = num_fov_y_ * num_fov_x_; - - CImg img; - CreateImage(data, num_images, image_id, img); + + CreateImage(data, num_images, image_id, image1); const int image_size = 250; - img.resize(image_size, image_size); + resizeOCV(image1, image_size, image_size); - CImg img2 = CImg(img); + image2 = image1.clone(); - const float green[] = {0, 1, 0}; - const float blue[] = {0, 0, 1}; + const Scalar green(0, 255, 0); + const Scalar blue(0, 0, 255); float fov_x, fov_y; gt += image_id; @@ -471,11 +495,14 @@ void ImageDisplayer::DisplayLocalization(float* data, float* preds, float* gt, i int xmax_preds2 = (int)((xmax_preds + fov_x) * image_size); int ymax_preds2 = (int)((ymax_preds + fov_y) * image_size); - DrawRectange(img, xmin_gt2, ymin_gt2, xmax_gt2, ymax_gt2, green, 3); - DrawRectange(img2, xmin_preds2, ymin_preds2, xmax_preds2, ymax_preds2, blue, 3); + rectangle(image1, Point(xmin_gt2, ymin_gt2), Point(xmax_gt2, ymax_gt2), green, 3); + rectangle(image2, Point(xmin_preds2, ymin_preds2), Point(xmax_preds2, ymax_preds2), blue, 3); } - CImgList img_list(img, img2); - img_list.display(disp_); - + namedWindow("Localization1", WINDOW_AUTOSIZE); + imshow("Localization1", image1); + namedWindow("Localization2", WINDOW_AUTOSIZE); + imshow("Localization2", image2); + waitKey(1); } + diff --git a/src/util.h b/src/util.h index 4a30a52..eaeec92 100644 --- a/src/util.h +++ b/src/util.h @@ -12,9 +12,6 @@ #include "mpi.h" #endif #include -#define cimg_use_jpeg -#define cimg_use_lapack -#include "CImg/CImg.h" #include #include #include "convnet_config.pb.h" @@ -32,7 +29,6 @@ #define MPITAG_WEIGHTGRAD 11 #define MPITAG_TRAINERROR 12 -using namespace cimg_library; using namespace std; template void ReadPbtxt(const string& pbtxt_file, T& model); @@ -59,7 +55,6 @@ string GetTimeStamp(); void TimestampModelFile(const string& src_file, const string& dest_file, const string& timestamp); bool ReadLines(const string& filename, vector& lines); -void DrawRectange(CImg& img, int xmin, int ymin, int xmax, int ymax, const float* color, int thickness); // Outputs a string that describes the err_code. string GetStringError(int err_code); @@ -71,25 +66,24 @@ void AddVectors(vector& a, vector& b); // ImageDisplayer // +#include + class ImageDisplayer { - public: - ImageDisplayer(); +public: ImageDisplayer(int width, int height, int num_colors, bool show_separate, const string& name); void SetTitle(const string& title) {title_ = title;} void DisplayImage(float* data, int spacing, int image_id); - void CreateImage(const float* data, int num_images, int image_id, CImg& img); void DisplayWeights(float* data, int size, int num_filters, int display_size, bool yuv = false); void DisplayLocalization(float* data, float* preds, float* gt, int num_images); void SetFOV(int size, int stride, int pad1, int pad2, int patch_size, int num_fov_x, int num_fov_y); - + +private: + void CreateImage(const float* data, int num_images, int image_id, cv::Mat &image); static void YUVToRGB(const float* yuv, float* rgb, int spacing); static void RGBToYUV(const float* rgb, float* yuv, int spacing); - private: - - CImgDisplay disp_; int width_, height_, num_colors_; bool show_separate_; string title_; @@ -98,5 +92,4 @@ class ImageDisplayer { int num_fov_x_, num_fov_y_; }; - #endif